From dd40bdae0b428428a2dd1b4e249fc856ae6840b4 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 12 Dec 2020 08:26:16 +0900 Subject: [PATCH] 1 more --- .../code_28910_len_5090/func_8004E3A4.s | 48 ------------------ src/audio.h | 31 ++++++++++-- src/code_26840_len_20d0.c | 2 +- src/code_28910_len_5090.c | 49 ++++++++++++++++--- 4 files changed, 69 insertions(+), 61 deletions(-) delete mode 100644 asm/nonmatchings/code_28910_len_5090/func_8004E3A4.s diff --git a/asm/nonmatchings/code_28910_len_5090/func_8004E3A4.s b/asm/nonmatchings/code_28910_len_5090/func_8004E3A4.s deleted file mode 100644 index 2f4f18eecf..0000000000 --- a/asm/nonmatchings/code_28910_len_5090/func_8004E3A4.s +++ /dev/null @@ -1,48 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8004E3A4 -/* 297A4 8004E3A4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 297A8 8004E3A8 AFB00010 */ sw $s0, 0x10($sp) -/* 297AC 8004E3AC 0080802D */ daddu $s0, $a0, $zero -/* 297B0 8004E3B0 AFBF0014 */ sw $ra, 0x14($sp) -/* 297B4 8004E3B4 96020036 */ lhu $v0, 0x36($s0) -/* 297B8 8004E3B8 2442FFFF */ addiu $v0, $v0, -1 -/* 297BC 8004E3BC A6020036 */ sh $v0, 0x36($s0) -/* 297C0 8004E3C0 00021400 */ sll $v0, $v0, 0x10 -/* 297C4 8004E3C4 10400006 */ beqz $v0, .L8004E3E0 -/* 297C8 8004E3C8 00000000 */ nop -/* 297CC 8004E3CC 8E02002C */ lw $v0, 0x2c($s0) -/* 297D0 8004E3D0 8E030030 */ lw $v1, 0x30($s0) -/* 297D4 8004E3D4 00431021 */ addu $v0, $v0, $v1 -/* 297D8 8004E3D8 0801390B */ j .L8004E42C -/* 297DC 8004E3DC AE02002C */ sw $v0, 0x2c($s0) -.L8004E3E0: -/* 297E0 8004E3E0 86020034 */ lh $v0, 0x34($s0) -/* 297E4 8004E3E4 8E030038 */ lw $v1, 0x38($s0) -/* 297E8 8004E3E8 00021400 */ sll $v0, $v0, 0x10 -/* 297EC 8004E3EC 10600003 */ beqz $v1, .L8004E3FC -/* 297F0 8004E3F0 AE02002C */ sw $v0, 0x2c($s0) -/* 297F4 8004E3F4 0060F809 */ jalr $v1 -/* 297F8 8004E3F8 00000000 */ nop -.L8004E3FC: -/* 297FC 8004E3FC 8E040020 */ lw $a0, 0x20($s0) -/* 29800 8004E400 10800005 */ beqz $a0, .L8004E418 -/* 29804 8004E404 00000000 */ nop -/* 29808 8004E408 0C013720 */ jal func_8004DC80 -/* 2980C 8004E40C 00000000 */ nop -/* 29810 8004E410 0801390B */ j .L8004E42C -/* 29814 8004E414 00000000 */ nop -.L8004E418: -/* 29818 8004E418 8E02002C */ lw $v0, 0x2c($s0) -/* 2981C 8004E41C 14400003 */ bnez $v0, .L8004E42C -/* 29820 8004E420 00000000 */ nop -/* 29824 8004E424 0C0136AA */ jal func_8004DAA8 -/* 29828 8004E428 0200202D */ daddu $a0, $s0, $zero -.L8004E42C: -/* 2982C 8004E42C 0C013911 */ jal func_8004E444 -/* 29830 8004E430 0200202D */ daddu $a0, $s0, $zero -/* 29834 8004E434 8FBF0014 */ lw $ra, 0x14($sp) -/* 29838 8004E438 8FB00010 */ lw $s0, 0x10($sp) -/* 2983C 8004E43C 03E00008 */ jr $ra -/* 29840 8004E440 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/src/audio.h b/src/audio.h index 4ebbe8c5a6..d82450c21b 100644 --- a/src/audio.h +++ b/src/audio.h @@ -9,18 +9,30 @@ struct UnkAl19E0; typedef void (*UnkFuncAl)(); typedef struct UnkAl1 { - /* 0x00 */ s16 unk_00; - /* 0x02 */ char unk_02[2]; + /* 0x00 */ u16 unk_00; + /* 0x02 */ char unk_02[0x2]; /* 0x04 */ s32 unk_04; /* 0x08 */ s16 unk_08; /* 0x0A */ s16 unk_0A; - /* 0x0C */ s32 unk_0C; + /* 0x0C */ UnkFuncAl unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s16 unk_18; /* 0x1A */ s16 unk_1A; } UnkAl1; // size unknown (currently 0x1C) +typedef struct UnkAl1Alt { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s16 unk_08; + /* 0x0A */ s16 unk_0A; + /* 0x0C */ UnkFuncAl unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s16 unk_18; + /* 0x1A */ s16 unk_1A; +} UnkAl1Alt; // size unknown (currently 0x1C) + typedef struct UnkAl2 { /* 0x00 */ s16 unk_00; /* 0x02 */ u8 unk_02; @@ -270,7 +282,7 @@ typedef struct UnkAlA9C { /* 0x01C */ s32 unk_1C; /* 0x020 */ s32 unk_20; /* 0x024 */ char unk_24[0x8]; - /* 0x02C */ UnkAl1 unk_2C; + /* 0x02C */ UnkAl1Alt unk_2C; /* 0x048 */ s32 unk_48; /* 0x04C */ char unk_4C[0xC]; /* 0x058 */ s16 unk_58; @@ -369,12 +381,21 @@ void func_8004B62C(UnkAl6CC*); void func_8004B698(UnkAl6CC*); void func_8004B6D8(UnkAl6CC*, s32, s16, s16, u8); void func_8004B748(UnkAl6CC*); -//s32 func_8004B9E4(UnkAl6CC*, u8); +s32 func_8004B9E4(UnkAl6CC*, s32); void func_8004BA54(UnkAl6CC*, s32); +s16 func_8004C444(UnkAl6CC*); + void func_8004D510(UnkAlA9C*); +UnkAlA9C* func_8004D794(s32); +s32 func_8004DA0C(UNK_TYPE arg0); void func_8004DAA8(UnkAlA9C*); +void func_8004DFD4(UnkAl19E0*); void func_8004E158(UnkAlA9C*, s32, s32, UnkAl19E0*); +void func_8004E3A4(UnkAlA9C*); +void func_8004E444(UnkAlA9C*); +s16 func_8004E4B8(UnkAlA9C*); s32 func_80050C30(u32); +void func_800511BC(UnkAl834*); void func_80052BF8(UnkAl48* arg0, s32* arg1); diff --git a/src/code_26840_len_20d0.c b/src/code_26840_len_20d0.c index aeb54c1d47..a2a99109a8 100644 --- a/src/code_26840_len_20d0.c +++ b/src/code_26840_len_20d0.c @@ -93,7 +93,7 @@ INCLUDE_ASM(s32, "code_26840_len_20d0", func_8004C358); INCLUDE_ASM(s32, "code_26840_len_20d0", func_8004C3D4); -INCLUDE_ASM(s32, "code_26840_len_20d0", func_8004C444); +INCLUDE_ASM(s16, "code_26840_len_20d0", func_8004C444, UnkAl6CC* arg0); INCLUDE_ASM(s32, "code_26840_len_20d0", func_8004C578); diff --git a/src/code_28910_len_5090.c b/src/code_28910_len_5090.c index 017f2c2aad..365bf8aedb 100644 --- a/src/code_28910_len_5090.c +++ b/src/code_28910_len_5090.c @@ -2,7 +2,23 @@ INCLUDE_ASM(void, "code_28910_len_5090", func_8004D510, UnkAlA9C* arg0); -INCLUDE_ASM(s32, "code_28910_len_5090", func_8004D794); +// Return values are being pushed into v0 in the wrong place +// May depend on data decomp +#ifdef NON_MATCHING +UnkAlA9C* func_8004D794(s32 arg0) { + UnkAl19E0* temp_v1 = D_8009A664->unk_00; + + if (arg0 == temp_v1->unk_5C[2]) { + return D_8009A664; + } + if (arg0 == temp_v1->unk_60[2]) { + return D_8009A5FC; + } + return NULL; +} +#else +INCLUDE_ASM(UnkAlA9C*, "code_28910_len_5090", func_8004D794, s32 arg0); +#endif INCLUDE_ASM(s32, "code_28910_len_5090", func_8004D7E0); @@ -13,7 +29,7 @@ s32 func_8004DA0C(UNK_TYPE arg0) { UnkAlA9C* unknown; do { - unknown = func_8004D794(); + unknown = func_8004D794(arg0); } while (0); do { @@ -54,7 +70,7 @@ INCLUDE_ASM(s32, "code_28910_len_5090", func_8004DCB8); INCLUDE_ASM(s32, "code_28910_len_5090", func_8004DE2C); -INCLUDE_ASM(s32, "code_28910_len_5090", func_8004DFD4); +INCLUDE_ASM(void, "code_28910_len_5090", func_8004DFD4, UnkAl19E0* arg0); INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E0F4); @@ -62,11 +78,30 @@ INCLUDE_ASM(void, "code_28910_len_5090", func_8004E158, UnkAlA9C* arg0, s32 arg1 INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E344); -INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E3A4); +void func_8004E3A4(UnkAlA9C *arg0) { + arg0->unk_2C.unk_0A--; -INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E444); + if (arg0->unk_2C.unk_0A != 0) { + arg0->unk_2C.unk_00 += arg0->unk_2C.unk_04; + } else { + arg0->unk_2C.unk_00 = arg0->unk_2C.unk_08 << 0x10; -INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E4B8); + if (arg0->unk_2C.unk_0C != NULL) { + arg0->unk_2C.unk_0C(); + } + + if (arg0->unk_20 != 0) { + func_8004DC80(arg0->unk_20); + } else if (arg0->unk_2C.unk_00 == 0) { + func_8004DAA8(arg0); + } + } + func_8004E444(arg0); +} + +INCLUDE_ASM(void, "code_28910_len_5090", func_8004E444, UnkAlA9C* arg0); + +INCLUDE_ASM(s16, "code_28910_len_5090", func_8004E4B8, UnkAlA9C* arg0); INCLUDE_ASM(s32, "code_28910_len_5090", func_8004E5D8); @@ -199,7 +234,7 @@ INCLUDE_ASM(s32, "code_28910_len_5090", func_80051050); INCLUDE_ASM(s32, "code_28910_len_5090", func_800510A4); -INCLUDE_ASM(s32, "code_28910_len_5090", func_800511BC); +INCLUDE_ASM(void, "code_28910_len_5090", func_800511BC, UnkAl834* arg0); INCLUDE_ASM(s32, "code_28910_len_5090", func_80051334);