From 48f4988816be3fa211320b6b558283be6a924ab3 Mon Sep 17 00:00:00 2001 From: Kelebek1 Date: Thu, 17 Oct 2024 20:37:07 +0100 Subject: [PATCH] fragment20 --- include/global.h | 2 +- linker_scripts/us/symbol_addrs.txt | 2 + linker_scripts/us/undefined_syms.ld | 3 + src/11BA0.c | 14 +- src/11BA0.h | 10 +- src/12D80.c | 78 +- src/12D80.h | 64 +- src/fragments/12/fragment12.c | 2 +- src/fragments/13/fragment13.c | 2 +- src/fragments/14/fragment14_144300.c | 2 +- src/fragments/15/fragment15.h | 6 +- src/fragments/15/fragment15_14CA70.c | 6 +- src/fragments/16/fragment16.h | 2 +- src/fragments/16/fragment16_158A00.c | 4 +- src/fragments/18/fragment18.c | 84 +- src/fragments/20/fragment20.c | 1897 +++++++++++++++++++++++++- src/fragments/20/fragment20.h | 66 + src/fragments/3/fragment3.h | 36 +- src/fragments/3/fragment3_1189B0.c | 100 +- src/fragments/3/fragment3_1193E0.c | 2 +- src/fragments/3/fragment3_11BF90.c | 6 +- src/geo_layout.c | 6 +- src/geo_layout.h | 2 +- tools/animation_script.py | 113 +- tools/data2c.py | 13 +- yamls/us/rom.yaml | 6 +- 26 files changed, 2232 insertions(+), 296 deletions(-) create mode 100644 src/fragments/20/fragment20.h diff --git a/include/global.h b/include/global.h index bf9f647b..43bc4b45 100644 --- a/include/global.h +++ b/include/global.h @@ -425,7 +425,7 @@ typedef struct unk_D_86002F34_018 { /* 0x03 */ u8 unk_03; /* 0x04 */ s16 unk_04; /* 0x06 */ s16 unk_06; - /* 0x08 */ s32* unk_08; + /* 0x08 */ u8* unk_08; } unk_D_86002F34_018; // size = 0xC typedef struct unk_D_86002F34_01C { diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 9bb7dfa9..a5dc9bd2 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -357,3 +357,5 @@ D_86C0E480 = 0x86C0E480; // size:0x1854 D_86C0FCD8 = 0x86C0FCD8; // size:0x1854 D_86C11530 = 0x86C11530; // size:0xAD0 D_879060BC = 0x879060BC; // size:0x2 +D_86E04D60 = 0x86E04D60; // size:0xAD0 +D_86E05830 = 0x86E05830; // size:0x3610 diff --git a/linker_scripts/us/undefined_syms.ld b/linker_scripts/us/undefined_syms.ld index 4e9feca7..89e16240 100644 --- a/linker_scripts/us/undefined_syms.ld +++ b/linker_scripts/us/undefined_syms.ld @@ -21,3 +21,6 @@ D_03043520 = 0x03043520; D_03043C40 = 0x03043C40; D_030426E0 = 0x030426E0; D_03042E00 = 0x03042E00; +D_0303ED80 = 0x0303ED80; +D_0303F580 = 0x0303F580; +D_0303F180 = 0x0303F180; diff --git a/src/11BA0.c b/src/11BA0.c index 41ac13d3..340abd25 100644 --- a/src/11BA0.c +++ b/src/11BA0.c @@ -3,7 +3,7 @@ #include "F420.h" #include "util.h" -void func_80010FA0(struct GraphNode* arg0, u8 arg1) { +void func_80010FA0(GraphNode* arg0, u8 arg1) { if (arg0 != NULL) { arg0->unk_00 = arg1; arg0->unk_01 = 0x11; @@ -17,7 +17,7 @@ void func_80010FA0(struct GraphNode* arg0, u8 arg1) { } } -void func_80010FDC(struct GraphNode* arg0, func_D_86002F34_000_010 arg1, unk_D_86002F34_000_014* arg2) { +void func_80010FDC(GraphNode* arg0, func_D_86002F34_000_010 arg1, unk_D_86002F34_000_014* arg2) { if (arg1 != NULL) { arg1 = Util_ConvertAddrToVirtAddr(arg1); } @@ -31,7 +31,7 @@ void func_80010FDC(struct GraphNode* arg0, func_D_86002F34_000_010 arg1, unk_D_8 } } -struct GraphNode* func_8001103C(MainPoolState* arg0, struct GraphNode* arg1) { +GraphNode* func_8001103C(MainPoolState* arg0, GraphNode* arg1) { if (arg0 != NULL) { arg1 = func_80002DCC(arg0, sizeof(struct GraphNode), 4); } @@ -43,7 +43,7 @@ struct GraphNode* func_8001103C(MainPoolState* arg0, struct GraphNode* arg1) { return arg1; } -unk_D_86002F34_alt2* func_80011088(MainPoolState* arg0, unk_D_86002F34_alt2* arg1, struct GraphNode* arg2) { +unk_D_86002F34_alt2* func_80011088(MainPoolState* arg0, unk_D_86002F34_alt2* arg1, GraphNode* arg2) { if (arg0 != NULL) { arg1 = func_80002DCC(arg0, sizeof(unk_D_86002F34_alt2), 4); } @@ -529,9 +529,9 @@ void func_80011FC8(unk_D_86002F34_00C* arg0, s16 arg1, s16 arg2, u8 arg3, u8 arg #pragma GLOBAL_ASM("asm/us/nonmatchings/11BA0/func_80012044.s") -void func_80012094(struct GraphNode* arg0, struct GraphNode* arg1) { - struct GraphNode* temp_v0; - struct GraphNode* temp_v1; +void func_80012094(GraphNode* arg0, GraphNode* arg1) { + GraphNode* temp_v0; + GraphNode* temp_v1; if ((arg0 != NULL) && (arg1 != NULL)) { temp_v0 = arg0->unk_0C; diff --git a/src/11BA0.h b/src/11BA0.h index adc8bda7..f94118c4 100644 --- a/src/11BA0.h +++ b/src/11BA0.h @@ -20,10 +20,10 @@ typedef struct unk_D_8690A610 { /* 0x18 */ unk_D_8690A610_018 unk_18; } unk_D_8690A610; // size = 0x20 -void func_80010FA0(struct GraphNode* arg0, u8 arg1); -void func_80010FDC(struct GraphNode* arg0, func_D_86002F34_000_010 arg1, unk_D_86002F34_000_014* arg2); -struct GraphNode* func_8001103C(MainPoolState* arg0, struct GraphNode* arg1); -unk_D_86002F34_alt2* func_80011088(MainPoolState* arg0, unk_D_86002F34_alt2* arg1, struct GraphNode* arg2); +void func_80010FA0(GraphNode* arg0, u8 arg1); +void func_80010FDC(GraphNode* arg0, func_D_86002F34_000_010 arg1, unk_D_86002F34_000_014* arg2); +GraphNode* func_8001103C(MainPoolState* arg0, GraphNode* arg1); +unk_D_86002F34_alt2* func_80011088(MainPoolState* arg0, unk_D_86002F34_alt2* arg1, GraphNode* arg2); unk_D_86002F34_00C* func_800110E0(MemoryBlock* arg0, unk_D_86002F34_00C* arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5); unk_D_86002F34_alt13* func_800111A4(MemoryBlock* arg0, unk_D_86002F34_alt13* arg1, s16 arg2); unk_D_86002F34_alt1* func_800111FC(MemoryBlock* arg0, unk_D_86002F34_alt1* arg1, s16 arg2); @@ -58,5 +58,5 @@ void func_80011DAC(unk_D_86002F34_00C* arg0, s16 arg1, s16 arg2, s16 arg3, s16 a void func_80011E68(unk_D_86002F34_00C* arg0, f32 arg1, f32 arg2, f32 arg3); void func_80011EB4(unk_D_86002F34_00C* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, s32 arg7); void func_80011FC8(unk_D_86002F34_00C* arg0, s16 arg1, s16 arg2, u8 arg3, u8 arg4, u8 arg5); -void func_80012094(struct GraphNode* arg0, struct GraphNode* arg1); +void func_80012094(GraphNode* arg0, GraphNode* arg1); #endif // _11BA0_H_ diff --git a/src/12D80.c b/src/12D80.c index 5f9e7fb5..10f400e5 100644 --- a/src/12D80.c +++ b/src/12D80.c @@ -11,7 +11,7 @@ #include "src/memmap.h" #include "src/util.h" -typedef void (*func_D_8006F0A4)(struct GraphNode* arg0); +typedef void (*func_D_8006F0A4)(GraphNode* arg0); typedef struct unk_D_800AA8C8 { /* 0x0000 */ MtxF unk_0000[64]; @@ -380,9 +380,9 @@ void func_800131B4(unk_D_86002F34_00C_0CC* arg0, unk_D_86002F34_00C_040* arg1) { } } -void func_80013330(struct GraphNode* arg0) { - struct GraphNode* temp_s2 = arg0->unk_0C; - struct GraphNode* var_s0 = temp_s2; +void func_80013330(GraphNode* arg0) { + GraphNode* temp_s2 = arg0->unk_0C; + GraphNode* var_s0 = temp_s2; if (temp_s2 != NULL) { do { @@ -398,9 +398,9 @@ void func_80013330(struct GraphNode* arg0) { } } -void func_800133D8(struct GraphNode* arg0) { +void func_800133D8(GraphNode* arg0) { UNUSED s32 pad; - struct GraphNode* temp_a1 = ((unk_D_86002F34*)arg0)->unk_18; + GraphNode* temp_a1 = ((unk_D_86002F34*)arg0)->unk_18; if ((temp_a1 != NULL) && (temp_a1->unk_01 & 1)) { D_800AA6C0 = 0; @@ -413,7 +413,7 @@ void func_800133D8(struct GraphNode* arg0) { func_80013330(arg0); } -void func_80013464(struct GraphNode* arg0) { +void func_80013464(GraphNode* arg0) { UNUSED MtxF pad_mtx; unk_D_86002F34_00C* arg = (unk_D_86002F34_00C*)arg0; unk_D_86002F34_00C_040* temp_s2 = &arg->unk_40; @@ -454,13 +454,13 @@ void func_80013464(struct GraphNode* arg0) { D_8006F088 = NULL; } -void func_80013764(struct GraphNode* arg0) { +void func_80013764(GraphNode* arg0) { D_8006F08C = arg0; func_80013330(arg0); D_8006F08C = NULL; } -void func_8001378C(struct GraphNode* arg0) { +void func_8001378C(GraphNode* arg0) { unk_D_86002F34_alt1* arg = (unk_D_86002F34_alt1*)arg0; if (arg->unk_00.unk_0C != NULL) { @@ -494,7 +494,7 @@ void func_8001378C(struct GraphNode* arg0) { arg->unk_1A = D_8006F084; } -void func_800138F0(struct GraphNode* arg0) { +void func_800138F0(GraphNode* arg0) { unk_D_86002F34_00C* arg = (unk_D_86002F34_00C*)arg0; if ((D_8006F094 == NULL) && (arg->unk_00.unk_0C != NULL)) { @@ -506,7 +506,7 @@ void func_800138F0(struct GraphNode* arg0) { } } -void func_8001395C(struct GraphNode* arg0) { +void func_8001395C(GraphNode* arg0) { if ((D_8006F094 == NULL) && (arg0->unk_0C != NULL)) { gSPPerspNormalize(gDisplayListHead++, 0xFFFF); gSPMatrix(gDisplayListHead++, (u32)D_8006F088->unk_40.mtx & 0x1FFFFFFF, @@ -516,7 +516,7 @@ void func_8001395C(struct GraphNode* arg0) { } } -void func_800139E8(struct GraphNode* arg0) { +void func_800139E8(GraphNode* arg0) { if ((D_8006F094 == NULL) && (arg0->unk_0C != NULL)) { gSPLookAt(gDisplayListHead++, (u32)&D_8006F088->unk_60.lookat->l & 0x1FFFFFFF); @@ -531,7 +531,7 @@ void func_800139E8(struct GraphNode* arg0) { } } -void func_80013AF8(struct GraphNode* arg0) { +void func_80013AF8(GraphNode* arg0) { unk_D_86002F34_alt2* arg = (unk_D_86002F34_alt2*)arg0; unk_D_86002F34_00C_018* ptr = &D_8006F088->unk_18; @@ -541,7 +541,7 @@ void func_80013AF8(struct GraphNode* arg0) { gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); } -void func_80013B8C(UNUSED struct GraphNode* arg0) { +void func_80013B8C(UNUSED GraphNode* arg0) { unk_D_86002F34_00C_018* ptr = &D_8006F088->unk_18; func_800067E4(&gDisplayListHead, ptr->x, ptr->y, ptr->width, ptr->height); @@ -550,10 +550,10 @@ void func_80013B8C(UNUSED struct GraphNode* arg0) { gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); } -void func_80013C14(UNUSED struct GraphNode* arg0) { +void func_80013C14(UNUSED GraphNode* arg0) { } -void func_80013C1C(struct GraphNode* arg0) { +void func_80013C1C(GraphNode* arg0) { unk_D_86002F34_alt3* arg = (unk_D_86002F34_alt3*)arg0; D_8006F090->unk_1D = 1; @@ -565,7 +565,7 @@ void func_80013C1C(struct GraphNode* arg0) { } #ifdef NON_MATCHING -void func_80013D34(struct GraphNode* arg0) { +void func_80013D34(GraphNode* arg0) { unk_D_86002F34_alt4* arg = (unk_D_86002F34_alt4*)arg0; Lights7* lights; unk_D_86002F34_alt1* new_var; @@ -611,10 +611,10 @@ void func_80013D34(struct GraphNode* arg0) { #pragma GLOBAL_ASM("asm/us/nonmatchings/12D80/func_80013D34.s") #endif -void func_80013F7C(UNUSED struct GraphNode* arg0) { +void func_80013F7C(UNUSED GraphNode* arg0) { } -void func_80013F84(struct GraphNode* arg0) { +void func_80013F84(GraphNode* arg0) { unk_D_86002F34_alt4* arg = (unk_D_86002F34_alt4*)arg0; s32 i; Lights7* lights; @@ -640,7 +640,7 @@ void func_80013F84(struct GraphNode* arg0) { gSPLight(gDisplayListHead++, D_8006F090->lights, i + 1); } -void func_80014124(struct GraphNode* arg0) { +void func_80014124(GraphNode* arg0) { unk_D_86002F34_alt11* arg = (unk_D_86002F34_alt11*)arg0; MtxF* temp_v0 = &D_800AA8C8.unk_0000[D_800AA8C8.unk_10A0]; Vec3f sp2C; @@ -665,7 +665,7 @@ void func_80014124(struct GraphNode* arg0) { D_8006F0A0 = NULL; } -void func_80014214(struct GraphNode* arg0) { +void func_80014214(GraphNode* arg0) { unk_D_86002F34_alt3* arg = (unk_D_86002F34_alt3*)arg0; MtxF* mtx2 = &D_8006F088->unk_60.mtxf; f32 a = D_800AA8C8.unk_0000[D_800AA8C8.unk_10A0].mf[3][0]; @@ -678,10 +678,10 @@ void func_80014214(struct GraphNode* arg0) { } } -void func_800142BC(struct GraphNode* arg0) { +void func_800142BC(GraphNode* arg0) { unk_D_86002F34_alt3* arg = (unk_D_86002F34_alt3*)arg0; s32 i; - struct GraphNode* var_a1 = arg->unk_00.unk_0C; + GraphNode* var_a1 = arg->unk_00.unk_0C; if (var_a1 != NULL) { for (i = 0; i < arg->unk_1A; i++) { @@ -694,7 +694,7 @@ void func_800142BC(struct GraphNode* arg0) { } } -void func_80014334(struct GraphNode* arg0) { +void func_80014334(GraphNode* arg0) { MtxF sp20; unk_D_86002F34_alt5* arg = (unk_D_86002F34_alt5*)arg0; @@ -705,7 +705,7 @@ void func_80014334(struct GraphNode* arg0) { D_800AA8C8.unk_10A0--; } -void func_80014384(struct GraphNode* arg0) { +void func_80014384(GraphNode* arg0) { unk_D_86002F34_alt5* arg = (unk_D_86002F34_alt5*)arg0; func_80012344(&arg->unk_18); @@ -714,7 +714,7 @@ void func_80014384(struct GraphNode* arg0) { D_800AA8C8.unk_10A0--; } -void func_800143C0(struct GraphNode* arg0) { +void func_800143C0(GraphNode* arg0) { Vec3s sp90; Vec3f sp84; Vec3f sp78; @@ -766,7 +766,7 @@ void func_800143C0(struct GraphNode* arg0) { } } -void func_80014624(struct GraphNode* arg0) { +void func_80014624(GraphNode* arg0) { unk_D_86002F34_alt7* arg = (unk_D_86002F34_alt7*)arg0; if (arg->unk_18 != NULL) { @@ -777,7 +777,7 @@ void func_80014624(struct GraphNode* arg0) { func_80013330(arg0); } -void func_80014690(struct GraphNode* arg0) { +void func_80014690(GraphNode* arg0) { MtxF sp38; Color_RGBA8_u32 sp34; unk_D_86002F58_004_000* arg = (unk_D_86002F58_004_000*)arg0; @@ -829,7 +829,7 @@ void func_80014690(struct GraphNode* arg0) { } } -void func_800148D8(struct GraphNode* arg0) { +void func_800148D8(GraphNode* arg0) { unk_D_86002F34_alt8* arg = (unk_D_86002F34_alt8*)arg0; func_800122B4(&arg->unk_1C); @@ -845,7 +845,7 @@ void func_800148D8(struct GraphNode* arg0) { D_800AA8C8.unk_10A0--; } -void func_80014980(struct GraphNode* arg0) { +void func_80014980(GraphNode* arg0) { MtxF sp30; unk_D_86002F34_alt9* arg = (unk_D_86002F34_alt9*)arg0; @@ -866,7 +866,7 @@ void func_80014980(struct GraphNode* arg0) { D_800AA8C8.unk_10A0--; } -void func_80014A60(struct GraphNode* arg0) { +void func_80014A60(GraphNode* arg0) { unk_D_86002F34_alt9* arg = (unk_D_86002F34_alt9*)arg0; if ((arg->unk_18 != NULL) || (arg->unk_00.unk_10 != NULL)) { @@ -879,7 +879,7 @@ void func_80014A60(struct GraphNode* arg0) { func_80013330(arg0); } -void func_80014AEC(struct GraphNode* arg0) { +void func_80014AEC(GraphNode* arg0) { Color_RGBA8_u32 sp44; unk_D_86002F34_alt10* arg = (unk_D_86002F34_alt10*)arg0; unk_D_86002F34_alt11_018* sp3C; @@ -932,18 +932,18 @@ void func_80014CB8(s32 arg0) { } } -void func_80014D24(struct GraphNode* arg0) { +void func_80014D24(GraphNode* arg0) { unk_D_86002F34_alt3* arg = (unk_D_86002F34_alt3*)arg0; func_80014CB8(arg->unk_18); func_80013330(arg0); } -void func_80014D50(struct GraphNode* arg0) { +void func_80014D50(GraphNode* arg0) { func_80013330(arg0); } -void func_80014D70(struct GraphNode* arg0) { +void func_80014D70(GraphNode* arg0) { Vec3f sp9C; Vec3f sp90; Vec3f sp84; @@ -1007,7 +1007,7 @@ void func_80014D70(struct GraphNode* arg0) { } } -void func_80015094(struct GraphNode* arg0) { +void func_80015094(GraphNode* arg0) { unk_D_86002F34_alt1* arg = (unk_D_86002F34_alt1*)arg0; if (arg0->unk_01 & 1) { @@ -1032,9 +1032,9 @@ void func_80015094(struct GraphNode* arg0) { D_8006F080 = 0; } -void func_80015220(struct GraphNode* arg0, s32 arg1) { - struct GraphNode* var_s1 = arg0; - struct GraphNode** var_s0; +void func_80015220(GraphNode* arg0, s32 arg1) { + GraphNode* var_s1 = arg0; + GraphNode** var_s0; do { if (var_s1->unk_10 != NULL) { diff --git a/src/12D80.h b/src/12D80.h index 0deaa092..a0638483 100644 --- a/src/12D80.h +++ b/src/12D80.h @@ -69,39 +69,39 @@ void func_80012870(Vtx* arg0, unk_D_86002F34_00C_0CC* arg1, s16 arg2, s16 arg3, Vtx* func_80012960(unk_D_86002F34_00C_0CC* arg0); void func_80012D88(unk_D_86002F34_00C_0CC* arg0, UNUSED unk_D_86002F34_00C_040* arg1); void func_800131B4(unk_D_86002F34_00C_0CC* arg0, unk_D_86002F34_00C_040* arg1); -void func_80013330(struct GraphNode* arg0); -void func_800133D8(struct GraphNode* arg0); -void func_80013464(struct GraphNode* arg0); -void func_80013764(struct GraphNode* arg0); -void func_8001378C(struct GraphNode* arg0); -void func_800138F0(struct GraphNode* arg0); -void func_8001395C(struct GraphNode* arg0); -void func_800139E8(struct GraphNode* arg0); -void func_80013AF8(struct GraphNode* arg0); -void func_80013B8C(UNUSED struct GraphNode* arg0); -void func_80013C14(UNUSED struct GraphNode* arg0); -void func_80013C1C(struct GraphNode* arg0); -void func_80013D34(struct GraphNode* arg0); -void func_80013F7C(UNUSED struct GraphNode* arg0); -void func_80013F84(struct GraphNode* arg0); -void func_80014124(struct GraphNode* arg0); -void func_80014214(struct GraphNode* arg0); -void func_800142BC(struct GraphNode* arg0); -void func_80014334(struct GraphNode* arg0); -void func_80014384(struct GraphNode* arg0); -void func_800143C0(struct GraphNode* arg0); -void func_80014624(struct GraphNode* arg0); -void func_80014690(struct GraphNode* arg0); -void func_800148D8(struct GraphNode* arg0); -void func_80014980(struct GraphNode* arg0); -void func_80014A60(struct GraphNode* arg0); -void func_80014AEC(struct GraphNode* arg0); +void func_80013330(GraphNode* arg0); +void func_800133D8(GraphNode* arg0); +void func_80013464(GraphNode* arg0); +void func_80013764(GraphNode* arg0); +void func_8001378C(GraphNode* arg0); +void func_800138F0(GraphNode* arg0); +void func_8001395C(GraphNode* arg0); +void func_800139E8(GraphNode* arg0); +void func_80013AF8(GraphNode* arg0); +void func_80013B8C(UNUSED GraphNode* arg0); +void func_80013C14(UNUSED GraphNode* arg0); +void func_80013C1C(GraphNode* arg0); +void func_80013D34(GraphNode* arg0); +void func_80013F7C(UNUSED GraphNode* arg0); +void func_80013F84(GraphNode* arg0); +void func_80014124(GraphNode* arg0); +void func_80014214(GraphNode* arg0); +void func_800142BC(GraphNode* arg0); +void func_80014334(GraphNode* arg0); +void func_80014384(GraphNode* arg0); +void func_800143C0(GraphNode* arg0); +void func_80014624(GraphNode* arg0); +void func_80014690(GraphNode* arg0); +void func_800148D8(GraphNode* arg0); +void func_80014980(GraphNode* arg0); +void func_80014A60(GraphNode* arg0); +void func_80014AEC(GraphNode* arg0); void func_80014CB8(s32 arg0); -void func_80014D24(struct GraphNode* arg0); -void func_80014D50(struct GraphNode* arg0); -void func_80014D70(struct GraphNode* arg0); -void func_80015094(struct GraphNode* arg0); -void func_80015220(struct GraphNode* arg0, s32 arg1); +void func_80014D24(GraphNode* arg0); +void func_80014D50(GraphNode* arg0); +void func_80014D70(GraphNode* arg0); +void func_80015094(GraphNode* arg0); +void func_80015220(GraphNode* arg0, s32 arg1); void func_8001533C(s32 arg0); void func_80015348(void); s32 func_80015360(void); diff --git a/src/fragments/12/fragment12.c b/src/fragments/12/fragment12.c index 3a781887..d8979655 100644 --- a/src/fragments/12/fragment12.c +++ b/src/fragments/12/fragment12.c @@ -25,7 +25,7 @@ static u32 D_86600850[] = { }; static unk_D_86002F30* D_86600940; -static struct GraphNode* D_86600944; +static GraphNode* D_86600944; static unk_D_86002F34_00C* D_86600948; static unk_D_86002F58_004_000 D_86600950; static s16 D_86600AB8; diff --git a/src/fragments/13/fragment13.c b/src/fragments/13/fragment13.c index 0e373f28..a7715bd6 100644 --- a/src/fragments/13/fragment13.c +++ b/src/fragments/13/fragment13.c @@ -25,7 +25,7 @@ static u32 D_86700840[] = { }; static unk_D_86002F30* D_86700930; -static struct GraphNode* D_86700934; +static GraphNode* D_86700934; static unk_D_86002F34_00C* D_86700938; static unk_D_86002F58_004_000 D_86700940; diff --git a/src/fragments/14/fragment14_144300.c b/src/fragments/14/fragment14_144300.c index c32eba4d..cda4c1f6 100644 --- a/src/fragments/14/fragment14_144300.c +++ b/src/fragments/14/fragment14_144300.c @@ -705,7 +705,7 @@ void func_86801D48(void) { MemoryBlock* sp18; sp18 = func_80002D10(main_pool_get_available(), 0); - D_86807500 = (struct GraphNode*)process_geo_layout(sp18, &D_86806CD0); + D_86807500 = (GraphNode*)process_geo_layout(sp18, &D_86806CD0); func_80002D60(sp18); func_8001BB20(); diff --git a/src/fragments/15/fragment15.h b/src/fragments/15/fragment15.h index fa243c98..0254b527 100644 --- a/src/fragments/15/fragment15.h +++ b/src/fragments/15/fragment15.h @@ -109,9 +109,9 @@ extern Controller D_8690B390; extern unk_D_8690B3C0 D_8690B3C0; extern s8 D_8690B3D0[255]; -s32 func_86900020(s32 arg0, struct GraphNode* arg1); -s32 func_86900088(s32 arg0, struct GraphNode* arg1); -s32 func_869000F4(s32 arg0, struct GraphNode* arg1); +s32 func_86900020(s32 arg0, GraphNode* arg1); +s32 func_86900088(s32 arg0, GraphNode* arg1); +s32 func_869000F4(s32 arg0, GraphNode* arg1); void func_86900110(u8 arg0, u8 arg1, u8 arg2); void func_86900188(void); unk_D_86002F58_004_000_010_024* func_86900244(unk_func_80026268_arg0* arg0); diff --git a/src/fragments/15/fragment15_14CA70.c b/src/fragments/15/fragment15_14CA70.c index 0b3a3564..931f9221 100644 --- a/src/fragments/15/fragment15_14CA70.c +++ b/src/fragments/15/fragment15_14CA70.c @@ -337,7 +337,7 @@ static Controller D_8690B5D0; static s32 D_8690B5F4; static s32 D_8690B5F8; -s32 func_86900020(s32 arg0, struct GraphNode* arg1) { +s32 func_86900020(s32 arg0, GraphNode* arg1) { unk_D_86002F34_alt18* ptr = (unk_D_86002F34_alt18*)arg1; f32 sp28; s16 sp26; @@ -351,7 +351,7 @@ s32 func_86900020(s32 arg0, struct GraphNode* arg1) { return 0; } -s32 func_86900088(s32 arg0, struct GraphNode* arg1) { +s32 func_86900088(s32 arg0, GraphNode* arg1) { unk_D_86002F34_alt18* ptr = (unk_D_86002F34_alt18*)arg1; f32 sp28; s16 sp26; @@ -365,7 +365,7 @@ s32 func_86900088(s32 arg0, struct GraphNode* arg1) { return 0; } -s32 func_869000F4(s32 arg0, struct GraphNode* arg1) { +s32 func_869000F4(s32 arg0, GraphNode* arg1) { unk_D_86002F58_004_000* ptr = (unk_D_86002F58_004_000*)arg1; if (arg0 == 2) { diff --git a/src/fragments/16/fragment16.h b/src/fragments/16/fragment16.h index 314dbf54..3476ab30 100644 --- a/src/fragments/16/fragment16.h +++ b/src/fragments/16/fragment16.h @@ -439,7 +439,7 @@ extern unk_D_86002F34_00C* D_86A06254; extern s16 D_86A06258; extern s16* D_86A0625C; -s32 func_86A00020(s32 arg0, struct GraphNode* arg1); +s32 func_86A00020(s32 arg0, GraphNode* arg1); void func_86A013C8(u8 arg0, u8 arg1, unk_D_86A03014* arg2); void func_86A01490(void); void func_86A014F0(void); diff --git a/src/fragments/16/fragment16_158A00.c b/src/fragments/16/fragment16_158A00.c index 536fb682..62e3b5d1 100644 --- a/src/fragments/16/fragment16_158A00.c +++ b/src/fragments/16/fragment16_158A00.c @@ -32,7 +32,7 @@ static s8 D_86A061D8; static u8 D_86A061D9; static BinArchive* D_86A061DC; static Color_RGBA8_u32 D_86A061E0; -static struct GraphNode* D_86A061E4; +static GraphNode* D_86A061E4; static unk_D_86002F34_00C* D_86A061E8; static s16 D_86A061EC; static s16 D_86A061EE; @@ -120,7 +120,7 @@ u32 D_86A025D0[] = { 0x06000000, 0x01000000, }; -s32 func_86A00020(s32 arg0, struct GraphNode* arg1) { +s32 func_86A00020(s32 arg0, GraphNode* arg1) { unk_D_86002F58_004_000* ptr = (unk_D_86002F58_004_000*)arg1; if (arg0 == 2) { diff --git a/src/fragments/18/fragment18.c b/src/fragments/18/fragment18.c index 9a74ff02..0dd93ae7 100644 --- a/src/fragments/18/fragment18.c +++ b/src/fragments/18/fragment18.c @@ -1753,13 +1753,13 @@ void func_86C00368(s16 arg0, s16 arg1) { void func_86C003AC(unk_func_8790002C* arg0) { s16 idx = arg0 - D_86C11530; - arg0->unk_1A8 = arg0->unk_1D8.x = D_86C0E16C[idx].unk_00.x; - arg0->unk_1AC = arg0->unk_1D8.y = D_86C0E16C[idx].unk_00.y; - arg0->unk_1B0 = arg0->unk_1D8.z = D_86C0E16C[idx].unk_00.z; + arg0->unk_1A8.x = arg0->unk_1D8.x = D_86C0E16C[idx].unk_00.x; + arg0->unk_1A8.y = arg0->unk_1D8.y = D_86C0E16C[idx].unk_00.y; + arg0->unk_1A8.z = arg0->unk_1D8.z = D_86C0E16C[idx].unk_00.z; - arg0->unk_1C0 = 0.0f; - arg0->unk_1C4 = -30.0f; - arg0->unk_1C8 = 0.0f; + arg0->unk_1C0.x = 0.0f; + arg0->unk_1C0.y = -30.0f; + arg0->unk_1C0.z = 0.0f; } void func_86C00424(unk_func_8790002C* arg0, s16 arg1) { @@ -1770,11 +1770,11 @@ void func_86C00424(unk_func_8790002C* arg0, s16 arg1) { arg0->unk_16C.y = 1.0f; arg0->unk_16C.z = 1.0f; - arg0->unk_1A8 = arg0->unk_1D8.x = D_86C0E16C[arg1].unk_00.x; - arg0->unk_1AC = arg0->unk_1D8.y = D_86C0E16C[arg1].unk_00.y; - arg0->unk_1B0 = arg0->unk_1D8.z = D_86C0E16C[arg1].unk_00.z; + arg0->unk_1A8.x = arg0->unk_1D8.x = D_86C0E16C[arg1].unk_00.x; + arg0->unk_1A8.y = arg0->unk_1D8.y = D_86C0E16C[arg1].unk_00.y; + arg0->unk_1A8.z = arg0->unk_1D8.z = D_86C0E16C[arg1].unk_00.z; - arg0->unk_1C4 = 10.0f; + arg0->unk_1C0.y = 10.0f; arg0->unk_288 = 50.0f; arg0->unk_28C = 140.0f; @@ -1960,8 +1960,8 @@ void func_86C00770(unk_func_8790002C* arg0) { arg0->unk_274 = var_ft4; arg0->unk_22E = 0; arg0->unk_280 = 0.0f; - arg0->unk_1C0 = 0.0f; - arg0->unk_1C8 = 0.0f; + arg0->unk_1C0.x = 0.0f; + arg0->unk_1C0.z = 0.0f; arg0->unk_23E = 1; } @@ -2160,8 +2160,8 @@ void func_86C00F70(unk_func_8790002C* arg0) { idx = D_86C12008[arg0->unk_266].unk_00; temp_v0 = &D_86C0E480[idx]; - sp3C.x = temp_v0->unk_190 - arg0->unk_190; - sp3C.z = temp_v0->unk_198 - arg0->unk_198; + sp3C.x = temp_v0->unk_190.x - arg0->unk_190.x; + sp3C.z = temp_v0->unk_190.z - arg0->unk_190.z; arg0->unk_222 = func_86C00668(arg0, func_81400BBC(sp3C) + func_81400B00(sp36) + 0x8000); arg0->unk_22E = func_878001E8(sp32) + sp34; @@ -2295,7 +2295,7 @@ void func_86C01538(unk_func_8790002C* arg0) { case 4: if (func_81400760(&arg0->unk_274, arg0->unk_280, 8.0f) != 0) { - arg0->unk_1C8 = arg0->unk_1C0 = 0.0f; + arg0->unk_1C0.z = arg0->unk_1C0.x = 0.0f; arg0->unk_280 = 0; arg0->unk_23E = 1; arg0->unk_242++; @@ -2320,9 +2320,9 @@ void func_86C01538(unk_func_8790002C* arg0) { void func_86C016C8(unk_func_8790002C* arg0) { arg0->unk_210 = 1.0f; - arg0->unk_1F8 = (SINS(arg0->unk_216) * (26.0f + arg0->unk_274)) / 10.0f; + arg0->unk_1F8 = (SINS(arg0->unk_214.y) * (26.0f + arg0->unk_274)) / 10.0f; arg0->unk_1FC = (arg0->unk_274 + 70.0f) * 0.125f; - arg0->unk_200 = (COSS(arg0->unk_216) * (26.0f + arg0->unk_274)) / 10.0f; + arg0->unk_200 = (COSS(arg0->unk_214.y) * (26.0f + arg0->unk_274)) / 10.0f; } void func_86C01748(void) { @@ -2350,7 +2350,7 @@ void func_86C01750(unk_func_8790002C* arg0, s32 arg1, s32 arg2, f32 arg3, f32 ar } else { arg0->unk_1FC = -arg0->unk_1FC * 0.75f; } - arg0->unk_1C4 += arg0->unk_1FC; + arg0->unk_1C0.y += arg0->unk_1FC; func_86C00368(5, arg2); @@ -2462,13 +2462,13 @@ void func_86C01D2C(unk_func_8790002C* arg0, s32 arg1) { arg0->unk_1F8 = 0.0f; arg0->unk_200 = 0.0f; - arg0->unk_1A8 = arg0->unk_190; - arg0->unk_1B0 = arg0->unk_198; + arg0->unk_1A8.x = arg0->unk_190.x; + arg0->unk_1A8.z = arg0->unk_190.z; - arg0->unk_1B4 = sp3C.x; - arg0->unk_1BC = sp3C.z; + arg0->unk_1B4.x = sp3C.x; + arg0->unk_1B4.z = sp3C.z; - arg0->unk_1C0 = arg0->unk_1C8 = 0.0f; + arg0->unk_1C0.x = arg0->unk_1C0.z = 0.0f; arg0->unk_22E = 0x2000; arg0->unk_000.unk_000.unk_02 &= 0xFFDF; @@ -2508,8 +2508,8 @@ void func_86C01D2C(unk_func_8790002C* arg0, s32 arg1) { void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1) { if (arg0->unk_260 == 3) { - func_81400760(&arg0->unk_1A8, arg0->unk_1B4, arg0->unk_1CC); - func_81400760(&arg0->unk_1B0, arg0->unk_1BC, arg0->unk_1D4); + func_81400760(&arg0->unk_1A8.x, arg0->unk_1B4.x, arg0->unk_1CC); + func_81400760(&arg0->unk_1A8.z, arg0->unk_1B4.z, arg0->unk_1D4); } if (arg0->unk_298 != 0) { @@ -2520,8 +2520,8 @@ void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1) { } if (arg0->unk_260 < 5) { - if (arg0->unk_1C4 <= -50.0f) { - arg0->unk_1C4 = -50.0f; + if (arg0->unk_1C0.y <= -50.0f) { + arg0->unk_1C0.y = -50.0f; arg0->unk_1F8 = 0.0f; arg0->unk_200 = 0.0f; if (arg0->unk_260 == 3) { @@ -2540,8 +2540,8 @@ void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1) { arg0->unk_29A = 0; } } else { - if ((arg0->unk_1C4 <= -50.0f) && (arg0->unk_260 >= 5)) { - arg0->unk_1C4 = -50.0f; + if ((arg0->unk_1C0.y <= -50.0f) && (arg0->unk_260 >= 5)) { + arg0->unk_1C0.y = -50.0f; arg0->unk_210 = 0.0f; arg0->unk_1FC = 0.0f; func_81400550(&arg0->unk_22E, 0, 0x100); @@ -2580,11 +2580,11 @@ void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1) { void func_86C021FC(unk_func_8790002C* arg0) { if (arg0->unk_280 > 5.0f) { - func_81400760(&arg0->unk_1C0, (-SINS(arg0->unk_216) * arg0->unk_280) / 3.0f, 4.0f); - func_81400760(&arg0->unk_1C8, (-COSS(arg0->unk_216) * arg0->unk_280) / 3.0f, 4.0f); + func_81400760(&arg0->unk_1C0.x, (-SINS(arg0->unk_214.y) * arg0->unk_280) / 3.0f, 4.0f); + func_81400760(&arg0->unk_1C0.z, (-COSS(arg0->unk_214.y) * arg0->unk_280) / 3.0f, 4.0f); } else { - arg0->unk_1C0 = 0.0f; - arg0->unk_1C8 = 0.0f; + arg0->unk_1C0.x = 0.0f; + arg0->unk_1C0.z = 0.0f; } } @@ -2634,14 +2634,14 @@ void func_86C02324(unk_func_8790002C* arg0, s32 arg1) { break; case 0x5: - if (func_81400760(&arg0->unk_1C4, 10.0f, 4.0f) != 0) { + if (func_81400760(&arg0->unk_1C0.y, 10.0f, 4.0f) != 0) { arg0->unk_23E = 0; } break; case 0x64: - func_81400760(&arg0->unk_1C0, 0.0f, 4.0f); - func_81400760(&arg0->unk_1C8, 0.0f, 4.0f); + func_81400760(&arg0->unk_1C0.x, 0.0f, 4.0f); + func_81400760(&arg0->unk_1C0.z, 0.0f, 4.0f); if (func_81400550(&arg0->unk_228, -0x8000, 0x400) != 0) { arg0->unk_23E++; func_8001BD04(&arg0->unk_000, 2); @@ -2697,9 +2697,9 @@ void func_86C02610(unk_func_8790002C* arg0, s32 arg1) { arg0->unk_16C.y = 1.0f; arg0->unk_16C.z = 1.0f; - arg0->unk_1A8 = D_86C0E1CC[arg1].unk_00.x; - arg0->unk_1AC = D_86C0E1CC[arg1].unk_00.y; - arg0->unk_1B0 = D_86C0E1CC[arg1].unk_00.z; + arg0->unk_1A8.x = D_86C0E1CC[arg1].unk_00.x; + arg0->unk_1A8.y = D_86C0E1CC[arg1].unk_00.y; + arg0->unk_1A8.z = D_86C0E1CC[arg1].unk_00.z; arg0->unk_288 = D_86C0E1CC[arg1].unk_12; arg0->unk_28C = D_86C0E1CC[arg1].unk_14; @@ -2721,9 +2721,9 @@ void func_86C026F0(unk_func_8790002C* arg0, s32 arg1) { arg0->unk_16C.y = 1.0f; arg0->unk_16C.z = 1.0f; - arg0->unk_1A8 = D_86C0E1CC[arg1].unk_00.x; - arg0->unk_1AC = D_86C0E1CC[arg1].unk_00.y; - arg0->unk_1B0 = D_86C0E1CC[arg1].unk_00.z; + arg0->unk_1A8.x = D_86C0E1CC[arg1].unk_00.x; + arg0->unk_1A8.y = D_86C0E1CC[arg1].unk_00.y; + arg0->unk_1A8.z = D_86C0E1CC[arg1].unk_00.z; arg0->unk_000.unk_000.unk_02 &= ~0x40; } diff --git a/src/fragments/20/fragment20.c b/src/fragments/20/fragment20.c index 66a59abe..19911c2d 100644 --- a/src/fragments/20/fragment20.c +++ b/src/fragments/20/fragment20.c @@ -1,117 +1,1896 @@ -#include "global.h" +#include "fragment20.h" +#include "src/12D80.h" +#include "src/17300.h" +#include "src/18140.h" +#include "src/19840.h" +#include "src/1C720.h" +#include "src/1CF30.h" +#include "src/20470.h" +#include "src/2E110.h" +#include "src/3FB0.h" +#include "src/490A0.h" +#include "src/49790.h" +#include "src/4BA90.h" +#include "src/4BDC0.h" +#include "src/4CBC0.h" +#include "src/50860.h" +#include "src/6A40.h" +#include "src/6BC0.h" +#include "src/fragments/2/fragment2.h" +#include "src/fragments/34/fragment34.h" +#include "src/geo_layout.h" +#include "src/memory.h" +#include "src/stage_loader.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00020.s") +extern u8 D_0303ED80[]; +extern u8 D_0303F580[]; +extern u8 D_0303F180[]; +extern u8 D_03040580[]; +extern u8 D_03040D80[]; +extern u8 D_03040980[]; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E001A0.s") +typedef struct unk_D_86E04BFC { + /* 0x00 */ Vec3f unk_00; + /* 0x0C */ Vec3s unk_0C; + /* 0x12 */ s16 unk_12; + /* 0x14 */ s16 unk_14; + /* 0x16 */ s16 unk_16; +} unk_D_86E04BFC; // size = 0x18 -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E001E4.s") +static unk_func_8790002C D_86E04D60[4]; +static unk_func_8790002C D_86E05830[20]; +static s16 D_86E08E40; +static unk_D_800AC870* D_86E08E44; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E002E4.s") +static u32 D_86E02FB0[] = { + 0xE8E0CBB4, 0xAAAAAFB6, 0xB6AEABBC, 0xD6BBA5A5, 0xA6BCC4C9, 0xC3B5BBBB, 0xB8B5B9C0, 0xBDB9C3D7, 0xDED2CBBD, + 0xB9BBC8E6, 0xDEB2A7BB, 0xD6BAA5A5, 0xA5ADAEA9, 0xABB1BBCD, 0xD1CCCEDA, 0xDCD4D4D8, 0xDECEC9C0, 0xCCDEE3EF, + 0xE5B5A9AD, 0xB3AAA5A5, 0xA6A9ACAE, 0xB1B8C1E0, 0xF3E9DADC, 0xE8ECF0E9, 0xE5C2B4B4, 0xBAC6C5C1, 0xBBAFAFC9, + 0xC7A7A5A5, 0xA8B0B9C3, 0xCACCCADC, 0xECE0DFE9, 0xF0F4F1ED, 0xDAB8AFB5, 0xB1AEB2B1, 0xAEAEB2CD, 0xC7A7A5A6, + 0xABB3BCCF, 0xDFD7CAC4, 0xC2C0DEF3, 0xF8FBF7E4, 0xCBC4BDC2, 0xB6B0B5B4, 0xB1B2B1AD, 0xA9A7A7A7, 0xACB0B2BA, + 0xC4C2BDB4, 0xAEB2CAE8, 0xEAEFE8CE, 0xD3D7BEAF, 0xABB3BFC4, 0xC2C6BBAC, 0xAAADADAA, 0xAAABAAAA, 0xB1BCBEB2, + 0xAAAAB7CC, 0xCDCAC9C3, 0xDADBB8A7, 0xA9B7D3EB, 0xE0CBBBB1, 0xAEB4B4AD, 0xA9A9AAB0, 0xBFD0D0C2, 0xB8B2B0B7, + 0xBDC2BFC0, 0xCDC9B0A6, 0xA8B8DFFB, 0xF0C7B8B2, 0xAEB2B2AB, 0xA7A7B0C5, 0xDBEEE7CE, 0xC0B7B6AC, 0xACB5BABD, + 0xBBADA7A6, 0xA9B6D5F5, 0xECD3CBBB, 0xAEABABA8, 0xA5A7B5D2, 0xE6EEE2C7, 0xB3B5B7A7, 0xA5A9B6C6, 0xBCA7A7AB, + 0xAFB9D0E2, 0xDDE1E9CB, 0xB0B0B9B0, 0xA7A6B2C9, 0xD7D5C7B5, 0xABACAEA7, 0xA6ABB9CB, 0xB6A7A9BE, 0xD3D2DED6, + 0xCED6D8C1, 0xADB7CABC, 0xAEAAB0C3, 0xD0C6B8AC, 0xA6A5B0B6, 0xAFB7D2D3, 0xBBAEAACD, 0xF4EBDAC7, 0xC0C2BEB6, + 0xAEBECAC3, 0xBBB1B6D2, 0xDFCEC0B1, 0xA8A5AEB9, 0xB3B6CCC7, 0xB6B1A9B7, 0xD5DAC5B7, 0xB6BFCAD0, 0xD1E1D3BE, + 0xC3BCC7E1, 0xE0D3CDC3, 0xBAB3B2B0, 0xABAAACAE, 0xA5A5A6A9, 0xAFB2AFAD, 0xB6CEE7F2, 0xF6F0C8B6, 0xC3C7D7E1, + 0xCED1DDE1, 0xDED4CABC, 0xACA6A5A5, 0xA5A5A5A5, 0xA6A6A7AD, 0xBEDBF3F9, 0xF6D8B0AF, 0xC1D0D8CB, 0xBBD0EAF4, + 0xF6EEDCC2, 0xAEA5A5A5, 0xA5A5A5A5, 0xA5A5A6B2, 0xC7DFEFF1, 0xE1BEA9AA, 0xB8C9CABA, 0xB4CCE9F6, 0xF9F5DDBC, + 0xA9A5A5A5, 0xA6A5A5A5, 0xA6AAA9B1, 0xC6D9DFD7, 0xC2AFA7A6, 0xABB2B3AE, 0xB7CEE7F7, 0xF9F3D6B2, 0xA6A6A7A7, + 0xB3AAA5A5, 0xBAD8C0AB, 0xB5C3C6BB, 0xB1ACA8A5, 0xA5A6A7AD, 0xC6E4F2F9, 0xFAF1D0AF, 0xA7B0B9BB, 0xD2B9A9A8, + 0xCAE4C2A7, 0xA9ADAFAC, 0xABACAAA7, 0xA7A7A7AD, 0xCAECF7FA, 0xFAF1D1B0, 0xAEC3D9E0, 0xEEC9B0AB, 0xBCBEADA6, + 0xA5A6A6A6, 0xA9AEB3B5, 0xB6B7B4AE, 0xBBDAECF1, 0xF3EBD0B2, 0xB2CEEEFA, 0xF2CBB6B2, 0xB2ADA9A8, 0xA9A9ABAC, + 0xAEBBCED6, 0xD3D2CBB7, 0xAFB9C7D2, 0xDBDDCCB2, 0xAEC4E7FB, 0xDBC4BEC4, 0xC1B3ACB0, 0xB9C6C9C2, 0xBED3E8E6, + 0xE1E8EACD, 0xB2AAACB7, 0xC9CFC1AE, 0xA8B0C2DC, 0xDFD3CEE1, 0xE5C7B1B7, 0xD1F4F4DC, 0xD2F0F4DE, 0xDDF5FBE5, + 0xBAABA8B2, 0xC5CAB5A9, 0xA5A6AAC1, 0xE2E1D8DC, 0xF0E1C0B7, 0xCAE9EAD3, 0xD2EEE9D0, 0xCCE1EFD6, 0xB8AAA7AB, + 0xB7C3BDAC, 0xA6A5A6BC, 0xB8C2BDB7, 0xCEF0E9C3, 0xB4B8BBBB, 0xC8E5E0C3, 0xB6BBC0B9, 0xB3AAA5A6, 0xA9BCD2BC, + 0xACAFB3B1, 0xA9A9A9A7, 0xB4EEFBDE, 0xB3ABACB4, 0xC4EAE2B8, 0xAAAAABAB, 0xB2B0A7A9, 0xABC4E0C7, 0xB0B2C0B7, + 0xB1ABA6A5, 0xACDDF4D2, 0xB2AAABB2, 0xBBC7C0AC, 0xA6A5A5A6, 0xB2BCB1B6, 0xC1CED9C2, 0xB2AEBCC0, 0xC9BBAEB5, + 0xB5B3BAB1, 0xACA7A8AD, 0xB2B0AAA6, 0xA5A5A5A7, 0xB0BDB4C0, 0xD9CEBAB3, 0xB4B6C5CF, 0xEAD6C5CE, 0xCCB3A7BA, + 0xC9B2A6A8, 0xAAA9A6A5, 0xA5A5A8B6, 0xB9AFAAB4, 0xCAC0A8A7, 0xB0C0DCEF, 0xF6F3E4D0, 0xC0B3ADC6, 0xE2C6B2AA, + 0xA7A6A5A5, 0xA5A5AFD0, 0xD0AFA6A9, 0xB6BAACA6, 0xB2C6E5F8, 0xF1F2E1BF, 0xABABAFB6, 0xC5BEB6B0, 0xB1AAA5A5, + 0xA5B0C1E4, 0xDBB7AFAC, 0xB1B2AEAD, 0xB2BED0E6, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0034C.s") +static u32 D_86E033B0[] = { + 0x34BD34BD, 0x34BD34BD, 0x34FD34BD, 0x3CBD34FD, 0x3CFD3CFD, 0x3CFD34FD, 0x3CFD3CFD, 0x3CFD3CFD, 0x3CFD3CFD, + 0x3CFD3CFD, 0x3CFD3CFD, 0x3CFD3CFD, 0x3CFD3CFD, 0x3CFD3CFD, 0x3CFB3CFB, 0x3CFD3CFD, 0x3CFB3CFB, 0x3CFB3CFB, + 0x3D3B3CFB, 0x3D3B3D3B, 0x3D3B3D3B, 0x3D3B3D3B, 0x3D3B3D3B, 0x3D3B3D3B, 0x453B453B, 0x453B453B, 0x453B453B, + 0x453B453B, 0x453B453B, 0x453B453B, 0x453B453B, 0x453B453B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, + 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, 0x457B457B, + 0x457B457B, 0x45BB45BB, 0x4D7B457B, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, + 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DBB4DBB, 0x4DFB4DFB, + 0x4DFB4DFB, 0x4DFB4DFB, 0x4DFB4DFB, 0x4DFB55FB, 0x55FB4DFB, 0x55FB55FB, 0x55FB55FB, 0x55FB55FB, 0x55FB55FB, + 0x55FB55FB, 0x55FB55FB, 0x5DFB5E3B, 0x5DFB5E3B, 0x5E3B5E3B, 0x5E3B5E3B, 0x663B663B, 0x663B663B, 0x663B663B, + 0x663B663B, 0x6E3B6E3B, 0x6E3B6E3B, 0x6E3B6E3B, 0x6E3B6E3B, 0x767B767B, 0x763B767B, 0x767B767B, 0x767B767B, + 0x7E7B7E7B, 0x7E7B7E7B, 0x7E7B7E7B, 0x7E7B7E7B, 0x867B867B, 0x867B867B, 0x867B867B, 0x867B867B, 0x8EBB8EBB, + 0x8EBB8EBB, 0x8EBB8EBB, 0x8EBB8EBB, 0x96BB96BB, 0x96BB96BB, 0x96BB96BB, 0x96BB96BB, 0x9EBB9EBB, 0x9EBB9EBB, + 0xA6FBA6FB, 0xA6FBA6FB, 0xA6FDA6FD, 0xA6FDA6FB, 0xAEFDAEFD, 0xAEFDAEFD, 0xAEFDAEFD, 0xAEFDAEFD, 0xB6FDB6FD, + 0xB6FDB6FD, 0xB73DB73D, 0xB73DB73D, 0xBF3DBF3D, 0xBF3DBF3D, 0xBF3DBF3D, 0xBF3DBF3D, 0xC73DC73D, 0xC73DC73D, + 0xC73DC73D, 0xC73DC73D, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0036C.s") +static u32 D_86E035B0[] = { + 0xA45BA45B, 0x9C179BD7, 0x93D593D5, 0x9C179C17, 0x9C199C19, 0x9C199C19, 0xA45BAC9D, 0xA45B9C19, 0x9C199C19, + 0x9C1993D7, 0x8B538351, 0x8B518B93, 0x93959C17, 0xA49BB4DF, 0xB4DFAC9F, 0xB4DFB521, 0xAC9DA45B, 0xA4599C17, + 0x9BD793D5, 0x93D593D5, 0x93D79BD7, 0x93D593D5, 0x9BD7A45B, 0xA45B9BD7, 0x93D79C19, 0xA45B9C19, 0x93958B51, + 0x8B519393, 0x93D59C17, 0x9C19A45B, 0xA49DAC9F, 0xACDFB521, 0xACDFA45B, 0xA459A459, 0x9C1993D7, 0x93959393, + 0x93D59BD7, 0x93D58B93, 0x8B939C17, 0x9BD79395, 0x8B539BD7, 0xA459A459, 0x9BD78B93, 0x8B5193D5, 0x9BD593D5, + 0x93959BD7, 0x9C19A45B, 0xAC9DB4E1, 0xACDFAC9D, 0xA45BA45B, 0x9C1993D7, 0x93959393, 0x93D59C17, 0x9BD78B93, + 0x83518B93, 0x8B938351, 0x7B0F8B51, 0x93959BD7, 0x9BD793D5, 0x8B939393, 0x93938B93, 0x939393D5, 0x9BD79C17, + 0xA45BAC9D, 0xAC9DA45B, 0xA45BA419, 0x9C1793D5, 0x93939393, 0x93D59C17, 0x9C1993D7, 0x8B538351, 0x8B938351, + 0x7B0F7B0F, 0x835193D5, 0x93D793D5, 0x93938B93, 0x8B518B51, 0x8B9393D5, 0x93D59393, 0x93959BD7, 0xA45B9C19, + 0xA459A459, 0x9C1793D7, 0x93D59393, 0x8B939395, 0x93D793D7, 0x8B959395, 0x9BD793D7, 0x8B938B53, 0x93D59C17, + 0x9C1793D5, 0x93938B91, 0x8B518B51, 0x8B539393, 0x93939393, 0x8B938B53, 0x93D793D7, 0x9C179C19, 0x9C1793D5, + 0x93D59395, 0x8B518311, 0x83518B53, 0x8B939BD7, 0xA45BA45B, 0x93D79395, 0x9C19A45B, 0xA4599C17, 0x9C179393, + 0x8B518B51, 0x8B538B53, 0x939393D5, 0x8B938B53, 0x8B959395, 0x93D793D7, 0x93938B51, 0x8B938B93, 0x83517ACD, + 0x7ACD7ACD, 0x8B5193D5, 0xA4599C19, 0x8B958B95, 0x93D7A45B, 0xAC9DAC9D, 0xA49B9C17, 0x93958B93, 0x8B938B53, + 0x8B939393, 0x8B938B93, 0x939593D7, 0x9C199395, 0x83517ACF, 0x830F8311, 0x7B0F72CD, 0x7B0F8B51, 0x939393D5, + 0x9BD593D5, 0x83537B11, 0x93D7A45B, 0xAC9DB4DF, 0xACDFA45B, 0x9C1993D5, 0x93938B93, 0x8B518B51, 0x8B538B93, + 0x9C19A419, 0x9C199395, 0x83117ACF, 0x7ACD7ACF, 0x7ACF7ACF, 0x8B539C17, 0x9C1993D5, 0x93938B51, 0x830F7B11, + 0x9395A45B, 0xB4DFB4E1, 0xB4DFAC9D, 0xA45B9BD7, 0x93938B93, 0x8B518B51, 0x8B9393D5, 0xA459A459, 0x9C1793D5, + 0x8B938351, 0x8311830F, 0x830F8311, 0x93959C19, 0x9C1993D5, 0x8B938B51, 0x830F830F, 0x8B93A459, 0xB4DFB4DF, + 0xAC9DAC9B, 0xA45B9C17, 0x93D59393, 0x8B938B91, 0x939393D3, 0xA457A417, 0x9C179BD7, 0x9BD793D5, 0x93938B53, + 0x83518351, 0x8B9393D5, 0x93D59393, 0x8B518B51, 0x830F830F, 0x8B519BD7, 0xAC9BAC9B, 0xA459A459, 0xAC9BA45B, + 0x9C1793D5, 0x8B938B51, 0x8B519393, 0x9BD59C17, 0x9C179C17, 0x9C179C17, 0x9BD79395, 0x8B938B51, 0x8B518B51, + 0x8B939393, 0x93938B51, 0x8B51830F, 0x835193D5, 0xA459A417, 0x9C17A459, 0xAC9BA49B, 0xA41993D5, 0x93938B51, + 0x8B519393, 0x93959BD7, 0x9C179C17, 0x9BD59C17, 0x9C179BD7, 0x93958B93, 0x8B518B51, 0x8B518B93, 0x8B938B51, + 0x830F7B0F, 0x835193D5, 0x9C179C19, 0x9C19A459, 0xA459A459, 0x9C1793D5, 0x93938B91, 0x8B518B91, 0x93D59BD7, + 0x9C179C17, 0x9BD79BD5, 0x9BD59BD5, 0x93D58B93, 0x8B518B51, 0x8B518B51, 0x8B518B51, 0x830F7B0F, 0x83519393, + 0x93D59C17, 0x9C199C17, 0x9C179C17, 0x9C199BD7, 0x93939393, 0x8B938B53, 0x939593D5, 0x9BD59C17, 0x9BD79395, + 0x93939393, 0x93938B93, 0x8B518B51, 0x83518351, 0x83518B51, 0x83118311, 0x8B518B51, 0x8B919395, 0x9BD593D5, + 0x93D59BD7, 0x9C199C17, 0x93D593D3, 0x93938B93, 0x83118311, 0x8B939C17, 0x9C199395, 0x8B518B51, 0x8B938B51, + 0x83117B0F, 0x7ACF830F, 0x8B518B93, 0x8B938B51, 0x8351830F, 0x834F8B93, 0x93938B93, 0x939393D5, 0x93D59395, + 0x93D593D3, 0x93D593D5, 0x728D728D, 0x7B119395, 0x9C179BD7, 0x93938B51, 0x8B518351, 0x7ACF728D, 0x7ACF8351, + 0x8B938B93, 0x8B938B51, 0x7ACF7ACD, 0x830F8B51, 0x8B518B51, 0x8B938B53, 0x8B538B93, 0x93939393, 0x939393D5, + 0x728D6A4D, 0x728D8311, 0x93D59C19, 0x9C1993D5, 0x93938B53, 0x7B117ACF, 0x83119393, 0x93938B51, 0x8B51830F, + 0x7ACF7ACD, 0x830F8351, 0x83518311, 0x83518B51, 0x8B9393D3, 0x93D39393, 0x8B518B53, 0x7ACF7ACD, 0x7ACD7ACD, + 0x835193D7, 0xA4599C17, 0x93D59393, 0x8B538311, 0x8B519393, 0x93918B4F, 0x830F830F, 0x7ACF7ACF, 0x830F830F, + 0x834F834F, 0x834F8B51, 0x93D39C13, 0x9BD39391, 0x8351830F, 0x830F830F, 0x830F7ACD, 0x7ACF8B53, 0x9BD79BD5, + 0x93D59393, 0x8B938351, 0x8B518B51, 0x8B51830F, 0x7ACD7ACD, 0x7ACD7ACD, 0x7ACD830F, 0x830F834F, 0x834F834F, + 0x8B519391, 0x93918B4F, 0x830F830F, 0x7B0F7ACF, 0x7ACD72CD, 0x72CD830F, 0x8B518B51, 0x8B518B51, 0x8B518311, + 0x830F830F, 0x830F7B0F, 0x7ACD7ACD, 0x728D6A8D, 0x6A4D728D, 0x7B0F830F, 0x830F7ACF, 0x7ACD7ACD, 0x830D834F, + 0x834F8B51, 0x728D6A8D, 0x6A4D728D, 0x728D7ACD, 0x7ACF7B0F, 0x7B0F830F, 0x830F7ACF, 0x72CD72CD, 0x72CD728D, + 0x728D728D, 0x728D6A4D, 0x620B624D, 0x72CD830F, 0x7ACF728D, 0x6A4B728D, 0x7ACD830F, 0x8B518B93, 0x72CF728D, + 0x6A4D6A4B, 0x6A4D72CD, 0x830F830F, 0x7ACF7ACD, 0x728D6A4D, 0x6A4D6A4B, 0x6A4B6A4B, 0x6A4B728B, 0x728D728D, + 0x624D624B, 0x728D7ACF, 0x72CD6A8D, 0x6A4D728D, 0x7ACD7ACF, 0x83518B93, 0x83538311, 0x7ACF6A4D, 0x620B6A4D, + 0x7ACF830F, 0x7ACF728D, 0x6A4B624D, 0x620D5A0B, 0x5A0B620B, 0x6A4B6A4B, 0x728D728F, 0x6A8D6A4D, 0x728D728D, + 0x728D6A4D, 0x6A8D728D, 0x728D728F, 0x72CF7B11, 0x9C199395, 0x835372CF, 0x624D624D, 0x6A8D7ACF, 0x72CF6A4D, + 0x624D6A4D, 0x624D5A0D, 0x59CB5A0B, 0x620B624B, 0x6A4D6A4D, 0x624D624D, 0x6A4D6A8D, 0x6A4D624D, 0x6A4D6A4D, + 0x6A4D624D, 0x624D6A8F, 0xA45B9BD7, 0x93958B55, 0x7B13728F, 0x6A8D6A8D, 0x6A8F6A8F, 0x6A8F728F, 0x6A8F624D, + 0x5A0B5A0B, 0x624B6A4B, 0x620B5A0B, 0x5A0B5A0B, 0x624D6A8D, 0x6A4D624D, 0x5A0B5A0B, 0x5A0B5A0B, 0x5A0D624D, + 0x9C1B93D9, 0x939793D7, 0x93978353, 0x72D1728F, 0x72CF7AD1, 0x7AD17AD1, 0x7AD1728F, 0x624D624D, 0x6A8D6A4D, + 0x624B5A0B, 0x520B51CB, 0x5A0D624D, 0x624D620D, 0x5A0B51CB, 0x59CB5A0B, 0x624D624F, 0x9BD993D7, 0x93959397, + 0x93979395, 0x83538313, 0x83138B53, 0x8B558B95, 0x8B958353, 0x72D1728F, 0x72CF728D, 0x6A4D624D, 0x620B5A0B, + 0x520B5A0B, 0x5A0B5A0B, 0x5A0B51CB, 0x59CB624D, 0x6A8F72CF, 0x93979395, 0x8B958B95, 0x8B958B95, 0x8B959395, + 0x93D79C19, 0x9C199C19, 0x9C199397, 0x831372CF, 0x72CF728F, 0x6A8D6A4D, 0x6A4D620B, 0x5A0B5A0B, 0x5A0D620D, + 0x5A0B5A0B, 0x624D728F, 0x7B118353, 0x8B978B97, 0x93978B95, 0x8B958B95, 0x93D79BD9, 0xA45BA45B, 0xA45BA45B, + 0x9BD98B95, 0x83137AD1, 0x72CF728F, 0x7AD17ACF, 0x728F6A4D, 0x620D624D, 0x624D6A8F, 0x6A4D6A8D, 0x72CF8313, + 0x8B959397, 0x93D793D7, 0x93D793D9, 0x93D793D7, 0x9BD99C1B, 0xA45DAC9D, 0xA45D9C19, 0x8B978353, 0x83137B11, + 0x72D172D1, 0x83538B53, 0x7B116A8F, 0x624F624F, 0x6A8F72D1, 0x7AD17B11, 0x83538B95, 0x93D793D9, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E004FC.s") +static unk_D_86002F34_018 D_86E03DB0[3] = { + { + 0x04, + 0x01, + 0x00, + 0x20, + 32, + 1024, + D_86E02FB0, + }, + { + 0x00, + 0x02, + 0x00, + 0x04, + 64, + 256, + D_86E033B0, + }, + { + 0x00, + 0x02, + 0x00, + 0x20, + 32, + 1024, + D_86E035B0, + }, +}; +static Gfx D_86E03DD8[] = { + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C), + gsSPEndDisplayList(), +}; +static Gfx D_86E03E10[] = { + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 2, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 2048), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 2, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x000C, 0x00FC), + gsSPEndDisplayList(), +}; +static Gfx D_86E03E48[] = { + gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 511, 512), + gsDPPipeSync(), + gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x017C, 0x037C), + gsSPEndDisplayList(), +}; +static Vtx D_86E03E88[] = { + VTX(-2544, 844, -2221, 392, 3180, 0x4D, 0x73, 0x20, 0xFF), + VTX(-1824, 587, -2393, 641, 3314, 0x4D, 0x73, 0x20, 0xFF), + VTX(-1848, 250, -2970, 633, 3759, 0x5E, 0x2F, 0x04, 0xFF), + VTX(3500, 250, 1500, 2749, 404, 0x84, 0x5E, 0x3E, 0xFF), + VTX(3500, 250, -937, 2941, 2288, 0x84, 0x5E, 0x3E, 0xFF), + VTX(1990, 250, -937, 2419, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(1824, 362, -4141, 2383, 4864, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1824, 362, -3604, 2458, 4448, 0x5E, 0x2F, 0x04, 0xFF), + VTX(2784, 587, -3392, 2790, 4285, 0x5E, 0x2F, 0x04, 0xFF), + VTX(2760, 587, -4295, 2707, 4983, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(0, 250, -3727, 1827, 4543, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-1894, 909, -3842, 1172, 4633, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(864, 250, -2125, 1571, 3106, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1894, 684, -1980, 1927, 2995, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1752, 1031, -2893, 1878, 3700, 0x4F, 0x73, 0x3E, 0xFF), + VTX(-2769, 1295, -4034, 581, 4681, 0x97, 0x59, 0x26, 0xFF), + VTX(-4052, 1005, -4585, 9, 5356, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-3500, 250, -2780, 62, 3612, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-3278, 941, -2048, 69, 3047, 0x4D, 0x73, 0x20, 0xFF), + VTX(3624, 1310, -2586, 2526, 3462, 0x4F, 0x73, 0x3E, 0xFF), + VTX(3792, 1101, -3143, 2850, 3993, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-2625, 1358, -5254, 503, 5874, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-1822, 1182, -4421, 1069, 5329, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-1803, 250, -5615, 787, 6152, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(-3298, 587, -1750, 62, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-2206, 587, -1462, 389, 2594, 0x2D, 0x46, 0x09, 0xFF), + VTX(-1345, 587, -1750, 667, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-739, 250, -2086, 957, 3076, 0x84, 0x5E, 0x3E, 0xFF), + VTX(-644, 250, -2563, 970, 3445, 0x5E, 0x2F, 0x04, 0xFF), + VTX(3153, 941, -5254, 2736, 5774, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(3792, 1101, -4141, 3064, 4864, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(4028, 1471, -5000, 3049, 5453, 0xCC, 0xAA, 0x6F, 0xFF), +}; +static Vtx D_86E04088[] = { + VTX(-749, 250, -5106, 1152, 5759, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(566, 791, -6840, 1841, 7000, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(-243, 675, -6701, 1561, 6892, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(-1803, 250, -5615, 787, 6152, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(3624, 1310, -2586, 2526, 3462, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1752, 1031, -2893, 1878, 3700, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1894, 684, -1980, 1927, 2995, 0x4F, 0x73, 0x3E, 0xFF), + VTX(875, 250, -3438, 2129, 4321, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1032, 250, -3085, 1896, 3948, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1824, 362, -3604, 2458, 4448, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1824, 362, -4141, 2383, 4864, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1145, 250, -4986, 1935, 5417, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(1055, 579, -4219, 2192, 4924, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1919, 676, -4571, 2203, 5096, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(2760, 587, -4295, 2707, 4983, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(2784, 587, -3392, 2790, 4285, 0x5E, 0x2F, 0x04, 0xFF), + VTX(3792, 1101, -3143, 2850, 3993, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(3792, 1101, -4141, 3064, 4864, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(3500, 1101, -1961, 2483, 2980, 0x4F, 0x73, 0x3E, 0xFF), + VTX(2784, 587, -3392, 2361, 3948, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1824, 362, -3604, 2790, 4285, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1752, 1031, -2893, 2458, 4448, 0x4F, 0x73, 0x3E, 0xFF), + VTX(-2544, 844, -2221, 392, 3180, 0x4D, 0x73, 0x20, 0xFF), + VTX(-2206, 587, -1462, 389, 2594, 0x2D, 0x46, 0x09, 0xFF), + VTX(-1345, 587, -1750, 667, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-1824, 587, -2393, 641, 3314, 0x4D, 0x73, 0x20, 0xFF), + VTX(-3298, 587, -1750, 62, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-3298, 652, -938, 520, 2288, 0x4D, 0x73, 0x20, 0xFF), + VTX(-2452, 806, -984, 823, 2288, 0x4D, 0x73, 0x20, 0xFF), + VTX(-3500, 250, -125, 520, 1660, 0x84, 0x5E, 0x3E, 0xFF), + VTX(1990, 250, -937, 2419, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(3500, 250, -937, 2941, 2288, 0x84, 0x5E, 0x3E, 0xFF), +}; +static Vtx D_86E04288[] = { + VTX(-2206, 587, -1462, 389, 2594, 0x2D, 0x46, 0x09, 0xFF), + VTX(-2452, 806, -984, 823, 2288, 0x4D, 0x73, 0x20, 0xFF), + VTX(-1230, 250, -938, 1126, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(-739, 250, -2086, 957, 3076, 0x84, 0x5E, 0x3E, 0xFF), + VTX(-1345, 587, -1750, 667, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-2480, 250, -125, 823, 1660, 0xBD, 0x97, 0x5E, 0xFF), + VTX(1990, 250, -937, 2419, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(1894, 684, -1980, 1927, 2995, 0x4F, 0x73, 0x3E, 0xFF), + VTX(864, 250, -2125, 1571, 3106, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(566, 791, -6840, 1841, 7000, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(-749, 250, -5106, 1152, 5759, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(1145, 250, -4986, 1935, 5417, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(2415, 595, -5476, 2481, 5945, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(1577, 675, -6655, 2191, 6857, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(-1894, 909, -3842, 1172, 4633, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-1822, 1182, -4421, 1069, 5329, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-2625, 1358, -5254, 503, 5874, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(0, 250, -3727, 1827, 4543, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-791, 836, -4459, 1425, 5359, 0x97, 0x59, 0x26, 0xFF), + VTX(-2769, 1295, -4034, 581, 4681, 0x97, 0x59, 0x26, 0xFF), + VTX(240, 547, -4363, 1910, 5036, 0xBB, 0x8E, 0x48, 0xFF), + VTX(875, 250, -3438, 2129, 4321, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1055, 579, -4219, 2192, 4924, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1824, 362, -4141, 2383, 4864, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1919, 676, -4571, 2203, 5096, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(2760, 587, -4295, 2707, 4983, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(3153, 941, -5254, 2736, 5774, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-3500, 250, -2780, 62, 3612, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-1848, 250, -2970, 633, 3759, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1752, 1031, -2893, 1878, 3700, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1824, 362, -3604, 2458, 4448, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1032, 250, -3085, 1896, 3948, 0xCC, 0xAA, 0x6F, 0xFF), +}; +static Vtx D_86E04488[] = { + VTX(-1848, 250, -2970, 633, 3759, 0x5E, 0x2F, 0x04, 0xFF), + VTX(-3500, 250, -2780, 62, 3612, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-2544, 844, -2221, 392, 3180, 0x4D, 0x73, 0x20, 0xFF), + VTX(3500, 1101, -1961, 2483, 2980, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1894, 684, -1980, 1927, 2995, 0x4F, 0x73, 0x3E, 0xFF), + VTX(1990, 250, -937, 2419, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(-1803, 250, -5615, 787, 6152, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(-1822, 1182, -4421, 1069, 5329, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-791, 836, -4459, 1425, 5359, 0x97, 0x59, 0x26, 0xFF), + VTX(-749, 250, -5106, 1152, 5759, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(240, 547, -4363, 1910, 5036, 0xBB, 0x8E, 0x48, 0xFF), + VTX(1055, 579, -4219, 2192, 4924, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1145, 250, -4986, 1935, 5417, 0xBF, 0xA2, 0x7D, 0xFF), + VTX(1577, 675, -6655, 2191, 6857, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(566, 791, -6840, 1841, 7000, 0x9D, 0xDF, 0xCC, 0xFF), + VTX(0, 250, -3727, 1827, 4543, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-644, 250, -2563, 970, 3445, 0x5E, 0x2F, 0x04, 0xFF), + VTX(875, 250, -3438, 2129, 4321, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(864, 250, -2125, 1571, 3106, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(1032, 250, -3085, 1896, 3948, 0xCC, 0xAA, 0x6F, 0xFF), + VTX(-739, 250, -2086, 957, 3076, 0x84, 0x5E, 0x3E, 0xFF), + VTX(-1230, 250, -938, 1126, 2288, 0xBD, 0x97, 0x5E, 0xFF), + VTX(-2480, 250, -125, 823, 1660, 0xBD, 0x97, 0x5E, 0xFF), + VTX(-1345, 587, -1750, 667, 2817, 0x4D, 0x73, 0x20, 0xFF), + VTX(-2206, 587, -1462, 389, 2594, 0x2D, 0x46, 0x09, 0xFF), + VTX(-3500, 250, -125, 520, 1660, 0x84, 0x5E, 0x3E, 0xFF), + VTX(-2452, 806, -984, 823, 2288, 0x4D, 0x73, 0x20, 0xFF), + VTX(-3500, 250, 1500, 328, 404, 0x84, 0x5E, 0x3E, 0xFF), + VTX(3500, 250, 1500, 2749, 404, 0x84, 0x5E, 0x3E, 0xFF), + VTX(2784, 587, -3392, 2790, 4285, 0x5E, 0x2F, 0x04, 0xFF), + VTX(1752, 1031, -2893, 2361, 3948, 0x4F, 0x73, 0x3E, 0xFF), + VTX(3624, 1310, -2586, 2526, 3462, 0x4F, 0x73, 0x3E, 0xFF), +}; +static Vtx D_86E04688[] = { + VTX(-250, 0, 250, 0, 2880, 0xFF, 0xFF, 0xFF, 0xFF), + VTX(250, 0, 250, 128, 2880, 0xFF, 0xFF, 0xFF, 0xFF), + VTX(250, 620, 250, 128, 0, 0xFF, 0xFF, 0xFF, 0xFF), + VTX(-250, 620, 250, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), +}; +static Vtx D_86E046C8[] = { + VTX(-206, -33, 80, 0, 974, 0x8E, 0xF2, 0x20, 0xFF), VTX(-111, 68, 137, 233, 556, 0xAC, 0x30, 0x46, 0xFF), + VTX(-159, 120, 14, 116, 339, 0x9D, 0x40, 0x11, 0xFF), VTX(-82, -45, 202, 305, 1024, 0xDB, 0xE4, 0x6E, 0xFF), + VTX(-25, 125, 193, 447, 318, 0xEE, 0x40, 0x63, 0xFF), VTX(185, -19, -121, 968, 917, 0x5C, 0xD9, 0xBE, 0xFF), + VTX(185, 94, -29, 967, 449, 0x6C, 0x2E, 0xED, 0xFF), VTX(208, -44, -16, 1024, 1018, 0x72, 0xDE, 0x0C, 0xFF), + VTX(-61, 102, -170, 358, 415, 0xD1, 0x29, 0x9A, 0xFF), VTX(-73, 202, -75, 328, 0, 0xC0, 0x5C, 0xD9, 0xFF), + VTX(74, 200, -112, 693, 6, 0x22, 0x65, 0xCB, 0xFF), VTX(80, 19, -211, 707, 758, 0x0F, 0x21, 0x8E, 0xFF), + VTX(146, 21, 169, 871, 749, 0x52, 0x0C, 0x56, 0xFF), VTX(121, 184, 54, 809, 73, 0x3D, 0x5F, 0x27, 0xFF), + VTX(-60, 191, 78, 361, 46, 0xD7, 0x69, 0x27, 0xFF), VTX(-181, 22, -65, 61, 744, 0x9A, 0x00, 0xC2, 0xFF), +}; +static Gfx D_86E047C8[] = { + gsSPVertex(D_86E046C8, 16, 0), + gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 1, 3, 4, 0), + gsSP2Triangles(5, 6, 7, 0, 8, 9, 10, 0), + gsSP2Triangles(6, 11, 10, 0, 12, 13, 4, 0), + gsSP2Triangles(14, 2, 1, 0, 9, 8, 15, 0), + gsSP2Triangles(10, 13, 6, 0, 3, 1, 0, 0), + gsSP2Triangles(12, 7, 6, 0, 10, 14, 13, 0), + gsSP2Triangles(6, 13, 12, 0, 11, 8, 10, 0), + gsSP2Triangles(6, 5, 11, 0, 15, 8, 11, 0), + gsSP2Triangles(10, 9, 14, 0, 9, 2, 14, 0), + gsSP2Triangles(15, 2, 9, 0, 4, 14, 1, 0), + gsSP2Triangles(2, 15, 0, 0, 3, 12, 4, 0), + gsSP1Triangle(4, 13, 14, 0), + gsSPEndDisplayList(), +}; +static Gfx D_86E04840[] = { + gsSPClearGeometryMode(G_LIGHTING), gsSPVertex(D_86E04688, 4, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSPSetGeometryMode(G_LIGHTING), gsSPEndDisplayList(), +}; +static Gfx D_86E04870[] = { + gsSPClearGeometryMode(G_LIGHTING), + gsSPVertex(D_86E03E88, 32, 0), + gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 6, 8, 9, 0), + gsSP2Triangles(10, 11, 2, 0, 12, 13, 14, 0), + gsSP2Triangles(15, 16, 17, 0, 2, 11, 15, 0), + gsSP2Triangles(17, 18, 0, 0, 19, 20, 8, 0), + gsSP2Triangles(21, 22, 23, 0, 18, 24, 25, 0), + gsSP2Triangles(18, 25, 0, 0, 1, 26, 27, 0), + gsSP2Triangles(1, 27, 28, 0, 2, 1, 28, 0), + gsSP2Triangles(29, 9, 30, 0, 29, 30, 31, 0), + gsSP1Triangle(15, 21, 16, 0), + gsSPVertex(D_86E04088, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 7, 8, 9, 0), + gsSP2Triangles(7, 9, 10, 0, 11, 12, 13, 0), + gsSP2Triangles(14, 15, 16, 0, 14, 16, 17, 0), + gsSP2Triangles(6, 18, 4, 0, 19, 20, 21, 0), + gsSP2Triangles(22, 23, 24, 0, 22, 24, 25, 0), + gsSP2Triangles(23, 26, 27, 0, 23, 27, 28, 0), + gsSP2Triangles(28, 27, 29, 0, 30, 31, 18, 0), + gsSPVertex(D_86E04288, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 2, 0), + gsSP2Triangles(2, 1, 5, 0, 6, 7, 8, 0), + gsSP2Triangles(9, 10, 11, 0, 12, 13, 11, 0), + gsSP2Triangles(14, 15, 16, 0, 14, 17, 18, 0), + gsSP2Triangles(16, 19, 14, 0, 18, 15, 14, 0), + gsSP2Triangles(20, 17, 21, 0, 20, 21, 22, 0), + gsSP2Triangles(22, 21, 23, 0, 22, 23, 24, 0), + gsSP2Triangles(24, 23, 25, 0, 24, 25, 26, 0), + gsSP2Triangles(10, 18, 20, 0, 11, 26, 12, 0), + gsSP2Triangles(11, 24, 26, 0, 17, 20, 18, 0), + gsSP2Triangles(19, 27, 28, 0, 29, 30, 31, 0), + gsSP1Triangle(31, 8, 29, 0), + gsSPVertex(D_86E04488, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 6, 8, 9, 0), + gsSP2Triangles(10, 11, 12, 0, 12, 9, 10, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 0, 16, 0), + gsSP2Triangles(15, 16, 17, 0, 17, 18, 19, 0), + gsSP2Triangles(17, 16, 18, 0, 18, 16, 20, 0), + gsSP2Triangles(20, 5, 18, 0, 20, 21, 5, 0), + gsSP2Triangles(21, 22, 5, 0, 21, 23, 24, 0), + gsSP2Triangles(25, 22, 26, 0, 22, 25, 27, 0), + gsSP2Triangles(28, 5, 22, 0, 22, 27, 28, 0), + gsSP1Triangle(29, 30, 31, 0), + gsSPSetGeometryMode(G_LIGHTING), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00518.s") +static u32 D_86E049F8[] = { + 0x09000000, 0x05000000, 0x1D030100, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00010000, + 0x05000000, 0x1D020101, 0x0000FF06, 0x00000000, 0x00000000, 0x0000CCCC, 0x00010000, 0x00010000, 0x05000000, + 0x2303FFFF, D_86E03E48, 0x0000FFFF, 0xFFFFFFFF, 0x22010000, D_86E04870, 0x1D010102, 0x03F400E0, 0xFB500000, + 0x00000000, 0x00014000, 0x00010000, 0x00010000, 0x05000000, 0x2301FFFF, D_86E03DD8, 0x0002FFFF, 0xFFFFFFFF, + 0x22010000, D_86E047C8, 0x06000000, 0x1D000103, 0x000000FA, 0xE3D40000, 0x00000000, 0x00117869, 0x0005FADE, + 0x00010000, 0x05000000, 0x2306FFFF, D_86E03E10, 0x0001FFFF, 0xFFFFFFFF, 0x22010000, D_86E04840, 0x06000000, + 0x06000000, 0x06000000, 0x06000000, 0x04000000, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0063C.s") +static u32 D_86E04AE0[] = { + 0x17000003, 0x00000094, D_86E03DB0, 0x00000000, D_86E03E88, 0x05000000, 0x1C000000, 0x00001999, + 0x00001999, 0x00001999, 0x05000000, 0x03000000, D_86E049F8, 0x06000000, 0x06000000, 0x01000000, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0073C.s") +static s16 D_86E04B20 = 0; +static s16 D_86E04B24 = 1; +static s16 D_86E04B28 = 0; +static unk_func_8790002C* D_86E04B2C = D_86E04D60; +static unk_func_8790002C* D_86E04B30 = D_86E05830; +static u32 D_86E04B34[] = { + 0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0xFFE20032, 0x00000000, 0x00000000, + 0x05000000, 0x0D000000, 0x05000000, 0x14000000, 0x002B0012, 0xFFFFFF32, 0x16FFFFFF, 0x0F000003, + 0x05000000, 0x1F00FFFF, 0x00000000, 0x00000000, 0xFFFE0000, 0x00640064, 0x00640000, 0x05000000, + 0x00000000, D_86E04AE0, 0x06000000, 0x06000000, 0x05000000, 0x0A000000, &D_800AC840, 0x06000000, + 0x06000000, 0x06000000, 0x03000000, D_87806398, 0x06000000, 0x01000000, +}; +static Vec3f D_86E04BCC[] = { + { -54.0f, 0.0f, 0.0f }, + { -18.0f, 0.0f, 0.0f }, + { 18.0f, 0.0f, 0.0f }, + { 54.0f, 0.0f, 0.0f }, +}; +static unk_D_86E04BFC D_86E04BFC[] = { + { { -54.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, + { { -18.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, + { { 18.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, + { { 54.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, +}; +static unk_func_87801684 D_86E04C5C[] = { + { D_0303ED80, 0xE }, { D_0303F180, 2 }, { D_0303F580, 6 }, { D_0303F180, 2 }, { NULL, 0 }, +}; +static unk_func_87801684 D_86E04C84[] = { + { D_03040580, 0x12 }, { D_03040980, 2 }, { D_03040D80, 8 }, { D_03040980, 2 }, { NULL, 0 }, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E007BC.s") +void func_86E00020(s16 arg0, s16 arg1) { + s32 var_s0 = 0; + s32 sp28; + s32 sp24; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E007CC.s") + if (arg1 == -1) { + sp24 = 0; + sp28 = 0; + } else { + sp28 = arg1; + sp24 = 4; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00924.s") + switch (arg0) { + case 1: + var_s0 = 0x40001; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00AF4.s") + case 2: + var_s0 = 0x40002; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00BDC.s") + case 5: + var_s0 = 0x40003; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00C34.s") + case 6: + var_s0 = 0x40004; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00CAC.s") + case 7: + var_s0 = 0x40005; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00D78.s") + case 8: + var_s0 = 0x40006; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00ED0.s") + case 9: + var_s0 = 0x40007; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00F60.s") + case 10: + func_8004B1CC(0x11); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E00FD8.s") + case 11: + func_8004B9C4(0x3C); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0103C.s") + case 12: + func_8004B1CC(0xC1); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E010E8.s") + case 13: + func_80048B90(3); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01188.s") + case 14: + func_8004FC60(1, arg1); + func_8004FC60(2, arg1); + D_8790604A = 1; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01310.s") + case 15: + func_8004B094(arg1); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01414.s") + case 16: + func_8004B154(); + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01428.s") + if (var_s0 != 0) { + D_87903DBC++; + func_8004D9B0(var_s0, sp28, sp24); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E016EC.s") +void func_86E001A0(s16 arg0, s16 arg1) { + if (D_8790604A == 0) { + func_86E00020(arg0, arg1); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0172C.s") +void func_86E001E4(unk_func_8790002C* arg0, s32 arg1) { + func_8790060C(arg0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E017C0.s") + arg0->unk_16C.x = 1.0f; + arg0->unk_16C.y = 1.0f; + arg0->unk_16C.z = 1.0f; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0182C.s") + arg0->unk_1A8.x = D_86E04BCC[arg1].x; + arg0->unk_1A8.y = D_86E04BCC[arg1].y; + arg0->unk_1A8.z = D_86E04BCC[arg1].z; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01898.s") + if (arg0->unk_23C == 0x9E) { + arg0->unk_1A8.z -= 10.0f; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01904.s") + arg0->unk_21A = 0; + arg0->unk_21C = 0; + arg0->unk_21E = 0; + arg0->unk_25C = 0x190; + arg0->unk_258 = arg0->unk_25C; + arg0->unk_2A6 = 5; + arg0->unk_1E4 = arg0->unk_28C * 0.5f; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01990.s") + func_8001BD04(&arg0->unk_000, 0); + func_80017788(&arg0->unk_000); + arg0->unk_000.unk_01C = 0; + func_87900770(arg0); + arg0->unk_2AC = D_879060C4[arg1]; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E019B8.s") +void func_86E002E4(void) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E019F4.s") + D_86E04B2C = D_86E04D60; + for (i = 0; i < 4; i++) { + func_86E001E4(D_86E04B2C, i); + D_86E04B2C++; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01B08.s") +void func_86E0034C(unk_func_8790002C* arg0) { + arg0->unk_25A++; + arg0->unk_272 = 4; + arg0->unk_000.unk_01C = 1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01E34.s") +void func_86E0036C(unk_func_8790002C* arg0) { + if (arg0->unk_29A != 0) { + arg0->unk_29A--; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01EB0.s") + if ((D_879060BC->buttonDown & 0x8000) && (arg0->unk_23E == 0) && (arg0->unk_240 == 0) && (arg0->unk_2AA == 0) && + (arg0->unk_29A == 0)) { + arg0->unk_23E = 1; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01EE8.s") + switch (arg0->unk_23E) { + case 1: + func_86E0034C(arg0); + func_879002B8(arg0, 1, -1, 1); + func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_879029F0, &D_87903E40, 4); + arg0->unk_23E++; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01F50.s") + case 2: + if (func_80017484(&arg0->unk_000, 5) != 0) { + arg0->unk_000.unk_000.unk_02 &= ~0x20; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E01F8C.s") + if (!(D_879060BC->buttonDown & 0x8000) || (arg0->unk_2AA != 0)) { + arg0->unk_23E = 0; + arg0->unk_000.unk_000.unk_02 |= 0x20; + } else if ((D_879060BC->buttonDown & 0x8000) != 0) { + func_86E0034C(arg0); + } + break; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02150.s") +void func_86E004FC(unk_func_8790002C* arg0) { + if (arg0->unk_2AC != 0) { + arg0->unk_244 = 0; + arg0->unk_242 = 0; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02170.s") +s32 func_86E00518(unk_func_8790002C* arg0, s32 arg1) { + s32 sp1C; + s32 sp18; + s32 var_v1; + s32 temp_v0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E021D8.s") + switch (D_87906046) { + case 0: + if (arg1 < 0xA) { + sp1C = 0x32; + } else { + sp1C = 0x46; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02308.s") + case 1: + if (arg1 < 0xA) { + sp1C = 0x50; + } else { + sp1C = 0x5A; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E026D0.s") + case 2: + if (arg1 < 3) { + sp1C = 0x5A; + } else if (arg1 < 8) { + sp1C = 0x5F; + } else { + sp1C = 0x62; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E027D4.s") + case 3: + if (arg1 < 3) { + sp1C = 0x60; + } else if (arg1 < 8) { + sp1C = 0x61; + } else { + sp1C = 0x62; + } + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E027FC.s") + sp18 = func_878001E8(0x64); + temp_v0 = func_878001E8(0x64); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02880.s") + if (sp18 < sp1C) { + var_v1 = 0; + } else if (temp_v0 < 0x32) { + var_v1 = 1; + } else { + var_v1 = 2; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02924.s") + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E0296C.s") +void func_86E0063C(unk_func_8790002C* arg0, s32 arg1) { + s32 sp2C; + s32 sp28; + u32 sp24; + u32 temp_s1 = func_878001E8(arg1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02974.s") + switch (D_87906046) { + case 0: + sp2C = func_878001E8(0xA) + 2; + sp28 = arg1 - temp_s1; + sp2C += sp28; + sp24 = func_878001E8(3); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02A28.s") + case 1: + sp2C = func_878001E8(5) + 2; + sp28 = arg1 - temp_s1; + sp2C += sp28; + sp24 = 0; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02A64.s") + case 2: + sp2C = func_878001E8(4); + sp28 = arg1 - temp_s1; + sp2C += sp28; + sp24 = 0; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02BB0.s") + case 3: + sp2C = func_878001E8(3); + sp28 = arg1 - temp_s1; + sp2C += sp28; + sp24 = 0; + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02C5C.s") + arg0->unk_244 = temp_s1; + arg0->unk_29E = sp2C; + arg0->unk_2B2 = sp24; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/20/fragment20/func_86E02E40.s") +void func_86E0073C(unk_func_8790002C* arg0, s32 arg1) { + u32 sp2C; + UNUSED s32 pad[3]; + u32 sp1C; + s32 var_a0; + s32 var_a2; + u32 temp_v0_2; + + if (arg1 < 5) { + sp2C = 0; + var_a0 = 0; + var_a2 = arg1; + } else { + sp1C = arg1 - 4; + sp2C = func_878001E8(sp1C); + temp_v0_2 = func_878001E8(sp1C - sp2C); + var_a0 = temp_v0_2 + 2; + var_a2 = ((arg1 - sp2C) - temp_v0_2) - 2; + } + + arg0->unk_244 = sp2C; + arg0->unk_29E = var_a0; + arg0->unk_2B2 = var_a2; +} + +void func_86E007BC(unk_func_8790002C* arg0, s32 arg1) { + arg0->unk_244 = arg1; + arg0->unk_29E = 0; + arg0->unk_2B2 = 0; +} + +void func_86E007CC(unk_func_8790002C* arg0, s32 arg1) { + s32 i; + s32 sp20; + s32 var_t0 = 0; + + if (arg0->unk_240 == 0) { + switch (D_87906046) { + case 0: + sp20 = 0x1E; + break; + + case 1: + sp20 = 0x14; + break; + + case 2: + sp20 = 0xD; + break; + + case 3: + sp20 = 0xC; + } + + D_86E04B30 = D_86E05830; + for (i = 0; i < 20; i++) { + if ((D_86E04B30->unk_270 != 0) && (arg1 == D_86E04B30->unk_266)) { + if (D_86E04B30->unk_29E < sp20) { + var_t0 = 1; + sp20 = D_86E04B30->unk_29E; + } + } + D_86E04B30++; + } + + sp20--; + if (var_t0 != 0) { + if (sp20 < 0) { + sp20 = 0; + } + arg0->unk_242 = 1; + + switch (func_86E00518(arg0, sp20)) { + case 0: + func_86E0063C(arg0, sp20); + break; + + case 1: + func_86E0073C(arg0, sp20); + break; + + case 2: + func_86E007BC(arg0, sp20); + break; + } + } + } +} + +void func_86E00924(unk_func_8790002C* arg0, s32 arg1) { + if (arg0->unk_242 == 0) { + func_86E007CC(arg0, arg1); + } + + switch (arg0->unk_242) { + case 0x1: + arg0->unk_244--; + if (arg0->unk_244 < 0) { + if ((arg0->unk_2AA == 0) && (arg0->unk_240 == 0)) { + if (arg0->unk_29E > 0) { + func_879002B8(arg0, 1, -1, 1); + arg0->unk_23E = 1; + arg0->unk_272 = 4; + arg0->unk_242++; + func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_879029F0, &D_87903E40, 4); + } else { + arg0->unk_242 = 0x64; + } + } else { + arg0->unk_242 = 0; + } + } + break; + + case 0x2: + arg0->unk_29E--; + if (arg0->unk_29E < 0) { + arg0->unk_000.unk_000.unk_02 |= 0x20; + arg0->unk_242 = 0x64; + return; + } + + arg0->unk_25A++; + arg0->unk_272 = 4; + arg0->unk_000.unk_01C = 1; + if (func_80017484(&arg0->unk_000, 5) != 0) { + arg0->unk_000.unk_000.unk_02 &= ~0x20; + } + break; + + case 0x64: + arg0->unk_2B2--; + if (arg0->unk_2B2 <= 0) { + arg0->unk_23E = 0; + arg0->unk_242 = 0; + } + break; + } +} + +void func_86E00AF4(void) { + s32 i; + + D_879060BC = gPlayer1Controller; + D_86E04B2C = D_86E04D60; + + for (i = 0; i < 4; i++) { + D_86E04B2C->unk_000.unk_01C = 0; + D_86E04B2C->unk_272 = 0; + + if (D_87903DA4 != 0) { + if (D_86E04B2C->unk_2AC == 0) { + func_86E0036C(D_86E04B2C); + } else { + func_86E00924(D_86E04B2C, i); + } + } + + func_87900770(D_86E04B2C); + func_87900808(D_86E04B2C); + + D_86E04B2C++; + D_879060BC++; + } +} + +s32 func_86E00BDC(void) { + return func_879001A4(D_86E04B30, &D_86E04D60[D_86E04B30->unk_266]); +} + +s32 func_86E00C34(s32 arg0) { + s32 sp1C = 0; + + if (func_86E00BDC() != 0) { + D_86E04B2C->unk_260 = 1; + if (D_86E04B2C->unk_272 != 0) { + func_86E001A0(7, arg0); + sp1C = 1; + } else { + D_86E04B2C->unk_240 = 1; + func_86E004FC(D_86E04B2C); + sp1C = 2; + } + } + return sp1C; +} + +void func_86E00CAC(unk_func_8790002C* arg0, s32 arg1) { + s32 i; + s32 temp_v0; + + D_86E04B30 = D_86E05830; + + for (i = 0; i < 20; i++) { + if ((D_86E04B30->unk_270 != 0) && (arg1 == D_86E04B30->unk_266) && (D_86E04B30->unk_260 == 0)) { + temp_v0 = func_86E00C34(arg1); + if (temp_v0 != 0) { + D_86E04B30->unk_260 = 1; + if (temp_v0 == 1) { + D_86E04B30->unk_272 = 1; + } else { + D_86E04B30->unk_272 = 0; + } + break; + } + } + D_86E04B30++; + } +} + +void func_86E00D78(unk_func_8790002C* arg0, s32 arg1) { + if ((D_86E04B2C->unk_25A > 0) && (arg0->unk_2A8 == 0)) { + if (D_86E04B2C->unk_25A >= 0x28) { + D_86E04B2C->unk_258 -= D_86E04B2C->unk_25A; + D_86E04B2C->unk_25A = 0; + } else { + D_86E04B2C->unk_25A--; + D_86E04B2C->unk_258--; + } + + if (D_86E04B2C->unk_258 < 0) { + D_86E04B2C->unk_258 = 0; + } + } + + if (D_86E04B2C->unk_258 == 0) { + if (D_86E04B2C->unk_2A4 == 0) { + func_86E001A0(9, arg1); + func_879002B8(D_86E04B2C, 3, 1, 0); + D_86E04B2C->unk_2A4 = 1; + D_86E04B2C->unk_2AA = 1; + } + } else { + switch (D_86E04B2C->unk_240) { + case 1: + D_86E04B2C->unk_25A += 0x1E; + func_879002B8(D_86E04B2C, 2, 0, 1); + func_86E001A0(8, arg1); + D_86E04B2C->unk_240++; + break; + + case 2: + if (D_86E04B2C->unk_248 == 0) { + D_86E04B2C->unk_240 = 0; + } + break; + } + } +} + +void func_86E00ED0(void) { + s32 i; + + D_86E04B2C = D_86E04D60; + + for (i = 0; i < 4; i++) { + if (D_87903DA4 != 0) { + func_86E00CAC(D_86E04B2C, i); + func_86E00D78(D_86E04B2C, i); + } + D_86E04B2C++; + } +} + +void func_86E00F60(void) { + func_879003A0(D_86E04B2C); + + D_86E04B2C->unk_000.unk_024.x = D_86E04B2C->unk_190.x; + D_86E04B2C->unk_000.unk_024.y = D_86E04B2C->unk_190.y; + D_86E04B2C->unk_000.unk_024.z = D_86E04B2C->unk_190.z; + + D_86E04B2C->unk_000.unk_01E.x = D_86E04B2C->unk_214.x; + D_86E04B2C->unk_000.unk_01E.y = D_86E04B2C->unk_214.y; + D_86E04B2C->unk_000.unk_01E.z = D_86E04B2C->unk_214.z; +} + +void func_86E00FD8(void) { + s32 i; + + D_86E04B2C = D_86E04D60; + + for (i = 0; i < 4; i++) { + func_86E00F60(); + D_86E04B2C++; + } +} + +void func_86E0103C(unk_func_8790002C* arg0, s32 arg1) { + func_8790060C(arg0); + arg0->unk_266 = arg1; + + arg0->unk_1A8.x = D_86E04BFC[arg1].unk_00.x; + arg0->unk_1A8.y = D_86E04BFC[arg1].unk_00.y; + arg0->unk_1A8.z = D_86E04BFC[arg1].unk_00.z; + + arg0->unk_270 = 0; + arg0->unk_288 = D_86E04BFC[arg1].unk_12; + arg0->unk_28C = D_86E04BFC[arg1].unk_14; + + arg0->unk_16C.x = 0.5f; + arg0->unk_16C.y = 0.5f; + arg0->unk_16C.z = 0.5f; + + arg0->unk_000.unk_000.unk_01 &= ~1; + + func_87900770(arg0); +} + +void func_86E010E8(void) { + s32 i; + s32 j; + + D_86E04B30 = D_86E05830; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 5; j++) { + func_86E0103C(D_86E04B30, i); + D_86E04B30++; + } + } + + D_86E04B20 = 0; + D_86E04B24 = 1; +} + +void func_86E01188(void) { + s32 i; + s32 j; + s32 var_s1; + s32 sp40; + s32 var_s5; + unk_func_8790002C* ptr; + + switch (D_87906046) { + default: + var_s5 = sp40; + break; + + case 0: + var_s5 = func_878001E8(0x14) + 0xF; + break; + + case 1: + var_s5 = func_878001E8(0x14) + 0xA; + break; + + case 2: + var_s5 = func_878001E8(0x1E) + 5; + break; + + case 3: + var_s5 = func_878001E8(0x1E) + 5; + break; + } + + ptr = D_86E04D60; + for (i = 0; i < 4; i++, ptr++) { + if (ptr->unk_2AA == 0) { + var_s1 = 0; + D_86E04B30 = &D_86E05830[i * 5]; + + for (j = 0; j < D_86E04B24; j++) { + func_86E0103C(D_86E04B30, i); + + D_86E04B30->unk_23E = 1; + D_86E04B30->unk_29E = var_s1; + + var_s1 += var_s5; + D_86E04B30++; + } + } + } +} + +void func_86E01310(unk_func_8790002C* arg0) { + s16 temp_v1 = (D_86E04B20 * 4) + 0x28; + s16 temp_a1 = arg0->unk_266; + + arg0->unk_29E = temp_v1 - 1; + arg0->unk_1A8.y += D_86E04BFC[temp_a1].unk_00.y + D_86E04D60[temp_a1].unk_28C; + + arg0->unk_210 = 0.7f; + arg0->unk_1F8 = 0.0f; + arg0->unk_1FC = temp_v1 * arg0->unk_210 * 0.5f; + + arg0->unk_200 = + ((D_86E04D60[temp_a1].unk_1A8.z + (D_86E04D60[temp_a1].unk_288 * 0.5f)) - arg0->unk_1A8.z) / temp_v1; + arg0->unk_270 = 1; + + arg0->unk_000.unk_000.unk_01 |= 1; + func_8001BD04(&arg0->unk_000, 0); +} + +void func_86E01414(unk_func_8790002C* arg0) { + arg0->unk_23E = 0; + arg0->unk_000.unk_000.unk_01 &= ~1; +} + +void func_86E01428(unk_func_8790002C* arg0) { + UNUSED s32 pad[3]; + s16 temp_a1 = arg0->unk_266; + Vec3f sp3C; + + if ((D_87903DA8 != 0) || (D_86E04D60[temp_a1].unk_258 == 0)) { + switch (arg0->unk_23E) { + case 1: + arg0->unk_23E = 0; + break; + + case 2: + arg0->unk_270 = 0; + arg0->unk_23E = 0x64; + break; + } + } + + switch (arg0->unk_23E) { + case 0x1: + arg0->unk_29E--; + if (arg0->unk_29E <= 0) { + func_86E001A0(5, temp_a1); + func_86E01310(arg0); + arg0->unk_23E++; + } + break; + + case 0x2: + arg0->unk_29E--; + if (arg0->unk_29E < 0) { + arg0->unk_29E = 0; + } + + if (arg0->unk_260 != 0) { + arg0->unk_270 = 0; + if (arg0->unk_272 != 0) { + arg0->unk_1FC = 5.0f; + arg0->unk_200 = 1.5f; + func_86E01414(arg0); + func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_87901F04, &D_87903E28, 4); + } else { + arg0->unk_23E++; + } + } + break; + + case 0x3: + arg0->unk_1FC = 7.0f; + arg0->unk_200 = 3.0f; + + sp3C.x = arg0->unk_190.x; + sp3C.y = 0.0f; + sp3C.z = arg0->unk_190.z; + + func_81407D48(1.0f, sp3C, arg0->unk_214, func_87902068, &D_87903E10, 4); + arg0->unk_23E++; + break; + + case 0x4: + if (arg0->unk_190.y < -10.0f) { + func_86E01414(arg0); + } + break; + + case 0x64: + if (func_814004D8(&arg0->unk_000.unk_01D, 0, 0x40) != 0) { + func_86E01414(arg0); + } + break; + } +} + +void func_86E016EC(unk_func_8790002C* arg0) { + f32 temp_fv0; + f32 temp_fv0_2; + f32 temp_fv0_3; + + arg0->unk_190.x = arg0->unk_19C.x = arg0->unk_1A8.x + arg0->unk_1C0.x; + arg0->unk_190.y = arg0->unk_19C.y = arg0->unk_1A8.y + arg0->unk_1C0.y; + arg0->unk_190.z = arg0->unk_19C.z = arg0->unk_1A8.z + arg0->unk_1C0.z; +} + +void func_86E0172C(unk_func_8790002C* arg0) { + if (arg0->unk_23E != 0) { + arg0->unk_1F8 += arg0->unk_204; + arg0->unk_1FC += arg0->unk_208 - arg0->unk_210; + arg0->unk_200 += arg0->unk_20C; + arg0->unk_1C0.x += arg0->unk_1F8; + arg0->unk_1C0.y += arg0->unk_1FC; + arg0->unk_1C0.z += arg0->unk_200; + } + + func_86E016EC(arg0); +} + +void func_86E017C0(void) { + s32 i; + + D_86E04B30 = D_86E05830; + for (i = 0; i < 20; i++) { + func_86E01428(D_86E04B30); + func_86E0172C(D_86E04B30); + D_86E04B30++; + } +} + +void func_86E0182C(unk_func_8790002C* arg0) { + func_879003A0(arg0); + + arg0->unk_000.unk_030.x = arg0->unk_16C.x; + arg0->unk_000.unk_030.y = arg0->unk_16C.y; + arg0->unk_000.unk_030.z = arg0->unk_16C.z; + + arg0->unk_000.unk_024.x = arg0->unk_190.x; + arg0->unk_000.unk_024.y = arg0->unk_190.y; + arg0->unk_000.unk_024.z = arg0->unk_190.z; + + arg0->unk_000.unk_01E.x = arg0->unk_214.x; + arg0->unk_000.unk_01E.y = arg0->unk_214.y; + arg0->unk_000.unk_01E.z = arg0->unk_214.z; +} + +void func_86E01898(void) { + s32 var_s1; + + D_86E04B30 = D_86E05830; + var_s1 = 0; + do { + func_86E016EC(D_86E04B30); + func_86E0182C(D_86E04B30); + var_s1 += 1; + D_86E04B30 = &D_86E04B30[1]; + } while (var_s1 != 0x14); +} + +void func_86E01904(void) { + D_87906054 = D_87906050->unk_00.unk_0C; + + D_87906060 = -0x200; + D_87906062 = 0; + D_87906064 = 0xBE; + D_87906066 = 0x23; + D_87906068 = 0x32; + D_8790606A = 0x1900; + + D_8790606C.x = 0; + D_8790606C.y = 0x2A; + D_8790606C.z = 0; + + func_87900B64(); +} + +void func_86E01990(void) { + func_87900C5C(); + func_87900B64(); +} + +void func_86E019B8(void) { + func_87900854(); + func_86E010E8(); + func_86E002E4(); + func_86E01904(); + D_87903DA4 = 0; +} + +void func_86E019F4(void) { + s32 i; + s32 var_a2; + + D_86E04B30 = D_86E05830; + switch (D_86E04B28) { + case 1: + func_86E01188(); + D_86E04B28 += 1; + break; + + case 2: + var_a2 = 1; + for (i = 0; i < 20; i++) { + if (D_86E04B30->unk_23E != 0) { + var_a2 = 0; + break; + } + D_86E04B30++; + } + + if (var_a2 != 0) { + if (D_87903DA8 != 0) { + D_86E04B28 = 0; + return; + } + + D_86E04B28 = 1; + D_86E04B20++; + if (D_86E04B20 >= 5) { + D_86E04B20 = 0; + D_86E04B24++; + if (D_86E04B24 >= 6) { + D_86E04B24 = 1; + } + } + } + } +} + +s32 func_86E01B08(void) { + UNUSED s32 pad[2]; + s32 i; + s32 var_a3 = 5; + s32 var_t2 = 0; + s32 var_t1 = 0; + s32 var_t3 = 0; + s32 var_v0_5; + + D_86E04B2C = D_86E04D60; + + for (i = 0; i < 4; i++) { + if (D_86E04B2C->unk_2A6 < var_a3) { + var_a3 = D_86E04B2C->unk_2A6; + } + + if (D_86E04B2C->unk_2A4 == 1) { + var_t1++; + } + + if (D_86E04B2C->unk_2A4 == 2) { + var_t2++; + } + + D_86E04B2C++; + } + + if (var_t1 != 0) { + var_a3 -= var_t1; + D_86E04B2C = D_86E04D60; + for (i = 0; i < 4; i++) { + if (D_86E04B2C->unk_2A4 == 1) { + D_86E04B2C->unk_2A4 = 2; + D_86E04B2C->unk_2A6 = var_a3; + } + D_86E04B2C++; + } + } + + var_a3 = var_t1 + var_t2; + var_v0_5 = 0; + if (3 == var_a3) { + var_v0_5 = 1; + } else if (var_t1 == 4) { + var_v0_5 = 2; + } else if ((var_t1 >= 2) && (var_a3 == 4)) { + var_v0_5 = 3; + } + + D_86E04B2C = D_86E04D60; + + switch (var_v0_5) { + case 1: + for (i = 0; i < 4; i++) { + if (D_86E04B2C->unk_2A6 == 5) { + D_86E04B2C->unk_2A8 = 1; + D_86E04B2C->unk_2AA = 1; + D_86E04B2C->unk_2A6 = 1; + var_t3 = 1; + func_87802F00(i); + break; + } + D_86E04B2C++; + } + break; + + case 2: + var_t3 = 1; + for (i = 0; i < 4; i++) { + D_86E04B2C->unk_2AA = 1; + D_86E04B2C->unk_2A6 = 0; + D_86E04B2C++; + } + break; + + case 3: + for (i = 0; i < 4; i++) { + if (D_86E04B2C->unk_2A6 == 1) { + D_86E04B2C->unk_2AA = 1; + D_86E04B2C->unk_2A6 = 5; + var_t3 = 1; + } + D_86E04B2C++; + } + break; + } + + if (var_t3 != 0) { + D_87903DA8 = 1; + } + return var_t3; +} + +s32 func_86E01E34(void) { + s32 i; + s32 var_s3 = 0; + unk_func_8790002C* var_s0; + + for (i = 0, var_s0 = D_86E04D60; i < 4; i++, var_s0++) { + if (var_s0->unk_2A8 != 0) { + func_879002B8(var_s0, 4, -1, 0); + var_s3 = 1; + } + } + + return var_s3; +} + +void func_86E01EB0(void) { + s32 i; + + D_86E04B2C = D_86E04D60; + for (i = 0; i < 4; i++) { + if (D_86E04B2C) {} + + D_86E04B2C++; + } +} + +s32 func_86E01EE8(void) { + s32 sp1C = 0; + s32 temp_v0 = func_87802974(); + + if (temp_v0 == -2) { + sp1C = 1; + } + + if (temp_v0 > 0) { + func_86E001A0(1, 0); + } else if (temp_v0 == 0) { + func_86E001A0(2, 0); + func_86E001A0(0xA, 0); + } + + return sp1C; +} + +s32 func_86E01F50(void) { + s32 i; + s32 ret = 1; + unk_func_8790002C* var_v0 = D_86E05830; + + for (i = 0; i < 20; i++, var_v0++) { + if (var_v0->unk_23E != 0) { + ret = 0; + break; + } + } + return ret; +} + +void func_86E01F8C(void) { + switch (D_87903DA0) { + case 1: + D_87906040 = 0xF; + D_87903DA0++; + break; + + case 2: + D_87906040--; + if (D_87906040 < 0) { + func_8780295C(1); + D_87903DA0++; + } + break; + + case 3: + if (func_86E01EE8() != 0) { + D_86E04B28 = 1; + D_87903DA4 = 1; + D_87903DC4 = 0; + D_87903DA0++; + } + break; + + case 4: + if (1) {} + + if (func_86E01B08() != 0) { + D_87903DA0++; + } else { + func_86E019F4(); + } + break; + + case 5: + if (func_86E01F50() != 0) { + D_87906040 = 0xA; + D_87903DA0++; + } + break; + + case 6: + D_87906040--; + if (D_87906040 < 0) { + func_86E01E34(); + func_87802EB8(1); + D_87903DA0++; + } + break; + + case 7: + if (D_8780FC96 != 0) { + D_87903DA0++; + D_87903DAC = 1; + } + break; + } + + func_878025D0(); + func_86E01EB0(); +} + +void func_86E02150(void) { + func_87901C20(); +} + +void func_86E02170(void) { + s32 i; + + for (i = 0; i < 4; i++) { + func_8780024C(0x1A + i * 0x4A, 0xD0, 0x32, D_86E04D60[i].unk_258, D_86E04D60[i].unk_25C); + } +} + +void func_86E021D8(void) { + s32 i; + s32 tmp; + + gSPDisplayList(gDisplayListHead++, D_8006F518); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, D_879060C8); + + for (i = 0, tmp = 0x26; i < 4; tmp += 0x4A, i++) { + if (D_879060C4[i] == 0) { + func_87801644(i, tmp, 0xD6, 0.7f); + } else { + func_87801644(-1 - i, tmp, 0xD6, 0.7f); + } + } + + gSPDisplayList(gDisplayListHead++, D_8006F630); +} + +void func_86E02308(void) { + UNUSED s32 pad; + s32 sp38; + s32 sp34; + + func_80020460(0x18, 0x16, 0x110, 0x90, 0x15); + func_80020460(0x18, 0xA5, 0x110, 0x36, 0x14B); + func_8001F3F4(); + func_8001F470(); + func_8001EBE0(2, 0); + func_8001F3B4(0xC); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + func_8001F36C(0xF9, 0xF4, 0, 0xFF); + func_8001F1E8(0xA0 - (func_878013D4(D_86E08E44, func_8002D7C0(NULL, 0, D_87806330, 0x44)) / 2), 0x20, + func_8002D7C0(NULL, 0, D_87806330, 0x44)); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + func_8001F36C(0xFF, 0xFF, 0xFF, 0xFF); + func_8001F1E8(0x28, 0x34, func_8002D7C0(NULL, 0, D_87806330, 0x45)); + func_8001F1E8(0x28, 0x58, func_8002D7C0(NULL, 0, D_87806330, 0x46)); + func_8001F1E8(0x28, 0x7C, func_8002D7C0(NULL, 0, D_87806330, 0x47)); + func_8001F1E8(0x28, 0x94, func_8002D7C0(NULL, 0, D_87806330, 0x48)); + func_8001F324(0xC8, 0xC8, 0xFF, 0xFF); + func_8001F36C(0x50, 0x50, 0xFF, 0xFF); + func_87801290(&sp38, &sp34, func_8002D7C0(NULL, 0, D_87806330, 0x45), func_8002D7C0(NULL, 0, D_87806330, 0x5F), + 0xC); + func_8001F1E8(sp38 + 0x28, sp34 + 0x34, func_8002D7C0(NULL, 0, D_87806330, 0x5F)); + func_87801290(&sp38, &sp34, func_8002D7C0(NULL, 0, D_87806330, 0x46), func_8002D7C0(NULL, 0, D_87806330, 0x5F), + 0xC); + func_8001F1E8(sp38 + 0x28, sp34 + 0x58, func_8002D7C0(NULL, 0, D_87806330, 0x5F)); + func_8001F1E8(0x8B, 0xB2, func_8002D7C0(NULL, 0, D_87806330, 0x5C)); + func_8001F1E8(0x8B, 0xC8, func_8002D7C0(NULL, 0, D_87806330, 0x5C)); + func_8001F324(0xC8, 0xC8, 0xFF, 0xFF); + func_8001F36C(0x50, 0x50, 0xFF, 0xFF); + func_8001F1E8(0xA2, 0xB2, func_8002D7C0(NULL, 0, D_87806330, 0x49)); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + func_8001F36C(0xFF, 0x80, 0x80, 0xFF); + func_8001F1E8(0xA2, 0xC8, func_8002D7C0(NULL, 0, D_87806330, 0x14)); + func_8001F4C4(); + func_8001F444(); +} + +void func_86E026D0(void) { + switch (D_87903DCC) { + case 3: + func_86E02308(); + + gSPDisplayList(gDisplayListHead++, D_8006F518); + + func_87801F48(2, 0x19, 0xA6); + func_87801684(0x74, 0xB0, D_86E04C5C); + func_87801824(0x74, 0xC6, D_86E04C84); + + gSPDisplayList(gDisplayListHead++, D_8006F630); + break; + + case 5: + func_879032BC(0x3E8); + break; + } + + if (D_87903DC4 == -2) { + func_8001EBE0(0x10, -2); + func_8001EBE0(4, -2); + } +} + +void func_86E027D4(void) { + func_87903260(); + func_86E026D0(); +} + +void func_86E027FC(s32 arg0) { + u8 sp1C[] = { 0, 0, 30 }; + u8 sp18[] = { 0, 0, 250 }; + + func_8001F3F4(); + func_8001EBE0(4, -2); + func_86E027D4(); + func_8001F444(); + + if (D_87906044 != 0) { + func_86E02170(); + func_86E021D8(); + } +} + +void func_86E02880(s32 arg0) { + func_800079C4(); + func_8000699C(&gDisplayListHead, 0xA6BF); + + if (D_8780FC94 == 0) { + func_80015348(); + } + + func_80015094(&D_87906050->unk_00); + func_87901C98(); + + if (D_87903DB0 == 0) { + if (D_8780FC98 == 0) { + func_86E027FC(arg0); + } + func_87804FD4(); + } else { + func_87900F44(); + } + + func_80007778(); +} + +void func_86E02924(void) { + func_86E019B8(); + func_800077B4(0xA); + func_80006C6C(0x10); + D_87903DC4 = 3; + D_87906046 = D_8780FA38; +} + +void func_86E0296C(void) { +} + +void func_86E02974(void) { + if ((D_87903DB0 == 0) && (D_87906044 == 0) && (func_80007604() == 0)) { + if (gPlayer1Controller->buttonPressed & 0x1000) { + D_87903DC4 = 1; + D_87903DA0 = 1; + D_87906044 = 1; + func_86E001A0(0xB, 0); + } else if ((D_8780FA2A == 0) && (gPlayer1Controller->buttonPressed & 0x4000)) { + func_86E001A0(0xD, 0); + func_87802EB8(2); + } + } +} + +void func_86E02A28(void) { + unk_func_8790002C* ptr = D_86E04D60; + + if ((gPlayer1Controller->buttonPressed & 0x8000) && (ptr->unk_23E == 0)) { + ptr->unk_29A = 4; + } +} + +void func_86E02A64(void) { + s32 var_s1 = 1; + + D_87903DBC = 0; + + func_87901620(); + func_87900558(); + + while (var_s1 != 0) { + func_87900528(); + + if (D_87903DA0 == 0) { + D_87906042 += 1; + if (D_87906042 < 0) { + D_87906042 = 0; + } + } + + func_86E02974(); + + if (D_8780FC94 == 0) { + func_8140C5D0(); + func_86E01F8C(); + func_86E00AF4(); + func_86E017C0(); + func_86E00ED0(); + func_86E01898(); + func_86E00FD8(); + func_86E02150(); + func_86E01990(); + } else { + func_86E02A28(); + } + + if ((D_87903DAC != 0) || (D_8780FC92 != 0)) { + var_s1 = 0; + } + + func_86E02880(1); + } +} + +void func_86E02BB0(void) { + s32 i; + + func_80006CB4(0x1E); + if (D_86E08E40 != 0) { + func_86E001A0(0xF, 0x1E); + } else { + func_86E001A0(0xE, 0x1E); + } + + for (i = 0; i < 30; i++) { + func_87900528(); + func_86E02880(2); + } + + while (func_800484E0() != 0) {} + + func_86E001A0(0x10, 0); +} + +void func_86E02C5C(void) { + static s16 D_86E04CB4[6][4] = { + { 0x9B, 0xA, 0x23, 0 }, { 0x9E, 0xA, 0x1E, 0 }, { 0, 0x13, 0, 0x28 }, + { -1, -0x19, 0, 0 }, { 0, 0x3C, 0, 0x20 }, { 0, 6, -1, -0x14 }, + }; + + s32 i; + MemoryBlock* temp_v0; + unk_D_86002F30* temp_s1_2; + s32 var_v1; + + temp_v0 = func_80002D10(main_pool_get_available(), 0); + D_87906050 = process_geo_layout(temp_v0, D_86E04B34); + func_80002D60(temp_v0); + func_8001BB20(); + + for (i = 0; i < 4; i++) { + func_8001BB58(&D_86E04D60[i].unk_000); + } + + for (i = 0; i < 20; i++) { + func_8001BB58(&D_86E05830[i].unk_000); + } + + func_8001987C(); + + for (i = 0; i < 4; i++) { + var_v1 = D_8780FA68[i] - 1; + if (D_8780FA68[i] == 0) { + var_v1 = func_878001E8(2); + } + + D_86E04D60[i].unk_23C = D_86E04CB4[var_v1][0]; + D_86E04D60[i].unk_168 = func_80019D18(D_86E04D60[i].unk_23C); + D_86E04D60[i].unk_288 = D_86E04CB4[var_v1][1]; + D_86E04D60[i].unk_28C = D_86E04CB4[var_v1][2]; + + func_8001BC34(&D_86E04D60[i].unk_000, 0, D_86E04D60[i].unk_23C, D_86E04D60[i].unk_168->unk_08->unk_00[0]); + func_8001BD04(&D_86E04D60[i].unk_000, 0); + + if (D_86E04D60) {} + } + + temp_s1_2 = func_80019D18(0x9C); + for (i = 0; i < 20; i++) { + D_86E05830[i].unk_23C = 0x9C; + D_86E05830[i].unk_168 = temp_s1_2; + + func_8001BC34(&D_86E05830[i].unk_000, 0, D_86E05830[i].unk_23C, temp_s1_2->unk_08->unk_00[0]); + func_8001BD04(&D_86E05830[i].unk_000, 0); + + D_86E05830[i].unk_000.unk_000.unk_01 &= ~1; + } +} + +s32 func_86E02E40(s32 arg0, s32 arg1) { + unk_func_80007444* sp24; + + if (arg0 == 1) { + D_86E08E40 = 1; + } else { + D_86E08E40 = 0; + } + + main_pool_push_state('MINI'); + + func_80005E40(0x40000, 0); + sp24 = func_80007444(0, 1, 3, 1, 2, 1); + D_86E08E44 = func_8001E94C(0x16, 0); + + ASSET_LOAD(D_1000000, common_menu1_ui, 0); + FRAGMENT_LOAD(fragment31); + func_80004454((((u32)D_8D000000 & 0x0FF00000) >> 0x14) - 0x10, _5C7A70_ROM_START, pokedex_area_model_ROM_START); + + func_86E02C5C(); + func_80007678(sp24); + func_86E02924(); + func_86E02A64(); + func_86E02BB0(); + func_800076C0(); + func_8001E9CC(); + func_80005EAC(); + + main_pool_pop_state('MINI'); + + return func_87803118(); +} diff --git a/src/fragments/20/fragment20.h b/src/fragments/20/fragment20.h new file mode 100644 index 00000000..089b7fd1 --- /dev/null +++ b/src/fragments/20/fragment20.h @@ -0,0 +1,66 @@ +#ifndef _FRAGMENT20_H_ +#define _FRAGMENT20_H_ + +#include "global.h" +#include "src/fragments/3/fragment3.h" + +void func_86E00020(s16 arg0, s16 arg1); +void func_86E001A0(s16 arg0, s16 arg1); +void func_86E001E4(unk_func_8790002C* arg0, s32 arg1); +void func_86E002E4(void); +void func_86E0034C(unk_func_8790002C* arg0); +void func_86E0036C(unk_func_8790002C* arg0); +void func_86E004FC(unk_func_8790002C* arg0); +s32 func_86E00518(unk_func_8790002C* arg0, s32 arg1); +void func_86E0063C(unk_func_8790002C* arg0, s32 arg1); +void func_86E0073C(unk_func_8790002C* arg0, s32 arg1); +void func_86E007BC(unk_func_8790002C* arg0, s32 arg1); +void func_86E007CC(unk_func_8790002C* arg0, s32 arg1); +void func_86E00924(unk_func_8790002C* arg0, s32 arg1); +void func_86E00AF4(void); +s32 func_86E00BDC(void); +s32 func_86E00C34(s32 arg0); +void func_86E00CAC(unk_func_8790002C* arg0, s32 arg1); +void func_86E00D78(unk_func_8790002C* arg0, s32 arg1); +void func_86E00ED0(void); +void func_86E00F60(void); +void func_86E00FD8(void); +void func_86E0103C(unk_func_8790002C* arg0, s32 arg1); +void func_86E010E8(void); +void func_86E01188(void); +void func_86E01310(unk_func_8790002C* arg0); +void func_86E01414(unk_func_8790002C* arg0); +void func_86E01428(unk_func_8790002C* arg0); +void func_86E016EC(unk_func_8790002C* arg0); +void func_86E0172C(unk_func_8790002C* arg0); +void func_86E017C0(void); +void func_86E0182C(unk_func_8790002C* arg0); +void func_86E01898(void); +void func_86E01904(void); +void func_86E01990(void); +void func_86E019B8(void); +void func_86E019F4(void); +s32 func_86E01B08(void); +s32 func_86E01E34(void); +void func_86E01EB0(void); +s32 func_86E01EE8(void); +s32 func_86E01F50(void); +void func_86E01F8C(void); +void func_86E02150(void); +void func_86E02170(void); +void func_86E021D8(void); +void func_86E02308(void); +void func_86E026D0(void); +void func_86E027D4(void); +void func_86E027FC(s32 arg0); +void func_86E02880(s32 arg0); +void func_86E02924(void); +void func_86E0296C(void); +void func_86E02974(void); +void func_86E02A28(void); +void func_86E02A64(void); +void func_86E02BB0(void); +void func_86E02C5C(void); +s32 func_86E02E40(s32 arg0, s32 arg1); + +#endif // _FRAGMENT20_H_ diff --git a/src/fragments/3/fragment3.h b/src/fragments/3/fragment3.h index 0b9e9135..d26507d7 100644 --- a/src/fragments/3/fragment3.h +++ b/src/fragments/3/fragment3.h @@ -11,21 +11,11 @@ typedef struct unk_func_8790002C { /* 0x168 */ unk_D_86002F30* unk_168; /* 0x16C */ Vec3f unk_16C; /* 0x178 */ char unk178[0x18]; - /* 0x190 */ f32 unk_190; - /* 0x194 */ f32 unk_194; - /* 0x198 */ f32 unk_198; - /* 0x19C */ f32 unk_19C; - /* 0x1A0 */ f32 unk_1A0; - /* 0x1A4 */ f32 unk_1A4; - /* 0x1A8 */ f32 unk_1A8; - /* 0x1AC */ f32 unk_1AC; - /* 0x1B0 */ f32 unk_1B0; - /* 0x1B4 */ f32 unk_1B4; - /* 0x1B8 */ f32 unk_1B8; - /* 0x1BC */ f32 unk_1BC; - /* 0x1C0 */ f32 unk_1C0; - /* 0x1C4 */ f32 unk_1C4; - /* 0x1C8 */ f32 unk_1C8; + /* 0x190 */ Vec3f unk_190; + /* 0x19C */ Vec3f unk_19C; + /* 0x1A8 */ Vec3f unk_1A8; + /* 0x1B4 */ Vec3f unk_1B4; + /* 0x1C0 */ Vec3f unk_1C0; /* 0x1CC */ f32 unk_1CC; /* 0x1D0 */ f32 unk_1D0; /* 0x1D4 */ f32 unk_1D4; @@ -42,9 +32,7 @@ typedef struct unk_func_8790002C { /* 0x208 */ f32 unk_208; /* 0x20C */ f32 unk_20C; /* 0x210 */ f32 unk_210; - /* 0x214 */ s16 unk_214; - /* 0x216 */ s16 unk_216; - /* 0x218 */ s16 unk_218; + /* 0x214 */ Vec3s unk_214; /* 0x21A */ s16 unk_21A; /* 0x21C */ s16 unk_21C; /* 0x21E */ s16 unk_21E; @@ -66,7 +54,8 @@ typedef struct unk_func_8790002C { /* 0x23E */ s16 unk_23E; /* 0x240 */ s16 unk_240; /* 0x242 */ s16 unk_242; - /* 0x244 */ char unk244[0x4]; + /* 0x244 */ s16 unk_244; + /* 0x246 */ char unk246[0x2]; /* 0x248 */ s16 unk_248; /* 0x24A */ s16 unk_24A; /* 0x24C */ s16 unk_24C; @@ -84,7 +73,7 @@ typedef struct unk_func_8790002C { /* 0x26A */ s16 unk_26A; /* 0x26C */ s16 unk_26C; /* 0x26E */ s16 unk_26E; - /* 0x270 */ char unk270[0x2]; + /* 0x270 */ s16 unk_270; /* 0x272 */ s16 unk_272; /* 0x274 */ f32 unk_274; /* 0x278 */ char unk278[0x4]; @@ -104,12 +93,13 @@ typedef struct unk_func_8790002C { /* 0x2A0 */ s16 unk_2A0; /* 0x2A2 */ s16 unk_2A2; /* 0x2A4 */ s16 unk_2A4; - /* 0x2A6 */ char unk2A6[0x2]; + /* 0x2A6 */ s16 unk_2A6; /* 0x2A8 */ s16 unk_2A8; /* 0x2AA */ s16 unk_2AA; /* 0x2AC */ s16 unk_2AC; /* 0x2AE */ s16 unk_2AE; - /* 0x2B0 */ char unk2B0[0x4]; + /* 0x2B0 */ char unk2B0[0x2]; + /* 0x2B2 */ s16 unk_2B2; } unk_func_8790002C; // size = 0x2B4 // Possibly unk_D_86002F34_alt7, unk_D_86002F34_alt8, @@ -147,8 +137,8 @@ extern unk_D_87903E10 D_87903E10; extern unk_D_87903E10 D_87903E28; extern unk_D_87903E10 D_87903E40; extern unk_D_87903E10 D_87903E58; - extern s16 D_87906040; +extern s16 D_87906042; extern s16 D_87906044; extern s16 D_87906046; extern s16 D_87906048; diff --git a/src/fragments/3/fragment3_1189B0.c b/src/fragments/3/fragment3_1189B0.c index a1600c19..e1097f79 100644 --- a/src/fragments/3/fragment3_1189B0.c +++ b/src/fragments/3/fragment3_1189B0.c @@ -28,17 +28,18 @@ ret_func_80004454 func_87900020(void) { } void func_8790002C(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - sqrtf(SQ(arg1->unk_19C - arg0->unk_19C) + SQ(arg1->unk_1A4 - arg0->unk_1A4)); + sqrtf(SQ(arg1->unk_19C.x - arg0->unk_19C.x) + SQ(arg1->unk_19C.z - arg0->unk_19C.z)); } void func_87900070(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - sqrtf(SQ(arg1->unk_19C - arg0->unk_19C) + SQ(arg1->unk_1A0 - arg0->unk_1A0) + SQ(arg1->unk_1A4 - arg0->unk_1A4)); + sqrtf(SQ(arg1->unk_19C.x - arg0->unk_19C.x) + SQ(arg1->unk_19C.y - arg0->unk_19C.y) + + SQ(arg1->unk_19C.z - arg0->unk_19C.z)); } s32 func_879000C4(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - f32 var_fv0 = arg1->unk_19C - arg0->unk_19C; - f32 var_fv1 = arg1->unk_1A0 - arg0->unk_1A0; - f32 var_fa0 = arg1->unk_1A4 - arg0->unk_1A4; + f32 var_fv0 = arg1->unk_19C.x - arg0->unk_19C.x; + f32 var_fv1 = arg1->unk_19C.y - arg0->unk_19C.y; + f32 var_fa0 = arg1->unk_19C.z - arg0->unk_19C.z; f32 var_fa1 = (arg0->unk_288 * arg0->unk_16C.y) + (arg1->unk_288 * arg1->unk_16C.y); s32 ret = 0; @@ -74,9 +75,9 @@ s32 func_879001A4(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { f32 tmp; s32 var_v1; - var_fv0 = arg1->unk_19C - arg0->unk_19C; - var_fv1 = arg1->unk_1A0 - arg0->unk_1A0; - var_fa0 = arg1->unk_1A4 - arg0->unk_1A4; + var_fv0 = arg1->unk_19C.x - arg0->unk_19C.x; + var_fv1 = arg1->unk_19C.y - arg0->unk_19C.y; + var_fa0 = arg1->unk_19C.z - arg0->unk_19C.z; var_v1 = 0; var_fa1 = (arg0->unk_288 * arg0->unk_16C.y) + (arg1->unk_288 * arg1->unk_16C.y); @@ -186,38 +187,38 @@ void func_87900558(void) { } void func_87900564(unk_func_8790002C* arg0) { - arg0->unk_1C0 = 0.0f; - arg0->unk_1A8 = 0.0f; - arg0->unk_190 = 0.0f; - arg0->unk_1C4 = 0.0f; - arg0->unk_1AC = 0.0f; - arg0->unk_194 = 0.0f; - arg0->unk_1C8 = 0.0f; - arg0->unk_1B0 = 0.0f; - arg0->unk_198 = 0.0f; + arg0->unk_1C0.x = 0.0f; + arg0->unk_1A8.x = 0.0f; + arg0->unk_190.x = 0.0f; + arg0->unk_1C0.y = 0.0f; + arg0->unk_1A8.y = 0.0f; + arg0->unk_190.y = 0.0f; + arg0->unk_1C0.z = 0.0f; + arg0->unk_1A8.z = 0.0f; + arg0->unk_190.z = 0.0f; } void func_87900594(unk_func_8790002C* arg0) { - arg0->unk_1A8 = 0.0f; - arg0->unk_1AC = 0.0f; - arg0->unk_1B0 = 0.0f; + arg0->unk_1A8.x = 0.0f; + arg0->unk_1A8.y = 0.0f; + arg0->unk_1A8.z = 0.0f; } void func_879005AC(unk_func_8790002C* arg0) { - arg0->unk_1C0 = 0.0f; - arg0->unk_1C4 = 0.0f; - arg0->unk_1C8 = 0.0f; + arg0->unk_1C0.x = 0.0f; + arg0->unk_1C0.y = 0.0f; + arg0->unk_1C0.z = 0.0f; } void func_879005C4(unk_func_8790002C* arg0) { arg0->unk_1FC = arg0->unk_1FC - arg0->unk_210; - arg0->unk_1C0 = arg0->unk_1C0 + arg0->unk_1F8; - arg0->unk_1C4 = arg0->unk_1C4 + (arg0->unk_1FC - arg0->unk_210); - arg0->unk_1C8 = arg0->unk_1C8 + arg0->unk_200; + arg0->unk_1C0.x = arg0->unk_1C0.x + arg0->unk_1F8; + arg0->unk_1C0.y = arg0->unk_1C0.y + (arg0->unk_1FC - arg0->unk_210); + arg0->unk_1C0.z = arg0->unk_1C0.z + arg0->unk_200; } void func_8790060C(unk_func_8790002C* arg0) { - arg0->unk_214 = arg0->unk_216 = arg0->unk_218 = 0; + arg0->unk_214.x = arg0->unk_214.y = arg0->unk_214.z = 0; arg0->unk_21A = arg0->unk_21C = arg0->unk_21E = 0; arg0->unk_220 = arg0->unk_222 = arg0->unk_224 = 0; arg0->unk_226 = arg0->unk_228 = arg0->unk_22A = 0; @@ -241,19 +242,14 @@ void func_8790060C(unk_func_8790002C* arg0) { arg0->unk_298 = 0; arg0->unk_16C.x = arg0->unk_16C.y = arg0->unk_16C.z = 1.0f; + arg0->unk_190.x = arg0->unk_190.y = arg0->unk_190.z = 0.0f; + arg0->unk_1A8.x = arg0->unk_1A8.y = arg0->unk_1A8.z = 0.0f; + + arg0->unk_1B4.z = 0.0f; + arg0->unk_1B4.y = 0.0f; + arg0->unk_1B4.x = 0.0f; + arg0->unk_1C0.x = arg0->unk_1C0.y = arg0->unk_1C0.z = 0.0f; - arg0->unk_198 = 0.0f; - arg0->unk_194 = 0.0f; - arg0->unk_190 = 0.0f; - arg0->unk_1B0 = 0.0f; - arg0->unk_1AC = 0.0f; - arg0->unk_1A8 = 0.0f; - arg0->unk_1BC = 0.0f; - arg0->unk_1B8 = 0.0f; - arg0->unk_1B4 = 0.0f; - arg0->unk_1C8 = 0.0f; - arg0->unk_1C4 = 0.0f; - arg0->unk_1C0 = 0.0f; arg0->unk_1D4 = 0.0f; arg0->unk_1D0 = 0.0f; arg0->unk_1CC = 0.0f; @@ -278,15 +274,15 @@ void func_8790060C(unk_func_8790002C* arg0) { } void func_87900770(unk_func_8790002C* arg0) { - arg0->unk_190 = arg0->unk_19C = arg0->unk_1A8 + arg0->unk_1C0; - arg0->unk_194 = arg0->unk_1A0 = arg0->unk_1AC + arg0->unk_1C4; - arg0->unk_198 = arg0->unk_1A4 = arg0->unk_1B0 + arg0->unk_1C8; + arg0->unk_190.x = arg0->unk_19C.x = arg0->unk_1A8.x + arg0->unk_1C0.x; + arg0->unk_190.y = arg0->unk_19C.y = arg0->unk_1A8.y + arg0->unk_1C0.y; + arg0->unk_190.z = arg0->unk_19C.z = arg0->unk_1A8.z + arg0->unk_1C0.z; - arg0->unk_1A0 = arg0->unk_1A0 + arg0->unk_1E4; + arg0->unk_19C.y = arg0->unk_19C.y + arg0->unk_1E4; - arg0->unk_214 = arg0->unk_21A + arg0->unk_226 + arg0->unk_232; - arg0->unk_216 = arg0->unk_21C + arg0->unk_228 + arg0->unk_234; - arg0->unk_218 = arg0->unk_21E + arg0->unk_22A + arg0->unk_236; + arg0->unk_214.x = arg0->unk_21A + arg0->unk_226 + arg0->unk_232; + arg0->unk_214.y = arg0->unk_21C + arg0->unk_228 + arg0->unk_234; + arg0->unk_214.z = arg0->unk_21E + arg0->unk_22A + arg0->unk_236; } void func_87900808(unk_func_8790002C* arg0) { @@ -294,13 +290,13 @@ void func_87900808(unk_func_8790002C* arg0) { arg0->unk_000.unk_030.y = arg0->unk_16C.y; arg0->unk_000.unk_030.z = arg0->unk_16C.z; - arg0->unk_000.unk_024.x = arg0->unk_190; - arg0->unk_000.unk_024.y = arg0->unk_194; - arg0->unk_000.unk_024.z = arg0->unk_198; + arg0->unk_000.unk_024.x = arg0->unk_190.x; + arg0->unk_000.unk_024.y = arg0->unk_190.y; + arg0->unk_000.unk_024.z = arg0->unk_190.z; - arg0->unk_000.unk_01E.x = arg0->unk_214; - arg0->unk_000.unk_01E.y = arg0->unk_216; - arg0->unk_000.unk_01E.z = arg0->unk_218; + arg0->unk_000.unk_01E.x = arg0->unk_214.x; + arg0->unk_000.unk_01E.y = arg0->unk_214.y; + arg0->unk_000.unk_01E.z = arg0->unk_214.z; } void func_87900854(void) { diff --git a/src/fragments/3/fragment3_1193E0.c b/src/fragments/3/fragment3_1193E0.c index 3bd5caca..6d64c424 100644 --- a/src/fragments/3/fragment3_1193E0.c +++ b/src/fragments/3/fragment3_1193E0.c @@ -4,7 +4,7 @@ #include "src/F420.h" s16 D_87906040; -s16 pad_D_87906042; +s16 D_87906042; s16 D_87906044; s16 D_87906046; s16 D_87906048; diff --git a/src/fragments/3/fragment3_11BF90.c b/src/fragments/3/fragment3_11BF90.c index e65789e4..df97c404 100644 --- a/src/fragments/3/fragment3_11BF90.c +++ b/src/fragments/3/fragment3_11BF90.c @@ -50,9 +50,9 @@ void func_87903778(unk_func_8790002C* arg0, f32 arg1, f32 arg2, f32 arg3, f32 ar arg0->unk_16C.y = arg1; arg0->unk_16C.z = arg1; - arg0->unk_1A8 = arg2; - arg0->unk_1AC = arg3; - arg0->unk_1B0 = arg4; + arg0->unk_1A8.x = arg2; + arg0->unk_1A8.y = arg3; + arg0->unk_1A8.z = arg4; arg0->unk_21A = arg5; arg0->unk_21C = arg6; arg0->unk_21E = arg7; diff --git a/src/geo_layout.c b/src/geo_layout.c index 780a287c..2b63b14c 100644 --- a/src/geo_layout.c +++ b/src/geo_layout.c @@ -8,7 +8,7 @@ extern GeoLayoutCommandProc GeoLayoutJumpTable[]; extern MemoryBlock* gGraphNodePool; extern unk_D_86002F34* gCurRootGraphNode; extern u32 gGeoLayoutStack[]; -extern struct GraphNode* gCurGraphNodeList[32]; +extern GraphNode* gCurGraphNodeList[32]; extern s16 gCurGraphNodeIndex; extern s16 gGeoLayoutStackIndex; extern s16 gGeoLayoutReturnIndex; @@ -81,7 +81,7 @@ void geo_layout_cmd_close_node(void) { gGeoLayoutCommand += 0x04 << CMD_SIZE_SHIFT; } -void func_80017AC4(struct GraphNode* arg0) { +void func_80017AC4(GraphNode* arg0) { if (arg0 != NULL) { gCurGraphNodeList[gCurGraphNodeIndex] = arg0; if (gCurGraphNodeIndex == 0) { @@ -400,7 +400,7 @@ void func_80018AD0(void) { gGeoLayoutCommand += sizeof(unk_D_800ABE00_cmd26); } -struct GraphNode* process_geo_layout(MemoryBlock* pool, void* segptr) { +GraphNode* process_geo_layout(MemoryBlock* pool, void* segptr) { // set by register_scene_graph_node when gCurGraphNodeIndex is 0 // and gCurRootGraphNode is NULL gCurRootGraphNode = NULL; diff --git a/src/geo_layout.h b/src/geo_layout.h index f93f0905..327dde6c 100644 --- a/src/geo_layout.h +++ b/src/geo_layout.h @@ -83,7 +83,7 @@ typedef struct unk_D_800ABE00_cmd9 { typedef struct unk_D_800ABE00_cmdA { /* 0x00 */ u8 cmd; - /* 0x04 */ struct GraphNode* unk_04; + /* 0x04 */ GraphNode* unk_04; } unk_D_800ABE00_cmdA; // size = 0x8 typedef struct unk_D_800ABE00_cmdB { diff --git a/tools/animation_script.py b/tools/animation_script.py index 9159776f..dd09514d 100755 --- a/tools/animation_script.py +++ b/tools/animation_script.py @@ -5,6 +5,10 @@ from struct import * import data2c import find_sym +import subprocess + +GFXDIS_CMD = "./tools/gfxdis.f3dex2 -x -dc -f baseroms/us/baserom.z64 " +VTXDIS_CMD = "./tools/vtxdis -f baseroms/us/baserom.z64 " COMMANDS = {} @@ -33,6 +37,7 @@ def dump(offset): TO_DECOMP = [] def get_type(f, offset, cmd, args, out): + curr_args = [] for arg in args: if "pad" in arg["name"]: continue @@ -51,7 +56,7 @@ def get_type(f, offset, cmd, args, out): type = "ptr" if "*" in arg["type"] else arg["type"] match data2c.BASE_TYPES[type]: case 1: - v = unpack(">b" if is_signed else ">B", f.read(1))[0] + v = unpack_from(">b" if is_signed else ">B", f.read(1))[0] out += f"{v}, " case 2: @@ -67,7 +72,30 @@ def get_type(f, offset, cmd, args, out): elif "*" in arg["type"]: if v != 0: - OUT_DATA[v] = arg["type"].replace("*","") + t = arg["type"].replace("*","") + + if t not in OUT_DATA: + OUT_DATA[t] = [] + + match t: + case "Gfx": + OUT_DATA[t].append(v) + + case "Vtx": + if cmd == 0x17: + out += f"D_{v:08X}" + ", " + else: + print(hex(v)) + print(curr_args) + exit() + OUT_DATA[t].append([curr_args[0], v]) + + case "unk_D_86002F34_018": + OUT_DATA[t].append([curr_args[0], v]) + + case _: + OUT_DATA[t].append(v) + out += f"D_{v:08X}" + ", " else: out += f"NULL" + ", " @@ -91,6 +119,8 @@ def get_type(f, offset, cmd, args, out): print(f"Unhandled size type for arg") print(f"{arg}") exit() + + curr_args.append(v) return out offset = int(offset, 16) @@ -148,19 +178,86 @@ def get_type(f, offset, cmd, args, out): print(f"Unhandled output function type cmd {cmd}") exit() - if len(OUT_FUNCS) > 0: - print() + FINAL_OUT_DATA = [] + + OUT_DATA = list(OUT_DATA.items()) + + while len(OUT_DATA) > 0: + type, entries = OUT_DATA.pop() - for v, type in sorted(list(OUT_DATA.items()), key=lambda x:x[0]): match type: case "Gfx": - print(f"Gfx D_{v:08X}[];") + while len(entries) > 0: + v = entries.pop() + a = find_sym.find(f"0x{v:X}", "v")["rom"] + out = subprocess.getoutput(GFXDIS_CMD + f"-a 0x{a:X}") + + for line in out.splitlines(): + if "SPVertex(" in line: + addr_str = line.split("(",1)[1].split(",")[0] + count_str = line.split("(",1)[1].split(",")[1] + + addr = int(addr_str, 0) + count = int(count_str, 10) + + + OUT_DATA.append(("Vtx", [[count, addr]])) + out = out.replace(addr_str, f"D_{addr:X}") + FINAL_OUT_DATA.append([v, "Gfx", out]) case "Vtx": - print(f"Vtx D_{v:08X}[];") + while len(entries) > 0: + c, v = entries.pop() + addr = find_sym.find(f"0x{v:X}", "v")["rom"] + out = subprocess.getoutput(VTXDIS_CMD + f"-o 0x{addr:X} -c {c}") + FINAL_OUT_DATA.append([v, "Vtx", out]) + + case "unk_D_86002F34_018": + while len(entries) > 0: + c, v = entries.pop() + + dump_type = f"unk_D_86002F34_018[{c}]" if c > 0 else f"unk_D_86002F34_018" + + d = data2c.dump(find_sym.find(f"0x{v:X}", "v")["rom"], dump_type) + out = f"unk_D_86002F34_018 D_{v:08X}" + (f"[{c}]" if c > 0 else "") + f" = {d}" + FINAL_OUT_DATA.append([v, dump_type, out]) case _: - print(f"{type}* D_{v:08X};") + while len(entries) > 0: + v = entries.pop() + dump_type = f"{type}" + sym = find_sym.find(f"0x{v:X}", "v") + if sym["rom"] > 0: + out = data2c.dump(find_sym.find(f"0x{v:X}", "v")["rom"], dump_type) + else: + out = "" + FINAL_OUT_DATA.append([v, type, out]) + + FINAL_OUT_DATA.sort(key=lambda x: x[0]) + for v, type, out in FINAL_OUT_DATA: + is_array = "[" in type or type == "Gfx" or type == "Vtx" + + if "[" in type: + count = int(type.split("[",1)[1].split("]",1)[0], 0) + else: + count = 0 + + type = type.split("[",1)[0] + + o = f"static {type} D_{v:08X}" + if len(out) > 0: + if is_array: + if count > 0: + o += f"[{count}]" + else: + o += f"[]" + + o += " = " + out + (";" if out[-1] != ";" else "") + + else: + o += ";" + + print(o) print() [print(x[0] + x[1]) for x in sorted(TO_OUTPUT, key=lambda x: x[0])] diff --git a/tools/data2c.py b/tools/data2c.py index df6cf120..019d855e 100755 --- a/tools/data2c.py +++ b/tools/data2c.py @@ -633,8 +633,7 @@ def output_array(data, name, counts, depth, out, offset): out, _ = output_array(data, struct, counts, 0, out, 0) out = out + "};" if (len(counts) > 0 and struct in STRUCTS) else (out[:-2] + "};") - print(out) - + return out ####################################################################### @@ -643,7 +642,8 @@ def output_array(data, name, counts, depth, out, offset): #print(f"{len(STRUCTS)} structs parsed in") def dump(offset, type_name): - offset = int(offset, 16) + if type(offset) != int: + offset = int(offset, 16) counts = [] while "[" in type_name: @@ -656,7 +656,10 @@ def dump(offset, type_name): print(f"Could not find type definition \"{type_name}\", maybe it failed to parse...") exit() - dump_data(offset, type_name, counts) + out = dump_data(offset, type_name, counts) + + return out if __name__ == "__main__": - dump(sys.argv[1], sys.argv[2]) + out = dump(sys.argv[1], sys.argv[2]) + print(out) diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index fe957a59..fc3606e7 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -1074,10 +1074,10 @@ subsegments: - [0x1802B0, textbin, fragments/20/fragment20_header] - [0x1802D0, c, fragments/20/fragment20] - - [0x183260, data, fragments/20/fragment20_data] - - [0x184FA0, rodata, fragments/20/fragment20_rodata] + - [0x183260, .data, fragments/20/fragment20] + - [0x184FA0, .rodata, fragments/20/fragment20] - - {vram: 0x86E04D60, type: bss, name: fragments/20/fragment20_bss} + - {vram: 0x86E04D60, type: .bss, name: fragments/20/fragment20} - name: fragment20_relocs type: code