From dbee8d0efcfdba446904248398eb182c0f1ac24a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 07:55:46 -0400 Subject: [PATCH 01/10] Add thread0_epc.h, and link files to it for signatures --- src/main.c | 1 + src/memory.c | 1 + src/printf.c | 1 + src/textures_sprites.h | 2 +- src/thread0_epc.c | 81 ++----------------------------------- src/thread0_epc.h | 92 ++++++++++++++++++++++++++++++++++++++++++ src/unknown_00BC20.c | 3 +- src/unknown_06B2B0.c | 1 + 8 files changed, 102 insertions(+), 80 deletions(-) create mode 100644 src/thread0_epc.h diff --git a/src/main.c b/src/main.c index 09b7d5fb..d65a8de2 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ /* RAM_POS: 0x80065D40 */ #include "main.h" +#include "thread0_epc.h" /************ .rodata ************/ diff --git a/src/memory.c b/src/memory.c index 32536f4f..c0f68ea9 100644 --- a/src/memory.c +++ b/src/memory.c @@ -3,6 +3,7 @@ #include "memory.h" #include "printf.h" +#include "thread0_epc.h" /************ .rodata ************/ diff --git a/src/printf.c b/src/printf.c index f70b2b95..b885fe4b 100644 --- a/src/printf.c +++ b/src/printf.c @@ -5,6 +5,7 @@ #include "types.h" #include "macros.h" #include "f3ddkr.h" +#include "thread0_epc.h" /************ .data ************/ diff --git a/src/textures_sprites.h b/src/textures_sprites.h index 5fefdd6d..0113bb38 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -90,6 +90,6 @@ s32 func_8007C860(s32 spriteIndex); // Non Matching s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut, s32 *sizeOut); // Non Matching void free_sprite(Sprite *sprite); // Non Matching -void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentColor); +void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentColor); // Non Matching #endif diff --git a/src/thread0_epc.c b/src/thread0_epc.c index f0b9f09f..77a75df1 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -1,9 +1,9 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800B6E50 */ +#include "thread0_epc.h" #include "types.h" #include "macros.h" -#include "libultra_internal.h" #include "menu.h" #include "controller_pak.h" #include "printf.h" @@ -36,61 +36,6 @@ char *D_800E302C[3] = { /************ .bss ************/ -/* Size: 0x1B0 bytes */ -typedef struct epcInfo { -/* 0x00 */ s32 unk0; -/* 0x04 */ s32 unk4; -/* 0x08 */ s32 unk8; -/* 0x0C */ s32 unkC; -/* 0x10 */ s32 unk10; -/* 0x14 */ s32 thread; -/* 0x18 */ s32 unk18; -/* 0x1C */ s32 unk1C; -/* 0x20 */ s64 at; -/* 0x28 */ s64 v0; -/* 0x30 */ s64 v1; -/* 0x38 */ s64 a0; -/* 0x40 */ s64 a1; -/* 0x48 */ s64 a2; -/* 0x50 */ s64 a3; -/* 0x58 */ s64 t0; -/* 0x60 */ s64 t1; -/* 0x68 */ s64 t2; -/* 0x70 */ s64 t3; -/* 0x78 */ s64 t4; -/* 0x80 */ s64 t5; -/* 0x88 */ s64 t6; -/* 0x90 */ s64 t7; -/* 0x98 */ s64 s0; -/* 0xA0 */ s64 s1; -/* 0xA8 */ s64 s2; -/* 0xB0 */ s64 s3; -/* 0xB8 */ s64 s4; -/* 0xC0 */ s64 s5; -/* 0xC8 */ s64 s6; -/* 0xD0 */ s64 s7; -/* 0xD8 */ s64 t8; -/* 0xE0 */ s64 t9; -/* 0xE8 */ s64 gp; -/* 0xF0 */ s64 sp; -/* 0xF8 */ s64 s8; -/* 0x100 */ s64 ra; -/* 0x108 */ s32 unk108; -/* 0x10C */ s32 unk10C; -/* 0x110 */ s32 unk110; -/* 0x114 */ s32 unk114; -/* 0x118 */ s32 sr; -/* 0x11C */ s32 epc; -/* 0x120 */ s32 cause; -/* 0x124 */ s32 badvaddr; -/* 0x128 */ s32 unk128; -/* 0x12C */ s32 unk12C; -/* 0x130 */ f32 unk130; -/* 0x134 */ f32 unk134; -/* 0x138 */ f32 unk138; -/* 0x13C */ u8 pad13C[0x74]; -} epcInfo; - epcInfo gEpcInfo; s32 D_801299B0[64]; @@ -98,13 +43,6 @@ extern s32 D_80129BB0[256]; /******************************/ -s16 *func_80024594(s32 *arg0, s32 *arg1); - -void thread0(s32 arg0); -void func_800B70D0(void); -void func_800B7144(void); -void func_800B71B0(void); - extern OSThread D_801295E0; extern OSMesgQueue D_80129790; extern OSMesg D_801297A8; @@ -139,8 +77,6 @@ void func_800B6E50(void) { } } - - void func_800B6EE0(void) { D_80127CAC = D_80127CBC; D_80127CAE = D_80127CC4; @@ -206,18 +142,8 @@ void thread0(s32 arg0) { // Has regalloc issues GLOBAL_ASM("asm/non_matchings/thread0_epc/thread0.s") #endif -/* Unknown Size, might be epcInfo? */ -typedef struct unk800D2470 { -/* 0x00 */ OSThread *thread; -/* 0x04 */ s32 unk4; -/* 0x08 */ s32 unk8; -/* 0x0C */ struct unk800D2470 *next; -/* 0x10 */ u8 pad10[0x108]; -/* 0x118 */ s32 unk118; -} unk800D2470; - void func_800B70D0(void) { - unk800D2470 *node = func_800D2470(); + unk800D2470 *node = func_800D2470(); //Might be epcInfo? while(node->unk4 != -1) { if (node->unk4 == 0) { node->unk118 &= 0xFFFF00FE; @@ -246,7 +172,7 @@ GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B71B0.s") #if 1 GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B7460.s") #else - +//Rename mask to colorTag? void func_800B7460(s32 *epc, s32 size, s32 mask) { epcInfo sp840; s16 sp440[0x200]; @@ -287,6 +213,7 @@ void func_800B76B8(s32 arg0, s32 arg1) { } } +//Called as a check to see if render_epc_lock_up_display should be called. s32 func_800B76DC(void) { s32 fileNum; u8 sp820[4]; // Unused? diff --git a/src/thread0_epc.h b/src/thread0_epc.h new file mode 100644 index 00000000..2e288174 --- /dev/null +++ b/src/thread0_epc.h @@ -0,0 +1,92 @@ +#ifndef _THREAD0_EPC_H_ +#define _THREAD0_EPC_H_ + +#include "types.h" +#include "libultra_internal.h" + +/* Size: 0x1B0 bytes */ +typedef struct epcInfo { +/* 0x00 */ s32 unk0; +/* 0x04 */ s32 unk4; +/* 0x08 */ s32 unk8; +/* 0x0C */ s32 unkC; +/* 0x10 */ s32 unk10; +/* 0x14 */ s32 thread; +/* 0x18 */ s32 unk18; +/* 0x1C */ s32 unk1C; +/* 0x20 */ s64 at; +/* 0x28 */ s64 v0; +/* 0x30 */ s64 v1; +/* 0x38 */ s64 a0; +/* 0x40 */ s64 a1; +/* 0x48 */ s64 a2; +/* 0x50 */ s64 a3; +/* 0x58 */ s64 t0; +/* 0x60 */ s64 t1; +/* 0x68 */ s64 t2; +/* 0x70 */ s64 t3; +/* 0x78 */ s64 t4; +/* 0x80 */ s64 t5; +/* 0x88 */ s64 t6; +/* 0x90 */ s64 t7; +/* 0x98 */ s64 s0; +/* 0xA0 */ s64 s1; +/* 0xA8 */ s64 s2; +/* 0xB0 */ s64 s3; +/* 0xB8 */ s64 s4; +/* 0xC0 */ s64 s5; +/* 0xC8 */ s64 s6; +/* 0xD0 */ s64 s7; +/* 0xD8 */ s64 t8; +/* 0xE0 */ s64 t9; +/* 0xE8 */ s64 gp; +/* 0xF0 */ s64 sp; +/* 0xF8 */ s64 s8; +/* 0x100 */ s64 ra; +/* 0x108 */ s32 unk108; +/* 0x10C */ s32 unk10C; +/* 0x110 */ s32 unk110; +/* 0x114 */ s32 unk114; +/* 0x118 */ s32 sr; +/* 0x11C */ s32 epc; +/* 0x120 */ s32 cause; +/* 0x124 */ s32 badvaddr; +/* 0x128 */ s32 unk128; +/* 0x12C */ s32 unk12C; +/* 0x130 */ f32 unk130; +/* 0x134 */ f32 unk134; +/* 0x138 */ f32 unk138; +/* 0x13C */ u8 pad13C[0x74]; +} epcInfo; + +/* Unknown Size, might be epcInfo? */ +typedef struct unk800D2470 { +/* 0x00 */ OSThread *thread; +/* 0x04 */ s32 unk4; +/* 0x08 */ s32 unk8; +/* 0x0C */ struct unk800D2470 *next; +/* 0x10 */ u8 pad10[0x108]; +/* 0x118 */ s32 unk118; +} unk800D2470; + +s16 *func_80024594(s32 *arg0, s32 *arg1); //unknown_00BC20.c + +void func_800B6E50(void); +void func_800B6EE0(void); +void func_800B6F04(void); +void func_800B6F30(s32 arg0, s32 arg1, s32 arg2); +void func_800B6F40(s32 arg0, s32 arg1, s32 arg2); +void func_800B70D0(void); +void func_800B7144(void); +void func_800B76B8(s32 arg0, s32 arg1); +s32 func_800B76DC(void); +void func_800B77D4(s32 arg0); + + +void func_800B6F50(void); // Non Matching +void thread0(s32 arg0); // Non Matching +void func_800B7460(s32 *epc, s32 size, s32 mask); // Non Matching +void render_epc_lock_up_display(void); // Non Matching +void func_800B71B0(void); // Non Matching + +#endif diff --git a/src/unknown_00BC20.c b/src/unknown_00BC20.c index ca8a3f6c..a757f60b 100644 --- a/src/unknown_00BC20.c +++ b/src/unknown_00BC20.c @@ -10,6 +10,7 @@ #include "f3ddkr.h" #include "asset_sections.h" #include "asset_loading.h" +#include "thread0_epc.h" /************ .data ************/ @@ -278,8 +279,6 @@ extern s16 D_8011D5AC; /******************************/ -extern s32 osTvType; - typedef struct unk8001D6E4_arg1_40 { u8 pad0[0x71]; /* 0x71 */ u8 unk71; diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index b5f03090..82171aa5 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -16,6 +16,7 @@ #include "lib/src/mips1/sc/sched.h" #include "gzip.h" #include "printf.h" +#include "thread0_epc.h" /************ .rodata ************/ From bf2896b8efe1a063ee59c8aea6270bfd3898c318 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 08:03:31 -0400 Subject: [PATCH 02/10] Add thread30.h and link to it --- src/menu.c | 1 + src/menu.h | 1 - src/thread30.c | 4 +--- src/thread30.h | 14 ++++++++++++++ src/unknown_06B2B0.c | 1 + 5 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 src/thread30.h diff --git a/src/menu.c b/src/menu.c index 038413f7..f4590bc2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -19,6 +19,7 @@ #include "object_models.h" #include "printf.h" #include "textures_sprites.h" +#include "thread30.h" /** * @file Contains all the code used for every menu in the game. diff --git a/src/menu.h b/src/menu.h index 4cf1f908..4698d877 100644 --- a/src/menu.h +++ b/src/menu.h @@ -651,7 +651,6 @@ void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 arg2, s32 arg3, u8 red, u8 green, u8 blue, u8 alpha); // Non Matching src/unknown_078050.c void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId); //src/unknown_06B2B0.c void func_80078D00(Gfx**, void *element, s32, s32, f32, f32, u32, s32); //Non Matching src/unknown_078050.c -s32 get_thread30_level_id_to_load(void); //src/thread30.c void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); //unknown_00BC20 void gParticlePtrList_addObject(Object *object); //src/unknown_00BC20.c s32 get_random_number_from_range(s32, s32); // Non Matching src/unknown_070110.c diff --git a/src/thread30.c b/src/thread30.c index 759a1c85..28e52bf2 100644 --- a/src/thread30.c +++ b/src/thread30.c @@ -1,7 +1,7 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C7350 */ -#include "types.h" +#include "thread30.h" #include "macros.h" #include "libultra_internal.h" @@ -31,8 +31,6 @@ extern void *gThread30Stack; /*****************************/ -void thread30(void *arg); - /** * Initalizes and starts thread30() */ diff --git a/src/thread30.h b/src/thread30.h new file mode 100644 index 00000000..08ad1a39 --- /dev/null +++ b/src/thread30.h @@ -0,0 +1,14 @@ +#ifndef _THREAD30_H_ +#define _THREAD30_H_ + +#include "types.h" + +void create_and_start_thread30(void); +void stop_thread30(void); +s32 get_thread30_level_id_to_load(void); +void tick_thread30(void); +s32 get_thread30_load_delay(void); +s32 set_level_to_load_in_background(s32 levelId, s32 cutsceneId); +void thread30(void *arg); + +#endif \ No newline at end of file diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 82171aa5..76fea608 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -17,6 +17,7 @@ #include "gzip.h" #include "printf.h" #include "thread0_epc.h" +#include "thread30.h" /************ .rodata ************/ From 9d620f6bd0d9be7bf43bda1718af89ab26fdc9e1 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 08:25:19 -0400 Subject: [PATCH 03/10] Add unknown_0ABDF0.h and link more headers --- src/thread30.h | 2 +- src/unknown_0ABDF0.c | 81 +++++++------------------------------------- src/unknown_0ABDF0.h | 72 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 70 deletions(-) create mode 100644 src/unknown_0ABDF0.h diff --git a/src/thread30.h b/src/thread30.h index 08ad1a39..c40e623f 100644 --- a/src/thread30.h +++ b/src/thread30.h @@ -11,4 +11,4 @@ s32 get_thread30_load_delay(void); s32 set_level_to_load_in_background(s32 levelId, s32 cutsceneId); void thread30(void *arg); -#endif \ No newline at end of file +#endif diff --git a/src/unknown_0ABDF0.c b/src/unknown_0ABDF0.c index 2737b15e..dd5170fc 100644 --- a/src/unknown_0ABDF0.c +++ b/src/unknown_0ABDF0.c @@ -1,42 +1,20 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800AB1F0 */ +#include "unknown_0ABDF0.h" #include "types.h" #include "macros.h" #include "structs.h" #include "f3ddkr.h" #include "PR/libultra.h" - -typedef struct { - s16 unk0; - s16 unk2; -} unk80127BF8; - -extern u32 osTvType; +#include "camera.h" /************ .data ************/ -/* Size: 0x2C Bytes */ -typedef struct unk800E2850 { - s32 unk0; - s32 unk4; - s32 unk8; - s32 unkC; - s32 unk10; - s32 unk14; - s32 unk18; - s32 unk1C; - s32 unk20; - s16 unk24; - s16 unk26; - s16 unk28; - s16 unk2A; -} unk800E2850; - unk800E2850 D_800E2850[3] = { { 0, 0x40, 0, 0xFE000000, 0xFE000000, 0xFE000000, 0x03FFFFFF, 0x03FFFFFF, 0x03FFFFFF, 4, 4, 8, 8 }, { 0, 0x100, 1, 0xFE000000, 0xFE000000, 0xFE000000, 0x03FFFFFF, 0x03FFFFFF, 0x03FFFFFF, 4, 4, 8, 8 }, - { 0, 0x08, 2, 0xFE000000, 0xFE000000, 0xFE000000, 0x03FFFFFF, 0x03FFFFFF, 0x03FFFFFF, 4, 4, 8, 8 } + { 0, 0x08, 2, 0xFE000000, 0xFE000000, 0xFE000000, 0x03FFFFFF, 0x03FFFFFF, 0x03FFFFFF, 4, 4, 8, 8 }, }; s32 D_800E28D4 = 0; @@ -66,25 +44,16 @@ Gfx D_800E2928[] = { gsSPEndDisplayList(), }; -/* Size: 0x10 Bytes */ -typedef struct unk800E2980 { - s32 unk0; - u16 unk4; - u16 unk6; - f32 unk8; - f32 unkC; -} unk800E2980; - unk800E2980 D_800E2980[2] = { { 1, 0xFFFF, 0xC090, 3.0f, 0.0f }, - { 0, 0, 0, 0.0f, 0.0f } + { 0, 0, 0, 0.0f, 0.0f }, }; unk800E2980 D_800E29A0[4] = { { 3, 0xFFFF, 0x0090, 0.75f, -32.0f }, { 2, 0x0050, 0xFF60, 0.8f, -96.0f }, { 2, 0x00FF, 0x0090, 0.75f, -192.0f }, - { 0, 0, 0, 0.0f, 0.0f } + { 0, 0, 0, 0.0f, 0.0f }, }; unk800E2980 D_800E29E0[5] = { @@ -92,7 +61,7 @@ unk800E2980 D_800E29E0[5] = { { 2, 0xFFFF, 0xFF90, 1.0f, -128.0f }, { 3, 0xFFFF, 0x8090, 0.5f, -176.0f }, { 3, 0xFF28, 0x2890, 0.75f, -224.0f }, - { 0, 0, 0, 0.0f, 0.0f } + { 0, 0, 0, 0.0f, 0.0f }, }; unk800E2980 D_800E2A30[5] = { @@ -100,7 +69,7 @@ unk800E2980 D_800E2A30[5] = { { 1, 0xFFFF, 0xC090, 0.75f, -128.0f }, { 2, 0xFF28, 0x0080, 0.6f, -176.0f }, { 1, 0xFFC0, 0xFF90, 0.75f, -224.0f }, - { 0, 0, 0, 0.0f, 0.0f } + { 0, 0, 0, 0.0f, 0.0f }, }; s32 D_800E2A80 = 0; @@ -128,19 +97,6 @@ s16 D_800E2AAC[80] = { 0, -1, -1, 0, 0, 0, -1, -1 }; -/* Size: 0x1C Bytes */ -typedef struct unk800E2B4C { - s32 unk0; - s16 unk4; - s16 unk6; - f32 unk8; - f32 unkC; - f32 unk10; - f32 unk14; - s16 unk18; - s16 unk1A; -} unk800E2B4C; - unk800E2B4C D_800E2B4C[8] = { { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, @@ -149,22 +105,9 @@ unk800E2B4C D_800E2B4C[8] = { { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, - { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 } + { 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0 }, }; -/* Size: 0x18 Bytes */ -typedef struct unk800E2C2C { - s32 unk0; - s16 unk4; - s16 unk6; - s32 unk8; - s32 unkC; - s16 unk10; - s16 unk12; - s16 unk14; - s16 unk16; -} unk800E2C2C; - unk800E2C2C D_800E2C2C[2] = { { 0, 0x400, 0x400, 0x000AFFC4, 0, 0x80FF, 0xFF80, 0x80FF, 0x8000 }, { 0, 0x600, 0x600, 0x0020FF40, 0, 0xFFFF, 0xFF00, 0x80FF, 0xFF00 } @@ -182,7 +125,7 @@ s32 D_800E2C7C = 0; s32 D_800E2C80 = 0; s32 D_800E2C84 = 0; s32 D_800E2C88 = 0; -s32 D_800E2C8C = 0; +Sprite *D_800E2C8C = 0; s32 D_800E2C90 = 0; s32 D_800E2C94 = 0; @@ -259,17 +202,17 @@ GLOBAL_ASM("asm/non_matchings/unknown_09F8F0/func_800AD030.s") GLOBAL_ASM("asm/non_matchings/unknown_09F8F0/func_800AD144.s") void func_800AD220(void) { - if (D_800E2C2C[0].unkC != 0) { + if (D_800E2C2C[0].unkC != NULL) { free_texture(D_800E2C2C[0].unkC); D_800E2C88 = 0; } - if (D_800E2C2C[1].unkC != 0) { + if (D_800E2C2C[1].unkC != NULL) { free_texture(D_800E2C2C[1].unkC); D_800E2C88 = 0; } - if (D_800E2C8C != 0) { + if (D_800E2C8C != NULL) { free_sprite(D_800E2C8C); D_800E2C8C = 0; } diff --git a/src/unknown_0ABDF0.h b/src/unknown_0ABDF0.h new file mode 100644 index 00000000..4e7b6bac --- /dev/null +++ b/src/unknown_0ABDF0.h @@ -0,0 +1,72 @@ +#ifndef _THREAD30_H_ +#define _THREAD30_H_ + +#include "types.h" +#include "textures_sprites.h" + +/* Size: 0x2C Bytes */ +typedef struct unk800E2850 { + s32 unk0; + s32 unk4; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1C; + s32 unk20; + s16 unk24; + s16 unk26; + s16 unk28; + s16 unk2A; +} unk800E2850; + +/* Size: 0x10 Bytes */ +typedef struct unk800E2980 { + s32 unk0; + u16 unk4; + u16 unk6; + f32 unk8; + f32 unkC; +} unk800E2980; + +/* Size: 0x1C Bytes */ +typedef struct unk800E2B4C { + s32 unk0; + s16 unk4; + s16 unk6; + f32 unk8; + f32 unkC; + f32 unk10; + f32 unk14; + s16 unk18; + s16 unk1A; +} unk800E2B4C; + +/* Size: 0x18 Bytes */ +typedef struct unk800E2C2C { + s32 unk0; + s16 unk4; + s16 unk6; + s32 unk8; + TextureHeader *unkC; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; +} unk800E2C2C; + +typedef struct { + s16 unk0; + s16 unk2; +} unk80127BF8; + +extern u32 osTvType; + +void func_800AB308(s16 arg0, s16 arg1); +void func_800AC880(s32 arg0); +void func_800ACF60(s32 arg0); +void func_800AD220(void); +void func_800AD2C4(s32 arg0, s32 arg1, f32 arg2); + +#endif From c141eb1d8c0628a93f889d9dd2ddc3c90c390506 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 08:30:39 -0400 Subject: [PATCH 04/10] Link headers, and update object types for it --- src/unknown_0348C0.c | 3 ++- src/unknown_06B2B0.c | 1 + src/unknown_0ABDF0.c | 4 ++-- src/unknown_0ABDF0.h | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/unknown_0348C0.c b/src/unknown_0348C0.c index 4e215dff..c60ca9d0 100644 --- a/src/unknown_0348C0.c +++ b/src/unknown_0348C0.c @@ -10,6 +10,7 @@ #include "video.h" #include "camera.h" #include "menu.h" // For cheats +#include "unknown_0ABDF0.h" /************ .data ************/ @@ -1763,7 +1764,7 @@ void func_8004092C(s32 arg0, s32 arg1) { } void func_8004094C(Object *arg0, s16 *arg1, s32 arg2) { - func_800ACF60(); + func_800ACF60(arg0); arg0->scale = arg1[4]; arg0->scale /= 40.0f; } diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 76fea608..b3a29691 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -18,6 +18,7 @@ #include "printf.h" #include "thread0_epc.h" #include "thread30.h" +#include "unknown_0ABDF0.h" /************ .rodata ************/ diff --git a/src/unknown_0ABDF0.c b/src/unknown_0ABDF0.c index dd5170fc..76fe4df7 100644 --- a/src/unknown_0ABDF0.c +++ b/src/unknown_0ABDF0.c @@ -155,7 +155,7 @@ s32 D_80127C24; s32 D_80127C28; s32 D_80127C2C; s32 D_80127C30[4]; -s32 D_80127C40[16]; +Object *D_80127C40[16]; /******************************/ @@ -190,7 +190,7 @@ void func_800AC880(s32 arg0) { GLOBAL_ASM("asm/non_matchings/unknown_09F8F0/func_800AC8A8.s") GLOBAL_ASM("asm/non_matchings/unknown_09F8F0/func_800ACA20.s") -void func_800ACF60(s32 arg0) { +void func_800ACF60(Object *arg0) { if (D_800E2A88 < 0x10) { D_80127C40[D_800E2A88] = arg0; D_800E2A88++; diff --git a/src/unknown_0ABDF0.h b/src/unknown_0ABDF0.h index 4e7b6bac..1b8cc70f 100644 --- a/src/unknown_0ABDF0.h +++ b/src/unknown_0ABDF0.h @@ -65,7 +65,7 @@ extern u32 osTvType; void func_800AB308(s16 arg0, s16 arg1); void func_800AC880(s32 arg0); -void func_800ACF60(s32 arg0); +void func_800ACF60(Object *arg0); void func_800AD220(void); void func_800AD2C4(s32 arg0, s32 arg1, f32 arg2); From 9275eb1264dbc7fd4a18e65956e93046c7d5699e Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 09:40:25 -0400 Subject: [PATCH 05/10] Fill out unknown_00BC20.h --- src/camera.c | 1 + src/camera.h | 4 - src/game_text.c | 1 + src/game_text.h | 1 - src/menu.c | 3 +- src/menu.h | 3 - src/thread0_epc.c | 1 + src/thread0_epc.h | 3 - src/unknown_00BC20.c | 143 +++++++++--------------------------- src/unknown_00BC20.h | 171 ++++++++++++++++++++++++++++++++++++++++++- src/unknown_0348C0.c | 1 + src/unknown_043920.c | 5 +- src/unknown_043920.h | 2 + 13 files changed, 214 insertions(+), 125 deletions(-) diff --git a/src/camera.c b/src/camera.c index b0a89a50..9c3ada2f 100644 --- a/src/camera.c +++ b/src/camera.c @@ -3,6 +3,7 @@ #include "camera.h" #include "audio.h" +#include "unknown_00BC20.h" extern u32 osTvType; diff --git a/src/camera.h b/src/camera.h index 67133aef..6cbd0fdb 100644 --- a/src/camera.h +++ b/src/camera.h @@ -108,13 +108,9 @@ extern s32 D_A4000000; extern s32 SP_IMEM; //TODO: Remove from here once header files for below are created with these signatures. - s8* get_misc_asset(s32 arg0); //unknown_00BC20 void func_8006F870(Matrix, Matrix); //unknown_070110 s16 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); //unknown_0255E0 void load_level_2(s32 arg0, s32 arg1, s32 arg2, s32 arg3); //unknown_06B2B0 - void func_8006C164(void); //unknown_00BC20 - void func_8000E194(void); //unknown_00BC20 - void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); //unknown_00BC20 void func_800705F8(s32, f32, f32, f32); //From unknown_070110 void func_8006ECFC(s32 arg0); //From unknown_06B2B0 diff --git a/src/game_text.c b/src/game_text.c index 4e84629e..a2bddf15 100644 --- a/src/game_text.c +++ b/src/game_text.c @@ -3,6 +3,7 @@ #include "game_text.h" #include "menu.h" +#include "unknown_00BC20.h" /************ .data ************/ diff --git a/src/game_text.h b/src/game_text.h index 929f781d..408f37ab 100644 --- a/src/game_text.h +++ b/src/game_text.h @@ -22,7 +22,6 @@ typedef struct unk8012A798 { extern u32 osTvType; void func_8005A3B0(void); //unknown_043920.c -s32 func_8000C8B4(s32 arg0); //unknown_00BC20.c void func_800C29F0(void); void func_800C2AB4(void); diff --git a/src/menu.c b/src/menu.c index f4590bc2..af4b3a8a 100644 --- a/src/menu.c +++ b/src/menu.c @@ -20,6 +20,7 @@ #include "printf.h" #include "textures_sprites.h" #include "thread30.h" +#include "unknown_00BC20.h" /** * @file Contains all the code used for every menu in the game. @@ -5481,7 +5482,7 @@ void func_8009ABD8(s8 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5) { arg0++; } - if ((phi_v1 == 0) && (get_misc_asset(0x19) == arg0)) { + if ((phi_v1 == 0) && (get_misc_asset(0x19) == (s32 *)arg0)) { D_8012684C = 1; } else { D_8012684C = 0; diff --git a/src/menu.h b/src/menu.h index 4698d877..4095eea2 100644 --- a/src/menu.h +++ b/src/menu.h @@ -646,13 +646,10 @@ extern s16 D_800E1E2C[10]; extern s16 D_800E1E40[10]; Settings *get_settings(void); //src/unknown_06B2B0.c -s8* get_misc_asset(s32 arg0); //unknown_00BC20 void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 arg2, s32 arg3, u8 red, u8 green, u8 blue, u8 alpha); // Non Matching src/unknown_078050.c void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId); //src/unknown_06B2B0.c void func_80078D00(Gfx**, void *element, s32, s32, f32, f32, u32, s32); //Non Matching src/unknown_078050.c -void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); //unknown_00BC20 -void gParticlePtrList_addObject(Object *object); //src/unknown_00BC20.c s32 get_random_number_from_range(s32, s32); // Non Matching src/unknown_070110.c void func_8007FF88(void); diff --git a/src/thread0_epc.c b/src/thread0_epc.c index 77a75df1..ba6f818d 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -7,6 +7,7 @@ #include "menu.h" #include "controller_pak.h" #include "printf.h" +#include "unknown_00BC20.h" /************ .rodata ************/ diff --git a/src/thread0_epc.h b/src/thread0_epc.h index 2e288174..7ffa3b72 100644 --- a/src/thread0_epc.h +++ b/src/thread0_epc.h @@ -69,8 +69,6 @@ typedef struct unk800D2470 { /* 0x118 */ s32 unk118; } unk800D2470; -s16 *func_80024594(s32 *arg0, s32 *arg1); //unknown_00BC20.c - void func_800B6E50(void); void func_800B6EE0(void); void func_800B6F04(void); @@ -82,7 +80,6 @@ void func_800B76B8(s32 arg0, s32 arg1); s32 func_800B76DC(void); void func_800B77D4(s32 arg0); - void func_800B6F50(void); // Non Matching void thread0(s32 arg0); // Non Matching void func_800B7460(s32 *epc, s32 size, s32 mask); // Non Matching diff --git a/src/unknown_00BC20.c b/src/unknown_00BC20.c index a757f60b..68627c78 100644 --- a/src/unknown_00BC20.c +++ b/src/unknown_00BC20.c @@ -7,10 +7,10 @@ #include "types.h" #include "macros.h" #include "structs.h" -#include "f3ddkr.h" #include "asset_sections.h" #include "asset_loading.h" #include "thread0_epc.h" +#include "controller_pak.h" /************ .data ************/ @@ -208,13 +208,6 @@ s32 gAssetsLvlObjTranslationTableLength; s32 D_8011AEC0; Object **gParticlePtrList; s32 gParticleCount; - -/* Size: 0x3C bytes */ -typedef struct unknown8011AECC { - u8 unk00[0x3A]; - s8 unk3A; - s8 unk3B; -} unknown8011AECC; unknown8011AECC *D_8011AECC; // Array of structs, unknown number of members s32 D_8011AED0; s32 D_8011AED4; @@ -240,21 +233,6 @@ s32 D_8011AF2C; s32 D_8011AF30[12]; s32 D_8011AF60[2]; s32 D_8011AF68[32]; - -/* Size: 0x40 bytes */ -typedef struct unk800179D0 { - s32 unk0; - u32 *unk04; - u32 *unk08; - f32 unk0C[12]; - u32 unk3C; -} unk800179D0; - -/* Unknown Size */ -typedef struct unk800179D0_2 { - s32 unk04; -} unk800179D0_2; - s32 D_8011AFE8; s16 D_8011AFEC; s16 D_8011AFEE; @@ -279,43 +257,18 @@ extern s16 D_8011D5AC; /******************************/ -typedef struct unk8001D6E4_arg1_40 { - u8 pad0[0x71]; -/* 0x71 */ u8 unk71; -} unk8001D6E4_arg1_40; - -typedef struct unk8001D6E4_arg1 { -/* 0x00 */ s16 unk0; -/* 0x02 */ s16 unk2; -/* 0x04 */ s16 unk4; - u8 pad6[0x3A]; -/* 0x40 */ unk8001D6E4_arg1_40 *unk40; -} unk8001D6E4_arg1; - -void calc_dynamic_lighting_for_object_1(unk8001D6E4_arg1 *, ObjectModel *, s16, unk8001D6E4_arg1 *, f32, f32); -void calc_dynamic_lighting_for_object_2(unk8001D6E4_arg1 *, ObjectModel *, s16, f32); - -void func_8000C460(void); -void gParticlePtrList_addObject(Object *); -void gParticlePtrList_flush(void); -void func_8001D258(f32, f32, s32, s32, s32); - -extern void func_800245B4(s16); - - GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000B020.s") #if 1 GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000B290.s") #else - extern s32 D_800DC754; extern Object *D_800DC75C; extern Object *D_800DC764; s32 *get_misc_asset(s32 arg0); -void func_8000B290(){ +void func_8000B290() { if(D_800DC754){ free_from_memory_pool(); @@ -356,38 +309,36 @@ u32 *func_8000BF44(s32 arg0) { return D_8011B020[arg0]; } -void decrypt_magic_codes(u8 *arg0, s32 length); - void func_8000BF8C(void) { s32 i; func_8001D258(0.67f, 0.33f, 0, -0x2000, 0); - D_8011AE68 = (s32*)new_sub_memory_pool(0x15800, 0x200); + D_8011AE68 = (s32 *)new_sub_memory_pool(0x15800, 0x200); gParticlePtrList = (Object **)allocate_from_main_pool_safe(0x320, COLOR_TAG_BLUE); - D_8011AE6C = (s32*)allocate_from_main_pool_safe(0x50, COLOR_TAG_BLUE); - D_8011AE74 = (s32*)allocate_from_main_pool_safe(0x200, COLOR_TAG_BLUE); - D_8011AECC = (unknown8011AECC*)allocate_from_main_pool_safe(0xE10, COLOR_TAG_BLUE); - D_8011AEDC = (s32*)allocate_from_main_pool_safe(0x50, COLOR_TAG_BLUE); - gObjectStructArrayPtr = (s32*)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); - D_8011AEEC = (s32*)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); - D_8011AEE8 = (s32*)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); - D_8011AF04 = (s32*)allocate_from_main_pool_safe(0x200, COLOR_TAG_BLUE); - D_8011ADCC = (s32*)allocate_from_main_pool_safe(8, COLOR_TAG_BLUE); - D_8011AFF4 = (s32*)allocate_from_main_pool_safe(0x400, COLOR_TAG_BLUE); - gAssetsLvlObjTranslationTable = (s32*)load_asset_section_from_rom(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE); + D_8011AE6C = (s32 *)allocate_from_main_pool_safe(0x50, COLOR_TAG_BLUE); + D_8011AE74 = (s32 *)allocate_from_main_pool_safe(0x200, COLOR_TAG_BLUE); + D_8011AECC = (unknown8011AECC *)allocate_from_main_pool_safe(0xE10, COLOR_TAG_BLUE); + D_8011AEDC = (u32 *)allocate_from_main_pool_safe(0x50, COLOR_TAG_BLUE); + gObjectStructArrayPtr = (Object *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); + D_8011AEEC = (s32 *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); + D_8011AEE8 = (s32 *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); + D_8011AF04 = (u32 *)allocate_from_main_pool_safe(0x200, COLOR_TAG_BLUE); + D_8011ADCC = (s8 *)allocate_from_main_pool_safe(8, COLOR_TAG_BLUE); + D_8011AFF4 = (unk800179D0 *)allocate_from_main_pool_safe(0x400, COLOR_TAG_BLUE); + gAssetsLvlObjTranslationTable = (s16 *)load_asset_section_from_rom(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE); gAssetsLvlObjTranslationTableLength = (get_size_of_asset_section(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE) >> 1) - 1; while (gAssetsLvlObjTranslationTable[gAssetsLvlObjTranslationTableLength] == 0) { gAssetsLvlObjTranslationTableLength--; } - D_8011AD58 = (s32*)allocate_from_main_pool_safe(0x800, COLOR_TAG_BLUE); + D_8011AD58 = (s32 *)allocate_from_main_pool_safe(0x800, COLOR_TAG_BLUE); gAssetsObjectHeadersTable = load_asset_section_from_rom(ASSET_OBJECT_HEADERS_TABLE); gAssetsObjectHeadersTableLength = 0; while (-1 != gAssetsObjectHeadersTable[gAssetsObjectHeadersTableLength]) { gAssetsObjectHeadersTableLength++; } gAssetsObjectHeadersTableLength--; - D_8011AE48 = (s32*)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOR_TAG_WHITE); - D_8011AE4C = (s32*)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOR_TAG_WHITE); + D_8011AE48 = (s32 *)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOR_TAG_WHITE); + D_8011AE4C = (u8 *)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOR_TAG_WHITE); for (i = 0; i < gAssetsObjectHeadersTableLength; i++) { (*D_8011AE4C)[i] = 0; @@ -401,7 +352,7 @@ void func_8000BF8C(void) { } decrypt_magic_codes(&gAssetsMiscSection[gAssetsMiscTable[65]], (gAssetsMiscTable[66] - gAssetsMiscTable[65]) * 4); - gObjPtrList = (Object**)allocate_from_main_pool_safe(0x800, COLOR_TAG_BLUE); + gObjPtrList = (Object **)allocate_from_main_pool_safe(0x800, COLOR_TAG_BLUE); D_8011ADC4 = 0; gTimeTrialEnabled = 0; D_8011AEF5 = 0; @@ -664,7 +615,7 @@ u8 is_time_trial_enabled() { return gTimeTrialEnabled; } -u8 func_8000E4D8(void){ +u8 func_8000E4D8(void) { return D_8011AEF5; } @@ -698,7 +649,7 @@ s32 func_8000E9C0(void) { return D_8011AE64; } -void func_8000E9D0(Object *arg0){ +void func_8000E9D0(Object *arg0) { arg0->unk6 |= 0x8000; func_800245B4(arg0->unk2C | 0xC000); gObjPtrList[objCount++] = arg0; @@ -715,30 +666,12 @@ GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000FAC4.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000FBCC.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000FC6C.s") -/* Unknown Size */ -typedef struct unk8000FD20_2 { - u8 unk00[0x13]; - u8 unk13; -} unk8000FD20_2; - -/* Unknown Size */ -typedef struct unk8000FD20 { - u8 unk00[0x4C]; - unk8000FD20_2 *unk4C; -} unk8000FD20; - s32 func_8000FD20(unk8000FD20 *arg0, unk8000FD20_2 *arg1) { arg0->unk4C = arg1; arg1->unk13 = 0xFF; return 0x28; } -/* Unknown Size. This might just be unk8000FD20. */ -typedef struct unk8000FD34 { - u8 unk00[0x5C]; - s32 unk5C; -} unk8000FD34; - s32 func_8000FD34(unk8000FD34 *arg0, s32 arg1) { arg0->unk5C = arg1; func_80016BC4(); @@ -754,11 +687,11 @@ void gParticlePtrList_addObject(Object *object) { gParticleCount++; } -s32 func_80010018(void){ +s32 func_80010018(void) { return gAssetsLvlObjTranslationTableLength; } -s32 func_80010028(s32 arg0){ +s32 func_80010028(s32 arg0) { return (gAssetsLvlObjTranslationTable[arg0] < gAssetsObjectHeadersTableLength); } @@ -767,7 +700,7 @@ GLOBAL_ASM("asm/non_matchings/unknown_00BC20/gParticlePtrList_flush.s") #else //bad regalloc; swap s2 = s3 /*removes objects in particleList from gObjPtrList and frees*/ -void gParticlePtrList_flush(void){ +void gParticlePtrList_flush(void) { s32 j, i, search_indx, tmp; Object *searchObj; @@ -827,7 +760,7 @@ void func_80011560(void) { } GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80011570.s") -void func_80011960(Object*, s32, u32, Object_64*, u32, u32, u32, u32, f32); + #if 1 GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80011960.s") #else @@ -843,7 +776,7 @@ void func_80011960(Object *arg0, s32 arg2, u32 arg3, Object_64 *arg4 GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80011AD0.s") #else extern f32 D_800E5550; -void func_80011AD0(Object *this){ +void func_80011AD0(Object *this) { f32 tmp_f0; u32 offset; switch(this->unk48){ @@ -896,7 +829,7 @@ void func_80012C30(void) { D_8011ADA4 = 0; } -void func_80012C3C(Gfx** dlist){ +void func_80012C3C(Gfx** dlist) { s32 i; Gfx *tmp; for(i = 0; iunk48 == 1) { Object_64 *object_64 = arg0->unk64; @@ -991,10 +920,7 @@ void func_80012F30(Object *arg0) { GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80012F94.s") - -void func_80013548(Object *arg0); - -void render_object(Object *this){ +void render_object(Object *this) { func_80012F94(this); if(this->unk6 & 0x8000){ func_800B3740(this, &D_8011AE8C, &D_8011AE90, &D_8011AE94, 32768); @@ -1024,7 +950,7 @@ GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80013A0C.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80013DCC.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80014090.s") -void func_800142B8(void){ +void func_800142B8(void) { s32 i = D_8011AE60; s32 j; Object *currObj; @@ -1086,7 +1012,7 @@ s16 func_80017E88(void) { GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80017E98.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_800185E4.s") -Object * func_80018C6C(void){ +Object *func_80018C6C(void) { s32 i; Object *current_obj; for(i=D_8011AE60; i < objCount; i++){ @@ -1132,7 +1058,6 @@ s32 func_8001B288(void) { } } - s32 func_8001B2E0() { return D_8011AD34; } @@ -1156,8 +1081,8 @@ s32 func_8001B650(void) { GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8001B668.s") -void func_8001B738(s32 arg0) { - func_80059B7C(arg0, func_800599A8(), D_800DC728, D_800DC72C, D_800DC724); +s32 func_8001B738(s32 arg0) { + return func_80059B7C(arg0, func_800599A8(), D_800DC728, D_800DC72C, D_800DC724); } u8 func_8001B780() { @@ -1339,7 +1264,7 @@ void func_8001E344(s32 arg0) { } } -void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3){ +void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3) { s32 i; Object *current_obj; *arg1 = -32000.0f; diff --git a/src/unknown_00BC20.h b/src/unknown_00BC20.h index 8c450d30..a0b04f1c 100644 --- a/src/unknown_00BC20.h +++ b/src/unknown_00BC20.h @@ -2,17 +2,71 @@ #define _UNKNOWN_00BC20_H_ #include "types.h" +#include "structs.h" +#include "f3ddkr.h" /* Size: 0x8 bytes */ typedef struct unknown800DC6F0 { union { s8 unk00; s32 dummy_force_alignment; // Not sure of a better way to do this. - }; + } unk00_a; u16 unk04; u16 unk06; } unknown800DC6F0; +/* Size: 0x3C bytes */ +typedef struct unknown8011AECC { + u8 unk00[0x3A]; + s8 unk3A; + s8 unk3B; +} unknown8011AECC; + +/* Size: 0x40 bytes */ +typedef struct unk800179D0 { + s32 unk0; + u32 *unk04; + u32 *unk08; + f32 unk0C[12]; + u32 unk3C; +} unk800179D0; + +/* Unknown Size */ +typedef struct unk800179D0_2 { + s32 unk04; +} unk800179D0_2; + +typedef struct unk8001D6E4_arg1_40 { + u8 pad0[0x71]; +/* 0x71 */ u8 unk71; +} unk8001D6E4_arg1_40; + +typedef struct unk8001D6E4_arg1 { +/* 0x00 */ s16 unk0; +/* 0x02 */ s16 unk2; +/* 0x04 */ s16 unk4; + u8 pad6[0x3A]; +/* 0x40 */ unk8001D6E4_arg1_40 *unk40; +} unk8001D6E4_arg1; + +/* Unknown Size */ +typedef struct unk8000FD20_2 { + u8 unk00[0x13]; + u8 unk13; +} unk8000FD20_2; + +/* Unknown Size */ +typedef struct unk8000FD20 { + u8 unk00[0x4C]; + unk8000FD20_2 *unk4C; +} unk8000FD20; + +/* Unknown Size. This might just be unk8000FD20. */ +typedef struct unk8000FD34 { + u8 unk00[0x5C]; + s32 unk5C; +} unk8000FD34; + extern unknown800DC6F0 D_800DC6F0; extern unknown800DC6F0 D_800DC6F8; @@ -62,4 +116,117 @@ extern s32 D_800DC85C; extern u8 D_800DC860; extern u16 D_800DC864; -#endif \ No newline at end of file +void free_tt_ghost_data(void); //unknown_043920.c +f32 func_800707F8(s16); //? +void func_8006C164(void); //unknown_06B2B0 + +u32 *func_8000BF44(s32 arg0); +void func_8000BF8C(void); +void func_8000C460(void); +void func_8000C604(void); +s32 func_8000C8B4(s32 arg0); +void func_8000CBC0(void); +s32 func_8000CC20(u32 *arg0); +u32 func_8000E0B0(void); +void func_8000E128(void); +s8 func_8000E138(); +s8 func_8000E148(); +s8 func_8000E158(void); +s8 func_8000E184(); +void func_8000E194(void); +void func_8000E1B8(void); +s8 func_8000E1CC(void); +s8 func_8000E1DC(); +void func_8000E1EC(Object *object, s32 arg1); +void set_time_trial_enabled(s32 arg0); +u8 is_time_trial_enabled(); +u8 func_8000E4D8(void); +Object *get_object(s32 index); +Object **func_8000E988(s32 *arg0, s32 *cnt); +s32 getObjectCount(void); +s32 func_8000E9C0(void); +void func_8000E9D0(Object *arg0); +void gParticlePtrList_addObject(Object *object); +s32 func_80010018(void); +s32 func_80010028(s32 arg0); +void func_80011390(void); +s32 func_8001139C(); +s32 func_800113AC(); +s32 func_800113BC(); +void func_80011560(void); +void func_80012C30(void); +void func_80012C3C(Gfx** dlist); +void func_80012C98(Gfx **dlist); +void func_80012CE8(Gfx **dlist); +void func_80012D5C(u32 *arg0, u32 *arg1, u32 *arg2, Object *object); +void func_80012F30(Object *arg0); +void render_object(Object *this); +void func_80013548(Object *arg0); +void func_800142B8(void); +u32 func_800179D0(void); +void func_80017E74(s32 arg0); +s16 func_80017E88(void); +Object *func_80018C6C(void); +void func_8001A8D4(s32 arg0); +s16 func_8001AE44(); +s32 func_8001AE54(); +s32 func_8001B288(void); +s32 func_8001B2E0(); +s32 func_8001B3AC(s32 arg0); +s32 func_8001B640(); +s32 func_8001B650(void); +s32 func_8001B738(s32 arg0); +u8 func_8001B780(); +void func_8001B790(void); +unknown8011AECC *func_8001BA00(s32 arg0); +unknown8011AECC *func_8001BA1C(s32 arg0, s32 arg1); +s32 func_8001BA64(); +Object **get_object_struct_array(s32 *cnt); +s32 *func_8001BA90(s32 *arg0); +s32 *func_8001BAAC(s32 *arg0); +Object *get_object_struct(s32 indx); +void func_8001BC40(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +u32 func_8001BD94(s32 arg0); +void func_8001D1AC(void); +void func_8001D1BC(s32 arg0); +u32 func_8001D1E4(s32 *arg0); +u32 func_8001D214(s32 arg0); +void func_8001D23C(s32 arg0, s32 arg1, s32 arg2); +void calc_dyn_light_and_env_map_for_object(ObjectModel *model, Object *object, s32 arg2, f32 arg3); +s32 *get_misc_asset(s32 index); +s32 func_8001E2EC(s32 arg0); +void func_8001E344(s32 arg0); +void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3); +s16 func_8001E440(); +void func_8001E450(s32 arg0); +void func_8001E45C(s32 arg0); +s32 func_8001E4B4(void); +s8 func_8001F3B8(void); +void func_8001F3C8(s32 arg0); +void func_8001F450(void); +s32 func_800210CC(s8 arg0); +s8 func_800214C4(void); +f32 lerp(f32 *arg0, u32 arg1, f32 arg2); +void func_800228DC(s32 arg0, s32 arg1, s32 arg2); +void func_800228EC(s32 arg0); +s8 func_8002341C(void); +s32 func_80023568(void); +s8 func_800235C0(void); +void func_800238BC(Object *arg0); +void run_object_loop_func(Object *obj, s32 arg1); +void func_8002458C(s32 arg0); +s16 *func_80024594(s32 *arg0, s32 *arg1); +void func_800245B4(s16 arg0); + +//Non Matching +void calc_dynamic_lighting_for_object_1(unk8001D6E4_arg1 *, ObjectModel *, s16, unk8001D6E4_arg1 *, f32, f32); +void calc_dynamic_lighting_for_object_2(unk8001D6E4_arg1 *, ObjectModel *, s16, f32); +void gParticlePtrList_flush(void); +void func_8001D258(f32, f32, s32, s32, s32); +void decrypt_magic_codes(u8 *arg0, s32 length); +void func_80011960(Object*, s32, u32, Object_64*, u32, u32, u32, u32, f32); +void func_80011AD0(Object *this); +void func_80012E28(Object *this); +void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); + +#endif diff --git a/src/unknown_0348C0.c b/src/unknown_0348C0.c index c60ca9d0..5b05df05 100644 --- a/src/unknown_0348C0.c +++ b/src/unknown_0348C0.c @@ -11,6 +11,7 @@ #include "camera.h" #include "menu.h" // For cheats #include "unknown_0ABDF0.h" +#include "unknown_043920.h" /************ .data ************/ diff --git a/src/unknown_043920.c b/src/unknown_043920.c index 5a4ed03c..de08b30d 100644 --- a/src/unknown_043920.c +++ b/src/unknown_043920.c @@ -10,6 +10,7 @@ #include "macros.h" #include "structs.h" #include "asset_sections.h" +//#include "controller_pak.h" /* Size: 8 bytes */ typedef struct GhostHeader { @@ -994,8 +995,8 @@ void free_tt_ghost_data(void) { gGhostData[2] = NULL; } -void func_80059B7C(s32 arg0, s32 arg1, s16 arg2, s16 arg3, s16 arg4) { - func_80075000(arg0, (s16)arg1, arg2, arg3, arg4, D_8011D5A0[D_8011D59C], gGhostData[D_8011D59C]); +s32 func_80059B7C(s32 arg0, s32 arg1, s16 arg2, s16 arg3, s16 arg4) { + return func_80075000(arg0, (s16)arg1, arg2, arg3, arg4, D_8011D5A0[D_8011D59C], gGhostData[D_8011D59C]); } GLOBAL_ASM("asm/non_matchings/unknown_043920/func_80059BF0.s") diff --git a/src/unknown_043920.h b/src/unknown_043920.h index cf90d10e..5ef25cf3 100644 --- a/src/unknown_043920.h +++ b/src/unknown_043920.h @@ -45,4 +45,6 @@ extern s32 D_800DCDD0; extern s16 D_800DCDD4[4]; +s32 func_80059B7C(s32 arg0, s32 arg1, s16 arg2, s16 arg3, s16 arg4); + #endif From e07ba849593dd1cbeb4f184e6193951dc4b07862 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 11:31:22 -0400 Subject: [PATCH 06/10] unknown_05CEF9.h --- src/unknown_0348C0.c | 2 +- src/unknown_043920.c | 2 +- src/unknown_05CEF0.c | 26 ++++++-------------------- src/unknown_05CEF0.h | 24 ++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/unknown_0348C0.c b/src/unknown_0348C0.c index 5b05df05..cb2d500b 100644 --- a/src/unknown_0348C0.c +++ b/src/unknown_0348C0.c @@ -126,7 +126,7 @@ extern u32 osTvType; Settings *get_settings(); Object_64 *func_800BE654(s16, f32, f32); void func_80000FDC(s32, s32, f32); -void func_80009558(s32, f32, f32, f32, s32, s32*); +void func_80009558(u16, f32 x, f32 y, f32 z, s32, s32 *); //unknown_008C40 void func_80009968(f32, f32, f32, u8, u8, s32); s32 func_8001F460(Object*, s32, Object*); f32 func_800707C4(s16); diff --git a/src/unknown_043920.c b/src/unknown_043920.c index de08b30d..07d2d5c1 100644 --- a/src/unknown_043920.c +++ b/src/unknown_043920.c @@ -742,7 +742,7 @@ void func_800570A4(Object *arg0, s32 arg1, s32 arg2) { #ifdef NON_MATCHING -void func_80009558(u16, f32, f32, f32, s32, s32 *); +void func_80009558(u16, f32 x, f32 y, f32 z, s32, s32 *); //unknown_008C40 typedef struct Object_64_800570B8 { u8 pad0[3]; diff --git a/src/unknown_05CEF0.c b/src/unknown_05CEF0.c index 33742c02..fe2ab85e 100644 --- a/src/unknown_05CEF0.c +++ b/src/unknown_05CEF0.c @@ -6,6 +6,9 @@ #include "structs.h" #include "types.h" #include "macros.h" +#include "audio.h" +#include "unknown_00BC20.h" +#include "unknown_005740.h" /************ .data ************/ @@ -13,7 +16,7 @@ s16 D_800DCDE0[16] = { 0x022B, 0x00A3, 0x00A4, 0x00B3, 0x00B4, 0x00F0, 0x00F1, 0x00F6, 0x00F7, 0x0225, 0x0226, 0x002E, - 0x002F, 0x0030, 0x0000, 0x0000 + 0x002F, 0x0030, 0x0000, 0x0000, }; /*******************************/ @@ -27,17 +30,6 @@ s32 D_8011D5CC; /******************************/ -void func_80009558(u16, f32, f32, f32, s32, s32); -s32 get_random_number_from_range(s32, s32); - -/* Unknown size */ -typedef struct unk8005C2F0 { - u8 pad0[0xC]; - f32 unkC; - u8 pad10[0x108]; - s32 unk118; -} unk8005C2F0; - void func_8005C2F0(Object *object, unk8005C2F0 *arg1) { object->unk4C->unk14 = 5; object->unk4C->unk11 = 0; @@ -57,13 +49,13 @@ void func_8005CA78(s32 arg0) { D_8011D5C8 = arg0; } -void func_8005CA84(f32 arg0, f32 arg1, f32 arg2, s32 arg3) { +void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3) { s8 phi_v1 = get_random_number_from_range(0, 1); if (arg3 == 0) { phi_v1 = 0; } arg3 += phi_v1; - func_80009558(D_8011D5C8[arg3], arg0, arg1, arg2, 4, 0); + func_80009558(D_8011D5C8[arg3], x, y, z, 4, 0); } void func_8005CB04(s32 arg0) { @@ -77,12 +69,6 @@ void func_8005CB04(s32 arg0) { GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005CB68.s") -/* Unknown size */ -typedef struct unk8005D048 { - u8 pad0[0x1F7]; - u8 unk1F7; -} unk8005D048; - void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2) { Object *sp1C = get_object_struct(0); arg1->unk1F7 = 0xFF; diff --git a/src/unknown_05CEF0.h b/src/unknown_05CEF0.h index 5588c183..e8b8895b 100644 --- a/src/unknown_05CEF0.h +++ b/src/unknown_05CEF0.h @@ -2,7 +2,31 @@ #define _UNKNOWN_05CEF0_H_ #include "types.h" +#include "structs.h" + +/* Unknown size */ +typedef struct unk8005C2F0 { + u8 pad0[0xC]; + f32 unkC; + u8 pad10[0x108]; + s32 unk118; +} unk8005C2F0; + +/* Unknown size */ +typedef struct unk8005D048 { + u8 pad0[0x1F7]; + u8 unk1F7; +} unk8005D048; extern s16 D_800DCDE0[16]; +void func_80009558(u16, f32 x, f32 y, f32 z, s32, s32 *); //unknown_008C40 +s32 get_random_number_from_range(s32, s32); //? + +void func_8005C2F0(Object *object, unk8005C2F0 *arg1); +void func_8005CA78(s32 arg0); +void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3); +void func_8005CB04(s32 arg0); +void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2); + #endif \ No newline at end of file From de96a2a473eba8858de8aceb11daa0cf7cfc83c8 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 11:58:23 -0400 Subject: [PATCH 07/10] unknown_06B2B0.h step 1 --- src/unknown_06B2B0.c | 60 ++++++-------------------------------------- src/unknown_06B2B0.h | 34 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 52 deletions(-) diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index b3a29691..73eca5f4 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -5,12 +5,14 @@ #include #include +#include #include "memory.h" #include "types.h" #include "macros.h" #include "structs.h" #include "f3ddkr.h" #include "asset_sections.h" +#include "asset_loading.h" #include "menu.h" #include "video.h" #include "lib/src/mips1/sc/sched.h" @@ -19,6 +21,10 @@ #include "thread0_epc.h" #include "thread30.h" #include "unknown_0ABDF0.h" +#include "audio.h" +#include "unknown_00BC20.h" +#include "camera.h" +#include "controller_pak.h" /************ .rodata ************/ @@ -121,15 +127,6 @@ s32 gNumberOfLevelHeaders; s32 gNumberOfWorlds; s8 *D_80121178; - -/* Size: 6 bytes */ -typedef struct unk8012117C { - s8 unk0; - s8 unk1; - s8 unk2; - s8 unk3; - s16 unk4; -} unk8012117C; unk8012117C *D_8012117C; s32 D_80121180[16]; @@ -186,47 +183,6 @@ extern s32 gVideoCurrFramebuffer; extern s32 gVideoLastFramebuffer; extern s32 gVideoLastDepthBuffer; -void func_8006F43C(void); - -void func_800014BC(f32 arg0); -s8 *get_misc_asset(s32 arg0); -s32 func_8006A624(s8 arg0); -void func_8006F870(Matrix, s32*); -s16 get_level_segment_index_from_position(f32, f32, f32); -void func_8006A50C(void); -void func_800665E8(s32 arg0); -void load_level_2(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -void func_8006C164(void); -void func_8000E194(void); -f32 sqrtf(f32); -void osSetTime(u64); -void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); -void func_800705F8(s32, f32, f32, f32); -void func_8006ECFC(s32 arg0); -void load_level_3(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void func_800813C0(); -void func_80004A60(s32, s32); -void render(void); -void func_8006C3E0(void); -Settings *get_settings(void); -s32 is_in_tracks_mode(void); -s32 *load_asset_section_from_rom(s32); -void load_asset_to_address(u32, s32*, s32, s32); -void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -void func_8006C2E4(void); -s16 func_8006C2F0(void); -void func_8006DB20(s32 arg0); -void func_80072708(void); -void update_camera_fov(f32); -void func_8006BFC8(s8 *arg0); -void func_80068158(Gfx**, s32, s32, s32, s32); -s32 get_trophy_race_world_id(void); -void func_8006DCF8(s32 arg0); -void func_8006EC48(s32 arg0); -void calc_and_alloc_heap_for_settings(void); -void reset_character_id_slots(void); -void func_8006EFDC(void); - #ifdef NON_MATCHING void func_8006A6B0(void) { @@ -1499,8 +1455,8 @@ void func_8006DB14(s32 arg0) { D_80123518 = arg0; } -void func_8006DB20(s32 arg0) { - D_8012351C = arg0; +void func_8006DB20(s32 vehicleId) { + D_8012351C = vehicleId; } s32 func_8006DB2C(void) { diff --git a/src/unknown_06B2B0.h b/src/unknown_06B2B0.h index d746e2bc..7280c5d1 100644 --- a/src/unknown_06B2B0.h +++ b/src/unknown_06B2B0.h @@ -2,6 +2,7 @@ #define _UNKNOWN_06B2B0_H_ #include "types.h" +#include "structs.h" typedef struct unknown800DD408 { u8 unk0; @@ -12,6 +13,15 @@ typedef struct unknown800DD408 { u16 unk6; } unknown800DD408; +/* Size: 6 bytes */ +typedef struct unk8012117C { + s8 unk0; + s8 unk1; + s8 unk2; + s8 unk3; + s16 unk4; +} unk8012117C; + enum NumberOfPlayers { ZERO_PLAYERS = -1, // A.I. Only ONE_PLAYER = 0, @@ -86,4 +96,28 @@ extern s32 D_800DD41C[2]; extern s32 D_800DD424[2]; +void func_8006F870(Matrix, Matrix); //unknown_070110 +void func_800705F8(s32, f32, f32, f32); //From unknown_070110 +f32 sqrtf(f32); //IDO? + +void func_8006F43C(void); +void load_level_2(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId); +void func_8006C164(void); +void load_level_3(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); +void render(void); +void func_8006C3E0(void); +Settings *get_settings(void); +void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_8006C2E4(void); +s16 func_8006C2F0(void); +void func_8006DB20(s32 vehicleId); +void func_8006BFC8(s8 *arg0); +void func_8006EC48(s32 arg0); +void calc_and_alloc_heap_for_settings(void); + +//Non Matching +void func_8006ECFC(s32 arg0); +void func_8006DCF8(s32 arg0); +void func_8006EFDC(void); + #endif From 66a8cc8391fec9e73dd458f0732d47fca2e8afb2 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 13:14:28 -0400 Subject: [PATCH 08/10] unknown_06B2B0.h step 2 --- lib/src/os/__osSpSetStatus.c | 1 + src/camera.c | 1 + src/camera.h | 2 -- src/main.c | 1 + src/main.h | 2 -- src/menu.c | 19 ++++++----- src/unknown_003260.h | 4 ++- src/unknown_00BC20.c | 1 + src/unknown_032760.h | 4 ++- src/unknown_06B2B0.c | 25 +++++--------- src/unknown_06B2B0.h | 66 ++++++++++++++++++++++++++---------- src/unknown_078050.c | 3 +- src/unknown_078050.h | 3 ++ src/video.h | 2 ++ 14 files changed, 83 insertions(+), 51 deletions(-) diff --git a/lib/src/os/__osSpSetStatus.c b/lib/src/os/__osSpSetStatus.c index ad25861f..2f255a15 100644 --- a/lib/src/os/__osSpSetStatus.c +++ b/lib/src/os/__osSpSetStatus.c @@ -1,6 +1,7 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800CD240 */ +#include "__osSpSetStatus.h" #include "types.h" #include "macros.h" #include "hardware.h" diff --git a/src/camera.c b/src/camera.c index 9c3ada2f..7605331a 100644 --- a/src/camera.c +++ b/src/camera.c @@ -4,6 +4,7 @@ #include "camera.h" #include "audio.h" #include "unknown_00BC20.h" +#include "unknown_06B2B0.h" extern u32 osTvType; diff --git a/src/camera.h b/src/camera.h index 6cbd0fdb..1d13c845 100644 --- a/src/camera.h +++ b/src/camera.h @@ -110,9 +110,7 @@ extern s32 SP_IMEM; //TODO: Remove from here once header files for below are created with these signatures. void func_8006F870(Matrix, Matrix); //unknown_070110 s16 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); //unknown_0255E0 - void load_level_2(s32 arg0, s32 arg1, s32 arg2, s32 arg3); //unknown_06B2B0 void func_800705F8(s32, f32, f32, f32); //From unknown_070110 - void func_8006ECFC(s32 arg0); //From unknown_06B2B0 f32 sqrtf(f32); //IDO? diff --git a/src/main.c b/src/main.c index d65a8de2..6d4ce606 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include "main.h" #include "thread0_epc.h" +#include "unknown_06B2B0.h" /************ .rodata ************/ diff --git a/src/main.h b/src/main.h index 340ad3f4..ebd6a653 100644 --- a/src/main.h +++ b/src/main.h @@ -5,8 +5,6 @@ #include "macros.h" #include "libultra_internal.h" -void thread3_main(s32 arg0); //unknown_06B2B0.c - void main(void); void func_80065D98(s32 arg0); //Non Matching diff --git a/src/menu.c b/src/menu.c index af4b3a8a..93652362 100644 --- a/src/menu.c +++ b/src/menu.c @@ -21,6 +21,7 @@ #include "textures_sprites.h" #include "thread30.h" #include "unknown_00BC20.h" +#include "unknown_06B2B0.h" /** * @file Contains all the code used for every menu in the game. @@ -2151,17 +2152,17 @@ GLOBAL_ASM("asm/non_matchings/menu/draw_menu_elements.s") void func_800828B8(void) { s32 i; - s32 j; - s32 num; + s32 numWorlds; + s32 numLevels; Settings *settings; settings = get_settings(); - get_number_of_levels_and_worlds(&num, &j); + get_number_of_levels_and_worlds(&numLevels, &numWorlds); - for(i = 0; i < num; i++) { + for(i = 0; i < numLevels; i++) { settings->courseFlagsPtr[i] = 0; - for(j = 0; j < 3; j++) { - settings->courseFlagsPtr[i] |= D_80126530[j]->courseFlagsPtr[i]; + for(numWorlds = 0; numWorlds < 3; numWorlds++) { + settings->courseFlagsPtr[i] |= D_80126530[numWorlds]->courseFlagsPtr[i]; } } @@ -3936,10 +3937,10 @@ void func_8008CACC(void) { void menu_file_select_init(void) { s32 i; - s32 sp38; - s32 sp34; + s32 numLevels; + s32 numWorlds; - get_number_of_levels_and_worlds(&sp38, &sp34); + get_number_of_levels_and_worlds(&numLevels, &numWorlds); func_8009C674(D_800E0398); func_8009C8A4(D_800E03A4); func_8007FFEC(6); diff --git a/src/unknown_003260.h b/src/unknown_003260.h index b8d346e3..4d7bf3d4 100644 --- a/src/unknown_003260.h +++ b/src/unknown_003260.h @@ -82,4 +82,6 @@ extern unk800DC6BC* gAlSndPlayer; extern s32 sfxVolumeSlider; extern s32 D_800DC6C4; -#endif \ No newline at end of file +void func_800049D8(void); + +#endif diff --git a/src/unknown_00BC20.c b/src/unknown_00BC20.c index 68627c78..ac85796f 100644 --- a/src/unknown_00BC20.c +++ b/src/unknown_00BC20.c @@ -11,6 +11,7 @@ #include "asset_loading.h" #include "thread0_epc.h" #include "controller_pak.h" +#include "unknown_06B2B0.h" /************ .data ************/ diff --git a/src/unknown_032760.h b/src/unknown_032760.h index bedf8787..6bdcf848 100644 --- a/src/unknown_032760.h +++ b/src/unknown_032760.h @@ -81,4 +81,6 @@ typedef struct unk800DC964 { extern unk800DC950 **D_800DC950; -#endif \ No newline at end of file +void func_80031B60(void); + +#endif diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 73eca5f4..649dd1eb 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -25,6 +25,13 @@ #include "unknown_00BC20.h" #include "camera.h" #include "controller_pak.h" +#include "unknown_078050.h" +#include "unknown_003260.h" +#include "unknown_032760.h" +#include "textures_sprites.h" +#include "lib/src/os/__osSpSetStatus.h" +#include "printf.h" +#include "fade_transition.h" /************ .rodata ************/ @@ -95,9 +102,7 @@ s16 D_800DD3F4[8] = { }; s32 D_800DD404 = 12; -unknown800DD408 D_800DD408 = { - 0, 255, 255, 255, 30, 0xFFFF -}; +FadeTransition D_800DD408 = { 0, 255, 255, 255, 30, 0xFFFF }; // Unused? char *D_800DD410[3] = { @@ -179,12 +184,7 @@ s32 D_80123560[8]; /******************************/ -extern s32 gVideoCurrFramebuffer; -extern s32 gVideoLastFramebuffer; -extern s32 gVideoLastDepthBuffer; - #ifdef NON_MATCHING - void func_8006A6B0(void) { s32 i, count, checksumCount; s32 temp; @@ -869,8 +869,6 @@ void func_8006C3E0(void) { osSetTime(0); } -void func_8006CCF0(s32 arg0); - void render(void) { s32 phi_v0; s32 phi_v0_2; @@ -1032,13 +1030,6 @@ void func_8006CC14(void) { } #ifdef NON_MATCHING - -void func_8006EC48(s32 arg0); -void func_8006F398(void); -void func_8006F42C(void); -void func_8006D8F0(s32 arg0); -void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); - // Almost matching except for a couple minor issues. void func_8006CCF0(s32 arg0) { s32 i, buttonHeldInputs, sp40, sp3C, buttonPressedInputs, phi_v1_2; diff --git a/src/unknown_06B2B0.h b/src/unknown_06B2B0.h index 7280c5d1..5f27348e 100644 --- a/src/unknown_06B2B0.h +++ b/src/unknown_06B2B0.h @@ -3,15 +3,7 @@ #include "types.h" #include "structs.h" - -typedef struct unknown800DD408 { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u16 unk4; - u16 unk6; -} unknown800DD408; +#include "fade_transition.h" /* Size: 6 bytes */ typedef struct unk8012117C { @@ -85,7 +77,7 @@ extern s32 D_800DD3AC; extern s8 D_800DD3F0; extern s16 D_800DD3F4[8]; -extern unknown800DD408 D_800DD408; +extern FadeTransition D_800DD408; extern s32 D_800DD40C; // Unused? @@ -96,28 +88,66 @@ extern s32 D_800DD41C[2]; extern s32 D_800DD424[2]; +extern s32 gVideoCurrFramebuffer; +extern s32 gVideoLastFramebuffer; +extern s32 gVideoLastDepthBuffer; + void func_8006F870(Matrix, Matrix); //unknown_070110 void func_800705F8(s32, f32, f32, f32); //From unknown_070110 f32 sqrtf(f32); //IDO? -void func_8006F43C(void); -void load_level_2(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId); +s16 func_8006ABB4(s32 arg0); +s32 func_8006B018(s8 arg0); +s32 func_8006B054(s8 arg0); +s32 func_8006B0AC(s32 arg0); +s32 func_8006B0F8(s32 arg0); +s8 func_8006B14C(s32 arg0); +s8 func_8006B190(s32 arg0); +s32 func_8006B1D4(s32 arg0); +void get_number_of_levels_and_worlds(s32 *outLevelCount, s32 *outWorldCount); +s32 func_8006B240(void); +void func_8006BD10(f32 arg0); +s32 func_8006BD88(void); +u8 get_current_level_race_type(void); +LevelHeader *get_current_level_header(void); +u8 func_8006BDC0(void); +u8 *func_8006BDDC(s32 arg0); +void func_8006BEFC(void); +void func_8006BFC8(s8 *arg0); void func_8006C164(void); -void load_level_3(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); -void render(void); -void func_8006C3E0(void); -Settings *get_settings(void); +s32 func_8006C18C(void); +s8 func_8006C19C(void); void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); +void func_8006C2E4(void); +s16 func_8006C2F0(void); +s32 func_8006C300(void); +void thread3_main(s32 arg0); +void func_8006C3E0(void); +void render(void); +void func_8006CAE4(s32 arg0, s32 arg1, s32 arg2); +void load_level_2(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId); +void func_8006CC14(void); +void func_8006D8A4(void); + +void func_8006F43C(void); +void load_level_3(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); +Settings *get_settings(void); void func_8006C2E4(void); s16 func_8006C2F0(void); void func_8006DB20(s32 vehicleId); -void func_8006BFC8(s8 *arg0); void func_8006EC48(s32 arg0); void calc_and_alloc_heap_for_settings(void); +void func_8006F398(void); +void func_8006F42C(void); +void func_8006D8F0(s32 arg0); +void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); //Non Matching -void func_8006ECFC(s32 arg0); +void func_8006ECFC(s32 numberOfPlayers); void func_8006DCF8(s32 arg0); void func_8006EFDC(void); +void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); +void func_8006CCF0(s32 arg0); #endif diff --git a/src/unknown_078050.c b/src/unknown_078050.c index b9f7b6f0..21b51b62 100644 --- a/src/unknown_078050.c +++ b/src/unknown_078050.c @@ -194,7 +194,8 @@ void func_80077AAC(void *bufPtr, s32 arg1, s32 arg2) { while (func_800D18D0() & 0x100) {} } -void func_80077B34(u8 arg0, u8 arg1, u8 arg2){ +//Probable red, green, blue +void func_80077B34(u8 arg0, u8 arg1, u8 arg2) { D_800DE4B0 = arg0; D_800DE4B4 = arg1; D_800DE4B8 = arg2; diff --git a/src/unknown_078050.h b/src/unknown_078050.h index 5f9a1a6d..f6c946dd 100644 --- a/src/unknown_078050.h +++ b/src/unknown_078050.h @@ -21,4 +21,7 @@ extern s32 D_800DE4D4; extern s32 D_800DE4D8; extern s32 D_800DE4DC; +void func_80077B34(u8 arg0, u8 arg1, u8 arg2); +s32 func_80077A54(void); + #endif diff --git a/src/video.h b/src/video.h index d247d215..8d84e039 100644 --- a/src/video.h +++ b/src/video.h @@ -48,4 +48,6 @@ extern VideoModeResolution gVideoModeResolutions[8]; extern s32 D_800DE7BC; +s32 func_8007A98C(s32 arg0); + #endif From d79d13ec75a614b60263cd1a3acb085905768637 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 14:32:42 -0400 Subject: [PATCH 09/10] Identified some FadeTransitions --- src/unknown_06B2B0.c | 33 +++++++++++---------------------- src/unknown_06B2B0.h | 13 +++++-------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 649dd1eb..68dc0e90 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -78,45 +78,34 @@ char gBuildString[40] = "Version 7.7 29/09/97 15.00 L.Schuneman"; s8 D_800DD374 = 0; s32 D_800DD378 = 1; s32 D_800DD37C = 0; -s32 D_800DD380 = 0; // Currently unknown, might be a different type. +s32 D_800DD380 = 0; // Currently unknown, might be a different type. s32 D_800DD384 = 0; -s32 D_800DD388 = 0; // Currently unknown, might be a different type. +s32 D_800DD388 = 0; // Currently unknown, might be a different type. s8 D_800DD38C = 0; s8 D_800DD390 = 0; s16 D_800DD394 = 0; s8 D_800DD398 = 0; s8 D_800DD39C = 0; s8 D_800DD3A0 = 0; -s32 D_800DD3A4 = 0; // Currently unknown, might be a different type. -s32 D_800DD3A8 = 0; // Currently unknown, might be a different type. -s32 D_800DD3AC = 0; // Currently unknown, might be a different type. +s32 D_800DD3A4 = 0; // Currently unknown, might be a different type. +s32 D_800DD3A8 = 0; // Currently unknown, might be a different type. +s32 D_800DD3AC = 0; // Currently unknown, might be a different type. s32 gNumF3dCmdsPerPlayer[4] = { 4500, 7000, 11000, 11000 }; s32 gNumHudVertsPerPlayer[4] = { 300, 600, 850, 900 }; s32 gNumHudMatPerPlayer[4] = { 300, 400, 550, 600 }; s32 gNumHudTrisPerPlayer[4] = { 20, 30, 40, 50 }; - s8 D_800DD3F0 = 0; -s16 D_800DD3F4[8] = { - -32768, 0, 20, 0, - 255, -1, 20, -1 -}; +FadeTransition D_800DD3F4 = { 128, 0, 0, 0, 20, 0 }; +// Unused? +FadeTransition D_800DD3FC = { 0, 255, 255, 255, 20, -1 }; s32 D_800DD404 = 12; - -FadeTransition D_800DD408 = { 0, 255, 255, 255, 30, 0xFFFF }; - +FadeTransition D_800DD408 = { 0, 255, 255, 255, 30, -1 }; // Unused? char *D_800DD410[3] = { D_800E713C, D_800E7140, D_800E7144 }; - -// Not sure if this is an array or a struct. -s32 D_800DD41C[2] = { - 0, 0x001EFFFF -}; - -s32 D_800DD424[2] = { - 0, 0x0104FFFF -}; +FadeTransition D_800DD41C = { 0, 0, 0, 0, 30, -1 }; +FadeTransition D_800DD424 = { 0, 0, 0, 0, 260, -1 }; /*******************************/ diff --git a/src/unknown_06B2B0.h b/src/unknown_06B2B0.h index 5f27348e..3326546b 100644 --- a/src/unknown_06B2B0.h +++ b/src/unknown_06B2B0.h @@ -76,18 +76,15 @@ extern s32 D_800DD3AC; extern s8 D_800DD3F0; -extern s16 D_800DD3F4[8]; +extern FadeTransition D_800DD3F4; extern FadeTransition D_800DD408; -extern s32 D_800DD40C; +// Unused? +extern FadeTransition D_800DD3FC; // Unused? extern char *D_800DD410[3]; - -// Not sure if this is an array or a struct. -extern s32 D_800DD41C[2]; - -extern s32 D_800DD424[2]; - +extern FadeTransition D_800DD41C; +extern FadeTransition D_800DD424; extern s32 gVideoCurrFramebuffer; extern s32 gVideoLastFramebuffer; extern s32 gVideoLastDepthBuffer; From 10e02c882555e7a3fc7a13fad05b0c682b073446 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 14 Sep 2021 15:07:55 -0400 Subject: [PATCH 10/10] Finish unknown_06B2B0.h --- lib/src/os/__osSpSetStatus.h | 8 ++++++ src/menu.c | 6 ++-- src/menu.h | 7 ++--- src/unknown_00BC20.h | 1 - src/unknown_06B2B0.c | 11 ++++---- src/unknown_06B2B0.h | 53 ++++++++++++++++++++++++++++++------ 6 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 lib/src/os/__osSpSetStatus.h diff --git a/lib/src/os/__osSpSetStatus.h b/lib/src/os/__osSpSetStatus.h new file mode 100644 index 00000000..3e6d7774 --- /dev/null +++ b/lib/src/os/__osSpSetStatus.h @@ -0,0 +1,8 @@ +#ifndef _OSSPSETSTATUS_H_ +#define _OSSPSETSTATUS_H_ + +#include "types.h" + +void __osSpSetStatus(u32 status); + +#endif diff --git a/src/menu.c b/src/menu.c index 93652362..50c98465 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1458,12 +1458,12 @@ s16 D_800E1DC8[16] = { 1, -1, -1, -1, 1, 1, 1, -1 }; -s16 D_800E1DE8[4] = { - 0, 0, 0x78, -1 -}; +FadeTransition D_800E1DE8 = FADE_TRANSITION(0, FADE_COLOR_BLACK, 120, -1); char gRareCopyrightString[24] = "(C) COPYRIGHT RARE 1997"; +//Probably a FadeTransition, but that won't be certain +//FadeTransition D_800E1E08 = FADE_TRANSITION(0, FADE_COLOR_BLACK, 52, -1); s16 D_800E1E08[4] = { 0, 0, 0x34, -1 }; diff --git a/src/menu.h b/src/menu.h index 4095eea2..0d1e6ad4 100644 --- a/src/menu.h +++ b/src/menu.h @@ -4,6 +4,7 @@ #include "types.h" #include "structs.h" #include "PR/gbi.h" +#include "fade_transition.h" #define TT_MENU_ROOT 0 #define TT_MENU_CONT_PAK_ERROR_1 1 @@ -625,10 +626,10 @@ extern s32 D_800E1DC4; extern s16 D_800E1DC8[16]; -extern s16 D_800E1DE8[4]; - extern char gRareCopyrightString[24]; +//Probably a FadeTransition +//extern FadeTransition D_800E1E08; extern s16 D_800E1E08[4]; extern s32 *D_800E1E10; @@ -645,10 +646,8 @@ extern s16 D_800E1E2C[10]; extern s16 D_800E1E40[10]; -Settings *get_settings(void); //src/unknown_06B2B0.c void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 arg2, s32 arg3, u8 red, u8 green, u8 blue, u8 alpha); // Non Matching src/unknown_078050.c -void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId); //src/unknown_06B2B0.c void func_80078D00(Gfx**, void *element, s32, s32, f32, f32, u32, s32); //Non Matching src/unknown_078050.c s32 get_random_number_from_range(s32, s32); // Non Matching src/unknown_070110.c diff --git a/src/unknown_00BC20.h b/src/unknown_00BC20.h index a0b04f1c..7a9cc638 100644 --- a/src/unknown_00BC20.h +++ b/src/unknown_00BC20.h @@ -118,7 +118,6 @@ extern u16 D_800DC864; void free_tt_ghost_data(void); //unknown_043920.c f32 func_800707F8(s16); //? -void func_8006C164(void); //unknown_06B2B0 u32 *func_8000BF44(s32 arg0); void func_8000BF8C(void); diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 68dc0e90..b7200de1 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -95,18 +95,17 @@ s32 gNumHudVertsPerPlayer[4] = { 300, 600, 850, 900 }; s32 gNumHudMatPerPlayer[4] = { 300, 400, 550, 600 }; s32 gNumHudTrisPerPlayer[4] = { 20, 30, 40, 50 }; s8 D_800DD3F0 = 0; -FadeTransition D_800DD3F4 = { 128, 0, 0, 0, 20, 0 }; +FadeTransition D_800DD3F4 = FADE_TRANSITION(128, FADE_COLOR_BLACK, 20, 0); // Unused? -FadeTransition D_800DD3FC = { 0, 255, 255, 255, 20, -1 }; +FadeTransition D_800DD3FC = FADE_TRANSITION(0, FADE_COLOR_WHITE, 20, -1); s32 D_800DD404 = 12; -FadeTransition D_800DD408 = { 0, 255, 255, 255, 30, -1 }; +FadeTransition D_800DD408 = FADE_TRANSITION(0, FADE_COLOR_WHITE, 30, -1); // Unused? char *D_800DD410[3] = { D_800E713C, D_800E7140, D_800E7144 }; -FadeTransition D_800DD41C = { 0, 0, 0, 0, 30, -1 }; -FadeTransition D_800DD424 = { 0, 0, 0, 0, 260, -1 }; - +FadeTransition D_800DD41C = FADE_TRANSITION(0, FADE_COLOR_BLACK, 30, -1); +FadeTransition D_800DD424 = FADE_TRANSITION(0, FADE_COLOR_BLACK, 260, -1); /*******************************/ extern s32 gShowControllerPakMenu; diff --git a/src/unknown_06B2B0.h b/src/unknown_06B2B0.h index 3326546b..78c8aa30 100644 --- a/src/unknown_06B2B0.h +++ b/src/unknown_06B2B0.h @@ -126,19 +126,54 @@ void func_8006CAE4(s32 arg0, s32 arg1, s32 arg2); void load_level_2(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId); void func_8006CC14(void); void func_8006D8A4(void); - -void func_8006F43C(void); -void load_level_3(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); -Settings *get_settings(void); -void func_8006C2E4(void); -s16 func_8006C2F0(void); +void func_8006D8E0(s32 arg0); +void func_8006D8F0(s32 arg0); +void func_8006D968(s8 *arg0); +s32 func_8006DA0C(void); +void func_8006DA1C(s32 arg0); +void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); +void func_8006DB14(s32 arg0); void func_8006DB20(s32 vehicleId); -void func_8006EC48(s32 arg0); +s32 func_8006DB2C(void); +void load_level_3(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); +void func_8006DBE4(void); +void func_8006DC58(s32 arg0); +void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId); void calc_and_alloc_heap_for_settings(void); +void func_8006E5BC(void); +void func_8006E770(Settings *settings, s32 arg1); +void func_8006E994(Settings *settings); +void func_8006EA58(void); +Settings *get_settings(void); +s8 is_game_paused(void); +s8 func_8006EAB0(void); +s32 func_8006EAC0(void); +s32 func_8006EB14(void); +void func_8006EB24(void); +void func_8006EB40(void); +void func_8006EB5C(void); +void func_8006EB78(s32 arg0); +void func_8006EBA8(void); +void func_8006EBC4(void); +void func_8006EBE0(void); +void func_8006EBFC(void); +void func_8006EC18(s32 arg0); +void func_8006EC48(s32 arg0); +void func_8006ECAC(s32 arg0); +void func_8006ECC4(void); +void func_8006ECE0(void); +s32 func_8006EFB8(void); +void func_8006F140(s32 arg0); +void func_8006F20C(void); +void func_8006F254(void); +void func_8006F29C(void); +void func_8006F338(s32 arg0); +void func_8006F388(u8 arg0); void func_8006F398(void); void func_8006F42C(void); -void func_8006D8F0(s32 arg0); -void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); +void func_8006F43C(void); +s32 func_8006F4C8(void); +s32 func_8006F4EC(void); //Non Matching void func_8006ECFC(s32 numberOfPlayers);