Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fragment23 #164

Merged
merged 1 commit into from
Nov 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/color.h
Original file line number Diff line number Diff line change
@@ -79,6 +79,7 @@ typedef union{
} Color_RGBA14;

#define RGBA8(r, g, b, a) ((((r) & 0xFF) << 24) | (((g) & 0xFF) << 16) | (((b) & 0xFF) << 8) | (((a) & 0xFF) << 0))
#define RGBA5551(r, g, b, a) ((((r) << 8) & 0xF800) | (((g) << 3) & 0x7C0) | (((b) >> 2) & 0x3E) | ((a) & 0x1))

#define RGBA16_GET_R(pixel) ((((pixel) & 0xF800) >> 11) & 0xFF)
#define RGBA16_GET_G(pixel) ((((pixel) & 0x7C0) >> 6) & 0xFF)
17 changes: 15 additions & 2 deletions include/global.h
Original file line number Diff line number Diff line change
@@ -7,14 +7,13 @@
typedef unsigned int uintptr_t;

#include "macros.h"

#include "attributes.h"
#include "functions.h"
#include "variables.h"
#include "sections.h"
#include "gfx.h"
#include "color.h"
#include "sound.h"
#include "string.h"
#include "math.h"

typedef struct unk_D_86002F58_004_000_00C_028 {
@@ -502,4 +501,18 @@ typedef struct arg1_func_81407874_014_000_010 {
/* 0x0F */ u8 unk_0F;
} arg1_func_81407874_014_000_010; // size >= 0x10

typedef struct func_88002628_sp38 {
/* 0x000 */ OSThread thread;
/* 0x1B0 */ char unk1B0[0x10];
} func_88002628_sp38; // size = 0x1C0

typedef struct unk_func_88500020 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ u8* unk_0C;
} unk_func_88500020; // size = 0x10

#include "variables.h"

#endif
16 changes: 16 additions & 0 deletions include/variables.h
Original file line number Diff line number Diff line change
@@ -101,6 +101,20 @@ extern u8 D_04008000[];
extern u8 D_04009000[];
extern u8 D_0400A000[];
extern u8 D_0400B000[];
extern u8 D_4006A60[];
extern u8 D_40022E0[];
extern u8 D_4002368[];
extern u8 D_40025F0[];
extern u8 D_4002878[];
extern u8 D_4002B00[];
extern u8 D_4002D88[];
extern u8 D_4003010[];
extern u8 D_4003298[];
extern u8 D_4003520[];
extern u8 D_4001638[];
extern u8 D_4001680[];
extern u8 D_40016C8[];
extern u8 D_4001710[];

extern u8 D_800818E0[0x20];

@@ -212,4 +226,6 @@ typedef struct unk_D_70B10 {
/* 0x00 */ char unk00[0x20];
} unk_D_70B10; // size = 0x20

extern unk_func_88500020 D_800758E0;

#endif
19 changes: 19 additions & 0 deletions linker_scripts/us/symbol_addrs.txt
Original file line number Diff line number Diff line change
@@ -359,3 +359,22 @@ D_86C11530 = 0x86C11530; // size:0xAD0
D_879060BC = 0x879060BC; // size:0x2
D_86E04D60 = 0x86E04D60; // size:0xAD0
D_86E05830 = 0x86E05830; // size:0x3610
D_4006A60 = 0x4006A60;
D_40022E0 = 0x40022E0;
D_4002368 = 0x4002368;
D_40025F0 = 0x40025F0;
D_4002878 = 0x4002878;
D_4002B00 = 0x4002B00;
D_4002D88 = 0x4002D88;
D_4003010 = 0x4003010;
D_4003298 = 0x4003298;
D_4003520 = 0x4003520;
D_88217C20 = 0x88217C20; // size:0x4
D_88217C24 = 0x88217C24; // size:0x4
D_88217C28 = 0x88217C28; // size:0x4
D_88217C2C = 0x88217C2C; // size:0x4
D_88217C48 = 0x88217C48; // size:0x4
D_88217C4C = 0x88217C4C; // size:0x4
D_88217C50 = 0x88217C50; // size:0x4
D_88217C54 = 0x88217C54; // size:0x4
D_88217C58 = 0x88217C58; // size:0x4
2 changes: 1 addition & 1 deletion src/19840.h
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ typedef struct unk_func_80019600 {
/* 0x04 */ OSMesgQueue* queue;
/* 0x08 */ void* unk_08;
/* 0x0C */ void* unk_0C;
/* 0x10 */ struct MainPoolState* pool;
/* 0x10 */ MainPoolState* pool;
/* 0x14 */ s32 size;
/* 0x18 */ arg1_func_80010CA8 unk_18;
} unk_func_80019600; // size >= 0x1C
2 changes: 1 addition & 1 deletion src/1AB70.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "global.h"
#include "1AB70.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/1AB70/func_80019F70.s")

14 changes: 14 additions & 0 deletions src/1AB70.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef _1AB70_H_
#define _1AB70_H_

#include "global.h"

typedef struct unk_func_88201DA0_034_008 {
/* 0x00 */ char unk00[0x4];
} unk_func_88201DA0_034_008; // size >= 1

void func_8001B058(void);
void func_8001B0DC(unk_func_88201DA0_034_008*, s32, s32);


#endif // _1AB70_H_
4 changes: 2 additions & 2 deletions src/22630.c
Original file line number Diff line number Diff line change
@@ -122,14 +122,14 @@ char* func_80021B7C(char* arg0, char* arg1) {

#pragma GLOBAL_ASM("asm/us/nonmatchings/22630/func_80021C20.s")

void func_80021C40(char* arg0, char* arg1) {
char* func_80021C40(char* arg0, char* arg1) {
char sp1C[11];

_bcopy(arg1, sp1C, 0xA);

sp1C[10] = 'P';

func_80021A90(arg0, sp1C);
return func_80021A90(arg0, sp1C);
}

extern char D_8006FEE8[][0x1C];
65 changes: 60 additions & 5 deletions src/22630.h
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
#include "global.h"
#include "memory.h"
#include "29BA0.h"
#include "2D340.h"

typedef enum {
POKEMON_ROM_NONE = 0,
@@ -51,6 +52,48 @@ typedef struct unk_D_800AE4E8_004_1_000_010 {
/* 0x2C */ u8 unk_2C[11];
} unk_D_800AE4E8_004_1_000_010; // size = 0x37

typedef struct unk_func_80022C28_ret {
/* 0x00 */ s8 unk_00;
/* 0x01 */ s8 unk_01;
/* 0x02 */ s8 unk_02;
/* 0x03 */ s8 unk_03;
/* 0x04 */ s8 unk_04;
/* 0x05 */ char unk05[0x3];
/* 0x08 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
} unk_func_80022C28_ret; // size = 0xC

typedef struct unk_func_8820BE14_sp {
/* 0x00 */ u8 unk_00;
/* 0x01 */ char unk01[0x3];
/* 0x04 */ u8 unk_04;
/* 0x05 */ char unk05[0x1];
/* 0x06 */ u8 unk_06;
/* 0x07 */ u8 unk_07;
/* 0x08 */ u8 unk_08;
/* 0x09 */ u8 unk_09;
/* 0x0A */ u8 unk_0A;
/* 0x0B */ u8 unk_0B;
/* 0x0C */ u8 unk_0C;
/* 0x0E */ s16 unk_0E;
/* 0x0E */ s32 unk_10;
/* 0x0E */ s16 unk_14;
/* 0x0E */ s16 unk_16;
/* 0x0E */ s16 unk_18;
/* 0x0E */ s16 unk_1A;
/* 0x0E */ s16 unk_1C;
/* 0x0E */ s16 unk_1E;
/* 0x20 */ char unk20[0x4];
/* 0x24 */ u8 unk_24;
/* 0x25 */ u8 unk_25;
/* 0x26 */ char unk26[0xA];
/* 0x30 */ char unk_30[11];
/* 0x3B */ char unk_3B[11];
/* 0x46 */ char unk46[0xC];
/* 0x52 */ u8 unk_52;
/* 0x53 */ u8 unk_53;
} unk_func_8820BE14_sp; // size = 0x54

u16 func_80021A30(u8* arg0);
u32 func_80021A48(u8* arg0);
void func_80021A68(u8* arg0, s32 arg1);
@@ -59,7 +102,7 @@ char* func_80021A90(char* arg0, char* arg1);
void func_80021B5C(char*, char*);
char* func_80021B7C(char* arg0, char* arg1);
void func_80021C20(char*, char*);
void func_80021C40(char* arg0, char* arg1);
char* func_80021C40(char* arg0, char* arg1);
char* func_80021C80(char* arg0, char* arg1);
char* func_80021CA4(char* arg0, s32 arg1);
char* func_80021CE0(s32 arg0, s8* arg1);
@@ -71,11 +114,16 @@ u32 func_80022170(s32 arg0, s32 arg1, u16 arg2, u16 arg3, s32 arg4);
void func_80022338(unk_func_80026268_arg0* arg0);
u32 func_800224B8(s32 arg0, u16 arg1);
u16 func_800226C0(s32 arg0, u32 arg1);
void func_80022734(unk_func_8820BE14_sp*);
void func_800228B0(unk_func_8820BE14_sp*);
u8 func_80022A38(s32 arg0);
u8 func_80022A60(s32 arg0);
s32 func_80022C28(s32, s32, s32, s32);
void func_80022D8C(void*);
s32 func_80022E18(unk_func_80026268_arg0*, s32, void*);
unk_func_80022C28_ret* func_80022C28(s32, s32, s32, s32);
unk_func_80022C28_ret* func_80022CC0(s32, s32, s32, s32, char*, s32);
void func_80022D24(unk_func_80022C28_ret*);
void func_80022D8C(unk_func_80022C28_ret*);
s32 func_80022E18(unk_func_80026268_arg0*, s32, unk_func_80022C28_ret*);
s32 func_80022F24(unk_func_88205880_00D0*, s32, unk_func_80022C28_ret*);
void func_80023068(void);
char* func_8002311C(s32 arg0);
s32 func_80023130(u8* arg0);
@@ -90,12 +138,19 @@ void func_80023D60(s32);
void func_80023F78(s32 arg0);
void func_80024040(s32 arg0);
s32 func_800240A0(void);
void func_80024208(s32);
s32 func_80024A48(s32, s32, s32);
s32 func_80024EF4(void);
s32 func_80024F00(s32);
u8 func_80024F68(s32);
s32 func_80024FB0(s32 arg0);
void func_800251B0(s32, s8*);
s32 func_80025084(s32);
s32 func_8002513C(s32);
char* func_800251B0(s32, s8*);
s32 func_80025370(s32);
s32 func_8002539C(s32);
void func_80025540(s32);
void func_800256F4(s32, s32, s32);
void func_80026E4C(s32);

#endif // _6BC0_H_
6 changes: 4 additions & 2 deletions src/26820.c
Original file line number Diff line number Diff line change
@@ -721,11 +721,13 @@ s32 func_8002797C(s32 arg0, s32 arg1, s32 arg2, void* arg3) {
break;

case 22:
_bcopy(&D_800AE4E8[2].unk_04.unk2->unk_1EC8.unk_0002[arg2], arg3, 0x8C);
_bcopy(&D_800AE4E8[2].unk_04.unk2->unk_1EC8.unk_0002[arg2], arg3,
sizeof(unk_D_800AE4E8_004_2_1EC8_0002));
break;

case 23:
_bcopy(&D_800AE4E8[2].unk_04.unk2->unk_3280.unk_0002[arg2], arg3, 0x8C);
_bcopy(&D_800AE4E8[2].unk_04.unk2->unk_3280.unk_0002[arg2], arg3,
sizeof(unk_D_800AE4E8_004_2_1EC8_0002));
break;
}
sp2C = 1;
3 changes: 3 additions & 0 deletions src/26820.h
Original file line number Diff line number Diff line change
@@ -52,6 +52,9 @@ void func_80026C0C(s32 arg0, s32 arg1);
void func_8002707C(s32 arg0, s32 arg1);
s32 func_800270AC(s32 arg0);
s32 func_80027108(s32 arg0);
s32 func_80027164(s32, s32);
s32 func_80027184(s32, s32);
void func_800272BC(s32, s32, char*);
s16 func_800275E0(s32 arg0, s32 arg1);
s32 func_8002797C(s32 arg0, s32 arg1, s32 arg2, void* arg3);
s32 func_80027C24(s32 arg0, s32 arg1, s32 arg2, void* arg3);
2 changes: 1 addition & 1 deletion src/2C1C0.c
Original file line number Diff line number Diff line change
@@ -224,7 +224,7 @@ void func_8002BA34(s16 arg0, s16 arg1, s16 arg2, s16 arg3) {
void func_8002BB7C(s32 arg0, s32 arg1, s32 arg2) {
s32 i;
unk_func_80026268_arg0 sp48;
void* temp_v0;
unk_func_80022C28_ret* temp_v0;
unk_D_800AE540_0004* temp_s4;
char sp34[11];

2 changes: 1 addition & 1 deletion src/2D340.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "global.h"
#include "2D340.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/2D340/func_8002C740.s")

64 changes: 64 additions & 0 deletions src/2D340.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#ifndef _3D340_H_
#define _3D340_H_

#include "global.h"
#include "src/1C720.h"
#include "src/1AB70.h"

typedef struct unk_func_88205880_00D0 {
/* 0x000 */ unk_func_80026268_arg0 unk_000[20];
/* 0x690 */ s32 unk_690;
/* 0x694 */ s32 unk_694;
/* 0x698 */ s32 unk_698;
/* 0x69C */ u32 unk_69C;
} unk_func_88205880_00D0; // size = 0x6A0

typedef struct unk_func_88200FA0_030_038 {
/* 0x00 */ unk_func_88205880_00D0** unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
} unk_func_88200FA0_030_038; // size = 0xC

typedef struct unk_func_88201DA0_034 {
/* 0x0000 */ s32 unk_000;
/* 0x0004 */ char unk004[0x4];
/* 0x0008 */ unk_func_88201DA0_034_008 unk_008;
/* 0x000C */ char unk00C[0xC7C];
} unk_func_88201DA0_034; // size = 0xC88

typedef struct unk_func_88201DA0_038 {
/* 0x00 */ unk_func_88201DA0_034* unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
} unk_func_88201DA0_038; // size = 0x10

typedef struct unk_func_88205880_A030 {
/* 0x00 */ unk_func_88205880_00D0** unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
} unk_func_88205880_A030; // size = 0xC

typedef struct unk_func_8820BE14_06C_000 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ unk_func_88200FA0_030_038 unk_04;
} unk_func_8820BE14_06C_000; // size = 0x10

typedef struct unk_func_8820BE14_06C {
/* 0x00 */ unk_func_8820BE14_06C_000* unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
} unk_func_8820BE14_06C; // size = 0x10

void func_8002C740(s8*, unk_func_88201DA0_034*, s32, s32, s32);
void func_8002C758(unk_func_8820BE14_06C*, s32, s32, MemoryPool*);
void func_8002C88C(unk_func_8820BE14_06C*, u8*, s32);
void func_8002C990(unk_func_8820BE14_06C*, s32);
void func_8002CBC0(unk_func_88200FA0_030_038*, s32, MemoryPool*);
void func_8002CBB0(unk_func_88205880_A030*, void*, s32, s32);
void func_8002CC2C(unk_func_88200FA0_030_038*, char*, s32);
void func_8002D3F0(f32*);
Color_RGBA8 func_8002D444(Color_RGBA8, f32);

#endif // _3D340_H_
24 changes: 22 additions & 2 deletions src/2E460.h
Original file line number Diff line number Diff line change
@@ -2,11 +2,31 @@
#define _2E460_H_

#include "global.h"
#include "src/fragments/26/fragment26.h"

typedef struct ret_func_8002ED08 {
/* 0x00 */ u8 unk_00[12];
} ret_func_8002ED08; // size = 0xC

typedef struct unk_func_8820E99C_030_030 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
} unk_func_8820E99C_030_030; // size = 0x14

void func_8002D8C8(unk_func_88500020*, s32, s32);
s32 func_8002EC08(s32);
s32 func_8002ECDC(s32);
s32 func_8002E0F4(unk_func_8820E99C_030_030*);
void func_8002E8E4(s32, s32, s32, s32);
s32 func_8002EE1C(s32, s32, s32);
void func_8002EE78(void);
void func_8002EEA8(unk_func_88001300_034*);
void func_8002EEA8(OSMesg);
ret_func_8002ED08* func_8002ED08(u8);
void func_8002EF18(s32*);
void func_8002EF44(void);
s32 func_8002F1C0(u8);
s32 func_8002F264(s32);

#endif // _2E460_H_
6 changes: 4 additions & 2 deletions src/2FEA0.c
Original file line number Diff line number Diff line change
@@ -67,15 +67,17 @@ void func_8002F2A0(void) {
FRAGMENT_LOAD(fragment3);
var_s0 = FRAGMENT_LOAD_AND_CALL(fragment14, 0, 0);
break;
case 10: // seems to be the "snap mode" code. However, the asset UI isnt loaded, so this call will crash.
case 10: // seems to be the "snap mode" code. However, the asset UI isnt loaded, so this call will
// crash.
FRAGMENT_LOAD(fragment3);
var_s0 = FRAGMENT_LOAD_AND_CALL(fragment15, 0, 0);
break;
case 11: // credits? why from the kids club?
FRAGMENT_LOAD(fragment5);
var_s0 = FRAGMENT_LOAD_AND_CALL(fragment16, 0, 0);
break;
case 12: // crashes. This fragment is the "Demo" cutscene bin, but this code passes an invalid demo ID, which doesnt exist.
case 12: // crashes. This fragment is the "Demo" cutscene bin, but this code passes an invalid demo ID,
// which doesnt exist.
FRAGMENT_LOAD(fragment3);
var_s0 = FRAGMENT_LOAD_AND_CALL(fragment17, 0, 0);
break;
66 changes: 31 additions & 35 deletions src/fragments/22/fragment22.c
Original file line number Diff line number Diff line change
@@ -2450,10 +2450,10 @@ void func_88000020(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) {
((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000));

arg0->unk_18 = func_8800008C;
arg0->unk_10 = arg1;
arg0->unk_12 = arg2;
arg0->unk_16 = 0x4C;
arg0->unk_14 = 0x4C;
arg0->unk_10.unk_00 = arg1;
arg0->unk_10.unk_02 = arg2;
arg0->unk_14.unk_02 = 0x4C;
arg0->unk_14.unk_00 = 0x4C;
}

s32 func_8800008C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) {
@@ -2503,10 +2503,10 @@ void func_8800071C(unk_func_8800071C* arg0, s32 arg1, s32 arg2, s32 arg3, s32 ar
((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8800071C));

arg0->unk_00.unk_18 = func_880007C0;
arg0->unk_00.unk_10 = arg1;
arg0->unk_00.unk_12 = arg2;
arg0->unk_00.unk_14 = arg3;
arg0->unk_00.unk_16 = arg4;
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;
arg0->unk_00.unk_14.unk_00 = arg3;
arg0->unk_00.unk_14.unk_02 = arg4;
arg0->unk_2C = arg5;
arg0->unk_30 = arg6;
arg0->unk_34 = arg7;
@@ -2516,8 +2516,8 @@ void func_8800071C(unk_func_8800071C* arg0, s32 arg1, s32 arg2, s32 arg3, s32 ar
s32 func_880007C0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) {
unk_func_8800071C* ptr = (unk_func_8800071C*)arg0;

func_880001A8(ptr->unk_00.unk_10, ptr->unk_00.unk_12, ptr->unk_00.unk_14, ptr->unk_00.unk_16, ptr->unk_2C,
ptr->unk_30, ptr->unk_34, ptr->unk_38);
func_880001A8(ptr->unk_00.unk_10.unk_00, ptr->unk_00.unk_10.unk_02, ptr->unk_00.unk_14.unk_00,
ptr->unk_00.unk_14.unk_02, ptr->unk_2C, ptr->unk_30, ptr->unk_34, ptr->unk_38);
return 0;
}

@@ -2526,10 +2526,10 @@ void func_88000830(unk_func_88000830* arg0, s32 arg1, s32 arg2, s32 arg3, s32 ar

arg0->unk_00.unk_1C = func_880008C4;
arg0->unk_00.unk_18 = func_880008E0;
arg0->unk_00.unk_10 = arg1;
arg0->unk_00.unk_12 = arg2;
arg0->unk_00.unk_14 = arg3;
arg0->unk_00.unk_16 = arg4;
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;
arg0->unk_00.unk_14.unk_00 = arg3;
arg0->unk_00.unk_14.unk_02 = arg4;
arg0->unk_34 = arg5;
arg0->unk_30 = arg6;
arg0->unk_2C = NULL;
@@ -2553,11 +2553,11 @@ s32 func_880008E0(unk_func_88000830* arg0, s32 arg1, s32 arg2) {
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA);

gDPLoadTextureBlock(gDisplayListHead++, arg0->unk_30[arg0->unk_2C], G_IM_FMT_RGBA, G_IM_SIZ_16b, arg0->unk_34,
arg0->unk_00.unk_16, 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);
arg0->unk_00.unk_14.unk_02, 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);

gSPTextureRectangle(gDisplayListHead++, arg1 << 3, arg2 << 3, (arg0->unk_00.unk_14 + arg1) << 3,
(arg2 + arg0->unk_00.unk_16) << 3, G_TX_RENDERTILE, 0, 0, 0x0200, 0x0200);
gSPTextureRectangle(gDisplayListHead++, arg1 << 3, arg2 << 3, (arg0->unk_00.unk_14.unk_00 + arg1) << 3,
(arg2 + arg0->unk_00.unk_14.unk_02) << 3, G_TX_RENDERTILE, 0, 0, 0x0200, 0x0200);
return 0;
}

@@ -2566,10 +2566,10 @@ void func_88000C18(unk_func_88000C18* arg0, s32 arg1, s32 arg2, s32 arg3, s32 ar

arg0->unk_00.unk_1C = func_88000CB0;
arg0->unk_00.unk_24 = func_88000CC0;
arg0->unk_00.unk_10 = arg1;
arg0->unk_00.unk_12 = arg2;
arg0->unk_00.unk_14 = arg3;
arg0->unk_00.unk_16 = arg4;
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;
arg0->unk_00.unk_14.unk_00 = arg3;
arg0->unk_00.unk_14.unk_02 = arg4;

arg0->unk_2C = arg5;
arg0->unk_30 = -1;
@@ -2591,8 +2591,8 @@ void func_88000CC8(unk_func_88000CC8* arg0, s32 arg1, s32 arg2, unk_func_8850002

arg0->unk_00.unk_18 = func_88000E30;
arg0->unk_00.unk_1C = func_88000D80;
arg0->unk_00.unk_10 = arg1;
arg0->unk_00.unk_12 = arg2;
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;
arg0->unk_2C = arg3;
arg0->unk_30[0] = arg4;
arg0->unk_30[1] = arg5;
@@ -2725,8 +2725,8 @@ void func_88001300(unk_func_88001300* arg0, s32 arg1, s32 arg2, s32 arg3, u8* ar

arg0->unk_00.unk_20 = func_88001D0C;
arg0->unk_00.unk_24 = func_88001CBC;
arg0->unk_00.unk_10 = arg1;
arg0->unk_00.unk_12 = arg2;
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;
arg0->unk_3C = mem_pool_alloc(arg6, sizeof(unk_func_88001300_03C));

((func8850C284)Memmap_GetFragmentVaddr(func_8850C284))(arg0->unk_3C, 2, 4, arg6);
@@ -2789,14 +2789,15 @@ void func_88001300(unk_func_88001300* arg0, s32 arg1, s32 arg2, s32 arg3, u8* ar
temp_s0 = mem_pool_alloc(arg6, sizeof(unk_func_88001300_000));
((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(temp_s0, sizeof(unk_func_88001300_000));
// clang-format off
temp_s0->unk_10 = 0x1E4; temp_s0->unk_12 = 0x34;
temp_s0->unk_10.unk_00 = 0x1E4; temp_s0->unk_10.unk_02 = 0x34;
// clang-format on
temp_s0->unk_14 = 0x4C;
temp_s0->unk_16 = 0x4C;
temp_s0->unk_14.unk_00 = 0x4C;
temp_s0->unk_14.unk_02 = 0x4C;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s0);

arg0->unk_38 = mem_pool_alloc(arg6, sizeof(unk_func_88001300_038));
((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_38, 0, 0, temp_s0->unk_14, temp_s0->unk_16);
((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_38, 0, 0, temp_s0->unk_14.unk_00,
temp_s0->unk_14.unk_02);
arg0->unk_38->unk_28 |= 0x200;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s0, arg0->unk_38);

@@ -3079,11 +3080,6 @@ s32 func_880025D8(unk_func_88001300* arg0) {
return sp24 - 1;
}

typedef struct func_88002628_sp38 {
/* 0x000 */ OSThread thread;
/* 0x1B0 */ char unk1B0[0x10];
} func_88002628_sp38; // size = 0x1C0

s32 func_88002628(s32 arg0, UNUSED s32 arg1) {
MemoryPool* sp44;
u8* sp40;
720 changes: 720 additions & 0 deletions src/fragments/23/fragment23.h

Large diffs are not rendered by default.

70 changes: 65 additions & 5 deletions src/fragments/23/fragment23_1A8590.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,69 @@
#include "global.h"
#include "fragment23.h"
#include "src/1CF30.h"
#include "src/29BA0.h"
#include "src/3FB0.h"
#include "src/memory.h"
#include "src/stage_loader.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8590/func_88200020.s")
s32 func_88200020(void) {
unk_D_800AC870* sp1C;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8590/func_882000E4.s")
main_pool_push_state('TERM');

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8590/func_88200110.s")
sp1C = func_8001E94C(0x1C, 0);

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8590/func_88200190.s")
ASSET_LOAD(D_04000000, fragment29_misc_1, 0);
FRAGMENT_LOAD(fragment26);
FRAGMENT_LOAD(fragment29);

func_80007754();
return sp1C;
}

void func_882000E4(void) {
func_8000771C();

main_pool_pop_state('TERM');
}

s32 func_88200110(UNUSED s32 arg0, UNUSED s32 arg1) {
func_8820C700(func_88200020(), 1);
func_80007990(1);
func_80006CB4(0xA);
func_882000E4();

FRAGMENT_LOAD_AND_CALL2(fragment22, 1, 0);
return 0x25;
}

s32 func_88200190(s32 arg0, s32 arg1) {
s32 temp_s0;
s32 var_s1;

if (arg0 == 5) {
return func_88200110(arg0, arg1);
}
temp_s0 = func_88200020();

var_s1 = func_8820104C(arg0, arg1);
while (var_s1 != 0) {
switch (var_s1) {
case 1:
func_8820C700(temp_s0, 0);
break;

case 2:
func_8821483C(temp_s0);
break;

case 3:
func_88205F1C(temp_s0);
break;
}
var_s1 = func_8820104C(var_s1, arg1);
}

func_882000E4();

return 0x25;
}
338 changes: 324 additions & 14 deletions src/fragments/23/fragment23_1A8800.c
Original file line number Diff line number Diff line change
@@ -1,27 +1,337 @@
#include "global.h"
#include "fragment23.h"
#include "src/1CF30.h"
#include "src/20330.h"
#include "src/29BA0.h"
#include "src/2D340.h"
#include "src/2E110.h"
#include "src/2E460.h"
#include "src/49790.h"
#include "src/memmap.h"
#include "src/memory.h"
#include "src/stage_loader.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200290.s")
static char** D_88224F90;
static char** D_88224F94;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_882004BC.s")
static u16 D_88217BF0[4] = { 6, 7, 8, 9 };
static Color_RGBA8 D_88217BF8 = { 0xA0, 0x96, 0x64, 0xFF };
static u16 D_88217BFC[4] = { 2, 3, 4, 5 };
static Color_RGBA8 D_88217C04 = { 0x64, 0x96, 0xB4, 0xFF };
static Color_RGBA8 D_88217C08 = { 0x3C, 0x64, 0x78, 0xFF };
static Color_RGBA8 D_88217C0C = { 0xA0, 0x96, 0x64, 0xFF };

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_882004C8.s")
void func_88200290(unk_func_88503298* arg0, s32 arg1, s32 arg2, MemoryPool* arg3) {
s32 i;
s32 temp_v0;
s32 var_s1;
unk_func_885012A4* temp_s0;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200968.s")
var_s1 = 0;
for (i = 0; i < 4; i++) {
temp_v0 = func_8001F5B0(0x10, 0, func_8002D7C0(NULL, 0, D_88224F94, D_88217BF0[i]));
if (var_s1 < temp_v0) {
var_s1 = temp_v0;
}
}
var_s1 += 0x10;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_882009B4.s")
((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88503298));
arg0->unk_00.unk_10.unk_00 = ((0x280 - var_s1) / 2) - arg1;
arg0->unk_00.unk_10.unk_02 = arg2;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200A30.s")
arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038));
((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, var_s1, 0x68);
arg0->unk_2C->unk_28 |= 0x200;
arg0->unk_2C->unk_28 |= 0x400;
arg0->unk_2C->unk_28 &= ~1;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C);

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200ACC.s")
temp_s0 = mem_pool_alloc(arg3, sizeof(unk_func_885012A4));
((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(temp_s0, 0, 0, var_s1, 0x68, D_88217BF8);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s0);

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200AF4.s")
arg0->unk_30 = mem_pool_alloc(arg3, sizeof(unk_func_8850878C));
((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_30, 8, 8, 0, 0x10);
arg0->unk_30->unk_3C = 0x20;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s0, arg0->unk_30);
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200B60.s")
void func_882004BC(unk_func_88503298* arg0, s8* arg1) {
arg0->unk_30->unk_40 = arg1;
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200C44.s")
void func_882004C8(unk_func_88200FA0_030* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) {
s32 i;
s32 j;
char* temp_s0;
s32 temp_v0;
s32 var_s2;
unk_func_885012A4* temp_s0_2;
unk_func_8850B254* sp6C;
UNUSED s32 pad1[3];
unk_func_88503298* temp_s0_3;
unk_func_8850878C* temp_s1;

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200F00.s")
if ((arg2 <= 0) || (arg2 >= 5)) {
arg2 = 0;
} else {
arg2--;
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_88200FA0.s")
var_s2 = func_8001F5B0(0x10, 0, func_8002D7C0(NULL, 0, D_88224F94, 1));

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1A8800/func_8820104C.s")
for (j = 0; j < 4; j++) {
temp_v0 = func_8001F5B0(0x10, 0, func_8002D7C0(NULL, 0, D_88224F94, D_88217BFC[j]));
if (var_s2 < temp_v0) {
var_s2 = temp_v0;
}
}
var_s2 += 0x10;

((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88200FA0_030));
arg0->unk_00.unk_20 = func_88200A30;
arg0->unk_00.unk_10.unk_00 = (0x280 - var_s2) / 2;
arg0->unk_00.unk_10.unk_02 = arg1;

arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038));
((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, var_s2, 0xA4);
arg0->unk_2C->unk_28 |= 0x200;
arg0->unk_2C->unk_28 |= 0x400;
arg0->unk_2C->unk_28 &= ~1;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C);

sp6C = mem_pool_alloc(arg4, sizeof(unk_func_8850B254));
((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp6C, 0, 0, var_s2, 0x18, D_88217C04, D_88217C08);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp6C);

temp_s1 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C));
temp_s0 = func_8002D7C0(NULL, 0, D_88224F94, 1);
((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s1, (var_s2 - func_8001F5B0(0x10, 0, temp_s0)) / 2, 0,
temp_s0, 0x10);
temp_s1->unk_3C = 0x1C;
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp6C, temp_s1);

func_8002CBC0(&arg0->unk_38, 4, arg4);

for (i = 0; i < 4; i++) {
func_8002CC2C(&arg0->unk_38, func_8002D7C0(NULL, 0, D_88224F94, D_88217BFC[i]), i);
}

temp_s0_2 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4));
((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(temp_s0_2, 0, 0x1C, var_s2, 0x88, D_88217C0C);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s0_2);

arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030));
((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_30, 0, 4, func_882009B4, var_s2, 0x20, 4, 1, arg4);
((func88506384)Memmap_GetFragmentVaddr(func_88506384))(arg0->unk_30, &arg0->unk_38, arg4);
((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_30, arg2);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s0_2, arg0->unk_30);

arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_88503298));
func_88200290(arg0->unk_34, arg0->unk_00.unk_10.unk_00, 0xB4, arg4);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_34);
func_88200968(arg0, arg2);

temp_s0_3 = mem_pool_alloc(arg4, sizeof(unk_func_88503298));
((func88503298)Memmap_GetFragmentVaddr(func_88503298))(temp_s0_3, arg0->unk_2C, arg3);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, temp_s0_3);
}

void func_88200968(unk_func_88200FA0_030* arg0, s32 arg1) {
func_882004BC(arg0->unk_34, func_8002D7C0(NULL, 0, D_88224F94, arg1 + 6));
}

void func_882009B4(s32 arg0, s32 arg1, char* arg2, s32 arg3) {
static Color_RGBA8 D_88217C10 = { 0xF0, 0xF0, 0xF0, 0xFF };

func_8001F3F4();
func_8001F324(D_88217C10.r, D_88217C10.g, D_88217C10.b, D_88217C10.a);
func_8001EBE0(0x10, 0);
func_8001F1E8(arg0 + 8, arg1 + 4, arg2);
func_8001F444();
}

s32 func_88200A30(unk_func_88200FA0_030* arg0, Controller* arg1) {
s32 sp1C;

if (arg0->unk_2C->unk_30 & 2) {
sp1C = arg0->unk_30->unk_00.unk_20(arg0->unk_30, arg1);
if ((sp1C & 1) && (sp1C & 8)) {
func_88200968(arg0, arg0->unk_30->unk_38);
}
} else if (!(arg0->unk_2C->unk_28 & 1)) {
sp1C = 2;
} else {
sp1C = 1;
}
return sp1C;
}

void func_88200ACC(unk_func_88200FA0_030* arg0) {
arg0->unk_2C->unk_28 |= 1;
arg0->unk_34->unk_2C->unk_28 |= 1;
}

void func_88200AF4(unk_func_88200FA0_030* arg0) {
arg0->unk_2C->unk_2C = 0xB;
arg0->unk_34->unk_2C->unk_2C = 0xB;
while (arg0->unk_2C->unk_28 & 1) {
func_8002EEA8(NULL);
}
}

s32 func_88200B60(unk_func_88200FA0_030* arg0, Controller* arg1) {
s32 var_s0;
s32 var_s1 = 0;

func_88200ACC(arg0);

while (var_s1 == 0) {
func_8002EEA8(NULL);
var_s0 = func_88200A30(arg0, arg1);
if (!(var_s0 & 1)) {
if (arg1->buttonPressed & 0x4000) {
var_s0 = 0x80000003;
var_s1 = 1;
} else if (arg1->buttonPressed & 0x8000) {
func_80048B90(0x1C);
var_s0 = 1;
var_s1 = arg0->unk_30->unk_38 + 2;
}
}
((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(var_s0);
}
func_88200AF4(arg0);
return var_s1;
}

void func_88200C44(unk_func_88200FA0* arg0, s32 arg1, s32 arg2, s32 arg3, MemoryPool* arg4) {
static Color_RGBA8 D_88217C14 = { 0x1E, 0x50, 0x50, 0xFF };
static Color_RGBA8 D_88217C18 = { 0x00, 0x0A, 0x0A, 0xFF };

unk_func_88001300_000* sp4C;
unk_func_88500EE4* sp48;
unk_func_88509A2C* sp44;
unk_func_88509E34* sp40;

((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, 0x34);
arg0->unk_00.unk_10.unk_00 = arg1;
arg0->unk_00.unk_10.unk_02 = arg2;

sp4C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000));
((func885031E8)Memmap_GetFragmentVaddr(func_885031E8))(sp4C, 0, 0, 0x280, 0x1E0);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, sp4C);

sp48 = mem_pool_alloc(arg4, sizeof(unk_func_88500EE4));
((func88500EE4)Memmap_GetFragmentVaddr(func_88500EE4))(sp48, 0, 0, 0x280, 0x1E0, D_88223E48, D_88217C14,
D_88217C18);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp4C, sp48);

arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_885088F4));
((func885088F4)Memmap_GetFragmentVaddr(func_885088F4))(arg0->unk_2C, 0x41, 0x15C, 0xDC);
if (func_80007604() == 0) {
arg0->unk_2C->unk_2C = 5;
}
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp4C, arg0->unk_2C);

sp44 = mem_pool_alloc(arg4, sizeof(unk_func_88509A2C));
((func88509A2C)Memmap_GetFragmentVaddr(func_88509A2C))(sp44, 0x38, 0x22, func_80029080(),
func_8002D7C0(NULL, 0, D_88224F90, 0));
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp44);

sp40 = mem_pool_alloc(arg4, sizeof(unk_func_88509E34));
((func88509E34)Memmap_GetFragmentVaddr(func_88509E34))(sp40, 0, 0, func_8002D7C0(NULL, 0, D_88224F94, 0));
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp40);

arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030));
func_882004C8(arg0->unk_30, 0x78, arg3, sp4C, arg4);
((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_30);

arg0->unk_00.unk_24(&arg0->unk_00, 1);
}

s32 func_88200F00(unk_func_88200FA0* arg0) {
s32 sp34 = 0;

while (sp34 == 0) {
func_800079C4();
((func885008C4)Memmap_GetFragmentVaddr(func_885008C4))(arg0);
((func88500828)Memmap_GetFragmentVaddr(func_88500828))(arg0, 0, 0);
func_80007778();
func_8002EF18(&sp34);
}
return sp34;
}

void func_88200FA0(unk_func_88200FA0* arg0) {
s32 sp24;
s32 i;

while (func_80007604() != 0) {
func_8002EEA8(NULL);
}

func_8001F738(gPlayer1Controller);

sp24 = func_88200B60(arg0->unk_30, gPlayer1Controller);
if (sp24 == 1) {
arg0->unk_2C->unk_2C = 9;
func_80006CB4(8);

i = 10;
while (i-- > 0) {
func_8002EEA8(NULL);
}
}
func_8002EEA8(sp24);

osStopThread(NULL);
}

s32 func_8820104C(s32 arg0, UNUSED s32 arg1) {
MemoryPool* sp34;
void* sp30;
u8* sp2C;
func_88002628_sp38* sp28;
UNUSED s32 pad;
s32 sp20;

main_pool_push_state('SLTM');

sp2C = main_pool_alloc(0x1000, 0);
sp34 = mem_pool_try_init(0x8000, 0);

func_8002D510();
D_88224F90 = func_8002D5AC(0x2A);
D_88224F94 = func_8002D5AC(1);

sp30 = mem_pool_alloc(sp34, sizeof(unk_func_88200FA0));
func_88200C44(sp30, 0, 0, arg0, sp34);

sp28 = ALIGN16((u32)mem_pool_alloc(sp34, sizeof(func_88002628_sp38)));
osCreateThread(&sp28->thread, 0x32, func_88200FA0, sp30, sp2C + 0x1000, osGetThreadPri(NULL) - 1);

func_8002EE78();
func_8001F738(gPlayer1Controller);

osStartThread(&sp28->thread);

func_80006C6C(8);
sp20 = func_88200F00(sp30);

osDestroyThread(&sp28->thread);

main_pool_pop_state('SLTM');

if (sp20 == 1) {
FRAGMENT_LOAD_AND_CALL2(fragment22, 1, 0);
return 0;
}

if (sp20 == 5) {
FRAGMENT_LOAD_AND_CALL2(fragment24, 1, 0);
return 0;
}

return sp20 - 1;
}
1,582 changes: 1,530 additions & 52 deletions src/fragments/23/fragment23_1A9780.c

Large diffs are not rendered by default.

2,571 changes: 2,500 additions & 71 deletions src/fragments/23/fragment23_1AE680.c

Large diffs are not rendered by default.

3,046 changes: 2,950 additions & 96 deletions src/fragments/23/fragment23_1B4EA0.c

Large diffs are not rendered by default.

828 changes: 802 additions & 26 deletions src/fragments/23/fragment23_1BCF10.c

Large diffs are not rendered by default.

1,606 changes: 1,606 additions & 0 deletions src/fragments/23/fragment23_882181B0.c

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/fragments/25/fragment25.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "global.h"
#include "fragment25.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/25/fragment25/func_88400020.s")

16 changes: 16 additions & 0 deletions src/fragments/25/fragment25.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef _FRAGMENT25_H_
#define _FRAGMENT25_H_

#include "global.h"

typedef struct unk_D_88400138 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ Color_RGBA8 unk_04;
/* 0x08 */ Color_RGBA8 unk_08;
} unk_D_88400138; // size = 0xC

typedef unk_D_88400138* (*func884000C4)(u8);

unk_D_88400138* func_884000C4(u8);

#endif // _FRAGMENT25_H_
524 changes: 499 additions & 25 deletions src/fragments/26/fragment26.h

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/fragments/29/fragment29.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "global.h"
#include "fragment29.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/29/fragment29/func_88900020.s")

19 changes: 19 additions & 0 deletions src/fragments/29/fragment29.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef _FRAGMENT29_H_
#define _FRAGMENT29_H_

#include "global.h"
#include "src/fragments/26/fragment26.h"

typedef void (*func889000C4)(unk_func_889000C4*, s32, unk_func_88001300_038*, s32, char*, MemoryPool*);
typedef void (*func889006D4)(unk_func_889000C4*, s32);
typedef void (*func889007AC)(unk_func_889000C4*);
typedef s32 (*func88900808)(unk_func_889000C4*, Controller*, s32);
typedef void (*func88900970)(unk_func_889000C4*, s32);

void func_889000C4(unk_func_889000C4*, s32, unk_func_88001300_038*, s32, char*, MemoryPool*);
void func_889006D4(unk_func_889000C4*, s32);
void func_889007AC(unk_func_889000C4*);
s32 func_88900808(unk_func_889000C4*, Controller*, s32);
void func_88900970(unk_func_889000C4*, s32);

#endif // _FRAGMENT29_H_
13 changes: 7 additions & 6 deletions src/memmap.c
Original file line number Diff line number Diff line change
@@ -170,15 +170,16 @@ uintptr_t Memmap_GetFragmentBaseVaddr(u32 id) {
* Y: Fragment number.
* Z: Fragment offset.
*/
uintptr_t Memmap_GetFragmentVaddr(u32 mask) {
if ((mask >= 0x81000000U) && (mask < 0x90000000U)) {
u32 id = ((mask & 0x0FF00000) >> 0x14) - 0x10;
u32 value = ((mask & 0x000FFFFF));
uintptr_t Memmap_GetFragmentVaddr(void* addr) {
if (((u32)addr >= 0x81000000U) && ((u32)addr < 0x90000000U)) {
u32 id = (((u32)addr & 0x0FF00000) >> 0x14) - 0x10;
u32 value = (((u32)addr & 0x000FFFFF));

if (gFragments[id].vaddr != NULL) {
mask = gFragments[id].vaddr + value;
addr = gFragments[id].vaddr + value;
}
}
return mask;
return (uintptr_t)addr;
}

/*
2 changes: 1 addition & 1 deletion src/memmap.h
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ void Memmap_SetSegments(Gfx** gfxDl);
void Memmap_RelocateFragment(u32 id, struct Fragment* fragment);
void Memmap_SetFragmentMap(u32 id, uintptr_t vaddr, size_t size);
uintptr_t Memmap_GetFragmentBaseVaddr(u32 id);
uintptr_t Memmap_GetFragmentVaddr(u32 mask);
uintptr_t Memmap_GetFragmentVaddr(void* addr);
u32 Memmap_GetFragmentVaddrMask(u32 i, uintptr_t addr);
void Memmap_ClearFragmentMemmap(u32 id);
uintptr_t Memmap_GetLoadedFragmentVaddr(uintptr_t addr);
4 changes: 2 additions & 2 deletions src/memory.h
Original file line number Diff line number Diff line change
@@ -69,8 +69,8 @@ MainPool*main_pool_get_pool(void);

// memory.c
MemoryPool *mem_pool_try_init(u32 size, s32 side);
MainPool* mem_pool_init(MainPool*pool, s32 size);
void *mem_pool_alloc(MainPool*node, s32 size);
MainPool* mem_pool_init(MainPool* pool, s32 size);
void *mem_pool_alloc(MainPool* node, s32 size);

void mem_pool_free(MemoryPool* pool, void* addr);
void *func_80002D10(u32 size, s32 side);
8 changes: 4 additions & 4 deletions src/memory_main.c
Original file line number Diff line number Diff line change
@@ -214,7 +214,7 @@ u32 main_pool_get_available(void) {
* in the pool.
*/
u32 main_pool_push_state(u32 arg) {
struct MainPoolState* state;
MainPoolState* state;
MainPoolBlock* listHeadL;
MainPoolBlock* listHeadR;
uintptr_t available;
@@ -263,11 +263,11 @@ u32 main_pool_push_state(u32 arg) {
* amount of free space left in the pool.
*/
u32 main_pool_pop_state(u32 arg) {
struct MainPoolState* node;
MainPoolState* node;
MainPoolBlock* argptr;
void* listHeadL;
void* listHeadR;
struct MainPoolState* state;
MainPoolState* state;

osRecvMesg(&sMemPool.queue, NULL, OS_MESG_BLOCK);

@@ -387,7 +387,7 @@ void main_pool_set_func(void* block, s32 arg, AllocateFunc func) {
* Get the distance offset from the block's state listHeadL pointer to the current block.
*/
size_t main_pool_get_block_dist(MainPoolBlock* block) {
struct MainPoolState* state = ((u8*)block - sizeof(MainPoolBlock));
MainPoolState* state = ((u8*)block - sizeof(MainPoolBlock));

return (size_t)((uintptr_t)state->listHeadL - (uintptr_t)block);
}
19 changes: 13 additions & 6 deletions yamls/us/rom.yaml
Original file line number Diff line number Diff line change
@@ -1145,12 +1145,19 @@
- [0x1AE680, c, fragments/23/fragment23_1AE680]
- [0x1B4EA0, c, fragments/23/fragment23_1B4EA0]
- [0x1BCF10, c, fragments/23/fragment23_1BCF10]
- [0x1C0160, data, fragments/23/fragment23_data]
- [0x1CD3C0, rodata, fragments/23/fragment23_rodata_1CD3C0]
- [0x1CD400, rodata, fragments/23/fragment23_rodata_1CD400]
- [0x1CD470, rodata, fragments/23/fragment23_rodata_1CD470]

- {vram: 0x88224F90, type: bss, name: fragments/23/fragment23_bss}
- [0x1C0160, c, fragments/23/fragment23_882181B0]
- [0x1C0160, .data, fragments/23/fragment23_1A8800] # fragment23_1A8800
- [0x1C0190, .data, fragments/23/fragment23_1A9780] # fragment23_1A9780
- [0x1C0280, .data, fragments/23/fragment23_1AE680] # fragment23_1AE680
- [0x1C0540, .data, fragments/23/fragment23_1B4EA0] # fragment23_1B4EA0
- [0x1C0720, .data, fragments/23/fragment23_882181B0] # fragment23_882181B0
- [0x1CD3C0, .rodata, fragments/23/fragment23_1A9780] # fragment23_1A9780
- [0x1CD400, .rodata, fragments/23/fragment23_1AE680]
- [0x1CD470, .rodata, fragments/23/fragment23_1B4EA0]

- {vram: 0x88224F90, type: .bss, name: fragments/23/fragment23_1A8800} # fragment23_1A8800
- {vram: 0x88224FA0, type: .bss, name: fragments/23/fragment23_1A9780} # fragment23_1A9780
- {vram: 0x88224FC0, type: .bss, name: fragments/23/fragment23_1B4EA0} # fragment23_1B4EA0

- name: fragment23_relocs
type: code