- implement leadRand, InitLead

This commit is contained in:
Ilya Shurumov 2020-08-26 21:46:39 +06:00
parent a664c3d075
commit 7f8f7fdfb4

View File

@ -1,9 +1,12 @@
#include "THISDUST.H" #include "THISDUST.H"
#include "LEADAI.H" #include "LEADAI.H"
#include "OVERLAY.H" #include "OVERLAY.H"
#include "GAMESND.H" #include "GAMESND.H"
#include "DR2ROADS.H"
#include "REPLAYS.H"
static int randIndex;
static int randState[17];
// decompiled code // decompiled code
// original method signature: // original method signature:
@ -21,18 +24,11 @@
/* WARNING: Unknown calling convention yet parameter storage is locked */ /* WARNING: Unknown calling convention yet parameter storage is locked */
// [D]
int leadRand(void) int leadRand(void)
{ {
UNIMPLEMENTED(); randIndex = (randIndex + 1) % 0x11;
return 0; return randState[randIndex] = randState[randIndex] + randState[(randIndex + 0xc) % 0x11];
/*
int iVar1;
DAT_LEAD__000ecd34 = (DAT_LEAD__000ecd34 + 1) % 0x11;
iVar1 = (&DAT_LEAD__000eccf0)[DAT_LEAD__000ecd34] +
(&DAT_LEAD__000eccf0)[(DAT_LEAD__000ecd34 + 0xc) % 0x11];
(&DAT_LEAD__000eccf0)[DAT_LEAD__000ecd34] = iVar1;
return iVar1;*/
} }
@ -68,109 +64,116 @@ int leadRand(void)
/* end block 2 */ /* end block 2 */
// End Line: 560 // End Line: 560
// [D]
void InitLead(_CAR_DATA *cp) void InitLead(_CAR_DATA *cp)
{ {
UNIMPLEMENTED();
/*
int iVar1; int iVar1;
int iVar2; int iVar2;
int iVar3; int iVar3;
int x; int x;
int iVar4; int iVar4;
int z; int z;
uint uVar5; int uVar5;
DRIVER2_STRAIGHT *pDVar6; DRIVER2_STRAIGHT* st;
DRIVER2_CURVE *pDVar7; DRIVER2_CURVE* cr;
int iVar8; int iVar6;
x = cp->hd.where.t[0];
z = cp->hd.where.t[2];
cp->hndType = 5;
cp->controlType = 4;
cp->ai.l.roadPosition = 512;
cp->ai.l.dstate = 3;
cp->ai.l.recoverTime = 40;
cp->ai.l.nextExit = 2;
cp->ai.l.roadForward = 5120;
cp->ai.l.takeDamage = 0;
if (valid_region(x, z) == 0)
{
z = -1;
x = (cp->hd).where.t[0];
z = (cp->hd).where.t[2];
cp->hndType = '\x05';
cp->controlType = '\x04';
*(undefined4 *)(cp->ai + 0x2c) = 0x200;
cp->ai[0] = 3;
*(undefined4 *)(cp->ai + 0x28) = 0x28;
*(undefined4 *)(cp->ai + 0x1c) = 2;
*(undefined4 *)(cp->ai + 0x30) = 0x1400;
cp->ai[100] = 0;
iVar1 = valid_region(x, z);
x = NumDriver2Straights;
pDVar7 = Driver2CurvesPtr;
z = -1;
if (iVar1 == 0) {
iVar1 = 0; iVar1 = 0;
if (0 < NumDriver2Straights) {
iVar8 = (cp->hd).where.t[0]; if (0 < NumDriver2Straights)
pDVar6 = Driver2StraightsPtr; {
iVar6 = (cp->hd).where.t[0];
st = Driver2StraightsPtr;
do { do {
iVar4 = iVar8 - pDVar6->Midx; iVar4 = iVar6 - st->Midx;
if (iVar4 < 0) {
iVar4 = iVar4 + 0x3ff; iVar2 = (cp->hd).where.t[2] - st->Midz;
}
iVar2 = (cp->hd).where.t[2] - pDVar6->Midz;
iVar4 = iVar4 >> 10; iVar4 = iVar4 >> 10;
if (iVar2 < 0) {
iVar2 = iVar2 + 0x3ff;
}
iVar2 = iVar2 >> 10; iVar2 = iVar2 >> 10;
iVar3 = iVar4 * iVar4 + iVar2 * iVar2; iVar3 = iVar4 * iVar4 + iVar2 * iVar2;
if (((iVar4 < 0x3e9) && (iVar2 < 0x3e9)) && ((iVar3 < z || (z == -1)))) {
*(int *)(cp->ai + 0xc) = iVar1; if (((iVar4 < 0x3e9) && (iVar2 < 0x3e9)) && ((iVar3 < z || (z == -1))))
{
cp->ai.l.currentRoad = iVar1;
z = iVar3; z = iVar3;
} }
iVar1 = iVar1 + 1; iVar1 = iVar1 + 1;
pDVar6 = pDVar6 + 1; st = st + 1;
} while (iVar1 < x); } while (iVar1 < NumDriver2Straights);
} }
x = NumDriver2Curves;
uVar5 = 0; uVar5 = 0;
if (0 < NumDriver2Curves) {
if (0 < NumDriver2Curves)
{
cr = Driver2CurvesPtr;
iVar1 = (cp->hd).where.t[0]; iVar1 = (cp->hd).where.t[0];
do { do {
iVar8 = iVar1 - pDVar7->Midx; iVar6 = iVar1 - cr->Midx;
if (iVar8 < 0) {
iVar8 = iVar8 + 0x3ff; iVar4 = (cp->hd).where.t[2] - cr->Midz;
} iVar6 = iVar6 >> 10;
iVar4 = (cp->hd).where.t[2] - pDVar7->Midz;
iVar8 = iVar8 >> 10;
if (iVar4 < 0) {
iVar4 = iVar4 + 0x3ff;
}
iVar4 = iVar4 >> 10; iVar4 = iVar4 >> 10;
iVar2 = iVar8 * iVar8 + iVar4 * iVar4; iVar2 = iVar6 * iVar6 + iVar4 * iVar4;
if (((iVar8 < 0x3e9) && (iVar4 < 0x3e9)) && ((iVar2 < z || (z == -1)))) {
*(uint *)(cp->ai + 0xc) = uVar5 & 0x4000; if (((iVar6 < 0x3e9) && (iVar4 < 0x3e9)) && ((iVar2 < z || (z == -1))))
{
cp->ai.l.currentRoad = uVar5 & 0x4000;
z = iVar2; z = iVar2;
} }
uVar5 = uVar5 + 1; uVar5 = uVar5 + 1;
pDVar7 = pDVar7 + 1; cr = cr + 1;
} while ((int)uVar5 < x); } while ((int)uVar5 < NumDriver2Curves);
} }
} }
else { else
x = GetSurfaceIndex((VECTOR *)(cp->hd).where.t); {
*(int *)(cp->ai + 0xc) = x; x = GetSurfaceIndex((VECTOR*)cp->hd.where.t);
cp->ai.l.currentRoad = x;
} }
DAT_LEAD__000eccf0 = 0x27a2a;
DAT_LEAD__000eccf8 = &DAT_000038b0; randState[0] = 0x27a2a;
DAT_LEAD__000ecd04 = 0xe; randState[2] = 0x38b0;
DAT_LEAD__000ecd0c = &DAT_00008748; randState[5] = 0xe;
DAT_LEAD__000eccf4 = &DAT_00717d58; randState[7] = 0x8748;
DAT_LEAD__000eccfc = &DAT_00701ced; randState[1] = 0x717d58;
DAT_LEAD__000ecd00 = 0xbdfda3; randState[3] = 0x701ced;
DAT_LEAD__000ecd08 = &DAT_00268833; randState[4] = 0xbdfda3;
DAT_LEAD__000ecd10 = &DAT_00180d85; randState[6] = 0x268833;
DAT_LEAD__000ecd14 = &DAT_00127fba; randState[8] = 0x180d85;
DAT_LEAD__000ecd18 = 0x1678874; randState[9] = 0x127fba;
DAT_LEAD__000ecd1c = 0x3941b; randState[10] = 0x1678874;
DAT_LEAD__000ecd20 = &DAT_00701d01; randState[11] = 0x3941b;
DAT_LEAD__000ecd24 = 0x39369; randState[12] = 0x701d01;
DAT_LEAD__000ecd28 = &DAT_00001d98; randState[13] = 0x39369;
DAT_LEAD__000ecd2c = 0x165dab9; randState[14] = 0x1d98;
DAT_LEAD__000ecd30 = 0xe9d4a4; randState[15] = 0x165dab9;
DAT_LEAD__000ecd34 = 0; randState[16] = 0xe9d4a4;
randIndex = 0;
InitLeadHorn(); InitLeadHorn();
return;*/
} }