From 7dc66727f9b91a42fadf738fda022f2c3d832409 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 2 Dec 2019 18:50:38 +1000 Subject: [PATCH] Decompile aiSayCiStaffQuip --- src/game/chr/chraicommands.c | 177 +++++---------------------- src/include/game/chr/chraicommands.h | 2 +- src/include/library/library_12dc0.h | 2 +- src/include/setup/setup_000000.h | 6 +- src/setup/setup_000000.c | 45 ++++--- 5 files changed, 65 insertions(+), 167 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 4cce2caf4..d58a7640c 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -1446,7 +1446,7 @@ bool aiIfRandomLessThan(void) u8 *cmd = g_Vars.ailist + g_Vars.aioffset; if ((g_Vars.chrdata && g_Vars.chrdata->random < cmd[2]) || - (g_Vars.hovdata && (random() & 0xff) < cmd[2])) { + (g_Vars.hovdata && ((u8)random()) < cmd[2])) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); } else { g_Vars.aioffset += 4; @@ -1463,7 +1463,7 @@ bool aiIfRandomGreaterThan(void) u8 *cmd = g_Vars.ailist + g_Vars.aioffset; if ((g_Vars.chrdata && g_Vars.chrdata->random > cmd[2]) || - (g_Vars.hovdata && (random() & 0xff) > cmd[2])) { + (g_Vars.hovdata && ((u8)random()) > cmd[2])) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); } else { g_Vars.aioffset += 4; @@ -13086,152 +13086,35 @@ bool aiSetRoomToSearch(void) /** * @cmd 01a2 */ -GLOBAL_ASM( -glabel ai01a2 -/* f05db08: 27bdffd8 */ addiu $sp,$sp,-40 -/* f05db0c: afb10020 */ sw $s1,0x20($sp) -/* f05db10: 3c11800a */ lui $s1,%hi(g_Vars) -/* f05db14: 26319fc0 */ addiu $s1,$s1,%lo(g_Vars) -/* f05db18: 8e2e0434 */ lw $t6,0x434($s1) -/* f05db1c: 8e2f0438 */ lw $t7,0x438($s1) -/* f05db20: afb0001c */ sw $s0,0x1c($sp) -/* f05db24: afbf0024 */ sw $ra,0x24($sp) -/* f05db28: 01cf8021 */ addu $s0,$t6,$t7 -/* f05db2c: 92030002 */ lbu $v1,0x2($s0) -/* f05db30: 54600019 */ bnezl $v1,.L0f05db98 -/* f05db34: 24010001 */ addiu $at,$zero,0x1 -/* f05db38: 0c004b70 */ jal random -/* f05db3c: 00000000 */ sll $zero,$zero,0x0 -/* f05db40: 24010003 */ addiu $at,$zero,0x3 -/* f05db44: 0041001b */ divu $zero,$v0,$at -/* f05db48: 8e230424 */ lw $v1,0x424($s1) -/* f05db4c: 00004010 */ mfhi $t0 -/* f05db50: 00084840 */ sll $t1,$t0,0x1 -/* f05db54: 90780112 */ lbu $t8,0x112($v1) -/* f05db58: 3c058007 */ lui $a1,0x8007 -/* f05db5c: 82040003 */ lb $a0,0x3($s0) -/* f05db60: 0018c880 */ sll $t9,$t8,0x2 -/* f05db64: 0338c823 */ subu $t9,$t9,$t8 -/* f05db68: 0019c840 */ sll $t9,$t9,0x1 -/* f05db6c: 03295021 */ addu $t2,$t9,$t1 -/* f05db70: 00aa2821 */ addu $a1,$a1,$t2 -/* f05db74: 240b0009 */ addiu $t3,$zero,0x9 -/* f05db78: 8c67001c */ lw $a3,0x1c($v1) -/* f05db7c: 84a597b4 */ lh $a1,-0x684c($a1) -/* f05db80: afa00014 */ sw $zero,0x14($sp) -/* f05db84: afab0010 */ sw $t3,0x10($sp) -/* f05db88: 0fc25010 */ jal audioPlayFromWorldPosition -/* f05db8c: 00003025 */ or $a2,$zero,$zero -/* f05db90: 92030002 */ lbu $v1,0x2($s0) -/* f05db94: 24010001 */ addiu $at,$zero,0x1 -.L0f05db98: -/* f05db98: 54610019 */ bnel $v1,$at,.L0f05dc00 -/* f05db9c: 24010002 */ addiu $at,$zero,0x2 -/* f05dba0: 0c004b70 */ jal random -/* f05dba4: 00000000 */ sll $zero,$zero,0x0 -/* f05dba8: 24010003 */ addiu $at,$zero,0x3 -/* f05dbac: 0041001b */ divu $zero,$v0,$at -/* f05dbb0: 8e230424 */ lw $v1,0x424($s1) -/* f05dbb4: 00007010 */ mfhi $t6 -/* f05dbb8: 000e7840 */ sll $t7,$t6,0x1 -/* f05dbbc: 906c0112 */ lbu $t4,0x112($v1) -/* f05dbc0: 3c058007 */ lui $a1,0x8007 -/* f05dbc4: 82040003 */ lb $a0,0x3($s0) -/* f05dbc8: 000c6880 */ sll $t5,$t4,0x2 -/* f05dbcc: 01ac6823 */ subu $t5,$t5,$t4 -/* f05dbd0: 000d6840 */ sll $t5,$t5,0x1 -/* f05dbd4: 01afc021 */ addu $t8,$t5,$t7 -/* f05dbd8: 00b82821 */ addu $a1,$a1,$t8 -/* f05dbdc: 24080009 */ addiu $t0,$zero,0x9 -/* f05dbe0: 8c67001c */ lw $a3,0x1c($v1) -/* f05dbe4: 84a59790 */ lh $a1,-0x6870($a1) -/* f05dbe8: afa00014 */ sw $zero,0x14($sp) -/* f05dbec: afa80010 */ sw $t0,0x10($sp) -/* f05dbf0: 0fc25010 */ jal audioPlayFromWorldPosition -/* f05dbf4: 00003025 */ or $a2,$zero,$zero -/* f05dbf8: 92030002 */ lbu $v1,0x2($s0) -/* f05dbfc: 24010002 */ addiu $at,$zero,0x2 -.L0f05dc00: -/* f05dc00: 54610019 */ bnel $v1,$at,.L0f05dc68 -/* f05dc04: 24010003 */ addiu $at,$zero,0x3 -/* f05dc08: 0c004b70 */ jal random -/* f05dc0c: 00000000 */ sll $zero,$zero,0x0 -/* f05dc10: 24010003 */ addiu $at,$zero,0x3 -/* f05dc14: 0041001b */ divu $zero,$v0,$at -/* f05dc18: 8e230424 */ lw $v1,0x424($s1) -/* f05dc1c: 00005010 */ mfhi $t2 -/* f05dc20: 000a5840 */ sll $t3,$t2,0x1 -/* f05dc24: 90790112 */ lbu $t9,0x112($v1) -/* f05dc28: 3c058007 */ lui $a1,0x8007 -/* f05dc2c: 82040003 */ lb $a0,0x3($s0) -/* f05dc30: 00194880 */ sll $t1,$t9,0x2 -/* f05dc34: 01394823 */ subu $t1,$t1,$t9 -/* f05dc38: 00094840 */ sll $t1,$t1,0x1 -/* f05dc3c: 012b6021 */ addu $t4,$t1,$t3 -/* f05dc40: 00ac2821 */ addu $a1,$a1,$t4 -/* f05dc44: 240e0009 */ addiu $t6,$zero,0x9 -/* f05dc48: 8c67001c */ lw $a3,0x1c($v1) -/* f05dc4c: 84a597f0 */ lh $a1,-0x6810($a1) -/* f05dc50: afa00014 */ sw $zero,0x14($sp) -/* f05dc54: afae0010 */ sw $t6,0x10($sp) -/* f05dc58: 0fc25010 */ jal audioPlayFromWorldPosition -/* f05dc5c: 00003025 */ or $a2,$zero,$zero -/* f05dc60: 92030002 */ lbu $v1,0x2($s0) -/* f05dc64: 24010003 */ addiu $at,$zero,0x3 -.L0f05dc68: -/* f05dc68: 1461000d */ bne $v1,$at,.L0f05dca0 -/* f05dc6c: 3c058007 */ lui $a1,0x8007 -/* f05dc70: 8e230424 */ lw $v1,0x424($s1) -/* f05dc74: 82040003 */ lb $a0,0x3($s0) -/* f05dc78: 24180009 */ addiu $t8,$zero,0x9 -/* f05dc7c: 906d0112 */ lbu $t5,0x112($v1) -/* f05dc80: 8c67001c */ lw $a3,0x1c($v1) -/* f05dc84: afa00014 */ sw $zero,0x14($sp) -/* f05dc88: 000d7840 */ sll $t7,$t5,0x1 -/* f05dc8c: 00af2821 */ addu $a1,$a1,$t7 -/* f05dc90: 84a5982c */ lh $a1,-0x67d4($a1) -/* f05dc94: afb80010 */ sw $t8,0x10($sp) -/* f05dc98: 0fc25010 */ jal audioPlayFromWorldPosition -/* f05dc9c: 00003025 */ or $a2,$zero,$zero -.L0f05dca0: -/* f05dca0: 8e280438 */ lw $t0,0x438($s1) -/* f05dca4: 8fbf0024 */ lw $ra,0x24($sp) -/* f05dca8: 8fb0001c */ lw $s0,0x1c($sp) -/* f05dcac: 25190004 */ addiu $t9,$t0,0x4 -/* f05dcb0: ae390438 */ sw $t9,0x438($s1) -/* f05dcb4: 8fb10020 */ lw $s1,0x20($sp) -/* f05dcb8: 27bd0028 */ addiu $sp,$sp,0x28 -/* f05dcbc: 03e00008 */ jr $ra -/* f05dcc0: 00001025 */ or $v0,$zero,$zero -); +bool aiSayCiStaffQuip(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + s16 quip; -//bool ai01a2(void) -//{ -// u8 *cmd = g_Vars.ailist + g_Vars.aioffset; -// -// if (cmd[2] == 0) { -// s32 index = g_Vars.chrdata->morale * 6 + (random() % 3); -// audioPlayFromWorldPosition(cmd[3], ciquiptable_bank0[index], 0, g_Vars.chrdata->pos); -// } -// -// if (cmd[2] == 1) { -// s32 index = g_Vars.chrdata->morale * 6 + (random() % 3); -// audioPlayFromWorldPosition(cmd[3], ciquiptable_bank1[index], 0, g_Vars.chrdata->pos); -// } -// -// if (cmd[2] == 2) { -// s32 index = g_Vars.chrdata->morale * 6 + (random() % 3); -// audioPlayFromWorldPosition(cmd[3], ciquiptable_bank2[index], 0, g_Vars.chrdata->pos); -// } -// -// if (cmd[2] == 3) { -// audioPlayFromWorldPosition(cmd[3], ciquiptable_bank3[g_Vars.chrdata->morale], 0, g_Vars.chrdata->pos); -// } -// -// g_Vars.aioffset += 4; -// -// return false; -//} + if (cmd[2] == 0) { + quip = ciquiptable_bank0[g_Vars.chrdata->morale][random() % 3]; + audioPlayFromWorldPosition(cmd[3], quip, 0, g_Vars.chrdata->pos, 9, 0); + } + + if (cmd[2] == 1) { + quip = ciquiptable_bank1[g_Vars.chrdata->morale][random() % 3]; + audioPlayFromWorldPosition(cmd[3], quip, 0, g_Vars.chrdata->pos, 9, 0); + } + + if (cmd[2] == 2) { + quip = ciquiptable_bank2[g_Vars.chrdata->morale][random() % 3]; + audioPlayFromWorldPosition(cmd[3], quip, 0, g_Vars.chrdata->pos, 9, 0); + } + + if (cmd[2] == 3) { + quip = ciquiptable_bank3[g_Vars.chrdata->morale]; + audioPlayFromWorldPosition(cmd[3], quip, 0, g_Vars.chrdata->pos, 9, 0); + } + + g_Vars.aioffset += 4; + + return false; +} /** * @cmd 01a3 diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 25280f597..1626df3a7 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -385,7 +385,7 @@ /*0x019f*/ bool aiSetObjHealth(void); /*0x01a0*/ bool aiSetChrSpecialDeathAnimation(void); /*0x01a1*/ bool aiSetRoomToSearch(void); -/*0x01a2*/ bool ai01a2(void); +/*0x01a2*/ bool aiSayCiStaffQuip(void); /*0x01a3*/ bool ai01a3(void); /*0x01a4*/ bool aiShowText(void); /*0x01a5*/ bool ai01a5(void); diff --git a/src/include/library/library_12dc0.h b/src/include/library/library_12dc0.h index c1c1ee5f5..61f43030c 100644 --- a/src/include/library/library_12dc0.h +++ b/src/include/library/library_12dc0.h @@ -10,6 +10,6 @@ u32 func00012efc(void); s32 func00012f30(void); u32 func00013010(void); u32 func000130d4(void); -s32 random(void); +u32 random(void); #endif diff --git a/src/include/setup/setup_000000.h b/src/include/setup/setup_000000.h index 008ddd536..7cec314c9 100644 --- a/src/include/setup/setup_000000.h +++ b/src/include/setup/setup_000000.h @@ -414,9 +414,9 @@ extern u16 quiptable_human_bank0[]; extern u16 quiptable_human_bank1[]; extern u16 quiptable_skedar[]; extern u16 quiptable_maian[]; -extern s16 ciquiptable_bank0[]; -extern s16 ciquiptable_bank1[]; -extern s16 ciquiptable_bank2[]; +extern s16 ciquiptable_bank0[][3]; +extern s16 ciquiptable_bank1[][3]; +extern s16 ciquiptable_bank2[][3]; extern s16 ciquiptable_bank3[]; extern u16 g_InvestigationPadMap[40]; extern u32 var80069780; diff --git a/src/setup/setup_000000.c b/src/setup/setup_000000.c index 9bc71c9e7..0af48fb19 100644 --- a/src/setup/setup_000000.c +++ b/src/setup/setup_000000.c @@ -14550,7 +14550,7 @@ bool (*g_CommandPointers[])(void) = { /*0x019f*/ aiSetObjHealth, /*0x01a0*/ aiSetChrSpecialDeathAnimation, /*0x01a1*/ aiSetRoomToSearch, - /*0x01a2*/ ai01a2, + /*0x01a2*/ aiSayCiStaffQuip, /*0x01a3*/ ai01a3, /*0x01a4*/ aiShowText, /*0x01a5*/ ai01a5, @@ -15050,26 +15050,41 @@ u32 var80069788 = 0x00000000; u32 var8006978c = 0x1a000003; // f7b0 -s16 ciquiptable_bank1[] = { - 0x17a1, 0x17a2, 0x17a3, 0x17a4, 0x17a5, 0x17a6, 0x17a7, 0x17a8, - 0x17a9, 0x17aa, 0x17ab, 0x17ac, 0x17ad, 0x17ae, 0x17af, 0x179e, - 0x179f, 0x17a0, +s16 ciquiptable_bank1[][3] = { + { 0x17a1, 0x17a2, 0x17a3 }, + { 0x17a4, 0x17a5, 0x17a6 }, + { 0x17a7, 0x17a8, 0x17a9 }, + { 0x17aa, 0x17ab, 0x17ac }, + { 0x17ad, 0x17ae, 0x17af }, + { 0x179e, 0x179f, 0x17a0 }, }; // f7d4 -s16 ciquiptable_bank0[] = { - 0x8028, 0x8028, 0x8028, 0x802b, 0x802b, 0x802b, 0x802c, 0x802d, - 0x802e, 0x802f, 0x802f, 0x802f, 0x8030, 0x8030, 0x8030, 0x8031, - 0x8031, 0x8031, 0x8032, 0x8032, 0x8033, 0x8033, 0x8034, 0x8034, - 0x8035, 0x8035, 0x8036, 0x8036, 0x8037, 0x8037, +s16 ciquiptable_bank0[][3] = { + { 0x8028, 0x8028, 0x8028 }, + { 0x802b, 0x802b, 0x802b }, + { 0x802c, 0x802d, 0x802e }, + { 0x802f, 0x802f, 0x802f }, + { 0x8030, 0x8030, 0x8030 }, + { 0x8031, 0x8031, 0x8031 }, + { 0x8032, 0x8032, 0x8033 }, + { 0x8033, 0x8034, 0x8034 }, + { 0x8035, 0x8035, 0x8036 }, + { 0x8036, 0x8037, 0x8037 }, }; // f810 -s16 ciquiptable_bank2[] = { - 0x177b, 0x177b, 0x177b, 0x177d, 0x177d, 0x177d, 0x1789, 0x178a, - 0x178b, 0x178d, 0x178d, 0x178d, 0x1795, 0x1795, 0x1795, 0x1785, - 0x1785, 0x1785, 0x1791, 0x1791, 0x1791, 0x1791, 0x1791, 0x1791, - 0x1782, 0x1782, 0x1782, 0x1783, 0x1783, 0x1783, +s16 ciquiptable_bank2[][3] = { + { 0x177b, 0x177b, 0x177b }, + { 0x177d, 0x177d, 0x177d }, + { 0x1789, 0x178a, 0x178b }, + { 0x178d, 0x178d, 0x178d }, + { 0x1795, 0x1795, 0x1795 }, + { 0x1785, 0x1785, 0x1785 }, + { 0x1791, 0x1791, 0x1791 }, + { 0x1791, 0x1791, 0x1791 }, + { 0x1782, 0x1782, 0x1782 }, + { 0x1783, 0x1783, 0x1783 }, }; // f84c