mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-26 04:12:34 +01:00
- implement jump_debris, nose_down
- little fix to CheckCarToCarCollision
This commit is contained in:
parent
43d6814946
commit
bd0803f160
@ -28,6 +28,8 @@
|
|||||||
#include "INLINE_C.H"
|
#include "INLINE_C.H"
|
||||||
#include "STRINGS.H"
|
#include "STRINGS.H"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
// decompiled code
|
// decompiled code
|
||||||
// original method signature:
|
// original method signature:
|
||||||
@ -1791,7 +1793,7 @@ void CheckCarToCarCollisions(void)
|
|||||||
|
|
||||||
cp = car_data;
|
cp = car_data;
|
||||||
|
|
||||||
if (ghost_mode)
|
if (ghost_mode == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bb2 = bbox;
|
bb2 = bbox;
|
||||||
@ -1810,18 +1812,12 @@ void CheckCarToCarCollisions(void)
|
|||||||
iVar6 = colBox->vy;
|
iVar6 = colBox->vy;
|
||||||
iVar2 = colBox->vz * 9;
|
iVar2 = colBox->vz * 9;
|
||||||
|
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 7;
|
|
||||||
|
|
||||||
iVar9 = cp->hd.where.m[0][2] * (iVar2 >> 3);
|
iVar9 = cp->hd.where.m[0][2] * (iVar2 >> 3);
|
||||||
iVar4 = colBox->vx * 9;
|
iVar4 = colBox->vx * 9;
|
||||||
|
|
||||||
if (iVar9 < 0)
|
if (iVar9 < 0)
|
||||||
iVar9 = -iVar9;
|
iVar9 = -iVar9;
|
||||||
|
|
||||||
//if (iVar4 < 0)
|
|
||||||
// iVar4 = iVar4 + 7;
|
|
||||||
|
|
||||||
iVar10 = cp->hd.where.m[0][0] * (iVar4 >> 3);
|
iVar10 = cp->hd.where.m[0][0] * (iVar4 >> 3);
|
||||||
|
|
||||||
if (iVar10 < 0)
|
if (iVar10 < 0)
|
||||||
@ -1842,77 +1838,49 @@ void CheckCarToCarCollisions(void)
|
|||||||
|
|
||||||
iVar6 = (iVar2 + iVar4) / 4096 + iVar6;
|
iVar6 = (iVar2 + iVar4) / 4096 + iVar6;
|
||||||
|
|
||||||
//if (iVar5 < 0)
|
|
||||||
// iVar5 = iVar5 + 0xf;
|
|
||||||
|
|
||||||
iVar4 = cp->hd.where.t[2];
|
iVar4 = cp->hd.where.t[2];
|
||||||
iVar2 = iVar4 - iVar6;
|
iVar2 = iVar4 - iVar6;
|
||||||
bb2->x0 = iVar5 >> 4;
|
bb2->x0 = iVar5 >> 4;
|
||||||
|
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 0xf;
|
|
||||||
|
|
||||||
bb2->z0 = iVar2 >> 4;
|
bb2->z0 = iVar2 >> 4;
|
||||||
iVar10 = iVar10 + iVar9;
|
iVar10 = iVar10 + iVar9;
|
||||||
|
|
||||||
//if (iVar10 < 0)
|
|
||||||
// iVar10 = iVar10 + 0xf;
|
|
||||||
|
|
||||||
iVar4 = iVar4 + iVar6;
|
iVar4 = iVar4 + iVar6;
|
||||||
bb2->x1 = iVar10 >> 4;
|
bb2->x1 = iVar10 >> 4;
|
||||||
|
|
||||||
//if (iVar4 < 0)
|
|
||||||
// iVar4 = iVar4 + 0xf;
|
|
||||||
|
|
||||||
iVar2 = cp->st.n.linearVelocity[0];
|
iVar2 = cp->st.n.linearVelocity[0];
|
||||||
bb2->z1 = iVar4 >> 4;
|
bb2->z1 = iVar4 >> 4;
|
||||||
|
|
||||||
if (iVar2 < 0)
|
if (iVar2 < 0)
|
||||||
{
|
{
|
||||||
iVar2 = iVar2 / 4096;
|
iVar2 = iVar2 / 4096;
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 7;
|
|
||||||
|
|
||||||
bb2->x0 = (iVar5 >> 4) + (iVar2 >> 3);
|
bb2->x0 = (iVar5 >> 4) + (iVar2 >> 3);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iVar2 = iVar2 / 4096;
|
iVar2 = iVar2 / 4096;
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 7;
|
|
||||||
|
|
||||||
bb2->x1 = (iVar10 >> 4) + (iVar2 >> 3);
|
bb2->x1 = (iVar10 >> 4) + (iVar2 >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
iVar2 = cp->st.n.linearVelocity[2];
|
iVar2 = cp->st.n.linearVelocity[2];
|
||||||
|
|
||||||
if (iVar2 < 0)
|
if (iVar2 < 0)
|
||||||
{
|
{
|
||||||
iVar2 = iVar2 / 4096;
|
iVar2 = iVar2 / 4096;
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 7;
|
|
||||||
|
|
||||||
bb2->z0 = bb2->z0 + (iVar2 >> 3);
|
bb2->z0 = bb2->z0 + (iVar2 >> 3);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iVar2 = iVar2 / 4096;
|
iVar2 = iVar2 / 4096;
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar2 + 7;
|
|
||||||
|
|
||||||
bb2->z1 = bb2->z1 + (iVar2 >> 3);
|
bb2->z1 = bb2->z1 + (iVar2 >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
iVar6 = cp->hd.where.t[1];
|
iVar6 = cp->hd.where.t[1];
|
||||||
iVar2 = iVar6 + -2400;
|
|
||||||
if (iVar2 < 0)
|
|
||||||
iVar2 = iVar6 + -2385;
|
|
||||||
|
|
||||||
|
iVar2 = iVar6 - 2400;
|
||||||
bb2->y0 = iVar2 >> 4;
|
bb2->y0 = iVar2 >> 4;
|
||||||
|
|
||||||
iVar2 = iVar6 + 2400;
|
iVar2 = iVar6 + 2400;
|
||||||
|
|
||||||
//if (iVar2 < 0)
|
|
||||||
// iVar2 = iVar6 + 2415;
|
|
||||||
|
|
||||||
bb2->y1 = iVar2 >> 4;
|
bb2->y1 = iVar2 >> 4;
|
||||||
|
|
||||||
if (cp->hndType == 0)
|
if (cp->hndType == 0)
|
||||||
@ -2260,11 +2228,7 @@ LAB_00055c58:
|
|||||||
{
|
{
|
||||||
if ((pad & 0x80) != 0)
|
if ((pad & 0x80) != 0)
|
||||||
{
|
{
|
||||||
iVar3 = (cp->hd).wheel_speed * 1500;
|
iVar3 = cp->hd.wheel_speed * 1500;
|
||||||
if (iVar3 < 0)
|
|
||||||
{
|
|
||||||
iVar3 = iVar3 + 0x3ff;
|
|
||||||
}
|
|
||||||
iVar3 = (iVar3 >> 10) / 4096;
|
iVar3 = (iVar3 >> 10) / 4096;
|
||||||
|
|
||||||
if (-iVar3 < 0x17)
|
if (-iVar3 < 0x17)
|
||||||
@ -2763,51 +2727,61 @@ LAB_00056814:
|
|||||||
/* end block 3 */
|
/* end block 3 */
|
||||||
// End Line: 6658
|
// End Line: 6658
|
||||||
|
|
||||||
|
char DebrisTimer = 0;
|
||||||
|
|
||||||
|
// [D]
|
||||||
void jump_debris(_CAR_DATA *cp)
|
void jump_debris(_CAR_DATA *cp)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
|
||||||
/*
|
|
||||||
char cVar1;
|
char cVar1;
|
||||||
byte bVar2;
|
unsigned char bVar2;
|
||||||
uint uVar3;
|
|
||||||
WHEEL *pWVar4;
|
WHEEL *wheel;
|
||||||
int iVar5;
|
int count;
|
||||||
VECTOR local_30;
|
VECTOR position;
|
||||||
VECTOR local_20;
|
VECTOR velocity;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
wheel = cp->hd.wheel;
|
||||||
|
|
||||||
iVar5 = 0;
|
|
||||||
pWVar4 = (cp->hd).wheel;
|
|
||||||
do {
|
do {
|
||||||
iVar5 = iVar5 + 1;
|
|
||||||
if (pWVar4->susCompression != '\0') {
|
if (wheel->susCompression != 0)
|
||||||
DebrisTimer = '\0';
|
{
|
||||||
cp->wasOnGround = '\x01';
|
DebrisTimer = 0;
|
||||||
|
cp->wasOnGround = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pWVar4 = pWVar4 + 1;
|
|
||||||
} while (iVar5 < 4);
|
wheel++;
|
||||||
if (cp->wasOnGround == '\x01') {
|
count++;
|
||||||
cp->wasOnGround = '\0';
|
} while (count < 4);
|
||||||
DebrisTimer = 'P';
|
|
||||||
|
if (cp->wasOnGround == 1)
|
||||||
|
{
|
||||||
|
cp->wasOnGround = 0;
|
||||||
|
DebrisTimer = 80;
|
||||||
nose_down(cp);
|
nose_down(cp);
|
||||||
}
|
}
|
||||||
cVar1 = DebrisTimer + -1;
|
|
||||||
if ((DebrisTimer != '\0') && (bVar2 = DebrisTimer - 1, DebrisTimer = cVar1, bVar2 < 0x4b)) {
|
cVar1 = DebrisTimer-1;
|
||||||
memset(&local_20, 0, 0x10);
|
|
||||||
uVar3 = rand();
|
if ((DebrisTimer != 0) && (bVar2 = DebrisTimer - 1, DebrisTimer = cVar1, bVar2 < 0x4b))
|
||||||
local_20.vx = (cp->hd).where.t[0] + ((uVar3 & 0x1ff) - 0x100);
|
{
|
||||||
local_20.vy = 200 - (cp->hd).where.t[1];
|
memset(&velocity, 0, sizeof(velocity));
|
||||||
uVar3 = rand();
|
|
||||||
local_30.vz = (cp->hd).where.t[2] + ((uVar3 & 0x1ff) - 0x100);
|
velocity.vx = cp->hd.where.t[0] + ((rand() & 0x1ff) - 0x100);
|
||||||
local_30.vx = local_20.vx;
|
velocity.vy = 200 - (cp->hd).where.t[1];
|
||||||
local_30.vy = local_20.vy;
|
|
||||||
local_30.pad = local_20.pad;
|
position.vz = cp->hd.where.t[2] + ((rand() & 0x1ff) - 0x100);
|
||||||
local_20.vz = local_30.vz;
|
position.vx = velocity.vx;
|
||||||
memset(&local_20, 0, 0x10);
|
position.vy = velocity.vy;
|
||||||
Setup_Debris(&local_30, &local_20, 5, 0xb);
|
position.pad = velocity.pad;
|
||||||
|
|
||||||
|
velocity.vz = position.vz;
|
||||||
|
|
||||||
|
memset(&velocity, 0, sizeof(velocity));
|
||||||
|
Setup_Debris(&position, &velocity, 5, 0xb);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2826,20 +2800,12 @@ void jump_debris(_CAR_DATA *cp)
|
|||||||
/* end block 2 */
|
/* end block 2 */
|
||||||
// End Line: 7462
|
// End Line: 7462
|
||||||
|
|
||||||
|
// [D]
|
||||||
void nose_down(_CAR_DATA *cp)
|
void nose_down(_CAR_DATA *cp)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
cp->st.n.angularVelocity[0] += cp->hd.where.m[0][0] * 50;
|
||||||
/*
|
cp->st.n.angularVelocity[1] += cp->hd.where.m[1][0] * 50;
|
||||||
short sVar1;
|
cp->st.n.angularVelocity[2] += cp->hd.where.m[2][0] * 50;
|
||||||
short sVar2;
|
|
||||||
|
|
||||||
sVar1 = (cp->hd).where.m[3];
|
|
||||||
*(int *)(cp->st + 0x28) = *(int *)(cp->st + 0x28) + (int)(cp->hd).where.m[0] * 0x32;
|
|
||||||
sVar2 = (cp->hd).where.m[6];
|
|
||||||
*(int *)(cp->st + 0x2c) = *(int *)(cp->st + 0x2c) + (int)sVar1 * 0x32;
|
|
||||||
*(int *)(cp->st + 0x30) = *(int *)(cp->st + 0x30) + (int)sVar2 * 0x32;
|
|
||||||
return;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user