From 904a0faba151f71cb6b401ed7d135cc7bf356e22 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Mon, 14 Dec 2020 18:57:21 +0900 Subject: [PATCH] 1 big boi --- .../code_26840_len_20d0/func_8004B440.s | 132 ------------------ src/audio.h | 46 +++++- src/code_26840_len_20d0.c | 82 ++++++++++- src/code_2e230_len_2190.c | 2 +- 4 files changed, 123 insertions(+), 139 deletions(-) delete mode 100644 asm/nonmatchings/code_26840_len_20d0/func_8004B440.s diff --git a/asm/nonmatchings/code_26840_len_20d0/func_8004B440.s b/asm/nonmatchings/code_26840_len_20d0/func_8004B440.s deleted file mode 100644 index ceda053103..0000000000 --- a/asm/nonmatchings/code_26840_len_20d0/func_8004B440.s +++ /dev/null @@ -1,132 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8004B440 -/* 26840 8004B440 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 26844 8004B444 AFB00010 */ sw $s0, 0x10($sp) -/* 26848 8004B448 0080802D */ daddu $s0, $a0, $zero -/* 2684C 8004B44C 3C030006 */ lui $v1, 6 -/* 26850 8004B450 3463A25E */ ori $v1, $v1, 0xa25e -/* 26854 8004B454 3C020004 */ lui $v0, 4 -/* 26858 8004B458 8FA40028 */ lw $a0, 0x28($sp) -/* 2685C 8004B45C 3442C4B4 */ ori $v0, $v0, 0xc4b4 -/* 26860 8004B460 AFBF0014 */ sw $ra, 0x14($sp) -/* 26864 8004B464 AE070000 */ sw $a3, ($s0) -/* 26868 8004B468 AE020034 */ sw $v0, 0x34($s0) -/* 2686C 8004B46C AE03003C */ sw $v1, 0x3c($s0) -/* 26870 8004B470 AE030038 */ sw $v1, 0x38($s0) -/* 26874 8004B474 A20500BC */ sb $a1, 0xbc($s0) -/* 26878 8004B478 308200FF */ andi $v0, $a0, 0xff -/* 2687C 8004B47C 2C420011 */ sltiu $v0, $v0, 0x11 -/* 26880 8004B480 14400004 */ bnez $v0, .L8004B494 -/* 26884 8004B484 A20600BE */ sb $a2, 0xbe($s0) -/* 26888 8004B488 24020010 */ addiu $v0, $zero, 0x10 -/* 2688C 8004B48C 08012D26 */ j .L8004B498 -/* 26890 8004B490 A20200BD */ sb $v0, 0xbd($s0) -.L8004B494: -/* 26894 8004B494 A20400BD */ sb $a0, 0xbd($s0) -.L8004B498: -/* 26898 8004B498 0000202D */ daddu $a0, $zero, $zero -/* 2689C 8004B49C 24060040 */ addiu $a2, $zero, 0x40 -/* 268A0 8004B4A0 240500B0 */ addiu $a1, $zero, 0xb0 -/* 268A4 8004B4A4 2403016C */ addiu $v1, $zero, 0x16c -/* 268A8 8004B4A8 34028000 */ ori $v0, $zero, 0x8000 -/* 268AC 8004B4AC AE02005C */ sw $v0, 0x5c($s0) -/* 268B0 8004B4B0 A60200B8 */ sh $v0, 0xb8($s0) -/* 268B4 8004B4B4 AE000030 */ sw $zero, 0x30($s0) -/* 268B8 8004B4B8 AE000060 */ sw $zero, 0x60($s0) -.L8004B4BC: -/* 268BC 8004B4BC 02031021 */ addu $v0, $s0, $v1 -/* 268C0 8004B4C0 24840001 */ addiu $a0, $a0, 1 -/* 268C4 8004B4C4 AC400000 */ sw $zero, ($v0) -/* 268C8 8004B4C8 A440005C */ sh $zero, 0x5c($v0) -/* 268CC 8004B4CC A440008E */ sh $zero, 0x8e($v0) -/* 268D0 8004B4D0 A4400090 */ sh $zero, 0x90($v0) -/* 268D4 8004B4D4 A4400092 */ sh $zero, 0x92($v0) -/* 268D8 8004B4D8 A0400094 */ sb $zero, 0x94($v0) -/* 268DC 8004B4DC A040009B */ sb $zero, 0x9b($v0) -/* 268E0 8004B4E0 A040009C */ sb $zero, 0x9c($v0) -/* 268E4 8004B4E4 A040009D */ sb $zero, 0x9d($v0) -/* 268E8 8004B4E8 A040009E */ sb $zero, 0x9e($v0) -/* 268EC 8004B4EC A040009F */ sb $zero, 0x9f($v0) -/* 268F0 8004B4F0 A0400099 */ sb $zero, 0x99($v0) -/* 268F4 8004B4F4 A0400078 */ sb $zero, 0x78($v0) -/* 268F8 8004B4F8 A0400079 */ sb $zero, 0x79($v0) -/* 268FC 8004B4FC A040007A */ sb $zero, 0x7a($v0) -/* 26900 8004B500 A046007B */ sb $a2, 0x7b($v0) -/* 26904 8004B504 A040007C */ sb $zero, 0x7c($v0) -/* 26908 8004B508 A045007D */ sb $a1, 0x7d($v0) -/* 2690C 8004B50C A040007E */ sb $zero, 0x7e($v0) -/* 26910 8004B510 A040007F */ sb $zero, 0x7f($v0) -/* 26914 8004B514 2C820008 */ sltiu $v0, $a0, 8 -/* 26918 8004B518 1440FFE8 */ bnez $v0, .L8004B4BC -/* 2691C 8004B51C 246300AC */ addiu $v1, $v1, 0xac -/* 26920 8004B520 0000202D */ daddu $a0, $zero, $zero -/* 26924 8004B524 0200182D */ daddu $v1, $s0, $zero -.L8004B528: -/* 26928 8004B528 AC600090 */ sw $zero, 0x90($v1) -/* 2692C 8004B52C 24840001 */ addiu $a0, $a0, 1 -/* 26930 8004B530 2C820004 */ sltiu $v0, $a0, 4 -/* 26934 8004B534 1440FFFC */ bnez $v0, .L8004B528 -/* 26938 8004B538 24630004 */ addiu $v1, $v1, 4 -/* 2693C 8004B53C 0000202D */ daddu $a0, $zero, $zero -/* 26940 8004B540 0200182D */ daddu $v1, $s0, $zero -.L8004B544: -/* 26944 8004B544 A46000A0 */ sh $zero, 0xa0($v1) -/* 26948 8004B548 24840001 */ addiu $a0, $a0, 1 -/* 2694C 8004B54C 2C820004 */ sltiu $v0, $a0, 4 -/* 26950 8004B550 1440FFFC */ bnez $v0, .L8004B544 -/* 26954 8004B554 24630006 */ addiu $v1, $v1, 6 -/* 26958 8004B558 0200202D */ daddu $a0, $s0, $zero -/* 2695C 8004B55C 0000282D */ daddu $a1, $zero, $zero -/* 26960 8004B560 0C012E95 */ jal func_8004BA54 -/* 26964 8004B564 AE000168 */ sw $zero, 0x168($s0) -/* 26968 8004B568 0C012DA6 */ jal func_8004B698 -/* 2696C 8004B56C 0200202D */ daddu $a0, $s0, $zero -/* 26970 8004B570 26040040 */ addiu $a0, $s0, 0x40 -/* 26974 8004B574 0000282D */ daddu $a1, $zero, $zero -/* 26978 8004B578 24067FFF */ addiu $a2, $zero, 0x7fff -/* 2697C 8004B57C 0C014E5D */ jal func_80053974 -/* 26980 8004B580 00C0382D */ daddu $a3, $a2, $zero -/* 26984 8004B584 920400BE */ lbu $a0, 0xbe($s0) -/* 26988 8004B588 96050040 */ lhu $a1, 0x40($s0) -/* 2698C 8004B58C 0C014EA6 */ jal func_80053A98 -/* 26990 8004B590 8E06005C */ lw $a2, 0x5c($s0) -/* 26994 8004B594 0200202D */ daddu $a0, $s0, $zero -/* 26998 8004B598 0000282D */ daddu $a1, $zero, $zero -/* 2699C 8004B59C 240200FF */ addiu $v0, $zero, 0xff -/* 269A0 8004B5A0 A082008C */ sb $v0, 0x8c($a0) -/* 269A4 8004B5A4 3C028008 */ lui $v0, %hi(D_80078290) -/* 269A8 8004B5A8 24428290 */ addiu $v0, $v0, %lo(D_80078290) -/* 269AC 8004B5AC AC820064 */ sw $v0, 0x64($a0) -/* 269B0 8004B5B0 3C028008 */ lui $v0, %hi(D_800782F8) -/* 269B4 8004B5B4 244282F8 */ addiu $v0, $v0, %lo(D_800782F8) -/* 269B8 8004B5B8 AC820068 */ sw $v0, 0x68($a0) -/* 269BC 8004B5BC 3C028008 */ lui $v0, %hi(D_80078320) -/* 269C0 8004B5C0 24428320 */ addiu $v0, $v0, %lo(D_80078320) -/* 269C4 8004B5C4 AC82006C */ sw $v0, 0x6c($a0) -/* 269C8 8004B5C8 3C028008 */ lui $v0, %hi(D_80078348) -/* 269CC 8004B5CC 24428348 */ addiu $v0, $v0, %lo(D_80078348) -/* 269D0 8004B5D0 AC820070 */ sw $v0, 0x70($a0) -/* 269D4 8004B5D4 AC820074 */ sw $v0, 0x74($a0) -/* 269D8 8004B5D8 AC820078 */ sw $v0, 0x78($a0) -/* 269DC 8004B5DC AC82007C */ sw $v0, 0x7c($a0) -/* 269E0 8004B5E0 AC820080 */ sw $v0, 0x80($a0) -/* 269E4 8004B5E4 24020010 */ addiu $v0, $zero, 0x10 -/* 269E8 8004B5E8 A0820084 */ sb $v0, 0x84($a0) -/* 269EC 8004B5EC 24020020 */ addiu $v0, $zero, 0x20 -/* 269F0 8004B5F0 A0820085 */ sb $v0, 0x85($a0) -/* 269F4 8004B5F4 A0820086 */ sb $v0, 0x86($a0) -/* 269F8 8004B5F8 A0820087 */ sb $v0, 0x87($a0) -/* 269FC 8004B5FC A0820088 */ sb $v0, 0x88($a0) -/* 26A00 8004B600 24020030 */ addiu $v0, $zero, 0x30 -/* 26A04 8004B604 A0820089 */ sb $v0, 0x89($a0) -/* 26A08 8004B608 24020040 */ addiu $v0, $zero, 0x40 -/* 26A0C 8004B60C A082008A */ sb $v0, 0x8a($a0) -/* 26A10 8004B610 24020050 */ addiu $v0, $zero, 0x50 -/* 26A14 8004B614 0C012E79 */ jal func_8004B9E4 -/* 26A18 8004B618 A082008B */ sb $v0, 0x8b($a0) -/* 26A1C 8004B61C 8FBF0014 */ lw $ra, 0x14($sp) -/* 26A20 8004B620 8FB00010 */ lw $s0, 0x10($sp) -/* 26A24 8004B624 03E00008 */ jr $ra -/* 26A28 8004B628 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/src/audio.h b/src/audio.h index 4f03f7d1f2..8a4e19c0ae 100644 --- a/src/audio.h +++ b/src/audio.h @@ -83,7 +83,36 @@ typedef struct UnkAlA { /* 0x4 */ s16 unk_04; /* 0x6 */ s16 unk_06; /* 0x8 */ s8 unk_08; -} UnkAlA; // size = 0xA; +} UnkAlA; // size = 0xA + +typedef struct UnkAlAC { + /* 0x00 */ s32 unk_00; + /* 0x04 */ char unk_04[0x58]; + /* 0x5C */ u16 unk_5C; + /* 0x5E */ char unk_5E[0x1A]; + /* 0x78 */ u8 unk_78; + /* 0x79 */ u8 unk_79; + /* 0x7A */ u8 unk_7A; + /* 0x7B */ u8 unk_7B; + /* 0x7C */ u8 unk_7C; + /* 0x7D */ u8 unk_7D; + /* 0x7E */ u8 unk_7E; + /* 0x7F */ u8 unk_7F; + /* 0x80 */ char unk_80[0xE]; + /* 0x8E */ u16 unk_8E; + /* 0x90 */ u16 unk_90; + /* 0x92 */ u16 unk_92; + /* 0x94 */ u8 unk_94; + /* 0x95 */ char unk_05[0x4]; + /* 0x99 */ u8 unk_99; + /* 0x9A */ char unk_9A[0x1]; + /* 0x9B */ u8 unk_9B; + /* 0x9C */ u8 unk_9C; + /* 0x9D */ u8 unk_9D; + /* 0x9E */ u8 unk_9E; + /* 0x9F */ u8 unk_9F; + /* 0xA0 */ char unk_A0[0xC]; +} UnkAlAC; // size = 0xAC typedef struct UnkAl6CC { /* 0x000 */ struct UnkAl19E0* unk_00; @@ -99,7 +128,10 @@ typedef struct UnkAl6CC { /* 0x084 */ s8 unk_84[8]; /* 0x08C */ u8 unk_8C; /* 0x08D */ s8 unk_8D; - /* 0x08E */ char unk_8E[0x2C]; + /* 0x08E */ char unk_8E[0x2]; + /* 0x090 */ s32 unk_90[4]; + /* 0x0A0 */ Vec3s unk_A0[4]; + /* 0x0B8 */ u16 unk_B8; /* 0x0BA */ s16 unk_BA; /* 0x0BC */ u8 unk_BC; /* 0x0BD */ u8 unk_BD; @@ -114,7 +146,7 @@ typedef struct UnkAl6CC { /* 0x165 */ s8 unk_165; /* 0x166 */ char unk_166[0x2]; /* 0x168 */ s32 unk_168; - /* 0x16C */ char unk_16C[0x560]; + /* 0x16C */ UnkAlAC unk_16C[8]; } UnkAl6CC; typedef struct UnkAl12 { @@ -352,6 +384,10 @@ extern UnkAl0* D_80078E54; extern s8* D_80078181; extern s32* D_80078190; extern s32* D_800781D0; +extern s32* D_80078290; +extern s32* D_800782F8; +extern s32* D_80078348; +extern s32* D_80078320; extern s32* D_80078544; extern s32 D_80078DB0; extern u16 D_80078DB6; @@ -378,7 +414,7 @@ extern s32 D_800A3FF0; void al_LoadBKHeaders(UnkAl19E0* arg0, ALHeap* arg1); -void func_8004B440(UnkAl6CC*, u8, u8, UnkAl19E0*, s32); +void func_8004B440(UnkAl6CC*, u8, u8, UnkAl19E0*, u8); void func_8004B62C(UnkAl6CC*); void func_8004B698(UnkAl6CC*); void func_8004B6D8(UnkAl6CC*, s32, s16, s16, u8); @@ -408,7 +444,7 @@ void func_800532F4(UnkAl30*); void func_80053370(UnkAl12*); void func_800533A8(UnkAl2*); void func_80053654(UnkAl19E0*); -void func_80053974(s32*, s32, s32, s16); +void func_80053974(UnkAl1*, s32, s32, s16); void func_80053A18(UnkAl1*); void func_80053A28(UnkAl1*); void func_80053A98(u8, u16, s32); diff --git a/src/code_26840_len_20d0.c b/src/code_26840_len_20d0.c index 91f048f574..e1607a0cf7 100644 --- a/src/code_26840_len_20d0.c +++ b/src/code_26840_len_20d0.c @@ -1,7 +1,87 @@ #include "common.h" #include "audio.h" -INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B440, UnkAl6CC* arg0, u8 arg1, u8 arg2, UnkAl19E0* arg3, s32 arg4); +void func_8004B440(UnkAl6CC *arg0, u8 arg1, u8 arg2, UnkAl19E0 *arg3, u8 arg4) { + u32 i; + s32 c = 0x6A25E; + + arg0->unk_00 = arg3; + arg0->unk_34 = 0x4C4B4; + arg0->unk_38 = arg0->unk_3C = c; + arg0->unk_BC = arg1; + arg0->unk_BE = arg2; + + if (arg4 > 0x10) { + arg0->unk_BD = 0x10; + } else { + arg0->unk_BD = arg4; + } + + arg0->unk_5C = 0x8000; + arg0->unk_B8 = 0x8000; + arg0->unk_30 = 0; + arg0->unk_60 = 0; + + for (i = 0; i < ARRAY_COUNT(arg0->unk_16C); i++) { + UnkAlAC* sub = &arg0->unk_16C[i]; + + sub->unk_00 = 0; + sub->unk_5C = 0; + sub->unk_8E = 0; + sub->unk_90 = 0; + sub->unk_92 = 0; + sub->unk_94 = 0; + sub->unk_9B = 0; + sub->unk_9C = 0; + sub->unk_9D = 0; + sub->unk_9E = 0; + sub->unk_9F = 0; + sub->unk_99 = 0; + sub->unk_78 = 0; + sub->unk_79 = 0; + sub->unk_7A = 0; + sub->unk_7B = 0x40; + sub->unk_7C = 0; + sub->unk_7D = 0xB0; + sub->unk_7E = 0; + sub->unk_7F = 0; + } + + for (i = 0; i < 4; i++) { + arg0->unk_90[i] = 0; + } + + for (i = 0; i < 4; i++) { + arg0->unk_A0[i].x = 0; + } + + arg0->unk_168 = 0; + func_8004BA54(arg0, 0); + func_8004B698(arg0); + func_80053974(&arg0->unk_40, 0, 0x7FFF, 0x7FFF); + func_80053A98(arg0->unk_BE, arg0->unk_40.unk_00.u16, arg0->unk_5C); + arg0->unk_8C = 0xFF; + + arg0->unk_64[0] = &D_80078290; + arg0->unk_64[1] = &D_800782F8; + arg0->unk_64[2] = &D_80078320; + arg0->unk_64[3] = &D_80078348; + arg0->unk_64[4] = &D_80078348; + arg0->unk_64[5] = &D_80078348; + arg0->unk_64[6] = &D_80078348; + arg0->unk_64[7] = &D_80078348; + + arg0->unk_84[0] = 0x10; + arg0->unk_84[1] = 0x20; + arg0->unk_84[2] = 0x20; + arg0->unk_84[3] = 0x20; + arg0->unk_84[4] = 0x20; + arg0->unk_84[5] = 0x30; + arg0->unk_84[6] = 0x40; + arg0->unk_84[7] = 0x50; + + func_8004B9E4(arg0, 0); +} INCLUDE_ASM(void, "code_26840_len_20d0", func_8004B62C, UnkAl6CC* arg0); diff --git a/src/code_2e230_len_2190.c b/src/code_2e230_len_2190.c index f5737bfd9f..1b6f8e7b1d 100644 --- a/src/code_2e230_len_2190.c +++ b/src/code_2e230_len_2190.c @@ -366,7 +366,7 @@ void func_800538C4(UnkAl48* arg0, s32 arg1) { // type may be wrong but it seems INCLUDE_ASM(s32, "code_2e230_len_2190", func_800538F8); -INCLUDE_ASM(void, "code_2e230_len_2190", func_80053974, s32* arg0, s32 arg1, s32 arg2, s16 arg3); +INCLUDE_ASM(void, "code_2e230_len_2190", func_80053974, UnkAl1* arg0, s32 arg1, s32 arg2, s16 arg3); void func_80053A18(UnkAl1* arg0) { arg0->unk_0A = 0;