#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;*/ }