diff --git a/include/common.h b/include/common.h index c20ec80..a8bb037 100644 --- a/include/common.h +++ b/include/common.h @@ -253,7 +253,7 @@ typedef struct { ASSERT_SIZE(OverlaySomething, 0x14); -extern OverlaySomething* (*D_800AF028[24])(void); +extern OverlaySomething* (*D_800AF028[])(void); extern OverlaySomething* D_800E8294; @@ -270,7 +270,7 @@ extern void __setup_overlay_87200(void); extern void __setup_overlay_71280_51674(void); extern void __setup_overlay_71280_51940(void); -extern u32* func_80076188(void); +extern OverlaySomething* func_80076188(void); extern void func_80076194(void); extern void func_800761A4(void); extern void __loads_overlay_array(s32 arg0); @@ -387,7 +387,7 @@ extern void func_801C889C(s32 arg0); extern void func_8007337C(void); extern void func_801C8864(void); -extern u32 D_800A872C[]; +extern OverlaySomething D_800A872C; extern CharacterSlot CHARACTER_SLOT[0x64]; diff --git a/src/_ob_rabid_jar.c b/src/_ob_rabid_jar.c index 9105e45..b478a08 100644 --- a/src/_ob_rabid_jar.c +++ b/src/_ob_rabid_jar.c @@ -12,8 +12,27 @@ INCLUDE_ASM(const s32, "_ob_rabid_jar", __calls_loads_overlay_array); INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076150); +/* 6550 80076150 */ +// s8 func_80076150(u16 arg0) { +// switch (arg0) { +// case 3: +// case 4: +// case 5: +// case 6: +// case 7: +// case 10: +// case 11: +// case 15: +// case 18: +// case 23: +// return 0; +// default: +// return 1; +// } +// } + /* 6588 80076188 */ -u32* func_80076188(void) { +OverlaySomething* func_80076188(void) { return &D_800A872C; } @@ -162,7 +181,10 @@ INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007A070); INCLUDE_ASM(const s32, "_ob_rabid_jar", Unpack); -INCLUDE_ASM(const s32, "_ob_rabid_jar", __read_u32_le); +/* ABE0 8007A7E0 */ +u32 __read_u32_le(u8* arg0) { + return (arg0[0] << 24) | (arg0[1] << 16) | (arg0[2] << 8) | arg0[3]; +} INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007A80C); @@ -172,4 +194,29 @@ INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007AB7C); INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007ABAC); -INCLUDE_ASM(const s32, "_ob_rabid_jar", UnpackProc); +void Unpack(s32, s32); +extern OSMesgQueue MQ_800AF320; + +/* B030 8007AC30 */ +void UnpackProc(void) { + struct { + /* 0x00 */ s32 field_0x0; + /* 0x04 */ OSMesgQueue* field_0x4; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 field_0x9[3]; + /* 0x0C */ s32 field_0xc; + /* 0x10 */ s32 field_0x10; + } *sp10; + + sp10 = NULL; + while(1) { + osRecvMesg(&MQ_800AF320, &sp10, 1); + if (sp10->field_0x8 == 1) { + Unpack(sp10->field_0x10, sp10->field_0xc); + osSendMesg(sp10->field_0x4, sp10, 1); + } else { + osSyncPrintf("UnpackProc: no supported format %d\n", sp10->field_0x8); + } + } +} + diff --git a/src/data/overlay_table.c b/src/data/overlay_table.c index 34a82dd..b5aac7a 100644 --- a/src/data/overlay_table.c +++ b/src/data/overlay_table.c @@ -222,12 +222,12 @@ u8* __SOME_OVERLAY_ID_ARRAY[] = { u32 D_800A8728 = NULL; /* 38B2C 800A872C */ -u32 D_800A872C[] = { - 0x800761A4, - 0x00000000, - 0x00000000, - 0x00000000, - 0x0000000C +OverlaySomething D_800A872C = { + .setup = func_800761A4, + .field_0x4 = 0x00000000, + .field_0x8 = 0x00000000, + .field_0xc = 0x00000000, + .field_0x10 = 0x0000000C }; /* 38B40 800A8740 */