mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-30 15:53:34 -04:00
Decompile roomIsActive and discover if_room_onscreen AI command
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -6292,7 +6292,7 @@ bool (*g_CommandPointers[])(void) = {
|
||||
/*0x0046*/ aiIfNeverBeenOnScreen,
|
||||
/*0x0047*/ ai0047,
|
||||
/*0x0048*/ ai0048,
|
||||
/*0x0049*/ ai0049,
|
||||
/*0x0049*/ aiIfRoomActive,
|
||||
/*0x004a*/ ai004a,
|
||||
/*0x004b*/ aiIfNearMiss,
|
||||
/*0x004c*/ aiIfSeesSuspiciousItem,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
+12
-31
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user