mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 11:52:32 +01:00
222 lines
5.0 KiB
C
222 lines
5.0 KiB
C
#include "THISDUST.H"
|
|
#include "BCOLL3D.H"
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ PointFaceCheck(struct _CAR_DATA *cp0 /*$t7*/, struct _CAR_DATA *cp1 /*$t8*/, int i /*$t9*/, struct TestResult *least /*$a3*/, int nSign /*stack 16*/)
|
|
// line 83, offset 0x0001c160
|
|
/* begin block 1 */
|
|
// Start line: 84
|
|
// Start offset: 0x0001C160
|
|
// Variables:
|
|
// int k; // $t5
|
|
// struct VECTOR normal; // stack offset -56
|
|
// struct VECTOR diff; // stack offset -40
|
|
// struct VECTOR point; // stack offset -24
|
|
// int depth; // $t0
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 106
|
|
// Start offset: 0x0001C250
|
|
// Variables:
|
|
// int partialDepth; // $v1
|
|
/* end block 1.1 */
|
|
// End offset: 0x0001C2EC
|
|
// End Line: 119
|
|
/* end block 1 */
|
|
// End offset: 0x0001C380
|
|
// End Line: 130
|
|
|
|
/* begin block 2 */
|
|
// Start line: 166
|
|
/* end block 2 */
|
|
// End Line: 167
|
|
|
|
void PointFaceCheck(_CAR_DATA *cp0, _CAR_DATA *cp1, int i, TestResult *least, int nSign)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
short *psVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
short *psVar7;
|
|
SVECTOR_NOPAD *pSVar8;
|
|
int iVar9;
|
|
int local_38;
|
|
int local_34;
|
|
int local_30;
|
|
int local_18;
|
|
int local_14;
|
|
int local_10;
|
|
|
|
local_18 = (cp1->hd).oBox.location.vx;
|
|
local_38 = (int)(cp0->hd).where.m[i];
|
|
psVar2 = (cp0->hd).where.m + i;
|
|
local_14 = (cp1->hd).oBox.location.vy;
|
|
local_34 = (int)psVar2[3];
|
|
local_10 = (cp1->hd).oBox.location.vz;
|
|
local_30 = (int)psVar2[6];
|
|
iVar4 = (local_18 - (cp0->hd).oBox.location.vx) * local_38 +
|
|
(local_14 - (cp0->hd).oBox.location.vy) * local_34 +
|
|
(local_10 - (cp0->hd).oBox.location.vz) * local_30 + 0x800 >> 0xc;
|
|
if (iVar4 < 0) {
|
|
local_38 = -local_38;
|
|
local_34 = -local_34;
|
|
local_30 = -local_30;
|
|
}
|
|
else {
|
|
iVar4 = -iVar4;
|
|
}
|
|
pSVar8 = (cp1->hd).oBox.radii;
|
|
iVar9 = 2;
|
|
psVar7 = &(cp1->hd).oBox.radii[0].vz;
|
|
psVar2 = &(cp1->hd).oBox.radii[0].vy;
|
|
iVar4 = iVar4 + (cp0->hd).oBox.length[i];
|
|
do {
|
|
iVar3 = (int)pSVar8->vx;
|
|
iVar5 = (int)*psVar2;
|
|
iVar6 = (int)*psVar7;
|
|
iVar1 = iVar3 * local_38 + iVar5 * local_34 + iVar6 * local_30 + 0x800 >> 0xc;
|
|
if (iVar1 < 0) {
|
|
iVar1 = -iVar1;
|
|
}
|
|
else {
|
|
iVar3 = -iVar3;
|
|
iVar5 = -iVar5;
|
|
iVar6 = -iVar6;
|
|
}
|
|
local_14 = local_14 + iVar5;
|
|
local_18 = local_18 + iVar3;
|
|
local_10 = local_10 + iVar6;
|
|
iVar4 = iVar4 + iVar1;
|
|
pSVar8 = pSVar8 + 1;
|
|
psVar7 = psVar7 + 3;
|
|
iVar9 = iVar9 + -1;
|
|
psVar2 = psVar2 + 3;
|
|
} while (-1 < iVar9);
|
|
if ((iVar4 < least->depth) && (least->depth = iVar4, -1 < iVar4)) {
|
|
(least->location).vx = local_18;
|
|
(least->location).vy = local_14;
|
|
(least->location).vz = local_10;
|
|
if (nSign < 0) {
|
|
local_38 = -local_38;
|
|
local_34 = -local_34;
|
|
local_30 = -local_30;
|
|
}
|
|
(least->normal).vx = local_38;
|
|
(least->normal).vy = local_34;
|
|
(least->normal).vz = local_30;
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ collided3d(struct _CAR_DATA *cp0 /*$s3*/, struct _CAR_DATA *cp1 /*$s2*/, struct TestResult *least /*$s1*/)
|
|
// line 133, offset 0x0001c408
|
|
/* begin block 1 */
|
|
// Start line: 134
|
|
// Start offset: 0x0001C408
|
|
// Variables:
|
|
// int i; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x0001C51C
|
|
// End Line: 151
|
|
|
|
/* begin block 2 */
|
|
// Start line: 353
|
|
/* end block 2 */
|
|
// End Line: 354
|
|
|
|
/* begin block 3 */
|
|
// Start line: 266
|
|
/* end block 3 */
|
|
// End Line: 267
|
|
|
|
int collided3d(_CAR_DATA *cp0, _CAR_DATA *cp1, TestResult *least)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int i;
|
|
|
|
least->depth = 0x40000000;
|
|
PointFaceCheck(cp0, cp1, 1, least, 1);
|
|
if ((-1 < least->depth) && (PointFaceCheck(cp1, cp0, 1, least, -1), -1 < least->depth)) {
|
|
least->depth = 0x40000000;
|
|
i = 0;
|
|
while (PointFaceCheck(cp0, cp1, i, least, 1), -1 < least->depth) {
|
|
PointFaceCheck(cp1, cp0, i, least, -1);
|
|
i = i + 2;
|
|
if (least->depth < 0) {
|
|
return 0;
|
|
}
|
|
if (2 < i) {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ CarCarCollision3(struct _CAR_DATA *c0 /*$a0*/, struct _CAR_DATA *c1 /*$a1*/, int *depth /*$s2*/, struct VECTOR *where /*$s0*/, struct VECTOR *normal /*stack 16*/)
|
|
// line 153, offset 0x0001c380
|
|
/* begin block 1 */
|
|
// Start line: 154
|
|
// Start offset: 0x0001C380
|
|
// Variables:
|
|
// struct TestResult tr; // stack offset -56
|
|
// int res; // $t1
|
|
/* end block 1 */
|
|
// End offset: 0x0001C408
|
|
// End Line: 165
|
|
|
|
/* begin block 2 */
|
|
// Start line: 336
|
|
/* end block 2 */
|
|
// End Line: 337
|
|
|
|
/* begin block 3 */
|
|
// Start line: 360
|
|
/* end block 3 */
|
|
// End Line: 361
|
|
|
|
int CarCarCollision3(_CAR_DATA *c0, _CAR_DATA *c1, int *depth, VECTOR *where, VECTOR *normal)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int iVar1;
|
|
TestResult local_38;
|
|
|
|
iVar1 = collided3d(c0, c1, &local_38);
|
|
if (iVar1 != 0) {
|
|
*depth = local_38.depth;
|
|
where->vx = local_38.location.vx;
|
|
where->vy = local_38.location.vy;
|
|
where->vz = local_38.location.vz;
|
|
normal->vx = local_38.normal.vx;
|
|
normal->vy = local_38.normal.vy;
|
|
normal->vz = local_38.normal.vz;
|
|
}
|
|
return iVar1;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
|
|
|