From 39bffa2d91bb66f549e5e02e14124707f21b4528 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 14 Jan 2020 19:37:04 +1000 Subject: [PATCH] Decompile aiIfTrainingPcHolographed and ciGetTrainingData --- src/game/chr/chraicommands.c | 62 ++++++---------------------- src/game/game_015470.c | 2 +- src/game/game_066310.c | 6 +-- src/game/game_097a50.c | 2 +- src/game/game_0b28d0.c | 2 +- src/game/game_102240.c | 2 +- src/game/game_1668e0.c | 2 +- src/game/game_19c990.c | 46 ++++++++++----------- src/game/game_1a3340.c | 6 +-- src/gvars/gvars.c | 2 +- src/include/game/chr/chraicommands.h | 2 +- src/include/game/game_19c990.h | 2 +- src/include/gvars/gvars.h | 2 +- src/include/types.h | 8 ++++ src/setup/setup_000000.c | 2 +- 15 files changed, 58 insertions(+), 90 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index c8be452a2..d127a706e 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -13438,57 +13438,19 @@ glabel ai01bc /** * @cmd 01bd */ -GLOBAL_ASM( -glabel ai01bd -/* f05eb3c: 3c03800a */ lui $v1,%hi(g_Vars) -/* f05eb40: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f05eb44: 8c6e0434 */ lw $t6,0x434($v1) -/* f05eb48: 8c6f0438 */ lw $t7,0x438($v1) -/* f05eb4c: 27bdffe0 */ addiu $sp,$sp,-32 -/* f05eb50: afbf0014 */ sw $ra,0x14($sp) -/* f05eb54: 01cfc021 */ addu $t8,$t6,$t7 -/* f05eb58: 0fc68606 */ jal func0f1a1818 -/* f05eb5c: afb8001c */ sw $t8,0x1c($sp) -/* f05eb60: 8c590000 */ lw $t9,0x0($v0) -/* f05eb64: 3c03800a */ lui $v1,%hi(g_Vars) -/* f05eb68: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f05eb6c: 00194900 */ sll $t1,$t9,0x4 -/* f05eb70: 05210009 */ bgez $t1,.L0f05eb98 -/* f05eb74: 8faa001c */ lw $t2,0x1c($sp) -/* f05eb78: 8c640434 */ lw $a0,0x434($v1) -/* f05eb7c: 8c650438 */ lw $a1,0x438($v1) -/* f05eb80: 0fc13583 */ jal chraiGoToLabel -/* f05eb84: 91460002 */ lbu $a2,0x2($t2) -/* f05eb88: 3c03800a */ lui $v1,%hi(g_Vars) -/* f05eb8c: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f05eb90: 10000004 */ beqz $zero,.L0f05eba4 -/* f05eb94: ac620438 */ sw $v0,0x438($v1) -.L0f05eb98: -/* f05eb98: 8c6b0438 */ lw $t3,0x438($v1) -/* f05eb9c: 256c0003 */ addiu $t4,$t3,0x3 -/* f05eba0: ac6c0438 */ sw $t4,0x438($v1) -.L0f05eba4: -/* f05eba4: 8fbf0014 */ lw $ra,0x14($sp) -/* f05eba8: 27bd0020 */ addiu $sp,$sp,0x20 -/* f05ebac: 00001025 */ or $v0,$zero,$zero -/* f05ebb0: 03e00008 */ jr $ra -/* f05ebb4: 00000000 */ sll $zero,$zero,0x0 -); +bool aiIfTrainingPcHolographed(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct trainingdata *data = ciGetTrainingData(); -// Mismatch due to different temporary registers -//bool ai01bd(void) -//{ -// u8 *cmd = g_Vars.ailist + g_Vars.aioffset; -// s32 *value = func0f1a1818(); -// -// if (*value * 16 < 0) { -// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); -// } else { -// g_Vars.aioffset += 3; -// } -// -// return false; -//} + if (data->holographedpc) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); + } else { + g_Vars.aioffset += 3; + } + + return false; +} /** * @cmd 01be diff --git a/src/game/game_015470.c b/src/game/game_015470.c index 7ef253a88..154971e4e 100644 --- a/src/game/game_015470.c +++ b/src/game/game_015470.c @@ -8818,7 +8818,7 @@ glabel func0f01bf28 /* f01cf90: 1461001e */ bne $v1,$at,.L0f01d00c /* f01cf94: 00000000 */ sll $zero,$zero,0x0 .L0f01cf98: -/* f01cf98: 0fc68606 */ jal func0f1a1818 +/* f01cf98: 0fc68606 */ jal ciGetTrainingData /* f01cf9c: 00000000 */ sll $zero,$zero,0x0 /* f01cfa0: 8e6304b4 */ lw $v1,0x4b4($s3) /* f01cfa4: 24010026 */ addiu $at,$zero,0x26 diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 245703456..c3b1c0c8c 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -38110,7 +38110,7 @@ glabel func0f086f40 /* f086f78: 24010010 */ addiu $at,$zero,0x10 /* f086f7c: 54410015 */ bnel $v0,$at,.L0f086fd4 /* f086f80: 24010045 */ addiu $at,$zero,0x45 -/* f086f84: 0fc68606 */ jal func0f1a1818 +/* f086f84: 0fc68606 */ jal ciGetTrainingData /* f086f88: 00000000 */ sll $zero,$zero,0x0 /* f086f8c: 240f0001 */ addiu $t7,$zero,0x1 /* f086f90: a3af002b */ sb $t7,0x2b($sp) @@ -48689,7 +48689,7 @@ glabel func0f09018c /* f090260: 00402825 */ or $a1,$v0,$zero /* f090264: 1501001b */ bne $t0,$at,.L0f0902d4 /* f090268: 00002025 */ or $a0,$zero,$zero -/* f09026c: 0fc68606 */ jal func0f1a1818 +/* f09026c: 0fc68606 */ jal ciGetTrainingData /* f090270: afa20028 */ sw $v0,0x28($sp) /* f090274: 0fc687f8 */ jal func0f1a1fe0 /* f090278: afa20020 */ sw $v0,0x20($sp) @@ -55659,7 +55659,7 @@ glabel func0f096088 /* f0962fc: 8e4a04b4 */ lw $t2,0x4b4($s2) /* f096300: 566a0007 */ bnel $s3,$t2,.L0f096320 /* f096304: 8e31000c */ lw $s1,0xc($s1) -/* f096308: 0fc68606 */ jal func0f1a1818 +/* f096308: 0fc68606 */ jal ciGetTrainingData /* f09630c: 00000000 */ sll $zero,$zero,0x0 /* f096310: 904c0000 */ lbu $t4,0x0($v0) /* f096314: 358d0008 */ ori $t5,$t4,0x8 diff --git a/src/game/game_097a50.c b/src/game/game_097a50.c index 1df33eeda..1f5973954 100644 --- a/src/game/game_097a50.c +++ b/src/game/game_097a50.c @@ -9698,7 +9698,7 @@ glabel func0f09f100 /* f09f74c: 24010026 */ addiu $at,$zero,0x26 /* f09f750: 5561000a */ bnel $t3,$at,.L0f09f77c /* f09f754: 8c8d0040 */ lw $t5,0x40($a0) -/* f09f758: 0fc68606 */ jal func0f1a1818 +/* f09f758: 0fc68606 */ jal ciGetTrainingData /* f09f75c: afa4018c */ sw $a0,0x18c($sp) /* f09f760: 8c4c0000 */ lw $t4,0x0($v0) /* f09f764: 8fa4018c */ lw $a0,0x18c($sp) diff --git a/src/game/game_0b28d0.c b/src/game/game_0b28d0.c index f5f91ffa0..a2944481d 100644 --- a/src/game/game_0b28d0.c +++ b/src/game/game_0b28d0.c @@ -9739,7 +9739,7 @@ glabel func0f0bad6c .L0f0bae04: /* f0bae04: 5080003e */ beqzl $a0,.L0f0baf00 /* f0bae08: 8fbf0014 */ lw $ra,0x14($sp) -/* f0bae0c: 0fc68606 */ jal func0f1a1818 +/* f0bae0c: 0fc68606 */ jal ciGetTrainingData /* f0bae10: 00000000 */ sll $zero,$zero,0x0 /* f0bae14: 24040001 */ addiu $a0,$zero,0x1 /* f0bae18: 0fc5b350 */ jal func0f16cd40 diff --git a/src/game/game_102240.c b/src/game/game_102240.c index 9119d35a6..7dddb15b4 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -4674,7 +4674,7 @@ glabel func0f106b20 /* f106b80: afa0001c */ sw $zero,0x1c($sp) /* f106b84: 1040005c */ beqz $v0,.L0f106cf8 /* f106b88: 8fa5001c */ lw $a1,0x1c($sp) -/* f106b8c: 0fc68606 */ jal func0f1a1818 +/* f106b8c: 0fc68606 */ jal ciGetTrainingData /* f106b90: afa5001c */ sw $a1,0x1c($sp) /* f106b94: 3c09800a */ lui $t1,0x800a /* f106b98: 8d29a244 */ lw $t1,-0x5dbc($t1) diff --git a/src/game/game_1668e0.c b/src/game/game_1668e0.c index 974ddf6ae..87a1159cf 100644 --- a/src/game/game_1668e0.c +++ b/src/game/game_1668e0.c @@ -7105,7 +7105,7 @@ glabel func0f16b96c /* f16ca60: 24010026 */ addiu $at,$zero,0x26 /* f16ca64: 5441001f */ bnel $v0,$at,.L0f16cae4 /* f16ca68: 8fbf0044 */ lw $ra,0x44($sp) -/* f16ca6c: 0fc68606 */ jal func0f1a1818 +/* f16ca6c: 0fc68606 */ jal ciGetTrainingData /* f16ca70: 00000000 */ sll $zero,$zero,0x0 /* f16ca74: 8e990284 */ lw $t9,0x284($s4) /* f16ca78: 8f2d00bc */ lw $t5,0xbc($t9) diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 587d1203a..61a069b24 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -6048,12 +6048,10 @@ glabel func0f1a17e4 /* f1a1814: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f1a1818 -/* f1a1818: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a181c: 03e00008 */ jr $ra -/* f1a1820: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) -); +struct trainingdata *ciGetTrainingData(void) +{ + return &g_TrainingData; +} GLOBAL_ASM( glabel func0f1a1824 @@ -6122,8 +6120,8 @@ glabel func0f1a1824 GLOBAL_ASM( glabel func0f1a190c -/* f1a190c: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a1910: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a190c: 3c02800b */ lui $v0,%hi(g_TrainingData) +/* f1a1910: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) /* f1a1914: 8c430000 */ lw $v1,0x0($v0) /* f1a1918: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a191c: afbf0014 */ sw $ra,0x14($sp) @@ -6134,17 +6132,17 @@ glabel func0f1a190c /* f1a1930: 2484959c */ addiu $a0,$a0,%lo(menudialog_trainingstats_completed) /* f1a1934: 0fc3e178 */ jal func0f0f85e0 /* f1a1938: 2405000d */ addiu $a1,$zero,0xd -/* f1a193c: 3c02800b */ lui $v0,%hi(var800ad1a0) +/* f1a193c: 3c02800b */ lui $v0,%hi(g_TrainingData) /* f1a1940: 10000008 */ beqz $zero,.L0f1a1964 -/* f1a1944: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a1944: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) .L0f1a1948: /* f1a1948: 07210006 */ bgez $t9,.L0f1a1964 /* f1a194c: 3c048009 */ lui $a0,%hi(menudialog_trainingstats_failed) /* f1a1950: 2484950c */ addiu $a0,$a0,%lo(menudialog_trainingstats_failed) /* f1a1954: 0fc3e178 */ jal func0f0f85e0 /* f1a1958: 2405000d */ addiu $a1,$zero,0xd -/* f1a195c: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a1960: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a195c: 3c02800b */ lui $v0,%hi(g_TrainingData) +/* f1a1960: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) .L0f1a1964: /* f1a1964: 90480000 */ lbu $t0,0x0($v0) /* f1a1968: 8fbf0014 */ lw $ra,0x14($sp) @@ -6168,8 +6166,8 @@ glabel func0f1a1998 /* f1a19a0: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a19a4: afbf0014 */ sw $ra,0x14($sp) /* f1a19a8: 11c00041 */ beqz $t6,.L0f1a1ab0 -/* f1a19ac: 3c03800b */ lui $v1,%hi(var800ad1a0) -/* f1a19b0: 2463d1a0 */ addiu $v1,$v1,%lo(var800ad1a0) +/* f1a19ac: 3c03800b */ lui $v1,%hi(g_TrainingData) +/* f1a19b0: 2463d1a0 */ addiu $v1,$v1,%lo(g_TrainingData) /* f1a19b4: 8c620000 */ lw $v0,0x0($v1) /* f1a19b8: 3c04800a */ lui $a0,%hi(g_Vars) /* f1a19bc: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) @@ -6194,8 +6192,8 @@ glabel func0f1a1998 /* f1a1a04: 00002025 */ or $a0,$zero,$zero /* f1a1a08: 0fc686fb */ jal func0f1a1bec /* f1a1a0c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1a10: 3c03800b */ lui $v1,%hi(var800ad1a0) -/* f1a1a14: 2463d1a0 */ addiu $v1,$v1,%lo(var800ad1a0) +/* f1a1a10: 3c03800b */ lui $v1,%hi(g_TrainingData) +/* f1a1a14: 2463d1a0 */ addiu $v1,$v1,%lo(g_TrainingData) /* f1a1a18: 906c0000 */ lbu $t4,0x0($v1) /* f1a1a1c: 240e0001 */ addiu $t6,$zero,0x1 /* f1a1a20: a06e0001 */ sb $t6,0x1($v1) @@ -6211,8 +6209,8 @@ glabel func0f1a1998 /* f1a1a44: 8fbf0014 */ lw $ra,0x14($sp) /* f1a1a48: 0fc686fb */ jal func0f1a1bec /* f1a1a4c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1a50: 3c03800b */ lui $v1,%hi(var800ad1a0) -/* f1a1a54: 2463d1a0 */ addiu $v1,$v1,%lo(var800ad1a0) +/* f1a1a50: 3c03800b */ lui $v1,%hi(g_TrainingData) +/* f1a1a54: 2463d1a0 */ addiu $v1,$v1,%lo(g_TrainingData) /* f1a1a58: 90690000 */ lbu $t1,0x0($v1) /* f1a1a5c: 240b0001 */ addiu $t3,$zero,0x1 /* f1a1a60: a06b0001 */ sb $t3,0x1($v1) @@ -6253,8 +6251,8 @@ glabel func0f1a1ac0 /* f1a1acc: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a1ad0: afbf0014 */ sw $ra,0x14($sp) /* f1a1ad4: 15c0001b */ bnez $t6,.L0f1a1b44 -/* f1a1ad8: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a1adc: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a1ad8: 3c02800b */ lui $v0,%hi(g_TrainingData) +/* f1a1adc: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) /* f1a1ae0: 90580000 */ lbu $t8,0x0($v0) /* f1a1ae4: 240f0001 */ addiu $t7,$zero,0x1 /* f1a1ae8: a06f0000 */ sb $t7,0x0($v1) @@ -6289,8 +6287,8 @@ glabel func0f1a1ac0 GLOBAL_ASM( glabel func0f1a1b54 -/* f1a1b54: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a1b58: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a1b54: 3c02800b */ lui $v0,%hi(g_TrainingData) +/* f1a1b58: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) /* f1a1b5c: 904f0000 */ lbu $t7,0x0($v0) /* f1a1b60: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a1b64: afbf0014 */ sw $ra,0x14($sp) @@ -6331,8 +6329,8 @@ glabel func0f1a1b54 GLOBAL_ASM( glabel func0f1a1bec -/* f1a1bec: 3c02800b */ lui $v0,%hi(var800ad1a0) -/* f1a1bf0: 2442d1a0 */ addiu $v0,$v0,%lo(var800ad1a0) +/* f1a1bec: 3c02800b */ lui $v0,%hi(g_TrainingData) +/* f1a1bf0: 2442d1a0 */ addiu $v0,$v0,%lo(g_TrainingData) /* f1a1bf4: 904e0000 */ lbu $t6,0x0($v0) /* f1a1bf8: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a1bfc: afbf0014 */ sw $ra,0x14($sp) diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index dfbd90a39..0eec44a45 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3723,7 +3723,7 @@ GLOBAL_ASM( glabel func0f1a67b0 /* f1a67b0: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a67b4: afbf0014 */ sw $ra,0x14($sp) -/* f1a67b8: 0fc68606 */ jal func0f1a1818 +/* f1a67b8: 0fc68606 */ jal ciGetTrainingData /* f1a67bc: afa40018 */ sw $a0,0x18($sp) /* f1a67c0: 8c4e0000 */ lw $t6,0x0($v0) /* f1a67c4: 000e7fc2 */ srl $t7,$t6,0x1f @@ -3747,7 +3747,7 @@ GLOBAL_ASM( glabel func0f1a67f8 /* f1a67f8: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a67fc: afbf0014 */ sw $ra,0x14($sp) -/* f1a6800: 0fc68606 */ jal func0f1a1818 +/* f1a6800: 0fc68606 */ jal ciGetTrainingData /* f1a6804: afa40018 */ sw $a0,0x18($sp) /* f1a6808: 8c4e0000 */ lw $t6,0x0($v0) /* f1a680c: 000e7fc2 */ srl $t7,$t6,0x1f @@ -3771,7 +3771,7 @@ GLOBAL_ASM( glabel func0f1a6840 /* f1a6840: 27bdffd0 */ addiu $sp,$sp,-48 /* f1a6844: afbf001c */ sw $ra,0x1c($sp) -/* f1a6848: 0fc68606 */ jal func0f1a1818 +/* f1a6848: 0fc68606 */ jal ciGetTrainingData /* f1a684c: afa40030 */ sw $a0,0x30($sp) /* f1a6850: 8c4e0004 */ lw $t6,0x4($v0) /* f1a6854: 3c014270 */ lui $at,0x4270 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 61919859d..a5a881080 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -30994,7 +30994,7 @@ u32 var800ad190 = 0; u32 var800ad194 = 0; u32 var800ad198 = 0; u32 var800ad19c = 0; -u32 var800ad1a0 = 0; +struct trainingdata g_TrainingData = {0}; u32 var800ad1a4 = 0; u32 var800ad1a8 = 0; u32 var800ad1ac = 0; diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index b58bc9d46..e3d83e1f6 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -408,7 +408,7 @@ /*0x01ba*/ bool ai01ba(void); /*0x01bb*/ bool aiNoOp01bb(void); /*0x01bc*/ bool ai01bc(void); -/*0x01bd*/ bool ai01bd(void); +/*0x01bd*/ bool aiIfTrainingPcHolographed(void); /*0x01be*/ bool aiIfChrWeaponEquipped(void); /*0x01bf*/ bool aiChrBeginOrEndTeleport(void); /*0x01c0*/ bool aiIfChrTeleportFullWhite(void); diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index c4e63cda5..252bef312 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -74,7 +74,7 @@ u32 func0f1a16a4(void); u32 func0f1a1714(void); u32 func0f1a176c(void); u32 func0f1a17e4(void); -s32 *func0f1a1818(void); +struct trainingdata *ciGetTrainingData(void); u32 func0f1a1824(void); u32 func0f1a190c(void); u32 func0f1a1998(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index e460f5425..f90819fa9 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -853,7 +853,7 @@ extern u8 var800acca0[40]; extern u8 g_MpChallengesCompleted[]; extern u32 var800acd20; extern u32 var800ad158; -extern u32 var800ad1a0; +extern struct trainingdata g_TrainingData; extern u32 var800ad1b0; extern u32 var800ad1c0; diff --git a/src/include/types.h b/src/include/types.h index 43dfa9363..19aa08984 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4584,4 +4584,12 @@ struct portal { u8 flags; }; +struct trainingdata { + u32 unk00_00 : 1; + u32 unk00_01 : 1; + u32 unk00_02 : 1; + u32 unk00_03 : 1; + u32 holographedpc : 1; +}; + #endif diff --git a/src/setup/setup_000000.c b/src/setup/setup_000000.c index d6a5be74a..472904b50 100644 --- a/src/setup/setup_000000.c +++ b/src/setup/setup_000000.c @@ -14580,7 +14580,7 @@ bool (*g_CommandPointers[])(void) = { /*0x01ba*/ ai01ba, /*0x01bb*/ aiNoOp01bb, /*0x01bc*/ ai01bc, - /*0x01bd*/ ai01bd, + /*0x01bd*/ aiIfTrainingPcHolographed, /*0x01be*/ aiIfChrWeaponEquipped, /*0x01bf*/ aiChrBeginOrEndTeleport, /*0x01c0*/ aiIfChrTeleportFullWhite,