123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include "Util.h"
- #include "CFTTFileSystem_PAK.h"
- #include "memctrl.h"
- #include "XMATH.h"
- #include "TGame.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;
- TPoint3D var_38;
- TPoint3D var_44;
- TPoint3D var_50;
- TPoint3D var_5C;
- TPoint3D var_68;
- int var_6C;
- int var_70;
- var_2C.point_0.dx_0 = tp3d0.point_0.dx_0;
- var_38.point_0.dx_0 = tp3d1.point_0.dx_0;
- var_2C.point_0.dy_4 = tp3d0.point_0.dy_4;
- var_2C.dz_8 = tp3d0.dz_8;
- var_38.point_0.dy_4 = tp3d1.point_0.dy_4;
- var_38.dz_8 = tp3d1.dz_8;
- var_44.point_0.dy_4 = tp3d2.point_0.dy_4;
- var_44.dz_8 = tp3d2.dz_8;
- var_50.point_0.dx_0 = tp3d3.point_0.dx_0;
- var_50.point_0.dy_4 = tp3d3.point_0.dy_4;
- var_50.dz_8 = tp3d3.dz_8;
- var_44.point_0.dx_0 = tp3d2.point_0.dx_0;
- var_5C.point_0.dx_0 = (tp3d0.point_0.dx_0 + tp3d1.point_0.dx_0) / 2;
- var_5C.point_0.dy_4 = (tp3d0.point_0.dy_4 + tp3d1.point_0.dy_4) / 2;
- var_5C.dz_8 = (tp3d1.dz_8 + tp3d0.dz_8) / 2;
- var_68.point_0.dy_4 = (tp3d3.point_0.dy_4 + tp3d2.point_0.dy_4) / 2;
- var_68.point_0.dx_0 = (tp3d3.point_0.dx_0 + tp3d2.point_0.dx_0) / 2;
- var_68.dz_8 = (tp3d3.dz_8 + tp3d2.dz_8) / 2;
- int r5_i = i5 + i4 + (i7 + i6) / 2;
- // 0017882E
- if (XMATH_Distance3D(&var_5C, &var_68) <= r5_i) {
- // 00178832
- // 00178846
- if (XMATH_LineLineDistance(&var_2C, &var_38, &var_44, &var_50, &var_6C, &var_70) < i4 + i5) {
- // 0017884A
- 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;
- 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;
- tGame.mTMath_6734.field_370.dz_8 = var_2C.dz_8 + var_6C * (var_38.dz_8 - var_2C.dz_8) / 4096;
- 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;
- 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;
- tGame.mTMath_6734.field_37C.dz_8 = var_44.dz_8 + var_70 * (var_50.dz_8 - var_44.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;
- }
- //-------------------------------------------------------------------------------------------------
|