diff --git a/src/files/setup/setuppete.c b/src/files/setup/setuppete.c index 70f00478c..b9e6f1e98 100644 --- a/src/files/setup/setuppete.c +++ b/src/files/setup/setuppete.c @@ -1373,7 +1373,7 @@ u8 func0412_cia[] = { label(0x03) unset_self_flag_bankx(CHRFLAG1_DONE_SEARCH_ANIM, BANK_1) - cmd0049(0x003e, /*goto*/ 0x04) + if_room_onscreen(0x003e, /*goto*/ 0x04) set_padpreset(0x00ba) goto_next(0x03) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 1e4da4034..7d32ae0b4 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -1883,7 +1883,7 @@ glabel ai0048 /* f050348: 00000000 */ sll $zero,$zero,0x0 /* f05034c: 84640028 */ lh $a0,0x28($v1) .L0f050350: -/* f050350: 0fc575ba */ jal func0f15d6e8 +/* f050350: 0fc575ba */ jal roomIsActive /* f050354: 00000000 */ sll $zero,$zero,0x0 /* f050358: 50400003 */ beqzl $v0,.L0f050368 /* f05035c: 8e28001c */ lw $t0,0x1c($s1) @@ -1924,13 +1924,13 @@ glabel ai0048 /** * @cmd 0049 */ -bool ai0049(void) +bool aiIfRoomActive(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; u16 pad_id = cmd[3] | (cmd[2] << 8); - s32 value2 = chrGetPadRoom(g_Vars.chrdata, pad_id); + s32 room_id = chrGetPadRoom(g_Vars.chrdata, pad_id); - if (value2 >= 0 && func0f15d6e8(value2)) { + if (room_id >= 0 && roomIsActive(room_id)) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]); } else { g_Vars.aioffset += 5; @@ -12940,15 +12940,15 @@ bool aiMiscellaneous(void) var8006ae28 = value; break; case 5: - g_RoomPtrs[room_id].flags &= ~ROOMFLAG_00004000; + g_RoomPtrs[room_id].flags &= ~ROOMFLAG_4000; if (value) { - g_RoomPtrs[room_id].flags |= ROOMFLAG_00004000; + g_RoomPtrs[room_id].flags |= ROOMFLAG_4000; } break; case 6: - g_RoomPtrs[room_id].flags &= ~ROOMFLAG_00008000; + g_RoomPtrs[room_id].flags &= ~ROOMFLAG_8000; if (value) { - g_RoomPtrs[room_id].flags |= ROOMFLAG_00008000; + g_RoomPtrs[room_id].flags |= ROOMFLAG_8000; } break; case 7: @@ -12960,9 +12960,9 @@ bool aiMiscellaneous(void) case 9: for (i = 1; i < g_Vars.roomcount; i++) { if (value) { - g_RoomPtrs[i].flags |= ROOMFLAG_00004000; + g_RoomPtrs[i].flags |= ROOMFLAG_4000; } else { - g_RoomPtrs[i].flags &= ~ROOMFLAG_00004000; + g_RoomPtrs[i].flags &= ~ROOMFLAG_4000; } } break; diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index f4562470d..ffb2479a4 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -6292,7 +6292,7 @@ bool (*g_CommandPointers[])(void) = { /*0x0046*/ aiIfNeverBeenOnScreen, /*0x0047*/ ai0047, /*0x0048*/ ai0048, - /*0x0049*/ ai0049, + /*0x0049*/ aiIfRoomActive, /*0x004a*/ ai004a, /*0x004b*/ aiIfNearMiss, /*0x004c*/ aiIfSeesSuspiciousItem, diff --git a/src/game/game_02cde0.c b/src/game/game_02cde0.c index 4e1814ff8..c9c053e97 100644 --- a/src/game/game_02cde0.c +++ b/src/game/game_02cde0.c @@ -32929,7 +32929,7 @@ glabel func0f04aeb0 /* f04aefc: 0011c040 */ sll $t8,$s1,0x1 /* f04af00: 84440000 */ lh $a0,0x0($v0) .L0f04af04: -/* f04af04: 0fc575ba */ jal func0f15d6e8 +/* f04af04: 0fc575ba */ jal roomIsActive /* f04af08: 00000000 */ sll $zero,$zero,0x0 /* f04af0c: 50400004 */ beqzl $v0,.L0f04af20 /* f04af10: 86040002 */ lh $a0,0x2($s0) diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index 7683951cc..3da8cdf84 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -4446,7 +4446,7 @@ glabel func0f063dcc /* f063e34: 028e8021 */ addu $s0,$s4,$t6 /* f063e38: 0fc456ac */ jal padUnpack /* f063e3c: 8e040008 */ lw $a0,0x8($s0) -/* f063e40: 0fc575ba */ jal func0f15d6e8 +/* f063e40: 0fc575ba */ jal roomIsActive /* f063e44: 8fa400e8 */ lw $a0,0xe8($sp) /* f063e48: 104000b9 */ beqz $v0,.L0f064130 /* f063e4c: 00000000 */ sll $zero,$zero,0x0 diff --git a/src/game/game_157db0.c b/src/game/game_157db0.c index 0108877ef..929b5278e 100644 --- a/src/game/game_157db0.c +++ b/src/game/game_157db0.c @@ -4319,8 +4319,8 @@ glabel func0f15b908 /* f15b9fc: 0c0048f2 */ jal malloc /* f15ba00: 24050004 */ addiu $a1,$zero,0x4 /* f15ba04: 8e7102bc */ lw $s1,0x2bc($s3) -/* f15ba08: 3c03800a */ lui $v1,%hi(var800a492c) -/* f15ba0c: 2463492c */ addiu $v1,$v1,%lo(var800a492c) +/* f15ba08: 3c03800a */ lui $v1,%hi(g_MpRoomVisibility) +/* f15ba0c: 2463492c */ addiu $v1,$v1,%lo(g_MpRoomVisibility) /* f15ba10: 1a20000a */ blez $s1,.L0f15ba3c /* f15ba14: ac620000 */ sw $v0,0x0($v1) /* f15ba18: 8c6f0000 */ lw $t7,0x0($v1) @@ -6389,33 +6389,14 @@ glabel func0f15d6c4 /* f15d6e4: a4990006 */ sh $t9,0x6($a0) ); -GLOBAL_ASM( -glabel func0f15d6e8 -/* f15d6e8: 3c0e800a */ lui $t6,0x800a -/* f15d6ec: 8dcea2d4 */ lw $t6,-0x5d2c($t6) -/* f15d6f0: 000450c0 */ sll $t2,$a0,0x3 -/* f15d6f4: 01445021 */ addu $t2,$t2,$a0 -/* f15d6f8: 11c00008 */ beqz $t6,.L0f15d71c -/* f15d6fc: 3c09800a */ lui $t1,0x800a -/* f15d700: 3c0f800a */ lui $t7,0x800a -/* f15d704: 8def492c */ lw $t7,0x492c($t7) -/* f15d708: 01e4c021 */ addu $t8,$t7,$a0 -/* f15d70c: 93020000 */ lbu $v0,0x0($t8) -/* f15d710: 3059000f */ andi $t9,$v0,0xf -/* f15d714: 03e00008 */ jr $ra -/* f15d718: 0019102b */ sltu $v0,$zero,$t9 -.L0f15d71c: -/* f15d71c: 8d294928 */ lw $t1,0x4928($t1) -/* f15d720: 000a5080 */ sll $t2,$t2,0x2 -/* f15d724: 01445023 */ subu $t2,$t2,$a0 -/* f15d728: 000a5080 */ sll $t2,$t2,0x2 -/* f15d72c: 012a5821 */ addu $t3,$t1,$t2 -/* f15d730: 95620000 */ lhu $v0,0x0($t3) -/* f15d734: 304c0004 */ andi $t4,$v0,0x4 -/* f15d738: 01801025 */ or $v0,$t4,$zero -/* f15d73c: 03e00008 */ jr $ra -/* f15d740: 00000000 */ sll $zero,$zero,0x0 -); +bool roomIsActive(s32 room_id) +{ + if (g_Vars.mplayerisrunning) { + return (g_MpRoomVisibility[room_id] & 0xf) != 0; + } + + return g_RoomPtrs[room_id].flags & ROOMFLAG_ACTIVE; +} GLOBAL_ASM( glabel func0f15d744 @@ -13630,8 +13611,8 @@ glabel func0f16397c /* f163d40: 312e00ff */ andi $t6,$t1,0xff /* f163d44: 1b000030 */ blez $t8,.L0f163e08 /* f163d48: 00001825 */ or $v1,$zero,$zero -/* f163d4c: 3c05800a */ lui $a1,%hi(var800a492c) -/* f163d50: 24a5492c */ addiu $a1,$a1,%lo(var800a492c) +/* f163d4c: 3c05800a */ lui $a1,%hi(g_MpRoomVisibility) +/* f163d50: 24a5492c */ addiu $a1,$a1,%lo(g_MpRoomVisibility) /* f163d54: 00002025 */ or $a0,$zero,$zero /* f163d58: 03203025 */ or $a2,$t9,$zero /* f163d5c: 01c03825 */ or $a3,$t6,$zero diff --git a/src/game/game_190260.c b/src/game/game_190260.c index 800e71329..64dcd8329 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -1760,7 +1760,7 @@ glabel func0f1918d0 /* f191958: 01801825 */ or $v1,$t4,$zero /* f19195c: 85840028 */ lh $a0,0x28($t4) .L0f191960: -/* f191960: 0fc575ba */ jal func0f15d6e8 +/* f191960: 0fc575ba */ jal roomIsActive /* f191964: afa30028 */ sw $v1,0x28($sp) /* f191968: 14400006 */ bnez $v0,.L0f191984 /* f19196c: 8fa30028 */ lw $v1,0x28($sp) diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index b91222b44..dddce8f0f 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -21808,7 +21808,7 @@ u32 var800a491c = 0; u32 var800a4920 = 0; u32 var800a4924 = 0; struct room *g_RoomPtrs = NULL; -u32 var800a492c = 0; +u8 *g_MpRoomVisibility = NULL; u32 var800a4930 = 0; u32 var800a4934 = 0; u32 var800a4938 = 0; diff --git a/src/include/commands.h b/src/include/commands.h index cface6dd6..64bb3b583 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -609,10 +609,15 @@ u1, \ label, -// Used by CIA guards in chicago -#define cmd0049(pad, label) \ +/** + * Checks if a room is visible. + * + * If the room argument is 10,000 or more than it will subtract 10,000, treat + * it as a pad number, and use the room that the pad is in. + */ +#define if_room_onscreen(room, label) \ mkshort(0x0049), \ - mkshort(pad), \ + mkshort(room), \ label, #define if_chr_in_view(label) \ diff --git a/src/include/constants.h b/src/include/constants.h index 24cb104f8..ec6a8bd5c 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1544,8 +1544,9 @@ #define RACE_EYESPY 3 #define RACE_ROBOT 4 -#define ROOMFLAG_00004000 0x00004000 -#define ROOMFLAG_00008000 0x00008000 +#define ROOMFLAG_ACTIVE 0x0004 +#define ROOMFLAG_4000 0x4000 +#define ROOMFLAG_8000 0x8000 #define SAVEFILEFLAG_USED_TRANSFERPAK 0x23 #define SAVEFILEFLAG_CI_TOUR_DONE 0x24 diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index e94ccf43f..15fb5c990 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -76,7 +76,7 @@ /*0x0046*/ bool aiIfNeverBeenOnScreen(void); /*0x0047*/ bool ai0047(void); /*0x0048*/ bool ai0048(void); -/*0x0049*/ bool ai0049(void); +/*0x0049*/ bool aiIfRoomActive(void); /*0x004a*/ bool ai004a(void); /*0x004b*/ bool aiIfNearMiss(void); /*0x004c*/ bool aiIfSeesSuspiciousItem(void); diff --git a/src/include/game/game_157db0.h b/src/include/game/game_157db0.h index b5022b8c4..d594acba7 100644 --- a/src/include/game/game_157db0.h +++ b/src/include/game/game_157db0.h @@ -44,7 +44,7 @@ u32 func0f15d4a8(void); u32 func0f15d570(void); u32 func0f15d63c(void); u32 func0f15d6c4(void); -u32 func0f15d6e8(u32 arg0); +bool roomIsActive(s32 room_id); u32 func0f15d744(void); u32 func0f15d7a0(void); u32 func0f15d808(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 6e819b56a..227f324a0 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -764,7 +764,7 @@ extern u32 var800a491c; extern u32 var800a4920; extern u32 var800a4924; extern struct room *g_RoomPtrs; -extern u32 var800a492c; +extern u8 *g_MpRoomVisibility; extern u32 var800a4930; extern u32 var800a4bec; extern u32 var800a4bf0;