fragment47

This commit is contained in:
Kelebek1 2025-04-16 10:15:33 +01:00
parent e96a7e34d6
commit e00c1e1c7e
17 changed files with 2171 additions and 122 deletions

View File

@ -255,6 +255,7 @@ extern u8 D_201E420[];
extern u8 D_2020420[];
extern u8 D_2022420[];
extern u8 D_2024420[];
extern u8 D_2026420[];
extern u8 D_3006668[];
extern u8 D_3000008[];
extern u8 D_3004EF0[];
@ -473,6 +474,38 @@ extern u8 D_3038A70[];
extern u8 D_3038AF0[];
extern u8 D_3038B70[];
extern u8 D_3038BF0[];
extern u8 D_4000C00[];
extern u8 D_201A620[];
extern u8 D_2028420[];
extern u8 D_2000C40[];
extern u8 D_2007E00[];
extern u8 D_2008700[];
extern u8 D_2009000[];
extern u8 D_2009900[];
extern u8 D_2001080[];
extern u8 D_2001550[];
extern u8 D_2001A20[];
extern u8 D_2001FC0[];
extern u8 D_2002560[];
extern u8 D_2002B00[];
extern u8 D_20030A0[];
extern u8 D_2003640[];
extern u8 D_2003BE0[];
extern u8 D_2004180[];
extern u8 D_2004720[];
extern u8 D_2004CC0[];
extern u8 D_2005260[];
extern u8 D_2005800[];
extern u8 D_2005DA0[];
extern u8 D_2006340[];
extern u8 D_20007C0[];
extern u8 D_20008A0[];
extern u8 D_200A200[];
extern u8 D_200A280[];
extern u8 D_200A300[];
extern u8 D_200A780[];
extern u8 D_2000980[];
extern u8 D_2000A60[];
extern LEODiskID D_800818E0;

View File

@ -483,6 +483,7 @@ D_201E420 = 0x201E420;
D_2020420 = 0x2020420;
D_2022420 = 0x2022420;
D_2024420 = 0x2024420;
D_2026420 = 0x2026420;
D_3006668 = 0x3006668;
D_81303FA8 = 0x81303FA8; // size:0x58
D_3000008 = 0x3000008;
@ -716,4 +717,37 @@ D_30081A8 = 0x30081A8;
D_3038A70 = 0x3038A70;
D_3038AF0 = 0x3038AF0;
D_3038B70 = 0x3038B70;
D_3038BF0 = 0x3038BF0;
D_3038BF0 = 0x3038BF0;
D_4000C00 = 0x4000C00;
D_8380548C = 0x8380548C; // size:0x54
D_83806778 = 0x83806778; // size:0x50
D_83805698 = 0x83805698; // size:0x10E0
D_838067C8 = 0x838067C8; // size:0x10
D_201A620 = 0x201A620;
D_2028420 = 0x2028420;
D_2000C40 = 0x2000C40;
D_2007E00 = 0x2007E00;
D_2008700 = 0x2008700;
D_2009000 = 0x2009000;
D_2009900 = 0x2009900;
D_2001080 = 0x2001080;
D_2001550 = 0x2001550;
D_2001A20 = 0x2001A20;
D_2001FC0 = 0x2001FC0;
D_2002560 = 0x2002560;
D_2002B00 = 0x2002B00;
D_20030A0 = 0x20030A0;
D_2003640 = 0x2003640;
D_2003BE0 = 0x2003BE0;
D_2004180 = 0x2004180;
D_2004720 = 0x2004720;
D_2004CC0 = 0x2004CC0;
D_2005260 = 0x2005260;
D_2005800 = 0x2005800;
D_2005DA0 = 0x2005DA0;
D_2006340 = 0x2006340;
D_20007C0 = 0x20007C0;
D_20008A0 = 0x20008A0;
D_838067F0 = 0x838067F0; // size:0x1D088
D_2000980 = 0x2000980;
D_2000A60 = 0x2000A60;

View File

@ -304,4 +304,36 @@ D_30081A8 = 0x30081A8;
D_3038A70 = 0x3038A70;
D_3038AF0 = 0x3038AF0;
D_3038B70 = 0x3038B70;
D_3038BF0 = 0x3038BF0;
D_3038BF0 = 0x3038BF0;
D_201A620 = 0x201A620;
D_2028420 = 0x2028420;
D_2000C40 = 0x2000C40;
D_2007E00 = 0x2007E00;
D_2008700 = 0x2008700;
D_2009000 = 0x2009000;
D_2009900 = 0x2009900;
D_2001080 = 0x2001080;
D_2001550 = 0x2001550;
D_2001A20 = 0x2001A20;
D_2001FC0 = 0x2001FC0;
D_2002560 = 0x2002560;
D_2002B00 = 0x2002B00;
D_20030A0 = 0x20030A0;
D_2003640 = 0x2003640;
D_2003BE0 = 0x2003BE0;
D_2004180 = 0x2004180;
D_2004720 = 0x2004720;
D_2004CC0 = 0x2004CC0;
D_2005260 = 0x2005260;
D_2005800 = 0x2005800;
D_2005DA0 = 0x2005DA0;
D_2006340 = 0x2006340;
D_20007C0 = 0x20007C0;
D_20008A0 = 0x20008A0;
D_200A200 = 0x200A200;
D_200A280 = 0x200A280;
D_200A300 = 0x200A300;
D_200A780 = 0x200A780;
D_2000980 = 0x2000980;
D_2000A60 = 0x2000A60;
D_838067F0 = 0x838067F0;

View File

@ -273,7 +273,7 @@ void func_8001B088(u16* arg0, s32 arg1) {
void func_8001B0DC(u16* arg0, s32 arg1, unk_func_80026268_arg0* arg2) {
arg1_func_80010CA8 sp1C;
if (arg2 == 0) {
if (arg2 == NULL) {
func_8001B088(arg0, arg1);
return;
}

View File

@ -41,6 +41,7 @@ unk_func_80022C28_ret* func_80022C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
unk_func_80022C28_ret* func_80022CC0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, char* arg4, u16 arg5);
s32 func_80022D24(unk_func_80022C28_ret* arg0);
s32 func_80022D8C(unk_func_80022C28_ret* arg0);
s32 func_80022DF4(unk_func_80022C28_ret*, u8);
s32 func_80022E18(u8* arg0, s32 arg1, unk_func_80022C28_ret* arg2);
s32 func_80022F24(u8* arg0, s32 arg1, unk_func_80022C28_ret* arg2);
void func_80023068(void);

View File

@ -52,8 +52,20 @@ typedef struct unk_D_83406EB0 {
} unk_D_83406EB0; // size = 0x8C
typedef struct unk_D_83407B00 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x00 */ union {
struct {
s16 unk_00s;
s16 unk_02s;
};
s32 unk_00;
};
/* 0x04 */ union {
struct {
s16 unk_04s;
s16 unk_06s;
};
s32 unk_04;
};
} unk_D_83407B00; // size = 0x8
typedef struct unk_func_80031270 {
@ -71,11 +83,6 @@ typedef struct unk_func_80031270 {
/* 0x32 */ s32 unk_34;
} unk_func_80031270; // size = 0x38
typedef struct unk_D_83407B38_0B0_008 {
/* 0x00 */ s32 unk_00;
/* 0x00 */ s32 unk_08;
} unk_D_83407B38_0B0_008; // size >= 0xC
typedef struct unk_D_83407B38_0B0 {
/* 0x00 */ s32 unk_00;
/* 0x00 */ s32 unk_08;

View File

@ -343,8 +343,8 @@ void func_82100B1C(s32 arg0) {
void func_82100B98(void) {
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
ASSET_LOAD(D_2000000, title_ui,
0); // bin contains a JP logo and press start, but this bin is loaded for the "Press Start" gfx
// bin contains a JP logo and press start, but this bin is loaded for the "Press Start" gfx
ASSET_LOAD(D_2000000, title_ui, 0);
D_82100EB8 = main_pool_alloc(0x4510, 0);
D_82100EBC = main_pool_alloc(0x100000, 0);

View File

@ -15,6 +15,21 @@ typedef struct unk_D_83402E4C {
/* 0x00 */ s16* unk_0C;
} unk_D_83402E4C; // size = 0x10
typedef struct unk_D_83407B18_008 {
/* 0x00 */ s16 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s16 unk_08;
/* 0x0A */ char unk_0A[0x2];
} unk_D_83407B18_008; // size >= 0xC
typedef struct unk_D_83407B18 {
/* 0x00 */ unk_D_83407B00 unk_00;
/* 0x08 */ unk_D_83407B18_008 unk_08;
/* 0x14 */ char unk14[0x4];
} unk_D_83407B18; // size = 0x18
extern unk_D_83402EE0 D_83402EE0[24];
extern s32 D_83403C00[24];
extern unk_D_83403C60 D_83403C60[36];
@ -29,9 +44,7 @@ extern unk_D_83407B00 D_83407AF8;
extern unk_D_83407B00 D_83407B00;
extern unk_D_83407B00 D_83407B08;
extern unk_D_83407B00 D_83407B10;
extern unk_D_83407B00 D_83407B18;
extern unk_D_83407B00 D_83407B20;
extern unk_D_83407B00 D_83407B28;
extern unk_D_83407B18 D_83407B18;
extern unk_D_83407B00 D_83407B30;
extern unk_D_83407B38 D_83407B38;

View File

@ -25,9 +25,7 @@ unk_D_83407B00 D_83407AF8;
unk_D_83407B00 D_83407B00;
unk_D_83407B00 D_83407B08;
unk_D_83407B00 D_83407B10;
unk_D_83407B00 D_83407B18;
unk_D_83407B00 D_83407B20;
unk_D_83407B00 D_83407B28;
unk_D_83407B18 D_83407B18;
unk_D_83407B00 D_83407B30;
unk_D_83407B38 D_83407B38;
@ -96,7 +94,7 @@ void func_83400020(void) {
func_834021C8(&D_83407B00);
func_834021C8(&D_83407B08);
func_834021C8(&D_83407B10);
func_834021C8(&D_83407B18);
func_834021C8(&D_83407B18.unk_00);
func_8002FF20();
func_83401D68(&D_83407B38, 0x3C, 0x2D, 0x10, 4, 0, 0, D_83407AC0, 0x10, 0);
}

View File

@ -223,7 +223,7 @@ void func_8350057C(s32 arg0, s32 arg1) {
tmp = func_80019760(5);
func_83401D68(&D_83503FC8, 0x88, 0x66, 6, 3, tmp, D_83504084, D_83403C60, 0x24, 1);
if (D_8350407C == 2) {
func_834021EC(&D_83503FC8, &D_83407B18);
func_834021EC(&D_83503FC8, &D_83407B18.unk_00);
} else if (arg1 == 0) {
func_834021EC(&D_83503FC8, &D_83407B10);
}
@ -1194,7 +1194,7 @@ s32 func_83503BD4(unk_D_83407B38* arg0) {
}
if (D_8350407C == 2) {
func_834021D8(arg0, &D_83407B18);
func_834021D8(arg0, &D_83407B18.unk_00);
} else {
func_834021D8(arg0, &D_83407B10);
if (sp1C == 0) {

View File

@ -0,0 +1,133 @@
#ifndef _FRAGMENT47_H_
#define _FRAGMENT47_H_
#include "global.h"
#include "src/30640.h"
#include "src/geo_layout.h"
#include "src/fragments/43/fragment43.h"
typedef struct unk_D_8380565C {
/* 0x000 */ u32 unk_000;
/* 0x004 */ unk_func_80026268_arg0 unk_004[3];
/* 0x100 */ char unk100[0x6E4];
/* 0x7E4 */ unk_func_80026268_arg0 unk_7E4;
} unk_D_8380565C; // size >= 0x838
typedef struct unk_D_838067F0_0168_0000 {
/* 0x000 */ u8 unk_000;
/* 0x001 */ u8 unk_001;
/* 0x002 */ u8 unk_002;
/* 0x003 */ u8 unk_003;
/* 0x004 */ unk_func_80026268_arg0 unk_004[3];
/* 0x100 */ char unk100[0xBD8];
} unk_D_838067F0_0168_0000; // size = 0xCD8
typedef struct unk_D_838067F0_0168 {
/* 0x0000 */ unk_D_838067F0_0168_0000 unk_0000[3];
/* 0x2688 */ struct unk_D_838067F0_0168* unk_2688;
/* 0x268C */ struct unk_D_838067F0_0168* unk_268C;
/* 0x2690 */ s16 unk_2690;
/* 0x2692 */ s16 unk_2692;
/* 0x2694 */ char unk2694[0x4];
} unk_D_838067F0_0168; // size = 0x2698
typedef struct unk_D_838067F0_003C {
/* 0x00 */ s16 unk_00;
/* 0x02 */ u8 unk_02[1];
/* 0x03 */ char unk03[0x13];
} unk_D_838067F0_003C; // size = 0x16
typedef struct unk_D_838067F0 {
/* 0x0000 */ s32 unk_0000;
/* 0x0004 */ s32 unk_0004;
/* 0x0008 */ s32 unk_0008;
/* 0x000C */ s32 unk_000C;
/* 0x0010 */ s32 unk_0010;
/* 0x0014 */ s32 unk_0014;
/* 0x0018 */ s32 unk_0018;
/* 0x001C */ s32 unk_001C;
/* 0x0020 */ s32 unk_0020;
/* 0x0024 */ s32 unk_0024;
/* 0x0028 */ s32 unk_0028;
/* 0x002C */ s32 unk_002C;
/* 0x0030 */ s32 unk_0030;
/* 0x0034 */ s32 unk_0034;
/* 0x0038 */ s32 unk_0038;
/* 0x003C */ unk_D_838067F0_003C unk_003C[13];
/* 0x015C */ unk_D_8380565C* unk_015C;
/* 0x0160 */ unk_D_838067F0_0168* unk_0160;
/* 0x0164 */ char unk0164[0x4];
/* 0x0168 */ unk_D_838067F0_0168 unk_0168[12];
} unk_D_838067F0; // size = 0x1D088
void func_83800020(s32 arg0);
void func_8380008C(s32 arg0);
void func_83800098(s32 arg0, s32 arg1);
void func_83800120(void);
void func_83800218(void);
void func_83800294(s32 arg0);
void func_83800320(void);
s32 func_838003B4(void);
void func_83800610(void);
void func_83800640(void);
s32 func_83800698(void);
s32 func_83800730(s32 arg0, s32 arg1);
s32 func_83800900(s32 arg0, GraphNode* arg1);
void func_83800AA0(s32 arg0, f32 arg1);
void func_83800BA8(s32 arg0, f32 arg1);
void func_83800CB0(void);
void func_83800D8C(void);
void func_83800EFC(void);
void func_8380101C(void);
s32 func_83801190(s32 arg0);
void func_83801248(void);
void func_83801398(void);
void func_8380142C(void);
void func_838014B8(void);
void func_83801554(void);
void func_838015F4(void);
void func_83801744(void);
void func_83801988(void);
void func_83801AE0(void);
void func_83801C94(void);
void func_83801D64(void);
void func_83801E00(void);
void func_83801E84(s32 arg0, s16 arg1, s32 arg2);
void func_83801F84(s32 arg0);
void func_8380217C(void);
void func_838022C8(s32 arg0);
s32 func_8380248C(void);
void func_838024C0(unk_D_83407B18_008* arg0);
s32 func_838024EC(void);
void func_8380252C(s32 arg0, s32 arg1, unk_D_8380565C* arg2);
s32 func_83802548(unk_D_838067F0* arg0, s32 arg1);
void func_83802660(unk_D_838067F0* arg0, unk_func_80026268_arg0* arg1);
s32 func_83802700(unk_D_838067F0* arg0, unk_D_838067F0_0168* arg1, s32 arg2, unk_D_8380565C* arg3);
s32 func_838029D4(s32 arg0, unk_D_83407B18_008* arg1);
void func_83802C0C(unk_D_838067F0* arg0);
unk_D_838067F0_0168* func_83802C74(unk_D_838067F0_0168* arg0, s32 arg1);
void func_83802C98(unk_D_838067F0* arg0);
void func_83802D64(unk_D_838067F0* arg0);
void func_83802D98(unk_D_838067F0* arg0);
void func_83802EE8(unk_D_838067F0* arg0);
void func_83803038(unk_D_838067F0* arg0);
void func_838030A8(unk_D_838067F0* arg0);
void func_8380311C(unk_D_838067F0* arg0);
void func_838031F0(unk_D_838067F0* arg0);
void func_838032C8(unk_D_838067F0* arg0);
void func_838033DC(unk_D_838067F0* arg0);
void func_83803438(unk_D_838067F0* arg0);
void func_83803488(void);
void func_8380355C(s16 arg0, s16 arg1, s16 arg2);
void func_8380369C(s16 arg0, s16 arg1, u8* arg2, s16 arg3);
void func_83803748(unk_D_838067F0* arg0);
void func_83803A80(s32 arg0, s32 arg1, unk_D_838067F0* arg2);
s32 func_83803E94(unk_D_838067F0* arg0);
s32 func_83803F04(unk_D_838067F0_0168* arg0);
void func_83803F34(s32 arg0, s32 arg1, unk_D_838067F0_0168* arg2);
void func_8380419C(s32 arg0, s32 arg1, unk_D_838067F0_0168* arg2);
void func_838043F8(s32 arg0);
#endif // _FRAGMENT47_H_

View File

@ -1,25 +1,279 @@
#include "global.h"
#include "fragment47.h"
#include "src/1AB70.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/232C0.h"
#include "src/2E110.h"
#include "src/3FB0.h"
#include "src/6A40.h"
#include "src/controller.h"
#include "src/fragments/39/fragment39.h"
#include "src/memory.h"
#include "src/stage_loader.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800020.s")
static s32 D_83805650;
static s32 D_83805654;
static void* D_83805658;
static unk_D_8380565C* D_8380565C;
static s32 D_83805660;
static s32 D_83805664;
static s32 D_83805668;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_8380008C.s")
void func_83800020(s32 arg0) {
D_83805654 = 0;
D_83805650 = arg0;
D_83805668 = -1;
D_83805660 = -1;
func_8002D510();
func_83402340();
func_83800EFC();
func_8380252C(0x68, 0x8A, D_8380565C);
func_834028C4();
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800098.s")
void func_8380008C(s32 arg0) {
D_83805668 = arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800120.s")
void func_83800098(s32 arg0, s32 arg1) {
func_8001C6AC(arg0, arg1, 0x40, 0x18, D_04000000, 0x40, 0);
func_8001C6AC(arg0, arg1 + 0x18, 0x40, 0x18, D_4000C00, 0x40, 0);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800218.s")
void func_83800120(void) {
char* sp2C = func_83402374(4);
Color_RGBA8 sp28 = { 0x9A, 0x37, 0x54, 0xFF };
Color_RGBA8 sp24 = { 0xC3, 0x54, 0x84, 0xFF };
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800294.s")
func_83401110(0x48, 0x28, 0x208, &sp28, &sp24);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800320.s")
gSPDisplayList(gDisplayListHead++, D_8006F518);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_838003B4.s")
func_83800098(0x28, 0x20);
func_8001F3F4();
func_8001EBE0(0x10, 0);
func_8001F324(0, 0, 0, 0xFF);
func_8001F1E8(0x7A, 0x2D, sp2C);
func_8001F324(0xFF, 0xFF, 0x77, 0xFF);
func_8001F1E8(0x78, 0x2B, sp2C);
func_8001F444();
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800610.s")
void func_83800218(void) {
func_800079C4();
if (D_83805668 != 0) {
func_8001D924(D_83805658);
func_83800120();
}
func_838022C8(1);
func_838043F8(1);
func_834028D0(1);
func_80007778();
if (D_83805668 > 0) {
D_83805668 -= 1;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800640.s")
void func_83800294(s32 arg0) {
D_83805654 = 2;
func_8380008C(0xC);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800698.s")
main_pool_push_state('glpc');
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AD910/func_83800730.s")
if ((D_83805664 >= 0) && (D_83805664 < 4)) {
func_80023D60(D_83805664);
}
if (arg0 != 0) {
func_838029D4(D_83805664, &D_83407B18.unk_08);
} else {
func_838029D4(D_83805664, NULL);
}
}
void func_83800320(void) {
D_83805660 = func_83402DC8(2);
if (D_83805660 != -1) {
if (D_83805660 == -2) {
D_83805660 = 2;
}
if (D_83805660 != 2) {
D_83805654 = 4;
func_80006CB4(0xF);
} else {
D_83805654 = 1;
func_83801190(D_83805664);
D_83805660 = -1;
}
}
}
s32 func_838003B4(void) {
static s32 D_83804CB8 = 4;
s32 sp7C = 1;
s32 sp78 = 0;
s32 sp74;
unk_func_80026268_arg0 sp20;
switch (D_83805654) {
case 0:
if (func_80007604() == 0) {
D_83804CB8--;
if (D_83804CB8 <= 0) {
D_83805654 = 1;
if (D_83805650 == 1) {
D_83805664 = D_83407B18.unk_08.unk_00;
func_83800294(1);
} else {
if (D_83805650 == 2) {
D_83805664 = 5;
} else {
D_83805664 = -1;
}
func_83801190(D_83805664);
}
}
}
break;
case 1:
D_83805664 = func_8380248C();
switch (D_83805664) {
case -2:
if (D_83402E20 > 0) {
D_83805654 = 3;
func_83402CE4(2, gPlayer1Controller);
} else {
sp78 = 1;
}
break;
case 0:
case 1:
case 2:
case 3:
case 4:
func_83800294(0);
break;
case 5:
sp78 = 1;
_bcopy(&D_8380565C->unk_7E4, &sp20, sizeof(unk_func_80026268_arg0));
func_8003107C(&D_83407AC8, &sp20);
break;
}
if (sp78 != 0) {
D_83805654 = 4;
func_80006CB4(0xF);
}
break;
case 2:
sp74 = func_838024EC();
if (sp74 != 0) {
main_pool_pop_state('glpc');
D_83805668 = -1;
if (sp74 > 0) {
D_83805654 = 4;
func_80006CB4(0xF);
} else {
D_83805654 = 1;
func_83801190(D_83805664);
}
}
break;
case 3:
func_83800320();
break;
case 4:
if (func_80007604() == 1) {
sp7C = 0;
}
break;
}
return sp7C;
}
void func_83800610(void) {
Cont_StartReadInputs();
Cont_ReadInputs();
func_8001F730();
}
void func_83800640(void) {
func_80006C6C(7);
do {
func_83800610();
func_83801D64();
func_83803488();
func_83402C6C();
func_83800218();
} while (func_838003B4() != 0);
}
s32 func_83800698(void) {
s32 var_v1;
unk_D_83407B18_008* temp_a0 = &D_83407B18.unk_08;
temp_a0 += 0;
if (D_83805660 == 0) {
var_v1 = 2;
} else if (D_83805660 == 1) {
var_v1 = 0;
} else {
switch (D_83805664) {
case -2:
var_v1 = 0;
break;
case 5:
var_v1 = 6;
break;
default:
var_v1 = 1;
break;
}
}
temp_a0->unk_00 = D_83805664;
func_838024C0(temp_a0);
return var_v1;
}
s32 func_83800730(s32 arg0, s32 arg1) {
unk_func_80007444* sp24;
main_pool_push_state('SLCT');
func_80005E40(0x20000, 0);
sp24 = func_80007444(1, 0, 2, 0, 2, 1);
D_8250A304 = func_8001E94C(0x1C, 0);
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
ASSET_LOAD(D_2000000, common_menu2_ui, 0);
ASSET_LOAD(D_3000000, gallery_ui, 0);
ASSET_LOAD(D_04000000, snap_select_ui, 0);
D_83805658 = func_8000484C(ASSET_LOAD2(backgrounds, 1, 1), 0x14);
D_8380565C = func_8000484C(func_800044F4(0x898000, NULL, 1, 0), 0x1A);
func_8001B058();
func_83800020(arg0);
func_80007678(sp24);
func_83800640();
func_800076C0();
func_8001E9CC();
func_80005EAC();
main_pool_pop_state('SLCT');
return func_83800698();
}

View File

@ -1,51 +1,801 @@
#include "global.h"
#include "fragment47.h"
#include "src/12D80.h"
#include "src/1C720.h"
#include "src/1CF30.h"
#include "src/20470.h"
#include "src/22630.h"
#include "src/232C0.h"
#include "src/49790.h"
#include "src/F420.h"
#include "src/controller.h"
#include "src/fragments/61/fragment61.h"
#include "src/math_util.h"
#include "src/memmap.h"
#include "src/memory.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800900.s")
typedef struct unk_D_8380548C {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ s16 unk_0C;
} unk_D_8380548C; // size = 0xE
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800AA0.s")
typedef struct unk_D_83806778 {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ u8 unk_02;
/* 0x03 */ u8 unk_03;
/* 0x04 */ u16 unk_04;
/* 0x06 */ char unk_06[1];
/* 0x07 */ char unk07[0xD];
} unk_D_83806778; // size = 0x14
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800BA8.s")
static GraphNode* D_83805670;
static unk_D_86002F58_004_000_004* D_83805678[6];
static unk_D_86002F58_004_000_004* D_83805690;
static unk_D_86002F58_004_000 D_83805698[2][6];
static unk_D_83806778 D_83806778[4];
static u8* D_838067C8[4];
static s32 D_838067D8;
static s32 D_838067DC;
static s32 D_838067E0;
static s16 D_838067E4;
static s16 D_838067E6;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800CB0.s")
static u32 D_83804CC0[] = {
0x0C000000, 0x05000000, 0x0B00002D, 0x00000000, 0x028001E0, 0x00000000, 0xFDBD0000,
0x00000243, 0x05000000, 0x0D000000, 0x05000000, 0x0F000002, 0x05000000, 0x0A000000,
&D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x01000000,
};
static Vtx D_83804D10[] = {
VTX(-32, 64, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-32, 32, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(32, 32, 0, 2048, 1024, 0xFF, 0xFF, 0xFF, 0xFF), VTX(32, 64, 0, 2048, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-32, 32, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-32, 0, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(32, 0, 0, 2048, 1024, 0xFF, 0xFF, 0xFF, 0xFF), VTX(32, 32, 0, 2048, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-16, 39, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-16, 15, 0, 0, 768, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(16, 15, 0, 1024, 768, 0xFF, 0xFF, 0xFF, 0xFF), VTX(16, 39, 0, 1024, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
static Gfx D_83804DD0[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_83804D10, 12, 0),
gsDPLoadTextureBlock(0x0F000000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsDPLoadTextureBlock(0x0F001000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsDPLoadTextureBlock(0x0E000000, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 24, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
gsSPEndDisplayList(),
};
static u32 D_83804EB8[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_83804D10, 0x05000000, 0x22040000,
0x00000000, 0x08000000, func_83800900, D_83804DD0, 0x06000000, 0x01000000, 0x00000000,
};
static Vtx D_83804EF0[] = {
VTX(-50, 68, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 51, 0, 0, 544, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 51, 0, 3200, 544, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 68, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 51, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 34, 0, 0, 544, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 34, 0, 3200, 544, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 51, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 34, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 17, 0, 0, 544, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 17, 0, 3200, 544, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 34, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 17, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 0, 0, 0, 544, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 0, 0, 3200, 544, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 17, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
static Gfx D_83804FF0[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineLERP(0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_83804EF0, 16, 0),
gsDPLoadTextureBlock(0x0F000000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 17, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsDPLoadTextureBlock(0x0F000D48, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 17, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsDPLoadTextureBlock(0x0F001A90, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 17, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
gsDPLoadTextureBlock(0x0F0027D8, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 17, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0),
gsSPEndDisplayList(),
};
static u32 D_83805118[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_83804EF0, 0x05000000, 0x22050000,
0x00000000, 0x08000000, func_83800900, D_83804FF0, 0x06000000, 0x01000000, 0x00000000,
};
static Vtx D_83805150[] = {
VTX(-50, 64, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 48, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 48, 0, 3200, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 64, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 48, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 32, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 32, 0, 3200, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 48, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 32, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 16, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 16, 0, 3200, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 32, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 16, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-50, 0, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(50, 0, 0, 3200, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 16, 0, 3200, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
static Gfx D_83805250[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_83805150, 16, 0),
gsDPLoadTextureBlock(0x0F000000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsDPLoadTextureBlock(0x0F000C80, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsDPLoadTextureBlock(0x0F001900, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
gsDPLoadTextureBlock(0x0F002580, G_IM_FMT_RGBA, G_IM_SIZ_16b, 100, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0),
gsSPEndDisplayList(),
};
static u32 D_83805378[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_83805150, 0x05000000, 0x22040000,
0x00000000, 0x08000000, func_83800900, D_83805250, 0x06000000, 0x01000000, 0x00000000,
};
static Vtx D_838053B0[] = {
VTX(-36, 12, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-36, -12, 0, 0, 768, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(36, -12, 0, 2304, 768, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(36, 12, 0, 2304, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
static Gfx D_838053F0[] = {
gsSPSetGeometryMode(G_CULL_BACK),
gsDPSetCombineLERP(0, 0, 0, 0, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsSPVertex(D_838053B0, 4, 0),
gsDPLoadTextureBlock_4b(0x0F000000, G_IM_FMT_I, 80, 24, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
static u32 D_83805458[] = {
0x17000000, 0x00000000, 0x00000000, 0x00000000, D_838053B0, 0x05000000, 0x22050000,
0x00000000, 0x08000000, func_83800900, D_838053F0, 0x06000000, 0x01000000,
};
static unk_D_8380548C D_8380548C[] = {
{
0x01,
0x00,
134,
210,
64,
0,
0,
1472,
},
{
0x01,
0x00,
258,
210,
64,
-32768,
-32768,
1664,
},
{
0x01,
0x00,
382,
210,
64,
0,
0,
1408,
},
{
0x01,
0x00,
506,
210,
64,
-32768,
-32768,
1600,
},
{
0x01,
0x00,
190,
368,
100,
0,
0,
1568,
},
{
0x01,
0x00,
450,
368,
100,
-32768,
-32768,
1504,
},
};
static s16 D_838054E0[] = { 0x46, 0x28, 0x1E, 0x1E, 0x1E, 0x1E, 0x28, 0x3C, 0x5A, 0x78, 0x6E, 0x64 };
static s16 D_838054F8[] = { 0x14, 0x3C, 0x5F, 0x78, 0x82, 0x87, 0x82, 0x78, 0x6E, 0x69, 0x66, 0x64 };
static s16 D_83805510[] = { 0x46, 0x32, 0x28, 0x1E, 0x19, 0x14, 0x14, 0x14, 0x19, 0x1E, 0x28, 0x32 };
static s16 D_83805528[] = { 0x64, 0x6E, 0x82, 0x96, 0xA0, 0xA0, 0x78, 0x50, 0x32, 0x1E, 0xA, 5 };
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800D8C.s")
s32 func_83800900(s32 arg0, GraphNode* arg1) {
u8* var_a0;
u8* var_a3;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83800EFC.s")
if (arg0 == 5) {
switch (D_8006F09C->unk_000.unk_14) {
case 0:
// clang-format off
var_a0 = D_838067C8[0]; var_a3 = D_201D820;
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_8380101C.s")
case 1:
var_a0 = D_838067C8[1]; var_a3 = D_201DB20;
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801190.s")
case 2:
var_a0 = D_838067C8[2]; var_a3 = D_201DE20;
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801248.s")
case 3:
var_a0 = D_838067C8[3]; var_a3 = D_201E120;
// clang-format on
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801398.s")
case 4:
var_a0 = D_201A620;
var_a3 = NULL;
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_8380142C.s")
case 5:
var_a0 = D_04001800;
var_a3 = NULL;
break;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_838014B8.s")
default:
var_a0 = D_2028420;
var_a3 = NULL;
break;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801554.s")
gDPPipeSync(gDisplayListHead++);
gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, D_8006F09C->unk_01D);
gSPSegment(gDisplayListHead++, 0x0F, Memmap_GetSegmentVaddr(var_a0));
gSPSegment(gDisplayListHead++, 0x0E, Memmap_GetSegmentVaddr(var_a3));
gSPDisplayList(gDisplayListHead++, arg1->unk_14);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_838015F4.s")
func_80015684();
}
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801744.s")
void func_83800AA0(s32 arg0, f32 arg1) {
s16 var_a2;
f32 var_fa0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801988.s")
if (arg0 == D_838067E0) {
var_fa0 = 0.06f;
var_a2 = 0x3000;
} else {
var_fa0 = 0.02f;
var_a2 = 0x2000;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801AE0.s")
D_83805698[0][arg0].unk_030.x = ((SINS(D_8380548C[arg0].unk_0A) * var_fa0) + 1.0f) * arg1;
D_83805698[0][arg0].unk_030.y = ((COSS(D_8380548C[arg0].unk_0A) * var_fa0) + 1.0f) * arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801C94.s")
D_83805698[1][arg0].unk_030.x = D_83805698[0][arg0].unk_030.x;
D_83805698[1][arg0].unk_030.y = D_83805698[0][arg0].unk_030.y;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801D64.s")
D_8380548C[arg0].unk_0A += var_a2 + ((MathUtil_Random16() & 0xF) * 0x10);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801E00.s")
void func_83800BA8(s32 arg0, f32 arg1) {
f32 var_fv0;
s16 var_v0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801E84.s")
if (arg0 == D_838067E0) {
var_fv0 = 1.5f;
var_v0 = D_8380548C[arg0].unk_0C * 2;
} else {
var_fv0 = 1.0f;
var_v0 = D_8380548C[arg0].unk_0C;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_83801F84.s")
D_83805698[0][arg0].unk_01E.z = SINS(D_8380548C[arg0].unk_08) * (1536.0f * var_fv0);
D_83805698[1][arg0].unk_024.x = D_83805698[0][arg0].unk_024.x =
(D_8380548C[arg0].unk_02 - 320.0f) - (SINS(D_8380548C[arg0].unk_08) * (6.0f * var_fv0));
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_8380217C.s")
D_8380548C[arg0].unk_08 += var_v0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_838022C8.s")
void func_83800CB0(void) {
s32 i;
u8 temp_s3 = Cont_GetControllerBits();
unk_D_800AC910_040 sp48;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AE1F0/func_8380248C.s")
for (i = 0; i < 4; i++) {
func_80025040(i, &sp48);
func_80021A90(D_83806778[i].unk_06, &sp48.unk_02);
D_83806778[i].unk_04 = sp48.unk_00;
D_83806778[i].unk_01 = func_80024F68(i);
D_83806778[i].unk_00 = func_80024F00(i);
D_83806778[i].unk_02 = func_80025370(i);
D_83806778[i].unk_03 = (temp_s3 & (1 << i)) != 0;
}
}
void func_83800D8C(void) {
s32 i;
for (i = 0; i < 4; i++) {
if (D_83806778[i].unk_01 != 0) {
switch (D_83806778[i].unk_01) {
case 1:
D_838067C8[i] = D_201E420;
break;
case 2:
D_838067C8[i] = D_2020420;
break;
case 3:
D_838067C8[i] = D_2022420;
break;
case 7:
D_838067C8[i] = D_2024420;
break;
}
if (D_83806778[i].unk_00 != 0) {
D_8380548C[i].unk_01 = 0x14;
}
} else {
D_838067C8[i] = &D_2026420;
if (D_83806778[i].unk_00 == 2) {
D_8380548C[i].unk_01 = 0x15;
} else {
D_8380548C[i].unk_00 = 0;
D_8380548C[i].unk_01 = 1;
}
}
}
}
void func_83800EFC(void) {
MemoryBlock* temp_s1;
s32 i;
unk_D_86002F58_004_000_004* temp_v0_2;
unk_D_86002F58_004_000* ptr;
temp_s1 = func_80002D10(main_pool_get_available(), 0);
D_838067D8 = 0;
D_83805670 = process_geo_layout(temp_s1, D_83804CC0);
temp_v0_2 = process_geo_layout(temp_s1, D_83804EB8);
D_83805678[0] = temp_v0_2;
D_83805678[1] = temp_v0_2;
D_83805678[2] = temp_v0_2;
D_83805678[3] = temp_v0_2;
D_83805678[4] = process_geo_layout(temp_s1, D_83805378);
D_83805678[5] = process_geo_layout(temp_s1, D_83805118);
D_83805690 = process_geo_layout(temp_s1, D_83805458);
func_80002D60(temp_s1);
func_8001BB20();
for (i = 0, ptr = &D_83805698[0][0]; i < 12; ptr++, i++) {
func_8001BB58(ptr);
D_83805698[0][i].unk_000.unk_14 = i;
}
func_83800CB0();
func_83800D8C();
}
void func_8380101C(void) {
s32 i;
for (i = 0; i < 6; i++) {
if (D_8380548C[i].unk_00 != 0) {
func_8001BC34(D_83805698[0] + i, 0, 0, D_83805678[i]);
func_8001BC34(D_83805698[1] + i, 0, 0, D_83805690);
func_8000E88C(&D_83805698[0][i].unk_024, D_8380548C[i].unk_02 - 0x140, 0xF0 - D_8380548C[i].unk_04,
-579.0f);
func_8000E88C(&D_83805698[1][i].unk_024, D_8380548C[i].unk_02 - 0x140, 0xE4 - D_8380548C[i].unk_04,
-579.0f);
D_83805698[1][i].unk_01D = 0xB4;
}
}
}
s32 func_83801190(s32 arg0) {
if (D_838067D8 == 0) {
func_8380101C();
if (arg0 < 0) {
for (D_838067E0 = 0; D_838067E0 < 5; D_838067E0++) {
if (D_8380548C[D_838067E0].unk_00 != 0) {
break;
}
}
} else {
D_838067E0 = arg0;
}
D_838067D8 = 1;
D_838067DC = 0;
return 1;
}
return 0;
}
void func_83801248(void) {
s32 i;
for (i = 0; i < 12; i++) {
D_83805698[0][i].unk_030.x = D_838054E0[D_838067DC] / 100.0f;
D_83805698[0][i].unk_030.y = D_838054F8[D_838067DC] / 100.0f;
}
D_838067E4 = ((((D_838067DC * 0x32) + 0x32) / 12) + 6) & (u16)~0x1;
D_838067E6 = ((((D_838067DC * 0x24) + 0x24) / 12) + 4) & (u16)~0x1;
D_838067DC++;
if (D_838067DC == 0xC) {
D_838067D8 = 3;
}
}
void func_83801398(void) {
s32 i;
s32 var_a0;
s32 var_v1;
if (D_838067E0 >= 4) {
if (D_838067E0 == 4) {
var_v1 = 0;
var_a0 = 1;
} else {
var_v1 = 3;
var_a0 = -1;
}
for (i = 0; i < 4; i++) {
if (D_8380548C[var_v1].unk_00 != 0) {
D_838067E0 = var_v1;
func_80048B90(1);
break;
}
var_v1 = (var_v1 + var_a0) & 3;
}
}
}
void func_8380142C(void) {
s32 var_v0;
s32 i;
if (D_838067E0 < 4) {
var_v0 = (D_838067E0 / 2) + 4;
for (i = 0; i < 2; i++) {
if (D_8380548C[var_v0].unk_00 != 0) {
D_838067E0 = var_v0;
func_80048B90(1);
break;
}
var_v0 ^= 1;
}
}
}
void func_838014B8(void) {
s32 i;
if ((D_838067E0 > 0) && (D_838067E0 < 4)) {
for (i = D_838067E0 - 1; i >= 0; i--) {
if (D_8380548C[i].unk_00 != 0) {
D_838067E0 = i;
func_80048B90(1);
break;
}
}
} else if (D_838067E0 == 5) {
D_838067E0 = 4;
func_80048B90(1);
}
}
void func_83801554(void) {
s32 i;
if (D_838067E0 < 3) {
for (i = D_838067E0 + 1; i < 4; i++) {
if (D_8380548C[i].unk_00 != 0) {
D_838067E0 = i;
func_80048B90(1);
break;
}
}
} else if (D_838067E0 == 4) {
D_838067E0 = 5;
func_80048B90(1);
}
}
void func_838015F4(void) {
s32 i;
if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A)) {
if (D_8380548C[D_838067E0].unk_01 == 0) {
func_80048B90(0x01100012);
D_838067D8 = 4;
} else {
func_80048B90(8);
D_838067D8 = 6;
}
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_B)) {
D_838067D8 = 5;
func_80048B90(3);
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DUP)) {
func_83801398();
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DDOWN)) {
func_8380142C();
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DLEFT)) {
func_838014B8();
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DRIGHT)) {
func_83801554();
}
for (i = 0; i < 6; i++) {
func_83800AA0(i, 1.0f);
func_83800BA8(i, 1.0f);
}
}
void func_83801744(void) {
s32 i;
D_838067DC--;
if (D_838067DC == 0) {
for (i = 0; i < 6; i++) {
if (i != D_838067E0) {
func_8001BCF0(&D_83805698[0][i]);
func_8001BCF0(&D_83805698[1][i]);
}
}
D_838067E4 = 0;
D_838067E6 = 0;
D_838067D8 = 2;
} else {
for (i = 0; i < 6; i++) {
if (i == D_838067E0) {
func_83800AA0(i, 1.0f);
func_83800BA8(i, 1.0f);
} else {
func_83800AA0(i, D_838067DC / 12.0f);
func_83800BA8(i, D_838067DC / 12.0f);
}
D_838067E4 = ((((D_838067DC * 0x32) + 0x32) / 12) + 6) & 0xFFFE;
D_838067E6 = ((((D_838067DC * 0x24) + 0x24) / 12) + 4) & 0xFFFE;
}
}
}
void func_83801988(void) {
s32 var_a1 = D_838067DC;
if (var_a1 > 0xC) {
var_a1 = 0xC;
}
if (D_838067DC < 0xC) {
D_83805698[0][D_838067E0].unk_030.x = D_83805510[var_a1] / 100.0f;
D_83805698[0][D_838067E0].unk_030.y = D_83805528[var_a1] / 100.0f;
D_83805698[1][D_838067E0].unk_030.x = D_83805510[var_a1] / 100.0f;
D_83805698[1][D_838067E0].unk_030.y = D_83805528[var_a1] / 100.0f;
D_83805698[0][D_838067E0].unk_01E.z = 0;
} else if (D_838067DC == 0xC) {
func_8001BCF0(&D_83805698[0][D_838067E0]);
func_8001BCF0(&D_83805698[1][D_838067E0]);
} else if (D_838067DC == 0xE) {
D_838067D8 = 0;
}
D_838067DC++;
}
void func_83801AE0(void) {
s32 i;
D_838067DC--;
if (D_838067DC == 0) {
for (i = 0; i < 6; i++) {
func_8001BCF0(&D_83805698[0][i]);
func_8001BCF0(&D_83805698[1][i]);
}
D_838067E0 = -2;
D_838067E4 = 0;
D_838067E6 = 0;
D_838067D8 = 0;
} else {
for (i = 0; i < 6; i++) {
func_83800AA0(i, D_838067DC / 12.0f);
func_83800BA8(i, D_838067DC / 12.0f);
}
D_838067E4 = ((((D_838067DC * 0x32) + 0x32) / 12) + 6) & (u16)~1;
D_838067E6 = ((((D_838067DC * 0x24) + 0x24) / 12) + 4) & (u16)~1;
}
}
void func_83801C94(void) {
s32 i;
s32 var_v0;
if (D_8380548C[D_838067E0].unk_01 == 0x15) {
var_v0 = 0;
} else {
var_v0 = 1;
}
func_83402CE4(var_v0, gPlayer1Controller);
if (func_83402DC8(var_v0) != -1) {
D_838067D8 = 3;
}
for (i = 0; i < 6; i++) {
func_83800AA0(i, 1.0f);
func_83800BA8(i, 1.0f);
}
}
void func_83801D64(void) {
switch (D_838067D8) {
case 1:
func_83801248();
break;
case 2:
func_83801988();
break;
case 3:
func_838015F4();
break;
case 4:
func_83801744();
break;
case 5:
func_83801AE0();
break;
case 6:
func_83801C94();
break;
}
}
void func_83801E00(void) {
if (D_838067D8 == 3) {
s32 tmp = D_8380548C[D_838067E0].unk_02 - (D_8380548C[D_838067E0].unk_06 / 2) - 0x1E;
s32 tmp2 = D_8380548C[D_838067E0].unk_04 - 0x20;
func_80020928(tmp, tmp2);
}
}
void func_83801E84(s32 arg0, s16 arg1, s32 arg2) {
Color_RGBA8 sp2C;
if (D_8380548C[arg0].unk_00 != 0) {
if (D_8380548C[arg0].unk_01 == 0) {
func_8000E840(&sp2C, 0x1E, 0x1E, 0x82, 0xFF);
} else {
func_8000E840(&sp2C, 0x64, 0x1E, 0x1E, 0xFF);
}
} else {
func_8000E840(&sp2C, 0x1E, 0x1E, 0x82, 0x80);
}
func_8420092C((arg0 << 7) + 0x44, arg1 + 0x54, 0x78, arg2, sp2C.r, sp2C.g, sp2C.b, sp2C.a);
}
void func_83801F84(s32 arg0) {
UNUSED s32 pad;
if (D_8380548C[arg0].unk_00 != 0) {
if (D_8380548C[arg0].unk_01 == 0) {
func_8001F324(0xFF, 0xFF, 0xFF, 0xFF);
func_8001EBE0(8, 0);
func_8001F1E8(((arg0 << 7) - (func_8001F5B0(8, 0, D_83806778[arg0].unk_06) / 2)) + 0x80, 0x5C,
D_83806778[arg0].unk_06);
func_8001F324(0xFF, 0xBE, 0xFF, 0xFF);
func_8001EBE0(4, 0);
func_8001F1E8(((arg0 << 7) - (func_8001F5B0(4, 0, "ID 00000") / 2)) + 0x80, 0x73, "ID %05d",
D_83806778[arg0].unk_04);
} else {
func_8001F324(0xFF, 0xFF, 0xFF, 0xFF);
func_8001EBE0(8, 0);
func_8001F1E8(((arg0 << 7) - (func_8001F5B0(8, 0, "???????") / 2)) + 0x80, 0x5C, "???????");
func_8001F324(0xFF, 0xBE, 0xFF, 0xFF);
func_8001EBE0(4, 0);
func_8001F1E8(((arg0 << 7) - (func_8001F5B0(4, 0, "ID *****") / 2)) + 0x80, 0x73, "ID *****");
}
}
}
void func_8380217C(void) {
char* temp_v0;
func_8001F3F4();
func_83801F84(0);
func_83801F84(1);
func_83801F84(2);
func_83801F84(3);
func_8001F324(0xFF, 0xFF, 0xFF, 0xFF);
func_8001EBE0(0x10, 0);
if (D_838067E0 != 5) {
temp_v0 = func_83402374(0x35);
func_8001F1E8(0x140 - (func_8001F5B0(0, 0, temp_v0) / 2), 0x198, temp_v0);
}
func_8001EBE0(8, 0);
temp_v0 = func_83402374(0x33);
func_8001F1E8(0xC0 - (func_8001F5B0(0, 0, temp_v0) / 2), 0x102, temp_v0);
temp_v0 = func_83402374(0x34);
func_8001F1E8(0x1C0 - (func_8001F5B0(0, 0, temp_v0) / 2), 0x102, temp_v0);
func_8001F444();
}
void func_838022C8(s32 arg0) {
UNUSED s32 pad;
s16 sp3A;
s16 temp_s0;
if ((D_838067D8 != 0) && (arg0 != 0)) {
temp_s0 = (0x38 - D_838067E4) / 2;
sp3A = (0x28 - D_838067E6) / 2;
func_80015094(D_83805670);
func_83801E00();
if (D_838067E4 > 0) {
func_83801E84(0, temp_s0, D_838067E4);
func_83801E84(1, temp_s0, D_838067E4);
func_83801E84(2, temp_s0, D_838067E4);
func_83801E84(3, temp_s0, D_838067E4);
func_8420092C(0x44, temp_s0 + 0xF0, 0xF8, D_838067E4, 0x78, 0x1E, 0x64, 0xFF);
func_8420092C(0x144, temp_s0 + 0xF0, 0xF8, D_838067E4, 0x78, 0x1E, 0x64, 0xFF);
}
if (D_838067E6 > 0) {
func_8420112C(0x38, sp3A + 0x190, 0x210, D_838067E6, 0x1E, 0x1E, 0x82, 0x96);
}
if (D_838067E4 == 0x38) {
func_8380217C();
}
}
}
s32 func_8380248C(void) {
if (D_838067D8 == 0) {
return D_838067E0;
}
return -1;
}

View File

@ -1,61 +1,826 @@
#include "global.h"
#include "fragment47.h"
#include "src/1AB70.h"
#include "src/1CF30.h"
#include "src/20470.h"
#include "src/232C0.h"
#include "src/2E110.h"
#include "src/30640.h"
#include "src/49790.h"
#include "src/6BC0.h"
#include "src/fragments/61/fragment61.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838024C0.s")
static unk_D_838067F0 D_838067F0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838024EC.s")
void func_838024C0(unk_D_83407B18_008* arg0) {
arg0->unk_02 = D_838067F0.unk_001C;
arg0->unk_04 = D_838067F0.unk_0020;
arg0->unk_06 = D_838067F0.unk_0024;
arg0->unk_08 = D_838067F0.unk_0028;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_8380252C.s")
s32 func_838024EC(void) {
unk_D_838067F0* ptr = &D_838067F0;
s32 ret;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802548.s")
if (ptr->unk_0000 == 7) {
ret = 1;
} else if (ptr->unk_0000 == 0) {
ret = -1;
} else {
ret = 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802660.s")
return ret;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802700.s")
void func_8380252C(s32 arg0, s32 arg1, unk_D_8380565C* arg2) {
D_838067F0.unk_0000 = 0;
D_838067F0.unk_0004 = arg0;
D_838067F0.unk_0008 = arg1;
D_838067F0.unk_015C = arg2;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838029D4.s")
s32 func_83802548(unk_D_838067F0* arg0, s32 arg1) {
char sp48[88];
unk_func_80022C28_ret* var_v0;
unk_D_838067F0_003C* ptr = &arg0->unk_003C[arg1];
s32 i;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802C0C.s")
i = 0;
ptr->unk_00 = 0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802C74.s")
if (arg0->unk_0018 < 4) {
if (arg1 == 0) {
var_v0 = func_80022C28(0x20, arg0->unk_0018, 0, 0);
} else {
var_v0 = func_80022C28(0x21, arg0->unk_0018, arg1 - 1, 0);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802C98.s")
if (var_v0 != NULL) {
while (func_80022E18(sp48, 1, var_v0) == 1) {
ptr->unk_02[ptr->unk_00++] = i++;
}
func_80022D8C(var_v0);
}
}
return ptr->unk_00;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802D64.s")
void func_83802660(unk_D_838067F0* arg0, unk_func_80026268_arg0* arg1) {
typedef struct unk_func_83802660_sp28 {
/* 0x00 */ unk_D_800AC910_040 unk_00;
/* 0x00 */ u16 unk_12;
/* 0x00 */ char unk_14[11];
} unk_func_83802660_sp28; // size = 0x12
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802D98.s")
unk_func_83802660_sp28 sp28;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83802EE8.s")
if ((arg0->unk_0018 < 4) && (func_80024F68(arg0->unk_0018) == 7) && (arg1->unk_00.unk_00 == 0x19)) {
func_80025040(arg0->unk_0018, &sp28);
_bcopy(arg1->unk_46, sp28.unk_14, sizeof(arg1->unk_46));
sp28.unk_12 = arg1->unk_0E;
if (func_80022A04(&sp28.unk_12, &sp28) != 0) {
arg1->unk_52 |= 0x80;
}
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803038.s")
s32 func_83802700(unk_D_838067F0* arg0, unk_D_838067F0_0168* arg1, s32 arg2, unk_D_8380565C* arg3) {
s32 i;
s32 j;
unk_D_838067F0_003C* temp_s3;
s32 var_s4;
u32 var_s1_3;
unk_func_80022C28_ret* var_v0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838030A8.s")
var_s4 = 0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_8380311C.s")
arg1->unk_2690 = arg0->unk_0018;
arg1->unk_2692 = arg0->unk_001C;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838031F0.s")
for (i = 0; i < 3; i++) {
arg1->unk_0000[i].unk_004[0].unk_00.unk_00 = 0;
*(s32*)&arg1->unk_0000[i].unk_000 = 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838032C8.s")
if (arg0->unk_001C <= 0xC) {
temp_s3 = &arg0->unk_003C[arg0->unk_001C];
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838033DC.s")
if (arg0->unk_0018 < 4) {
if (arg0->unk_001C == 0) {
var_v0 = func_80022C28(0x20, arg0->unk_0018, 0, 0);
} else {
var_v0 = func_80022C28(0x21, arg0->unk_0018, arg0->unk_001C - 1, 0);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803438.s")
if (var_v0 != NULL) {
i = arg2 * 3;
for (j = 0; j < 3; j++) {
if (i < temp_s3->unk_00) {
if (func_80022DF4(var_v0, temp_s3->unk_02[i++]) != 0) {
var_s4 += func_80022E18(arg1->unk_0000[j].unk_004, 1, var_v0);
}
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803488.s")
func_80022D8C(var_v0);
}
}
} else if (arg3 != NULL) {
s32 var_s1_3 = arg2 * 3;
for (j = 0; j < 3; j++) {
if (var_s1_3 < arg3->unk_000) {
_bcopy(&arg3->unk_004[var_s1_3++], &arg1->unk_0000[var_s4].unk_004[0], 0x54);
func_800228B0(arg1->unk_0000[var_s4++].unk_004);
}
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_8380355C.s")
for (i = 0; i < var_s4; i++) {
func_8001B0DC(&arg1->unk_0000[i].unk_004[1], 0, &arg1->unk_0000[i].unk_004[0]);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_8380369C.s")
arg1->unk_0000[i].unk_000 = arg0->unk_0018;
arg1->unk_0000[i].unk_001 = arg0->unk_001C;
arg1->unk_0000[i].unk_002 = arg2 * 3 + i;
arg1->unk_0000[i].unk_003 = arg1->unk_0000[i].unk_004[0].unk_00.unk_00;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803748.s")
arg1->unk_0000[i].unk_004[0].unk_53 = arg2 * 3 + i;
arg1->unk_0000[i].unk_004[0].unk_52 = (arg0->unk_0018 * 0x10) | arg0->unk_001C;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803A80.s")
func_83802660(arg0, &arg1->unk_0000[i].unk_004[0]);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803E94.s")
return var_s4;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803F04.s")
s32 func_838029D4(s32 arg0, unk_D_83407B18_008* arg1) {
unk_D_838067F0* ptr = &D_838067F0;
unk_D_838067F0_0168* ptr2;
s32 i;
s32 temp_lo;
s32 temp_t2;
s32 temp_v0;
s32 var_s0;
s32 var_s0_2;
s32 var_s0_3;
unk_D_838067F0* var_v1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_83803F34.s")
if (ptr->unk_0000 != 0) {
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_8380419C.s")
ptr->unk_0000 = 1;
ptr->unk_000C = ptr->unk_0004;
ptr->unk_0010 = ptr->unk_0008 + 0x1E0;
ptr->unk_0014 = 0;
ptr->unk_0018 = arg0;
if (arg1 != NULL) {
ptr->unk_001C = arg1->unk_02;
ptr->unk_0020 = arg1->unk_04;
ptr->unk_0024 = arg1->unk_06;
ptr->unk_0028 = arg1->unk_08;
} else {
ptr->unk_001C = 0xD;
ptr->unk_0020 = 0;
ptr->unk_0024 = 0;
ptr->unk_0028 = 0;
}
ptr->unk_002C = 0;
ptr->unk_0030 = 0;
ptr->unk_0038 = 0;
ptr->unk_0034 = 8;
ptr->unk_0160 = &ptr->unk_0168[0];
for (i = 0; i < 12; i++) {
ptr->unk_0168[i].unk_2688 = &ptr->unk_0168[(i + 1) % 12];
ptr->unk_0168[i].unk_268C = &ptr->unk_0168[(i + 11) % 12];
}
for (i = 12; i >= 0; i--) {
if ((func_83802548(&D_838067F0, i) > 0) && (arg1 == NULL)) {
ptr->unk_001C = i;
}
}
ptr2 = ptr->unk_0160;
for (i = 0; i < 6; i++) {
func_83802700(&D_838067F0, ptr2, ptr->unk_0020 + i, ptr->unk_015C);
ptr2 = ptr2->unk_2688;
}
func_80048B90(4);
return 1;
}
void func_83802C0C(unk_D_838067F0* arg0) {
arg0->unk_0014++;
if (arg0->unk_0014 <= 0) {
arg0->unk_0010 = arg0->unk_0008 + 0x1E0;
} else if (arg0->unk_0014 == 0xA) {
arg0->unk_0000 = 2;
arg0->unk_0014 = 0;
arg0->unk_0010 = arg0->unk_0008;
} else {
arg0->unk_0010 = (arg0->unk_0008 - (arg0->unk_0014 * 0x30)) + 0x1E0;
}
arg0->unk_000C = arg0->unk_0004;
}
unk_D_838067F0_0168* func_83802C74(unk_D_838067F0_0168* arg0, s32 arg1) {
while (arg1-- > 0) {
arg0 = arg0->unk_2688;
}
return arg0;
}
void func_83802C98(unk_D_838067F0* arg0) {
unk_D_838067F0_0168* ptr = func_83802C74(arg0->unk_0160, arg0->unk_0028);
unk_func_80026268_arg0* temp_a1 = &ptr->unk_0000[arg0->unk_0024].unk_004[0];
if (temp_a1->unk_00.unk_00 != 0) {
arg0->unk_0000 = 7;
func_8003107C(&D_83407AC8, temp_a1);
if ((temp_a1->unk_00.unk_00 == 0x19) && (temp_a1->unk_52 & 0x80)) {
D_83407AC8.unk_02 = 0x99;
}
func_80048B90(0x20);
} else {
func_80048B90(8);
}
}
void func_83802D64(unk_D_838067F0* arg0) {
arg0->unk_0000 = 8;
arg0->unk_0014 = 0;
func_80048B90(3);
func_8380008C(-1);
}
void func_83802D98(unk_D_838067F0* arg0) {
s32 i;
s32 var_s0;
unk_D_838067F0_0168* var_s1;
var_s0 = (arg0->unk_001C + 1) % 14;
while (var_s0 < ARRAY_COUNT(arg0->unk_003C) && (arg0->unk_003C[var_s0].unk_00 == 0)) {
var_s0 = (var_s0 + 1) % 14;
}
if (var_s0 != arg0->unk_001C) {
func_80048B90(0x27);
arg0->unk_001C = var_s0;
arg0->unk_0160 = func_83802C74(arg0->unk_0160, 6);
arg0->unk_0020 = 0;
var_s1 = arg0->unk_0160;
for (i = 0; i < 6; i++) {
func_83802700(arg0, var_s1, arg0->unk_0020 + i, arg0->unk_015C);
var_s1 = var_s1->unk_2688;
}
arg0->unk_002C = 0;
arg0->unk_0030 = 8;
arg0->unk_0000 = 3;
}
}
void func_83802EE8(unk_D_838067F0* arg0) {
s32 i;
s32 var_s0;
unk_D_838067F0_0168* var_s1;
var_s0 = (arg0->unk_001C + ARRAY_COUNT(arg0->unk_003C)) % 14;
while (var_s0 < ARRAY_COUNT(arg0->unk_003C) && (arg0->unk_003C[var_s0].unk_00 == 0)) {
var_s0 = (var_s0 + ARRAY_COUNT(arg0->unk_003C)) % 14;
}
if (var_s0 != arg0->unk_001C) {
func_80048B90(0x27);
arg0->unk_001C = var_s0;
arg0->unk_0160 = func_83802C74(arg0->unk_0160, 6);
arg0->unk_0020 = 0;
var_s1 = arg0->unk_0160;
for (i = 0; i < 6; i++) {
func_83802700(arg0, var_s1, arg0->unk_0020 + i, arg0->unk_015C);
var_s1 = var_s1->unk_2688;
}
arg0->unk_002C = 0;
arg0->unk_0030 = -8;
arg0->unk_0000 = 3;
}
}
void func_83803038(unk_D_838067F0* arg0) {
if (arg0->unk_0038 == 0) {
if (arg0->unk_0024 > 0) {
arg0->unk_0024--;
arg0->unk_002C = -1;
arg0->unk_0030 = -4;
arg0->unk_0000 = 5;
func_80048B90(1);
}
arg0->unk_0038 = arg0->unk_0034;
arg0->unk_0034 = 2;
}
}
void func_838030A8(unk_D_838067F0* arg0) {
if (arg0->unk_0038 == 0) {
if (arg0->unk_0024 < 2) {
arg0->unk_0024++;
arg0->unk_002C = 1;
arg0->unk_0030 = 4;
arg0->unk_0000 = 5;
func_80048B90(1);
}
arg0->unk_0038 = arg0->unk_0034;
arg0->unk_0034 = 2;
}
}
void func_8380311C(unk_D_838067F0* arg0) {
if (arg0->unk_0038 == 0) {
if (arg0->unk_0028 != 0) {
arg0->unk_0028--;
arg0->unk_002C = -1;
arg0->unk_0030 = -4;
arg0->unk_0000 = 6;
func_80048B90(1);
} else if ((arg0->unk_0020 > 0) &&
(func_83802700(arg0, arg0->unk_0160->unk_268C, arg0->unk_0020 - 1, arg0->unk_015C) != 0)) {
arg0->unk_0020 -= 1;
arg0->unk_0160 = arg0->unk_0160->unk_268C;
arg0->unk_002C = -1;
arg0->unk_0030 = -4;
arg0->unk_0000 = 4;
func_80048B90(1);
}
arg0->unk_0038 = arg0->unk_0034;
arg0->unk_0034 = 2;
}
}
void func_838031F0(unk_D_838067F0* arg0) {
if (arg0->unk_0038 == 0) {
if (arg0->unk_0028 != 5) {
arg0->unk_0028++;
arg0->unk_002C = 1;
arg0->unk_0030 = 4;
arg0->unk_0000 = 6;
func_80048B90(1);
} else if (func_83802700(arg0, func_83802C74(arg0->unk_0160, 6), arg0->unk_0020 + 6, arg0->unk_015C) != 0) {
arg0->unk_0020++;
arg0->unk_0160 = arg0->unk_0160->unk_2688;
arg0->unk_002C = 1;
arg0->unk_0030 = 4;
arg0->unk_0000 = 4;
func_80048B90(1);
}
arg0->unk_0038 = arg0->unk_0034;
arg0->unk_0034 = 2;
}
}
void func_838032C8(unk_D_838067F0* arg0) {
if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A)) {
func_83802C98(arg0);
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_B)) {
func_83802D64(arg0);
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_R)) {
func_83802D98(arg0);
} else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_L)) {
func_83802EE8(arg0);
} else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DLEFT)) {
func_83803038(arg0);
} else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DRIGHT)) {
func_838030A8(arg0);
} else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DUP)) {
func_8380311C(arg0);
} else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DDOWN)) {
func_838031F0(arg0);
} else {
arg0->unk_0038 = 0;
arg0->unk_0034 = 8;
}
arg0->unk_000C = arg0->unk_0004;
arg0->unk_0010 = arg0->unk_0008;
}
void func_838033DC(unk_D_838067F0* arg0) {
if (arg0->unk_0030 > 0) {
arg0->unk_002C++;
if (arg0->unk_002C >= arg0->unk_0030) {
arg0->unk_0000 = 2;
}
} else {
arg0->unk_002C--;
if (arg0->unk_0030 >= arg0->unk_002C) {
arg0->unk_0000 = 2;
}
}
arg0->unk_000C = arg0->unk_0004;
arg0->unk_0010 = arg0->unk_0008;
}
void func_83803438(unk_D_838067F0* arg0) {
arg0->unk_0014++;
if (arg0->unk_0014 == 0xA) {
arg0->unk_0000 = 0;
arg0->unk_0010 = arg0->unk_0008 + 0x1E0;
arg0->unk_0014 = 0;
} else {
arg0->unk_0010 = arg0->unk_0008 + (arg0->unk_0014 * 0x30);
}
arg0->unk_000C = arg0->unk_0004;
}
void func_83803488(void) {
unk_D_838067F0* ptr = &D_838067F0;
if (ptr->unk_0000 != 0) {
if (ptr->unk_0038 > 0) {
ptr->unk_0038--;
}
switch (ptr->unk_0000) {
case 1:
func_83802C0C(ptr);
break;
case 2:
func_838032C8(ptr);
break;
case 3:
func_838033DC(ptr);
break;
case 4:
func_838033DC(ptr);
break;
case 5:
func_838033DC(ptr);
break;
case 6:
func_838033DC(ptr);
break;
case 8:
func_83803438(ptr);
break;
}
}
}
void func_8380355C(s16 arg0, s16 arg1, s16 arg2) {
gSPDisplayList(gDisplayListHead++, D_8006F518);
gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255);
func_8001CF10(arg0, arg1, 0x10, 0x1C, D_20007C0, 0x10, 0);
func_8001CF10((arg0 + arg2) - 0x10, arg1, 0x10, 0x1C, D_20008A0, 0x10, 0);
func_8001C330(arg0 + 0x10, arg1, arg2 - 0x20, 0x1C, 0, 0, 0, 0x400, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_8380369C(s16 arg0, s16 arg1, u8* arg2, s16 arg3) {
if (arg3 == 0) {
gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 150);
} else {
gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255);
}
func_8001C6AC(arg0, arg1, 0x24, 0x14, arg2, 0x24, 0);
}
void func_83803748(unk_D_838067F0* arg0) {
s32 temp_s0 = arg0->unk_000C - 0x2C;
s32 sp40 = arg0->unk_0010 - 0x20;
func_8380355C(temp_s0, sp40, 0x208);
gSPDisplayList(gDisplayListHead++, D_8006F518);
func_8380369C(temp_s0 + 8, sp40 + 4, D_2001A20, arg0->unk_003C[0].unk_00);
func_8380369C(temp_s0 + 0x2C, sp40 + 4, D_2002560, arg0->unk_003C[1].unk_00);
func_8380369C(temp_s0 + 0x50, sp40 + 4, D_2002B00, arg0->unk_003C[2].unk_00);
func_8380369C(temp_s0 + 0x74, sp40 + 4, D_20030A0, arg0->unk_003C[3].unk_00);
func_8380369C(temp_s0 + 0x98, sp40 + 4, D_2003640, arg0->unk_003C[4].unk_00);
func_8380369C(temp_s0 + 0xBC, sp40 + 4, D_2003BE0, arg0->unk_003C[5].unk_00);
func_8380369C(temp_s0 + 0xE0, sp40 + 4, D_2004180, arg0->unk_003C[6].unk_00);
func_8380369C(temp_s0 + 0x104, sp40 + 4, D_2004720, arg0->unk_003C[7].unk_00);
func_8380369C(temp_s0 + 0x128, sp40 + 4, D_2004CC0, arg0->unk_003C[8].unk_00);
func_8380369C(temp_s0 + 0x14C, sp40 + 4, D_2005260, arg0->unk_003C[9].unk_00);
func_8380369C(temp_s0 + 0x170, sp40 + 4, D_2005800, arg0->unk_003C[10].unk_00);
func_8380369C(temp_s0 + 0x194, sp40 + 4, D_2005DA0, arg0->unk_003C[11].unk_00);
func_8380369C(temp_s0 + 0x1B8, sp40 + 4, D_2006340, arg0->unk_003C[12].unk_00);
func_8380369C(temp_s0 + 0x1DC, sp40 + 4, D_2001FC0, 0x97);
if (arg0->unk_0000 != 3) {
func_8001C6AC(temp_s0 + 4 + (arg0->unk_001C * 0x24), sp40, 0x2C, 0xE, D_2001080, 0x2C, 0);
func_8001C6AC(temp_s0 + 4 + (arg0->unk_001C * 0x24), sp40 + 0xE, 0x2C, 0xE, D_2001550, 0x2C, 0);
}
}
void func_83803A80(s32 arg0, s32 arg1, unk_D_838067F0* arg2) {
static s16 D_83805540 = 0;
s32 sp5C;
s32 temp_a3;
s32 var_v1;
temp_a3 = arg2->unk_0020 + arg2->unk_0028;
if (arg2->unk_001C < ARRAY_COUNT(arg2->unk_003C)) {
var_v1 = (arg2->unk_003C[arg2->unk_001C].unk_00 + 2) / 3;
} else {
var_v1 = (arg2->unk_015C->unk_000 + 2) / 3u;
}
if (var_v1 < 6) {
var_v1 = 6;
}
if ((arg2->unk_0000 == 4) || (arg2->unk_0000 == 6)) {
if (arg2->unk_002C > 0) {
sp5C = ((((temp_a3 * 4) + arg2->unk_002C) * 0xF0) - 0x3C0) / ((var_v1 * 4) - 4);
} else {
sp5C = ((((temp_a3 * 4) + arg2->unk_002C) * 0xF0) + 0x3C0) / ((var_v1 * 4) - 4);
}
} else {
sp5C = (temp_a3 * 0xF0) / (var_v1 - 1);
}
gSPDisplayList(gDisplayListHead++, D_8006F470);
func_8001C560(arg0, arg1, 0x18, 0x124, 0x3C, 0x3C, 0xA0);
gSPDisplayList(gDisplayListHead++, D_8006F558);
gDPSetEnvColor(gDisplayListHead++, 130, 130, 220, 255);
gDPSetPrimColor(gDisplayListHead++, 0, 0, 60, 60, 150, 255);
func_8001CADC(arg0 + 4, arg1 + 0x20, 0x10, 8, D_200A200, 0x10, 0);
func_8001CADC(arg0 + 4, arg1 + 0x118, 0x10, 8, D_200A280, 0x10, 0);
func_8001C330(arg0 + 4, arg1 + 0x28, 0x10, 0xF0, 0, 0, 0x400, 0, 0);
gSPDisplayList(gDisplayListHead++, D_8006F518);
if (D_83805540 < 4) {
func_8001C6AC(arg0, arg1 + sp5C + 0x1C, 0x18, 0x18, D_200A300, 0x18, 0);
} else {
func_8001C6AC(arg0, arg1 + sp5C + 0x1C, 0x18, 0x18, D_200A780, 0x18, 0);
}
if (arg2->unk_0000 == 2) {
D_83805540 = (D_83805540 + 1) % 8;
}
}
s32 func_83803E94(unk_D_838067F0* arg0) {
s32 i;
s32 var_v1 = 1;
for (i = 0; i < 13; i++) {
if (arg0->unk_003C[i].unk_00 != 0) {
var_v1++;
}
}
return var_v1;
}
s32 func_83803F04(unk_D_838067F0_0168* arg0) {
s32 ret;
switch (arg0->unk_2692) {
case 0:
ret = 0;
break;
case 13:
ret = 2;
break;
default:
ret = 1;
break;
}
return ret;
}
void func_83803F34(s32 arg0, s32 arg1, unk_D_838067F0_0168* arg2) {
static Color_RGB8 D_83805544[] = {
{ 0xB4, 0x3C, 0x3C },
{ 0xBE, 0x96, 0x32 },
{ 0xAA, 0x3C, 0x96 },
};
static Color_RGB8 D_83805550[] = {
{ 0x3C, 0x14, 0x14 },
{ 0x46, 0x32, 0x1E },
{ 0x50, 0x28, 0x3C },
};
char sp60[0x100];
char* var_v0;
s32 tmp;
s32 temp_v0 = func_83803F04(arg2);
gSPDisplayList(gDisplayListHead++, D_8006F558);
gDPSetEnvColor(gDisplayListHead++, D_83805544[temp_v0].r, D_83805544[temp_v0].g, D_83805544[temp_v0].b, 255);
gDPSetPrimColor(gDisplayListHead++, 0, 0, D_83805550[temp_v0].r, D_83805550[temp_v0].g, D_83805550[temp_v0].b, 255);
func_8001CADC(arg0, arg1, 8, 0x1C, &D_2000980, 8, 0);
func_8001CADC(arg0 + 0x184, arg1, 8, 0x1C, &D_2000A60, 8, 0);
func_8001C330(arg0 + 8, arg1, 0x17C, 0x1C, 0, 0, 0, 0x400, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
func_8001F3F4();
func_8001EBE0(8, 0);
switch (arg2->unk_2692) {
case 0:
var_v0 = func_83402374(0x42);
break;
case 13:
var_v0 = func_834023CC(0x13);
break;
default:
func_8002D600(2, arg2->unk_2692);
var_v0 = func_834023A4(&sp60, 0x100, 0x43);
break;
}
tmp = func_8001F5B0(8, 0, var_v0) / 2;
func_8001F1E8((arg0 - tmp) + 0xC6, arg1 + 4, var_v0);
func_8001F444();
}
void func_8380419C(s32 arg0, s32 arg1, unk_D_838067F0_0168* arg2) {
s32 i;
for (i = 0; i < 3; i++) {
if (arg2->unk_0000[i].unk_004[0].unk_00.unk_00 != 0) {
func_84200420(arg0 + i * 0x84, arg1, 0x84, 0x2C, 0x64, 0x64, 0xC8, 0xFF);
} else {
func_84200420(arg0 + i * 0x84, arg1, 0x84, 0x2C, 0x3C, 0x3C, 0xA0, 0xFF);
}
}
gSPDisplayList(gDisplayListHead++, D_8006F518);
for (i = 0; i < 3; i++) {
if (arg2->unk_0000[i].unk_004[0].unk_00.unk_00 != 0) {
func_8001C6AC(arg0 + (i * 0x84) + 2, arg1 + 2, 0x28, 0x28, &arg2->unk_0000[i].unk_004[1].unk_00.unk_00,
0x28, 0);
}
}
func_8001F3F4();
for (i = 0; i < 3; i++) {
if (arg2->unk_0000[i].unk_004[0].unk_00.unk_00 != 0) {
func_8001F324(0xFF, 0xFF, 0xFF, 0xFF);
func_8001EBE0(4, 0);
func_8001F1E8(arg0 + (i * 0x84) + 0x2C, arg1 + 5, arg2->unk_0000[i].unk_004[0].unk_30);
func_8001EBE0(4, 0);
func_8001F1E8(arg0 + (i * 0x84) + 0x2C, arg1 + 0x17, "L%d", arg2->unk_0000[i].unk_004[0].unk_24);
}
}
func_8001F444();
}
#ifdef NON_MATCHING
void func_838043F8(s32 arg0) {
unk_D_838067F0* ptr = &D_838067F0;
s32 i;
s32 spC4 = ptr->unk_000C;
s32 spC0 = ptr->unk_0010;
unk_D_838067F0_0168* var_s2;
if ((ptr->unk_0000 == 0) || (arg0 == 0)) {
return;
}
func_83803748(&D_838067F0);
func_842001B8(spC4, spC0, 0x1B4, 0x12C);
func_83803A80(spC4 + 4, spC0 + 4, &D_838067F0);
gSPDisplayList(gDisplayListHead++, D_8006F518);
if (func_83803E94(&D_838067F0) >= 2) {
func_8001C6AC(spC4 - 0x32, spC0 + 8, 0x30, 0x18, D_2007E00, 0x30, 0);
func_8001C6AC(spC4 - 0x32, spC0 + 0x20, 0x30, 0x18, D_2008700, 0x30, 0);
func_8001C6AC(spC4 + 0x1BA, spC0 + 8, 0x30, 0x18, D_2009000, 0x30, 0);
func_8001C6AC(spC4 + 0x1BA, spC0 + 0x20, 0x30, 0x18, D_2009900, 0x30, 0);
}
gSPDisplayList(gDisplayListHead++, D_8006F470);
func_8001C560(spC4 + 0x1C, spC0 + 4, 8, 0x124, 0x32, 0x32, 0x32);
gSPDisplayList(gDisplayListHead++, D_8006F630);
if (ptr->unk_0000 == 3) {
s32 var_s0;
s32 temp_s2_2 = spC4 - ((ptr->unk_002C * 0x194) / 8);
if (ptr->unk_0030 > 0) {
var_s0 = 0x194;
} else {
var_s0 = -0x194;
}
func_800060E0(&gDisplayListHead, spC4 + 0x24, spC0 + 4, 0x18C, 0x124);
func_83803F34(temp_s2_2 + 0x24, spC0 + 4, ptr->unk_0160->unk_268C);
func_83803F34((var_s0 + temp_s2_2) + 0x24, spC0 + 4, ptr->unk_0160);
gSPDisplayList(gDisplayListHead++, D_8006F518);
gDPLoadTextureBlock(gDisplayListHead++, D_2000C40, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 4, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
func_8001C330(temp_s2_2 + 0x1B0, spC0 + 4, 8, 0x124, 0, 0, 0x400, 0, 0);
func_8001C330((var_s0 + temp_s2_2) + 0x1B0, spC0 + 4, 8, 0x124, 0, 0, 0x400, 0, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
var_s2 = ptr->unk_0160;
for (i = 0; i < 6; i++) {
func_8380419C((var_s0 + temp_s2_2) + 0x24, spC0 + 0x20 + i * 0x2C, var_s2);
var_s2 = var_s2->unk_2688;
}
for (i = 0; i < 6; i++) {
func_8380419C(temp_s2_2 + 0x24, spC0 + 0x20 + i * 0x2C, var_s2);
var_s2 = var_s2->unk_2688;
}
func_800060E0(&gDisplayListHead, 0, 0, 0x280, 0x1E0);
} else if (ptr->unk_0000 == 4) {
s32 sp80 = spC0 - ((ptr->unk_002C * 0x2C) / 4);
s32 pad[2];
func_83803F34(spC4 + 0x24, spC0 + 4, ptr->unk_0160);
func_800060E0(&gDisplayListHead, spC4 + 0x24, spC0 + 0x20, 0x18C, 0x108);
if (ptr->unk_0030 > 0) {
var_s2 = ptr->unk_0160->unk_268C;
for (i = 0; i < 7; i++) {
func_8380419C(spC4 + 0x24, sp80 + 0x20 + i * 0x2C, var_s2);
var_s2 = var_s2->unk_2688;
}
} else {
var_s2 = ptr->unk_0160;
for (i = 0; i < 7; i++) {
func_8380419C(spC4 + 0x24, sp80 - 0xC + i * 0x2C, var_s2);
var_s2 = var_s2->unk_2688;
}
}
func_800060E0(&gDisplayListHead, 0, 0, 0x280, 0x1E0);
} else {
func_83803F34(spC4 + 0x24, spC0 + 4, ptr->unk_0160);
var_s2 = ptr->unk_0160;
for (i = 0; i < 6; i++) {
func_8380419C(spC4 + 0x24, spC0 + 0x20 + i * 0x2C, var_s2);
var_s2 = var_s2->unk_2688;
}
}
if (ptr->unk_0000 == 6) {
s32 var_v0 = (ptr->unk_0024 * 0x84) + 0x24;
s32 var_v1 = (ptr->unk_0028 * 0x2C) + 0x20;
if (ptr->unk_002C > 0) {
var_v1 += ((ptr->unk_002C * 0x2C) / 4) - 0x2C;
} else {
var_v1 += ((ptr->unk_002C * 0x2C) / 4) + 0x2C;
}
func_84200738(spC4 + var_v0, spC0 + var_v1, 0x84, 0x2C);
} else if (ptr->unk_0000 == 5) {
s32 var_v0 = (ptr->unk_0024 * 0x84) + 0x24;
s32 var_v1 = (ptr->unk_0028 * 0x2C) + 0x20;
if (ptr->unk_002C > 0) {
var_v0 += ((ptr->unk_002C * 0x84) / 4) - 0x84;
} else {
var_v0 += ((ptr->unk_002C * 0x84) / 4) + 0x84;
}
func_84200738(spC4 + var_v0, spC0 + var_v1, 0x84, 0x2C);
} else {
s32 var_v0 = (ptr->unk_0024 * 0x84) + 0x24;
s32 var_v1 = (ptr->unk_0028 * 0x2C) + 0x20;
func_84200738(spC4 + var_v0, spC0 + var_v1, 0x84, 0x2C);
}
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/47/fragment47_2AFDB0/func_838043F8.s")
#endif

View File

@ -0,0 +1,12 @@
#ifndef _FRAGMENT61_H_
#define _FRAGMENT61_H_
#include "global.h"
void func_842001B8(s16, s16, s16, s16);
void func_84200420(s16, s16, s16, s16, u8, u8, u8, u8);
void func_84200738(s16, s16, s16, s16);
void func_8420092C(s16, s16, s16, s16, u8, u8, u8, u8);
void func_8420112C(s16, s16, s16, s16, u8, u8, u8, u8);
#endif // _FRAGMENT61_H_

View File

@ -103,8 +103,6 @@ def calc_struct_sizes():
exit()
else:
print()
print()
print(f"What type? {member['type']}")
exit()
@ -158,12 +156,10 @@ def parse_struct(filename, fd, i):
i += 1
end_line = i
if "sndp" in str(filename):
testMe = True
#if testMe:
# print(start_line, end_line, indent, fd[start_line:end_line])
# exit()
if testMe:
print(start_line, end_line, indent, fd[start_line:end_line])
#exit()
pre_struct_name = fd[start_line]
pre_struct_name = pre_struct_name.replace("struct","")
@ -185,12 +181,12 @@ def parse_struct(filename, fd, i):
#if "LEOCmd" in struct_name:
# testMe = True
#if testMe:
# print()
# print(struct_name)
# print(start_line, end_line, indent)
# print(fd[start_line:end_line])
# #exit()
if testMe:
print()
print(struct_name)
print(start_line, end_line, indent)
print(fd[start_line:end_line])
#exit()
if struct_name and struct_name in STRUCTS:
return i, True, "", []
@ -214,9 +210,9 @@ def parse_struct(filename, fd, i):
if not data_member.strip():
continue
#if testMe:
# print(f"bbbb {j}")
# print(data_member)
if testMe:
print(f"bbbb {j}")
print(f"data_member: \"{data_member}\"")
if " : " in data_member:
skipMe = True
@ -226,6 +222,7 @@ def parse_struct(filename, fd, i):
continue
elif (data_member.strip().startswith("union") or data_member.strip().startswith("struct")) and ";" not in data_member:
#print(f"UNION! {data_member}")
is_union = "union" in data_member
start = j
@ -236,8 +233,8 @@ def parse_struct(filename, fd, i):
#while "{" not in fd[j]:
# j += 1
#if testMe:
#print(f"RECURSE {str(filename)} j {j} -- {fd[start-1]}")
if testMe:
print(f"RECURSE {str(filename)} j {j} -- {fd[start-1]}")
j, skipMe, name, data = parse_struct("", fd, start - 1)
j += 1
@ -252,11 +249,13 @@ def parse_struct(filename, fd, i):
STRUCTS[name]["data"] = data
STRUCTS[name]["union"] = is_union
#if testMe:
#print(f"DONE RECURSE {str(filename)} j {j}")
#print(STRUCTS[name])
#exit()
struct_data.append({"name":name, "type":name, "counts":[], "size":0, "round":0, "offset":0})
if testMe:
print(f"DONE RECURSE {str(filename)} j {j}")
print(f"name \"{name}\" -- data \"{STRUCTS[name]}\"")
print(f"appending data {struct_data[-1]}")
#exit()
continue;
elif ";" not in data_member and "/" in data_member:
@ -284,10 +283,8 @@ def parse_struct(filename, fd, i):
data_member = "".join(data_members)
#if testMe:
# print()
# print()
# print(data_members)
if testMe:
print(f"final data member line \"{data_member}\"")
#print(data_members)
data_member = data_member.rsplit(";",1)[0]
@ -298,6 +295,11 @@ def parse_struct(filename, fd, i):
data_member = data_member.split("*/",1)[1]
type, name = data_member.rsplit(" ",1)
if "{" in name or "}" in name:
continue;
if testMe:
print(f"parsed type \"{type}\", name \"{name}\"")
type = type.strip()
if "," in type:
@ -347,7 +349,8 @@ def parse_struct(filename, fd, i):
type = type.strip()
name = name.strip()
#print(f"name:\"{name}\", type:\"{type}\"")
if testMe:
print(f"Appending new data member, name:\"{name}\", type:\"{type}\"")
struct_data.append({"name":name, "type":type, "counts":counts, "size":0, "round":0, "offset":0})
@ -411,6 +414,10 @@ def parse_structs():
STRUCTS[name]["data"] = data
STRUCTS[name]["union"] = False
#if "unk_D_83407B00" in name:
# print(STRUCTS[name])
# exit()
elif fd[i].startswith("typedef union"):
i, skipMe, name, data = parse_struct(file_name, fd, i)
@ -650,6 +657,10 @@ def dump_data(offset, struct, counts):
#######################################################################
parse_structs()
#for s in STRUCTS:
# if "unk_D_83407B00" in s:
# print(s)
#exit()
calc_struct_sizes()
#print(f"{len(STRUCTS)} structs parsed in")

View File

@ -1788,12 +1788,18 @@
- [0x2AD910, c, fragments/47/fragment47_2AD910]
- [0x2AE1F0, c, fragments/47/fragment47_2AE1F0]
- [0x2AFDB0, c, fragments/47/fragment47_2AFDB0]
- [0x2B25A0, data, fragments/47/fragment47_data]
- [0x2B2E50, rodata, fragments/47/fragment47_rodata_2B2E50]
- [0x2B2E90, rodata, fragments/47/fragment47_rodata_2B2E90]
- [0x2B2F10, rodata, fragments/47/fragment47_rodata_2B2F10]
- {vram: 0x83805650, type: bss, name: fragments/47/fragment47_bss}
- [0x2B25A0, .data, fragments/47/fragment47_2AD910]
- [0x2B25B0, .data, fragments/47/fragment47_2AE1F0]
- [0x2B2E30, .data, fragments/47/fragment47_2AFDB0]
- [0x2B2E50, .rodata, fragments/47/fragment47_2AD910]
- [0x2B2E90, .rodata, fragments/47/fragment47_2AE1F0]
- [0x2B2F10, .rodata, fragments/47/fragment47_2AFDB0]
- {vram: 0x83805650, type: .bss, name: fragments/47/fragment47_2AD910}
- {vram: 0x83805670, type: .bss, name: fragments/47/fragment47_2AE1F0}
- {vram: 0x838067F0, type: .bss, name: fragments/47/fragment47_2AFDB0}
- name: fragment47_relocs
type: code