fragment17
Some checks are pending
C/C++ CI / build (push) Waiting to run

This commit is contained in:
Kelebek1 2024-10-16 15:05:48 +01:00 committed by Revo
parent 184653b04b
commit 0bc12ffeb8
49 changed files with 5647 additions and 490 deletions

View File

@ -167,6 +167,7 @@ typedef struct unk_D_86002F34_000_014 {
/* 0x04 */ u8* unk_04;
} unk_D_86002F34_000_014; // size >= 0x8
struct GraphNode;
typedef s32 (*func_D_86002F34_000_010)(s32, struct GraphNode*);
typedef struct GraphNode {
@ -237,7 +238,7 @@ typedef struct unk_D_86002F34_00C_0CC {
} unk_D_86002F34_00C_0CC; // size >= 0x20
typedef struct unk_D_86002F34_00C {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ unk_D_86002F34_00C_018 unk_18;
/* 0x24 */ unk_D_86002F34_00C_024 unk_24;
/* 0x40 */ unk_D_86002F34_00C_040 unk_40;
@ -247,7 +248,7 @@ typedef struct unk_D_86002F34_00C {
} unk_D_86002F34_00C; // size = 0xF0
typedef struct unk_D_86002F34_alt1 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ u16 unk_1A;
/* 0x1C */ s8 unk_1C;
@ -257,32 +258,32 @@ typedef struct unk_D_86002F34_alt1 {
} unk_D_86002F34_alt1; // size >= 0x28
typedef struct unk_D_86002F34_alt2 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x18 */ struct GraphNode* unk_18;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ GraphNode* unk_18;
} unk_D_86002F34_alt2; // size >= 0x1C
typedef struct unk_D_86002F34_alt3 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
/* 0x1C */ s32 unk_1C;
} unk_D_86002F34_alt3; // size >= 0x20
typedef struct unk_D_86002F34_alt4 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Color_RGBA8_u32 unk_18;
/* 0x1C */ u16 unk_1C;
/* 0x1E */ u16 unk_1E;
} unk_D_86002F34_alt4; // size >= 0x20
typedef struct unk_D_86002F34_alt5 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Vec3f unk_18;
/* 0x24 */ Vec3s unk_24;
} unk_D_86002F34_alt5; // size = 0x2C
typedef struct unk_D_86002F34_alt6 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Vec3s unk_18;
/* 0x1E */ Vec3s unk_1E;
/* 0x24 */ Vec3f unk_24;
@ -292,27 +293,27 @@ typedef struct unk_D_86002F34_alt6 {
} unk_D_86002F34_alt6; // size = 0x34
typedef struct unk_D_86002F34_alt7 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Gfx* unk_18;
/* 0x1C */ s16 unk_1C;
} unk_D_86002F34_alt7; // size = 0x20
typedef struct unk_D_86002F34_alt8 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Gfx* unk_18;
/* 0x1C */ MtxF unk_1C;
} unk_D_86002F34_alt8; // size = 0x5C
typedef struct unk_D_86002F34_alt9 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Gfx* unk_18;
/* 0x1C */ Vec3f unk_1C;
/* 0x28 */ f32 unk_28;
} unk_D_86002F34_alt9; // size = 0x2C
typedef struct unk_D_86002F34_alt10 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x18 */ s32 unk_18;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Gfx* unk_18;
/* 0x1C */ s16 unk_1C;
/* 0x1E */ s16 unk_1E;
/* 0x20 */ s16 unk_20;
@ -329,13 +330,13 @@ typedef struct unk_D_86002F34_alt11_018 {
} unk_D_86002F34_alt11_018; // size >= 0xC
typedef struct unk_D_86002F34_alt11 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ unk_D_86002F34_alt11_018* unk_18;
/* 0x1C */ unk_D_86002F34_alt11_018* unk_1C;
} unk_D_86002F34_alt11; // size >= 0x20
typedef struct unk_D_86002F34_alt12 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
/* 0x1C */ s16 unk_1C;
@ -343,29 +344,29 @@ typedef struct unk_D_86002F34_alt12 {
} unk_D_86002F34_alt12; // size = 0x20
typedef struct unk_D_86002F34_alt13 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
} unk_D_86002F34_alt13; // size = 0x1C
typedef struct unk_D_86002F34_alt14 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
} unk_D_86002F34_alt14; // size = 0x18
typedef struct unk_D_86002F34_alt15 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
} unk_D_86002F34_alt15; // size = 0x18
typedef struct unk_D_86002F34_alt16 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ u32 unk_18;
} unk_D_86002F34_alt16; // size = 0x1C
typedef struct unk_D_86002F34_alt17 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
} unk_D_86002F34_alt17; // size = 0x18
typedef struct unk_D_86002F34_alt18 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ u8 r;
/* 0x19 */ u8 g;
/* 0x1A */ u8 b;
@ -375,36 +376,36 @@ typedef struct unk_D_86002F34_alt18 {
} unk_D_86002F34_alt18; // size = 0x20
typedef struct unk_D_86002F34_alt19 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ u8 r;
/* 0x19 */ u8 g;
/* 0x1A */ u8 b;
} unk_D_86002F34_alt19; // size = 0x1C
typedef struct unk_D_86002F34_alt20 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
} unk_D_86002F34_alt20; // size = 0x1C
typedef struct unk_D_86002F34_alt21 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
} unk_D_86002F34_alt21; // size = 0x1C
typedef struct unk_D_86002F34_alt22 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ Vec3f unk_18;
} unk_D_86002F34_alt22; // size = 0x24
typedef struct unk_D_86002F34_alt23 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
} unk_D_86002F34_alt23; // size = 0x1C
typedef struct unk_D_86002F34_alt24 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
/* 0x1C */ s16 unk_1C;
@ -422,7 +423,7 @@ typedef struct unk_D_86002F34_018 {
/* 0x01 */ u8 unk_01;
/* 0x02 */ u8 unk_02;
/* 0x03 */ u8 unk_03;
/* 0x04 */ char pad04[0x2];
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s32* unk_08;
} unk_D_86002F34_018; // size = 0xC
@ -434,7 +435,7 @@ typedef struct unk_D_86002F34_01C {
} unk_D_86002F34_01C; // size = 0xC
typedef struct unk_D_86002F34 {
/* 0x00 */ struct GraphNode unk_00;
/* 0x00 */ GraphNode unk_00;
/* 0x18 */ unk_D_86002F34_018* unk_18;
/* 0x1C */ unk_D_86002F34_01C* unk_1C;
/* 0x20 */ Vtx* unk_20;

View File

@ -524,6 +524,7 @@ extern u8 _70D3A0_ROM_START[];
extern u8 _70D3A0_ROM_END[];
extern u8 D_70110[];
extern u8 D_70290[];
extern u8 D_70B10[];
extern u8 D_124570[];

View File

@ -202,7 +202,14 @@ extern u8* D_800FF9C0;
extern s32 D_80075BCC[];
typedef struct unk_70D3A0 {
/* 0x00 */ char unk00[0x10];
/* 0x00 */ f32 unk_00;
/* 0x04 */ f32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
} unk_70D3A0; // size = 0x10
typedef struct unk_D_70B10 {
/* 0x00 */ char unk00[0x20];
} unk_D_70B10; // size = 0x20
#endif

View File

@ -353,3 +353,10 @@ D_8690B5D0 = 0x8690B5D0; // size:0x24
D_86A06228 = 0x86A06228; // size:0xC
D_86A06238 = 0x86A06238; // size:0xC
D_86A06248 = 0x86A06248; // size:0xC
D_30074E0 = 0x30074E0;
D_30092E0 = 0x30092E0;
D_300B6E0 = 0x300B6E0;
D_300B980 = 0x300B980;
D_300BAD0 = 0x300BAD0;
D_300BED0 = 0x300BED0;
D_300C2D0 = 0x300C2D0;

View File

@ -0,0 +1,7 @@
D_30074E0 = 0x30074E0;
D_30092E0 = 0x30092E0;
D_300B6E0 = 0x300B6E0;
D_300B980 = 0x300B980;
D_300BAD0 = 0x300BAD0;
D_300BED0 = 0x300BED0;
D_300C2D0 = 0x300C2D0;

View File

@ -417,7 +417,7 @@ unk_func_80011B94* func_80011B94(MainPoolState* arg0, unk_func_80011B94* arg1, s
return arg1;
}
unk_D_86002F34_alt10* func_80011BF4(MainPoolState* arg0, unk_D_86002F34_alt10* arg1, s16 arg2, s16 arg3, s32 arg4,
unk_D_86002F34_alt10* func_80011BF4(MainPoolState* arg0, unk_D_86002F34_alt10* arg1, s16 arg2, s16 arg3, Gfx* arg4,
s16 arg5, s16 arg6, u8 r, u8 g, u8 b, u8 a) {
if (arg0 != NULL) {
arg1 = func_80002DCC(arg0, sizeof(unk_D_86002F34_alt10), 4);

View File

@ -50,7 +50,7 @@ unk_D_86002F34_alt8* func_80011A3C(MainPoolState* arg0, unk_D_86002F34_alt8* arg
unk_D_86002F34_alt8* func_80011ABC(MainPoolState* arg0, unk_D_86002F34_alt8* arg1, s32 arg2, Gfx* arg3, Vec3f* arg4, Vec3s* arg5);
unk_D_86002F34_alt9* func_80011B10(MainPoolState* arg0, unk_D_86002F34_alt9* arg1, s32 arg2, Gfx* arg3, Vec3f* arg4, f32 arg5);
unk_func_80011B94* func_80011B94(MainPoolState* arg0, unk_func_80011B94* arg1, s32 arg2, Gfx* arg3);
unk_D_86002F34_alt10* func_80011BF4(MainPoolState* arg0, unk_D_86002F34_alt10* arg1, s16 arg2, s16 arg3, s32 arg4, s16 arg5, s16 arg6, u8 r, u8 g, u8 b, u8 a);
unk_D_86002F34_alt10* func_80011BF4(MainPoolState* arg0, unk_D_86002F34_alt10* arg1, s16 arg2, s16 arg3, Gfx* arg4, s16 arg5, s16 arg6, u8 r, u8 g, u8 b, u8 a);
unk_D_86002F34_alt23* func_80011C98(MainPoolState* arg0, unk_D_86002F34_alt23* arg1, s16 arg2);
unk_D_86002F34_alt24* func_80011CF0(MainPoolState* arg0, unk_D_86002F34_alt24* arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s32 arg9,
u8 r, u8 g, u8 b, u8 a);

View File

@ -501,10 +501,10 @@ unk_D_86002F30* func_80019D18(s32 arg0) {
return sp24;
}
s32 func_80019D90(unk_func_8001BEE8* arg0) {
unk_D_86002F30* func_80019D90(unk_func_80026268_arg0* arg0) {
Fragment* sp2C;
arg1_func_80010CA8 sp28;
s32 sp24 = 0;
unk_D_86002F30* sp24 = NULL;
MemoryBlock* sp20;
sp2C = func_8000484C(D_800ABE10.unk_A04.unk_00, arg0->unk_00 - 1);

View File

@ -81,7 +81,7 @@ s32 func_80019C58(unk_D_86002F58_004_000_010* arg0);
s32 func_80019CA8(unk_D_86002F58_004_000_010* arg0);
s32 func_80019CE0(unk_D_86002F58_004_000_010* arg0);
unk_D_86002F30* func_80019D18(s32 arg0);
s32 func_80019D90(unk_func_8001BEE8* arg0);
unk_D_86002F30* func_80019D90(unk_func_80026268_arg0* arg0);
s32 func_80019E18(s32 arg0, s32 arg1);
arg1_func_80019420* func_80019EA0(s32 arg0);
Fragment* func_80019F0C(MainPoolState* arg0, u32 arg1, s32 arg2, s32 arg3, PERSSZP* arg4, s32 arg5);

View File

@ -119,13 +119,12 @@ unk_D_86002F58_004_000_00C_028* func_8001BE90(unk_D_86002F58_004_000* arg0, s32
return var_v1;
}
#ifdef NON_MATCHING
unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_8001BEE8* arg1) {
unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_80026268_arg0* arg1) {
UNUSED s32 pad;
char sp38[0xB];
unk_D_86002F58_004_000_010_02C sp34;
unk_D_8006FF00* sp30;
UNUSED unk_func_8001BEE8* sp20;
UNUSED s32 i;
UNUSED s32 pad2;
u8 var_a0;
s8* var_v1;
@ -135,16 +134,20 @@ unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* ar
func_80021CA4(sp38, arg1->unk_00);
if (HAL_Strcmp(arg1->unk_30, sp38) != 0) {
var_a0 = (arg1->unk_0E >> 8) + arg1->unk_0E;
var_a0 = ((arg1->unk_0E >> 8) & 0xFF) + (arg1->unk_0E & 0xFF);
if (1) {}
var_v1 = arg1->unk_30;
while (*var_v1) {
var_a0 += *var_v1++;
var_a0 += *var_v1++ & 0xFF;
var_a0 += 0;
}
var_v1 = arg1->unk_3B;
while (*var_v1) {
var_a0 += *var_v1++;
var_a0 += *var_v1++ & 0xFF;
var_a0 += 0;
}
sp34.unk_00 = ((((sp30->unk_12 - sp30->unk_10) << 6) * var_a0) / 255) + (sp30->unk_10 << 6);
@ -153,12 +156,9 @@ unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* ar
*arg0 = sp34;
return arg0;
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/1C720/func_8001BEE8.s")
#endif
void func_8001C014(s32* arg0, unk_func_8001C014* arg1, u16 arg2) {
unk_func_8001BEE8 stack;
unk_func_80026268_arg0 stack;
stack.unk_00 = arg2;
stack.unk_0E = arg1->unk_02;

View File

@ -2,6 +2,7 @@
#define _1C720_H_
#include "global.h"
#include "src/29BA0.h"
typedef struct unk_func_8001C014 {
/* 0x00 */ char unk_00[0x2];
@ -10,21 +11,10 @@ typedef struct unk_func_8001C014 {
/* 0x14 */ s8 unk_14[0x10];
} unk_func_8001C014; // size >= 0x24
typedef struct unk_func_8001BEE8 {
/* 0x00 */ u8 unk_00;
/* 0x01 */ char unk01[0xD];
/* 0x0E */ u16 unk_0E;
/* 0x10 */ char unk10[0x20];
/* 0x30 */ char unk_30[0xB];
/* 0x3B */ char unk_3B[0xB];
/* 0x48 */ char unk46[0xC];
/* 0x52 */ u8 unk_52;
} unk_func_8001BEE8; // size >= 0x54
typedef struct unk_func_8001C07C_arg0 {
/* 0x00 */ u8 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ unk_func_8001BEE8* unk_04;
/* 0x04 */ unk_func_80026268_arg0* unk_04;
/* 0x08 */ char unk_08[0x8];
/* 0x10 */ unk_D_86002F58_004_000_010* unk_10;
/* 0x14 */ s32 unk_14;
@ -52,7 +42,7 @@ void func_8001BE34(unk_D_86002F58_004_000* arg0, u8 arg1, u8 arg2, u8 arg3, u8 a
void func_8001BE78(unk_D_86002F58_004_000* arg0, u8 arg1);
void func_8001BE84(unk_D_86002F58_004_000* arg0, u8 arg1);
unk_D_86002F58_004_000_00C_028* func_8001BE90(unk_D_86002F58_004_000* arg0, s32 arg1);
unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_8001BEE8* arg1);
unk_D_86002F58_004_000_010_02C* func_8001BEE8(unk_D_86002F58_004_000_010_02C* arg0, unk_func_80026268_arg0* arg1);
void func_8001C014(s32* arg0, unk_func_8001C014* arg1, u16 arg2);
void func_8001C07C(unk_func_8001C07C_arg0* arg0);
void func_8001C198(unk_func_8001C248* arg0);

View File

@ -508,7 +508,7 @@ void func_80021270(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
}
void func_80021920(void) {
s32 temp_s2 = func_8002D5AC(0x24);
char** temp_s2 = func_8002D5AC(0x24);
s32 i;
for (i = 0; i < 151; i++) {

View File

@ -426,7 +426,7 @@ u8 func_80022A60(s32 arg0) {
#pragma GLOBAL_ASM("asm/us/nonmatchings/22630/func_80022F24.s")
void func_80023068(void) {
s32 sp1C = func_8002D5AC(0x11);
char** sp1C = func_8002D5AC(0x11);
HAL_Strcpy(D_800AC890[0], func_8002D7C0(NULL, 0, sp1C, 0));
HAL_Strcpy(D_800AC890[1], func_8002D7C0(NULL, 0, sp1C, 1));

View File

@ -36,6 +36,9 @@ void func_80027F40(unk_func_8002A728*);
void func_80027FA0(unk_func_80027FA0*, s16);
void func_80028070(u16*);
void func_800280D4(u8);
void func_80028128(s32);
s32 func_8002816C(void);
void func_8002817C(u8, u8);
void func_800281D4(unk_func_800281D4*, unk_func_80026268_arg0*, u8);
s32 func_80028320(unk_func_800281D4*, unk_func_80026268_arg0*);
s32 func_800284B4(s16);

View File

@ -83,7 +83,8 @@ typedef struct unk_D_800AE540_1194 {
/* 0x04 */ unk_D_800AE540_0004* unk_08[2];
/* 0x04 */ char unk10[0x4];
/* 0x04 */ s32 unk_14;
/* 0x04 */ char unk18[0x5];
/* 0x04 */ char unk18[0x4];
/* 0x1C */ u8 unk_1C;
/* 0x1D */ u8 unk_1D;
/* 0x1E */ u8 unk_1E;
/* 0x20 */ s32 unk_20;

View File

@ -5,24 +5,24 @@
#define D_800AF740_NUM_FILES 42
static BinArchive* D_800AF740;
static s32* D_800AF744;
static char** D_800AF744;
void func_8002D510(void) {
s32 i;
D_800AF740 = func_800044F4(textdata_ROM_START, NULL, 1, 0);
D_800AF744 = main_pool_alloc(D_800AF740_NUM_FILES * sizeof(s32), 0);
D_800AF744 = main_pool_alloc(D_800AF740_NUM_FILES * sizeof(char*), 0);
for (i = 0; i < D_800AF740_NUM_FILES; i++) {
D_800AF744[i] = 0;
D_800AF744[i] = NULL;
}
}
char* func_8002D5AC(s32 file_number) {
return (char*)func_8000484C(D_800AF740, file_number);
char** func_8002D5AC(s32 file_number) {
return (char**)func_8000484C(D_800AF740, file_number);
}
void func_8002D5D4(u32 arg0, s32 arg1) {
void func_8002D5D4(u32 arg0, char* arg1) {
if ((arg0 >= 0x14) && (arg0 < 0x2A)) {
D_800AF744[arg0] = arg1;
}
@ -70,7 +70,7 @@ void func_8002D628(char* arg0, u32 arg1, s8* arg2) {
}
if ((temp_v0 >= 0x14) && (temp_v0 < 0x2A)) {
if (D_800AF744[temp_v0] != 0) {
if (D_800AF744[temp_v0] != NULL) {
var_s4 = D_800AF744[temp_v0];
var_s2 = 1;
}

View File

@ -4,10 +4,11 @@
#include "global.h"
void func_8002D510(void);
char* func_8002D5AC(s32);
void func_8002D600(u32, s32);
char* func_8002D7C0(char* arg0, s32 arg1, char** arg2, u32 arg3);
s32 func_8002D80C(s8*);
char** func_8002D5AC(s32 file_number);
void func_8002D5D4(u32 arg0, char* arg1);
void func_8002D600(u32 arg0, s32 arg1);
void func_8002D628(char* arg0, u32 arg1, s8* arg2);
char* func_8002D7C0(char* arg0, s32 arg1, char** arg2, u32 file_number);
s32 func_8002D80C(s8* arg0);
#endif // _2E110_H_

View File

@ -18,8 +18,8 @@ typedef struct unk_D_83402EE0_070 {
} unk_D_83402EE0_070; // size = 0x1A
void func_8002FA40(void);
void func_8003107C(unk_D_83402EE0_070*, unk_func_8001BEE8*);
void func_80031140(unk_func_8001BEE8*, unk_D_83407AC8*);
void func_8003107C(unk_D_83402EE0_070*, unk_func_80026268_arg0*);
void func_80031140(unk_func_80026268_arg0*, unk_D_83407AC8*);
f32 func_80031A6C(f32);
void func_80031EF4(MtxF*, MtxF*);
void func_80032034(MtxF* arg0, Vec3f* arg1);

View File

@ -91,7 +91,7 @@ extern const char D_8690A5C8[];
extern const char D_8690A5D8[];
extern const char D_8690A5E8[];
extern char* D_8690A678;
extern char** D_8690A678;
extern f32 D_8690A708;
extern unk_D_8690A710* D_8690A710;
extern unk_D_8690B2F8 D_8690B2F8;
@ -114,7 +114,7 @@ s32 func_86900088(s32 arg0, struct GraphNode* arg1);
s32 func_869000F4(s32 arg0, struct 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_8001BEE8* arg0);
unk_D_86002F58_004_000_010_024* func_86900244(unk_func_80026268_arg0* arg0);
void func_869002AC(void);
void func_86900410(void);
void func_86900484(s32 arg0);

View File

@ -294,7 +294,7 @@ static unk_D_8690A610 D_8690A610;
static unk_D_86002F58_004_000_000 D_8690A630;
static unk_D_86002F58_004_000_000 D_8690A648;
static unk_D_86002F58_004_000_000 D_8690A660;
char* D_8690A678;
char** D_8690A678;
static s32 D_8690A67C;
static s32 D_8690A680;
static s32 pad_D_8690A684;
@ -304,7 +304,7 @@ static s32 pad_D_8690A690;
static s32 pad_D_8690A694;
static BinArchive* D_8690A698;
static unk_D_8690A69C* D_8690A69C;
static unk_func_8001BEE8 D_8690A6A0;
static unk_func_80026268_arg0 D_8690A6A0;
static s32 D_8690A6F4;
static s32 D_8690A6F8;
static s32 D_8690A6FC;
@ -406,7 +406,7 @@ void func_86900188(void) {
func_80003B30(&D_8690B2F8, sp20, sp1C, 0);
}
unk_D_86002F58_004_000_010_024* func_86900244(unk_func_8001BEE8* arg0) {
unk_D_86002F58_004_000_010_024* func_86900244(unk_func_80026268_arg0* arg0) {
unk_D_86002F58_004_000_010_02C sp1C;
unk_D_86002F58_004_000_010* sp18;

View File

@ -2,7 +2,6 @@
#define _FRAGMENT16_H_
#include "global.h"
#include "prevent_bss_reordering.h"
typedef struct unk_D_86A025A0 {
/* 0x00 */ s8 unk_00;

View File

@ -44,7 +44,7 @@ u8 D_86A06210;
u8 D_86A06211;
u8 D_86A06212;
unk_D_86A03014* D_86A06214;
char* D_86A06218;
char** D_86A06218;
u32 D_86A0621C;
u16 D_86A06220;
u16 D_86A06222;
@ -1537,7 +1537,7 @@ s32 func_86A01020(Color_RGBA8_u32* arg0, u16 arg1, u16 arg2, u8 arg3) {
#ifdef NON_MATCHING
// Needs the in-fucntion static but that breaks bss ordering
void func_86A013C8(u8 arg0, u8 arg1, unk_D_86A03014* arg2) {
static char* D_86A06218;
static char** D_86A06218;
u16 i;
u16 sp2C;

View File

@ -3202,7 +3202,7 @@ static unk_D_86A04328 D_86A04328[18][6] = {
#ifdef NON_MATCHING
void func_86A018D0(unk_D_86002F34_00C* arg0, u16 arg1, s8 arg2, u8 arg3) {
UNUSED s32 pad;
f32 scale = 1.0f;
unk_D_86A04328* ptr = &D_86A04328[arg2 - 1][arg3 - 3];
Vec3f sp3C;
Vec3f sp30;
@ -3223,15 +3223,15 @@ void func_86A018D0(unk_D_86002F34_00C* arg0, u16 arg1, s8 arg2, u8 arg3) {
D_86A06254->unk_24.near = ptr->unk_30;
D_86A06254->unk_24.far = ptr->unk_34;
D_86A06228.x = ((ptr->unk_14.x - ptr->unk_00.x) * 1) / arg1;
D_86A06228.y = ((ptr->unk_14.y - ptr->unk_00.y) * 1) / arg1;
D_86A06228.z = ((ptr->unk_14.z - ptr->unk_00.z) * 1) / arg1;
D_86A06228.x = ((ptr->unk_14.x - ptr->unk_00.x) * scale) / arg1;
D_86A06228.y = ((ptr->unk_14.y - ptr->unk_00.y) * scale) / arg1;
D_86A06228.z = ((ptr->unk_14.z - ptr->unk_00.z) * scale) / arg1;
D_86A06238.x = ((sp30.x - sp3C.x) * 1) / arg1;
D_86A06238.y = ((sp30.y - sp3C.y) * 1) / arg1;
D_86A06238.z = ((sp30.z - sp3C.z) * 1) / arg1;
D_86A06238.x = ((sp30.x - sp3C.x) * scale) / arg1;
D_86A06238.y = ((sp30.y - sp3C.y) * scale) / arg1;
D_86A06238.z = ((sp30.z - sp3C.z) * scale) / arg1;
D_86A06244 = ((ptr->unk_2C - ptr->unk_28) * 1) / arg1;
D_86A06244 = ((ptr->unk_2C - ptr->unk_28) * scale) / arg1;
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/16/fragment16_15A2B0/func_86A018D0.s")

View File

@ -0,0 +1,349 @@
#ifndef _FRAGMENT17_H_
#define _FRAGMENT17_H_
#include "global.h"
typedef struct unk_D_86B0E5D4_04 {
/* 0x00 */ Vec3f unk_00;
/* 0x0C */ s16 unk_0C;
/* 0x0E */ s16 unk_0E;
/* 0x10 */ char unk10[0x2];
/* 0x12 */ s16 unk_12;
/* 0x14 */ s16 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x1C */ f32 unk_1C;
/* 0x20 */ s16 unk_20;
/* 0x22 */ s16 unk_22;
/* 0x24 */ char unk24[0x2];
/* 0x26 */ s16 unk_26;
/* 0x28 */ s16 unk_28;
/* 0x2C */ f32 unk_2C;
/* 0x30 */ f32 unk_30;
/* 0x34 */ f32 unk_34;
/* 0x38 */ f32 unk_38;
/* 0x3C */ f32 unk_3C;
/* 0x40 */ char unk40[0x4];
/* 0x44 */ s32 unk_44;
/* 0x48 */ s32 unk_48;
/* 0x4C */ s32 unk_4C;
/* 0x50 */ s32 unk_50;
/* 0x54 */ char unk54[0x14];
/* 0x68 */ f32 unk_68;
/* 0x6C */ f32 unk_6C;
/* 0x70 */ f32 unk_70;
/* 0x74 */ f32 unk_74;
} unk_D_86B0E5D4_04; // size >= 0x78
typedef struct unk_D_86B0E5D4 {
/* 0x00 */ unk_D_86002F34_00C* unk_00;
/* 0x04 */ unk_D_86B0E5D4_04 unk_04;
} unk_D_86B0E5D4; // size = 0x7C
typedef struct unk_D_86B0C160 {
/* 0x00 */ s16 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s16 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ f32 unk_10;
/* 0x14 */ s16 unk_14;
/* 0x16 */ s16 unk_16;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
/* 0x1C */ s16 unk_1C;
/* 0x20 */ f32 unk_20;
/* 0x24 */ f32 unk_24;
/* 0x28 */ f32 unk_28;
/* 0x2C */ f32 unk_2C;
/* 0x30 */ f32 unk_30;
} unk_D_86B0C160; // size = 0x34
typedef struct unk_D_86B0E5F0 {
/* 0x000 */ unk_D_86002F30* unk_000;
/* 0x004 */ unk_D_86002F58_004_000 unk_004;
/* 0x16C */ s32 unk_16C;
} unk_D_86B0E5F0; // size = 0x170
typedef struct unk_D_86B0C4C8 {
/* 0x00 */ Vec3f unk_00;
/* 0x0C */ u8 unk_0C;
/* 0x0E */ s16 unk_0E;
/* 0x10 */ u16 unk_10;
/* 0x12 */ char unk12[0x2];
} unk_D_86B0C4C8; // size = 0x14
typedef struct unk_D_86B0DAE0_000 {
/* 0x00 */ u16 unk_00;
/* 0x02 */ u16 unk_02;
/* 0x04 */ u16 unk_04;
/* 0x06 */ u16 unk_06;
/* 0x08 */ u16 unk_08;
/* 0x0A */ u16 unk_0A;
/* 0x0C */ u16 unk_0C;
/* 0x0E */ u16 unk_0E;
/* 0x10 */ u16 unk_10;
/* 0x12 */ u16 unk_12;
/* 0x14 */ u16 unk_14;
/* 0x16 */ u16 unk_16;
} unk_D_86B0DAE0_000; // size = 0x18
typedef struct unk_D_86B0DAE0 {
/* 0x00 */ unk_D_86B0DAE0_000 unk_00;
/* 0x18 */ unk_D_86B0DAE0_000 unk_18;
} unk_D_86B0DAE0; // size = 0x30
typedef struct unk_D_86B0FA78 {
/* 0x000 */ unk_D_86002F30* unk_000;
/* 0x004 */ unk_D_86002F58_004_000 unk_004;
/* 0x16C */ s32 unk_16C;
/* 0x170 */ s32 unk_170;
/* 0x174 */ s32 unk_174;
/* 0x178 */ s32 unk_178;
/* 0x17C */ s32 unk_17C;
/* 0x180 */ s16 unk_180;
} unk_D_86B0FA78; // size = 0x184
typedef struct unk_D_86B0FA50 {
/* 0x00 */ char unk00[0x80];
/* 0x80 */ s32 unk_80;
/* 0x84 */ s32 unk_84;
/* 0x88 */ s32 unk_88;
/* 0x8C */ s32 unk_8C;
/* 0x90 */ s32 unk_90;
/* 0x94 */ char unk94[0x4];
/* 0x98 */ f32 unk_98;
/* 0x9C */ s16 unk_9C;
/* 0x9E */ s16 unk_9E;
/* 0xA0 */ s16 unk_A0;
/* 0xA4 */ f32 unk_A4;
/* 0xA8 */ f32 unk_A8;
/* 0xAC */ f32 unk_AC;
/* 0xB0 */ unk_D_86B0DAE0_000 unk_B0;
} unk_D_86B0FA50; // size = 0xC8
typedef struct unk_D_86B0FA7C {
/* 0x00 */ unk_D_86002F34_00C* unk_00;
/* 0x04 */ Vec3f unk_04;
/* 0x10 */ s16 unk_10;
/* 0x12 */ s16 unk_12;
/* 0x14 */ char unk14[0x2];
/* 0x16 */ s16 unk_16;
/* 0x18 */ s16 unk_18;
/* 0x1C */ f32 unk_1C;
/* 0x20 */ f32 unk_20;
/* 0x24 */ s16 unk_24;
/* 0x26 */ s16 unk_26;
/* 0x28 */ char unk28[0x2];
/* 0x2A */ s16 unk_2A;
/* 0x2C */ s16 unk_2C;
/* 0x30 */ f32 unk_30;
/* 0x34 */ f32 unk_34;
/* 0x38 */ f32 unk_38;
/* 0x3C */ f32 unk_3C;
/* 0x40 */ f32 unk_40;
/* 0x44 */ f32 unk_44;
/* 0x48 */ char unk48[0x34];
} unk_D_86B0FA7C; // size = 0x7C
typedef struct unk_D_86B0C264 {
/* 0x00 */ Vec3f unk_00;
/* 0x0C */ s16 unk_0C;
/* 0x0E */ s16 unk_0E;
/* 0x10 */ u16 unk_10;
/* 0x10 */ u16 unk_12;
/* 0x14 */ u16 unk_14;
/* 0x14 */ u16 unk_16;
/* 0x18 */ s16 unk_18;
/* 0x1A */ s16 unk_1A;
} unk_D_86B0C264; // size = 0x1C
extern unk_D_86B0C160 D_86B0E040[];
extern s32 D_86B0E5DC;
extern char** D_86B0E5E0;
extern unk_D_86B0FA78* D_86B0FA78;
extern unk_D_86B0FA7C* D_86B0FA7C;
extern unk_70D3A0 D_86B10660;
s32 func_86B00020(UNUSED s32 arg0, UNUSED s32 arg1);
s32 func_86B000D0(s32 arg0, GraphNode* arg1);
s32 func_86B00158(s32 arg0, GraphNode* arg1);
s32 func_86B00188(s32 arg0, GraphNode* arg1);
s32 func_86B001B8(s32 arg0, GraphNode* arg1);
void func_86B001D8(void);
void func_86B001FC(unk_D_86B0E5F0* arg0);
void func_86B00258(void);
void func_86B0027C(unk_D_86B0E5F0* arg0, unk_D_86B0C4C8* arg1);
void func_86B0032C(unk_D_86B0E5F0* arg0, unk_D_86B0C4C8* arg1);
void func_86B00348(s32 arg0);
void func_86B003CC(s32 arg0);
void func_86B00470(s32 arg0);
void func_86B0054C(s32 arg0);
void func_86B00680(void);
void func_86B00688(void);
void func_86B00794(void);
void func_86B007EC(void);
s32 func_86B00848(s32 arg0);
void func_86B008C4(void);
void func_86B00904(void);
void func_86B00944(s32 arg0);
void func_86B00AE4(void);
void func_86B00B14(void);
s32 func_86B00C34(void);
void func_86B01004(void);
void func_86B0100C(void);
void func_86B0107C(void);
void func_86B010FC(void);
void func_86B0111C(void);
s32 func_86B01190(void);
u16 func_86B01320(s32);
Vec3f* func_86B01404(Vec3f*, Vec3f*);
void func_86B0145C(f32*, f32, f32);
u16 func_86B01670(unk_D_86002F34_00C* arg0, unk_D_86002F58_004_000* arg1, s16 arg2, s16 arg3, f32 arg4, f32 arg5);
void func_86B01898(unk_D_86B0E5D4_04* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4);
void func_86B018D4(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2);
void func_86B018E8(unk_D_86B0E5D4_04* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4);
void func_86B01924(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2);
void func_86B01938(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2);
void func_86B0194C(unk_D_86B0C160* arg0, unk_D_86B0E5D4* arg1);
void func_86B01A40(unk_D_86B0E5D4_04* arg0, unk_D_86B0E5D4* arg1);
s32 func_86B01AAC(unk_D_86B0E5D4_04* arg0, unk_D_86B0E5D4* arg1);
void func_86B01C00(u8*);
void func_86B01D8C(u8*, s32, s32, s32, s32, u8, u8);
void func_86B02348(void);
s32 func_86B024D0(s32 arg0, GraphNode* arg1);
s32 func_86B02538(s32 arg0, GraphNode* arg1);
void func_86B025A4(void);
void func_86B026C0(void);
void func_86B028F8(void);
void func_86B02908(void);
void func_86B02928(void);
void func_86B0299C(void);
void func_86B02A78(void);
s32 func_86B02B50(void);
void func_86B02C9C(s16 arg0, s16 arg1);
void func_86B02ED0(s16 arg0, s16 arg1);
void func_86B02F34(void);
void func_86B02F8C(void);
void func_86B03048(void);
void func_86B034AC(void);
void func_86B03B9C(void);
s32 func_86B03DF4(void);
Gfx* func_86B040C0(void);
s32 func_86B04200(void);
s32 func_86B042B4(void);
s32 func_86B0434C(void);
void func_86B044A0(void);
void func_86B044B0(void);
void func_86B04500(void);
void func_86B04740(void);
void func_86B04794(void);
void func_86B04880(void);
void func_86B048D8(void);
void func_86B04914(void);
s32 func_86B04944(void);
void func_86B04C9C(void);
void func_86B04CF4(UNUSED s32 arg0);
void func_86B04D48(void);
void func_86B04D98(void);
void func_86B04DF0(void);
void func_86B04EBC(void);
s32 func_86B04FB0(void);
void func_86B05170(u8* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, u8 width, u8 height, u8 uls, u8 ult, u8 lrs, u8 lrt, u8 argB, u8 argC, unk_D_86B0DAE0* argD, s32 argE);
void func_86B05944(s32, s32, s32, s32, s32);
s32 func_86B05CB0(s32 arg0, GraphNode* arg1);
s32 func_86B05D18(s32 arg0, GraphNode* arg1);
s32 func_86B05D84(s32 arg0, GraphNode* arg1);
void func_86B05DA0(u8 arg0, u8 arg1, u8 arg2);
void func_86B05E18(void);
void func_86B05EE8(void);
void func_86B06008(void);
void func_86B06050(void);
void func_86B06100(void);
void func_86B061E8(void);
s32 func_86B0630C(unk_D_86002F58_004_000* arg0, s16 arg1, s16 arg2);
s32 func_86B06394(unk_D_86002F58_004_000* arg0, s16 arg1, s16 arg2);
s32 func_86B06440(void);
void func_86B065C4(void);
void func_86B06960(void);
void func_86B069D8(void);
void func_86B06AB4(unk_D_86B0FA50* arg0, u8* arg1, f32 arg2, s16 arg3, s16 arg4, s16 arg5);
void func_86B06B38(void);
void func_86B06E34(void);
void func_86B06E80(void);
void func_86B06EC8(void);
void func_86B06F18(void);
void func_86B06F60(void);
void func_86B06F74(void);
void func_86B06FCC(void);
s32 func_86B06FFC(void);
s32 func_86B07450(unk_D_86B0FA50* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5);
void func_86B075EC(void);
void func_86B07DF4(void);
void func_86B07EA0(void);
void func_86B07F14(void);
void func_86B07FA4(void);
void func_86B08034(void);
void func_86B0819C(void);
s32 func_86B08644(void);
s16 func_86B08780(void);
s32 func_86B087A0(u8 arg0, u8* arg1, s32 arg2);
void func_86B087E8(unk_D_86B0FA78* arg0, Vec3f* arg1);
void func_86B088E4(void);
f32 func_86B089B0(f32 arg0, f32 arg1);
void func_86B089E0(s16 arg0, s16 arg1, s16 arg2, s16 arg3);
void func_86B08A3C(f32 arg0, f32 arg1);
void func_86B08A58(s16 arg0, s16 arg1, s16 arg2, s16 arg3);
void func_86B08AB4(f32 arg0, f32 arg1);
void func_86B08AD0(f32 arg0, f32 arg1);
void func_86B08AEC(unk_D_86B0C160* arg0, unk_D_86002F34_00C* arg1);
s32 func_86B08C44(unk_D_86002F34_00C* arg0);
void func_86B08E50(s32 arg0, s32 arg1);
s32 func_86B08EA8(void);
void func_86B08EB4(void);
Gfx* func_86B08F48(Gfx* gfx, u32 arg1);
void func_86B095C4(void);
void func_86B0961C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7);
void func_86B097B0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, u8* arg4, UNUSED s32 arg5);
void func_86B09928(u8* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, unk_D_86B0DAE0_000* arg5);
void func_86B09AD8(u8* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4);
void func_86B0A0B0(void);
void func_86B0A0B8(void);
void func_86B0A15C(void);
void func_86B0A18C(u8* arg0);
void func_86B0A30C(void);
s32 func_86B0A37C(void);
void func_86B0A414(void);
void func_86B0A47C(void);
s32 func_86B0A554(void);
void func_86B0A750(void);
void func_86B0A7F8(void);
void func_86B0A81C(void);
void func_86B0A824(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7);
void func_86B0B024(void);
void func_86B0B034(void);
s32 func_86B0B040(void);
void func_86B0B0B4(void);
void func_86B0B12C(void);
void func_86B0B184(void);
void func_86B0B498(void);
void func_86B0B4C8(void);
void func_86B0B4D0(u8* arg0);
void func_86B0B650(void);
s32 func_86B0B6C0(void);
void func_86B0B810(void);
void func_86B0B8DC(void);
s32 func_86B0BA18(void);
#endif // _FRAGMENT17_H_

View File

@ -1,3 +1,25 @@
#include "global.h"
#include "fragment17.h"
#include "29BA0.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15F9B0/func_86B00020.s")
s32 func_86B00020(UNUSED s32 arg0, UNUSED s32 arg1) {
switch (D_800AE540.unk_0000) {
case 18:
return func_86B01190();
case 17:
return func_86B08644();
case 21:
return func_86B04FB0();
case 26:
return func_86B04FB0();
case 22:
case 23:
return func_86B0BA18();
case 24:
return func_86B0A554();
}
}

View File

@ -1,57 +1,557 @@
#include "global.h"
#include "fragment17.h"
#include "src/12D80.h"
#include "src/17300.h"
#include "src/geo_layout.h"
#include "src/19840.h"
#include "src/1C720.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/26820.h"
#include "src/2E110.h"
#include "src/3FB0.h"
#include "src/4BDC0.h"
#include "src/6BC0.h"
#include "src/F420.h"
#include "src/controller.h"
#include "src/fragments/34/fragment34.h"
#include "src/memory.h"
#include "src/stage_loader.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B000D0.s")
typedef struct unk_D_86B0E5D8 {
/* 0x00 */ s16 unk_00;
/* 0x02 */ s16 unk_02;
/* 0x04 */ u8 unk_04;
/* 0x05 */ u8 unk_05;
/* 0x06 */ u8 unk_06;
/* 0x07 */ u8 unk_07;
/* 0x08 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
} unk_D_86B0E5D8; // size = 0xC
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00158.s")
extern u32 D_86B0BD60[];
extern unk_D_86B0C4C8* D_86B0C4C8[];
extern unk_D_86B0C160 D_86B0C160[];
extern unk_D_86B0C264 D_86B0C264[];
extern u32 D_86B0CF9C[];
extern u32 D_86B0DA9C[];
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00188.s")
s32 func_86B000D0(s32, GraphNode*);
s32 func_86B00158(s32, GraphNode*);
s32 func_86B00188(s32, GraphNode*);
s32 func_86B001B8(s32, GraphNode*);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B001B8.s")
static s16 D_86B0BBF0 = -0x3C6E;
static s16 D_86B0BBF4 = 0x38E;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B001D8.s")
static u32 D_86B0BBF8[] = {
0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0x0000000F, 0x00000000, 0x00000000,
0x05000000, 0x0D000000, 0x05000000, 0x1A050000, 0x08000000, func_86B001B8, 0x00000000, 0x05000000,
0x0F000002, 0x05000000, 0x06000000, 0x0F000002, 0x05000000, 0x06000000, 0x0F000002, 0x05000000,
0x1F00FFFF, 0xC3920000, 0x00000000, 0xFC400000, 0x00640064, 0x00640000, 0x08000000, func_86B00158,
0x00000000, 0x05000000, 0x00000000, D_86B0CF9C, 0x06000000, 0x06000000, 0x0F000002, 0x05000000,
0x1F00FFFF, 0x00000000, 0x00000000, 0x0514F79A, 0x00640064, 0x00640000, 0x08000000, func_86B00188,
0x00000000, 0x05000000, 0x00000000, D_86B0DA9C, 0x06000000, 0x06000000, 0x0F000002, 0x05000000,
0x06000000, 0x06000000, 0x14000000, 0xF8E40000, 0xFFC89BFF, 0x08000000, func_86B000D0, 0x00000000,
0x16FFFFFF, 0x0F000003, 0x05000000, 0x0A000000, &D_800AC840, 0x06000000, 0x06000000, 0x06000000,
0x06000000, 0x01000000,
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B001FC.s")
static GraphNode* D_86B0E5D0;
static unk_D_86B0E5D4* D_86B0E5D4;
static unk_D_86B0E5D8* D_86B0E5D8;
s32 D_86B0E5DC;
char** D_86B0E5E0;
static BinArchive* D_86B0E5E4;
static u8* D_86B0E5E8;
static unk_D_86B0E5F0 D_86B0E5F0[4];
static s32 D_86B0EBB0;
static s32 D_86B0EBB4;
static u16 D_86B0EBB8;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00258.s")
s32 func_86B000D0(s32 arg0, GraphNode* arg1) {
if (arg0 == 2) {
unk_D_86002F34_alt18* ptr = (unk_D_86002F34_alt18*)arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0027C.s")
D_86B0E5D8->unk_00 += D_86B0E5D8->unk_08;
D_86B0E5D8->unk_02 += D_86B0E5D8->unk_0A;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0032C.s")
ptr->unk_1C = D_86B0E5D8->unk_00;
ptr->unk_1E = D_86B0E5D8->unk_02;
ptr->r = D_86B0E5D8->unk_05;
ptr->g = D_86B0E5D8->unk_06;
ptr->b = D_86B0E5D8->unk_07;
ptr->a = D_86B0E5D8->unk_04;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00348.s")
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B003CC.s")
s32 func_86B00158(s32 arg0, GraphNode* arg1) {
if (arg0 == 2) {
unk_D_86002F58_004_000* ptr = (unk_D_86002F58_004_000*)arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00470.s")
ptr->unk_030.x = 1.5f;
ptr->unk_030.y = 1.5f;
ptr->unk_030.z = 1.5f;
ptr->unk_01E.x = D_86B0BBF0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0054C.s")
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00688.s")
s32 func_86B00188(s32 arg0, GraphNode* arg1) {
if (arg0 == 2) {
unk_D_86002F58_004_000* ptr = (unk_D_86002F58_004_000*)arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00794.s")
ptr->unk_030.x = 1.0f;
ptr->unk_030.y = 1.0f;
ptr->unk_030.z = 1.0f;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B007EC.s")
ptr->unk_01E.x = D_86B0BBF4;
}
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00848.s")
s32 func_86B001B8(s32 arg0, GraphNode* arg1) {
if (arg0 == 2) {
unk_D_86002F34_alt21* ptr = (unk_D_86002F34_alt21*)arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B008C4.s")
ptr->unk_1A = D_86B0E5D4->unk_04.unk_44;
}
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00904.s")
void func_86B001D8(void) {
s32 i;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00944.s")
for (i = 0; i < 4; i++) {
D_86B0E5F0[i].unk_16C = 0;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00AE4.s")
void func_86B001FC(unk_D_86B0E5F0* arg0) {
while (arg0->unk_16C != 1) {
func_8001BCF0(&arg0->unk_004);
arg0++;
}
main_pool_pop_state('MONS');
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00B14.s")
void func_86B00258(void) {
main_pool_push_state('MONS');
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B00C34.s")
void func_86B0027C(unk_D_86B0E5F0* arg0, unk_D_86B0C4C8* arg1) {
func_8001BB58(&arg0->unk_004);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0100C.s")
arg0->unk_000 = func_80019D18(arg1->unk_0C);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0107C.s")
func_8001BC34(&arg0->unk_004, 0, arg1->unk_0C, arg0->unk_000->unk_08->unk_00[0]);
func_8001BD04(&arg0->unk_004, arg1->unk_10);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B010FC.s")
if (arg1->unk_0C == 6) {
arg0->unk_004.unk_0A6 = 0;
} else {
arg0->unk_004.unk_0A6 = 0xFF;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B0111C.s")
func_80017464(&arg0->unk_004, 0);
arg0->unk_004.unk_000.unk_02 &= ~0x40;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_15FA60/func_86B01190.s")
void func_86B0032C(unk_D_86B0E5F0* arg0, unk_D_86B0C4C8* arg1) {
arg0->unk_004.unk_024.x = arg1->unk_00.x;
arg0->unk_004.unk_024.y = arg1->unk_00.y;
arg0->unk_004.unk_024.z = arg1->unk_00.z;
}
void func_86B00348(s32 arg0) {
D_86B0E5D8->unk_00 = D_86B0C264[arg0].unk_0C;
D_86B0E5D8->unk_02 = D_86B0C264[arg0].unk_0E;
D_86B0E5D8->unk_08 = D_86B0C264[arg0].unk_18;
D_86B0E5D8->unk_0A = D_86B0C264[arg0].unk_1A;
D_86B0E5D8->unk_05 = D_86B0C264[arg0].unk_10;
D_86B0E5D8->unk_06 = D_86B0C264[arg0].unk_12;
D_86B0E5D8->unk_07 = D_86B0C264[arg0].unk_14;
D_86B0E5D8->unk_04 = D_86B0C264[arg0].unk_16;
}
void func_86B003CC(s32 arg0) {
unk_D_86B0C4C8* var_s0 = D_86B0C4C8[arg0];
unk_D_86B0E5F0* var_s1 = D_86B0E5F0;
func_86B001D8();
func_86B00258();
while (var_s0->unk_0C != 0x98) {
func_86B0027C(var_s1, var_s0);
func_86B0032C(var_s1, var_s0);
var_s1->unk_16C = 1;
var_s1++;
var_s0++;
}
func_86B00348(arg0);
}
void func_86B00470(s32 arg0) {
unk_D_86B0C4C8* sp2C = D_86B0C4C8[arg0];
unk_D_86B0E5F0* var_s1 = D_86B0E5F0;
func_86B001FC(D_86B0E5F0);
func_86B001D8();
func_86B00258();
while (sp2C->unk_0C != 0x98) {
func_86B0027C(var_s1, sp2C);
func_86B0032C(var_s1, sp2C);
var_s1->unk_16C = 1;
var_s1++;
sp2C++;
}
func_86B00348(arg0);
if (arg0 == 4) {
func_8001BD9C(&D_86B0E5F0[0].unk_004, 0);
}
}
void func_86B0054C(s32 arg0) {
if (arg0 == 4) {
D_86B0E5D4->unk_00->unk_60.at.x = -0.04f;
D_86B0E5D4->unk_00->unk_60.at.y = 24.2f;
D_86B0E5D4->unk_00->unk_60.at.z = -4.08f;
D_86B0E5D4->unk_00->unk_60.eye.x = 0.04f;
D_86B0E5D4->unk_00->unk_60.eye.y = 24.2f;
D_86B0E5D4->unk_00->unk_60.eye.z = 177.41f;
D_86B0E5D4->unk_00->unk_24.fovy = 25.0f;
} else {
D_86B0E5D4->unk_04.unk_00.x = D_86B0C264[arg0].unk_00.x;
D_86B0E5D4->unk_04.unk_00.y = D_86B0C264[arg0].unk_00.y;
D_86B0E5D4->unk_04.unk_00.z = D_86B0C264[arg0].unk_00.z;
func_86B0194C(&D_86B0C160[arg0], D_86B0E5D4);
func_86B01A40(&D_86B0E5D4->unk_04, D_86B0E5D4);
}
}
void func_86B00680(void) {
}
void func_86B00688(void) {
s32 i = 0;
if ((D_86B0E5D4->unk_04.unk_4C != 5) && (D_86B0E5D4->unk_04.unk_4C != 6) && (D_86B0E5D4->unk_04.unk_4C != 7) &&
(D_86B0E5D4->unk_04.unk_4C != 8)) {
if (D_86B0E5D4->unk_04.unk_44 != 4) {
while (D_86B0C4C8[D_86B0E5D4->unk_04.unk_44][i].unk_0C != 0x98) {
if (func_800174E4(&D_86B0E5F0[i].unk_004) != 0) {
func_80017464(&D_86B0E5F0[i].unk_004, 0);
}
i++;
}
}
}
}
void func_86B00794(void) {
if (D_86B0E5D4->unk_04.unk_48 == 1) {
func_8001F504(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, 0, D_86B0EBB0);
}
}
void func_86B007EC(void) {
if (D_86B0E5D4->unk_04.unk_44 == 2) {
func_86B01D8C(&D_86B0BD60, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 4, 0x80);
}
}
s32 func_86B00848(s32 arg0) {
unk_D_86B0E5F0* var_v0 = D_86B0E5F0;
unk_D_86B0C4C8* var_v1 = D_86B0C4C8[arg0];
s32 var_a1 = 1;
while (var_v1->unk_0C != 0x98) {
var_v0->unk_004.unk_024.z += 20.0f;
if (var_v0->unk_004.unk_024.z <= 650.0f) {
var_a1 = 0;
}
var_v0++;
var_v1++;
}
return var_a1;
}
void func_86B008C4(void) {
func_80007990(1);
func_80006CB4(0xC);
D_86B0E5D4->unk_04.unk_4C = 0;
D_86B0E5D4->unk_04.unk_50 = 0;
}
void func_86B00904(void) {
D_86B0E5D4->unk_04.unk_4C = 9;
D_86B0E5D4->unk_04.unk_50 = 0;
D_86B0E5F0->unk_004.unk_000.unk_01 &= ~1;
D_86B0E5DC = 1;
}
void func_86B00944(s32 arg0) {
unk_D_86B0C4C8* ptr1 = D_86B0C4C8[arg0];
unk_D_86B0E5F0* ptr2 = &D_86B0E5F0[0];
s16 sp88[] = {
// D_86B0BD20
0x1554,
0x1554,
0x1554,
0x1554,
};
s16 sp80[] = {
// D_86B0BD28
0x18E2,
0x11C6,
0x1554,
0x1554,
};
f32 sp70[] = { 1000.0f, 1000.0f, 2000.0f, 2000.0f }; // D_86B0BD30
f32 sp60[] = { 1.0f, 1.0f, 100.0f, 50.0f }; // D_86B0BD40
while (ptr1->unk_0C != 0x98) {
if (func_86B01670(D_86B0E5D4->unk_00, &ptr2->unk_004, sp88[arg0], sp80[arg0], sp70[arg0], sp60[arg0]) != 0) {
ptr2->unk_004.unk_000.unk_01 |= 1;
} else {
ptr2->unk_004.unk_000.unk_01 &= ~1;
}
ptr2++;
ptr1++;
}
}
void func_86B00AE4(void) {
Cont_StartReadInputs();
Cont_ReadInputs();
func_8001F730();
}
void func_86B00B14(void) {
D_86B0E5D4 = main_pool_alloc(sizeof(unk_D_86B0E5D4), 0);
bzero(D_86B0E5D4, sizeof(unk_D_86B0E5D4));
D_86B0E5D8 = main_pool_alloc(sizeof(unk_D_86B0E5D8), 0);
bzero(D_86B0E5D8, sizeof(unk_D_86B0E5D8));
D_86B0E5D4->unk_00 = D_86B0E5D0->unk_0C;
D_86B0E5D4->unk_00->unk_24.near = 50.0f;
D_86B0E5D4->unk_00->unk_24.far = 8400.0f;
D_86B0E5D4->unk_00->unk_24.fovy = 30.0f;
D_86B0E5D4->unk_00->unk_60.at.x = 50.0f;
D_86B0E5D4->unk_00->unk_60.at.y = 50.0f;
D_86B0E5D4->unk_00->unk_60.at.z = 50.0f;
D_86B0E5D4->unk_00->unk_60.eye.x = 0.0f;
D_86B0E5D4->unk_00->unk_60.eye.y = 0.0f;
D_86B0E5D4->unk_00->unk_60.eye.z = 0.0f;
D_86B0E5D4->unk_04.unk_4C = 8;
D_86B0E5D4->unk_04.unk_50 = 0;
D_86B0E5D4->unk_04.unk_48 = 0;
}
s32 func_86B00C34(void) {
if (((gPlayer1Controller->buttonPressed & 0x1000) || (gPlayer1Controller->buttonPressed & 0x8000) ||
(gPlayer1Controller->buttonPressed & 0x4000)) &&
(D_86B0E5D4->unk_04.unk_48 == 0)) {
if ((D_86B0E5D4->unk_04.unk_4C != 8) && (D_86B0E5D4->unk_04.unk_4C != 5)) {
D_86B0E5D4->unk_04.unk_48 = 1;
func_8004B9C4(0xA);
D_86B0EBB0 = 0;
D_86B0EBB4 = 2;
}
}
if (D_86B0E5D4->unk_04.unk_48 == 1) {
D_86B0EBB0 = func_8001046C(D_86B0EBB0, 0xFF, 0x1E, 0x1E);
if (D_86B0EBB0 == 0xFF) {
return 1;
}
}
switch (D_86B0E5D4->unk_04.unk_4C) {
case 5:
if (D_86B0E5D4->unk_04.unk_48 == 1) {
return 1;
}
if (D_86B0E5D4->unk_04.unk_44 == 4) {
D_86B0E5D4->unk_04.unk_50 = 0;
D_86B0EBB4 = 1;
return 1;
}
D_86B0E5D4->unk_04.unk_44++;
func_86B0054C(D_86B0E5D4->unk_04.unk_44);
func_86B00470(D_86B0E5D4->unk_04.unk_44);
D_86B0E5D4->unk_04.unk_4C = 6;
D_86B0E5D4->unk_04.unk_50 = 0;
break;
case 6:
if (D_86B0E5D4->unk_04.unk_50++ >= 4) {
func_80007990(1);
func_80006C6C(0x20);
D_86B0E5D4->unk_04.unk_4C = 7;
if ((D_86B0E5D4->unk_04.unk_44 == 0) || (D_86B0E5D4->unk_04.unk_44 == 1)) {
func_86B01AAC(&D_86B0E5D4->unk_04, D_86B0E5D4);
}
}
break;
case 7:
if (D_86B0E5D4->unk_04.unk_44 == 4) {
if (func_800174E4(&D_86B0E5F0[0].unk_004) != 0) {
func_86B00904();
}
} else {
if (D_86B0E5D4->unk_04.unk_44 >= 2) {
if (func_86B00848(D_86B0E5D4->unk_04.unk_44) != 0) {
func_86B008C4();
}
} else if (D_86B0E5D4->unk_04.unk_6C < D_86B0E5D4->unk_04.unk_30) {
func_86B008C4();
}
if ((D_86B0E5D4->unk_04.unk_44 == 0) || (D_86B0E5D4->unk_04.unk_44 == 1)) {
func_86B01AAC(&D_86B0E5D4->unk_04, D_86B0E5D4);
}
func_86B00944(D_86B0E5D4->unk_04.unk_44);
}
break;
case 8:
if (D_86B0E5D4->unk_04.unk_50++ >= 0xB) {
D_86B0E5D4->unk_04.unk_44 = 0;
func_86B0054C(D_86B0E5D4->unk_04.unk_44);
D_86B0E5D4->unk_04.unk_4C = 6;
D_86B0E5D4->unk_04.unk_50 = 0;
func_86B003CC(D_86B0E5D4->unk_04.unk_44);
func_8004B1CC(0x29);
}
break;
case 9:
if (D_86B0E5D4->unk_04.unk_50++ >= 3) {
D_86B0E5D4->unk_04.unk_4C = 5;
D_86B0E5D4->unk_04.unk_50 = 0;
}
break;
default:
if (D_86B0E5D4->unk_04.unk_44 != 4) {
if (D_86B0E5D4->unk_04.unk_44 >= 2) {
func_86B00848(D_86B0E5D4->unk_04.unk_44);
} else {
func_86B01AAC(&D_86B0E5D4->unk_04, D_86B0E5D4);
}
}
if (D_86B0E5D4->unk_04.unk_50++ >= 0xE) {
D_86B0E5D4->unk_04.unk_4C = 5;
D_86B0E5D4->unk_04.unk_50 = 0;
}
break;
}
return 0;
}
void func_86B01004(void) {
}
void func_86B0100C(void) {
func_800079C4();
func_8000699C(&gDisplayListHead, 1);
func_80015348();
func_86B007EC();
func_86B01C00(D_86B0E5E8);
func_80015094(D_86B0E5D0);
func_86B00794();
func_86B02348();
func_80007778();
}
void func_86B0107C(void) {
s32 var_s1 = 1;
s32 var_s0 = 0;
while (var_s1 != 0) {
func_86B00AE4();
func_8140C5D0();
if (func_86B00C34() != 0) {
var_s1 = 0;
}
var_s0++;
if (var_s0 == 0x50) {
var_s0 = 0;
}
func_86B00688();
func_86B0100C();
}
}
void func_86B010FC(void) {
func_86B0100C();
}
void func_86B0111C(void) {
MemoryBlock* sp1C;
sp1C = func_80002D10(main_pool_get_available(), 0);
D_86B0E5D0 = process_geo_layout(sp1C, &D_86B0BBF8);
func_80002D60(sp1C);
func_8001BB20();
func_8001987C();
func_86B00B14();
D_86B0EBB0 = 0;
D_86B0E5DC = 0;
}
s32 func_86B01190(void) {
main_pool_push_state('MINI');
func_8001E94C(6, 0);
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
FRAGMENT_LOAD(fragment31);
func_80004454((((u32)D_8D000000 & 0x0FF00000) >> 0x14) - 0x10, _5C7A70_ROM_START, _5C7A70_ROM_END);
func_80028AFC(2);
func_80027FA0(&D_86B0EBB8, 0);
D_86B0E5E4 = ASSET_LOAD2(backgrounds, 1, 1);
if (D_86B0EBB8 == 0x1F8) {
D_86B0E5E8 = func_8000484C(D_86B0E5E4, 0x11);
} else {
D_86B0E5E8 = func_8000484C(D_86B0E5E4, 0);
}
func_8002D510();
D_86B0E5E0 = func_8002D5AC(0x14);
func_86B0111C();
func_80007754();
func_86B0107C();
func_86B010FC();
func_8000771C();
func_8001E9CC();
main_pool_pop_state('MINI');
return D_86B0EBB4;
}

View File

@ -1,15 +1,62 @@
#include "global.h"
#include "fragment17.h"
#include "src/math_util.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B01320.s")
u16 func_86B01320(s32 arg0) {
return ((f32)(u32)MathUtil_Random16() / 65535.0) * arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B01404.s")
Vec3f* func_86B01404(Vec3f* arg0, Vec3f* arg1) {
arg0->x = arg1->x;
arg0->y = arg1->y;
arg0->z = arg1->z;
return arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B01424.s")
Vec3s* func_86B01424(Vec3s* arg0, Vec3s* arg1) {
arg0->x = arg1->x;
arg0->y = arg1->y;
arg0->z = arg1->z;
return arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B01444.s")
void func_86B01444(Vec3f* arg0) {
arg0->x = arg0->y = arg0->z = 0.0f;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B0145C.s")
void func_86B0145C(f32* arg0, f32 arg1, f32 arg2) {
*arg0 = *arg0 + ((arg1 - *arg0) * arg2);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B014C4.s")
if ((*arg0 < 0.001) && (*arg0 > -0.001)) {
*arg0 = 0.0f;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_160CB0/func_86B01528.s")
f32 func_86B014C4(Vec3f arg0, Vec3f arg1) {
return sqrtf(SQ(arg1.x - arg0.x) + SQ(arg1.y - arg0.y) + SQ(arg1.z - arg0.z));
}
void func_86B01528(MtxF* arg0, MtxF* arg1) {
f32 sp24 = sqrtf(SQ(arg1->mf[0][0]) + SQ(arg1->mf[0][1]) + SQ(arg1->mf[0][2]));
f32 sp20 = sqrtf(SQ(arg1->mf[1][0]) + SQ(arg1->mf[1][1]) + SQ(arg1->mf[1][2]));
f32 sp1C = sqrtf(SQ(arg1->mf[2][0]) + SQ(arg1->mf[2][1]) + SQ(arg1->mf[2][2]));
arg0->mf[0][0] = arg1->mf[0][0] * sp24;
arg0->mf[0][1] = arg1->mf[1][0] * sp24;
arg0->mf[0][2] = arg1->mf[2][0] * sp24;
arg0->mf[0][3] = 0.0f;
arg0->mf[1][0] = arg1->mf[0][1] * sp20;
arg0->mf[1][1] = arg1->mf[1][1] * sp20;
arg0->mf[1][2] = arg1->mf[2][1] * sp20;
arg0->mf[1][3] = 0.0f;
arg0->mf[2][0] = arg1->mf[0][2] * sp1C;
arg0->mf[2][1] = arg1->mf[1][2] * sp1C;
arg0->mf[2][2] = arg1->mf[2][2] * sp1C;
arg0->mf[2][3] = 0.0f;
arg0->mf[3][0] = 0.0f;
arg0->mf[3][1] = 0.0f;
arg0->mf[3][2] = 0.0f;
arg0->mf[3][3] = 1.0f;
}

View File

@ -1,19 +1,145 @@
#include "global.h"
#include "fragment17.h"
#include "src/F420.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01670.s")
u16 func_86B01670(unk_D_86002F34_00C* arg0, unk_D_86002F58_004_000* arg1, s16 arg2, s16 arg3, f32 arg4, f32 arg5) {
UNUSED s32 pad[6];
f32 sp6C;
f32 sp68;
f32 sp64;
f32 sp60;
f32 sp5C;
unk_D_86002F58_004_000* arg11;
f32 sp54;
f32 sp50;
UNUSED s32 pad3;
f32 sp48;
s16 sp46;
s16 sp44;
f32 sp40;
UNUSED s32 pad2;
f32 sp38;
s32 sp34 = 0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01898.s")
func_800102A4(&arg0->unk_60.at, &arg0->unk_60.eye, &sp48, &sp46, &sp44);
sp40 = (COSS(sp44 + 0x8000) * arg5) + arg0->unk_60.eye.z;
sp38 = (SINS(sp44 + 0x8000) * arg5) + arg0->unk_60.eye.x;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B018D4.s")
sp54 = (COSS((sp44 - arg3) + 0x8000) * arg4) + sp40;
sp60 = (SINS((sp44 - arg3) + 0x8000) * arg4) + sp38;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B018E8.s")
sp50 = (COSS((sp44 + arg2) + 0x8000) * arg4) + sp40;
sp5C = (SINS((sp44 + arg2) + 0x8000) * arg4) + sp38;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01924.s")
sp6C =
((sp54 - arg1->unk_024.z) * (sp5C - arg1->unk_024.x)) - ((sp50 - arg1->unk_024.z) * (sp60 - arg1->unk_024.x));
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01938.s")
arg11 = arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B0194C.s")
sp68 = ((sp50 - arg11->unk_024.z) * (sp38 - arg11->unk_024.x)) -
((sp40 - arg11->unk_024.z) * (sp5C - arg11->unk_024.x));
sp64 = ((sp40 - arg11->unk_024.z) * (sp60 - arg11->unk_024.x)) -
((sp54 - arg11->unk_024.z) * (sp38 - arg11->unk_024.x));
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01A40.s")
if (((sp6C >= 0.0f) && (sp68 >= 0.0f) && (sp64 >= 0.0f)) || ((sp6C <= 0.0f) && (sp68 <= 0.0f) && (sp64 <= 0.0f))) {
sp34 = 1;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161000/func_86B01AAC.s")
return sp34;
}
void func_86B01898(unk_D_86B0E5D4_04* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) {
arg0->unk_0C = arg1;
arg0->unk_0E = arg2;
arg0->unk_20 = arg3;
arg0->unk_22 = arg4;
}
void func_86B018D4(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2) {
arg0->unk_18 = arg1;
arg0->unk_2C = arg2;
}
void func_86B018E8(unk_D_86B0E5D4_04* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) {
arg0->unk_12 = arg1;
arg0->unk_14 = arg2;
arg0->unk_26 = arg3;
arg0->unk_28 = arg4;
}
void func_86B01924(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2) {
arg0->unk_1C = arg1;
arg0->unk_30 = arg2;
}
void func_86B01938(unk_D_86B0E5D4_04* arg0, f32 arg1, f32 arg2) {
arg0->unk_34 = arg1;
arg0->unk_38 = arg2;
}
void func_86B0194C(unk_D_86B0C160* arg0, unk_D_86B0E5D4* arg1) {
unk_D_86B0E5D4_04* ptr = &arg1->unk_04;
unk_D_86002F34_00C* ptr2 = arg1->unk_00;
f32 sp34;
f32 sp30;
f32 sp2C;
f32 sp28;
ptr->unk_74 = 0.0f;
ptr->unk_68 = 0;
if (arg0->unk_30 != 255.0f) {
ptr2->unk_24.fovy = ptr->unk_3C = arg0->unk_30;
} else {
ptr->unk_3C = arg0->unk_30;
}
sp34 = arg0->unk_0C;
sp30 = arg0->unk_20;
sp2C = arg0->unk_10;
sp28 = arg0->unk_24;
func_86B01898(ptr, arg0->unk_00, arg0->unk_02, arg0->unk_14, arg0->unk_16);
func_86B018D4(ptr, sp34, sp30);
func_86B018E8(ptr, arg0->unk_06, arg0->unk_08, arg0->unk_1A, arg0->unk_1C);
func_86B01924(ptr, sp2C, sp28);
func_86B01938(ptr, arg0->unk_28, arg0->unk_2C);
}
void func_86B01A40(unk_D_86B0E5D4_04* arg0, unk_D_86B0E5D4* arg1) {
unk_D_86002F34_00C* sp2C = arg1->unk_00;
func_80010354(&arg0->unk_00, &sp2C->unk_60.at, arg0->unk_18, arg0->unk_0C, arg0->unk_0E);
func_80010354(&sp2C->unk_60.at, &sp2C->unk_60.eye, arg0->unk_1C, arg0->unk_12, arg0->unk_14);
}
s32 func_86B01AAC(unk_D_86B0E5D4_04* arg0, unk_D_86B0E5D4* arg1) {
unk_D_86002F34_00C* temp_s2 = arg1->unk_00;
Vec3f sp58;
Vec3f sp4C;
UNUSED s32 pad[3];
f32 sp3C;
s16 sp3A;
s16 sp38;
if (arg0->unk_3C != 255.0f) {
temp_s2->unk_24.fovy = arg0->unk_3C;
} else {
func_86B0145C(&temp_s2->unk_24.fovy, 30.0f, 0.06f);
}
func_80010354(&arg0->unk_00, &sp58, arg0->unk_18, arg0->unk_0C, arg0->unk_0E);
func_80010354(&arg0->unk_00, &sp4C, arg0->unk_2C, arg0->unk_20, arg0->unk_22);
func_800102A4(&sp58, &sp4C, &sp3C, &sp3A, &sp38);
arg1->unk_04.unk_68 = func_800104AC(arg1->unk_04.unk_68, sp3C, arg0->unk_34, arg0->unk_34);
func_80010354(&sp58, &temp_s2->unk_60.at, arg1->unk_04.unk_68, sp3A, sp38);
func_80010354(&temp_s2->unk_60.at, &temp_s2->unk_60.eye, arg0->unk_1C, arg0->unk_12, arg0->unk_14);
arg1->unk_04.unk_6C = sp3C - arg1->unk_04.unk_68;
if (arg1->unk_04.unk_6C <= 5.0f) {
return 1;
}
return 0;
}

View File

@ -1,7 +1,113 @@
#include "global.h"
#include "fragment17.h"
#include "src/1CF30.h"
#include "src/2E110.h"
#include "src/6A40.h"
#include "src/6BC0.h"
#include "src/controller.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161590/func_86B01C00.s")
void func_86B01C00(u8* arg0) {
s32 i;
s32 j;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161590/func_86B01D8C.s")
if (D_86B0E5DC == 0) {
return;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_161590/func_86B02348.s")
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGB, G_CC_DECALRGB);
gDPPipeSync(gDisplayListHead++);
if (0) {}
for (i = 0; i < 15; i++) {
for (j = 0; j < 20; j++, arg0 += 0x200) {
func_8001C6AC(j * 16, i * 16, 0x10, 0x10, arg0, 0x10, 0);
}
}
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_86B01D8C(u8* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, u8 arg5, u8 arg6) {
unk_D_80068BB0* temp_s1 = func_8000648C();
Vtx* temp_s2 = func_80005F5C(sizeof(Vtx) * 4);
Mtx* spCC = func_80005F5C(sizeof(Mtx) * 1);
Vp* spC8 = func_80005F5C(sizeof(Vp));
func_8001E6E8(spC8, temp_s1->width, temp_s1->height);
gSPViewport(gDisplayListHead++, (u32)spC8 & 0x1FFFFFFF);
guOrtho(spCC, 0.5f, temp_s1->width - 0.5f, temp_s1->height - 0.5f, 0.5f, -2.0f, 2.0f, 1.0f);
func_8001E680(&temp_s2[0], arg1, arg2, -1, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF);
func_8001E680(&temp_s2[1], arg1 + arg3, arg2, -1, arg5 << 5, 0, 0xFF, 0xFF, 0xFF, 0xFF);
func_8001E680(&temp_s2[2], arg1, arg2 + arg4, -1, 0, arg6 << 5, 0xFF, 0xFF, 0xFF, 0xFF);
func_8001E680(&temp_s2[3], arg1 + arg3, arg2 + arg4, -1, arg5 << 5, arg6 << 5, 0xFF, 0xFF, 0xFF, 0xFF);
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING |
0x0040F9FA);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGB, G_CC_DECALRGB);
gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP);
gDPSetTextureLOD(gDisplayListHead++, G_TL_TILE);
gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPPerspNormalize(gDisplayListHead++, 0xFFFF);
gSPMatrix(gDisplayListHead++, (u32)spCC & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, (u32)&D_8006F010 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPLoadTextureTile(gDisplayListHead++, arg0, G_IM_FMT_RGBA, G_IM_SIZ_16b, arg5, arg6, 0, 0, arg5 - 1, arg6 - 1, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
gSPVertex(gDisplayListHead++, (u32)temp_s2 & 0x1FFFFFFF, 4, 0);
gSP2Triangles(gDisplayListHead++, 0, 2, 3, 0, 0, 3, 1, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
}
void func_86B02348(void) {
static s32 D_86B0BD50 = 0;
s32 sp24;
s16 temp_s0;
if (!(Cont_GetControllerBits() & 1)) {
sp24 = func_8001F5B0(4, 0, func_8002D7C0(NULL, 0, D_86B0E5E0, 0));
temp_s0 = 0x50 - D_86B0BD50;
if (D_86B0E5DC != 1) {
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 16, 0, 304, 240);
func_8001F3F4();
func_8001EBE0(4, 0);
func_8001F1E8(temp_s0, 0xB3, func_8002D7C0(NULL, 0, D_86B0E5E0, 0));
temp_s0 += sp24 + 0x1E;
if (temp_s0 < 0x140) {
func_8001F1E8(temp_s0, 0xB3, func_8002D7C0(NULL, 0, D_86B0E5E0, 0));
}
func_8001F444();
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
D_86B0BD50++;
if (D_86B0BD50 >= (sp24 + 0x50)) {
D_86B0BD50 = 0x32;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,93 @@
#include "global.h"
#include "fragment17.h"
#include "src/1CF30.h"
#include "src/6A40.h"
#include "src/6BC0.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_164B00/func_86B05170.s")
void func_86B05170(u8* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, u8 width, u8 height, u8 uls, u8 ult, u8 lrs,
u8 lrt, u8 argB, u8 argC, unk_D_86B0DAE0* argD, s32 argE) {
unk_D_80068BB0* temp_s1 = func_8000648C();
Vtx* temp_s6 = func_80005F5C(sizeof(Vtx) * 4);
Mtx* spD4 = func_80005F5C(sizeof(Mtx) * 1);
Vp* temp_v0 = func_80005F5C(sizeof(Vp) * 1);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_164B00/func_86B05944.s")
func_8001E6E8(temp_v0, temp_s1->width, temp_s1->height);
gSPViewport(gDisplayListHead++, (u32)temp_v0 & 0x1FFFFFFF);
guOrtho(spD4, 0.5f, temp_s1->width - 0.5f, temp_s1->height - 0.5f, 0.5f, -2.0f, 2.0f, 1.0f);
if (argE != 0) {
func_8001E680(&temp_s6[0], arg1, arg2, -1, argC << 5, 0, argD->unk_00.unk_12, argD->unk_00.unk_14,
argD->unk_00.unk_16, 0xFF);
func_8001E680(&temp_s6[1], arg1 + arg3, arg2, -1, argB << 5, 0, argD->unk_00.unk_12, argD->unk_00.unk_14,
argD->unk_00.unk_16, 0xFF);
func_8001E680(&temp_s6[2], arg1, arg2 + arg4, -1, argC << 5, height << 5, argD->unk_00.unk_0C,
argD->unk_00.unk_0E, argD->unk_00.unk_10, 0xFF);
func_8001E680(&temp_s6[3], arg1 + arg3, arg2 + arg4, -1, argB << 5, height << 5, argD->unk_00.unk_0C,
argD->unk_00.unk_0E, argD->unk_00.unk_10, 0xFF);
} else {
func_8001E680(&temp_s6[0], arg1, arg2, -1, argC << 5, 0, argD->unk_00.unk_0C, argD->unk_00.unk_0E,
argD->unk_00.unk_10, 0xFF);
func_8001E680(&temp_s6[1], arg1 + arg3, arg2, -1, argB << 5, 0, argD->unk_00.unk_0C, argD->unk_00.unk_0E,
argD->unk_00.unk_10, 0xFF);
func_8001E680(&temp_s6[2], arg1, arg2 + arg4, -1, argC << 5, height << 5, argD->unk_00.unk_12,
argD->unk_00.unk_14, argD->unk_00.unk_16, 0xFF);
func_8001E680(&temp_s6[3], arg1 + arg3, arg2 + arg4, -1, argB << 5, height << 5, argD->unk_00.unk_12,
argD->unk_00.unk_14, argD->unk_00.unk_16, 0xFF);
}
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE);
gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP);
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER | G_LIGHTING);
gDPSetCombineLERP(gDisplayListHead++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0, COMBINED, 0,
SHADE, 0, 0, 0, 0, COMBINED);
gDPSetRenderMode(gDisplayListHead++, G_RM_PASS, G_RM_XLU_SURF2);
gDPSetEnvColor(gDisplayListHead++, argD->unk_00.unk_06, argD->unk_00.unk_08, argD->unk_00.unk_0A, 255);
gDPSetPrimColor(gDisplayListHead++, 0, 0, argD->unk_00.unk_00, argD->unk_00.unk_02, argD->unk_00.unk_04, 255);
gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPLoadTextureTile(gDisplayListHead++, arg0, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, uls, ult, lrs - 1, lrt - 1, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
gSPPerspNormalize(gDisplayListHead++, 0xFFFF);
gSPMatrix(gDisplayListHead++, (u32)spD4 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, (u32)&D_8006F010 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPVertex(gDisplayListHead++, (u32)temp_s6 & 0x1FFFFFFF, 4, 0);
gSP2Triangles(gDisplayListHead++, 0, 2, 3, 0, 0, 3, 1, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
}
void func_86B05944(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) {
unk_D_80068BB0* temp_s1 = func_8000648C();
Vtx* temp_s2 = func_80005F5C(sizeof(Vtx) * 4);
Mtx* sp84 = func_80005F5C(sizeof(Mtx) * 1);
Vp* sp80 = func_80005F5C(sizeof(Vp) * 1);
func_8001E6E8(sp80, temp_s1->width, temp_s1->height);
gSPViewport(gDisplayListHead++, (u32)sp80 & 0x1FFFFFFF);
guOrtho(sp84, 0.5f, temp_s1->width - 0.5f, temp_s1->height - 0.5f, 0.5f, -2.0f, 2.0f, 1.0f);
func_8001E680(&temp_s2[0], arg0, arg1, -1, 0, 0, 0, 0, 0, arg4);
func_8001E680(&temp_s2[1], arg0 + arg2, arg1, -1, 0, 0, 0, 0, 0, arg4);
func_8001E680(&temp_s2[2], arg0, arg1 + arg3, -1, 0, 0, 0, 0, 0, arg4);
func_8001E680(&temp_s2[3], arg0 + arg2, arg1 + arg3, -1, 0, 0, 0, 0, 0, arg4);
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER | G_LIGHTING);
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gSPPerspNormalize(gDisplayListHead++, 0xFFFF);
gSPMatrix(gDisplayListHead++, (u32)sp84 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, (u32)&D_8006F010 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPVertex(gDisplayListHead++, (u32)temp_s2 & 0x1FFFFFFF, 4, 0);
gSP2Triangles(gDisplayListHead++, 0, 2, 3, 0, 0, 3, 1, 0);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,25 +1,163 @@
#include "global.h"
#include "fragment17.h"
#include "src/F420.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08780.s")
typedef struct unk_D_86B0DFC0 {
u8 unk_00[1];
} unk_D_86B0DFC0; // size = ??
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B087A0.s")
static unk_D_86B0DFC0 D_86B0DFC0 = { 0x8E };
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B087E8.s")
s16 func_86B08780(void) {
return D_86B0FA78->unk_004.unk_01E.y + 0x8000;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B088E4.s")
s32 func_86B087A0(u8 arg0, u8* arg1, s32 arg2) {
while (arg2--) {
if (arg0 == *arg1) {
return 1;
}
arg1++;
}
return 0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B089B0.s")
void func_86B087E8(unk_D_86B0FA78* arg0, Vec3f* arg1) {
f32 sp24 = 0.0f;
unk_D_86B0DFC0 sp20 = D_86B0DFC0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B089E0.s")
if (func_86B087A0(D_86B0FA78->unk_174, sp20.unk_00, 1) != 0) {
sp24 = D_86B10660.unk_04 / 1.5f;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08A3C.s")
if (D_86B10660.unk_08 != 0) {
arg1->x = arg0->unk_004.unk_024.x;
arg1->y = arg0->unk_004.unk_024.y + sp24;
arg1->z = arg0->unk_004.unk_024.z;
} else {
arg1->x = arg0->unk_004.unk_024.x;
arg1->y = arg0->unk_004.unk_024.y + D_86B10660.unk_04;
arg1->z = arg0->unk_004.unk_024.z;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08A58.s")
if (arg1->y < 0) {
arg1->y = D_86B10660.unk_04;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08AB4.s")
void func_86B088E4(void) {
func_80010354(&D_86B0FA7C->unk_04, &D_86B0FA7C->unk_00->unk_60.at, D_86B0FA7C->unk_1C, D_86B0FA7C->unk_10,
func_86B08780() + D_86B0FA7C->unk_12);
func_80010354(&D_86B0FA7C->unk_04, &D_86B0FA7C->unk_00->unk_60.eye, D_86B0FA7C->unk_20, D_86B0FA7C->unk_16,
func_86B08780() + D_86B0FA7C->unk_18);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08AD0.s")
D_86B0FA7C->unk_00->unk_60.at.y += D_86B10660.unk_0C;
if (D_86B0FA7C->unk_00->unk_60.eye.y <= 10.0f) {
D_86B0FA7C->unk_00->unk_60.eye.y = 10.0f;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08AEC.s")
f32 func_86B089B0(f32 arg0, f32 arg1) {
f32 temp_fv1 = D_86B10660.unk_00 * arg0;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_168110/func_86B08C44.s")
if (arg1 < temp_fv1) {
return arg1;
}
return temp_fv1;
}
void func_86B089E0(s16 arg0, s16 arg1, s16 arg2, s16 arg3) {
D_86B0FA7C->unk_10 = arg0;
D_86B0FA7C->unk_12 = arg1;
D_86B0FA7C->unk_24 = arg2;
D_86B0FA7C->unk_26 = arg3;
}
void func_86B08A3C(f32 arg0, f32 arg1) {
D_86B0FA7C->unk_1C = arg0;
D_86B0FA7C->unk_30 = arg1;
}
void func_86B08A58(s16 arg0, s16 arg1, s16 arg2, s16 arg3) {
D_86B0FA7C->unk_16 = arg0;
D_86B0FA7C->unk_18 = arg1;
D_86B0FA7C->unk_2A = arg2;
D_86B0FA7C->unk_2C = arg3;
}
void func_86B08AB4(f32 arg0, f32 arg1) {
D_86B0FA7C->unk_20 = arg0;
D_86B0FA7C->unk_34 = arg1;
}
void func_86B08AD0(f32 arg0, f32 arg1) {
D_86B0FA7C->unk_38 = arg0;
D_86B0FA7C->unk_3C = arg1;
}
void func_86B08AEC(unk_D_86B0C160* arg0, unk_D_86002F34_00C* arg1) {
f32 sp34;
f32 sp30;
f32 sp2C;
f32 sp28;
D_86B0FA7C->unk_44 = 0.0f;
if (arg0->unk_30 != 200.0f) {
arg1->unk_24.fovy = D_86B0FA7C->unk_40 = arg0->unk_30;
} else {
D_86B0FA7C->unk_40 = arg0->unk_30;
}
sp34 = func_86B089B0(arg0->unk_0C, 500.0f);
sp30 = func_86B089B0(arg0->unk_20, 500.0f);
sp2C = func_86B089B0(arg0->unk_10, 500.0f);
sp28 = func_86B089B0(arg0->unk_24, 500.0f);
func_86B089E0(arg0->unk_00, func_86B08780() + arg0->unk_02, arg0->unk_14, func_86B08780() + arg0->unk_16);
func_86B08A3C(sp34, sp30);
func_86B08A58(arg0->unk_06, func_86B08780() + arg0->unk_08, arg0->unk_1A, func_86B08780() + arg0->unk_1C);
func_86B08AB4(sp2C, sp28);
func_86B08AD0(arg0->unk_28, arg0->unk_2C);
}
s32 func_86B08C44(unk_D_86002F34_00C* arg0) {
Vec3f sp5C;
Vec3f sp50;
Vec3f sp44;
Vec3f sp38;
f32 sp34;
f32 sp30;
s16 sp2E;
s16 sp2C;
if (D_86B0FA7C->unk_40 != 200.0f) {
arg0->unk_24.fovy = D_86B0FA7C->unk_40;
} else {
func_86B0145C(&arg0->unk_24.fovy, 30.0f, 0.06f);
}
func_86B0145C(&D_86B0FA7C->unk_44, D_86B0FA7C->unk_38, D_86B0FA7C->unk_3C);
func_80010354(&D_86B0FA7C->unk_04, &sp50, D_86B0FA7C->unk_34, D_86B0FA7C->unk_2A,
func_86B08780() + D_86B0FA7C->unk_2C);
if (sp50.y <= 10.0f) {
sp50.y = 10.0f;
}
func_86B01404(&sp44, &arg0->unk_60.eye);
func_800102A4(&sp44, &sp50, &sp34, &sp2E, &sp2C);
func_80010354(&sp44, &arg0->unk_60.eye, D_86B0FA7C->unk_44 * sp34, sp2E, sp2C);
func_80010354(&D_86B0FA7C->unk_04, &sp38, D_86B0FA7C->unk_30, D_86B0FA7C->unk_24,
func_86B08780() + D_86B0FA7C->unk_26);
sp38.y += D_86B10660.unk_0C;
func_86B01404(&sp5C, &arg0->unk_60.at);
func_800102A4(&sp5C, &sp38, &sp30, &sp2E, &sp2C);
func_80010354(&sp5C, &arg0->unk_60.at, D_86B0FA7C->unk_44 * sp30, sp2E, sp2C);
if ((sp34 <= 1.0f) && (sp30 <= 1.0f)) {
return 1;
}
return 0;
}

View File

@ -1,19 +1,369 @@
#include "global.h"
#include "fragment17.h"
#include "src/1CF30.h"
#include "src/6BC0.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B08E50.s")
static Gfx D_86B0DFD0[] = {
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsSPClearGeometryMode(G_ZBUFFER | G_CULL_BACK | G_LIGHTING),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_NOOP2),
gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
gsDPSetPrimColor(0, 0, 5, 5, 5, 255),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPSetTexturePersp(G_TP_NONE),
gsSPEndDisplayList(),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B08EA8.s")
static Gfx D_86B0E018[] = {
gsDPSetCycleType(G_CYC_2CYCLE),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPSetTexturePersp(G_TP_PERSP),
gsSPSetGeometryMode(G_ZBUFFER | G_CULL_BACK | G_LIGHTING),
gsSPEndDisplayList(),
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B08EB4.s")
unk_D_86B0C160 D_86B0E040[] = {
{
0,
0,
0,
0,
12743,
0.0f,
10.0f,
0,
0,
0,
0,
0,
0.0f,
4.0f,
0.15000000596046448f,
0.009999999776482582f,
30.0f,
},
{
0,
0,
0,
0,
0,
0.0f,
10.0f,
0,
0,
0,
0,
0,
0.0f,
3.0f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
7281,
16384,
0.0f,
10.0f,
0,
0,
0,
0,
0,
0.0f,
3.5f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
25486,
9102,
0.0f,
10.0f,
0,
0,
0,
0,
-380,
0.5f,
4.0f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
12743,
0,
-3640,
9102,
3.0f,
10.0f,
0,
0,
0,
1820,
0,
0.0f,
3.5f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
14563,
0,
0.0f,
10.0f,
0,
0,
0,
0,
0,
0.0f,
4.0f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
-7282,
0,
0,
25486,
14563,
2.0f,
10.0f,
0,
0,
0,
0,
-198,
0.5f,
4.0f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
-3640,
23665,
0.0f,
10.0f,
0,
0,
0,
1820,
0,
0.0f,
3.5f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
14563,
0,
0.0f,
10.0f,
0,
0,
0,
0,
0,
0.0f,
4.0f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
{
0,
0,
0,
-3640,
0,
0.0f,
7.0f,
0,
0,
0,
1820,
0,
0.0f,
3.5f,
0.15000000596046448f,
0.009999999776482582f,
200.0f,
},
};
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B08F48.s")
static s16 D_86B106A0;
static s16 D_86B106A2;
static s16 D_86B106A4;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B095C4.s")
void func_86B08E50(s32 arg0, s32 arg1) {
D_86B106A0 = arg0;
D_86B106A4 = arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B0961C.s")
if ((D_86B106A0 == 0) || ((D_86B106A0 != 1) && (D_86B106A0 != 2) && (D_86B106A0 == 3))) {
D_86B106A2 = 0x140;
} else {
D_86B106A2 = 0;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B097B0.s")
s32 func_86B08EA8(void) {
return D_86B106A0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B09928.s")
void func_86B08EB4(void) {
s16 tmp = D_86B106A2;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_1687E0/func_86B09AD8.s")
switch (D_86B106A0) {
case 2:
if (tmp < 0x140) {
tmp += D_86B106A4;
} else {
D_86B106A0 = 0;
}
break;
case 3:
if (tmp > 0) {
tmp -= D_86B106A4;
} else {
D_86B106A0 = 1;
}
if (tmp < 0) {
tmp = 0;
}
break;
}
D_86B106A2 = tmp;
}
Gfx* func_86B08F48(Gfx* gfx, u32 arg1) {
s32 idx1 = arg1 % 2;
s32 idx2 = (arg1 + 1) % 2;
s32 i;
s16 xl;
s16 yl;
gSPDisplayList(gfx++, D_86B0DFD0);
gDPLoadTextureBlock_4b(gfx++, D_3000000, G_IM_FMT_I, 12, 48, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPPipeSync(gfx++);
for (i = idx1; i < 5; i += 2) {
xl = (D_86B106A2 * 2) - 0x140;
yl = (i * 0x30);
gSPScisTextureRectangle(gfx++, xl << 2, yl << 2, (xl + 0x280) << 2, (yl + 24) << 2, 0, 0, 0, 1 << 6, 1 << 10);
gSPScisTextureRectangle(gfx++, xl << 2, (yl + 24) << 2, (xl + 0x280) << 2, (yl + 48) << 2, 0, 0, 0, 1 << 6,
1 << 10);
}
for (i = idx2; i < 5; i += 2) {
xl = -D_86B106A2 * 2;
yl = (i * 0x30);
gSPScisTextureRectangle(gfx++, xl << 2, yl << 2, (xl + 0x280) << 2, (yl + 24) << 2, 0, 0x500, 0, -(1 << 6),
1 << 10);
gSPScisTextureRectangle(gfx++, xl << 2, (yl + 24) << 2, (xl + 0x280) << 2, (yl + 48) << 2, 0, 0x500, 0,
-(1 << 6), 1 << 10);
}
gSPDisplayList(gfx++, D_86B0E018);
return gfx;
}
void func_86B095C4(void) {
Gfx* var_a0 = gDisplayListHead;
if (D_86B106A0 != 0) {
if (D_86B106A0 == 2) {
var_a0 = func_86B08F48(var_a0, 0);
} else {
var_a0 = func_86B08F48(var_a0, 1);
}
}
gDisplayListHead = var_a0;
}
void func_86B0961C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7) {
unk_D_800A7440 sp30;
func_80005FC0(&sp30, arg0, arg1, (arg0 + arg2) - 1, (arg1 + arg3) - 1);
if (func_80006030(&sp30) != 0) {
if (arg6 != 0) {
arg4 += ((sp30.x1 - arg0) * arg6) >> 5;
}
if (arg7 != 0) {
arg5 += ((sp30.y2 - arg1) * arg7) >> 5;
}
sp30.y1 += 1;
sp30.x2 += 1;
gSPTextureRectangle(gDisplayListHead++, sp30.x1 << 2, sp30.y2 << 2, sp30.y1 << 2, sp30.x2 << 2, G_TX_RENDERTILE,
arg4, arg5, arg6, arg7);
}
}
void func_86B097B0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, u8* arg4, UNUSED s32 arg5) {
gDPLoadTextureTile(gDisplayListHead++, arg4, G_IM_FMT_IA, G_IM_SIZ_8b, arg2, arg3, 0, 0, arg2 - 1, arg3 - 1, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
func_86B0961C(arg0, arg1, arg2, arg3, 0, 0, 0x400, 0x400);
}
void func_86B09928(u8* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, unk_D_86B0DAE0_000* arg5) {
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE);
gDPSetCombineLERP(gDisplayListHead++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetEnvColor(gDisplayListHead++, (u8)arg5->unk_06, (u8)arg5->unk_08, (u8)arg5->unk_0A, 255);
gDPSetPrimColor(gDisplayListHead++, 0, 0, (u8)arg5->unk_00, (u8)arg5->unk_02, (u8)arg5->unk_04, 255);
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER | G_LIGHTING);
func_86B097B0(arg1, arg2, arg3, arg4, arg0, arg3);
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_86B09AD8(u8* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) {
gSPDisplayList(gDisplayListHead++, D_8006F518);
func_8001C6AC(arg1, arg2, arg3, arg4, arg0, arg3, 0);
gSPDisplayList(gDisplayListHead++, D_8006F630);
}

View File

@ -1,7 +1,68 @@
#include "global.h"
#include "fragment17.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169510/func_86B09B80.s")
void func_86B09B80(Mtx* arg0, MtxF* arg1) {
arg0->m[0][0] =
((s32)(arg1->mf[0][0] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[0][1] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[0][1] =
((s32)(arg1->mf[0][2] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[0][3] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[0][2] =
((s32)(arg1->mf[1][0] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[1][1] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[0][3] =
((s32)(arg1->mf[1][2] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[1][3] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[1][0] =
((s32)(arg1->mf[2][0] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[2][1] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[1][1] =
((s32)(arg1->mf[2][2] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[2][3] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[1][2] =
((s32)(arg1->mf[3][0] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[3][1] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[1][3] =
((s32)(arg1->mf[3][2] * 65536.0f) & 0xFFFF0000) | (((s32)(arg1->mf[3][3] * 65536.0f) >> 0x10) & 0xFFFF);
arg0->m[2][0] = ((s32)(arg1->mf[0][0] * 65536.0f) << 0x10) | ((s32)(arg1->mf[0][1] * 65536.0f) & 0xFFFF);
arg0->m[2][1] = ((s32)(arg1->mf[0][2] * 65536.0f) << 0x10) | ((s32)(arg1->mf[0][3] * 65536.0f) & 0xFFFF);
arg0->m[2][2] = ((s32)(arg1->mf[1][0] * 65536.0f) << 0x10) | ((s32)(arg1->mf[1][1] * 65536.0f) & 0xFFFF);
arg0->m[2][3] = ((s32)(arg1->mf[1][2] * 65536.0f) << 0x10) | ((s32)(arg1->mf[1][3] * 65536.0f) & 0xFFFF);
arg0->m[3][0] = ((s32)(arg1->mf[2][0] * 65536.0f) << 0x10) | ((s32)(arg1->mf[2][1] * 65536.0f) & 0xFFFF);
arg0->m[3][1] = ((s32)(arg1->mf[2][2] * 65536.0f) << 0x10) | ((s32)(arg1->mf[2][3] * 65536.0f) & 0xFFFF);
arg0->m[3][2] = ((s32)(arg1->mf[3][0] * 65536.0f) << 0x10) | ((s32)(arg1->mf[3][1] * 65536.0f) & 0xFFFF);
arg0->m[3][3] = ((s32)(arg1->mf[3][2] * 65536.0f) << 0x10) | ((s32)(arg1->mf[3][3] * 65536.0f) & 0xFFFF);
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169510/func_86B09EF0.s")
void func_86B09EF0(MtxF* arg0, f32 arg1) {
arg0->mf[0][0] *= arg1;
arg0->mf[1][0] *= arg1;
arg0->mf[2][0] *= arg1;
arg0->mf[0][1] *= arg1;
arg0->mf[1][1] *= arg1;
arg0->mf[2][1] *= arg1;
arg0->mf[0][2] *= arg1;
arg0->mf[1][2] *= arg1;
arg0->mf[2][2] *= arg1;
}
#ifdef NON_MATCHING
void func_86B09F64(MtxF* arg0, f32 arg1, f32 arg2, f32 arg3, u16 arg4, u16 arg5) {
arg0->mf[0][0] = (COSS(arg4) * COSS(arg5)) + (SINS(arg4) * SINS(arg4) * SINS(arg5));
arg0->mf[1][0] = (-COSS(arg4) * SINS(arg5)) + (SINS(arg4) * SINS(arg4) * COSS(arg5));
arg0->mf[2][0] = COSS(arg4) * SINS(arg4);
arg0->mf[3][0] = arg1;
arg0->mf[0][1] = COSS(arg4) * SINS(arg5);
arg0->mf[2][1] = -SINS(arg4);
arg0->mf[1][1] = COSS(arg4) * COSS(arg5);
arg0->mf[3][1] = arg2;
arg0->mf[0][2] = (SINS(arg4) * COSS(arg4) * SINS(arg5)) + (-SINS(arg4) * COSS(arg5));
arg0->mf[1][2] = (SINS(arg4) * COSS(arg4) * COSS(arg5)) + (SINS(arg4) * SINS(arg5));
arg0->mf[2][2] = COSS(arg4) * COSS(arg4);
arg0->mf[3][2] = arg3;
arg0->mf[0][3] = 0.0f;
arg0->mf[1][3] = 0.0f;
arg0->mf[2][3] = 0.0f;
arg0->mf[3][3] = 1.0f;
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169510/func_86B09F64.s")
#endif

View File

@ -1,20 +1,175 @@
#include "global.h"
#include "fragment17.h"
#include "src/12D80.h"
#include "src/17300.h"
#include "src/geo_layout.h"
#include "src/19840.h"
#include "src/1C720.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/26820.h"
#include "src/3FB0.h"
#include "src/6A40.h"
#include "src/6BC0.h"
#include "src/DDC0.h"
#include "src/F420.h"
#include "src/controller.h"
#include "src/memory.h"
#include "src/stage_loader.h"
static u32 D_86B0E250[] = {
0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0x00000032, 0x00000000, 0x00000118,
0x05000000, 0x0D000000, 0x05000000, 0x14000000, 0x002B0012, 0xFFFFFF32, 0x16FFFFFF, 0x0F000003,
0x05000000, 0x0A000000, &D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x01000000,
};
static unk_D_86002F30* D_86B106B0;
static GraphNode* D_86B106B4;
static unk_D_86002F58_004_000 D_86B106B8;
static unk_D_86002F34_00C* D_86B10820;
static BinArchive* D_86B10824;
static u8* D_86B10828;
static u8 D_86B1082C;
static unk_func_80027FA0 D_86B10830;
void func_86B0A0B0(void) {
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A0B8.s")
void func_86B0A0B8(void) {
D_86B10820 = D_86B106B4->unk_0C;
func_8000E88C(&D_86B10820->unk_60.at, 0.0f, 0.0f, 0.0f);
func_8000E88C(&D_86B10820->unk_60.eye, 0.0f, 0.0f, 200.0f);
D_86B10820->unk_24.near = 16.0f;
D_86B10820->unk_24.far = 32768.0f;
D_86B10820->unk_24.fovy = 45.0f;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A15C.s")
void func_86B0A15C(void) {
Cont_StartReadInputs();
Cont_ReadInputs();
func_8001F730();
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A18C.s")
void func_86B0A18C(u8* arg0) {
s32 i;
s32 j;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A30C.s")
if (1) {}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A37C.s")
gDPPipeSync(gDisplayListHead++);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A414.s")
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGB, G_CC_DECALRGB);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A47C.s")
gDPPipeSync(gDisplayListHead++);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_169A40/func_86B0A554.s")
for (i = 0; i < 15; i++) {
for (j = 0; j < 20; j++, arg0 += 0x200) {
func_8001C6AC(j * 0x10, i * 0x10, 0x10, 0x10, arg0, 0x10, 0);
}
}
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_86B0A30C(void) {
func_800079C4();
func_86B0A18C(D_86B10828);
func_800067E4(&gDisplayListHead, 0, 0, 0x140, 0xF0);
func_80015348();
func_80015094(D_86B106B4);
func_86B0A0B0();
func_80007778();
}
s32 func_86B0A37C(void) {
s32 var_v0;
if ((D_86B106B8.unk_040.unk_08 >> 0x10) >= 0x5F) {
func_8001BE34(&D_86B106B8, 0, 0, 0, D_86B1082C += 0x14);
}
if ((D_86B106B8.unk_040.unk_08 >> 0x10) == 0x64) {
func_80007990(1);
func_80006CB4(3);
}
var_v0 = func_800174E4(&D_86B106B8) != 0;
if (var_v0) {
return 1;
}
}
void func_86B0A414(void) {
s32 var_s0 = 1;
func_80006C6C(0xC);
func_8000D1F0(0x30);
while (var_s0 != 0) {
func_86B0A15C();
if (func_86B0A37C() != 0) {
var_s0 = 0;
}
func_86B0A30C();
}
func_800077B4(2);
}
void func_86B0A47C(void) {
MemoryBlock* sp1C = func_80002D10(main_pool_get_available(), 0);
D_86B106B4 = process_geo_layout(sp1C, &D_86B0E250);
func_80002D60(sp1C);
func_8001BB20();
func_86B0A0B8();
func_8001BB58(&D_86B106B8);
func_8001987C();
D_86B106B0 = func_80019D18(0xD6);
func_8001BC34(&D_86B106B8, 0, 0xD6, D_86B106B0->unk_08->unk_00[0]);
func_8001BD04(&D_86B106B8, 1);
func_8000E88C(&D_86B106B8.unk_024, 0.0f, 0.0f, 0.0f);
D_86B1082C = 0;
}
s32 func_86B0A554(void) {
unk_func_80007444* sp24;
main_pool_push_state('MTWO');
func_80005E40(0x10000, 0);
sp24 = func_80007444(0, 1, 3, 1, 2, 1);
func_8001E94C(6, 0);
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
FRAGMENT_LOAD(fragment31);
func_80028AFC(2);
func_80027FA0(&D_86B10830, D_800AE540.unk_11F2);
if (D_800AE540.unk_11F2 == 1) {
D_86B10824 = ASSET_LOAD2(backgrounds, 1, 1);
D_86B10828 = func_8000484C(D_86B10824, 2);
} else if (D_86B10830.unk_00 & 0x100) {
D_86B10824 = ASSET_LOAD2(backgrounds, 1, 1);
D_86B10828 = func_8000484C(D_86B10824, 1);
} else {
D_86B10824 = ASSET_LOAD2(backgrounds, 1, 1);
D_86B10828 = func_8000484C(D_86B10824, 2);
}
func_86B0A47C();
func_80007678(sp24);
func_86B0A414();
func_800076C0();
func_8001E9CC();
func_80005EAC();
main_pool_pop_state('MTWO');
return 0;
}

View File

@ -1,36 +1,453 @@
#include "global.h"
#include "fragment17.h"
#include "src/12D80.h"
#include "src/17300.h"
#include "src/geo_layout.h"
#include "src/19840.h"
#include "src/1C720.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/2E110.h"
#include "src/3FB0.h"
#include "src/4BDC0.h"
#include "src/6A40.h"
#include "src/6BC0.h"
#include "src/F420.h"
#include "src/controller.h"
#include "src/memory.h"
#include "src/stage_loader.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0A750.s")
typedef struct unk_D_86B10BD0 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
} unk_D_86B10BD0; // size >= 0xC
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0A7F8.s")
typedef struct unk_D_86B10BE0 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
} unk_D_86B10BE0; // size >= 0x14
static u32 D_86B0E2B0[] = {
0xA4AAA4E1, 0xA4C7A4C8, 0xA4A6A1AA, 0x20A5C9A1, 0xBCA5C9A1, 0xBCA4CE0A, 0xA5B2A1BC, 0xA5E0A5DC, 0xA1BCA5A4,
0xA4F2A5B2, 0xA5C3A5C8, 0xA4C0A1AA, 0x00000000, 0x4742A5D3, 0xA5EBA4CE, 0xA5B2A1BC, 0xA5E0A5DC, 0xA1BCA5A4,
0xA4AC0A20, 0x20A5B9A5, 0xD4A1BCA5, 0xC9A5A2A5, 0xC3A5D7A1, 0xAA000000, 0xA4B9A4B4, 0xA4A4A4BE, 0xA1AA20A5,
0xC9A1BCA5, 0xC9A5EAA5, 0xAAA4CE0A, 0xA5B2A1BC, 0xA5E0A5DC, 0xA1BCA5A4, 0xA4F2A5B2, 0xA5C3A5C8, 0xA4C0A1AA,
0x00000000, 0x4742A5D3, 0xA5EBA4CE, 0xA5B2A1BC, 0xA5E0A5DC, 0xA1BCA5A4, 0xA4AC0AA4, 0xB5A4E9A4, 0xCBA5B9A5,
0xD4A1BCA5, 0xC9A5A2A5, 0xC3A5D7A4, 0xC0A1AA00,
};
static u32 D_86B0E374[] = {
0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0x00000000, 0x00000000, 0x00000118,
0x05000000, 0x0D000000, 0x05000000, 0x14000000, 0x002B0012, 0xFFFFFF32, 0x16FFFFFF, 0x0F000003,
0x05000000, 0x0A000000, &D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x01000000,
};
static char** D_86B10840;
static unk_D_86002F30* D_86B10844;
static GraphNode* D_86B10848;
static unk_D_86002F58_004_000 D_86B10850;
static unk_D_86002F34_00C* D_86B109B8;
static BinArchive* D_86B109BC;
static u8* D_86B109C0;
static s8 D_86B109C8[0x100];
static s8 D_86B10AC8[0x100];
static s16 D_86B10BC8;
static s16 D_86B10BCA;
static s16 D_86B10BCC;
static unk_D_86B10BD0 D_86B10BD0;
static unk_D_86B10BE0 D_86B10BE0;
void func_86B0A750(void) {
D_86B109B8 = D_86B10848->unk_0C;
D_86B10BC8 = 0;
D_86B10BCA = 0;
D_86B10BCC = 0x78;
func_80010354(&D_86B109B8->unk_60.at, &D_86B109B8->unk_60.eye, D_86B10BCC, D_86B10BC8, D_86B10BCA);
D_86B109B8->unk_24.near = 50.0f;
D_86B109B8->unk_24.far = 6400.0f;
}
void func_86B0A7F8(void) {
D_86B10BD0.unk_00 = 0;
D_86B10BD0.unk_04 = 0;
D_86B10BD0.unk_08 = 0;
D_86B10BE0.unk_10 = 0xA;
}
void func_86B0A81C(void) {
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0A824.s")
void func_86B0A824(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7) {
s16 sp48;
s16 sp44;
s16 var_s2;
s16 var_s3;
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B024.s")
if (arg2 >= 0x10) {
var_s3 = 8;
} else {
var_s3 = arg2 / 2;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B034.s")
if (arg3 >= 0x10) {
var_s2 = 8;
} else {
var_s2 = arg3 / 2;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B040.s")
sp48 = arg2 - (var_s3 * 2);
sp44 = arg3 - (var_s2 * 2);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B0B4.s")
gSPDisplayList(gDisplayListHead++, D_8006F518);
gDPSetEnvColor(gDisplayListHead++, arg4, arg5, arg6, arg7);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B12C.s")
gDPLoadTextureBlock_4b(gDisplayListHead++, D_2028A60, G_IM_FMT_I, 16, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B184.s")
func_8001C330(arg0, arg1, var_s3, var_s2, 0, 0, 0x2000 / var_s3, 0x2000 / var_s2, 0);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B498.s")
gDPLoadTextureBlock_4b(gDisplayListHead++, D_2028AA0, G_IM_FMT_I, 16, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B4D0.s")
func_8001C330((arg0 + arg2) - var_s3, arg1, var_s3, var_s2, 0, 0, 0x2000 / var_s3, 0x2000 / var_s2, 0);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B650.s")
gDPLoadTextureBlock_4b(gDisplayListHead++, D_20289E0, G_IM_FMT_I, 16, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B6C0.s")
func_8001C330(arg0, (arg1 + arg3) - var_s2, var_s3, var_s2, 0, 0, 0x2000 / var_s3, 0x2000 / var_s2, 0);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B810.s")
gDPLoadTextureBlock_4b(gDisplayListHead++, D_2028A20, G_IM_FMT_I, 16, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0B8DC.s")
func_8001C330((arg0 + arg2) - var_s3, (arg1 + arg3) - var_s2, var_s3, var_s2, 0, 0, 0x2000 / var_s3,
0x2000 / var_s2, 0);
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/17/fragment17_16A0E0/func_86B0BA18.s")
gSPDisplayList(gDisplayListHead++, D_8006F498);
if ((sp48 > 0) && (sp44 > 0)) {
func_8001C604(arg0 + var_s3, arg1, sp48, var_s2, arg4, arg5, arg6, arg7);
func_8001C604(arg0, arg1 + var_s3, arg2, sp44, arg4, arg5, arg6, arg7);
func_8001C604(arg0 + var_s3, (arg1 + var_s3) + sp44, sp48, var_s2, arg4, arg5, arg6, arg7);
} else if (sp48 > 0) {
func_8001C604(arg0 + var_s3, arg1, sp48, arg3, arg4, arg5, arg6, arg7);
} else if (sp44 > 0) {
func_8001C604(arg0, arg1 + var_s2, arg2, sp44, arg4, arg5, arg6, arg7);
}
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_86B0B024(void) {
D_86B10BE0.unk_00 = 0xFF;
}
void func_86B0B034(void) {
D_86B10BE0.unk_00 = 0;
}
s32 func_86B0B040(void) {
if (D_86B109C8[D_86B10BE0.unk_04] == 0) {
return 1;
}
D_86B10AC8[D_86B10BE0.unk_04++] = D_86B109C8[D_86B10BE0.unk_04];
if (D_86B109C8[D_86B10BE0.unk_04] == 0) {
return 1;
}
D_86B10AC8[D_86B10BE0.unk_04++] = D_86B109C8[D_86B10BE0.unk_04];
return 0;
}
void func_86B0B0B4(void) {
func_86B0A824(0x3C, 0xBE - (D_86B10BE0.unk_10 / 2), D_86B10BE0.unk_0C, D_86B10BE0.unk_10, 0x50, 0x50, 0xF0, 0x80);
}
void func_86B0B12C(void) {
func_8001F3F4();
func_8001EBE0(2, 0);
func_8001F3B4(0x10);
func_8001F1E8(0x56, 0xAF, "%s", D_86B10AC8);
func_8001F444();
}
void func_86B0B184(void) {
s32 i;
switch (D_86B10BE0.unk_00) {
case 0x0:
if (D_800AE540.unk_0000 == 0x16) {
sprintf(D_86B109C8, func_8002D7C0(NULL, 0, D_86B10840, 0x91));
} else {
sprintf(D_86B109C8, func_8002D7C0(NULL, 0, D_86B10840, 0x93));
}
D_86B10BE0.unk_04 = 0;
D_86B10BE0.unk_08 = 0;
D_86B10BE0.unk_0C = 0xC8;
D_86B10BE0.unk_10 = 0xA;
// clang-format off
for (i = 0; i < 255; i++) { D_86B10AC8[i] = 0; }
// clang-format on
func_86B0B0B4();
D_86B10BE0.unk_00++;
break;
case 0x1:
D_86B10BE0.unk_10 = func_8001046C(D_86B10BE0.unk_10, 0x28, 8, 8);
if (D_86B10BE0.unk_10 == 0x28) {
D_86B10BE0.unk_00++;
}
func_86B0B0B4();
break;
case 0x2:
func_86B0B0B4();
if (func_86B0B040() != 0) {
D_86B10BE0.unk_00++;
}
func_86B0B12C();
break;
case 0x3:
func_86B0B0B4();
func_86B0B12C();
if (D_86B10BE0.unk_08++ == 0x3C) {
if (D_800AE540.unk_0000 == 0x16) {
sprintf(D_86B109C8, func_8002D7C0(NULL, 0, D_86B10840, 0x92));
} else {
sprintf(D_86B109C8, func_8002D7C0(NULL, 0, D_86B10840, 0x94));
}
D_86B10BE0.unk_04 = 0;
D_86B10BE0.unk_08 = 0;
// clang-format off
for (i = 0; i < 255; i++) { D_86B10AC8[i] = 0; }
// clang-format on
D_86B10BE0.unk_00++;
}
break;
case 0x4:
func_86B0B0B4();
if (func_86B0B040() != 0) {
D_86B10BE0.unk_00++;
}
func_86B0B12C();
break;
case 0x5:
func_86B0B0B4();
func_86B0B12C();
if (D_86B10BE0.unk_08++ == 0x41) {
D_86B10BE0.unk_00 = 0xFF;
}
break;
case 0xFF:
D_86B10BE0.unk_10 = func_8001046C(D_86B10BE0.unk_10, 0, 8, 8);
if (D_86B10BE0.unk_10 >= 0xB) {
func_86B0B0B4();
}
break;
}
}
void func_86B0B498(void) {
Cont_StartReadInputs();
Cont_ReadInputs();
func_8001F730();
}
void func_86B0B4C8(void) {
}
void func_86B0B4D0(u8* arg0) {
s32 i;
s32 j;
if (1) {}
gDPPipeSync(gDisplayListHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGB, G_CC_DECALRGB);
gDPPipeSync(gDisplayListHead++);
for (i = 0; i < 15; i++) {
for (j = 0; j < 20; j++, arg0 += 0x200) {
func_8001C6AC(j * 0x10, i * 0x10, 0x10, 0x10, arg0, 0x10, 0);
}
}
gSPDisplayList(gDisplayListHead++, D_8006F630);
}
void func_86B0B650(void) {
func_800079C4();
func_86B0B4D0(D_86B109C0);
func_800067E4(&gDisplayListHead, 0, 0, 0x140, 0xF0);
func_80015348();
func_80015094(D_86B10848);
func_86B0B184();
func_80007778();
}
s32 func_86B0B6C0(void) {
s32 sp24 = 0;
switch (D_86B10BD0.unk_00) {
case 0:
D_86B10850.unk_000.unk_02 |= 0x20;
D_86B10850.unk_000.unk_01 |= 1;
D_86B10BD0.unk_00++;
break;
case 1:
if ((D_86B10850.unk_040.unk_08 >> 0x10) == 0xA) {
func_8004B1CC(0x38);
}
if ((D_86B10850.unk_040.unk_08 >> 0x10) == 0x72) {
D_86B10BD0.unk_08 = 0;
D_86B10850.unk_000.unk_02 &= 0xFFDF;
func_86B0B034();
func_8004B1CC(0x13);
D_86B10BD0.unk_00++;
}
break;
case 2:
if (D_86B10BE0.unk_00 == 0xFF) {
D_86B10BD0.unk_08 = 0;
D_86B10850.unk_000.unk_02 |= 0x20;
func_86B0B024();
D_86B10BD0.unk_00++;
}
break;
case 3:
if (func_800174E4(&D_86B10850) != 0) {
D_86B10BD0.unk_00++;
}
break;
case 4:
sp24 = 1;
break;
}
return sp24;
}
void func_86B0B810(void) {
s32 i;
s32 var_s2 = 1;
func_80007990(1);
func_80006C6C(0xA);
for (i = 0; i < 10; i++) {
func_86B0B498();
func_86B0B650();
}
while (var_s2 != 0) {
func_86B0B498();
if (func_86B0B6C0() != 0) {
var_s2 = 0;
}
func_86B0B650();
}
func_80007990(0xFFFF);
func_80006CB4(8);
for (i = 0; i < 8; i++) {
func_86B0B498();
func_86B0B650();
}
func_800077B4(2);
}
void func_86B0B8DC(void) {
MemoryBlock* temp_v0 = func_80002D10(main_pool_get_available(), 0);
D_86B10848 = process_geo_layout(temp_v0, &D_86B0E374);
func_80002D60(temp_v0);
func_8001BB20();
func_86B0A750();
func_86B0A7F8();
func_86B0B024();
func_8001BB58(&D_86B10850);
func_8001987C();
if (D_800AE540.unk_0000 == 0x16) {
D_86B10844 = func_80019D18(0xD5);
func_8001BC34(&D_86B10850, 0, 0xD5, D_86B10844->unk_08->unk_00[0]);
} else {
D_86B10844 = func_80019D18(0xD4);
func_8001BC34(&D_86B10850, 0, 0xD4, D_86B10844->unk_08->unk_00[0]);
}
func_8001BD04(&D_86B10850, 0);
D_86B10850.unk_000.unk_02 &= ~0x20;
D_86B10850.unk_000.unk_01 &= ~1;
func_8000E88C(&D_86B10850.unk_024, 0.0f, 11.0f, -105.0f);
}
s32 func_86B0BA18(void) {
unk_func_80007444* sp24;
main_pool_push_state('GBOY');
func_80005E40(0x10000, 0);
sp24 = func_80007444(0, 1, 3, 1, 2, 1);
func_8001E94C(2, 0);
ASSET_LOAD(D_1000000, common_menu1_ui, 0);
ASSET_LOAD(D_2000000, common_menu2_ui, 0);
FRAGMENT_LOAD(fragment31);
func_8002D510();
D_86B10840 = func_8002D5AC(0x1E);
if (D_800AE540.unk_0000 == 0x16) {
D_86B109BC = ASSET_LOAD2(backgrounds, 1, 1);
D_86B109C0 = func_8000484C(D_86B109BC, 0x12);
} else {
D_86B109BC = ASSET_LOAD2(backgrounds, 1, 1);
D_86B109C0 = func_8000484C(D_86B109BC, 0x13);
}
func_86B0B8DC();
func_80007678(sp24);
func_86B0B810();
func_800076C0();
func_8001E9CC();
func_80005EAC();
main_pool_pop_state('GBOY');
return 0;
}

View File

@ -20,7 +20,7 @@ extern u32 D_87806730[];
char** D_87806330 = NULL;
static s32 D_8780FA20;
static s32 D_8780FA24;
static char** D_8780FA24;
u16 D_8780FA28;
s16 D_8780FA2A;
s16 D_8780FA2C;

View File

@ -264,6 +264,13 @@ void func_87903358(s16 arg0, s16 arg1);
void func_879033FC(unk_func_8790002C* arg0);
void func_8790354C(void);
void func_87903600(void);
void func_879036B4(unk_func_8790002C* arg0);
void func_8790370C(void);
void func_879037D0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6);
void func_87903838(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6);
void func_879038AC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6);
Gfx* func_87903920(Gfx* arg0, arg1_func_87903D64_014* arg1);
void func_87903D64(s32 arg0, arg1_func_87903D64* arg1);
#endif // _FRAGMENT3_H_

View File

@ -16,7 +16,7 @@
#include "src/memory.h"
#include "src/stage_loader.h"
static s32 D_82100EA0;
static char** D_82100EA0;
static s32 pad_D_82100EA4;
static unk_func_80027FA0 D_82100EA8;
static BinArchive* D_82100EB0;

View File

@ -78,7 +78,7 @@ static unk_D_82202FE4 D_82202FE4[9] = {
static u8* D_82203064[] = { 0x03005000, 0x03005A20, 0x03006440, 0x03005A20 };
static s32 D_822030F0;
static char** D_822030F0;
static BinArchive* D_822030F4;
static Vp D_822030F8;
static Mtx D_82203108;

View File

@ -8,7 +8,7 @@ extern GeoLayoutCommandProc GeoLayoutJumpTable[];
extern MemoryBlock* gGraphNodePool;
extern unk_D_86002F34* gCurRootGraphNode;
extern u32 gGeoLayoutStack[];
extern struct GraphNode *gCurGraphNodeList[32];
extern struct GraphNode* gCurGraphNodeList[32];
extern s16 gCurGraphNodeIndex;
extern s16 gGeoLayoutStackIndex;
extern s16 gGeoLayoutReturnIndex;
@ -20,7 +20,7 @@ extern u8* gGeoLayoutCommand;
*/
void geo_layout_cmd_branch_and_link(void) {
u8* cmd = (void*)gGeoLayoutCommand;
cmd += 0;
gGeoLayoutStack[gGeoLayoutStackIndex++] = (uintptr_t)(cmd + CMD_PROCESS_OFFSET(8));
@ -34,7 +34,7 @@ void geo_layout_cmd_end(void) {
gGeoLayoutStackIndex = gGeoLayoutReturnIndex;
gGeoLayoutReturnIndex = gGeoLayoutStack[--gGeoLayoutStackIndex] & 0xFFFF;
gCurGraphNodeIndex = gGeoLayoutStack[gGeoLayoutStackIndex] >> 16;
gGeoLayoutCommand = (u8 *) gGeoLayoutStack[--gGeoLayoutStackIndex];
gGeoLayoutCommand = (u8*)gGeoLayoutStack[--gGeoLayoutStackIndex];
}
/*
@ -43,7 +43,7 @@ void geo_layout_cmd_end(void) {
*/
void geo_layout_cmd_jump(void) {
u8* cmd = (void*)gGeoLayoutCommand;
cmd += 0;
gGeoLayoutCommand = Util_ConvertAddrToVirtAddr(cur_geo_cmd_ptr(0x04));
@ -55,7 +55,7 @@ void geo_layout_cmd_jump(void) {
*/
void geo_layout_cmd_branch(void) {
u8* cmd = (void*)gGeoLayoutCommand;
cmd += 0;
// unlike in sm64, this argument doesnt seem to be optional.
@ -65,7 +65,7 @@ void geo_layout_cmd_branch(void) {
// 0x04: Return from branch
void geo_layout_cmd_return(void) {
gGeoLayoutCommand = (u8 *) gGeoLayoutStack[--gGeoLayoutStackIndex];
gGeoLayoutCommand = (u8*)gGeoLayoutStack[--gGeoLayoutStackIndex];
}
// 0x05: Open node
@ -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(struct GraphNode* arg0) {
if (arg0 != NULL) {
gCurGraphNodeList[gCurGraphNodeIndex] = arg0;
if (gCurGraphNodeIndex == 0) {
@ -128,7 +128,8 @@ void func_80017BFC(void) {
void func_80017C48(void) {
unk_D_800ABE00_cmdB* cmd = (unk_D_800ABE00_cmdB*)gGeoLayoutCommand;
unk_D_86002F34_00C* temp_v0 = func_800110E0(gGraphNodePool, NULL, cmd->unk_04, cmd->unk_06, cmd->unk_08, cmd->unk_0A);
unk_D_86002F34_00C* temp_v0 =
func_800110E0(gGraphNodePool, NULL, cmd->unk_04, cmd->unk_06, cmd->unk_08, cmd->unk_0A);
if (temp_v0 != NULL) {
temp_v0->unk_24.fovy = cmd->unk_02;
@ -223,8 +224,8 @@ void func_800180D4(void) {
void func_8001812C(void) {
unk_D_800ABE00_cmd17* cmd = (unk_D_800ABE00_cmd17*)gGeoLayoutCommand;
func_80017AC4(
func_8001156C(gGraphNodePool, NULL, cmd->unk_02, cmd->unk_08, cmd->unk_04, cmd->unk_0C, cmd->unk_06, cmd->unk_10));
func_80017AC4(func_8001156C(gGraphNodePool, NULL, cmd->unk_02, cmd->unk_08, cmd->unk_04, cmd->unk_0C, cmd->unk_06,
cmd->unk_10));
gGeoLayoutCommand += sizeof(unk_D_800ABE00_cmd17);
}
@ -295,7 +296,8 @@ void func_80018490(void) {
var_a3 |= 2;
}
func_80017AC4(func_80011814(gGraphNodePool, NULL, cmd->unk_01, var_a3, cmd->unk_03, &cmd->unk_04, &cmd->unk_0A, &sp3C));
func_80017AC4(
func_80011814(gGraphNodePool, NULL, cmd->unk_01, var_a3, cmd->unk_03, &cmd->unk_04, &cmd->unk_0A, &sp3C));
gGeoLayoutCommand += sizeof(unk_D_800ABE00_cmd1D);
}
@ -398,7 +400,7 @@ void func_80018AD0(void) {
gGeoLayoutCommand += sizeof(unk_D_800ABE00_cmd26);
}
struct GraphNode *process_geo_layout(MemoryBlock* pool, void *segptr) {
struct GraphNode* process_geo_layout(MemoryBlock* pool, void* segptr) {
// set by register_scene_graph_node when gCurGraphNodeIndex is 0
// and gCurRootGraphNode is NULL
gCurRootGraphNode = NULL;

View File

@ -27,31 +27,32 @@
#define cur_geo_cmd_ptr(offset) \
(*(void **) &gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
typedef void (*GeoLayoutCommandProc)(void);
typedef struct unk_D_800ABE00_cmd0 {
/* 0x00 */ u8 cmd;
/* 0x02 */ u16 unk_02;
/* 0x04 */ s32 unk_04;
/* 0x04 */ u8* unk_04;
} unk_D_800ABE00_cmd0; // size = 0x8
typedef struct unk_D_800ABE00_cmd1 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char pad[3];
} unk_D_800ABE00_cmd1; // size = 0x4
typedef struct unk_D_800ABE00_cmd2 {
/* 0x00 */ u8 cmd;
/* 0x04 */ u32 unk_04;
/* 0x04 */ u8* unk_04;
} unk_D_800ABE00_cmd2; // size = 0x8
typedef struct unk_D_800ABE00_cmd3 {
/* 0x00 */ u8 cmd;
/* 0x04 */ u32 unk_04;
/* 0x04 */ u8* unk_04;
} unk_D_800ABE00_cmd3; // size = 0x8
typedef struct unk_D_800ABE00_cmd4 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char pad[3];
} unk_D_800ABE00_cmd4; // size = 0x4
typedef struct unk_D_800ABE00_cmd5 {
@ -130,6 +131,11 @@ typedef struct unk_D_800ABE00_cmd11 {
/* 0x01 */ char pad[3];
} unk_D_800ABE00_cmd11; // size = 0x4
typedef struct unk_D_800ABE00_cmd12 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char pad[3];
} unk_D_800ABE00_cmd12; // size = 0x4
typedef struct unk_D_800ABE00_cmd13 {
/* 0x00 */ u8 cmd;
/* 0x01 */ u8 r;
@ -141,7 +147,7 @@ typedef struct unk_D_800ABE00_cmd13 {
typedef struct unk_D_800ABE00_cmd14 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char unk01[0x3];
/* 0x01 */ char pad[0x3];
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ u8 r;
@ -152,7 +158,7 @@ typedef struct unk_D_800ABE00_cmd14 {
typedef struct unk_D_800ABE00_cmd15 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char unk01[0xB];
/* 0x01 */ char pad[0xB];
} unk_D_800ABE00_cmd15; // size = 0xC
typedef struct unk_D_800ABE00_cmd16 {
@ -182,7 +188,7 @@ typedef struct unk_D_800ABE00_cmd18 {
typedef struct unk_D_800ABE00_cmd19 {
/* 0x00 */ u8 cmd;
/* 0x01 */ char unk01[0x3];
/* 0x01 */ char pad[0x3];
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
} unk_D_800ABE00_cmd19; // size = 0x8
@ -195,7 +201,7 @@ typedef struct unk_D_800ABE00_cmd1A {
typedef struct unk_D_800ABE00_cmd1B {
/* 0x00 */ u8 cmd;
/* 0x01 */ char unk01[0x3];
/* 0x01 */ char pad[0x3];
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s16 unk_08;
@ -204,7 +210,7 @@ typedef struct unk_D_800ABE00_cmd1B {
typedef struct unk_D_800ABE00_cmd1C {
/* 0x00 */ u8 cmd;
/* 0x01 */ char unk01[0x3];
/* 0x01 */ char pad[0x3];
/* 0x04 */ u32 unk_04;
/* 0x08 */ u32 unk_08;
/* 0x0C */ u32 unk_0C;
@ -245,7 +251,7 @@ typedef struct unk_D_800ABE00_cmd1F {
typedef struct unk_D_800ABE00_cmd20 {
/* 0x00 */ u8 cmd;
/* 0x01 */ u8 unk_01;
/* 0x02 */ char unk02[0x2];
/* 0x02 */ s16 unk_02;
/* 0x04 */ s16 unk_04;
/* 0x06 */ s16 unk_06;
/* 0x08 */ s16 unk_08;
@ -271,7 +277,7 @@ typedef struct unk_D_800ABE00_cmd23 {
/* 0x00 */ u8 cmd;
/* 0x01 */ u8 unk_01;
/* 0x02 */ s16 unk_02;
/* 0x04 */ s32 unk_04;
/* 0x04 */ Gfx* unk_04;
/* 0x07 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ u8 r;

View File

@ -7,6 +7,8 @@
#define MEMORY_POOL_LEFT 0
#define MEMORY_POOL_RIGHT 1
struct MainPoolBlock;
typedef void (*AllocateFunc)(struct MainPoolBlock*, u32);
typedef struct MainPoolBlock {

169
tools/animation_script.py Executable file
View File

@ -0,0 +1,169 @@
#!/usr/bin/env python3
import sys
from pathlib import Path
from struct import *
import data2c
import find_sym
COMMANDS = {}
NUM_COMMANDS = 38
for i in range(NUM_COMMANDS):
struct_name = f"unk_D_800ABE00_cmd{i:X}"
struct = data2c.STRUCTS[struct_name]
COMMANDS[i] = {"name":struct_name, "size":struct["size"], "args":struct["data"]}
with open(Path(sys.argv[0]).absolute().parent / "../linker_scripts/us/symbol_addrs_code.txt", "r") as f:
fd = f.read().splitlines()
FUNCS = {}
for line in fd:
name, addr = line.split(";",1)[0].split(" = ")
name = name.strip()
addr = int(addr.strip(), 16)
FUNCS[addr] = name
def dump(offset):
OUT_FUNCS = {8:set()}
OUT_DATA = {}
DONE_DECOMP = set()
TO_DECOMP = []
def get_type(f, offset, cmd, args, out):
for arg in args:
if "pad" in arg["name"]:
continue
#print()
#print(arg)
f.seek(offset + arg["offset"], 0)
if arg["type"] in data2c.STRUCTS:
out = get_type(f, offset + arg["offset"], cmd, data2c.STRUCTS[arg["type"]]["data"], out)
else:
is_signed = arg["type"] in data2c.SIGNED
is_float = arg["type"] in data2c.FLOAT
make_hex = "*" in arg["type"] or arg["type"] == "ptr"
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]
out += f"{v}, "
case 2:
v = unpack_from(">h" if is_signed else ">H", f.read(2))[0]
out += f"{v}, "
case 4:
v = unpack_from(">f" if is_float else ">i" if is_signed else ">I", f.read(4))[0]
if (cmd == 0x00 or cmd == 0x03) and arg["name"] == "unk_04":
TO_DECOMP.append(find_sym.find(f"0x{v:X}", "v")["rom"])
out += f"D_{v:08X}" + ", "
elif "*" in arg["type"]:
if v != 0:
OUT_DATA[v] = arg["type"].replace("*","")
out += f"D_{v:08X}" + ", "
else:
out += f"NULL" + ", "
elif make_hex:
if v == 0:
out += f"NULL" + ", "
elif v in FUNCS:
out += f"{FUNCS[v]}" + ", "
OUT_FUNCS[cmd].add(FUNCS[v])
else:
out += f"0x{v:08X}" + ", "
else:
out += f"{v}" + ("f" if is_float else "") + ", "
case 8:
v = unpack_from(">d" if is_float else ">q" if is_signed else ">Q", f.read(8))[0]
out += f"{v}" + ", "
case _:
print(f"Unhandled size type for arg")
print(f"{arg}")
exit()
return out
offset = int(offset, 16)
TO_DECOMP.append(offset)
TO_OUTPUT = []
with open(Path(sys.argv[0]).absolute().parent / "../baseroms/us/baserom.z64", "rb") as f:
while len(TO_DECOMP) > 0:
offset = TO_DECOMP.pop()
if offset in DONE_DECOMP:
continue
DONE_DECOMP.add(offset)
out_info = find_sym.find(offset)
#print(f"Processing script at 0x{offset:X}")
f.seek(offset, 0)
out = f""
while True:
cmd = unpack_from(">B", f.read(1), 0)[0]
#print(f"depth {DEPTH} offset 0x{offset:X} cmd 0x{cmd:02X} size 0x{COMMANDS[cmd]['size']:X}")
#print(f"command 0x{cmd:X} --", COMMANDS[cmd])
out += f" ANIMATION_SCRIPT_CMD_{cmd:02X}"
out += "("
out = get_type(f, offset, cmd, COMMANDS[cmd]["args"][1:], out)
if out[-2:] == ", ":
out = out[:-2]
out += "),\n"
if cmd == 0x01:
break;
offset += COMMANDS[cmd]["size"]
f.seek(offset, 0)
out = out[:-1]
#print()
out_struct = f"static u32 D_{out_info['ram']:X}[] = " + "{\n"
TO_OUTPUT.append([out_struct, out + "\n};\n"])
for cmd in OUT_FUNCS:
funcs = sorted(list(OUT_FUNCS[cmd]))
for func in funcs:
match cmd:
case 0x08:
print(f"s32 {func}(s32, unk_D_86002F34_000*);")
case _:
print(f"Unhandled output function type cmd {cmd}")
exit()
if len(OUT_FUNCS) > 0:
print()
for v, type in sorted(list(OUT_DATA.items()), key=lambda x:x[0]):
match type:
case "Gfx":
print(f"Gfx D_{v:08X}[];")
case "Vtx":
print(f"Vtx D_{v:08X}[];")
case _:
print(f"{type}* D_{v:08X};")
print()
[print(x[0] + x[1]) for x in sorted(TO_OUTPUT, key=lambda x: x[0])]
if __name__ == "__main__":
dump(sys.argv[1])

View File

@ -46,6 +46,11 @@ SIGNED = {
"short",
"int",
"f32",
"f64",
"float",
"double",
}
FLOAT = {
@ -126,6 +131,7 @@ def calc_struct_sizes():
i += 1
max_size = round_up(max_size, max_rounding)
STRUCTS[name]["size"] = max_size
STRUCTS[name]["round"] = max_rounding
@ -527,46 +533,64 @@ def dump_data(offset, struct, counts):
def output_struct(data, name, out, offset, indent):
def round_up(offset, rounding):
return offset + (-offset % rounding)
def output_type(type, size, offset, out):
is_signed = type in SIGNED
is_float = type in FLOAT
make_hex = "*" in type or type not in SIGNED
out += indent + "{ "
for member in STRUCTS[name]["data"]:
if member["type"] in STRUCTS:
out = output_struct(data, member["type"], out, offset + member["offset"], indent)
else:
#print(member)
is_signed = member["type"] in SIGNED
is_float = member["type"] in FLOAT
read_offset = offset + member["offset"]
make_hex = "*" in member["type"]
match member["size"]:
case 1:
v = unpack_from(">b" if is_signed else ">B", data, read_offset)[0]
match size:
case 1:
v = unpack_from(">b" if is_signed else ">B", data, offset)[0]
if make_hex:
out += f"0x{v:02X}" + ", "
else:
out += f"{v}, "
case 2:
v = unpack_from(">h" if is_signed else ">H", data, read_offset)[0]
case 2:
v = unpack_from(">h" if is_signed else ">H", data, offset)[0]
if make_hex:
out += f"0x{v:04X}" + ", "
else:
out += f"{v}, "
case 4:
v = unpack_from(">f" if is_float else ">i" if is_signed else ">I", data, read_offset)[0]
if make_hex:
if v == 0:
out += f"NULL" + ", "
else:
out += f"0x{v:08X}" + ", "
case 4:
v = unpack_from(">f" if is_float else ">i" if is_signed else ">I", data, offset)[0]
if make_hex:
if v == 0:
out += f"NULL" + ", "
else:
out += f"{v}" + ("f" if is_float else "") + ", "
out += f"0x{v:08X}" + ", "
else:
out += f"{v}" + ("f" if is_float else "") + ", "
case 8:
v = unpack_from(">d" if is_float else ">q" if is_signed else ">Q", data, read_offset)[0]
out += f"{v}" + ", "
case 8:
v = unpack_from(">d" if is_float else ">q" if is_signed else ">Q", data, offset)[0]
if make_hex:
out += f"0x{v:16X}" + ", "
else:
out += f"{v}, "
return out
if name in STRUCTS:
out += indent + "{ "
#print(STRUCTS[name])
for member in STRUCTS[name]["data"]:
if member["type"] in STRUCTS:
out = output_struct(data, member["type"], out, offset + member["offset"], indent)
else:
#print(member)
out = output_type(member["type"], member["size"], offset + member["offset"], out)
if len(STRUCTS[name]["data"]) <= 4:
out = out[:-2]
out += indent + "}, "
else:
out = output_type(name, BASE_TYPES[name], offset, out)
if len(STRUCTS[name]["data"]) <= 4:
out = out[:-2]
out += indent + "}, "
return out
def output_array(data, name, counts, depth, out, offset):
@ -585,18 +609,18 @@ def dump_data(offset, struct, counts):
out += indent + "\n},"
else:
out = output_struct(data, name, out, offset, (depth + 1) * " ")
offset += STRUCTS[name]["size"]
offset += STRUCTS[name]["size"] if name in STRUCTS else BASE_TYPES[name]
else:
out = output_struct(data, name, out, offset, "")
return out, offset
total_size = STRUCTS[struct]["size"]
total_size = STRUCTS[struct]["size"] if struct in STRUCTS else BASE_TYPES[struct]
total_count = 1
for count in counts:
total_count *= count
total_size = STRUCTS[struct]["size"] * total_count
total_size *= total_count
#print(f"size 0x{STRUCTS[struct]['size']:X} x {total_count} = 0x{total_size:X}")
@ -607,31 +631,32 @@ def dump_data(offset, struct, counts):
out = "{" if len(counts) > 0 else ""
out, _ = output_array(data, struct, counts, 0, out, 0)
out = out + "};" if len(counts) > 0 else (out[:-2] + ";")
out = out + "};" if (len(counts) > 0 and struct in STRUCTS) else (out[:-2] + "};")
print(out)
#######################################################################
parse_structs()
calc_struct_sizes()
#print(f"{len(STRUCTS)} structs parsed in")
offset = int(sys.argv[1], 16)
struct = sys.argv[2]
def dump(offset, type_name):
offset = int(offset, 16)
counts = []
while "[" in struct:
count = struct.split("[",1)[1].split("]",1)[0]
struct = struct.split("[",1)[0] + struct.split("]",1)[1]
count = int(count, 0)
counts.append(count)
counts = []
while "[" in type_name:
count = type_name.split("[",1)[1].split("]",1)[0]
type_name = type_name.split("[",1)[0] + type_name.split("]",1)[1]
count = int(count, 0)
counts.append(count)
if struct not in STRUCTS:
print(f"Could not find struct definition \"{struct}\", maybe it failed to parse...")
exit()
if type_name not in STRUCTS and type_name not in BASE_TYPES:
print(f"Could not find type definition \"{type_name}\", maybe it failed to parse...")
exit()
dump_data(offset, struct, counts)
dump_data(offset, type_name, counts)
if __name__ == "__main__":
dump(sys.argv[1], sys.argv[2])

View File

@ -5,61 +5,85 @@ import pylibyaml # pyright: ignore
import yaml
import sys
addr = sys.argv[1]
if "D_" in sys.argv[1]:
addr = "0x" + sys.argv[1][2:]
addr = int(addr, 0)
is_vram = addr >= 0x10000000
if len(sys.argv) > 2 and sys.argv[2] == "v":
is_vram = True
elif len(sys.argv) > 2 and sys.argv[2] == "p":
is_vram = False
def find(addr, opt=""):
if type(addr) == str:
if "D_" in addr:
addr = "0x" + addr[2:]
addr = int(addr, 0)
with open("yamls/us/rom.yaml", "r") as f:
splat = yaml.load(f.read(), Loader=yaml.SafeLoader)
is_vram = addr >= 0x10000000
if opt == "v":
is_vram = True
elif opt == "p":
is_vram = False
min_seg = None
min_subseg = 99999
min_diff = 0xFFFFFFFF
with open("yamls/us/rom.yaml", "r") as f:
splat = yaml.load(f.read(), Loader=yaml.SafeLoader)
for segment in splat:
if type(segment) == dict and "subsegments" in segment:
for i,subseg in enumerate(segment["subsegments"]):
if type(subseg) == list:
if is_vram:
rom_to_vram = (subseg[0] - segment["start"]) + segment["vram"]
diff = addr - rom_to_vram
min_seg = None
min_subseg = 99999
min_diff = 0xFFFFFFFF
for segment in splat:
if type(segment) == dict and "subsegments" in segment:
for i,subseg in enumerate(segment["subsegments"]):
if type(subseg) == list:
if is_vram:
rom_to_vram = (subseg[0] - segment["start"]) + segment["vram"]
diff = addr - rom_to_vram
else:
diff = addr - subseg[0]
elif "bss" in subseg["type"]:
if is_vram:
diff = addr - subseg["vram"]
#print(f"vram diff to {subseg['name']} 0x{diff}")
else:
diff = addr - subseg[0]
elif "bss" in subseg["type"]:
if is_vram:
diff = addr - segment["vram"]
else:
#print(f"Unknown subsegment {subseg}")
pass
#print(f"Unknown subsegment {subseg}")
pass
if diff >= 0 and diff < min_diff:
min_seg = segment
min_subseg = i
min_diff = diff
if diff >= 0 and diff < min_diff:
#print(f"Setting min seg to {segment['name']}")
min_seg = segment
min_subseg = i
min_diff = diff
if min_seg:
seg_type = min_seg['subsegments'][min_subseg][1]
if min_seg:
is_dict = type(min_seg['subsegments'][min_subseg]) == dict
addr_idx = "vram" if is_dict else 0
type_idx = "type" if is_dict else 1
name_idx = "name" if is_dict else 2
if len(min_seg['subsegments'][min_subseg]) < 3:
name = min_seg['subsegments'][min_subseg][1]
has_rom = not ("bss" in seg_type)
seg_type = min_seg['subsegments'][min_subseg][type_idx]
if len(min_seg['subsegments'][min_subseg]) < 3:
name = min_seg['subsegments'][min_subseg][type_idx]
has_rom = not ("bss" in seg_type)
else:
name = min_seg['subsegments'][min_subseg][name_idx]
has_rom = not ("reloc" in min_seg['subsegments'][min_subseg][name_idx] or "bss" in seg_type)
rom = 0x0
if has_rom:
rom = min_seg['subsegments'][min_subseg][addr_idx] + min_diff
rom_diff = (min_seg['subsegments'][min_subseg][addr_idx] + min_diff) - min_seg['start']
ram = min_seg['vram'] + rom_diff
return {"found":True, "rom":rom, "ram":ram, "min_diff":min_diff, "name": name}
else:
name = min_seg['subsegments'][min_subseg][2]
has_rom = not ("reloc" in min_seg['subsegments'][min_subseg][2] or "bss" in seg_type)
return {"found":False}
rom_str = "(No rom address)"
if has_rom:
rom_str = f"ROM: 0x{min_seg['subsegments'][min_subseg][0] + min_diff:X}"
if __name__ == "__main__":
opt = sys.argv[2] if len(sys.argv) > 2 else ""
ret = find(sys.argv[1], opt)
rom_diff = (min_seg['subsegments'][min_subseg][0] + min_diff) - min_seg['start']
ram_str = f"RAM: 0x{min_seg['vram'] + rom_diff:X}"
if ret["found"]:
rom_str = "(No rom address)"
if ret["rom"] != 0x0:
rom_str = f"ROM: 0x{ret['rom']:X}"
print(f"({rom_str} {ram_str}) is 0x{min_diff:X} bytes inside {name} ")
else:
print(f"Could not find 0x{addr:08X}")
ram_str = f"RAM: 0x{ret['ram']:X}"
print(f"({rom_str} {ram_str}) is 0x{ret['min_diff']:X} bytes inside {ret['name']} ")
else:
print(f"Could not find {sys.argv[1]}")

View File

@ -1,84 +0,0 @@
#!/usr/bin/env python3
import argparse
import os
import shutil
import sys
import subprocess
from pathlib import Path
# Project-specific
# assuming that this is in tools
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, ".."))
CPP_FLAGS = [
"-undef",
"-D__sgi",
"-D_LANGUAGE_C",
"-DF3DEX_GBI_2",
"-DNDEBUG",
"-D_MIPS_SZLONG=32",
"-DSCRIPT(...)={}"
"-D__attribute__(...)=",
"-D__asm__(...)=",
"-DGLOBAL_ASM(...)=",
"-ffreestanding",
"-nostdinc",
"-Iinclude",
"-Iinclude/PR",
"-Iinclude/audio",
"-Isrc"
]
def import_c_file(in_file) -> str:
in_file = os.path.relpath(in_file, ROOT_DIR)
# Prefer clang as C preprocessor if installed on the system
if shutil.which('clang') is not None:
cpp = ['clang', '-E', '-P', '-x', 'c', '-Wno-trigraphs']
else:
cpp = ['gcc', '-E', '-P']
cpp_getdefines = [*cpp, "-dM", *CPP_FLAGS, in_file]
cpp_procfile = [*cpp, *CPP_FLAGS, in_file]
out_text = ""
try:
out_text += subprocess.check_output(cpp_getdefines, cwd=ROOT_DIR, encoding="utf-8")
out_text += subprocess.check_output(cpp_procfile, cwd=ROOT_DIR, encoding="utf-8")
except subprocess.CalledProcessError:
print(
"Failed to preprocess input file, when running command:\n",
cpp_getdefines,
file=sys.stderr,
)
sys.exit(1)
if not out_text:
print("Output is empty - aborting")
sys.exit(1)
return out_text
def main():
parser = argparse.ArgumentParser(
description="Create a context file which can be used for m2c"
)
parser.add_argument(
"c_file",
help="File from which to create context",
)
parser.add_argument(
"ctx_file",
nargs='?',
help="save context to file if present, otherwise print to stdout"
)
args = parser.parse_args()
output = import_c_file(args.c_file)
if args.ctx_file is not None:
with open(os.path.join(ROOT_DIR, args.ctx_file), "w", encoding="UTF-8") as f:
f.write(output)
else:
print(output)
if __name__ == "__main__":
main()

View File

@ -992,14 +992,27 @@
- [0x169510, c, fragments/17/fragment17_169510]
- [0x169A40, c, fragments/17/fragment17_169A40]
- [0x16A0E0, c, fragments/17/fragment17_16A0E0]
- [0x16B580, data, fragments/17/fragment17_data]
- [0x16DD70, rodata, fragments/17/fragment17_rodata_16DD70]
- [0x16DDA0, rodata, fragments/17/fragment17_rodata_16DDA0]
- [0x16DDF0, rodata, fragments/17/fragment17_rodata_16DDF0]
- [0x16DEA0, rodata, fragments/17/fragment17_rodata_16DEA0]
- [0x16DF30, rodata, fragments/17/fragment17_rodata_16DF30]
- [0x16B580, .data, fragments/17/fragment17_15FA60]
- [0x16B6E0, .data, fragments/17/fragment17_161590]
- [0x16B6F0, .data, fragments/17/fragment17_161E60]
- [0x16D670, .data, fragments/17/fragment17_165640]
- [0x16D950, .data, fragments/17/fragment17_168110]
- [0x16D960, .data, fragments/17/fragment17_1687E0]
- [0x16DBE0, .data, fragments/17/fragment17_169A40]
- [0x16DC40, .data, fragments/17/fragment17_16A0E0]
- {vram: 0x86B0E5D0, type: bss, name: fragments/17/fragment17_bss}
- [0x16DD70, .rodata, fragments/17/fragment17_15F9B0]
- [0x16DDA0, .rodata, fragments/17/fragment17_15FA60]
- [0x16DDF0, .rodata, fragments/17/fragment17_161E60]
- [0x16DEA0, .rodata, fragments/17/fragment17_165640]
- [0x16DF30, .rodata, fragments/17/fragment17_16A0E0]
- {vram: 0x86B0E5D0, type: .bss, name: fragments/17/fragment17_15FA60}
- {vram: 0x86B0EBC0, type: .bss, name: fragments/17/fragment17_161E60}
- {vram: 0x86B0F9D0, type: .bss, name: fragments/17/fragment17_165640}
- {vram: 0x86B106A0, type: .bss, name: fragments/17/fragment17_1687E0}
- {vram: 0x86B106B0, type: .bss, name: fragments/17/fragment17_169A40}
- {vram: 0x86B10840, type: .bss, name: fragments/17/fragment17_16A0E0}
- name: fragment17_relocs
type: code