Decompile roomIsActive and discover if_room_onscreen AI command

This commit is contained in:
Ryan Dwyer
2020-02-11 18:40:19 +10:00
parent 48ee8a2f13
commit 05d51b7883
13 changed files with 42 additions and 55 deletions
+1 -1
View File
@@ -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)
+10 -10
View File
@@ -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;
+1 -1
View File
@@ -6292,7 +6292,7 @@ bool (*g_CommandPointers[])(void) = {
/*0x0046*/ aiIfNeverBeenOnScreen,
/*0x0047*/ ai0047,
/*0x0048*/ ai0048,
/*0x0049*/ ai0049,
/*0x0049*/ aiIfRoomActive,
/*0x004a*/ ai004a,
/*0x004b*/ aiIfNearMiss,
/*0x004c*/ aiIfSeesSuspiciousItem,
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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;
+8 -3
View File
@@ -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) \
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;