diff --git a/src/game/bg.c b/src/game/bg.c index 3cd97c1dc..6c4471f28 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -2395,129 +2395,53 @@ glabel func0f159f1c /* f15a0f8: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f15a0fc -/* f15a0fc: 27bdffa0 */ addiu $sp,$sp,-96 -/* f15a100: 3c02800a */ lui $v0,%hi(g_Vars) -/* f15a104: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f15a108: afb0001c */ sw $s0,0x1c($sp) -/* f15a10c: 00a08025 */ or $s0,$a1,$zero -/* f15a110: afbf0024 */ sw $ra,0x24($sp) -/* f15a114: afb10020 */ sw $s1,0x20($sp) -/* f15a118: afa40060 */ sw $a0,0x60($sp) -/* f15a11c: 10a00007 */ beqz $a1,.L0f15a13c -/* f15a120: 8c460284 */ lw $a2,0x284($v0) -/* f15a124: 8c4e02bc */ lw $t6,0x2bc($v0) -/* f15a128: 001088c0 */ sll $s1,$s0,0x3 -/* f15a12c: 02308821 */ addu $s1,$s1,$s0 -/* f15a130: 00ae082a */ slt $at,$a1,$t6 -/* f15a134: 14200003 */ bnez $at,.L0f15a144 -/* f15a138: 00118880 */ sll $s1,$s1,0x2 -.L0f15a13c: -/* f15a13c: 1000005c */ b .L0f15a2b0 -/* f15a140: 8fa20060 */ lw $v0,0x60($sp) -.L0f15a144: -/* f15a144: 3c0f800a */ lui $t7,%hi(g_Rooms) -/* f15a148: 8def4928 */ lw $t7,%lo(g_Rooms)($t7) -/* f15a14c: 02308823 */ subu $s1,$s1,$s0 -/* f15a150: 00118880 */ sll $s1,$s1,0x2 -/* f15a154: 01f11021 */ addu $v0,$t7,$s1 -/* f15a158: 84430002 */ lh $v1,0x2($v0) -/* f15a15c: 3c078008 */ lui $a3,%hi(var8007fc10) -/* f15a160: 24e7fc10 */ addiu $a3,$a3,%lo(var8007fc10) -/* f15a164: 1460000d */ bnez $v1,.L0f15a19c -/* f15a168: 00000000 */ nop -/* f15a16c: 84e50000 */ lh $a1,0x0($a3) -/* f15a170: 02002025 */ or $a0,$s0,$zero -/* f15a174: 18a00009 */ blez $a1,.L0f15a19c -/* f15a178: 24b8ffff */ addiu $t8,$a1,-1 -/* f15a17c: a4f80000 */ sh $t8,0x0($a3) -/* f15a180: 0fc57716 */ jal roomLoad -/* f15a184: afa6003c */ sw $a2,0x3c($sp) -/* f15a188: 3c19800a */ lui $t9,%hi(g_Rooms) -/* f15a18c: 8f394928 */ lw $t9,%lo(g_Rooms)($t9) -/* f15a190: 8fa6003c */ lw $a2,0x3c($sp) -/* f15a194: 03311021 */ addu $v0,$t9,$s1 -/* f15a198: 84430002 */ lh $v1,0x2($v0) -.L0f15a19c: -/* f15a19c: 3c078008 */ lui $a3,%hi(var8007fc10) -/* f15a1a0: 14600005 */ bnez $v1,.L0f15a1b8 -/* f15a1a4: 24e7fc10 */ addiu $a3,$a3,%lo(var8007fc10) -/* f15a1a8: 84e80000 */ lh $t0,0x0($a3) -/* f15a1ac: 2509ffff */ addiu $t1,$t0,-1 -/* f15a1b0: a4e90000 */ sh $t1,0x0($a3) -/* f15a1b4: 84430002 */ lh $v1,0x2($v0) -.L0f15a1b8: -/* f15a1b8: 14600003 */ bnez $v1,.L0f15a1c8 -/* f15a1bc: 02002025 */ or $a0,$s0,$zero -/* f15a1c0: 1000003b */ b .L0f15a2b0 -/* f15a1c4: 8fa20060 */ lw $v0,0x60($sp) -.L0f15a1c8: -/* f15a1c8: 27a50048 */ addiu $a1,$sp,0x48 -/* f15a1cc: 0fc59b7c */ jal func0f166df0 -/* f15a1d0: afa6003c */ sw $a2,0x3c($sp) -/* f15a1d4: 8fa6003c */ lw $a2,0x3c($sp) -/* f15a1d8: c7a60048 */ lwc1 $f6,0x48($sp) -/* f15a1dc: c7b0004c */ lwc1 $f16,0x4c($sp) -/* f15a1e0: c4c40018 */ lwc1 $f4,0x18($a2) -/* f15a1e4: 8fa40060 */ lw $a0,0x60($sp) -/* f15a1e8: 02002825 */ or $a1,$s0,$zero -/* f15a1ec: 46062201 */ sub.s $f8,$f4,$f6 -/* f15a1f0: c7a60050 */ lwc1 $f6,0x50($sp) -/* f15a1f4: e7a80054 */ swc1 $f8,0x54($sp) -/* f15a1f8: c4ca001c */ lwc1 $f10,0x1c($a2) -/* f15a1fc: 46105481 */ sub.s $f18,$f10,$f16 -/* f15a200: c7aa0054 */ lwc1 $f10,0x54($sp) -/* f15a204: e7b20058 */ swc1 $f18,0x58($sp) -/* f15a208: c4c40020 */ lwc1 $f4,0x20($a2) -/* f15a20c: c7b20058 */ lwc1 $f18,0x58($sp) -/* f15a210: 4600540d */ trunc.w.s $f16,$f10 -/* f15a214: 46062201 */ sub.s $f8,$f4,$f6 -/* f15a218: 440b8000 */ mfc1 $t3,$f16 -/* f15a21c: 4600910d */ trunc.w.s $f4,$f18 -/* f15a220: e7a8005c */ swc1 $f8,0x5c($sp) -/* f15a224: c7a6005c */ lwc1 $f6,0x5c($sp) -/* f15a228: a7ab0040 */ sh $t3,0x40($sp) -/* f15a22c: 440d2000 */ mfc1 $t5,$f4 -/* f15a230: 4600320d */ trunc.w.s $f8,$f6 -/* f15a234: a7ad0042 */ sh $t5,0x42($sp) -/* f15a238: 440f4000 */ mfc1 $t7,$f8 -/* f15a23c: 0fc59b5f */ jal func0f166d7c -/* f15a240: a7af0044 */ sh $t7,0x44($sp) -/* f15a244: 3c18800a */ lui $t8,%hi(g_Rooms) -/* f15a248: 8f184928 */ lw $t8,%lo(g_Rooms)($t8) -/* f15a24c: 27a90040 */ addiu $t1,$sp,0x40 -/* f15a250: 00402025 */ or $a0,$v0,$zero -/* f15a254: 0311c821 */ addu $t9,$t8,$s1 -/* f15a258: 8f280014 */ lw $t0,0x14($t9) -/* f15a25c: 02002825 */ or $a1,$s0,$zero -/* f15a260: 24070001 */ addiu $a3,$zero,0x1 -/* f15a264: 8d060008 */ lw $a2,0x8($t0) -/* f15a268: 0fc567c7 */ jal func0f159f1c -/* f15a26c: afa90010 */ sw $t1,0x10($sp) -/* f15a270: 3c0a800a */ lui $t2,%hi(g_Rooms) -/* f15a274: 8d4a4928 */ lw $t2,%lo(g_Rooms)($t2) -/* f15a278: 27ad0040 */ addiu $t5,$sp,0x40 -/* f15a27c: 00402025 */ or $a0,$v0,$zero -/* f15a280: 01515821 */ addu $t3,$t2,$s1 -/* f15a284: 8d6c0014 */ lw $t4,0x14($t3) -/* f15a288: 02002825 */ or $a1,$s0,$zero -/* f15a28c: 24070001 */ addiu $a3,$zero,0x1 -/* f15a290: 8d86000c */ lw $a2,0xc($t4) -/* f15a294: 0fc567c7 */ jal func0f159f1c -/* f15a298: afad0010 */ sw $t5,0x10($sp) -/* f15a29c: 3c0f800a */ lui $t7,%hi(g_Rooms) -/* f15a2a0: 8def4928 */ lw $t7,%lo(g_Rooms)($t7) -/* f15a2a4: 240e0001 */ addiu $t6,$zero,0x1 -/* f15a2a8: 01f1c021 */ addu $t8,$t7,$s1 -/* f15a2ac: a70e0002 */ sh $t6,0x2($t8) -.L0f15a2b0: -/* f15a2b0: 8fbf0024 */ lw $ra,0x24($sp) -/* f15a2b4: 8fb0001c */ lw $s0,0x1c($sp) -/* f15a2b8: 8fb10020 */ lw $s1,0x20($sp) -/* f15a2bc: 03e00008 */ jr $ra -/* f15a2c0: 27bd0060 */ addiu $sp,$sp,0x60 -); +/** + * Render the given room for the purpose of the FarSight or xray scanner. + */ +Gfx *roomRenderForEraser(Gfx *gdl, s32 roomnum) +{ + struct coord sp54; + struct coord globaldrawworldoffset; + s16 sp40[3]; + struct player *player = g_Vars.currentplayer; + + if (roomnum == 0 || roomnum >= g_Vars.roomcount) { + return gdl; + } + + if (g_Rooms[roomnum].loaded240 == 0) { + if (var8007fc10 > 0) { + var8007fc10--; + roomLoad(roomnum); + } + } + + if (g_Rooms[roomnum].loaded240 == 0) { + var8007fc10--; + } + + if (g_Rooms[roomnum].loaded240 == 0) { + return gdl; + } + + func0f166df0(roomnum, &globaldrawworldoffset); + + sp54.x = player->eraserpos.x - globaldrawworldoffset.x; + sp54.y = player->eraserpos.y - globaldrawworldoffset.y; + sp54.z = player->eraserpos.z - globaldrawworldoffset.z; + + sp40[0] = sp54.f[0]; + sp40[1] = sp54.f[1]; + sp40[2] = sp54.f[2]; + + gdl = func0f166d7c(gdl, roomnum); + gdl = func0f159f1c(gdl, roomnum, g_Rooms[roomnum].unk14->unk08, 1, sp40); + gdl = func0f159f1c(gdl, roomnum, g_Rooms[roomnum].unk14->unk0c, 1, sp40); + + g_Rooms[roomnum].loaded240 = 1; + + return gdl; +} GLOBAL_ASM( glabel func0f15a2c4 @@ -2674,7 +2598,7 @@ glabel func0f15a2c4 /* f15a4fc: 8fa40238 */ lw $a0,0x238($sp) /* f15a500: 566b0007 */ bnel $s3,$t3,.L0f15a520 /* f15a504: 26310001 */ addiu $s1,$s1,0x1 -/* f15a508: 0fc5683f */ jal func0f15a0fc +/* f15a508: 0fc5683f */ jal roomRenderForEraser /* f15a50c: 86050000 */ lh $a1,0x0($s0) /* f15a510: 3c038008 */ lui $v1,%hi(var8007fc2c) /* f15a514: 8c63fc2c */ lw $v1,%lo(var8007fc2c)($v1) diff --git a/src/include/game/bg.h b/src/include/game/bg.h index 6263e2a53..dd38f614f 100644 --- a/src/include/game/bg.h +++ b/src/include/game/bg.h @@ -13,8 +13,8 @@ u32 func0f158400(void); u32 func0f158884(void); u32 func0f158d9c(void); u32 func0f1598b4(void); -u32 func0f159f1c(void); -u32 func0f15a0fc(void); +Gfx *func0f159f1c(Gfx *gdl, s32 roomnum, s32 arg2, s32 arg3, s16 arg4[3]); +Gfx *roomRenderForEraser(Gfx *gdl, s32 roomnum); u32 func0f15a2c4(void); u32 func0f15a6f4(void); Gfx *func0f15b114(Gfx *gdl);