From 2dd66483f35701f8297d8a4b550549b92ef5756a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 28 Aug 2020 19:13:08 +1000 Subject: [PATCH] Decompile func0f16cfe8 --- src/game/data/data_02a0e0.c | 2 +- src/game/game_16cfa0.c | 70 +++------- src/gvars/gvars.c | 199 +--------------------------- src/include/game/data/data_02a0e0.h | 1 + src/include/gvars/gvars.h | 2 +- src/include/lib/lib_0e9d0.h | 2 +- src/include/types.h | 69 ++++++++++ src/lib/lib_11420.c | 4 +- 8 files changed, 92 insertions(+), 257 deletions(-) diff --git a/src/game/data/data_02a0e0.c b/src/game/data/data_02a0e0.c index 9828b0964..0e8f617d8 100644 --- a/src/game/data/data_02a0e0.c +++ b/src/game/data/data_02a0e0.c @@ -29,7 +29,7 @@ s32 var800840dc = 0; u32 var800840e0 = 0x0000000f; u32 var800840e4 = 0x00000000; s32 var800840e8 = 0; -u32 var800840ec = 0x50000000; +u16 var800840ec = 0x5000; u32 var800840f0 = 0x00000000; u32 var800840f4 = 0x00000000; u32 var800840f8 = 0x00000078; diff --git a/src/game/game_16cfa0.c b/src/game/game_16cfa0.c index ff27553a8..936a0d7a1 100644 --- a/src/game/game_16cfa0.c +++ b/src/game/game_16cfa0.c @@ -41,60 +41,22 @@ glabel func0f16cfa0 /* f16cfe4: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f16cfe8 -/* f16cfe8: 27bdffc8 */ addiu $sp,$sp,-56 -/* f16cfec: afb60030 */ sw $s6,0x30($sp) -/* f16cff0: 3096ffff */ andi $s6,$a0,0xffff -/* f16cff4: 2ac15001 */ slti $at,$s6,0x5001 -/* f16cff8: afbf0034 */ sw $ra,0x34($sp) -/* f16cffc: afb5002c */ sw $s5,0x2c($sp) -/* f16d000: afb40028 */ sw $s4,0x28($sp) -/* f16d004: afb30024 */ sw $s3,0x24($sp) -/* f16d008: afb20020 */ sw $s2,0x20($sp) -/* f16d00c: afb1001c */ sw $s1,0x1c($sp) -/* f16d010: afb00018 */ sw $s0,0x18($sp) -/* f16d014: 14200002 */ bnez $at,.L0f16d020 -/* f16d018: afa40038 */ sw $a0,0x38($sp) -/* f16d01c: 24165000 */ addiu $s6,$zero,0x5000 -.L0f16d020: -/* f16d020: 3c11800b */ lui $s1,%hi(var800aaa38) -/* f16d024: 3c138009 */ lui $s3,%hi(var80094ed8) -/* f16d028: 26734ed8 */ addiu $s3,$s3,%lo(var80094ed8) -/* f16d02c: 2631aa38 */ addiu $s1,$s1,%lo(var800aaa38) -/* f16d030: 00008025 */ or $s0,$zero,$zero -/* f16d034: 24150003 */ addiu $s5,$zero,0x3 -/* f16d038: 24140108 */ addiu $s4,$zero,0x108 -/* f16d03c: 24120005 */ addiu $s2,$zero,0x5 -.L0f16d040: -/* f16d040: 8e220000 */ lw $v0,0x0($s1) -/* f16d044: 5040000a */ beqzl $v0,.L0f16d070 -/* f16d048: 26100001 */ addiu $s0,$s0,0x1 -/* f16d04c: 52420008 */ beql $s2,$v0,.L0f16d070 -/* f16d050: 26100001 */ addiu $s0,$s0,0x1 -/* f16d054: 02140019 */ multu $s0,$s4 -/* f16d058: 32c5ffff */ andi $a1,$s6,0xffff -/* f16d05c: 00007012 */ mflo $t6 -/* f16d060: 026e2021 */ addu $a0,$s3,$t6 -/* f16d064: 0c003f67 */ jal func0000fd9c -/* f16d068: 00000000 */ nop -/* f16d06c: 26100001 */ addiu $s0,$s0,0x1 -.L0f16d070: -/* f16d070: 1615fff3 */ bne $s0,$s5,.L0f16d040 -/* f16d074: 26310010 */ addiu $s1,$s1,0x10 -/* f16d078: 8fbf0034 */ lw $ra,0x34($sp) -/* f16d07c: 3c018008 */ lui $at,%hi(var800840ec) -/* f16d080: a43640ec */ sh $s6,%lo(var800840ec)($at) -/* f16d084: 8fb60030 */ lw $s6,0x30($sp) -/* f16d088: 8fb00018 */ lw $s0,0x18($sp) -/* f16d08c: 8fb1001c */ lw $s1,0x1c($sp) -/* f16d090: 8fb20020 */ lw $s2,0x20($sp) -/* f16d094: 8fb30024 */ lw $s3,0x24($sp) -/* f16d098: 8fb40028 */ lw $s4,0x28($sp) -/* f16d09c: 8fb5002c */ lw $s5,0x2c($sp) -/* f16d0a0: 03e00008 */ jr $ra -/* f16d0a4: 27bd0038 */ addiu $sp,$sp,0x38 -); +void func0f16cfe8(u16 volume) +{ + s32 i; + + if (volume > 0x5000) { + volume = 0x5000; + } + + for (i = 0; i < ARRAYCOUNT(var800aaa38); i++) { + if (var800aaa38[i].unk00 != 0 && var800aaa38[i].unk00 != 5) { + func0000fd9c(&var80094ed8[i], volume); + } + } + + var800840ec = volume; +} bool func0f16d0a8(s32 arg0, s32 arg1) { diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 5b2c66f70..f08d5b33f 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -7740,204 +7740,7 @@ u32 var80094ec8 = 0; u32 var80094ecc = 0; u32 var80094ed0 = 0; u32 var80094ed4 = 0; -u32 var80094ed8 = 0; -u32 var80094edc = 0; -u32 var80094ee0 = 0; -u32 var80094ee4 = 0; -u32 var80094ee8 = 0; -u32 var80094eec = 0; -u32 var80094ef0 = 0; -u32 var80094ef4 = 0; -u32 var80094ef8 = 0; -u32 var80094efc = 0; -u32 var80094f00 = 0; -u32 var80094f04 = 0; -u32 var80094f08 = 0; -u32 var80094f0c = 0; -u32 var80094f10 = 0; -u32 var80094f14 = 0; -u32 var80094f18 = 0; -u32 var80094f1c = 0; -u32 var80094f20 = 0; -u32 var80094f24 = 0; -u32 var80094f28 = 0; -u32 var80094f2c = 0; -u32 var80094f30 = 0; -u32 var80094f34 = 0; -u32 var80094f38 = 0; -u32 var80094f3c = 0; -u32 var80094f40 = 0; -u32 var80094f44 = 0; -u32 var80094f48 = 0; -u32 var80094f4c = 0; -u32 var80094f50 = 0; -u32 var80094f54 = 0; -u32 var80094f58 = 0; -u32 var80094f5c = 0; -u32 var80094f60 = 0; -u32 var80094f64 = 0; -u32 var80094f68 = 0; -u32 var80094f6c = 0; -u32 var80094f70 = 0; -u32 var80094f74 = 0; -u32 var80094f78 = 0; -u32 var80094f7c = 0; -u32 var80094f80 = 0; -u32 var80094f84 = 0; -u32 var80094f88 = 0; -u32 var80094f8c = 0; -u32 var80094f90 = 0; -u32 var80094f94 = 0; -u32 var80094f98 = 0; -u32 var80094f9c = 0; -u32 var80094fa0 = 0; -u32 var80094fa4 = 0; -u32 var80094fa8 = 0; -u32 var80094fac = 0; -u32 var80094fb0 = 0; -u32 var80094fb4 = 0; -u32 var80094fb8 = 0; -u32 var80094fbc = 0; -u32 var80094fc0 = 0; -u32 var80094fc4 = 0; -u32 var80094fc8 = 0; -u32 var80094fcc = 0; -u32 var80094fd0 = 0; -u32 var80094fd4 = 0; -u32 var80094fd8 = 0; -u32 var80094fdc = 0; -u32 var80094fe0 = 0; -u32 var80094fe4 = 0; -u32 var80094fe8 = 0; -u32 var80094fec = 0; -u32 var80094ff0 = 0; -u32 var80094ff4 = 0; -u32 var80094ff8 = 0; -u32 var80094ffc = 0; -u32 var80095000 = 0; -u32 var80095004 = 0; -u32 var80095008 = 0; -u32 var8009500c = 0; -u32 var80095010 = 0; -u32 var80095014 = 0; -u32 var80095018 = 0; -u32 var8009501c = 0; -u32 var80095020 = 0; -u32 var80095024 = 0; -u32 var80095028 = 0; -u32 var8009502c = 0; -u32 var80095030 = 0; -u32 var80095034 = 0; -u32 var80095038 = 0; -u32 var8009503c = 0; -u32 var80095040 = 0; -u32 var80095044 = 0; -u32 var80095048 = 0; -u32 var8009504c = 0; -u32 var80095050 = 0; -u32 var80095054 = 0; -u32 var80095058 = 0; -u32 var8009505c = 0; -u32 var80095060 = 0; -u32 var80095064 = 0; -u32 var80095068 = 0; -u32 var8009506c = 0; -u32 var80095070 = 0; -u32 var80095074 = 0; -u32 var80095078 = 0; -u32 var8009507c = 0; -u32 var80095080 = 0; -u32 var80095084 = 0; -u32 var80095088 = 0; -u32 var8009508c = 0; -u32 var80095090 = 0; -u32 var80095094 = 0; -u32 var80095098 = 0; -u32 var8009509c = 0; -u32 var800950a0 = 0; -u32 var800950a4 = 0; -u32 var800950a8 = 0; -u32 var800950ac = 0; -u32 var800950b0 = 0; -u32 var800950b4 = 0; -u32 var800950b8 = 0; -u32 var800950bc = 0; -u32 var800950c0 = 0; -u32 var800950c4 = 0; -u32 var800950c8 = 0; -u32 var800950cc = 0; -u32 var800950d0 = 0; -u32 var800950d4 = 0; -u32 var800950d8 = 0; -u32 var800950dc = 0; -u32 var800950e0 = 0; -u32 var800950e4 = 0; -u32 var800950e8 = 0; -u32 var800950ec = 0; -u32 var800950f0 = 0; -u32 var800950f4 = 0; -u32 var800950f8 = 0; -u32 var800950fc = 0; -u32 var80095100 = 0; -u32 var80095104 = 0; -u32 var80095108 = 0; -u32 var8009510c = 0; -u32 var80095110 = 0; -u32 var80095114 = 0; -u32 var80095118 = 0; -u32 var8009511c = 0; -u32 var80095120 = 0; -u32 var80095124 = 0; -u32 var80095128 = 0; -u32 var8009512c = 0; -u32 var80095130 = 0; -u32 var80095134 = 0; -u32 var80095138 = 0; -u32 var8009513c = 0; -u32 var80095140 = 0; -u32 var80095144 = 0; -u32 var80095148 = 0; -u32 var8009514c = 0; -u32 var80095150 = 0; -u32 var80095154 = 0; -u32 var80095158 = 0; -u32 var8009515c = 0; -u32 var80095160 = 0; -u32 var80095164 = 0; -u32 var80095168 = 0; -u32 var8009516c = 0; -u32 var80095170 = 0; -u32 var80095174 = 0; -u32 var80095178 = 0; -u32 var8009517c = 0; -u32 var80095180 = 0; -u32 var80095184 = 0; -u32 var80095188 = 0; -u32 var8009518c = 0; -u32 var80095190 = 0; -u32 var80095194 = 0; -u32 var80095198 = 0; -u32 var8009519c = 0; -u32 var800951a0 = 0; -u32 var800951a4 = 0; -u32 var800951a8 = 0; -u32 var800951ac = 0; -u32 var800951b0 = 0; -u32 var800951b4 = 0; -u32 var800951b8 = 0; -u32 var800951bc = 0; -u32 var800951c0 = 0; -u32 var800951c4 = 0; -u32 var800951c8 = 0; -u32 var800951cc = 0; -u32 var800951d0 = 0; -u32 var800951d4 = 0; -u32 var800951d8 = 0; -u32 var800951dc = 0; -u32 var800951e0 = 0; -u32 var800951e4 = 0; -u32 var800951e8 = 0; -u32 var800951ec = 0; +struct var80094ed8 var80094ed8[3] = {0}; u32 var800951f0 = 0; u32 var800951f4 = 0; u32 var800951f8 = 0; diff --git a/src/include/game/data/data_02a0e0.h b/src/include/game/data/data_02a0e0.h index 997eef232..f1569c754 100644 --- a/src/include/game/data/data_02a0e0.h +++ b/src/include/game/data/data_02a0e0.h @@ -12,6 +12,7 @@ extern u32 var800840d8; extern s32 var800840dc; extern u32 var800840e0; extern s32 var800840e8; +extern u16 var800840ec; extern u32 var800840f0; extern u32 var800840f4; extern u32 var800840fc; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 36031488e..fb87e9d44 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -437,7 +437,7 @@ extern u32 var80094ea0; extern u32 var80094ea4; extern u32 var80094ea8; extern u32 var80094eb0; -extern u32 var80094ed8; +extern struct var80094ed8 var80094ed8[3]; extern u32 var800951f0; extern u32 var80095200; extern u32 var80095208; diff --git a/src/include/lib/lib_0e9d0.h b/src/include/lib/lib_0e9d0.h index 091c6976c..491d2df9d 100644 --- a/src/include/lib/lib_0e9d0.h +++ b/src/include/lib/lib_0e9d0.h @@ -24,7 +24,7 @@ u32 func0000fba0(void); u32 func0000fbc4(void); u32 func0000fc48(void); u32 func0000fd74(void); -u32 func0000fd9c(void); +void func0000fd9c(struct var80094ed8 *arg0, u16 volume); void func0000fe18(void); void func0000fe20(void); void func0000fe50(void); diff --git a/src/include/types.h b/src/include/types.h index 48134319e..c42e6c1e6 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6257,4 +6257,73 @@ struct var800aaa38 { u32 unk0c; }; +struct var80094ed8 { + /*0x000*/ u32 unk000; + /*0x004*/ u32 unk004; + /*0x008*/ u32 unk008; + /*0x00c*/ u32 unk00c; + /*0x010*/ u32 unk010; + /*0x014*/ u32 unk014; + /*0x018*/ u32 unk018; + /*0x01c*/ u32 unk01c; + /*0x020*/ u32 unk020; + /*0x024*/ u32 unk024; + /*0x028*/ u32 unk028; + /*0x02c*/ u32 unk02c; + /*0x030*/ u32 unk030; + /*0x034*/ u32 unk034; + /*0x038*/ u32 unk038; + /*0x03c*/ u32 unk03c; + /*0x040*/ u32 unk040; + /*0x044*/ u32 unk044; + /*0x048*/ u32 unk048; + /*0x04c*/ u32 unk04c; + /*0x050*/ u32 unk050; + /*0x054*/ u32 unk054; + /*0x058*/ u32 unk058; + /*0x05c*/ u32 unk05c; + /*0x060*/ u32 unk060; + /*0x064*/ u32 unk064; + /*0x068*/ u32 unk068; + /*0x06c*/ u32 unk06c; + /*0x070*/ u32 unk070; + /*0x074*/ u32 unk074; + /*0x078*/ u32 unk078; + /*0x07c*/ u32 unk07c; + /*0x080*/ u32 unk080; + /*0x084*/ u32 unk084; + /*0x088*/ u32 unk088; + /*0x08c*/ u32 unk08c; + /*0x090*/ u32 unk090; + /*0x094*/ u32 unk094; + /*0x098*/ u32 unk098; + /*0x09c*/ u32 unk09c; + /*0x0a0*/ u32 unk0a0; + /*0x0a4*/ u32 unk0a4; + /*0x0a8*/ u32 unk0a8; + /*0x0ac*/ u32 unk0ac; + /*0x0b0*/ u32 unk0b0; + /*0x0b4*/ u32 unk0b4; + /*0x0b8*/ u32 unk0b8; + /*0x0bc*/ u32 unk0bc; + /*0x0c0*/ u32 unk0c0; + /*0x0c4*/ u32 unk0c4; + /*0x0c8*/ u32 unk0c8; + /*0x0cc*/ u32 unk0cc; + /*0x0d0*/ u32 unk0d0; + /*0x0d4*/ u32 unk0d4; + /*0x0d8*/ u32 unk0d8; + /*0x0dc*/ u32 unk0dc; + /*0x0e0*/ u32 unk0e0; + /*0x0e4*/ u32 unk0e4; + /*0x0e8*/ u32 unk0e8; + /*0x0ec*/ u32 unk0ec; + /*0x0f0*/ u32 unk0f0; + /*0x0f4*/ u32 unk0f4; + /*0x0f8*/ u32 unk0f8; + /*0x0fc*/ u32 unk0fc; + /*0x100*/ u32 unk100; + /*0x104*/ u32 unk104; +}; + #endif diff --git a/src/lib/lib_11420.c b/src/lib/lib_11420.c index ee81c6232..de6561baf 100644 --- a/src/lib/lib_11420.c +++ b/src/lib/lib_11420.c @@ -278,9 +278,9 @@ glabel func00011700 /* 11728: 00037940 */ sll $t7,$v1,0x5 /* 1172c: 01e37821 */ addu $t7,$t7,$v1 /* 11730: 000f78c0 */ sll $t7,$t7,0x3 -/* 11734: 3c048009 */ lui $a0,%hi(var80094fd0) +/* 11734: 3c048009 */ lui $a0,%hi(var80094ed8+0xf8) /* 11738: 008f2021 */ addu $a0,$a0,$t7 -/* 1173c: 8c844fd0 */ lw $a0,%lo(var80094fd0)($a0) +/* 1173c: 8c844fd0 */ lw $a0,%lo(var80094ed8+0xf8)($a0) /* 11740: 0c00e7dc */ jal func00039f70 /* 11744: afa2001c */ sw $v0,0x1c($sp) /* 11748: 8fa2001c */ lw $v0,0x1c($sp)