This commit is contained in:
Ethan Roseman 2020-12-12 08:26:16 +09:00
parent 1a1c06109a
commit dd40bdae0b
4 changed files with 69 additions and 61 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);