diff --git a/asm/non_matchings/unknown_0255E0/func_80031018.s b/asm/non_matchings/unknown_0255E0/func_80031018.s deleted file mode 100644 index 96404e99..00000000 --- a/asm/non_matchings/unknown_0255E0/func_80031018.s +++ /dev/null @@ -1,72 +0,0 @@ -glabel func_80031018 -/* 031C18 80031018 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 031C1C 8003101C 44800000 */ mtc1 $zero, $f0 -/* 031C20 80031020 3C01C780 */ li $at, 0xC7800000 # -65536.000000 -/* 031C24 80031024 44812000 */ mtc1 $at, $f4 -/* 031C28 80031028 3C028012 */ lui $v0, %hi(D_8011B0B0) # $v0, 0x8012 -/* 031C2C 8003102C 8C42B0B0 */ lw $v0, %lo(D_8011B0B0)($v0) -/* 031C30 80031030 AFBF0024 */ sw $ra, 0x24($sp) -/* 031C34 80031034 E7A00034 */ swc1 $f0, 0x34($sp) -/* 031C38 80031038 E7A00030 */ swc1 $f0, 0x30($sp) -/* 031C3C 8003103C E7A4002C */ swc1 $f4, 0x2c($sp) -/* 031C40 80031040 844E0004 */ lh $t6, 4($v0) -/* 031C44 80031044 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 031C48 80031048 A7AE003C */ sh $t6, 0x3c($sp) -/* 031C4C 8003104C 844F0002 */ lh $t7, 2($v0) -/* 031C50 80031050 44813000 */ mtc1 $at, $f6 -/* 031C54 80031054 A7AF003A */ sh $t7, 0x3a($sp) -/* 031C58 80031058 84580000 */ lh $t8, ($v0) -/* 031C5C 8003105C 27A40050 */ addiu $a0, $sp, 0x50 -/* 031C60 80031060 27A50038 */ addiu $a1, $sp, 0x38 -/* 031C64 80031064 E7A00044 */ swc1 $f0, 0x44($sp) -/* 031C68 80031068 E7A00048 */ swc1 $f0, 0x48($sp) -/* 031C6C 8003106C E7A0004C */ swc1 $f0, 0x4c($sp) -/* 031C70 80031070 E7A60040 */ swc1 $f6, 0x40($sp) -/* 031C74 80031074 0C01BF0C */ jal func_8006FC30 -/* 031C78 80031078 A7B80038 */ sh $t8, 0x38($sp) -/* 031C7C 8003107C 8FA50034 */ lw $a1, 0x34($sp) -/* 031C80 80031080 8FA60030 */ lw $a2, 0x30($sp) -/* 031C84 80031084 8FA7002C */ lw $a3, 0x2c($sp) -/* 031C88 80031088 27B90034 */ addiu $t9, $sp, 0x34 -/* 031C8C 8003108C 27A80030 */ addiu $t0, $sp, 0x30 -/* 031C90 80031090 27A9002C */ addiu $t1, $sp, 0x2c -/* 031C94 80031094 AFA90018 */ sw $t1, 0x18($sp) -/* 031C98 80031098 AFA80014 */ sw $t0, 0x14($sp) -/* 031C9C 8003109C AFB90010 */ sw $t9, 0x10($sp) -/* 031CA0 800310A0 0C01BD93 */ jal func_8006F64C -/* 031CA4 800310A4 27A40050 */ addiu $a0, $sp, 0x50 -/* 031CA8 800310A8 444AF800 */ cfc1 $t2, $31 -/* 031CAC 800310AC C7A80034 */ lwc1 $f8, 0x34($sp) -/* 031CB0 800310B0 35410003 */ ori $at, $t2, 3 -/* 031CB4 800310B4 38210002 */ xori $at, $at, 2 -/* 031CB8 800310B8 44C1F800 */ ctc1 $at, $31 -/* 031CBC 800310BC C7B00030 */ lwc1 $f16, 0x30($sp) -/* 031CC0 800310C0 460042A4 */ cvt.w.s $f10, $f8 -/* 031CC4 800310C4 C7A4002C */ lwc1 $f4, 0x2c($sp) -/* 031CC8 800310C8 44CAF800 */ ctc1 $t2, $31 -/* 031CCC 800310CC 3C028012 */ lui $v0, %hi(D_8011D468) # $v0, 0x8012 -/* 031CD0 800310D0 440B5000 */ mfc1 $t3, $f10 -/* 031CD4 800310D4 444CF800 */ cfc1 $t4, $31 -/* 031CD8 800310D8 8FBF0024 */ lw $ra, 0x24($sp) -/* 031CDC 800310DC 35810003 */ ori $at, $t4, 3 -/* 031CE0 800310E0 38210002 */ xori $at, $at, 2 -/* 031CE4 800310E4 44C1F800 */ ctc1 $at, $31 -/* 031CE8 800310E8 2442D468 */ addiu $v0, %lo(D_8011D468) # addiu $v0, $v0, -0x2b98 -/* 031CEC 800310EC 460084A4 */ cvt.w.s $f18, $f16 -/* 031CF0 800310F0 27BD0090 */ addiu $sp, $sp, 0x90 -/* 031CF4 800310F4 44CCF800 */ ctc1 $t4, $31 -/* 031CF8 800310F8 440D9000 */ mfc1 $t5, $f18 -/* 031CFC 800310FC AC4B0000 */ sw $t3, ($v0) -/* 031D00 80031100 444EF800 */ cfc1 $t6, $31 -/* 031D04 80031104 AC4D0004 */ sw $t5, 4($v0) -/* 031D08 80031108 35C10003 */ ori $at, $t6, 3 -/* 031D0C 8003110C 38210002 */ xori $at, $at, 2 -/* 031D10 80031110 44C1F800 */ ctc1 $at, $31 -/* 031D14 80031114 00000000 */ nop -/* 031D18 80031118 460021A4 */ cvt.w.s $f6, $f4 -/* 031D1C 8003111C 440F3000 */ mfc1 $t7, $f6 -/* 031D20 80031120 44CEF800 */ ctc1 $t6, $31 -/* 031D24 80031124 03E00008 */ jr $ra -/* 031D28 80031128 AC4F0008 */ sw $t7, 8($v0) - -/* 031D2C 8003112C 00000000 */ nop diff --git a/include/structs.h b/include/structs.h index 9a9dbeba..67564cba 100644 --- a/include/structs.h +++ b/include/structs.h @@ -173,9 +173,19 @@ typedef struct LevelHeader { /* 0xB0 */ u8 padB0[0x3]; /* 0xB3 */ u8 unkB3; - /* 0xB4 */ u8 padB4[0x6]; + /* 0xB3 */ u8 unkB4; + /* 0xB3 */ u8 unkB5; + /* 0xB3 */ u8 unkB6; + /* 0xB3 */ u8 unkB7; + /* 0xB4 */ u8 padB8[0x2]; /* 0xBA */ s16 unkBA; - /* 0xBE */ u8 padBE[0xA]; + /* 0xBE */ u8 unkBE; + /* 0xBE */ u8 unkBF; + /* 0xBE */ u8 unkC0; + /* 0xC1 */ u8 unkC1; + /* 0xC2 */ u8 unkC2; + /* 0xC3 */ u8 unkC3; + /* 0xC4 */ u8 padC4[0x4]; } LevelHeader; /* Size: 0x50 bytes */ diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index d039862b..4ed2f929 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -5,11 +5,6 @@ #include "macros.h" #include "structs.h" -typedef struct{ -u8 pad00[0x49]; -s8 unk49; -} unk800DC91C; - /* Size: 0x44 bytes */ typedef struct unk80120AC0 { s16 unk0; @@ -34,7 +29,7 @@ typedef struct unk80120AC0 { u8 pad3C[8]; } unk80120AC0; -extern unk800DC91C* D_800DC91C; +extern LevelHeader *D_800DC91C; extern s32 D_800DC924; extern s32 D_8011D37C; extern s32 D_8011D474; @@ -82,17 +77,19 @@ typedef struct{ unk800DC918_04_0C* unk0C; u8 pad0C[0x10]; s16 unk20; - u8 pad24[0x20]; + u8 pad22[0x09]; + s8 unk2B; + u8 pad2C[0x18]; } unk800DC918_04; typedef struct{ - s16 unk00; - s16 unk02; - s16 unk04; - s16 unk06; - s16 unk08; - s16 unk0A; -} unk800DC918_08; + s16 unk00; //sx + s16 unk02; //sy + s16 unk04; //sz + s16 unk06; //lx + s16 unk08; //ly + s16 unk0A; //lz +} unk800DC918_08; //bounding box typedef struct{ unk800DC918_00 *unk00; @@ -104,12 +101,129 @@ typedef struct{ extern unk800DC918* D_800DC918; +typedef struct{ + s16 unk00; + s16 unk02; + s16 unk04; +}unk8011B0B0; + +unk8011B0B0 *D_8011B0B0; + +typedef struct{ + s32 unk00; + s32 unk04; + s32 unk08; +}unk8011D468; + +unk8011D468 D_8011D468; +extern void func_8006F64C(void*, f32, f32, f32, f32*, f32*, f32*); + + + s32 func_800249E0(s32 arg0) { D_8011D37C = arg0; return 0; } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800249F0.s") +#else +extern u32 D_800DC874; +extern u32 D_800DC87C; +extern u32 D_8011B0C8; +extern u8 D_8011B0E1; +extern u8 D_8011B0E2; +extern u8 D_8011B0E3; +extern u32 D_8011B0F8; +extern u32 D_8011B100; +extern u32 D_8011B104; +extern u32 D_8011B108; +extern u32 D_8011B10C; +extern u32 D_8011B110; +extern u32 D_8011B114; +extern u32 D_8011D320[4]; +extern u32 D_8011D338[4]; +extern u32 D_8011D348; +extern u32 D_8011D350[4]; + +extern u32 D_8011D384; + + +void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6){ + s32 i; + s32 tmp_a2; + + D_800DC91C = func_8006BDB0(); + D_8011B0F8 = 0; + D_8011B100 = 0; + D_8011B104 = 0; + D_8011B108 = 0; + D_8011B10C = 0; + if(D_800DC91C->race_type == 6 || D_800DC91C->race_type == 7){ + D_8011B0F8 = 1; + } + func_8002C0C4(arg0); + + if(arg2 < 2){ + D_8011D384 = 0; + for(i = 0; i < D_800DC918->count; i++){ + if(D_800DC918->unk04[i].unk2B != 0){ + D_8011D384++; + D_800DC918->unk04[i].unk2B = 1; + } + } + } + if(is_in_two_player_adventure() && (D_800DC91C->race_type == 0 || D_800DC91C->race_type & 0x40)){ + tmp_a2 = 2; + }else{ + tmp_a2 = arg2; + tmp_a2++; + } + if(D_8011D384){ + func_800B82B4(D_800DC918, D_800DC91C, tmp_a2); + } + func_8006652C(arg2); + func_80027FC4(arg1); + D_8011B110 = 0; + D_8011B114 = 0x10000; + func_80011390(); + func_8000C8F8(arg6,0); + func_8000C8F8(arg5,1); + D_8011D37C = arg2; + func_8000CC7C(arg3, arg4, arg2); + func_8000B020(72, 64); + if(arg0 == 0 && arg4 == 0){ + func_800C01D8(&D_800DC87C); + } + else{ + func_800C01D8(&D_800DC874); + } + func_8006652C(D_8011D37C); + D_8011B0FC = 0; + i = 0; + do{ + D_8011D350[i] = func_80070C9C(3200, 0xFFFF00FF); + D_8011D320[i] = func_80070C9C(12800, 0xFFFF00FF); + D_8011D338[i] = func_80070C9C(20000, 0xFFFF00FF); + }while(&D_8011D338[++i] != &D_8011D348); + + D_8011B0C8 = 0; + func_8002D8DC(1,1,0); + func_8002D8DC(2,2,0); + D_8011B0C8 = 1; + func_8002D8DC(1,1,0); + func_8002D8DC(2,2,0); + D_8011B0C8 = 0; + if(D_800DC91C->unkB7){ + D_8011B0E1 = D_800DC91C->unkB4; + D_8011B0E2 = D_800DC91C->unkB5; + D_8011B0E3 = D_800DC91C->unkB6; + func_80025510(arg2 + 1); + } +} +#endif + + GLOBAL_ASM("asm/non_matchings/unknown_0255E0/D_80024D54.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80025510.s") @@ -157,7 +271,23 @@ void func_80028044(s32 arg0) { } GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028050.s") + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800289B8.s") +#else +void func_800289B8(void){ + u8 sp_2f = D_800DC91C->unkC1; + u8 sp_2e = D_800DC91C->unkC2; + u8 sp_2d = D_800DC91C->unkC3; + u8 sp_2c = D_800DC91C->unkBE; + u8 sp_2b = D_800DC91C->unkBF; + u8 sp_2a = D_800DC91C->unkC0; + u32 sp_24 = D_8011B0A8; + func_8007B3D0(&D_8011B0A0); + func_8007B4C8(&D_8011B0A0, 0, 8); + D_8011B0A0 += 8; +} +#endif void func_80028C10(void){ unk80120AC0 * v0_some_struct; @@ -191,7 +321,15 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028FAC.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029658.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029AF8.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029D14.s") + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029F18.s") +#else +func_80029F18(){ + +} +#endif + s32 func_8002A05C(s32 arg0, s32 arg1, s32* arg2){ s32 i; @@ -218,7 +356,7 @@ s32 func_8002A134(s32* arg0, unk800DC918_08 arg1){ unk800DC918_08 * a0; s32 cnt = 0; unk800DC918_08 bnd; - + //BAD variable assignments; bnd.unk00 = arg1.unk00 - 4; bnd.unk02 = arg1.unk02 - 4; @@ -309,4 +447,39 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030838.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_8003093C.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030A74.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030DE0.s") -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80031018.s") + + +void func_80031018(void){ + struct { + u8 pad00[0x40]; + } sp_50; //same as unk80535C4_3 + + struct { + s16 unk00; //sp_38 + s16 unk02; //sp_3A + s16 unk04; //sp_3C + u8 pad06[0x02]; + f32 unk08; //sp40; + f32 unk0C; //sp44; + f32 unk10; //sp48; + f32 unk14; //sp4C; + } sp_38; + + f32 sp_34 = 0.0f; + f32 sp_30 = 0.0f; + f32 sp_2C = -65536.0f; + + sp_38.unk04 = D_8011B0B0->unk04; + sp_38.unk02 = D_8011B0B0->unk02; + sp_38.unk00 = D_8011B0B0->unk00; + sp_38.unk0C = 0.0f; + sp_38.unk10 = 0.0f; + sp_38.unk14 = 0.0f; + sp_38.unk08 = 1.0f; + + func_8006FC30(&sp_50, &sp_38); + func_8006F64C(&sp_50, sp_34, sp_30, sp_2C, &sp_34, &sp_30, &sp_2C); + D_8011D468.unk00 = sp_34; + D_8011D468.unk04 = sp_30; + D_8011D468.unk08 = sp_2C; +} \ No newline at end of file diff --git a/undefined_syms.txt b/undefined_syms.txt index 11484ef8..02c3a2f0 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -131,6 +131,7 @@ D_800DC768 = 0x800DC768; D_800DC848 = 0x800DC848; D_800DC858 = 0x800DC858; D_800DC860 = 0x800DC860; +D_800DC874 = 0x800DC874; D_800DC87C = 0x800DC87C; D_800DC884 = 0x800DC884; D_800DC8AC = 0x800DC8AC;