From 3bb731f0a0f58ff9a91bf18fe80a79e82d24f0ba Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 20 Feb 2020 23:51:27 +1000 Subject: [PATCH] Decompile chrTick --- src/game/chr/chraction.c | 619 ++++++++----------------------- src/game/game_000920.c | 2 +- src/game/game_01e250.c | 4 +- src/include/constants.h | 1 + src/include/game/chr/chraction.h | 54 +-- src/include/game/game_000920.h | 2 +- src/include/game/game_005fd0.h | 4 +- src/include/types.h | 6 +- 8 files changed, 182 insertions(+), 510 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 282273615..11750b460 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -446,41 +446,6 @@ const u32 var7f1a928c[] = {0x3f99999a}; const u32 var7f1a9290[] = {0x3f99999a}; const u32 var7f1a9294[] = {0x44098000}; const u32 var7f1a9298[] = {0x40490fdb}; -const u32 var7f1a929c[] = {0x7f0480d0}; -const u32 var7f1a92a0[] = {0x7f0480e0}; -const u32 var7f1a92a4[] = {0x7f0480f0}; -const u32 var7f1a92a8[] = {0x7f048100}; -const u32 var7f1a92ac[] = {0x7f048150}; -const u32 var7f1a92b0[] = {0x7f048110}; -const u32 var7f1a92b4[] = {0x7f048120}; -const u32 var7f1a92b8[] = {0x7f048160}; -const u32 var7f1a92bc[] = {0x7f048170}; -const u32 var7f1a92c0[] = {0x7f048180}; -const u32 var7f1a92c4[] = {0x7f048130}; -const u32 var7f1a92c8[] = {0x7f048140}; -const u32 var7f1a92cc[] = {0x7f048190}; -const u32 var7f1a92d0[] = {0x7f0481a0}; -const u32 var7f1a92d4[] = {0x7f0481b0}; -const u32 var7f1a92d8[] = {0x7f0481c0}; -const u32 var7f1a92dc[] = {0x7f048278}; -const u32 var7f1a92e0[] = {0x7f0481e0}; -const u32 var7f1a92e4[] = {0x7f0481f0}; -const u32 var7f1a92e8[] = {0x7f048200}; -const u32 var7f1a92ec[] = {0x7f048278}; -const u32 var7f1a92f0[] = {0x7f0481d0}; -const u32 var7f1a92f4[] = {0x7f048278}; -const u32 var7f1a92f8[] = {0x7f048210}; -const u32 var7f1a92fc[] = {0x7f048278}; -const u32 var7f1a9300[] = {0x7f048278}; -const u32 var7f1a9304[] = {0x7f048278}; -const u32 var7f1a9308[] = {0x7f048278}; -const u32 var7f1a930c[] = {0x7f048278}; -const u32 var7f1a9310[] = {0x7f048230}; -const u32 var7f1a9314[] = {0x7f048240}; -const u32 var7f1a9318[] = {0x7f048220}; -const u32 var7f1a931c[] = {0x7f048250}; -const u32 var7f1a9320[] = {0x7f048260}; -const u32 var7f1a9324[] = {0x7f048270}; GLOBAL_ASM( glabel func0f02dff0 @@ -24364,7 +24329,7 @@ bool chrDetectDangerousObject(struct chrdata *chr, u8 flags) return false; } -void func0f043f24(s32 arg0) +void func0f043f24(struct chrdata *chr) { // empty } @@ -28598,443 +28563,149 @@ glabel func0f047934 /* f047c7c: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f047c80 -/* f047c80: 27bdffb0 */ addiu $sp,$sp,-80 -/* f047c84: afb00018 */ sw $s0,0x18($sp) -/* f047c88: 00808025 */ or $s0,$a0,$zero -/* f047c8c: 10800004 */ beqz $a0,.L0f047ca0 -/* f047c90: afbf001c */ sw $ra,0x1c($sp) -/* f047c94: 908e02fe */ lbu $t6,0x2fe($a0) -/* f047c98: 10000002 */ beqz $zero,.L0f047ca4 -/* f047c9c: afae004c */ sw $t6,0x4c($sp) -.L0f047ca0: -/* f047ca0: afa0004c */ sw $zero,0x4c($sp) -.L0f047ca4: -/* f047ca4: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047ca8: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047cac: 8cef0034 */ lw $t7,0x34($a3) -/* f047cb0: 59e00182 */ blezl $t7,.L0f0482bc -/* f047cb4: 8fbf001c */ lw $ra,0x1c($sp) -/* f047cb8: 82180007 */ lb $t8,0x7($s0) -/* f047cbc: 5700000b */ bnezl $t8,.L0f047cec -/* f047cc0: 8fab004c */ lw $t3,0x4c($sp) -/* f047cc4: 8e190018 */ lw $t9,0x18($s0) -/* f047cc8: 02002025 */ or $a0,$s0,$zero -/* f047ccc: 24050000 */ addiu $a1,$zero,0x0 -/* f047cd0: 372a0001 */ ori $t2,$t9,0x1 -/* f047cd4: 0fc0ba68 */ jal func0f02e9a0 -/* f047cd8: ae0a0018 */ sw $t2,0x18($s0) -/* f047cdc: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047ce0: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047ce4: a2000008 */ sb $zero,0x8($s0) -/* f047ce8: 8fab004c */ lw $t3,0x4c($sp) -.L0f047cec: -/* f047cec: 24010002 */ addiu $at,$zero,0x2 -/* f047cf0: 3c028007 */ lui $v0,%hi(var8006807c) -/* f047cf4: 15610005 */ bne $t3,$at,.L0f047d0c -/* f047cf8: 2442807c */ addiu $v0,$v0,%lo(var8006807c) -/* f047cfc: 8c4c0000 */ lw $t4,0x0($v0) -/* f047d00: 8ced0038 */ lw $t5,0x38($a3) -/* f047d04: 018d7021 */ addu $t6,$t4,$t5 -/* f047d08: ac4e0000 */ sw $t6,0x0($v0) -.L0f047d0c: -/* f047d0c: 8e0f0120 */ lw $t7,0x120($s0) -/* f047d10: 8cf80038 */ lw $t8,0x38($a3) -/* f047d14: 8e0a02a8 */ lw $t2,0x2a8($s0) -/* f047d18: 8e0202d4 */ lw $v0,0x2d4($s0) -/* f047d1c: 01f8c821 */ addu $t9,$t7,$t8 -/* f047d20: ae190120 */ sw $t9,0x120($s0) -/* f047d24: 8ceb0038 */ lw $t3,0x38($a3) -/* f047d28: 02002025 */ or $a0,$s0,$zero -/* f047d2c: 24050003 */ addiu $a1,$zero,0x3 -/* f047d30: 014b6021 */ addu $t4,$t2,$t3 -/* f047d34: 10400005 */ beqz $v0,.L0f047d4c -/* f047d38: ae0c02a8 */ sw $t4,0x2a8($s0) -/* f047d3c: 8c4d0030 */ lw $t5,0x30($v0) -/* f047d40: 8cee0038 */ lw $t6,0x38($a3) -/* f047d44: 01ae7821 */ addu $t7,$t5,$t6 -/* f047d48: ac4f0030 */ sw $t7,0x30($v0) -.L0f047d4c: -/* f047d4c: 8e180014 */ lw $t8,0x14($s0) -/* f047d50: 33190040 */ andi $t9,$t8,0x40 -/* f047d54: 53200006 */ beqzl $t9,.L0f047d70 -/* f047d58: 820d0008 */ lb $t5,0x8($s0) -/* f047d5c: 8e0a011c */ lw $t2,0x11c($s0) -/* f047d60: 8ceb0038 */ lw $t3,0x38($a3) -/* f047d64: 014b6021 */ addu $t4,$t2,$t3 -/* f047d68: ae0c011c */ sw $t4,0x11c($s0) -/* f047d6c: 820d0008 */ lb $t5,0x8($s0) -.L0f047d70: -/* f047d70: 8cee0038 */ lw $t6,0x38($a3) -/* f047d74: 01ae7823 */ subu $t7,$t5,$t6 -/* f047d78: a20f0008 */ sb $t7,0x8($s0) -/* f047d7c: 82180008 */ lb $t8,0x8($s0) -/* f047d80: 8fad004c */ lw $t5,0x4c($sp) -/* f047d84: 07000012 */ bltz $t8,.L0f047dd0 -/* f047d88: 2da60001 */ sltiu $a2,$t5,0x1 -/* f047d8c: 8e190018 */ lw $t9,0x18($s0) -/* f047d90: 00195340 */ sll $t2,$t9,0xd -/* f047d94: 0540000e */ bltz $t2,.L0f047dd0 -/* f047d98: 00000000 */ sll $zero,$zero,0x0 -/* f047d9c: 920b0113 */ lbu $t3,0x113($s0) -/* f047da0: 29610041 */ slti $at,$t3,0x41 -/* f047da4: 1020000a */ beqz $at,.L0f047dd0 -/* f047da8: 00000000 */ sll $zero,$zero,0x0 -/* f047dac: 8e0c02d4 */ lw $t4,0x2d4($s0) -/* f047db0: 1180013f */ beqz $t4,.L0f0482b0 -/* f047db4: 00000000 */ sll $zero,$zero,0x0 -/* f047db8: 82020007 */ lb $v0,0x7($s0) -/* f047dbc: 24010004 */ addiu $at,$zero,0x4 -/* f047dc0: 10410003 */ beq $v0,$at,.L0f047dd0 -/* f047dc4: 24010005 */ addiu $at,$zero,0x5 -/* f047dc8: 14410139 */ bne $v0,$at,.L0f0482b0 -/* f047dcc: 00000000 */ sll $zero,$zero,0x0 -.L0f047dd0: -/* f047dd0: 54c00004 */ bnezl $a2,.L0f047de4 -/* f047dd4: a3a6004b */ sb $a2,0x4b($sp) -/* f047dd8: 39a60001 */ xori $a2,$t5,0x1 -/* f047ddc: 2cc60001 */ sltiu $a2,$a2,0x1 -/* f047de0: a3a6004b */ sb $a2,0x4b($sp) -.L0f047de4: -/* f047de4: 0fc135ad */ jal chraiExecute -/* f047de8: a2000008 */ sb $zero,0x8($s0) -/* f047dec: 8e02001c */ lw $v0,0x1c($s0) -/* f047df0: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047df4: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047df8: 1040001f */ beqz $v0,.L0f047e78 -/* f047dfc: 00000000 */ sll $zero,$zero,0x0 -/* f047e00: 8203033b */ lb $v1,0x33b($s0) -/* f047e04: 5c600019 */ bgtzl $v1,.L0f047e6c -/* f047e08: 8cea0038 */ lw $t2,0x38($a3) -/* f047e0c: 86040356 */ lh $a0,0x356($s0) -/* f047e10: 240e001e */ addiu $t6,$zero,0x1e -/* f047e14: a20e033b */ sb $t6,0x33b($s0) -/* f047e18: 04800011 */ bltz $a0,.L0f047e60 -/* f047e1c: 00000000 */ sll $zero,$zero,0x0 -/* f047e20: 0c006134 */ jal ailistFindById -/* f047e24: 00000000 */ sll $zero,$zero,0x0 -/* f047e28: 8e0f0108 */ lw $t7,0x108($s0) -/* f047e2c: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047e30: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047e34: 104f000a */ beq $v0,$t7,.L0f047e60 -/* f047e38: 00000000 */ sll $zero,$zero,0x0 -/* f047e3c: 0fc127f3 */ jal func0f049fcc -/* f047e40: 02002025 */ or $a0,$s0,$zero -/* f047e44: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047e48: 10400005 */ beqz $v0,.L0f047e60 -/* f047e4c: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047e50: 8e180018 */ lw $t8,0x18($s0) -/* f047e54: 3c010800 */ lui $at,0x800 -/* f047e58: 0301c825 */ or $t9,$t8,$at -/* f047e5c: ae190018 */ sw $t9,0x18($s0) -.L0f047e60: -/* f047e60: 10000005 */ beqz $zero,.L0f047e78 -/* f047e64: 8e02001c */ lw $v0,0x1c($s0) -/* f047e68: 8cea0038 */ lw $t2,0x38($a3) -.L0f047e6c: -/* f047e6c: 8e02001c */ lw $v0,0x1c($s0) -/* f047e70: 006a5823 */ subu $t3,$v1,$t2 -/* f047e74: a20b033b */ sb $t3,0x33b($s0) -.L0f047e78: -/* f047e78: 50400015 */ beqzl $v0,.L0f047ed0 -/* f047e7c: 8e19001c */ lw $t9,0x1c($s0) -/* f047e80: 860c035a */ lh $t4,0x35a($s0) -/* f047e84: 05820012 */ bltzl $t4,.L0f047ed0 -/* f047e88: 8e19001c */ lw $t9,0x1c($s0) -/* f047e8c: 0fc0030a */ jal func0f000c28 -/* f047e90: 84440028 */ lh $a0,0x28($v0) -/* f047e94: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047e98: 28410019 */ slti $at,$v0,0x19 -/* f047e9c: 1020000b */ beqz $at,.L0f047ecc -/* f047ea0: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047ea4: 0c006134 */ jal ailistFindById -/* f047ea8: 8604035a */ lh $a0,0x35a($s0) -/* f047eac: 8e0d0108 */ lw $t5,0x108($s0) -/* f047eb0: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047eb4: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047eb8: 504d0005 */ beql $v0,$t5,.L0f047ed0 -/* f047ebc: 8e19001c */ lw $t9,0x1c($s0) -/* f047ec0: 920f032d */ lbu $t7,0x32d($s0) -/* f047ec4: 35f80002 */ ori $t8,$t7,0x2 -/* f047ec8: a218032d */ sb $t8,0x32d($s0) -.L0f047ecc: -/* f047ecc: 8e19001c */ lw $t9,0x1c($s0) -.L0f047ed0: -/* f047ed0: 53200053 */ beqzl $t9,.L0f048020 -/* f047ed4: 8fb9004c */ lw $t9,0x4c($sp) -/* f047ed8: 860a035c */ lh $t2,0x35c($s0) -/* f047edc: 05420050 */ bltzl $t2,.L0f048020 -/* f047ee0: 8fb9004c */ lw $t9,0x4c($sp) -/* f047ee4: 8ceb0284 */ lw $t3,0x284($a3) -/* f047ee8: 8d6c00d8 */ lw $t4,0xd8($t3) -/* f047eec: 5180004c */ beqzl $t4,.L0f048020 -/* f047ef0: 8fb9004c */ lw $t9,0x4c($sp) -/* f047ef4: 8ced006c */ lw $t5,0x6c($a3) -/* f047ef8: 8ce5028c */ lw $a1,0x28c($a3) -/* f047efc: 00004825 */ or $t1,$zero,$zero -/* f047f00: 11a00003 */ beqz $t5,.L0f047f10 -/* f047f04: 00002025 */ or $a0,$zero,$zero -/* f047f08: 10000001 */ beqz $zero,.L0f047f10 -/* f047f0c: 24090001 */ addiu $t1,$zero,0x1 -.L0f047f10: -/* f047f10: 8cee0068 */ lw $t6,0x68($a3) -/* f047f14: 00004025 */ or $t0,$zero,$zero -/* f047f18: 00003025 */ or $a2,$zero,$zero -/* f047f1c: 11c00003 */ beqz $t6,.L0f047f2c -/* f047f20: 00000000 */ sll $zero,$zero,0x0 -/* f047f24: 10000001 */ beqz $zero,.L0f047f2c -/* f047f28: 24040001 */ addiu $a0,$zero,0x1 -.L0f047f2c: -/* f047f2c: 8cef0064 */ lw $t7,0x64($a3) -/* f047f30: 11e00003 */ beqz $t7,.L0f047f40 -/* f047f34: 00000000 */ sll $zero,$zero,0x0 -/* f047f38: 10000001 */ beqz $zero,.L0f047f40 -/* f047f3c: 24080001 */ addiu $t0,$zero,0x1 -.L0f047f40: -/* f047f40: 8cf80070 */ lw $t8,0x70($a3) -/* f047f44: 13000003 */ beqz $t8,.L0f047f54 -/* f047f48: 00000000 */ sll $zero,$zero,0x0 -/* f047f4c: 10000001 */ beqz $zero,.L0f047f54 -/* f047f50: 24060001 */ addiu $a2,$zero,0x1 -.L0f047f54: -/* f047f54: 00c8c821 */ addu $t9,$a2,$t0 -/* f047f58: 03245021 */ addu $t2,$t9,$a0 -/* f047f5c: 01491821 */ addu $v1,$t2,$t1 -/* f047f60: 28610002 */ slti $at,$v1,0x2 -/* f047f64: 14200021 */ bnez $at,.L0f047fec -/* f047f68: 24020001 */ addiu $v0,$zero,0x1 -/* f047f6c: 18600019 */ blez $v1,.L0f047fd4 -/* f047f70: 00002025 */ or $a0,$zero,$zero -.L0f047f74: -/* f047f74: 50850012 */ beql $a0,$a1,.L0f047fc0 -/* f047f78: 24840001 */ addiu $a0,$a0,0x1 -/* f047f7c: afa20038 */ sw $v0,0x38($sp) -/* f047f80: afa30024 */ sw $v1,0x24($sp) -/* f047f84: afa40040 */ sw $a0,0x40($sp) -/* f047f88: 0fc4a24b */ jal setCurrentPlayerNum -/* f047f8c: afa50044 */ sw $a1,0x44($sp) -/* f047f90: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047f94: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047f98: 8ceb0284 */ lw $t3,0x284($a3) -/* f047f9c: 8fa20038 */ lw $v0,0x38($sp) -/* f047fa0: 8fa30024 */ lw $v1,0x24($sp) -/* f047fa4: 8d6c00d8 */ lw $t4,0xd8($t3) -/* f047fa8: 8fa40040 */ lw $a0,0x40($sp) -/* f047fac: 8fa50044 */ lw $a1,0x44($sp) -/* f047fb0: 55800003 */ bnezl $t4,.L0f047fc0 -/* f047fb4: 24840001 */ addiu $a0,$a0,0x1 -/* f047fb8: 00001025 */ or $v0,$zero,$zero -/* f047fbc: 24840001 */ addiu $a0,$a0,0x1 -.L0f047fc0: -/* f047fc0: 0083082a */ slt $at,$a0,$v1 -/* f047fc4: 50200004 */ beqzl $at,.L0f047fd8 -/* f047fc8: 00a02025 */ or $a0,$a1,$zero -/* f047fcc: 1440ffe9 */ bnez $v0,.L0f047f74 -/* f047fd0: 00000000 */ sll $zero,$zero,0x0 -.L0f047fd4: -/* f047fd4: 00a02025 */ or $a0,$a1,$zero -.L0f047fd8: -/* f047fd8: 0fc4a24b */ jal setCurrentPlayerNum -/* f047fdc: afa20038 */ sw $v0,0x38($sp) -/* f047fe0: 3c07800a */ lui $a3,%hi(g_Vars) -/* f047fe4: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f047fe8: 8fa20038 */ lw $v0,0x38($sp) -.L0f047fec: -/* f047fec: 5040000c */ beqzl $v0,.L0f048020 -/* f047ff0: 8fb9004c */ lw $t9,0x4c($sp) -/* f047ff4: 0c006134 */ jal ailistFindById -/* f047ff8: 8604035c */ lh $a0,0x35c($s0) -/* f047ffc: 8e0d0108 */ lw $t5,0x108($s0) -/* f048000: 3c07800a */ lui $a3,%hi(g_Vars) -/* f048004: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -/* f048008: 504d0005 */ beql $v0,$t5,.L0f048020 -/* f04800c: 8fb9004c */ lw $t9,0x4c($sp) -/* f048010: 920f032d */ lbu $t7,0x32d($s0) -/* f048014: 35f80001 */ ori $t8,$t7,0x1 -/* f048018: a218032d */ sb $t8,0x32d($s0) -/* f04801c: 8fb9004c */ lw $t9,0x4c($sp) -.L0f048020: -/* f048020: 24010004 */ addiu $at,$zero,0x4 -/* f048024: 02002025 */ or $a0,$s0,$zero -/* f048028: 17210009 */ bne $t9,$at,.L0f048050 -/* f04802c: 00002825 */ or $a1,$zero,$zero -/* f048030: 0fc109e7 */ jal func0f04279c -/* f048034: 00003025 */ or $a2,$zero,$zero -/* f048038: 02002025 */ or $a0,$s0,$zero -/* f04803c: 24050001 */ addiu $a1,$zero,0x1 -/* f048040: 0fc109e7 */ jal func0f04279c -/* f048044: 00003025 */ or $a2,$zero,$zero -/* f048048: 3c07800a */ lui $a3,%hi(g_Vars) -/* f04804c: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars) -.L0f048050: -/* f048050: 8e0a001c */ lw $t2,0x1c($s0) -/* f048054: 51400089 */ beqzl $t2,.L0f04827c -/* f048058: 8e0e0014 */ lw $t6,0x14($s0) -/* f04805c: 8ceb04cc */ lw $t3,0x4cc($a3) -/* f048060: 51600012 */ beqzl $t3,.L0f0480ac -/* f048064: 820c0007 */ lb $t4,0x7($s0) -/* f048068: 82060007 */ lb $a2,0x7($s0) -/* f04806c: 24010003 */ addiu $at,$zero,0x3 -/* f048070: 10c10005 */ beq $a2,$at,.L0f048088 -/* f048074: 2401000e */ addiu $at,$zero,0xe -/* f048078: 10c10007 */ beq $a2,$at,.L0f048098 -/* f04807c: 00000000 */ sll $zero,$zero,0x0 -/* f048080: 1000007e */ beqz $zero,.L0f04827c -/* f048084: 8e0e0014 */ lw $t6,0x14($s0) -.L0f048088: -/* f048088: 0fc0f247 */ jal func0f03c91c -/* f04808c: 02002025 */ or $a0,$s0,$zero -/* f048090: 1000007a */ beqz $zero,.L0f04827c -/* f048094: 8e0e0014 */ lw $t6,0x14($s0) -.L0f048098: -/* f048098: 0fc11cf3 */ jal func0f0473cc -/* f04809c: 02002025 */ or $a0,$s0,$zero -/* f0480a0: 10000075 */ beqz $zero,.L0f048278 -/* f0480a4: a3a0004b */ sb $zero,0x4b($sp) -/* f0480a8: 820c0007 */ lb $t4,0x7($s0) -.L0f0480ac: -/* f0480ac: 258dffff */ addiu $t5,$t4,-1 -/* f0480b0: 2da10023 */ sltiu $at,$t5,0x23 -/* f0480b4: 10200070 */ beqz $at,.L0f048278 -/* f0480b8: 000d6880 */ sll $t5,$t5,0x2 -/* f0480bc: 3c017f1b */ lui $at,%hi(var7f1a929c) -/* f0480c0: 002d0821 */ addu $at,$at,$t5 -/* f0480c4: 8c2d929c */ lw $t5,%lo(var7f1a929c)($at) -/* f0480c8: 01a00008 */ jr $t5 -/* f0480cc: 00000000 */ sll $zero,$zero,0x0 -/* f0480d0: 0fc0f04e */ jal func0f03c138 -/* f0480d4: 02002025 */ or $a0,$s0,$zero -/* f0480d8: 10000068 */ beqz $zero,.L0f04827c -/* f0480dc: 8e0e0014 */ lw $t6,0x14($s0) -/* f0480e0: 0fc0f22d */ jal func0f03c8b4 -/* f0480e4: 02002025 */ or $a0,$s0,$zero -/* f0480e8: 10000064 */ beqz $zero,.L0f04827c -/* f0480ec: 8e0e0014 */ lw $t6,0x14($s0) -/* f0480f0: 0fc0f247 */ jal func0f03c91c -/* f0480f4: 02002025 */ or $a0,$s0,$zero -/* f0480f8: 10000060 */ beqz $zero,.L0f04827c -/* f0480fc: 8e0e0014 */ lw $t6,0x14($s0) -/* f048100: 0fc0f42c */ jal func0f03d0b0 -/* f048104: 02002025 */ or $a0,$s0,$zero -/* f048108: 1000005c */ beqz $zero,.L0f04827c -/* f04810c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048110: 0fc0f77e */ jal func0f03ddf8 -/* f048114: 02002025 */ or $a0,$s0,$zero -/* f048118: 10000058 */ beqz $zero,.L0f04827c -/* f04811c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048120: 0fc0f7b1 */ jal func0f03dec4 -/* f048124: 02002025 */ or $a0,$s0,$zero -/* f048128: 10000054 */ beqz $zero,.L0f04827c -/* f04812c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048130: 0fc0f7d4 */ jal func0f03df50 -/* f048134: 02002025 */ or $a0,$s0,$zero -/* f048138: 10000050 */ beqz $zero,.L0f04827c -/* f04813c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048140: 0fc0f7fd */ jal func0f03dff4 -/* f048144: 02002025 */ or $a0,$s0,$zero -/* f048148: 1000004c */ beqz $zero,.L0f04827c -/* f04814c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048150: 0fc0f349 */ jal func0f03cd24 -/* f048154: 02002025 */ or $a0,$s0,$zero -/* f048158: 10000048 */ beqz $zero,.L0f04827c -/* f04815c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048160: 0fc10bff */ jal func0f042ffc -/* f048164: 02002025 */ or $a0,$s0,$zero -/* f048168: 10000044 */ beqz $zero,.L0f04827c -/* f04816c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048170: 0fc11082 */ jal func0f044208 -/* f048174: 02002025 */ or $a0,$s0,$zero -/* f048178: 10000040 */ beqz $zero,.L0f04827c -/* f04817c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048180: 0fc10cf8 */ jal func0f0433e0 -/* f048184: 02002025 */ or $a0,$s0,$zero -/* f048188: 1000003c */ beqz $zero,.L0f04827c -/* f04818c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048190: 0fc11228 */ jal func0f0448a0 -/* f048194: 02002025 */ or $a0,$s0,$zero -/* f048198: 10000038 */ beqz $zero,.L0f04827c -/* f04819c: 8e0e0014 */ lw $t6,0x14($s0) -/* f0481a0: 0fc11cf3 */ jal func0f0473cc -/* f0481a4: 02002025 */ or $a0,$s0,$zero -/* f0481a8: 10000033 */ beqz $zero,.L0f048278 -/* f0481ac: a3a0004b */ sb $zero,0x4b($sp) -/* f0481b0: 0fc11aa3 */ jal func0f046a8c -/* f0481b4: 02002025 */ or $a0,$s0,$zero -/* f0481b8: 10000030 */ beqz $zero,.L0f04827c -/* f0481bc: 8e0e0014 */ lw $t6,0x14($s0) -/* f0481c0: 0fc0f2dd */ jal func0f03cb74 -/* f0481c4: 02002025 */ or $a0,$s0,$zero -/* f0481c8: 1000002c */ beqz $zero,.L0f04827c -/* f0481cc: 8e0e0014 */ lw $t6,0x14($s0) -/* f0481d0: 0fc0f825 */ jal func0f03e094 -/* f0481d4: 02002025 */ or $a0,$s0,$zero -/* f0481d8: 10000028 */ beqz $zero,.L0f04827c -/* f0481dc: 8e0e0014 */ lw $t6,0x14($s0) -/* f0481e0: 0fc0f86a */ jal func0f03e1a8 -/* f0481e4: 02002025 */ or $a0,$s0,$zero -/* f0481e8: 10000024 */ beqz $zero,.L0f04827c -/* f0481ec: 8e0e0014 */ lw $t6,0x14($s0) -/* f0481f0: 0fc0f839 */ jal func0f03e0e4 -/* f0481f4: 02002025 */ or $a0,$s0,$zero -/* f0481f8: 10000020 */ beqz $zero,.L0f04827c -/* f0481fc: 8e0e0014 */ lw $t6,0x14($s0) -/* f048200: 0fc10e7e */ jal func0f0439f8 -/* f048204: 02002025 */ or $a0,$s0,$zero -/* f048208: 1000001c */ beqz $zero,.L0f04827c -/* f04820c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048210: 0fc10fc9 */ jal func0f043f24 -/* f048214: 02002025 */ or $a0,$s0,$zero -/* f048218: 10000018 */ beqz $zero,.L0f04827c -/* f04821c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048220: 0fc0f5fb */ jal func0f03d7ec -/* f048224: 02002025 */ or $a0,$s0,$zero -/* f048228: 10000014 */ beqz $zero,.L0f04827c -/* f04822c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048230: 0fc0f6a3 */ jal func0f03da8c -/* f048234: 02002025 */ or $a0,$s0,$zero -/* f048238: 10000010 */ beqz $zero,.L0f04827c -/* f04823c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048240: 0fc0f736 */ jal func0f03dcd8 -/* f048244: 02002025 */ or $a0,$s0,$zero -/* f048248: 1000000c */ beqz $zero,.L0f04827c -/* f04824c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048250: 0fc1098b */ jal func0f04262c -/* f048254: 02002025 */ or $a0,$s0,$zero -/* f048258: 10000008 */ beqz $zero,.L0f04827c -/* f04825c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048260: 0fc10a90 */ jal func0f042a40 -/* f048264: 02002025 */ or $a0,$s0,$zero -/* f048268: 10000004 */ beqz $zero,.L0f04827c -/* f04826c: 8e0e0014 */ lw $t6,0x14($s0) -/* f048270: 0fc11e4d */ jal func0f047934 -/* f048274: 02002025 */ or $a0,$s0,$zero -.L0f048278: -/* f048278: 8e0e0014 */ lw $t6,0x14($s0) -.L0f04827c: -/* f04827c: 96180192 */ lhu $t8,0x192($s0) -/* f048280: 2401fffd */ addiu $at,$zero,-3 -/* f048284: 01c17824 */ and $t7,$t6,$at -/* f048288: 3319ffbf */ andi $t9,$t8,0xffbf -/* f04828c: ae0f0014 */ sw $t7,0x14($s0) -/* f048290: a6190192 */ sh $t9,0x192($s0) -/* f048294: 93aa004b */ lbu $t2,0x4b($sp) -/* f048298: 51400008 */ beqzl $t2,.L0f0482bc -/* f04829c: 8fbf001c */ lw $ra,0x1c($sp) -/* f0482a0: 0fc01877 */ jal func0f0061dc -/* f0482a4: 02002025 */ or $a0,$s0,$zero -/* f0482a8: 10000004 */ beqz $zero,.L0f0482bc -/* f0482ac: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0482b0: -/* f0482b0: 0fc01948 */ jal func0f006520 -/* f0482b4: 02002025 */ or $a0,$s0,$zero -/* f0482b8: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0482bc: -/* f0482bc: 8fb00018 */ lw $s0,0x18($sp) -/* f0482c0: 27bd0050 */ addiu $sp,$sp,0x50 -/* f0482c4: 03e00008 */ jr $ra -/* f0482c8: 00000000 */ sll $zero,$zero,0x0 -); +void chrTick(struct chrdata *chr) +{ + u32 race = CHRRACE(chr); + + if (g_Vars.lvupdate240 < 1) { + return; + } + + if (chr->actiontype == ACT_INIT) { + chr->chrflags |= CHRCFLAG_00000001; + func0f02e9a0(chr, 0); + chr->sleep = 0; + } + + if (race == RACE_DRCAROLL) { + var8006807c += g_Vars.lvupdate240_60; + } + + chr->soundtimer += g_Vars.lvupdate240_60; + chr->talktimer += g_Vars.lvupdate240_60; + + if (chr->unk2d4) { + chr->unk2d4->unk030 += g_Vars.lvupdate240_60; + } + + if (chr->hidden & CHRHFLAG_TIMER_RUNNING) { + chr->timer60 += g_Vars.lvupdate240_60; + } + + chr->sleep -= g_Vars.lvupdate240_60; + + if (chr->sleep < 0 + || (chr->chrflags & CHRCFLAG_00040000) + || chr->alertness >= 65 + || (chr->unk2d4 && (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD))) { + u8 pass = race == RACE_HUMAN || race == RACE_SKEDAR; + chr->sleep = 0; + + chraiExecute(chr, PROPTYPE_CHR); + + // Consider setting shootingatmelist + if (chr->prop) { + if (chr->aimtesttimer60 < 1) { + chr->aimtesttimer60 = 30; + + if (chr->aishootingatmelist >= 0 + && ailistFindById(chr->aishootingatmelist) != chr->ailist + && func0f049fcc(chr)) { + chr->chrflags |= CHRCFLAG_CONSIDER_DODGE; + } + } else { + chr->aimtesttimer60 -= g_Vars.lvupdate240_60; + } + } + + // Consider setting darkroomlist + if (chr->prop + && chr->aidarkroomlist >= 0 + && roomGetBrightness(chr->prop->rooms[0]) < 25 + && ailistFindById(chr->aidarkroomlist) != chr->ailist) { + chr->darkroomthing = true; + } + + // Consider setting playerdeadlist + if (chr->prop && chr->aiplayerdeadlist >= 0 && g_Vars.currentplayer->isdead) { + u32 prevplayernum = g_Vars.currentplayernum; + s32 i; + s32 playercount = PLAYERCOUNT(); + bool alldead = true; + + if (playercount >= 2) { + for (i = 0; i < playercount && alldead; i++) { + if (i != prevplayernum) { + setCurrentPlayerNum(i); + + if (g_Vars.currentplayer->isdead == false) { + alldead = false; + } + } + } + + setCurrentPlayerNum(prevplayernum); + } + + if (alldead && ailistFindById(chr->aiplayerdeadlist) != chr->ailist) { + chr->playerdeadthing = true; + } + } + + if (race == RACE_ROBOT) { + func0f04279c(chr, 0, 0); + func0f04279c(chr, 1, 0); + } + + if (chr->prop) { + if (g_Vars.in_cutscene) { + switch (chr->actiontype) { + case ACT_ANIM: func0f03c91c(chr); break; + case ACT_PATROL: func0f0473cc(chr); pass = false; break; + } + } else { + switch (chr->actiontype) { + case ACT_STAND: func0f03c138(chr); break; + case ACT_KNEEL: func0f03c8b4(chr); break; + case ACT_ANIM: func0f03c91c(chr); break; + case ACT_DIE: func0f03d0b0(chr); break; + case ACT_ARGH: func0f03ddf8(chr); break; + case ACT_PREARGH: func0f03dec4(chr); break; + case ACT_SIDESTEP: func0f03df50(chr); break; + case ACT_JUMPOUT: func0f03dff4(chr); break; + case ACT_DEAD: func0f03cd24(chr); break; + case ACT_ATTACK: func0f042ffc(chr); break; + case ACT_ATTACKWALK: func0f044208(chr); break; + case ACT_ATTACKROLL: func0f0433e0(chr); break; + case ACT_RUNPOS: func0f0448a0(chr); break; + case ACT_PATROL: func0f0473cc(chr); pass = false; break; + case ACT_GOPOS: func0f046a8c(chr); break; + case ACT_SURRENDER: func0f03cb74(chr); break; + case ACT_TEST: func0f03e094(chr); break; + case ACT_SURPRISED: func0f03e1a8(chr); break; + case ACT_STARTALARM: func0f03e0e4(chr); break; + case ACT_THROWGRENADE: func0f0439f8(chr); break; + case ACT_BONDDIE: func0f043f24(chr); break; + case ACT_DRUGGEDCOMINGUP: func0f03d7ec(chr); break; + case ACT_DRUGGEDDROP: func0f03da8c(chr); break; + case ACT_DRUGGEDKO: func0f03dcd8(chr); break; + case ACT_ATTACKAMOUNT: func0f04262c(chr); break; + case ACT_ROBOTATTACK: func0f042a40(chr); break; + case ACT_SKJUMP: func0f047934(chr); break; + } + } + } + + chr->hidden &= ~CHRHFLAG_00000002; + chr->hidden2 &= ~CHRH2FLAG_0040; + + if (pass) { + func0f0061dc(chr); + } + } else { + func0f006520(chr); + } +} void func0f0482cc(u32 ailistid) { @@ -29236,7 +28907,7 @@ glabel func0f048398 /* f04860c: 53000006 */ beqzl $t8,.L0f048628 /* f048610: 26b50001 */ addiu $s5,$s5,0x1 .L0f048614: -/* f048614: 0fc11f20 */ jal func0f047c80 +/* f048614: 0fc11f20 */ jal chrTick /* f048618: 02622021 */ addu $a0,$s3,$v0 /* f04861c: 3c038006 */ lui $v1,%hi(var80060004) /* f048620: 8c637e60 */ lw $v1,0x7e60($v1) diff --git a/src/game/game_000920.c b/src/game/game_000920.c index ba08b4b59..86caca4a0 100644 --- a/src/game/game_000920.c +++ b/src/game/game_000920.c @@ -336,7 +336,7 @@ glabel func0f000b24 ); GLOBAL_ASM( -glabel func0f000c28 +glabel roomGetBrightness /* f000c28: 000478c0 */ sll $t7,$a0,0x3 /* f000c2c: 01e47821 */ addu $t7,$t7,$a0 /* f000c30: 3c0e800a */ lui $t6,0x800a diff --git a/src/game/game_01e250.c b/src/game/game_01e250.c index 3ed58b8a0..f6b04f2e7 100644 --- a/src/game/game_01e250.c +++ b/src/game/game_01e250.c @@ -2812,7 +2812,7 @@ void chrInit(struct prop *prop, u8 *ailist) chr->firecount[1] = 0; chr->darkroomthing = 0; - chr->unk32c_15 = 0; + chr->playerdeadthing = 0; chr->unk32c_12 = 0; chr->grenadeprob = 0; @@ -5609,7 +5609,7 @@ glabel func0f023098 /* f0233b8: 10000008 */ beqz $zero,.L0f0233dc /* f0233bc: 00000000 */ sll $zero,$zero,0x0 .L0f0233c0: -/* f0233c0: 0fc11f20 */ jal func0f047c80 +/* f0233c0: 0fc11f20 */ jal chrTick /* f0233c4: 02002025 */ or $a0,$s0,$zero /* f0233c8: 8e190020 */ lw $t9,0x20($s0) /* f0233cc: 17200003 */ bnez $t9,.L0f0233dc diff --git a/src/include/constants.h b/src/include/constants.h index 20915da78..518674ba2 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -337,6 +337,7 @@ // chr->hidden2 #define CHRH2FLAG_0001 0x0001 +#define CHRH2FLAG_0040 0x0040 #define CHRH2FLAG_1000 0x1000 // chr->chrflags diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index 740b3b512..3a608f1a2 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -108,21 +108,21 @@ u32 func0f03b97c(struct chrdata *chr, u32 arg1, u32 arg2); u32 func0f03ba44(void); u32 chrTryPunchOrKick(struct chrdata *chr, u32 arg1); u32 func0f03c044(void); -u32 func0f03c138(void); -u32 func0f03c91c(void); -u32 func0f03cb74(void); -u32 func0f03cd24(void); +void func0f03c138(struct chrdata *chr); +void func0f03c91c(struct chrdata *chr); +void func0f03cb74(struct chrdata *chr); +void func0f03cd24(struct chrdata *chr); u32 func0f03ce8c(void); -u32 func0f03d0b0(void); -u32 func0f03d7ec(void); -u32 func0f03da8c(void); -u32 func0f03dcd8(void); -u32 func0f03ddf8(void); -u32 func0f03dec4(void); -u32 func0f03df50(void); -u32 func0f03dff4(void); -u32 func0f03e0e4(void); -u32 func0f03e1a8(void); +void func0f03d0b0(struct chrdata *chr); +void func0f03d7ec(struct chrdata *chr); +void func0f03da8c(struct chrdata *chr); +void func0f03dcd8(struct chrdata *chr); +void func0f03ddf8(struct chrdata *chr); +void func0f03dec4(struct chrdata *chr); +void func0f03df50(struct chrdata *chr); +void func0f03dff4(struct chrdata *chr); +void func0f03e0e4(struct chrdata *chr); +void func0f03e1a8(struct chrdata *chr); void func0f03e29c(struct chrdata *chr, s32 arg1, s32 arg2, s32 arg3, struct coord *arg4, struct coord *arg5); f32 func0f03e45c(struct chrdata *chr); u32 func0f03e5f0(void); @@ -140,20 +140,20 @@ u32 func0f041a74(void); u32 func0f041c44(void); u32 func0f041d38(void); u32 func0f041e48(void); -u32 func0f04262c(void); -u32 func0f04279c(void); +void func0f04262c(struct chrdata *chr); +void func0f04279c(struct chrdata *chr, bool arg1, bool arg2); void func0f042808(struct chrdata *chr); -u32 func0f042a40(void); -u32 func0f042ffc(void); -u32 func0f0433e0(void); +void func0f042a40(struct chrdata *chr); +void func0f042ffc(struct chrdata *chr); +void func0f0433e0(struct chrdata *chr); u32 func0f043944(void); -u32 func0f0439f8(void); +void func0f0439f8(struct chrdata *chr); u32 func0f043f2c(void); -u32 func0f044208(void); +void func0f044208(struct chrdata *chr); u32 func0f0445c4(void); u32 func0f0446e0(void); u32 func0f044808(void); -u32 func0f0448a0(void); +void func0f0448a0(struct chrdata *chr); u32 func0f044b68(void); u32 func0f044c38(void); u32 func0f0451a8(void); @@ -162,11 +162,11 @@ u32 func0f045a70(void); u32 func0f045b9c(void); u32 func0f046648(void); u32 func0f046a60(void); -u32 func0f046a8c(void); -u32 func0f0473cc(void); +void func0f046a8c(struct chrdata *chr); +void func0f0473cc(struct chrdata *chr); bool func0f047700(struct chrdata *chr, u8 arg1, u8 arg2, s32 arg3, u8 arg4); -u32 func0f047934(void); -u32 func0f047c80(void); +void func0f047934(struct chrdata *chr); +void chrTick(struct chrdata *chr); void func0f0482cc(u32 ailistid); u32 func0f048398(void); f32 chrGetAngleToPos(struct chrdata *chr, struct coord *pos); @@ -265,7 +265,7 @@ void func0f0429d8(struct chrdata *chr, f32 arg1, f32 arg2); void unregisterDangerousProp(struct prop *prop); void registerDangerousProp(struct prop *prop); bool chrDetectDangerousObject(struct chrdata *chr, u8 flags); -void func0f043f24(s32 arg0); +void func0f043f24(struct chrdata *chr); s32 func0f046a30(struct chrdata *chr); bool skedarTryPounce(struct chrdata *chr, u8 arg1, u8 arg2, s32 arg3, u8 arg4); bool chrSawTargetRecently(struct chrdata *chr); diff --git a/src/include/game/game_000920.h b/src/include/game/game_000920.h index 88cda1f52..d8f8df214 100644 --- a/src/include/game/game_000920.h +++ b/src/include/game/game_000920.h @@ -8,7 +8,7 @@ u32 func0f00097c(void); u32 func0f0009c0(void); u32 func0f000a10(void); u32 func0f000b24(void); -u32 func0f000c28(void); +s32 roomGetBrightness(s16 room); u32 func0f000c54(void); u32 func0f000cc4(void); u32 func0f000dbc(void); diff --git a/src/include/game/game_005fd0.h b/src/include/game/game_005fd0.h index d1349e04e..296730b48 100644 --- a/src/include/game/game_005fd0.h +++ b/src/include/game/game_005fd0.h @@ -5,8 +5,8 @@ u32 func0f005fd0(void); u32 func0f006074(void); -u32 func0f0061dc(void); -u32 func0f006520(void); +void func0f0061dc(struct chrdata *chr); +void func0f006520(struct chrdata *chr); u32 func0f006900(void); u32 func0f0069dc(void); u32 func0f006b08(void); diff --git a/src/include/types.h b/src/include/types.h index 3c59d796b..dbf673993 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -156,7 +156,7 @@ struct chr2d4 { /*0x028*/ u32 unk028; /*0x02c*/ u16 unk02c; /*0x02e*/ u16 unk02e; - /*0x030*/ u32 unk030; + /*0x030*/ u32 unk030; // timer of some sort /*0x034*/ u32 unk034; /*0x038*/ u32 unk038; /*0x03c*/ u16 unk03c; @@ -632,7 +632,7 @@ struct chrdata { u8 pouncebits : 3; u8 unk32c_12 : 2; u8 darkroomthing : 1; - u8 unk32c_15 : 1; + u8 playerdeadthing : 1; u8 p1p2 : 2; u8 unk32c_18 : 1; @@ -652,7 +652,7 @@ struct chrdata { /*0x338*/ u8 splatsdroppedhe; /*0x339*/ u8 stdsplatsadded; /*0x33a*/ u8 deaddropsplatsadded; - /*0x33b*/ u8 aimtesttimer60; + /*0x33b*/ s8 aimtesttimer60; /*0x33c*/ struct coord lastdroppos; /*0x348*/ u32 unk348; /*0x34c*/ u32 unk34c;