mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 11:52:32 +01:00
3224 lines
81 KiB
C
3224 lines
81 KiB
C
#include "THISDUST.H"
|
|
#include "OVERMAP.H"
|
|
#include "TEXTURE.H"
|
|
#include "CARS.H"
|
|
|
|
OVERMAP overlaidmaps[4] =
|
|
{
|
|
{ 197, 318, 384, 672, '\xFC', '\x99', 2145 },
|
|
{ 229, 85, 544, 352, '\xBB', '\x88', 2048 },
|
|
{ 68, 457, 288, 672, '\xBD', '\xBB', 1911 },
|
|
{ 159, 207, 416, 576, '\xFC', 'D', 2048 }
|
|
};
|
|
|
|
SXYPAIR MapSegmentPos[16] =
|
|
{
|
|
{ 0, 0 },
|
|
{ 8, 0 },
|
|
{ 16, 0 },
|
|
{ 24, 0 },
|
|
{ 0, 32 },
|
|
{ 8, 32 },
|
|
{ 16, 32 },
|
|
{ 24, 32 },
|
|
{ 0, 64 },
|
|
{ 8, 64 },
|
|
{ 16, 64 },
|
|
{ 24, 64 },
|
|
{ 0, 96 },
|
|
{ 8, 96 },
|
|
{ 16, 96 },
|
|
{ 24, 96 }
|
|
};
|
|
|
|
XYPAIR NVertex[4] = { { -2, 3 }, { -2, -3 }, { 2, 3 }, { 2, -3 } };
|
|
|
|
XYPAIR north[4] = { { 0, 20 }, { 0, 20 }, { 0, 20 }, { 0, 20 } };
|
|
|
|
VECTOR player_position = { 0, 0, 0, 0 };
|
|
|
|
char* palettedir[] = {
|
|
"CHICAGO",
|
|
"HAVANA",
|
|
"VEGAS",
|
|
"RIO",
|
|
"CHICAGO",
|
|
"HAVANA",
|
|
"VEGAS",
|
|
"RIO",
|
|
};
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawTargetBlip(struct VECTOR *pos /*$t0*/, unsigned char r /*$s2*/, unsigned char g /*$s3*/, unsigned char b /*$s4*/, unsigned long flags /*stack 16*/)
|
|
// line 685, offset 0x00016280
|
|
/* begin block 1 */
|
|
// Start line: 686
|
|
// Start offset: 0x00016280
|
|
// Variables:
|
|
// struct POLY_FT4 *poly; // $t0
|
|
// struct VECTOR vec; // stack offset -40
|
|
// int ysize; // $a2
|
|
/* end block 1 */
|
|
// End offset: 0x00016558
|
|
// End Line: 759
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1370
|
|
/* end block 2 */
|
|
// End Line: 1371
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
|
|
void DrawTargetBlip(VECTOR *pos, unsigned char r, unsigned char g, unsigned char b, ulong flags)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
DB *pDVar1;
|
|
ushort uVar2;
|
|
short sVar3;
|
|
uint *puVar4;
|
|
long local_28;
|
|
long local_24;
|
|
int local_20;
|
|
long local_1c;
|
|
|
|
if ((flags & 0x20) == 0) {
|
|
if ((flags & 8) == 0) {
|
|
if ((flags & 1) == 0) {
|
|
WorldToFullscreenMap2(pos, (VECTOR *)&local_28);
|
|
}
|
|
else {
|
|
WorldToOverheadMapPositions(pos, (VECTOR *)&local_28, 1, '\0', 0);
|
|
if (0x5e < local_28 - 0xe9U) {
|
|
return;
|
|
}
|
|
if (local_20 < 0xae) {
|
|
return;
|
|
}
|
|
if (0xfa < local_20) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
local_28 = pos->vx;
|
|
local_24 = pos->vy;
|
|
local_20 = pos->vz;
|
|
local_1c = pos->pad;
|
|
}
|
|
if ((flags & 1) == 0) {
|
|
local_28 = local_28 + map_x_offset;
|
|
local_20 = local_20 + map_z_offset;
|
|
}
|
|
}
|
|
else {
|
|
WorldToMultiplayerMap(pos, (VECTOR *)&local_28);
|
|
local_28 = local_28 + 0xf0;
|
|
local_20 = local_20 + 0x60;
|
|
}
|
|
if ((flags & 0x10) == 0) {
|
|
sVar3 = 4;
|
|
if ((flags & 2) != 0) {
|
|
sVar3 = 3;
|
|
}
|
|
}
|
|
else {
|
|
sVar3 = (short)((int)(uint)(byte)OverlayFlashValue >> 1);
|
|
}
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\t';
|
|
*(char *)((int)puVar4 + 7) = '.';
|
|
*(short *)(puVar4 + 2) = (short)local_28 - sVar3;
|
|
*(short *)((int)puVar4 + 10) = (short)local_20 - sVar3;
|
|
*(short *)(puVar4 + 4) = (short)local_28 + sVar3;
|
|
*(short *)((int)puVar4 + 0x12) = (short)local_20 - sVar3;
|
|
*(short *)(puVar4 + 6) = (short)local_28 - sVar3;
|
|
*(short *)((int)puVar4 + 0x1a) = (short)local_20 + sVar3;
|
|
*(short *)(puVar4 + 8) = (short)local_28 + sVar3;
|
|
*(uchar *)(puVar4 + 1) = r;
|
|
*(uchar *)((int)puVar4 + 5) = g;
|
|
*(uchar *)((int)puVar4 + 6) = b;
|
|
*(short *)((int)puVar4 + 0x22) = (short)local_20 + sVar3;
|
|
*(uchar *)(puVar4 + 3) = light_texture.coords.u0;
|
|
*(uchar *)((int)puVar4 + 0xd) = light_texture.coords.v0;
|
|
*(uchar *)(puVar4 + 5) = light_texture.coords.u1;
|
|
*(uchar *)((int)puVar4 + 0x15) = light_texture.coords.v1;
|
|
*(uchar *)(puVar4 + 7) = light_texture.coords.u2;
|
|
*(uchar *)((int)puVar4 + 0x1d) = light_texture.coords.v2;
|
|
*(uchar *)(puVar4 + 9) = light_texture.coords.u3;
|
|
*(uchar *)((int)puVar4 + 0x25) = light_texture.coords.v3;
|
|
if ((flags & 2) == 0) {
|
|
uVar2 = light_texture.tpageid | 0x20;
|
|
}
|
|
else {
|
|
uVar2 = light_texture.tpageid | 0x40;
|
|
}
|
|
*(ushort *)((int)puVar4 + 0x16) = uVar2;
|
|
*(ushort *)((int)puVar4 + 0xe) = light_texture.clutid;
|
|
pDVar1 = current;
|
|
if ((flags & 4) == 0) {
|
|
*puVar4 = *puVar4 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar1->ot = *pDVar1->ot & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
pDVar1->primptr = pDVar1->primptr + 0x28;
|
|
}
|
|
else {
|
|
DrawPrim(puVar4);
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawTargetArrow(struct VECTOR *pos /*$a2*/, unsigned long flags /*$s3*/)
|
|
// line 815, offset 0x00016578
|
|
/* begin block 1 */
|
|
// Start line: 816
|
|
// Start offset: 0x00016578
|
|
// Variables:
|
|
// struct VECTOR vec; // stack offset -56
|
|
// struct VECTOR vec2; // stack offset -40
|
|
// struct POLY_FT3 *null; // $t1
|
|
// struct POLY_G3 *poly; // $s2
|
|
// int dx; // $s1
|
|
// int dy; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x00016814
|
|
// End Line: 875
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1642
|
|
/* end block 2 */
|
|
// End Line: 1643
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
|
|
void DrawTargetArrow(VECTOR *pos, ulong flags)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
short sVar1;
|
|
short sVar2;
|
|
DB *pDVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint *puVar6;
|
|
int local_38;
|
|
long local_34;
|
|
int local_30;
|
|
long local_2c;
|
|
int local_28;
|
|
int local_20;
|
|
|
|
if ((flags & 8) == 0) {
|
|
if ((flags & 1) == 0) {
|
|
WorldToFullscreenMap2(pos, (VECTOR *)&local_38);
|
|
}
|
|
else {
|
|
WorldToOverheadMapPositions(pos, (VECTOR *)&local_38, 1, '\0', 0);
|
|
}
|
|
}
|
|
else {
|
|
local_38 = pos->vx;
|
|
local_34 = pos->vy;
|
|
local_30 = pos->vz;
|
|
local_2c = pos->pad;
|
|
}
|
|
if ((flags & 1) == 0) {
|
|
local_38 = local_38 + map_x_offset;
|
|
local_30 = local_30 + map_z_offset;
|
|
local_28 = map_x_offset + 0xa0;
|
|
local_20 = map_z_offset + 0x80;
|
|
}
|
|
else {
|
|
WorldToOverheadMapPositions((VECTOR *)&player, (VECTOR *)&local_28, 1, '\0', 0);
|
|
}
|
|
iVar5 = local_28 - local_38;
|
|
iVar4 = local_20 - local_30;
|
|
ratan2(iVar4, iVar5);
|
|
puVar6 = (uint *)current->primptr;
|
|
*(char *)((int)puVar6 + 3) = '\x06';
|
|
*(char *)((int)puVar6 + 7) = '2';
|
|
*(char *)(puVar6 + 1) = '\x18';
|
|
*(char *)((int)puVar6 + 5) = '\x18';
|
|
*(char *)((int)puVar6 + 6) = '\x18';
|
|
*(char *)(puVar6 + 3) = '\x18';
|
|
*(char *)((int)puVar6 + 0xd) = '\x18';
|
|
*(char *)((int)puVar6 + 0xe) = '\x18';
|
|
*(char *)(puVar6 + 5) = '@';
|
|
*(char *)((int)puVar6 + 0x15) = '@';
|
|
*(char *)((int)puVar6 + 0x16) = '@';
|
|
sVar1 = (short)(iVar4 >> 3);
|
|
*(short *)(puVar6 + 2) = (short)local_28 + sVar1;
|
|
sVar2 = (short)(iVar5 >> 3);
|
|
*(short *)((int)puVar6 + 10) = (short)local_20 - sVar2;
|
|
*(short *)(puVar6 + 4) = (short)local_28 - sVar1;
|
|
*(short *)((int)puVar6 + 0x12) = (short)local_20 + sVar2;
|
|
*(undefined2 *)(puVar6 + 6) = (undefined2)local_38;
|
|
*(undefined2 *)((int)puVar6 + 0x1a) = (undefined2)local_30;
|
|
*(char *)((int)puVar6 + 0x1f) = '\a';
|
|
*(char *)((int)puVar6 + 0x23) = '$';
|
|
*(undefined2 *)(puVar6 + 9) = 0xffff;
|
|
*(undefined2 *)((int)puVar6 + 0x26) = 0xffff;
|
|
*(undefined2 *)(puVar6 + 0xb) = 0xffff;
|
|
*(undefined2 *)((int)puVar6 + 0x2e) = 0xffff;
|
|
*(undefined2 *)(puVar6 + 0xd) = 0xffff;
|
|
*(undefined2 *)((int)puVar6 + 0x36) = 0xffff;
|
|
*(undefined2 *)((int)puVar6 + 0x32) = 0x40;
|
|
pDVar3 = current;
|
|
if ((flags & 4) == 0) {
|
|
*puVar6 = *puVar6 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar3->ot = *pDVar3->ot & 0xff000000 | (uint)puVar6 & 0xffffff;
|
|
puVar6[7] = puVar6[7] & 0xff000000 | *pDVar3->ot & 0xffffff;
|
|
*pDVar3->ot = *pDVar3->ot & 0xff000000 | (uint)(puVar6 + 7) & 0xffffff;
|
|
pDVar3->primptr = pDVar3->primptr + 0x3c;
|
|
}
|
|
else {
|
|
DrawPrim(puVar6 + 7);
|
|
DrawPrim(puVar6);
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawPlayerDot(struct VECTOR *pos /*$a1*/, short rot /*$s2*/, unsigned char r /*$s5*/, unsigned char g /*$s4*/, int b /*stack 16*/, unsigned long flags /*stack 20*/)
|
|
// line 883, offset 0x00016814
|
|
/* begin block 1 */
|
|
// Start line: 884
|
|
// Start offset: 0x00016814
|
|
// Variables:
|
|
// struct MATRIX matrix; // stack offset -168
|
|
// struct VECTOR direction; // stack offset -136
|
|
// struct SVECTOR apos[3]; // stack offset -120
|
|
// struct VECTOR opos[3]; // stack offset -96
|
|
// struct POLY_F3 *poly; // $t0
|
|
// struct VECTOR vec; // stack offset -48
|
|
/* end block 1 */
|
|
// End offset: 0x00016AC4
|
|
// End Line: 946
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1812
|
|
/* end block 2 */
|
|
// End Line: 1813
|
|
|
|
/* begin block 3 */
|
|
// Start line: 1821
|
|
/* end block 3 */
|
|
// End Line: 1822
|
|
|
|
void DrawPlayerDot(VECTOR *pos, short rot, unsigned char r, unsigned char g, int b, ulong flags)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
DB *pDVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint *puVar4;
|
|
short local_60;
|
|
short local_58;
|
|
short local_50;
|
|
short local_48;
|
|
short local_40;
|
|
short local_38;
|
|
VECTOR local_30;
|
|
|
|
if ((flags & 0x20) == 0) {
|
|
if ((flags & 8) == 0) {
|
|
if ((flags & 1) == 0) {
|
|
WorldToFullscreenMap2(pos, &local_30);
|
|
}
|
|
else {
|
|
WorldToOverheadMapPositions(pos, &local_30, 1, '\0', 0);
|
|
if (0x5e < local_30.vx - 0xe9U) {
|
|
return;
|
|
}
|
|
if (local_30.vz < 0xae) {
|
|
return;
|
|
}
|
|
if (0xfa < local_30.vz) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
local_30.vx = pos->vx;
|
|
local_30.vy = pos->vy;
|
|
local_30.vz = pos->vz;
|
|
local_30.pad = pos->pad;
|
|
}
|
|
if ((flags & 1) == 0) {
|
|
local_30.vx = local_30.vx + map_x_offset;
|
|
local_30.vz = local_30.vz + map_z_offset;
|
|
}
|
|
}
|
|
else {
|
|
WorldToMultiplayerMap(pos, &local_30);
|
|
local_30.vx = local_30.vx + 0xf0;
|
|
local_30.vz = local_30.vz + 0x60;
|
|
}
|
|
iVar2 = (int)rcossin_tbl[((int)rot & 0xfffU) * 2];
|
|
iVar3 = (int)rcossin_tbl[((int)rot & 0xfffU) * 2 + 1];
|
|
local_40 = (short)local_30.vx;
|
|
local_60 = local_40 + (short)(iVar2 * -3 + 0x800 >> 0xc);
|
|
local_38 = (short)local_30.vz;
|
|
local_58 = local_38 + (short)(iVar3 * -3 + 0x800 >> 0xc);
|
|
local_50 = local_40 + (short)(iVar2 * 3 + iVar3 * -2 + 0x800 >> 0xc);
|
|
local_48 = local_38 + (short)(iVar3 * 3 + iVar2 * 2 + 0x800 >> 0xc);
|
|
local_40 = local_40 + (short)(iVar3 * 2 + iVar2 * 3 + 0x800 >> 0xc);
|
|
local_38 = local_38 + (short)(iVar2 * -2 + iVar3 * 3 + 0x800 >> 0xc);
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\x04';
|
|
*(char *)((int)puVar4 + 7) = ' ';
|
|
*(uchar *)(puVar4 + 1) = r;
|
|
*(uchar *)((int)puVar4 + 5) = g;
|
|
*(char *)((int)puVar4 + 6) = (char)b;
|
|
*(short *)(puVar4 + 2) = local_60;
|
|
*(short *)((int)puVar4 + 10) = local_58;
|
|
*(short *)(puVar4 + 3) = local_50;
|
|
*(short *)((int)puVar4 + 0xe) = local_48;
|
|
*(short *)(puVar4 + 4) = local_40;
|
|
*(short *)((int)puVar4 + 0x12) = local_38;
|
|
pDVar1 = current;
|
|
if ((flags & 4) == 0) {
|
|
*puVar4 = *puVar4 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar1->ot = *pDVar1->ot & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
pDVar1->primptr = pDVar1->primptr + 0x14;
|
|
}
|
|
else {
|
|
DrawPrim(puVar4);
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ ProcessOverlayLump(char *lump_ptr /*$s1*/, int lump_size /*$s0*/)
|
|
// line 954, offset 0x00016ae8
|
|
/* begin block 1 */
|
|
// Start line: 955
|
|
// Start offset: 0x00016AE8
|
|
// Variables:
|
|
// struct TEXTURE_DETAILS info; // stack offset -32
|
|
// int i; // $a1
|
|
// int x; // $v0
|
|
// int y; // $a0
|
|
/* end block 1 */
|
|
// End offset: 0x00016C0C
|
|
// End Line: 986
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1982
|
|
/* end block 2 */
|
|
// End Line: 1983
|
|
|
|
void ProcessOverlayLump(char *lump_ptr, int lump_size)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
uint uVar1;
|
|
SXYPAIR *pSVar2;
|
|
TEXTURE_DETAILS local_20;
|
|
|
|
GetTextureDetails(s_OVERHEAD_000103f4, &local_20);
|
|
MapTPage = local_20.tpageid;
|
|
MapClut = GetClut((int)mapclutpos.x, (int)mapclutpos.y);
|
|
uVar1 = 0;
|
|
pSVar2 = &MapSegmentPos;
|
|
MapRect.w = 0x40;
|
|
MapRect.h = 0x100;
|
|
MapRect.x = (short)(((uint)MapTPage & 0xf) << 6);
|
|
MapRect.y = (short)(((uint)MapTPage & 0x10) << 4);
|
|
do {
|
|
pSVar2->x = (short)((int)((uVar1 & 3) * 0x20 + (uint)local_20.coords.u0) >> 2);
|
|
pSVar2->y = (ushort)local_20.coords.v0 + (short)((int)uVar1 >> 2) * 0x20;
|
|
uVar1 = uVar1 + 1;
|
|
pSVar2 = pSVar2 + 1;
|
|
} while ((int)uVar1 < 0x10);
|
|
MapBitMaps = mallocptr;
|
|
memcpy(mallocptr, lump_ptr, lump_size);
|
|
mallocptr = mallocptr + lump_size;
|
|
LoadImage(&mapclutpos, MapBitMaps + 0x200);
|
|
DrawSync(0);
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// unsigned long /*$ra*/ Long2DDistance(struct VECTOR *pPoint1 /*$a0*/, struct VECTOR *pPoint2 /*$a2*/)
|
|
// line 994, offset 0x00016c0c
|
|
/* begin block 1 */
|
|
// Start line: 995
|
|
// Start offset: 0x00016C0C
|
|
// Variables:
|
|
// struct VECTOR delta; // stack offset -24
|
|
// unsigned int result; // $v0
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 1001
|
|
// Start offset: 0x00016C50
|
|
// Variables:
|
|
// int Theta; // $v1
|
|
// int tempTheta; // $v0
|
|
|
|
/* begin block 1.1.1 */
|
|
// Start line: 1009
|
|
// Start offset: 0x00016C70
|
|
// Variables:
|
|
// int cos; // $v1
|
|
/* end block 1.1.1 */
|
|
// End offset: 0x00016C9C
|
|
// End Line: 1017
|
|
|
|
/* begin block 1.1.2 */
|
|
// Start line: 1022
|
|
// Start offset: 0x00016CA4
|
|
// Variables:
|
|
// int sin; // $v1
|
|
/* end block 1.1.2 */
|
|
// End offset: 0x00016D04
|
|
// End Line: 1032
|
|
/* end block 1.1 */
|
|
// End offset: 0x00016D04
|
|
// End Line: 1033
|
|
/* end block 1 */
|
|
// End offset: 0x00016D14
|
|
// End Line: 1036
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2090
|
|
/* end block 2 */
|
|
// End Line: 2091
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2099
|
|
/* end block 3 */
|
|
// End Line: 2100
|
|
|
|
ulong Long2DDistance(VECTOR *pPoint1, VECTOR *pPoint2)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
short sVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
ulong uVar5;
|
|
|
|
iVar4 = pPoint1->vx - pPoint2->vx;
|
|
if (iVar4 < 0) {
|
|
iVar4 = pPoint2->vx - pPoint1->vx;
|
|
}
|
|
iVar3 = pPoint1->vz - pPoint2->vz;
|
|
if (iVar3 < 0) {
|
|
iVar3 = pPoint2->vz - pPoint1->vz;
|
|
}
|
|
uVar2 = ratan2();
|
|
if ((uVar2 & 0x7ff) - 0x200 < 0x401) {
|
|
sVar1 = rcossin_tbl[(uVar2 & 0xfff) * 2];
|
|
iVar4 = iVar3;
|
|
}
|
|
else {
|
|
sVar1 = rcossin_tbl[(uVar2 & 0xfff) * 2 + 1];
|
|
}
|
|
iVar3 = (int)sVar1;
|
|
if (iVar4 < 0x80000) {
|
|
uVar5 = (iVar4 << 0xc) / iVar3;
|
|
if (iVar3 == 0) {
|
|
trap(7);
|
|
}
|
|
}
|
|
else {
|
|
if (iVar3 == 0) {
|
|
trap(7);
|
|
}
|
|
uVar5 = (iVar4 << 9) / iVar3 << 3;
|
|
}
|
|
return uVar5;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ InitOverheadMap()
|
|
// line 1043, offset 0x000197bc
|
|
/* begin block 1 */
|
|
// Start line: 1045
|
|
// Start offset: 0x000197BC
|
|
// Variables:
|
|
// int tpage; // $s3
|
|
// int c; // $s2
|
|
// int d; // $s1
|
|
/* end block 1 */
|
|
// End offset: 0x000198BC
|
|
// End Line: 1070
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2086
|
|
/* end block 2 */
|
|
// End Line: 2087
|
|
|
|
/* begin block 3 */
|
|
// Start line: 5402
|
|
/* end block 3 */
|
|
// End Line: 5403
|
|
|
|
/* begin block 4 */
|
|
// Start line: 5405
|
|
/* end block 4 */
|
|
// End Line: 5406
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void InitOverheadMap(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
char *pcVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int tpage;
|
|
int iVar5;
|
|
|
|
iVar4 = 0;
|
|
if (gMultiplayerLevels == 0) {
|
|
SetMapPos();
|
|
tilehnum = overlaidmaps[GameLevel].width;
|
|
if (tilehnum < 0) {
|
|
tilehnum = tilehnum + 0x1f;
|
|
}
|
|
tilehnum = tilehnum >> 5;
|
|
iVar3 = 0;
|
|
do {
|
|
iVar2 = 0;
|
|
iVar5 = iVar3 + 1;
|
|
pcVar1 = &maptile + iVar3;
|
|
tpage = iVar4;
|
|
do {
|
|
*pcVar1 = (char)tpage;
|
|
iVar4 = tpage + 1;
|
|
pcVar1 = pcVar1 + 4;
|
|
LoadMapTile(tpage, (x_map >> 5) + iVar2, (y_map >> 5) + iVar3);
|
|
iVar2 = iVar2 + 1;
|
|
tpage = iVar4;
|
|
} while (iVar2 < 4);
|
|
iVar3 = iVar5;
|
|
} while (iVar5 < 4);
|
|
old_x_mod = x_map & 0x1f;
|
|
old_y_mod = y_map & 0x1f;
|
|
}
|
|
else {
|
|
InitMultiplayerMap();
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawOverheadMap()
|
|
// line 1077, offset 0x00016d14
|
|
/* begin block 1 */
|
|
// Start line: 1079
|
|
// Start offset: 0x00016D14
|
|
// Variables:
|
|
// int width; // $t5
|
|
// int height; // $t4
|
|
// int count; // $s2
|
|
// int count1; // $s3
|
|
// int tpage; // $t1
|
|
// int x_mod; // $s5
|
|
// int y_mod; // $fp
|
|
// int MeshWidth; // $s6
|
|
// int MeshHeight; // $s7
|
|
// long flag; // stack offset -104
|
|
// struct SVECTOR MapMesh[5][5]; // stack offset -784
|
|
// struct VECTOR MapMeshO[5][5]; // stack offset -584
|
|
// struct MAPTEX MapTex[4]; // stack offset -184
|
|
// struct SVECTOR direction; // stack offset -152
|
|
// struct POLY_FT4 *spt; // $a3
|
|
// struct POLY_F4 *sptb; // $a0
|
|
// struct DR_AREA *draw_area; // $s2
|
|
// struct RECT clipped_size; // stack offset -144
|
|
// struct VECTOR translate; // stack offset -136
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 1112
|
|
// Start offset: 0x00016E24
|
|
// Variables:
|
|
// static int ptab[16]; // offset 0x118
|
|
/* end block 1.1 */
|
|
// End offset: 0x00016E24
|
|
// End Line: 1113
|
|
|
|
/* begin block 1.2 */
|
|
// Start line: 1125
|
|
// Start offset: 0x00016EF8
|
|
// Variables:
|
|
// static int ptab[12]; // offset 0x158
|
|
// int intens; // $a1
|
|
/* end block 1.2 */
|
|
// End offset: 0x00016FA8
|
|
// End Line: 1135
|
|
|
|
/* begin block 1.3 */
|
|
// Start line: 1139
|
|
// Start offset: 0x00016FA8
|
|
|
|
/* begin block 1.3.1 */
|
|
// Start line: 1139
|
|
// Start offset: 0x00016FA8
|
|
// Variables:
|
|
// struct VECTOR vec; // stack offset -120
|
|
// struct TILE_1 *tile1; // $a0
|
|
/* end block 1.3.1 */
|
|
// End offset: 0x000170F4
|
|
// End Line: 1142
|
|
/* end block 1.3 */
|
|
// End offset: 0x000170F4
|
|
// End Line: 1142
|
|
|
|
/* begin block 1.4 */
|
|
// Start line: 1146
|
|
// Start offset: 0x000170F4
|
|
// Variables:
|
|
// struct _CAR_DATA *cp; // $s0
|
|
/* end block 1.4 */
|
|
// End offset: 0x00017218
|
|
// End Line: 1161
|
|
|
|
/* begin block 1.5 */
|
|
// Start line: 1168
|
|
// Start offset: 0x00017240
|
|
/* end block 1.5 */
|
|
// End offset: 0x00017240
|
|
// End Line: 1170
|
|
|
|
/* begin block 1.6 */
|
|
// Start line: 1185
|
|
// Start offset: 0x000172C0
|
|
/* end block 1.6 */
|
|
// End offset: 0x000172C0
|
|
// End Line: 1187
|
|
|
|
/* begin block 1.7 */
|
|
// Start line: 1202
|
|
// Start offset: 0x0001734C
|
|
/* end block 1.7 */
|
|
// End offset: 0x0001734C
|
|
// End Line: 1204
|
|
|
|
/* begin block 1.8 */
|
|
// Start line: 1219
|
|
// Start offset: 0x000173E0
|
|
/* end block 1.8 */
|
|
// End offset: 0x000173E0
|
|
// End Line: 1221
|
|
/* end block 1 */
|
|
// End offset: 0x00017C00
|
|
// End Line: 1367
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2231
|
|
/* end block 2 */
|
|
// End Line: 2232
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2273
|
|
/* end block 3 */
|
|
// End Line: 2274
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2274
|
|
/* end block 4 */
|
|
// End Line: 2275
|
|
|
|
/* begin block 5 */
|
|
// Start line: 2286
|
|
/* end block 5 */
|
|
// End Line: 2287
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawOverheadMap(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
byte bVar1;
|
|
short sVar2;
|
|
short sVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
ushort uVar7;
|
|
ushort uVar8;
|
|
DB *pDVar9;
|
|
uchar uVar10;
|
|
short *psVar11;
|
|
TILE_1 *local_a0_864;
|
|
POLY_F4 *local_a0_3412;
|
|
int x;
|
|
short *psVar12;
|
|
int y;
|
|
int y_00;
|
|
short *psVar13;
|
|
undefined2 *puVar14;
|
|
POLY_F4 *local_a3_2816;
|
|
POLY_FT4 *local_a3_3552;
|
|
SVECTOR *pSVar15;
|
|
long *plVar16;
|
|
SVECTOR *pSVar17;
|
|
long *plVar18;
|
|
SVECTOR *pSVar19;
|
|
char cVar20;
|
|
SVECTOR *pSVar21;
|
|
char cVar22;
|
|
SVECTOR *v0;
|
|
_CAR_DATA *p_Var23;
|
|
char *pcVar24;
|
|
byte *pbVar25;
|
|
VECTOR *v1;
|
|
DR_AREA *local_s2_676;
|
|
int r;
|
|
uint *puVar26;
|
|
int iVar27;
|
|
uint uVar28;
|
|
int iVar29;
|
|
uint uVar30;
|
|
SVECTOR MapMesh [5] [5];
|
|
VECTOR MapMeshO [5] [5];
|
|
MAPTEX MapTex [4];
|
|
SVECTOR direction;
|
|
RECT clipped_size;
|
|
VECTOR translate;
|
|
VECTOR vec;
|
|
long flag;
|
|
|
|
uVar6 = DAT_00010408;
|
|
uVar5 = DAT_00010404;
|
|
uVar4 = DAT_00010400;
|
|
if (gMultiplayerLevels != 0) {
|
|
DrawMultiplayerMap();
|
|
return;
|
|
}
|
|
if (1 < NumPlayers) {
|
|
return;
|
|
}
|
|
SetMapPos();
|
|
uVar28 = x_map & 0x1f;
|
|
uVar30 = y_map & 0x1f;
|
|
draw_box();
|
|
if (0 < player_position_known) {
|
|
if ((int)player[0].playerCarId < 0) {
|
|
psVar11 = &pedestrianFelony;
|
|
}
|
|
else {
|
|
psVar11 = &car_data[(int)player[0].playerCarId].felonyRating;
|
|
}
|
|
if (0x292 < *psVar11) {
|
|
FlashOverheadMap(INT_ARRAY_0009baac[CameraCnt & 0xf],0,
|
|
INT_ARRAY_0009baac[CameraCnt + 8U & 0xf]);
|
|
goto LAB_00016fac;
|
|
}
|
|
}
|
|
if (player_position_known == -1) {
|
|
if (flashtimer == 0) {
|
|
if ((int)player[0].playerCarId < 0) {
|
|
psVar11 = &pedestrianFelony;
|
|
}
|
|
else {
|
|
psVar11 = &car_data[(int)player[0].playerCarId].felonyRating;
|
|
}
|
|
if (0x292 < *psVar11) {
|
|
flashtimer = 0x30;
|
|
}
|
|
goto LAB_00016ee8;
|
|
}
|
|
}
|
|
else {
|
|
LAB_00016ee8:
|
|
if (flashtimer == 0) goto LAB_00016fac;
|
|
}
|
|
flashtimer = flashtimer + -1;
|
|
r = -flashtimer;
|
|
x = r + 0x2f;
|
|
if (x < 0) {
|
|
x = r + 0x32;
|
|
}
|
|
y = r + 0x30;
|
|
if (y < 0) {
|
|
y = r + 0x33;
|
|
}
|
|
y_00 = r + 0x31;
|
|
if (y_00 < 0) {
|
|
y_00 = r + 0x34;
|
|
}
|
|
iVar27 = r + 0x32;
|
|
if (iVar27 < 0) {
|
|
iVar27 = r + 0x35;
|
|
}
|
|
r = INT_ARRAY_0009baec[x >> 2] + INT_ARRAY_0009baec[y >> 2] + INT_ARRAY_0009baec[y_00 >> 2] +
|
|
INT_ARRAY_0009baec[iVar27 >> 2];
|
|
if (r < 0) {
|
|
r = r + 3;
|
|
}
|
|
r = r >> 2;
|
|
FlashOverheadMap(r,r,r);
|
|
LAB_00016fac:
|
|
local_s2_676 = (DR_AREA *)current->primptr;
|
|
SetDrawArea(local_s2_676,¤t->draw);
|
|
pDVar9 = current;
|
|
local_s2_676->tag = local_s2_676->tag & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)local_s2_676 & 0xffffff;
|
|
pDVar9->primptr = pDVar9->primptr + 0xc;
|
|
WorldToOverheadMapPositions((VECTOR *)player,&vec,1,'\0',0);
|
|
if (((vec.vx - 0xe9U < 0x5f) && (0xad < vec.vz)) && (vec.vz < 0xfb)) {
|
|
local_a0_864 = (TILE_1 *)current->primptr;
|
|
*(undefined *)((int)&local_a0_864->tag + 3) = 2;
|
|
local_a0_864->code = 'h';
|
|
local_a0_864->r0 = -1;
|
|
local_a0_864->g0 = -1;
|
|
local_a0_864->b0 = -1;
|
|
pDVar9 = current;
|
|
local_a0_864->x0 = (short)vec.vx;
|
|
local_a0_864->y0 = (short)vec.vz;
|
|
local_a0_864->tag = local_a0_864->tag & 0xff000000 | *pDVar9->ot & 0xffffff;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)local_a0_864 & 0xffffff;
|
|
pDVar9->primptr = pDVar9->primptr + 0xc;
|
|
}
|
|
DrawTargetBlip((VECTOR *)player,'@','@','@',3);
|
|
DrawCompass();
|
|
DrawOverheadTargets();
|
|
p_Var23 = car_data;
|
|
v0 = MapMesh + 5;
|
|
sVar2 = -(short)uVar28;
|
|
pSVar15 = MapMesh + 10;
|
|
pSVar17 = MapMesh + 0xf;
|
|
pSVar19 = MapMesh + 0x14;
|
|
sVar3 = -(short)uVar30;
|
|
if (true) {
|
|
do {
|
|
if (((p_Var23->controlType == '\x03') && (p_Var23->ai[0x13] == 0)) ||
|
|
((p_Var23->controlFlags & 1) != 0)) {
|
|
DrawSightCone(&copSightData,(VECTOR *)(p_Var23->hd).where.t,(p_Var23->hd).direction)
|
|
;
|
|
}
|
|
p_Var23 = p_Var23 + 1;
|
|
} while (p_Var23 < (_CAR_DATA *)0xd4698);
|
|
}
|
|
if ((uVar28 < 0x10) && (0x10 < old_x_mod)) {
|
|
r = 0;
|
|
pcVar24 = maptile;
|
|
pbVar25 = (byte *)(maptile + 8);
|
|
do {
|
|
bVar1 = *pcVar24;
|
|
x = x_map >> 5;
|
|
y = y_map >> 5;
|
|
*pcVar24 = pbVar25[-4];
|
|
y = y + r;
|
|
pbVar25[-4] = *pbVar25;
|
|
r = r + 1;
|
|
*pbVar25 = ((byte *)pcVar24)[0xc];
|
|
((byte *)pcVar24)[0xc] = bVar1;
|
|
LoadMapTile((uint)bVar1,x + 3,y);
|
|
pcVar24 = (char *)((byte *)pcVar24 + 1);
|
|
pbVar25 = pbVar25 + 1;
|
|
} while (r < 4);
|
|
}
|
|
if ((0x10 < uVar28) && (old_x_mod < 0x10)) {
|
|
r = 0;
|
|
pcVar24 = maptile;
|
|
pbVar25 = (byte *)(maptile + 0xc);
|
|
do {
|
|
x = r + 4;
|
|
bVar1 = *pbVar25;
|
|
y = x_map >> 5;
|
|
y_00 = (y_map >> 5) + r;
|
|
*pbVar25 = maptile[r + 8];
|
|
pbVar25 = pbVar25 + 1;
|
|
maptile[r + 8] = maptile[x];
|
|
r = r + 1;
|
|
maptile[x] = *pcVar24;
|
|
*pcVar24 = bVar1;
|
|
LoadMapTile((uint)bVar1,y,y_00);
|
|
pcVar24 = (char *)((byte *)pcVar24 + 1);
|
|
} while (r < 4);
|
|
}
|
|
if ((uVar30 < 0x10) && (0x10 < old_y_mod)) {
|
|
r = 0;
|
|
pcVar24 = maptile;
|
|
pbVar25 = (byte *)(maptile + 1);
|
|
do {
|
|
y_00 = r * 4;
|
|
bVar1 = *pcVar24;
|
|
x = (x_map >> 5) + r;
|
|
y = y_map >> 5;
|
|
*pcVar24 = *pbVar25;
|
|
r = r + 1;
|
|
*pbVar25 = maptile[y_00 + 2];
|
|
pbVar25 = pbVar25 + 4;
|
|
maptile[y_00 + 2] = ((byte *)pcVar24)[3];
|
|
((byte *)pcVar24)[3] = bVar1;
|
|
LoadMapTile((uint)bVar1,x,y + 3);
|
|
pcVar24 = (char *)((byte *)pcVar24 + 4);
|
|
} while (r < 4);
|
|
}
|
|
if ((0x10 < uVar30) && (old_y_mod < 0x10)) {
|
|
r = 0;
|
|
pcVar24 = maptile;
|
|
pbVar25 = (byte *)(maptile + 3);
|
|
do {
|
|
y_00 = r * 4;
|
|
bVar1 = *pbVar25;
|
|
x = (x_map >> 5) + r;
|
|
y = y_map >> 5;
|
|
*pbVar25 = maptile[y_00 + 2];
|
|
pbVar25 = pbVar25 + 4;
|
|
maptile[y_00 + 2] = maptile[y_00 + 1];
|
|
r = r + 1;
|
|
maptile[y_00 + 1] = *pcVar24;
|
|
*pcVar24 = bVar1;
|
|
LoadMapTile((uint)bVar1,x,y);
|
|
pcVar24 = (char *)((byte *)pcVar24 + 4);
|
|
} while (r < 4);
|
|
}
|
|
r = 3;
|
|
if (uVar28 != 0) {
|
|
r = 4;
|
|
}
|
|
x = 3;
|
|
if (uVar30 != 0) {
|
|
x = 4;
|
|
}
|
|
y_00 = 0;
|
|
y = 0;
|
|
pSVar21 = MapMesh;
|
|
old_x_mod = uVar28;
|
|
old_y_mod = uVar30;
|
|
do {
|
|
psVar12 = (short *)((int)&MapMesh[2].vz + y);
|
|
psVar11 = (short *)((int)&MapMesh[1].vz + y);
|
|
psVar13 = (short *)((int)&MapMesh[3].vz + y);
|
|
y_00 = y_00 + 1;
|
|
pSVar21->vx = -0x23;
|
|
v0->vx = sVar2 + -0x10;
|
|
v0 = v0 + 1;
|
|
pSVar21 = pSVar21 + 1;
|
|
pSVar15->vx = sVar2 + 0x10;
|
|
pSVar17->vx = sVar2 + 0x30;
|
|
pSVar19->vx = 0x23;
|
|
pSVar19 = pSVar19 + 1;
|
|
pSVar17 = pSVar17 + 1;
|
|
pSVar15 = pSVar15 + 1;
|
|
*(undefined2 *)((int)&MapMesh[0].vz + y) = 0xffdd;
|
|
puVar14 = (undefined2 *)((int)&MapMesh[4].vz + y);
|
|
y = y + 0x28;
|
|
*psVar11 = sVar3 + -0x10;
|
|
*psVar12 = sVar3 + 0x10;
|
|
*psVar13 = sVar3 + 0x30;
|
|
*puVar14 = 0x23;
|
|
} while (y_00 < 5);
|
|
MapTex[0].u = MapMesh[0][0].vx - MapMesh[1][0].vx;
|
|
if ((int)MapMesh[0][0].vx - (int)MapMesh[1][0].vx < 0) {
|
|
MapTex[0].u = MapMesh[1][0].vx - MapMesh[0][0].vx;
|
|
}
|
|
MapTex[0].u = 0x20 - MapTex[0].u;
|
|
MapTex[0].w = MapMesh[0][0].vx - MapMesh[1][0].vx;
|
|
if ((int)MapMesh[0][0].vx - (int)MapMesh[1][0].vx < 0) {
|
|
MapTex[0].w = MapMesh[1][0].vx - MapMesh[0][0].vx;
|
|
}
|
|
MapTex[1].w = ZEXT12((byte)tile_size);
|
|
MapTex[1].u = 0;
|
|
MapTex[2].u = 0;
|
|
MapTex[3].u = 0;
|
|
MapTex[2].w = ZEXT12((byte)tile_size);
|
|
if ((int)MapMesh[3][0].vx - (int)MapMesh[4][0].vx < 0) {
|
|
MapTex[3].w = MapMesh[4][0].vx - MapMesh[3][0].vx;
|
|
}
|
|
else {
|
|
MapTex[3].w = MapMesh[3][0].vx - MapMesh[4][0].vx;
|
|
}
|
|
if ((int)MapMesh[0][0].vz - (int)MapMesh[0][1].vz < 0) {
|
|
MapTex[0].v = MapMesh[0][1].vz - MapMesh[0][0].vz;
|
|
}
|
|
else {
|
|
MapTex[0].v = MapMesh[0][0].vz - MapMesh[0][1].vz;
|
|
}
|
|
MapTex[0].v = 0x20 - MapTex[0].v;
|
|
MapTex[0].h = MapMesh[0][0].vz - MapMesh[0][1].vz;
|
|
if ((int)MapMesh[0][0].vz - (int)MapMesh[0][1].vz < 0) {
|
|
MapTex[0].h = MapMesh[0][1].vz - MapMesh[0][0].vz;
|
|
}
|
|
MapTex[1].h = ZEXT12((byte)tile_size);
|
|
MapTex[1].v = 0;
|
|
MapTex[2].v = 0;
|
|
MapTex[3].v = 0;
|
|
MapTex[2].h = ZEXT12((byte)tile_size);
|
|
if ((int)MapMesh[0][3].vz - (int)MapMesh[0][4].vz < 0) {
|
|
MapTex[3].h = MapMesh[0][4].vz - MapMesh[0][3].vz;
|
|
}
|
|
else {
|
|
MapTex[3].h = MapMesh[0][3].vz - MapMesh[0][4].vz;
|
|
}
|
|
direction.vx = 0;
|
|
direction.vz = 0;
|
|
direction.vy = (ushort)player[0].dir & 0xfff;
|
|
RotMatrixXYZ(&map_matrix,&direction);
|
|
MulMatrix0(&aspect,&map_matrix,&map_matrix);
|
|
setCopControlWord(2,0,map_matrix.m[0]._0_4_);
|
|
setCopControlWord(2,0x800,map_matrix.m._4_4_);
|
|
setCopControlWord(2,0x1000,map_matrix.m[1]._2_4_);
|
|
setCopControlWord(2,0x1800,map_matrix.m[2]._0_4_);
|
|
setCopControlWord(2,0x2000,map_matrix._16_4_);
|
|
setCopControlWord(2,0x2800,uVar4);
|
|
setCopControlWord(2,0x3000,uVar5);
|
|
setCopControlWord(2,0x3800,uVar6);
|
|
y = 0;
|
|
if (true) {
|
|
do {
|
|
y_00 = y + 1;
|
|
if (true) {
|
|
v1 = MapMeshO + y * 5;
|
|
iVar27 = x + 1;
|
|
v0 = MapMesh + y * 5;
|
|
do {
|
|
RotTrans(v0,v1,&flag);
|
|
v1 = v1 + 1;
|
|
iVar27 = iVar27 + -1;
|
|
v0 = v0 + 1;
|
|
} while (iVar27 != 0);
|
|
}
|
|
y = y_00;
|
|
} while (y_00 <= r);
|
|
}
|
|
y = 0;
|
|
if (x != 0) {
|
|
do {
|
|
y_00 = 0;
|
|
iVar27 = y + 1;
|
|
if (r != 0) {
|
|
pbVar25 = (byte *)(maptile + y);
|
|
iVar29 = 0;
|
|
plVar18 = &MapMeshO[5].vz + iVar27 * 4;
|
|
plVar16 = &MapMeshO[5].vz + y * 4;
|
|
psVar11 = &MapTex[0].w;
|
|
do {
|
|
if (((&MapSegmentPos)[*pbVar25].x & 0x18U) == 0x18) {
|
|
cVar22 = (char)*psVar11 + -1;
|
|
}
|
|
else {
|
|
cVar22 = (char)*psVar11;
|
|
}
|
|
if (((&MapSegmentPos)[*pbVar25].y & 0x60U) == 0x60) {
|
|
cVar20 = (char)MapTex[y].h + -1;
|
|
}
|
|
else {
|
|
cVar20 = (char)MapTex[y].h;
|
|
}
|
|
local_a3_2816 = (POLY_F4 *)current->primptr;
|
|
*(undefined *)((int)&local_a3_2816->tag + 3) = 9;
|
|
local_a3_2816->code = ',';
|
|
uVar10 = 'd';
|
|
if (gTimeOfDay == 3) {
|
|
uVar10 = '2';
|
|
}
|
|
local_a3_2816->r0 = uVar10;
|
|
local_a3_2816->g0 = uVar10;
|
|
local_a3_2816->b0 = uVar10;
|
|
local_a3_2816->code = local_a3_2816->code | 2;
|
|
uVar8 = MapClut;
|
|
local_a3_2816->x0 = *(short *)(plVar16 + -0x16);
|
|
local_a3_2816->y0 = *(short *)(plVar16 + -0x14);
|
|
local_a3_2816->x2 = *(short *)(plVar16 + -2);
|
|
local_a3_2816->y2 = *(short *)plVar16;
|
|
*(short *)&local_a3_2816[1].tag = *(short *)(plVar18 + -0x16);
|
|
*(short *)((int)&local_a3_2816[1].tag + 2) = *(short *)(plVar18 + -0x14);
|
|
uVar7 = MapTPage;
|
|
pcVar24 = (char *)((int)&MapTex[0].u + iVar29);
|
|
local_a3_2816[1].x0 = *(short *)(plVar18 + -2);
|
|
sVar2 = *(short *)plVar18;
|
|
local_a3_2816->y1 = uVar8;
|
|
local_a3_2816->y3 = uVar7;
|
|
local_a3_2816[1].y0 = sVar2;
|
|
psVar12 = &MapTex[y].v;
|
|
*(char *)&local_a3_2816->x1 =
|
|
*pcVar24 + *(char *)&(&MapSegmentPos)[*pbVar25].x * '\x04';
|
|
*(char *)((int)&local_a3_2816->x1 + 1) =
|
|
*(char *)psVar12 + *(char *)&(&MapSegmentPos)[*pbVar25].y;
|
|
*(char *)&local_a3_2816->x3 =
|
|
*pcVar24 + *(char *)&(&MapSegmentPos)[*pbVar25].x * '\x04' + cVar22;
|
|
*(char *)((int)&local_a3_2816->x3 + 1) =
|
|
*(char *)psVar12 + *(char *)&(&MapSegmentPos)[*pbVar25].y;
|
|
iVar29 = iVar29 + 8;
|
|
local_a3_2816[1].r0 = *pcVar24 + *(char *)&(&MapSegmentPos)[*pbVar25].x * '\x04'
|
|
;
|
|
psVar11 = psVar11 + 4;
|
|
local_a3_2816[1].g0 =
|
|
*(char *)psVar12 + *(char *)&(&MapSegmentPos)[*pbVar25].y + cVar20;
|
|
y_00 = y_00 + 1;
|
|
*(char *)&local_a3_2816[1].x1 =
|
|
*pcVar24 + *(char *)&(&MapSegmentPos)[*pbVar25].x * '\x04' + cVar22;
|
|
plVar16 = plVar16 + 0x14;
|
|
*(char *)((int)&local_a3_2816[1].x1 + 1) =
|
|
*(char *)psVar12 + *(char *)&(&MapSegmentPos)[*pbVar25].y + cVar20;
|
|
pDVar9 = current;
|
|
plVar18 = plVar18 + 0x14;
|
|
local_a3_2816->tag = local_a3_2816->tag & 0xff000000 | *current->ot & 0xffffff;
|
|
pbVar25 = pbVar25 + 4;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)local_a3_2816 & 0xffffff;
|
|
pDVar9->primptr = pDVar9->primptr + 0x28;
|
|
} while (y_00 < r);
|
|
}
|
|
y = iVar27;
|
|
} while (iVar27 < x);
|
|
}
|
|
local_a0_3412 = (POLY_F4 *)current->primptr;
|
|
*(undefined *)((int)&local_a0_3412->tag + 3) = 5;
|
|
local_a0_3412->r0 = '<';
|
|
local_a0_3412->g0 = '<';
|
|
local_a0_3412->b0 = '<';
|
|
local_a0_3412->code = '*';
|
|
pDVar9 = current;
|
|
local_a0_3412->y0 = 0xb6;
|
|
local_a0_3412->y1 = 0xb6;
|
|
local_a0_3412->x0 = 0xf5;
|
|
local_a0_3412->x1 = 0x13b;
|
|
local_a0_3412->x2 = 0xf5;
|
|
local_a0_3412->y2 = 0xf2;
|
|
local_a0_3412->x3 = 0x13b;
|
|
local_a0_3412->y3 = 0xf2;
|
|
local_a0_3412->tag = local_a0_3412->tag & 0xff000000 | *pDVar9->ot & 0xffffff;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)local_a0_3412 & 0xffffff;
|
|
local_a3_3552 = (POLY_FT4 *)pDVar9->primptr;
|
|
*(POLY_FT4 **)&pDVar9->primptr = local_a3_3552 + 1;
|
|
*(undefined *)((int)&local_a3_3552[1].tag + 3) = 7;
|
|
local_a3_3552[1].code = '$';
|
|
local_a3_3552[1].x0 = -1;
|
|
local_a3_3552[1].y0 = -1;
|
|
local_a3_3552[1].x1 = -1;
|
|
local_a3_3552[1].y1 = -1;
|
|
local_a3_3552[1].x2 = -1;
|
|
local_a3_3552[1].y2 = -1;
|
|
local_a3_3552[1].tpage = 0;
|
|
pDVar9 = current;
|
|
local_a3_3552[1].tag = local_a3_3552[1].tag & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)(local_a3_3552 + 1) & 0xffffff;
|
|
pDVar9->primptr = pDVar9->primptr + 0x20;
|
|
clipped_size.x = 0xfa;
|
|
clipped_size.w = 0x3c;
|
|
clipped_size.h = 0x3c;
|
|
clipped_size.y = (pDVar9->draw).clip.y + 0xb6;
|
|
puVar26 = (uint *)pDVar9->primptr;
|
|
SetDrawArea(puVar26,&clipped_size);
|
|
pDVar9 = current;
|
|
*puVar26 = *puVar26 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar9->ot = *pDVar9->ot & 0xff000000 | (uint)puVar26 & 0xffffff;
|
|
pDVar9->primptr = pDVar9->primptr + 0xc;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawFullscreenMap()
|
|
// line 1374, offset 0x00017c30
|
|
/* begin block 1 */
|
|
// Start line: 1376
|
|
// Start offset: 0x00017C30
|
|
// Variables:
|
|
// struct TILE *polys; // $v0
|
|
// struct POLY_FT4 *back; // $a1
|
|
// struct POLY_FT3 *null; // $a2
|
|
// struct SVECTOR Mesh[4]; // stack offset -192
|
|
// struct VECTOR MeshO[4]; // stack offset -160
|
|
// struct VECTOR target; // stack offset -96
|
|
// long flag; // stack offset -64
|
|
// long count; // $s4
|
|
// int width; // stack offset -60
|
|
// int height; // stack offset -56
|
|
// int x; // $s7
|
|
// int y; // $s3
|
|
// int min_x; // $a0
|
|
// int max_x; // $v0
|
|
// int min_y; // $v1
|
|
// int max_y; // $v1
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 1439
|
|
// Start offset: 0x00017E30
|
|
// Variables:
|
|
// int px; // $a2
|
|
// int pz; // $a1
|
|
/* end block 1.1 */
|
|
// End offset: 0x00017F88
|
|
// End Line: 1500
|
|
|
|
/* begin block 1.2 */
|
|
// Start line: 1554
|
|
// Start offset: 0x00017FF4
|
|
// Variables:
|
|
// int clipped; // $s5
|
|
/* end block 1.2 */
|
|
// End offset: 0x00018210
|
|
// End Line: 1606
|
|
|
|
/* begin block 1.3 */
|
|
// Start line: 1620
|
|
// Start offset: 0x000182B0
|
|
|
|
/* begin block 1.3.1 */
|
|
// Start line: 1620
|
|
// Start offset: 0x000182B0
|
|
// Variables:
|
|
// struct VECTOR vec; // stack offset -80
|
|
// struct TILE_1 *tile1; // $v1
|
|
/* end block 1.3.1 */
|
|
// End offset: 0x000182B0
|
|
// End Line: 1620
|
|
/* end block 1.3 */
|
|
// End offset: 0x000182B0
|
|
// End Line: 1620
|
|
/* end block 1 */
|
|
// End offset: 0x000183E8
|
|
// End Line: 1637
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3464
|
|
/* end block 2 */
|
|
// End Line: 3465
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3465
|
|
/* end block 3 */
|
|
// End Line: 3466
|
|
|
|
/* begin block 4 */
|
|
// Start line: 3475
|
|
/* end block 4 */
|
|
// End Line: 3476
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawFullscreenMap(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
ushort uVar1;
|
|
short sVar2;
|
|
char *pcVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint *puVar7;
|
|
uint *puVar8;
|
|
short *psVar9;
|
|
int y;
|
|
int iVar10;
|
|
int x;
|
|
short local_c0;
|
|
undefined2 local_be;
|
|
short local_bc;
|
|
short local_b8;
|
|
undefined2 local_b6;
|
|
short local_b4;
|
|
short local_b0;
|
|
undefined2 local_ae;
|
|
short local_ac;
|
|
short local_a8;
|
|
undefined2 local_a6;
|
|
short local_a4;
|
|
uint local_a0[2];
|
|
uint local_98[2];
|
|
undefined2 local_90;
|
|
undefined2 local_88;
|
|
undefined2 local_80;
|
|
undefined2 local_78;
|
|
undefined2 local_70;
|
|
undefined2 local_68;
|
|
VECTOR local_60;
|
|
int local_50;
|
|
long local_4c;
|
|
int local_48;
|
|
long local_44;
|
|
undefined auStack64[4];
|
|
int local_3c;
|
|
int local_38;
|
|
int local_34;
|
|
VECTOR *local_30;
|
|
|
|
if ((Pads[0].dirnew & 0x20) != 0) {
|
|
map_x_offset = 0;
|
|
map_z_offset = 0;
|
|
map_x_shift = 0;
|
|
map_z_shift = 0;
|
|
gUseRotatedMap = gUseRotatedMap ^ 1;
|
|
}
|
|
SetFullscreenMapMatrix();
|
|
pcVar3 = current->primptr;
|
|
pcVar3[3] = '\x03';
|
|
pcVar3[7] = '`';
|
|
pcVar3[4] = '\0';
|
|
pcVar3[5] = '\0';
|
|
pcVar3[6] = '\0';
|
|
*(undefined2 *)(pcVar3 + 8) = 0;
|
|
*(undefined2 *)(pcVar3 + 10) = 0;
|
|
*(undefined2 *)(pcVar3 + 0xc) = 0x140;
|
|
*(undefined2 *)(pcVar3 + 0xe) = 0x100;
|
|
DrawPrim(pcVar3);
|
|
DrawSync(0);
|
|
local_3c = overlaidmaps[GameLevel].width;
|
|
local_38 = overlaidmaps[GameLevel].height;
|
|
WorldToFullscreenMap((VECTOR *)&player, &player_position);
|
|
if (gUseRotatedMap != 0) {
|
|
if ((Pads[0].direct & 0x8000) == 0) {
|
|
if ((Pads[0].direct & 0x2000) != 0) {
|
|
map_x_offset = map_x_offset + -8;
|
|
}
|
|
}
|
|
else {
|
|
map_x_offset = map_x_offset + 8;
|
|
}
|
|
if ((Pads[0].direct & 0x1000) == 0) {
|
|
if ((Pads[0].direct & 0x4000) != 0) {
|
|
map_z_offset = map_z_offset + -8;
|
|
}
|
|
}
|
|
else {
|
|
map_z_offset = map_z_offset + 8;
|
|
}
|
|
if (map_x_offset < -0x80) {
|
|
map_x_offset = -0x80;
|
|
}
|
|
if (0x80 < map_x_offset) {
|
|
map_x_offset = 0x80;
|
|
}
|
|
if (map_z_offset < -0x80) {
|
|
map_z_offset = -0x80;
|
|
}
|
|
if (0x80 < map_z_offset) {
|
|
map_z_offset = 0x80;
|
|
}
|
|
map_x_shift = 0;
|
|
map_z_shift = 0;
|
|
goto LAB_00017f8c;
|
|
}
|
|
map_x_offset = (player_position.vx + 0xa0) - local_3c;
|
|
if ((player_position.vx + 0xa0 <= local_3c) &&
|
|
(map_x_offset = player_position.vx + -0xa0, -1 < map_x_offset)) {
|
|
map_x_offset = 0;
|
|
}
|
|
map_z_offset = (player_position.vz + 0x80) - local_38;
|
|
if ((player_position.vz + 0x80 <= local_38) &&
|
|
(map_z_offset = player_position.vz + -0x80, -1 < map_z_offset)) {
|
|
map_z_offset = 0;
|
|
}
|
|
if ((Pads[0].direct & 0x8000) == 0) {
|
|
if (((Pads[0].direct & 0x2000) != 0) &&
|
|
(iVar5 = map_x_shift + -8,
|
|
((player_position.vx - map_x_offset) + 0xa0) - map_x_shift < local_3c)) goto LAB_00017f0c;
|
|
}
|
|
else {
|
|
iVar5 = map_x_shift + 8;
|
|
if (0 < ((player_position.vx - map_x_offset) + -0xa0) - map_x_shift) {
|
|
LAB_00017f0c:
|
|
map_x_shift = iVar5;
|
|
}
|
|
}
|
|
if ((Pads[0].direct & 0x1000) == 0) {
|
|
if (((Pads[0].direct & 0x4000) != 0) &&
|
|
(iVar5 = map_z_shift + -8,
|
|
((player_position.vz - map_z_offset) + 0x80) - map_z_shift < local_38)) goto LAB_00017f64;
|
|
}
|
|
else {
|
|
iVar5 = map_z_shift + 8;
|
|
if (0 < ((player_position.vz - map_z_offset) + -0x80) - map_z_shift) {
|
|
LAB_00017f64:
|
|
map_z_shift = iVar5;
|
|
}
|
|
}
|
|
map_x_offset = map_x_offset + map_x_shift;
|
|
map_z_offset = map_z_offset + map_z_shift;
|
|
LAB_00017f8c:
|
|
pcVar3 = current->primptr;
|
|
pcVar3[3] = '\a';
|
|
pcVar3[7] = '$';
|
|
uVar1 = MapTPage;
|
|
*(undefined2 *)(pcVar3 + 8) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 10) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x10) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x12) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x18) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x1a) = 0xffff;
|
|
*(ushort *)(pcVar3 + 0x16) = uVar1;
|
|
DrawPrim(pcVar3);
|
|
DrawSync(0);
|
|
local_30 = &local_60;
|
|
iVar5 = 0;
|
|
while (true) {
|
|
x = iVar5;
|
|
iVar5 = local_3c;
|
|
if (local_3c < 0) {
|
|
iVar5 = local_3c + 0x1f;
|
|
}
|
|
if (iVar5 >> 5 <= x) break;
|
|
local_34 = x + 1;
|
|
iVar5 = 0;
|
|
while (true) {
|
|
y = iVar5;
|
|
iVar4 = local_38;
|
|
if (local_38 < 0) {
|
|
iVar4 = local_38 + 0x1f;
|
|
}
|
|
iVar10 = 0;
|
|
iVar5 = local_34;
|
|
if (iVar4 >> 5 <= y) break;
|
|
puVar8 = (uint *)local_98;
|
|
puVar7 = (uint *)local_a0;
|
|
psVar9 = &local_c0;
|
|
iVar5 = 3;
|
|
local_be = 0;
|
|
local_b6 = 0;
|
|
local_ae = 0;
|
|
local_a6 = 0;
|
|
local_c0 = (short)x * 0x20 - (short)player_position.vx;
|
|
local_b8 = local_c0 + 0x20;
|
|
local_bc = (short)y * 0x20 - (short)player_position.vz;
|
|
local_ac = local_bc + 0x20;
|
|
local_b4 = local_bc;
|
|
local_b0 = local_c0;
|
|
local_a8 = local_b8;
|
|
local_a4 = local_ac;
|
|
do {
|
|
RotTrans(psVar9, puVar7, auStack64);
|
|
*puVar7 = *puVar7 + map_x_offset;
|
|
uVar6 = *puVar8;
|
|
*puVar8 = uVar6 + map_z_offset;
|
|
if ((0x140 < *puVar7) || (0x100 < uVar6 + map_z_offset)) {
|
|
iVar10 = iVar10 + 1;
|
|
}
|
|
puVar8 = puVar8 + 4;
|
|
puVar7 = puVar7 + 4;
|
|
iVar5 = iVar5 + -1;
|
|
psVar9 = psVar9 + 4;
|
|
} while (-1 < iVar5);
|
|
iVar5 = y + 1;
|
|
if (iVar10 != 4) {
|
|
LoadMapTile(0, x, y);
|
|
pcVar3 = current->primptr;
|
|
pcVar3[3] = '\t';
|
|
pcVar3[4] = 'X';
|
|
pcVar3[5] = 'X';
|
|
pcVar3[6] = 'X';
|
|
pcVar3[7] = ',';
|
|
*(undefined2 *)(pcVar3 + 8) = (undefined2)local_a0[0];
|
|
*(undefined2 *)(pcVar3 + 10) = (undefined2)local_98[0];
|
|
*(undefined2 *)(pcVar3 + 0x10) = local_90;
|
|
*(undefined2 *)(pcVar3 + 0x12) = local_88;
|
|
*(undefined2 *)(pcVar3 + 0x18) = local_80;
|
|
*(undefined2 *)(pcVar3 + 0x1a) = local_78;
|
|
*(undefined2 *)(pcVar3 + 0x20) = local_70;
|
|
*(undefined2 *)(pcVar3 + 0x22) = local_68;
|
|
pcVar3[0xc] = (char)MapSegmentPos.x << 2;
|
|
pcVar3[0xd] = (char)MapSegmentPos.y;
|
|
pcVar3[0x14] = (char)MapSegmentPos.x * '\x04' + '\x1f';
|
|
pcVar3[0x15] = (char)MapSegmentPos.y;
|
|
pcVar3[0x1c] = (char)MapSegmentPos.x << 2;
|
|
pcVar3[0x1d] = (char)MapSegmentPos.y + '\x1f';
|
|
pcVar3[0x24] = (char)MapSegmentPos.x * '\x04' + '\x1f';
|
|
pcVar3[0x25] = (char)MapSegmentPos.y + '\x1f';
|
|
*(ushort *)(pcVar3 + 0xe) = MapClut;
|
|
DrawPrim(pcVar3);
|
|
DrawSync(0);
|
|
}
|
|
}
|
|
}
|
|
local_60.vx = 0xa0;
|
|
local_60.vz = 0x80;
|
|
DrawFullscreenTargets();
|
|
if (gUseRotatedMap == 0) {
|
|
DrawBigCompass(local_30, 0);
|
|
}
|
|
else {
|
|
DrawBigCompass(local_30, player.dir);
|
|
}
|
|
DrawTargetBlip(local_30, '@', '@', '@', 0xe);
|
|
local_44 = local_60.pad;
|
|
local_50 = local_60.vx + map_x_offset;
|
|
local_4c = local_60.vy;
|
|
local_48 = local_60.vz + map_z_offset;
|
|
pcVar3 = current->primptr;
|
|
pcVar3[3] = '\x02';
|
|
pcVar3[7] = 'h';
|
|
pcVar3[4] = -1;
|
|
pcVar3[5] = -1;
|
|
pcVar3[6] = -1;
|
|
*(undefined2 *)(pcVar3 + 8) = (undefined2)local_50;
|
|
*(undefined2 *)(pcVar3 + 10) = (undefined2)local_48;
|
|
DrawPrim(pcVar3);
|
|
pcVar3 = current->primptr;
|
|
pcVar3[3] = '\a';
|
|
pcVar3[7] = '$';
|
|
sVar2 = fonttpage;
|
|
*(undefined2 *)(pcVar3 + 8) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 10) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x10) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x12) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x18) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x1a) = 0xffff;
|
|
*(short *)(pcVar3 + 0x16) = sVar2;
|
|
DrawPrim(pcVar3);
|
|
DrawSync(0);
|
|
SetTextColour(-0x80, -0x80, -0x80);
|
|
PrintStringCentred(&DAT_00010410, 0xe2);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawCopIndicators()
|
|
// line 1645, offset 0x000183e8
|
|
/* begin block 1 */
|
|
// Start line: 1647
|
|
// Start offset: 0x000183E8
|
|
// Variables:
|
|
// static int ft[16]; // offset 0x188
|
|
// struct _CAR_DATA *cp; // $s0
|
|
// int fade; // $s1
|
|
// int cc; // $s3
|
|
// int cs; // $s2
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 1662
|
|
// Start offset: 0x00018480
|
|
// Variables:
|
|
// int dx; // $a3
|
|
// int dz; // $a1
|
|
// int p; // $a1
|
|
// int q; // $a0
|
|
// int ap; // $v1
|
|
|
|
/* begin block 1.1.1 */
|
|
// Start line: 1670
|
|
// Start offset: 0x00018510
|
|
/* end block 1.1.1 */
|
|
// End offset: 0x00018568
|
|
// End Line: 1673
|
|
/* end block 1.1 */
|
|
// End offset: 0x00018568
|
|
// End Line: 1674
|
|
/* end block 1 */
|
|
// End offset: 0x000185A0
|
|
// End Line: 1676
|
|
|
|
/* begin block 2 */
|
|
// Start line: 4171
|
|
/* end block 2 */
|
|
// End Line: 4172
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4180
|
|
/* end block 3 */
|
|
// End Line: 4181
|
|
|
|
/* begin block 4 */
|
|
// Start line: 4181
|
|
/* end block 4 */
|
|
// End Line: 4182
|
|
|
|
/* begin block 5 */
|
|
// Start line: 4190
|
|
/* end block 5 */
|
|
// End Line: 4191
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawCopIndicators(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
short sVar1;
|
|
short sVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
_CAR_DATA *p_Var7;
|
|
|
|
p_Var7 = car_data;
|
|
sVar1 = rcossin_tbl[(player.dir & 0xfffU) * 2 + 1];
|
|
sVar2 = rcossin_tbl[(player.dir & 0xfffU) * 2];
|
|
do {
|
|
if ((p_Var7->controlType == '\x03') && (p_Var7->ai[0x13] == 0)) {
|
|
iVar6 = (p_Var7->hd).where.t[0] - player.pos[0];
|
|
iVar4 = (p_Var7->hd).where.t[2] - player.pos[2];
|
|
iVar5 = ((iVar6 * sVar1 - iVar4 * sVar2) + 0x800 >> 0xc) * 3;
|
|
if (iVar5 < 0) {
|
|
iVar5 = iVar5 + 3;
|
|
}
|
|
iVar5 = iVar5 >> 2;
|
|
iVar3 = iVar6 * sVar2 + iVar4 * sVar1 + 0x800 >> 0xc;
|
|
iVar4 = -iVar3;
|
|
iVar6 = iVar5;
|
|
if (iVar5 < 0) {
|
|
iVar6 = -iVar5;
|
|
}
|
|
if (iVar6 < iVar4) {
|
|
iVar5 = (iVar5 * 0x10a) / iVar4;
|
|
if (iVar4 == 0) {
|
|
trap(7);
|
|
}
|
|
if (0 < iVar3) {
|
|
iVar4 = iVar4 + 7;
|
|
}
|
|
iVar4 = (iVar4 >> 3) + 600;
|
|
if (iVar4 == 0) {
|
|
trap(7);
|
|
}
|
|
CopIndicator(iVar5 + 0xa0, 0x3fff0 / iVar4);
|
|
}
|
|
}
|
|
p_Var7 = p_Var7 + 1;
|
|
} while (p_Var7 < (_CAR_DATA *)0xd4698);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ InitMultiplayerMap()
|
|
// line 1678, offset 0x000198e0
|
|
/* begin block 1 */
|
|
// Start line: 1680
|
|
// Start offset: 0x000198E0
|
|
// Variables:
|
|
// struct RECT rect; // stack offset -48
|
|
// char filename[32]; // stack offset -40
|
|
/* end block 1 */
|
|
// End offset: 0x00019994
|
|
// End Line: 1695
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6693
|
|
/* end block 2 */
|
|
// End Line: 6694
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6694
|
|
/* end block 3 */
|
|
// End Line: 6695
|
|
|
|
/* begin block 4 */
|
|
// Start line: 6697
|
|
/* end block 4 */
|
|
// End Line: 6698
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void InitMultiplayerMap(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
short local_30;
|
|
short local_2e;
|
|
undefined2 local_2c;
|
|
undefined2 local_2a;
|
|
char acStack40[32];
|
|
|
|
if (MissionHeader->region != 0) {
|
|
sprintf(acStack40, s_MAPS_REG_d__d_00010428, MissionHeader->region, GameLevel);
|
|
iVar1 = FileExists(acStack40);
|
|
if (iVar1 != 0) {
|
|
Loadfile(acStack40, MapBitMaps);
|
|
local_2c = 0x10;
|
|
local_2a = 0x40;
|
|
local_30 = MapRect.x + MapSegmentPos.x;
|
|
local_2e = MapRect.y + MapSegmentPos.y;
|
|
LoadImage(&local_30, MapBitMaps);
|
|
DrawSync(0);
|
|
}
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawMultiplayerMap()
|
|
// line 1697, offset 0x000185a0
|
|
/* begin block 1 */
|
|
// Start line: 1699
|
|
// Start offset: 0x000185A0
|
|
// Variables:
|
|
// struct POLY_FT4 *poly; // $a2
|
|
// struct LINE_F2 *line2; // $s1
|
|
// struct VECTOR target; // stack offset -64
|
|
// int i; // $s3
|
|
// int y; // $s7
|
|
/* end block 1 */
|
|
// End offset: 0x00018980
|
|
// End Line: 1776
|
|
|
|
/* begin block 2 */
|
|
// Start line: 4309
|
|
/* end block 2 */
|
|
// End Line: 4310
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4331
|
|
/* end block 3 */
|
|
// End Line: 4332
|
|
|
|
/* begin block 4 */
|
|
// Start line: 4332
|
|
/* end block 4 */
|
|
// End Line: 4333
|
|
|
|
/* begin block 5 */
|
|
// Start line: 4339
|
|
/* end block 5 */
|
|
// End Line: 4340
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawMultiplayerMap(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
DB *pDVar3;
|
|
char cVar4;
|
|
ulong *puVar5;
|
|
uint *puVar6;
|
|
char *pcVar7;
|
|
_PLAYER *p_Var8;
|
|
int iVar9;
|
|
char *pcVar10;
|
|
uchar g;
|
|
uchar r;
|
|
int iVar11;
|
|
undefined2 uVar12;
|
|
int iVar13;
|
|
VECTOR local_40;
|
|
int local_30;
|
|
int local_2c;
|
|
|
|
map_x_offset = 0;
|
|
map_z_offset = 0;
|
|
iVar13 = 0x60;
|
|
if (NumPlayers == 1) {
|
|
iVar13 = 0xac;
|
|
}
|
|
if (MissionHeader->region != 0) {
|
|
iVar9 = 0;
|
|
DrawMultiplayerTargets();
|
|
local_2c = iVar13 + 0x40;
|
|
local_30 = iVar13 + -1;
|
|
if (NumPlayers != 0) {
|
|
p_Var8 = &player;
|
|
iVar11 = 0;
|
|
r = -1;
|
|
g = '\0';
|
|
do {
|
|
local_40.vx = p_Var8->pos[0];
|
|
local_40.vz = *(int *)((int)player.pos + iVar11 + 8);
|
|
iVar9 = iVar9 + 1;
|
|
local_40.vy = 0;
|
|
WorldToMultiplayerMap(&local_40, &local_40);
|
|
local_40.vx = local_40.vx + 0xf0;
|
|
local_40.vz = local_40.vz + iVar13;
|
|
DrawPlayerDot(&local_40, -*(short *)&p_Var8->dir, r, g, 0, 8);
|
|
p_Var8 = p_Var8 + 1;
|
|
iVar11 = iVar11 + 0x74;
|
|
r = r + '\x01';
|
|
g = g + -1;
|
|
} while (iVar9 < (int)(uint)NumPlayers);
|
|
}
|
|
puVar6 = (uint *)current->primptr;
|
|
*(char *)((int)puVar6 + 3) = '\t';
|
|
*(char *)((int)puVar6 + 7) = ',';
|
|
*(undefined2 *)(puVar6 + 2) = 0xf0;
|
|
uVar12 = (undefined2)iVar13;
|
|
*(undefined2 *)((int)puVar6 + 10) = uVar12;
|
|
*(undefined2 *)(puVar6 + 4) = 0x130;
|
|
*(undefined2 *)((int)puVar6 + 0x12) = uVar12;
|
|
*(undefined2 *)(puVar6 + 6) = 0xf0;
|
|
*(undefined2 *)(puVar6 + 8) = 0x130;
|
|
*(undefined2 *)((int)puVar6 + 0x1a) = (short)local_2c;
|
|
*(undefined2 *)((int)puVar6 + 0x22) = (short)local_2c;
|
|
*(char *)(puVar6 + 3) = (char)MapSegmentPos.x << 2;
|
|
*(char *)((int)puVar6 + 0xd) = (char)MapSegmentPos.y;
|
|
*(char *)(puVar6 + 5) = (char)MapSegmentPos.x * '\x04' + '?';
|
|
*(char *)((int)puVar6 + 0x15) = (char)MapSegmentPos.y;
|
|
*(char *)(puVar6 + 7) = (char)MapSegmentPos.x << 2;
|
|
*(char *)((int)puVar6 + 0x1d) = (char)MapSegmentPos.y + '?';
|
|
*(char *)(puVar6 + 9) = (char)MapSegmentPos.x * '\x04' + '?';
|
|
*(char *)((int)puVar6 + 0x25) = (char)MapSegmentPos.y + '?';
|
|
uVar2 = MapClut;
|
|
uVar1 = MapTPage;
|
|
*(char *)((int)puVar6 + 7) = '.';
|
|
*(ushort *)((int)puVar6 + 0xe) = uVar2;
|
|
*(ushort *)((int)puVar6 + 0x16) = uVar1;
|
|
cVar4 = 'd';
|
|
if (gTimeOfDay == 3) {
|
|
cVar4 = '2';
|
|
}
|
|
*(char *)(puVar6 + 1) = cVar4;
|
|
*(char *)((int)puVar6 + 5) = cVar4;
|
|
*(char *)((int)puVar6 + 6) = cVar4;
|
|
pDVar3 = current;
|
|
*puVar6 = *puVar6 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar3->ot = *pDVar3->ot & 0xff000000 | (uint)puVar6 & 0xffffff;
|
|
pcVar10 = pDVar3->primptr;
|
|
pcVar7 = pcVar10 + 0x28;
|
|
pDVar3->primptr = pcVar7;
|
|
SetLineF4(pcVar7);
|
|
*(undefined2 *)(pcVar10 + 0x30) = 0xef;
|
|
pcVar10[0x2c] = '\0';
|
|
pcVar10[0x2d] = '\0';
|
|
pcVar10[0x2e] = -0x80;
|
|
pDVar3 = current;
|
|
*(short *)(pcVar10 + 0x32) = (short)local_30;
|
|
*(undefined2 *)(pcVar10 + 0x34) = 0x130;
|
|
*(undefined2 *)(pcVar10 + 0x38) = 0x130;
|
|
*(short *)(pcVar10 + 0x36) = (short)local_30;
|
|
*(undefined2 *)(pcVar10 + 0x3c) = 0xf0;
|
|
*(short *)(pcVar10 + 0x3a) = (short)local_2c;
|
|
*(short *)(pcVar10 + 0x3e) = (short)local_2c;
|
|
*(uint *)(pcVar10 + 0x28) = *(uint *)(pcVar10 + 0x28) & 0xff000000 | pDVar3->ot[1] & 0xffffff;
|
|
puVar5 = pDVar3->ot;
|
|
puVar5[1] = puVar5[1] & 0xff000000 | (uint)pcVar7 & 0xffffff;
|
|
SetLineF2(pcVar10 + 0x44);
|
|
pcVar10[0x48] = '\0';
|
|
pcVar10[0x49] = '\0';
|
|
pcVar10[0x4a] = -0x80;
|
|
pDVar3 = current;
|
|
*(undefined2 *)(pcVar10 + 0x4c) = 0xef;
|
|
*(undefined2 *)(pcVar10 + 0x4e) = uVar12;
|
|
*(undefined2 *)(pcVar10 + 0x50) = 0xef;
|
|
*(short *)(pcVar10 + 0x52) = (short)local_2c;
|
|
*(uint *)(pcVar10 + 0x44) = *(uint *)(pcVar10 + 0x44) & 0xff000000 | pDVar3->ot[1] & 0xffffff;
|
|
pDVar3->ot[1] = pDVar3->ot[1] & 0xff000000 | (uint)(pcVar10 + 0x44) & 0xffffff;
|
|
pDVar3->primptr = pDVar3->primptr + 0x2c;
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ WorldToMultiplayerMap(struct VECTOR *in /*$a3*/, struct VECTOR *out /*$a2*/)
|
|
// line 1778, offset 0x00019994
|
|
/* begin block 1 */
|
|
// Start line: 1779
|
|
// Start offset: 0x00019994
|
|
// Variables:
|
|
// int x; // $v1
|
|
// int z; // $a0
|
|
/* end block 1 */
|
|
// End offset: 0x00019A60
|
|
// End Line: 1795
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6811
|
|
/* end block 2 */
|
|
// End Line: 6812
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6895
|
|
/* end block 3 */
|
|
// End Line: 6896
|
|
|
|
/* begin block 4 */
|
|
// Start line: 6898
|
|
/* end block 4 */
|
|
// End Line: 6899
|
|
|
|
void WorldToMultiplayerMap(VECTOR *in, VECTOR *out)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar1 = MissionHeader->region;
|
|
if (iVar1 != 0) {
|
|
iVar3 = iVar1 / regions_across;
|
|
if (regions_across == 0) {
|
|
trap(7);
|
|
}
|
|
if (regions_across == 0) {
|
|
trap(7);
|
|
}
|
|
iVar2 = in->vx - ((iVar1 % regions_across) * 0x10000 + cells_across * -0x400);
|
|
iVar1 = cells_down * -0x400;
|
|
if (iVar2 < 0) {
|
|
iVar2 = iVar2 + 0x7ff;
|
|
}
|
|
out->vx = iVar2 >> 0xb;
|
|
iVar1 = in->vz - ((iVar3 + -1) * 0x10000 + iVar1);
|
|
if (iVar1 < 0) {
|
|
iVar1 = iVar1 + 0x7ff;
|
|
}
|
|
out->vz = 0x40 - (iVar1 >> 0xb);
|
|
return;
|
|
}
|
|
out->vx = 0x20;
|
|
out->vz = 0x20;
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ ProcessPalletLump(char *lump_ptr /*$a0*/, int lump_size /*$a1*/)
|
|
// line 1970, offset 0x00019f44
|
|
/* begin block 1 */
|
|
// Start line: 1971
|
|
// Start offset: 0x00019F44
|
|
// Variables:
|
|
// int total_cluts; // $v0
|
|
// int clutValue; // $s1
|
|
// int tpageindex; // $s2
|
|
// int texnum; // $s3
|
|
// int palette; // $s4
|
|
// int clut_number; // $v1
|
|
// unsigned short clutTable[320]; // stack offset -680
|
|
// char *buffPtr; // $s0
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2013
|
|
// Start offset: 0x00019FD0
|
|
/* end block 1.1 */
|
|
// End offset: 0x00019FD0
|
|
// End Line: 2013
|
|
/* end block 1 */
|
|
// End offset: 0x0001A094
|
|
// End Line: 2034
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8209
|
|
/* end block 2 */
|
|
// End Line: 8210
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3940
|
|
/* end block 3 */
|
|
// End Line: 3941
|
|
|
|
unsigned short civ_clut[8][32][6];
|
|
|
|
// [D]
|
|
void ProcessPalletLump(char *lump_ptr, int lump_size)
|
|
{
|
|
char cVar1;
|
|
ushort uVar2;
|
|
int *local_s0_96;
|
|
int *local_s0_228;
|
|
int iVar3;
|
|
int iVar4;
|
|
u_short *puVar5;
|
|
unsigned short clutTable[320];
|
|
|
|
if ((*(int *)lump_ptr != 0) && (*(int *)(lump_ptr + 4) != -1))
|
|
{
|
|
local_s0_96 = (int *)(lump_ptr + 4);
|
|
|
|
puVar5 = (u_short *)clutTable;
|
|
do {
|
|
iVar4 = *local_s0_96;
|
|
iVar3 = local_s0_96[1];
|
|
|
|
cVar1 = GetCarPalIndex(local_s0_96[2]);
|
|
|
|
local_s0_228 = local_s0_96 + 4;
|
|
|
|
if (local_s0_96[3] == -1) {
|
|
LoadImage(&clutpos, (u_long *)local_s0_228);
|
|
|
|
local_s0_228 = local_s0_96 + 12;
|
|
|
|
uVar2 = GetClut((int)clutpos.x, (int)clutpos.y);
|
|
|
|
*puVar5 = uVar2;
|
|
puVar5 = puVar5 + 1;
|
|
IncrementClutNum(&clutpos);
|
|
}
|
|
else {
|
|
uVar2 = clutTable[local_s0_96[3]];
|
|
}
|
|
|
|
civ_clut[cVar1][iVar3][iVar4 + 1] = uVar2;
|
|
|
|
local_s0_96 = local_s0_228;
|
|
|
|
} while (*local_s0_228 != -1);
|
|
}
|
|
|
|
//Emulator_SaveVRAM("VRAM_CLUTS.TGA", 0, 0, VRAM_WIDTH, VRAM_HEIGHT, TRUE);
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ load_civ_palettes(struct RECT *cluts /*$a0*/)
|
|
// line 2043, offset 0x0001a094
|
|
/* begin block 1 */
|
|
// Start line: 8350
|
|
/* end block 1 */
|
|
// End Line: 8351
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8360
|
|
/* end block 2 */
|
|
// End Line: 8361
|
|
|
|
/* begin block 3 */
|
|
// Start line: 8510
|
|
/* end block 3 */
|
|
// End Line: 8511
|
|
|
|
void load_civ_palettes(RECT16 *cluts)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ FlashOverheadMap(int r /*$a0*/, int g /*$a1*/, int b /*$a2*/)
|
|
// line 2319, offset 0x00018980
|
|
/* begin block 1 */
|
|
// Start line: 2321
|
|
// Start offset: 0x00018980
|
|
// Variables:
|
|
// struct TILE *tile; // $a3
|
|
/* end block 1 */
|
|
// End offset: 0x00018AA0
|
|
// End Line: 2341
|
|
|
|
/* begin block 2 */
|
|
// Start line: 5094
|
|
/* end block 2 */
|
|
// End Line: 5095
|
|
|
|
/* begin block 3 */
|
|
// Start line: 5638
|
|
/* end block 3 */
|
|
// End Line: 5639
|
|
|
|
/* begin block 4 */
|
|
// Start line: 5639
|
|
/* end block 4 */
|
|
// End Line: 5640
|
|
|
|
/* begin block 5 */
|
|
// Start line: 5650
|
|
/* end block 5 */
|
|
// End Line: 5651
|
|
|
|
void FlashOverheadMap(int r, int g, int b)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
DB *pDVar1;
|
|
uint *puVar2;
|
|
char *pcVar3;
|
|
|
|
puVar2 = (uint *)current->primptr;
|
|
*(char *)((int)puVar2 + 3) = '\x03';
|
|
*(char *)(puVar2 + 1) = (char)r;
|
|
*(char *)((int)puVar2 + 5) = (char)g;
|
|
*(char *)((int)puVar2 + 6) = (char)b;
|
|
*(char *)((int)puVar2 + 7) = 'b';
|
|
pDVar1 = current;
|
|
*(undefined2 *)(puVar2 + 2) = 0xfa;
|
|
*(undefined2 *)((int)puVar2 + 10) = 0xb6;
|
|
*(undefined2 *)(puVar2 + 3) = 0x3c;
|
|
*(undefined2 *)((int)puVar2 + 0xe) = 0x3c;
|
|
*puVar2 = *puVar2 & 0xff000000 | *pDVar1->ot & 0xffffff;
|
|
*pDVar1->ot = *pDVar1->ot & 0xff000000 | (uint)puVar2 & 0xffffff;
|
|
pcVar3 = pDVar1->primptr;
|
|
pDVar1->primptr = pcVar3 + 0x10;
|
|
pcVar3[0x13] = '\a';
|
|
pcVar3[0x17] = '$';
|
|
pDVar1 = current;
|
|
*(undefined2 *)(pcVar3 + 0x18) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x1a) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x20) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x22) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x28) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x2a) = 0xffff;
|
|
*(undefined2 *)(pcVar3 + 0x26) = 0x20;
|
|
*(uint *)(pcVar3 + 0x10) = *(uint *)(pcVar3 + 0x10) & 0xff000000 | *pDVar1->ot & 0xffffff;
|
|
*pDVar1->ot = *pDVar1->ot & 0xff000000 | (uint)(pcVar3 + 0x10) & 0xffffff;
|
|
pDVar1->primptr = pDVar1->primptr + 0x20;
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ LoadMapTile(int tpage /*$a0*/, int x /*$a1*/, int y /*$a2*/)
|
|
// line 2350, offset 0x00018aa0
|
|
/* begin block 1 */
|
|
// Start line: 2351
|
|
// Start offset: 0x00018AA0
|
|
// Variables:
|
|
// struct RECT MapSegment; // stack offset -16
|
|
// int temp; // $a0
|
|
// int count; // $a2
|
|
// int idx; // $a3
|
|
/* end block 1 */
|
|
// End offset: 0x00018BF4
|
|
// End Line: 2383
|
|
|
|
/* begin block 2 */
|
|
// Start line: 5724
|
|
/* end block 2 */
|
|
// End Line: 5725
|
|
|
|
/* begin block 3 */
|
|
// Start line: 5734
|
|
/* end block 3 */
|
|
// End Line: 5735
|
|
|
|
/* begin block 4 */
|
|
// Start line: 5742
|
|
/* end block 4 */
|
|
// End Line: 5743
|
|
|
|
void LoadMapTile(int tpage, int x, int y)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
char cVar1;
|
|
char *pcVar2;
|
|
int iVar3;
|
|
short local_10;
|
|
short local_e;
|
|
undefined2 local_c;
|
|
undefined2 local_a;
|
|
|
|
local_c = 8;
|
|
local_a = 0x20;
|
|
local_e = MapRect.y + (&MapSegmentPos)[tpage].y;
|
|
local_10 = MapRect.x + (&MapSegmentPos)[tpage].x;
|
|
iVar3 = x + y * tilehnum;
|
|
if ((((iVar3 < (int)(uint)(byte)overlaidmaps[GameLevel].toptile) && (-1 < iVar3)) && (-1 < x << 5)
|
|
) && (x << 5 < overlaidmaps[GameLevel].width)) {
|
|
UnpackRNC(MapBitMaps + *(ushort *)(MapBitMaps + iVar3 * 2), MapBuffer);
|
|
}
|
|
else {
|
|
iVar3 = 0x1ff;
|
|
pcVar2 = CHAR_ARRAY_000aba47;
|
|
cVar1 = overlaidmaps[GameLevel].dummy;
|
|
do {
|
|
*pcVar2 = cVar1;
|
|
iVar3 = iVar3 + -1;
|
|
pcVar2 = pcVar2 + -1;
|
|
} while (-1 < iVar3);
|
|
}
|
|
DrawSync(0);
|
|
LoadImage(&local_10, MapBuffer);
|
|
DrawSync(0);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ SetMapPos()
|
|
// line 2392, offset 0x00019a60
|
|
/* begin block 1 */
|
|
// Start line: 7532
|
|
/* end block 1 */
|
|
// End Line: 7533
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8130
|
|
/* end block 2 */
|
|
// End Line: 8131
|
|
|
|
/* begin block 3 */
|
|
// Start line: 8131
|
|
/* end block 3 */
|
|
// End Line: 8132
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void SetMapPos(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
|
|
iVar1 = overlaidmaps[GameLevel].scale;
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
x_map = overlaidmaps[GameLevel].x_offset + player.pos[0] / iVar1;
|
|
y_map = overlaidmaps[GameLevel].y_offset - player.pos[2] / iVar1;
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ draw_box()
|
|
// line 2405, offset 0x00018bf4
|
|
/* begin block 1 */
|
|
// Start line: 2407
|
|
// Start offset: 0x00018BF4
|
|
// Variables:
|
|
// struct LINE_F4 *line4; // $s0
|
|
// struct LINE_F2 *line2; // $s1
|
|
/* end block 1 */
|
|
// End offset: 0x00018D54
|
|
// End Line: 2427
|
|
|
|
/* begin block 2 */
|
|
// Start line: 5860
|
|
/* end block 2 */
|
|
// End Line: 5861
|
|
|
|
/* begin block 3 */
|
|
// Start line: 5883
|
|
/* end block 3 */
|
|
// End Line: 5884
|
|
|
|
/* begin block 4 */
|
|
// Start line: 5884
|
|
/* end block 4 */
|
|
// End Line: 5885
|
|
|
|
/* begin block 5 */
|
|
// Start line: 5887
|
|
/* end block 5 */
|
|
// End Line: 5888
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void draw_box(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
DB *pDVar1;
|
|
ulong *puVar2;
|
|
uint *puVar3;
|
|
|
|
puVar3 = (uint *)current->primptr;
|
|
SetLineF4(puVar3);
|
|
*(char *)(puVar3 + 1) = '\0';
|
|
*(char *)((int)puVar3 + 5) = '\0';
|
|
*(char *)((int)puVar3 + 6) = -0x80;
|
|
pDVar1 = current;
|
|
*(undefined2 *)(puVar3 + 2) = 0xf9;
|
|
*(undefined2 *)((int)puVar3 + 10) = 0xb5;
|
|
*(undefined2 *)(puVar3 + 3) = 0x136;
|
|
*(undefined2 *)((int)puVar3 + 0xe) = 0xb5;
|
|
*(undefined2 *)(puVar3 + 4) = 0x136;
|
|
*(undefined2 *)((int)puVar3 + 0x12) = 0xf2;
|
|
*(undefined2 *)(puVar3 + 5) = 0xf9;
|
|
*(undefined2 *)((int)puVar3 + 0x16) = 0xf2;
|
|
*puVar3 = *puVar3 & 0xff000000 | pDVar1->ot[1] & 0xffffff;
|
|
puVar2 = pDVar1->ot;
|
|
puVar2[1] = puVar2[1] & 0xff000000 | (uint)puVar3 & 0xffffff;
|
|
SetLineF2(puVar3 + 7);
|
|
*(char *)(puVar3 + 8) = '\0';
|
|
*(char *)((int)puVar3 + 0x21) = '\0';
|
|
*(char *)((int)puVar3 + 0x22) = -0x80;
|
|
pDVar1 = current;
|
|
*(undefined2 *)(puVar3 + 9) = 0xf9;
|
|
*(undefined2 *)((int)puVar3 + 0x26) = 0xb5;
|
|
*(undefined2 *)(puVar3 + 10) = 0xf9;
|
|
*(undefined2 *)((int)puVar3 + 0x2a) = 0xf2;
|
|
puVar3[7] = puVar3[7] & 0xff000000 | pDVar1->ot[1] & 0xffffff;
|
|
pDVar1->ot[1] = pDVar1->ot[1] & 0xff000000 | (uint)(puVar3 + 7) & 0xffffff;
|
|
pDVar1->primptr = pDVar1->primptr + 0x2c;
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawN(struct VECTOR *pScreenPosition /*$s2*/, int direct /*$s7*/)
|
|
// line 2435, offset 0x00018d54
|
|
/* begin block 1 */
|
|
// Start line: 2436
|
|
// Start offset: 0x00018D54
|
|
// Variables:
|
|
// struct XYPAIR lastPoint; // stack offset -48
|
|
// struct XYPAIR *pPoint; // $s0
|
|
// char loop; // $s4
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2446
|
|
// Start offset: 0x00018DC4
|
|
// Variables:
|
|
// struct LINE_F2 *pLine; // $a2
|
|
/* end block 1.1 */
|
|
// End offset: 0x00018EC4
|
|
// End Line: 2469
|
|
/* end block 1 */
|
|
// End offset: 0x00018F18
|
|
// End Line: 2471
|
|
|
|
/* begin block 2 */
|
|
// Start line: 5969
|
|
/* end block 2 */
|
|
// End Line: 5970
|
|
|
|
/* begin block 3 */
|
|
// Start line: 5978
|
|
/* end block 3 */
|
|
// End Line: 5979
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
|
|
void DrawN(VECTOR *pScreenPosition, int direct)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
DB *pDVar2;
|
|
byte bVar3;
|
|
uint *puVar4;
|
|
XYPAIR *pXVar5;
|
|
int local_30;
|
|
int local_2c;
|
|
|
|
pXVar5 = &XYPAIR_0009ba3c;
|
|
bVar3 = 0;
|
|
local_30 = NVertex.x + pScreenPosition->vx;
|
|
local_2c = NVertex.y + pScreenPosition->vz;
|
|
do {
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\x03';
|
|
*(char *)((int)puVar4 + 7) = '@';
|
|
*(undefined2 *)(puVar4 + 2) = (undefined2)local_30;
|
|
*(undefined2 *)((int)puVar4 + 10) = (undefined2)local_2c;
|
|
local_30 = pXVar5->x + pScreenPosition->vx;
|
|
local_2c = pXVar5->y + pScreenPosition->vz;
|
|
*(undefined2 *)(puVar4 + 3) = (undefined2)local_30;
|
|
iVar1 = gTimeOfDay;
|
|
*(undefined2 *)((int)puVar4 + 0xe) = (undefined2)local_2c;
|
|
if (iVar1 == 3) {
|
|
*(char *)(puVar4 + 1) = 'K';
|
|
*(char *)((int)puVar4 + 5) = 'K';
|
|
*(char *)((int)puVar4 + 6) = 'K';
|
|
}
|
|
else {
|
|
*(char *)(puVar4 + 1) = '`';
|
|
*(char *)((int)puVar4 + 5) = '`';
|
|
*(char *)((int)puVar4 + 6) = '`';
|
|
}
|
|
*(byte *)((int)puVar4 + 7) = *(byte *)((int)puVar4 + 7) | 2;
|
|
pDVar2 = current;
|
|
if (direct == 0) {
|
|
*puVar4 = *puVar4 & 0xff000000 | *current->ot & 0xffffff;
|
|
*pDVar2->ot = *pDVar2->ot & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
}
|
|
else {
|
|
DrawPrim(puVar4);
|
|
}
|
|
bVar3 = bVar3 + 1;
|
|
pXVar5 = pXVar5 + 1;
|
|
current->primptr = current->primptr + 0x10;
|
|
} while (bVar3 < 3);
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawCompass()
|
|
// line 2479, offset 0x00018f18
|
|
/* begin block 1 */
|
|
// Start line: 2481
|
|
// Start offset: 0x00018F18
|
|
// Variables:
|
|
// struct VECTOR position[5]; // stack offset -88
|
|
// struct XYPAIR *pNorth; // $a1
|
|
// int scale; // $a0
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2482
|
|
// Start offset: 0x00018F18
|
|
// Variables:
|
|
// char loop; // $t2
|
|
// struct VECTOR *pPosition; // $a3
|
|
// void *pot; // $s0
|
|
|
|
/* begin block 1.1.1 */
|
|
// Start line: 2511
|
|
// Start offset: 0x000190B8
|
|
// Variables:
|
|
// struct LINE_G2 *pLine; // $a0
|
|
/* end block 1.1.1 */
|
|
// End offset: 0x000190B8
|
|
// End Line: 2511
|
|
/* end block 1.1 */
|
|
// End offset: 0x00019194
|
|
// End Line: 2525
|
|
/* end block 1 */
|
|
// End offset: 0x00019194
|
|
// End Line: 2526
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6209
|
|
/* end block 2 */
|
|
// End Line: 6210
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6218
|
|
/* end block 3 */
|
|
// End Line: 6219
|
|
|
|
/* begin block 4 */
|
|
// Start line: 6219
|
|
/* end block 4 */
|
|
// End Line: 6220
|
|
|
|
/* begin block 5 */
|
|
// Start line: 6220
|
|
/* end block 5 */
|
|
// End Line: 6221
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawCompass(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
undefined2 uVar1;
|
|
DB *pDVar2;
|
|
byte bVar3;
|
|
uint *puVar4;
|
|
int *piVar5;
|
|
ulong *potz;
|
|
VECTOR local_58;
|
|
int local_48;
|
|
int local_40;
|
|
int local_38[2];
|
|
int local_30;
|
|
VECTOR local_28;
|
|
int local_18;
|
|
int local_10;
|
|
|
|
local_48 = north[GameLevel].x * overlaidmaps[GameLevel].scale;
|
|
local_40 = north[GameLevel].y * overlaidmaps[GameLevel].scale;
|
|
local_58.vx = local_48 * 0x14 + 8 >> 4;
|
|
local_38[0] = local_48 + 2 >> 2;
|
|
local_58.vz = local_40 * 0x14 + 8 >> 4;
|
|
local_30 = local_40 + 2 >> 2;
|
|
local_28.vx = (local_40 - local_48) * 0xab >> 10;
|
|
local_28.vz = (-local_48 - local_40) * 0xab >> 10;
|
|
local_10 = -local_28.vx;
|
|
local_18 = local_28.vz;
|
|
WorldToOverheadMapPositions(&local_58, &local_58, 3, '\x01', 0);
|
|
WorldToOverheadMapPositions(&local_28, &local_28, 2, '\x01', 1);
|
|
piVar5 = local_38;
|
|
bVar3 = 0;
|
|
local_28.vx = local_28.vx + local_48;
|
|
local_28.vz = local_28.vz + local_40;
|
|
local_18 = local_18 + local_48;
|
|
local_10 = local_10 + local_40;
|
|
potz = current->ot;
|
|
do {
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\x04';
|
|
*(char *)((int)puVar4 + 7) = 'P';
|
|
*(undefined2 *)(puVar4 + 2) = (undefined2)local_48;
|
|
*(undefined2 *)((int)puVar4 + 10) = (undefined2)local_40;
|
|
*(undefined2 *)(puVar4 + 4) = *(undefined2 *)piVar5;
|
|
uVar1 = *(undefined2 *)(piVar5 + 2);
|
|
piVar5 = piVar5 + 4;
|
|
*(char *)(puVar4 + 1) = '`';
|
|
*(char *)((int)puVar4 + 5) = '`';
|
|
*(char *)((int)puVar4 + 6) = '`';
|
|
*(char *)(puVar4 + 3) = '\0';
|
|
*(char *)((int)puVar4 + 0xd) = '\0';
|
|
*(char *)((int)puVar4 + 0xe) = '\0';
|
|
*(char *)((int)puVar4 + 7) = 'R';
|
|
*(undefined2 *)((int)puVar4 + 0x12) = uVar1;
|
|
pDVar2 = current;
|
|
bVar3 = bVar3 + 1;
|
|
*puVar4 = *puVar4 & 0xff000000 | *potz & 0xffffff;
|
|
*potz = *potz & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
pDVar2->primptr = pDVar2->primptr + 0x14;
|
|
} while (bVar3 < 3);
|
|
DrawN(&local_58, 0);
|
|
TransparencyOn(potz, 0x20);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawBigCompass(struct VECTOR *root /*$a0*/, int angle /*$a1*/)
|
|
// line 2534, offset 0x00019194
|
|
/* begin block 1 */
|
|
// Start line: 2535
|
|
// Start offset: 0x00019194
|
|
// Variables:
|
|
// struct VECTOR position[5]; // stack offset -96
|
|
// struct VECTOR *pPosition; // $s0
|
|
// char loop; // $s1
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2557
|
|
// Start offset: 0x00019300
|
|
// Variables:
|
|
// struct LINE_G2 *pLine; // $a1
|
|
/* end block 1.1 */
|
|
// End offset: 0x00019300
|
|
// End Line: 2557
|
|
/* end block 1 */
|
|
// End offset: 0x000193B4
|
|
// End Line: 2569
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6432
|
|
/* end block 2 */
|
|
// End Line: 6433
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6433
|
|
/* end block 3 */
|
|
// End Line: 6434
|
|
|
|
/* begin block 4 */
|
|
// Start line: 6442
|
|
/* end block 4 */
|
|
// End Line: 6443
|
|
|
|
/* begin block 5 */
|
|
// Start line: 6444
|
|
/* end block 5 */
|
|
// End Line: 6445
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
|
|
void DrawBigCompass(VECTOR *root, int angle)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
undefined2 uVar1;
|
|
byte bVar2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int *piVar7;
|
|
VECTOR local_60;
|
|
int local_50;
|
|
int local_4c;
|
|
int local_40;
|
|
int local_3c;
|
|
int local_30;
|
|
int local_2c;
|
|
int local_20;
|
|
int local_1c;
|
|
|
|
piVar7 = &local_40;
|
|
bVar2 = 0;
|
|
local_40 = root->vx + map_x_offset;
|
|
uVar5 = big_north[GameLevel] + angle & 0xfff;
|
|
local_3c = root->vz + map_z_offset;
|
|
local_50 = local_40 + ((int)rcossin_tbl[uVar5 * 2] * 0x19 >> 0xc);
|
|
local_60.vx = local_40 + ((int)rcossin_tbl[uVar5 * 2] * 0xf >> 0xb);
|
|
uVar3 = uVar5 - 200 & 0xfff;
|
|
uVar6 = uVar5 + 200 & 0xfff;
|
|
local_4c = local_3c + ((int)rcossin_tbl[uVar5 * 2 + 1] * 0x19 >> 0xc);
|
|
local_60.vz = local_3c + ((int)rcossin_tbl[uVar5 * 2 + 1] * 0xf >> 0xb);
|
|
local_30 = local_40 + ((int)rcossin_tbl[uVar3 * 2] * 5 >> 10);
|
|
local_2c = local_3c + ((int)rcossin_tbl[uVar3 * 2 + 1] * 5 >> 10);
|
|
local_20 = local_40 + ((int)rcossin_tbl[uVar6 * 2] * 5 >> 10);
|
|
local_1c = local_3c + ((int)rcossin_tbl[uVar6 * 2 + 1] * 5 >> 10);
|
|
do {
|
|
pcVar4 = current->primptr;
|
|
pcVar4[3] = '\x04';
|
|
pcVar4[7] = 'P';
|
|
*(undefined2 *)(pcVar4 + 8) = (undefined2)local_50;
|
|
*(undefined2 *)(pcVar4 + 10) = (undefined2)local_4c;
|
|
*(undefined2 *)(pcVar4 + 0x10) = *(undefined2 *)piVar7;
|
|
uVar1 = *(undefined2 *)(piVar7 + 1);
|
|
piVar7 = piVar7 + 4;
|
|
pcVar4[4] = '`';
|
|
pcVar4[5] = '`';
|
|
pcVar4[6] = '`';
|
|
pcVar4[0xc] = '\0';
|
|
pcVar4[0xd] = '\0';
|
|
pcVar4[0xe] = '\0';
|
|
pcVar4[7] = 'R';
|
|
*(undefined2 *)(pcVar4 + 0x12) = uVar1;
|
|
DrawPrim(pcVar4);
|
|
bVar2 = bVar2 + 1;
|
|
current->primptr = current->primptr + 0x14;
|
|
} while (bVar2 < 3);
|
|
DrawN(&local_60, 1);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ CopIndicator(int xpos /*$a3*/, int strength /*$a1*/)
|
|
// line 2577, offset 0x000193b4
|
|
/* begin block 1 */
|
|
// Start line: 2578
|
|
// Start offset: 0x000193B4
|
|
// Variables:
|
|
// struct POLY_F3 *tri; // $a2
|
|
// int str2; // $fp
|
|
// void *pot; // stack offset -56
|
|
/* end block 1 */
|
|
// End offset: 0x00019594
|
|
// End Line: 2607
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6667
|
|
/* end block 2 */
|
|
// End Line: 6668
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6676
|
|
/* end block 3 */
|
|
// End Line: 6677
|
|
|
|
/* begin block 4 */
|
|
// Start line: 6680
|
|
/* end block 4 */
|
|
// End Line: 6681
|
|
|
|
void CopIndicator(int xpos, int strength)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
short sVar1;
|
|
DB *pDVar2;
|
|
char cVar3;
|
|
uint *puVar4;
|
|
ulong *puVar5;
|
|
int iVar6;
|
|
|
|
puVar5 = current->ot;
|
|
if (0xff < strength) {
|
|
strength = 0xff;
|
|
}
|
|
iVar6 = strength * (strength + 0x100);
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\x04';
|
|
*(char *)((int)puVar4 + 7) = ' ';
|
|
*(char *)(puVar4 + 1) = (char)strength;
|
|
if (strength < 0) {
|
|
strength = strength + 3;
|
|
}
|
|
cVar3 = (char)(strength >> 2);
|
|
*(char *)((int)puVar4 + 5) = cVar3;
|
|
sVar1 = (short)xpos;
|
|
*(char *)((int)puVar4 + 6) = cVar3;
|
|
*(short *)(puVar4 + 2) = sVar1 + -0xc;
|
|
*(undefined2 *)((int)puVar4 + 10) = 0x100;
|
|
*(short *)(puVar4 + 3) = sVar1;
|
|
*(undefined2 *)((int)puVar4 + 0xe) = 0xe2;
|
|
*(short *)(puVar4 + 4) = sVar1 + 0xc;
|
|
*(undefined2 *)((int)puVar4 + 0x12) = 0x100;
|
|
*(char *)((int)puVar4 + 7) = '\"';
|
|
*puVar4 = *puVar4 & 0xff000000 | puVar5[1] & 0xffffff;
|
|
pDVar2 = current;
|
|
puVar5[1] = puVar5[1] & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
pDVar2->primptr = pDVar2->primptr + 0x14;
|
|
TransparencyOn(puVar5 + 1, 0x20);
|
|
puVar4 = (uint *)current->primptr;
|
|
*(char *)((int)puVar4 + 3) = '\x04';
|
|
cVar3 = (char)(iVar6 >> 9);
|
|
*(char *)(puVar4 + 1) = cVar3;
|
|
*(char *)((int)puVar4 + 5) = cVar3;
|
|
*(char *)((int)puVar4 + 6) = cVar3;
|
|
*(short *)(puVar4 + 2) = sVar1 + -0xc;
|
|
*(undefined2 *)((int)puVar4 + 10) = 0x100;
|
|
*(undefined2 *)((int)puVar4 + 0xe) = 0xe2;
|
|
*(short *)(puVar4 + 4) = sVar1 + 0xc;
|
|
*(undefined2 *)((int)puVar4 + 0x12) = 0x100;
|
|
*(char *)((int)puVar4 + 7) = '\"';
|
|
*(short *)(puVar4 + 3) = sVar1;
|
|
*puVar4 = *puVar4 & 0xff000000 | puVar5[1] & 0xffffff;
|
|
pDVar2 = current;
|
|
puVar5[1] = puVar5[1] & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
pDVar2->primptr = pDVar2->primptr + 0x14;
|
|
TransparencyOn(puVar5 + 1, 0x40);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawSightCone(struct COP_SIGHT_DATA *pCopSightData /*$a0*/, struct VECTOR *pPosition /*$a1*/, int direction /*$t6*/)
|
|
// line 2609, offset 0x00019594
|
|
/* begin block 1 */
|
|
// Start line: 2610
|
|
// Start offset: 0x00019594
|
|
// Variables:
|
|
// struct VECTOR vertex[9]; // stack offset -160
|
|
// struct VECTOR *pVertex; // $t0
|
|
// int angle; // $a3
|
|
// int frontViewAngle; // $t1
|
|
// int negFrontViewAngle; // $a2
|
|
// int frontViewDistance; // $t4
|
|
// int surroundViewDistance; // $t3
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2624
|
|
// Start offset: 0x000195E8
|
|
// Variables:
|
|
// int len; // $a1
|
|
|
|
/* begin block 1.1.1 */
|
|
// Start line: 2636
|
|
// Start offset: 0x00019600
|
|
// Variables:
|
|
// int temp; // $v0
|
|
/* end block 1.1.1 */
|
|
// End offset: 0x00019600
|
|
// End Line: 2636
|
|
/* end block 1.1 */
|
|
// End offset: 0x00019600
|
|
// End Line: 2636
|
|
|
|
/* begin block 1.2 */
|
|
// Start line: 2643
|
|
// Start offset: 0x0001966C
|
|
// Variables:
|
|
// struct VECTOR *pVertex; // $a2
|
|
// void *pot; // $a3
|
|
|
|
/* begin block 1.2.1 */
|
|
// Start line: 2651
|
|
// Start offset: 0x000196B8
|
|
// Variables:
|
|
// struct POLY_G3 *poly; // $a1
|
|
// struct VECTOR *pNextVertex; // $a0
|
|
/* end block 1.2.1 */
|
|
// End offset: 0x000196DC
|
|
// End Line: 2659
|
|
/* end block 1.2 */
|
|
// End offset: 0x000197BC
|
|
// End Line: 2670
|
|
/* end block 1 */
|
|
// End offset: 0x000197BC
|
|
// End Line: 2671
|
|
|
|
/* begin block 2 */
|
|
// Start line: 6761
|
|
/* end block 2 */
|
|
// End Line: 6762
|
|
|
|
/* begin block 3 */
|
|
// Start line: 6764
|
|
/* end block 3 */
|
|
// End Line: 6765
|
|
|
|
/* WARNING: Could not reconcile some variable overlaps */
|
|
|
|
void DrawSightCone(COP_SIGHT_DATA *pCopSightData, VECTOR *pPosition, int direction)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
short sVar1;
|
|
short sVar2;
|
|
short sVar3;
|
|
short sVar4;
|
|
short sVar5;
|
|
undefined2 uVar6;
|
|
DB *pDVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
int *piVar10;
|
|
uint *puVar11;
|
|
int iVar12;
|
|
ulong *potz;
|
|
int *piVar13;
|
|
int local_a0;
|
|
int local_98;
|
|
int local_90[2];
|
|
int local_88[26];
|
|
int aiStack32[4];
|
|
|
|
iVar12 = 0;
|
|
sVar1 = pCopSightData->frontViewDistance;
|
|
sVar2 = pCopSightData->surroundViewDistance;
|
|
sVar3 = pCopSightData->frontViewAngle;
|
|
local_a0 = pPosition->vx;
|
|
local_98 = pPosition->vz;
|
|
piVar13 = local_90;
|
|
do {
|
|
if ((iVar12 <= (int)sVar3) || (sVar4 = sVar2, 0x1000 - (int)sVar3 <= iVar12)) {
|
|
sVar4 = sVar1;
|
|
}
|
|
uVar8 = iVar12 + direction & 0xfff;
|
|
sVar5 = rcossin_tbl[uVar8 * 2 + 1];
|
|
iVar12 = iVar12 + 0x200;
|
|
*piVar13 = local_a0 + ((int)rcossin_tbl[uVar8 * 2] * (int)sVar4 + 0x800 >> 0xc);
|
|
piVar13[2] = local_98 + ((int)sVar5 * (int)sVar4 + 0x800 >> 0xc);
|
|
piVar13 = piVar13 + 4;
|
|
} while (iVar12 < 0x1000);
|
|
WorldToOverheadMapPositions((VECTOR *)&local_a0, (VECTOR *)&local_a0, 9, '\0', 0);
|
|
potz = current->ot;
|
|
piVar13 = local_90;
|
|
while (piVar13 < &stack0xfffffff0) {
|
|
piVar9 = piVar13 + 4;
|
|
puVar11 = (uint *)current->primptr;
|
|
piVar10 = piVar9;
|
|
if (aiStack32 < piVar9) {
|
|
piVar10 = local_90;
|
|
}
|
|
*(char *)((int)puVar11 + 3) = '\x06';
|
|
*(char *)((int)puVar11 + 7) = '0';
|
|
*(undefined2 *)(puVar11 + 2) = (undefined2)local_a0;
|
|
*(undefined2 *)((int)puVar11 + 10) = (undefined2)local_98;
|
|
*(undefined2 *)(puVar11 + 4) = *(undefined2 *)piVar13;
|
|
*(undefined2 *)((int)puVar11 + 0x12) = *(undefined2 *)(piVar13 + 2);
|
|
*(undefined2 *)(puVar11 + 6) = *(undefined2 *)piVar10;
|
|
uVar6 = *(undefined2 *)(piVar10 + 2);
|
|
*(char *)(puVar11 + 1) = '`';
|
|
*(char *)((int)puVar11 + 5) = '`';
|
|
*(char *)((int)puVar11 + 6) = '`';
|
|
*(char *)(puVar11 + 3) = '\0';
|
|
*(char *)((int)puVar11 + 0xd) = '\0';
|
|
*(char *)((int)puVar11 + 0xe) = '\0';
|
|
*(char *)(puVar11 + 5) = '\0';
|
|
*(char *)((int)puVar11 + 0x15) = '\0';
|
|
*(char *)((int)puVar11 + 0x16) = '\0';
|
|
*(char *)((int)puVar11 + 7) = '2';
|
|
*(undefined2 *)((int)puVar11 + 0x1a) = uVar6;
|
|
*puVar11 = *puVar11 & 0xff000000 | *potz & 0xffffff;
|
|
pDVar7 = current;
|
|
*potz = *potz & 0xff000000 | (uint)puVar11 & 0xffffff;
|
|
pDVar7->primptr = pDVar7->primptr + 0x1c;
|
|
piVar13 = piVar9;
|
|
}
|
|
TransparencyOn(potz, 0x20);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ WorldToOverheadMapPositions(struct VECTOR *pGlobalPosition /*$s1*/, struct VECTOR *pOverheadMapPosition /*$s3*/, int count /*$s2*/, char inputRelative /*$s5*/, int outputRelative /*stack 16*/)
|
|
// line 2703, offset 0x00019af0
|
|
/* begin block 1 */
|
|
// Start line: 2704
|
|
// Start offset: 0x00019AF0
|
|
// Variables:
|
|
// struct MATRIX TempMatrix; // stack offset -80
|
|
// int sin; // $a1
|
|
// int cos; // $a2
|
|
// int angle; // $v1
|
|
// int scale; // $s0
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 2745
|
|
// Start offset: 0x00019C20
|
|
// Variables:
|
|
// struct SVECTOR tempVector; // stack offset -48
|
|
// long flag; // stack offset -40
|
|
/* end block 1.1 */
|
|
// End offset: 0x00019CC0
|
|
// End Line: 2760
|
|
/* end block 1 */
|
|
// End offset: 0x00019D0C
|
|
// End Line: 2764
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8754
|
|
/* end block 2 */
|
|
// End Line: 8755
|
|
|
|
void WorldToOverheadMapPositions(VECTOR *pGlobalPosition, VECTOR *pOverheadMapPosition, int count, char inputRelative,int outputRelative)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
uint local_50;
|
|
uint local_4c;
|
|
uint local_44;
|
|
uint local_40;
|
|
undefined4 local_3c;
|
|
undefined4 local_34;
|
|
undefined2 local_30;
|
|
undefined2 local_2e;
|
|
undefined2 local_2c;
|
|
undefined auStack40[8];
|
|
|
|
local_4c = (uint)(ushort)rcossin_tbl[(player.dir & 0xfffU) * 2];
|
|
local_50 = (uint)(ushort)rcossin_tbl[(player.dir & 0xfffU) * 2 + 1];
|
|
local_44 = (uint)(ushort)-rcossin_tbl[(player.dir & 0xfffU) * 2];
|
|
local_40 = local_40 & 0xffff0000 | (uint)(ushort)rcossin_tbl[(player.dir & 0xfffU) * 2 + 1];
|
|
if ((char)outputRelative == '\0') {
|
|
local_3c = 0x118;
|
|
local_34 = 0xd4;
|
|
}
|
|
else {
|
|
local_3c = 0;
|
|
local_34 = 0;
|
|
}
|
|
setCopControlWord(2, 0, local_50);
|
|
setCopControlWord(2, 0x800, local_4c);
|
|
setCopControlWord(2, 0x1000, 0x1000);
|
|
setCopControlWord(2, 0x1800, local_44);
|
|
setCopControlWord(2, 0x2000, local_40);
|
|
setCopControlWord(2, 0x2800, local_3c);
|
|
setCopControlWord(2, 0x3000, 0);
|
|
setCopControlWord(2, 0x3800, local_34);
|
|
count = count + -1;
|
|
iVar1 = overlaidmaps[GameLevel].scale;
|
|
while (count != -1) {
|
|
local_2e = 0;
|
|
if (inputRelative == '\0') {
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_30 = (undefined2)((pGlobalPosition->vx - player.pos[0]) / iVar1);
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_2c = (undefined2)((player.pos[2] - pGlobalPosition->vz) / iVar1);
|
|
}
|
|
else {
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_30 = (undefined2)(pGlobalPosition->vx / iVar1);
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_2c = (undefined2)(-pGlobalPosition->vz / iVar1);
|
|
}
|
|
RotTrans(&local_30, pOverheadMapPosition, auStack40);
|
|
count = count + -1;
|
|
pGlobalPosition = pGlobalPosition + 1;
|
|
pOverheadMapPosition = pOverheadMapPosition + 1;
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ SetFullscreenMapMatrix()
|
|
// line 2771, offset 0x00019d0c
|
|
/* begin block 1 */
|
|
// Start line: 2773
|
|
// Start offset: 0x00019D0C
|
|
// Variables:
|
|
// struct VECTOR translate; // stack offset -32
|
|
// struct SVECTOR direction; // stack offset -16
|
|
/* end block 1 */
|
|
// End offset: 0x00019DE8
|
|
// End Line: 2787
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8933
|
|
/* end block 2 */
|
|
// End Line: 8934
|
|
|
|
/* begin block 3 */
|
|
// Start line: 8941
|
|
/* end block 3 */
|
|
// End Line: 8942
|
|
|
|
/* begin block 4 */
|
|
// Start line: 8942
|
|
/* end block 4 */
|
|
// End Line: 8943
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void SetFullscreenMapMatrix(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
SVECTOR local_10;
|
|
|
|
uVar3 = DAT_00010440;
|
|
uVar2 = DAT_0001043c;
|
|
uVar1 = DAT_00010438;
|
|
local_10.vx = 0;
|
|
if (gUseRotatedMap == 0) {
|
|
local_10.vy = 0;
|
|
}
|
|
else {
|
|
local_10.vy = (ushort)player.dir & 0xfff;
|
|
}
|
|
local_10.vz = 0;
|
|
RotMatrixXYZ(&map_matrix, &local_10);
|
|
MulMatrix0(&aspect, &map_matrix, &map_matrix);
|
|
setCopControlWord(2, 0, map_matrix.m[0]._0_4_);
|
|
setCopControlWord(2, 0x800, map_matrix.m._4_4_);
|
|
setCopControlWord(2, 0x1000, map_matrix.m[1]._2_4_);
|
|
setCopControlWord(2, 0x1800, map_matrix.m[2]._0_4_);
|
|
setCopControlWord(2, 0x2000, map_matrix._16_4_);
|
|
setCopControlWord(2, 0x2800, uVar1);
|
|
setCopControlWord(2, 0x3000, uVar2);
|
|
setCopControlWord(2, 0x3800, uVar3);
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ WorldToFullscreenMap(struct VECTOR *in /*$a0*/, struct VECTOR *out /*$a1*/)
|
|
// line 2794, offset 0x00019de8
|
|
/* begin block 1 */
|
|
// Start line: 8983
|
|
/* end block 1 */
|
|
// End Line: 8984
|
|
|
|
/* begin block 2 */
|
|
// Start line: 8991
|
|
/* end block 2 */
|
|
// End Line: 8992
|
|
|
|
/* begin block 3 */
|
|
// Start line: 8992
|
|
/* end block 3 */
|
|
// End Line: 8993
|
|
|
|
void WorldToFullscreenMap(VECTOR *in, VECTOR *out)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
OVERMAP *pOVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
|
|
iVar2 = GameLevel;
|
|
iVar5 = in->vx;
|
|
pOVar1 = overlaidmaps + GameLevel;
|
|
iVar3 = pOVar1->scale;
|
|
if (iVar3 == 0) {
|
|
trap(7);
|
|
}
|
|
iVar4 = overlaidmaps[GameLevel].x_offset;
|
|
out->vy = 0;
|
|
out->vx = iVar4 + iVar5 / iVar3 + 0x31;
|
|
iVar3 = pOVar1->scale;
|
|
if (iVar3 == 0) {
|
|
trap(7);
|
|
}
|
|
out->vz = overlaidmaps[iVar2].y_offset - (in->vz / iVar3 + -0x31);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ WorldToFullscreenMap2(struct VECTOR *in /*$a0*/, struct VECTOR *out /*$a1*/)
|
|
// line 2806, offset 0x00019e7c
|
|
/* begin block 1 */
|
|
// Start line: 2807
|
|
// Start offset: 0x00019E7C
|
|
// Variables:
|
|
// struct SVECTOR pos; // stack offset -24
|
|
// long flag; // stack offset -16
|
|
/* end block 1 */
|
|
// End offset: 0x00019F44
|
|
// End Line: 2819
|
|
|
|
/* begin block 2 */
|
|
// Start line: 9016
|
|
/* end block 2 */
|
|
// End Line: 9017
|
|
|
|
/* begin block 3 */
|
|
// Start line: 9020
|
|
/* end block 3 */
|
|
// End Line: 9021
|
|
|
|
void WorldToFullscreenMap2(VECTOR *in, VECTOR *out)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
short local_18;
|
|
undefined2 local_16;
|
|
short local_14;
|
|
undefined auStack16[8];
|
|
|
|
iVar1 = overlaidmaps[GameLevel].scale;
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_16 = 0;
|
|
if (iVar1 == 0) {
|
|
trap(7);
|
|
}
|
|
local_18 = (*(short *)&overlaidmaps[GameLevel].x_offset + (short)(in->vx / iVar1) + 0x31) -
|
|
(short)player_position.vx;
|
|
local_14 = (*(short *)&overlaidmaps[GameLevel].y_offset - ((short)(in->vz / iVar1) + -0x31)) -
|
|
(short)player_position.vz;
|
|
RotTrans(&local_18, out, auStack16);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
|
|
|