diff --git a/src/camera.c b/src/camera.c index 567d0590..601338d9 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1,7 +1,6 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x80065EA0 */ -#include "libultra_internal.h" #include "camera.h" extern u32 osTvType; @@ -95,30 +94,6 @@ s16 gButtonMask = 0xFFFF; /************ .bss ************/ -/* Size: 0x44 bytes, might just be Object? */ -typedef struct unk80120AC0 { - s16 unk0; - s16 unk2; - s16 unk4; - u8 pad6[6]; - f32 x_position; - f32 y_position; - f32 z_position; - f32 pad18; - f32 unk1C; - f32 pad20; - f32 unk24; - f32 unk28; - f32 unk2C; - f32 unk30; - s16 unk34; - s16 pad36; - s16 unk38; - s8 pad3A; - s8 unk3B; - u8 pad3C[8]; -} unk80120AC0; - unk80120AC0 D_80120AC0[8]; s32 gNumberOfViewports; s32 D_80120CE4; @@ -151,15 +126,6 @@ OSMesgQueue *D_801210E0[6]; s32 D_801210F8; s32 D_801210FC; u8 D_80121100[16]; - -/* Size: 6 bytes */ -typedef struct unk80121110 { - u16 unk0; - s8 unk2; - s8 unk3; - s8 unk4; - s8 unk6; -} unk80121110; unk80121110 D_80121110[8]; u16 D_80121140[4]; u16 D_80121148[4]; @@ -167,27 +133,6 @@ u8 D_80121150[16]; /******************************/ -extern s32 D_A4000000; -extern s32 SP_IMEM; - -unk80120AC0 *func_80069D20(void); -void func_800014BC(f32 arg0); -s8* get_misc_asset(s32 arg0); -s32 func_8006A624(s8 arg0); -void func_8006F870(Matrix, Matrix); -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 func_80068158(Gfx **dlist, s32 arg1, s32 arg2, s32 arg3, s32 arg4); - #ifdef NON_MATCHING void func_800663DC(s32 x_pos, s32 y_pos, s32 z_pos, s32 arg3, s32 arg4, s32 arg5); extern s32 D_A4600010; @@ -276,8 +221,6 @@ s32 func_80066220(void) { return D_80120CE4; } -void func_80066CDC(Gfx **dlist, s32 arg1); - void func_80066230(Gfx **dlist, s32 arg1) { unk80120AC0 *someStruct; s16 sp2A; @@ -332,11 +275,11 @@ f32 func_80066348(f32 arg0, f32 arg1, f32 arg2) { return sqrtf((temp_f0 * temp_f0) + ((temp_f2 * temp_f2) + (temp_f14 * temp_f14))); } -void func_800663DC(s32 x_pos, s32 y_pos, s32 z_pos, s32 arg3, s32 arg4, s32 arg5) { +void func_800663DC(s32 xPos, s32 yPos, s32 zPos, s32 arg3, s32 arg4, s32 arg5) { D_80120AC0[D_80120CE4].unk4 = (s16) (arg3 * 0xB6); - D_80120AC0[D_80120CE4].x_position = (f32) x_pos; - D_80120AC0[D_80120CE4].y_position = (f32) y_pos; - D_80120AC0[D_80120CE4].z_position = (f32) z_pos; + D_80120AC0[D_80120CE4].x_position = (f32) xPos; + D_80120AC0[D_80120CE4].y_position = (f32) yPos; + D_80120AC0[D_80120CE4].z_position = (f32) zPos; D_80120AC0[D_80120CE4].unk2 = (s16) (arg4 * 0xB6); D_80120AC0[D_80120CE4].unk38 = (u16)0; D_80120AC0[D_80120CE4].unk24 = 0.0f; @@ -348,16 +291,16 @@ void func_800663DC(s32 x_pos, s32 y_pos, s32 z_pos, s32 arg3, s32 arg4, s32 arg5 D_80120AC0[D_80120CE4].unk3B = D_800DD2F8[D_80120CE4]; } -void func_80066488(s32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6) { +void func_80066488(s32 arg0, f32 xPos, f32 yPos, f32 zPos, s16 arg4, s16 arg5, s16 arg6) { arg0 += 4; D_80120AC0[arg0].unk38 = 0; - D_80120AC0[arg0].x_position = arg1; - D_80120AC0[arg0].y_position = arg2; - D_80120AC0[arg0].z_position = arg3; + D_80120AC0[arg0].x_position = xPos; + D_80120AC0[arg0].y_position = yPos; + D_80120AC0[arg0].z_position = zPos; D_80120AC0[arg0].unk0 = arg4; D_80120AC0[arg0].unk2 = arg5; D_80120AC0[arg0].unk4 = arg6; - D_80120AC0[arg0].unk34 = get_level_segment_index_from_position(arg1, arg2, arg3); + D_80120AC0[arg0].unk34 = get_level_segment_index_from_position(xPos, yPos, zPos); D_80120D14 = 1; } @@ -469,32 +412,32 @@ void func_80066610(void) { GLOBAL_ASM("asm/non_matchings/camera/func_80066610.s") #endif -void func_80066818(s32 arg0, s32 arg1) { +void func_80066818(s32 viewPortIndex, s32 arg1) { if (arg1 != 0) { - gScreenViewports[arg0].flags |= 1; + gScreenViewports[viewPortIndex].flags |= 1; } else { - gScreenViewports[arg0].flags |= 2; + gScreenViewports[viewPortIndex].flags |= 2; } - gScreenViewports[arg0].flags &= ~4; + gScreenViewports[viewPortIndex].flags &= ~4; } -void func_80066894(s32 arg0, s32 arg1) { +void func_80066894(s32 viewPortIndex, s32 arg1) { if (arg1 != 0) { - gScreenViewports[arg0].flags &= ~1; + gScreenViewports[viewPortIndex].flags &= ~1; } else { - gScreenViewports[arg0].flags |= 4; + gScreenViewports[viewPortIndex].flags |= 4; } - gScreenViewports[arg0].flags &= ~2; + gScreenViewports[viewPortIndex].flags &= ~2; } -s32 func_80066910(s32 arg0) { - return gScreenViewports[arg0].flags & 0x1; +s32 func_80066910(s32 viewPortIndex) { + return gScreenViewports[viewPortIndex].flags & 0x1; } #ifdef NON_MATCHING // Should be functionally equivalent. -void func_80066940(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { +void func_80066940(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { s32 widthAndHeight, width, height; s32 phi_a1; s32 phi_a2; @@ -516,84 +459,84 @@ void func_80066940(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { phi_a2 = arg2; } if ((phi_a1 >= width) || (phi_a3 < 0) || (arg2 >= height) || (phi_a2 < 0)) { - gScreenViewports[arg0].unk20 = 0; - gScreenViewports[arg0].unk24 = 0; - gScreenViewports[arg0].unk28 = 0; - gScreenViewports[arg0].unk2C = 0; + gScreenViewports[viewPortIndex].unk20 = 0; + gScreenViewports[viewPortIndex].unk24 = 0; + gScreenViewports[viewPortIndex].unk28 = 0; + gScreenViewports[viewPortIndex].unk2C = 0; } else { if (phi_a1 < 0) { - gScreenViewports[arg0].unk20 = 0; + gScreenViewports[viewPortIndex].unk20 = 0; } else { - gScreenViewports[arg0].unk20 = phi_a1; + gScreenViewports[viewPortIndex].unk20 = phi_a1; } if (arg2 < 0) { - gScreenViewports[arg0].unk24 = 0; + gScreenViewports[viewPortIndex].unk24 = 0; } else { - gScreenViewports[arg0].unk24 = arg2; + gScreenViewports[viewPortIndex].unk24 = arg2; } if (phi_a3 >= width) { - gScreenViewports[arg0].unk28 = width - 1; + gScreenViewports[viewPortIndex].unk28 = width - 1; } else { - gScreenViewports[arg0].unk28 = phi_a3; + gScreenViewports[viewPortIndex].unk28 = phi_a3; } if (phi_a2 >= height) { - gScreenViewports[arg0].unk2C = height - 1; + gScreenViewports[viewPortIndex].unk2C = height - 1; } else { - gScreenViewports[arg0].unk2C = phi_a2; + gScreenViewports[viewPortIndex].unk2C = phi_a2; } } - gScreenViewports[arg0].unk4 = arg2; - gScreenViewports[arg0].unk0 = phi_a1; - gScreenViewports[arg0].unk8 = phi_a3; - gScreenViewports[arg0].unkC = phi_a2; + gScreenViewports[viewPortIndex].unk4 = arg2; + gScreenViewports[viewPortIndex].unk0 = phi_a1; + gScreenViewports[viewPortIndex].unk8 = phi_a3; + gScreenViewports[viewPortIndex].unkC = phi_a2; } #else GLOBAL_ASM("asm/non_matchings/camera/func_80066940.s") #endif -void func_80066AA8(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { +void func_80066AA8(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { if (arg1 != 0x8000) { - gScreenViewports[arg0].unk10 = arg1; - gScreenViewports[arg0].flags |= 8; + gScreenViewports[viewPortIndex].unk10 = arg1; + gScreenViewports[viewPortIndex].flags |= 8; } else { - gScreenViewports[arg0].flags &= ~8; + gScreenViewports[viewPortIndex].flags &= ~8; } if (arg2 != 0x8000) { - gScreenViewports[arg0].unk10 = arg2; - gScreenViewports[arg0].flags |= 0x10; + gScreenViewports[viewPortIndex].unk10 = arg2; + gScreenViewports[viewPortIndex].flags |= 0x10; } else { - gScreenViewports[arg0].flags &= ~0x10; + gScreenViewports[viewPortIndex].flags &= ~0x10; } if (arg3 != 0x8000) { - gScreenViewports[arg0].unk18 = arg3; - gScreenViewports[arg0].flags |= 0x20; + gScreenViewports[viewPortIndex].unk18 = arg3; + gScreenViewports[viewPortIndex].flags |= 0x20; } else { - gScreenViewports[arg0].flags &= ~0x20; + gScreenViewports[viewPortIndex].flags &= ~0x20; } if (arg4 != 0x8000) { - gScreenViewports[arg0].unk1C = arg4; - gScreenViewports[arg0].flags |= 0x40; + gScreenViewports[viewPortIndex].unk1C = arg4; + gScreenViewports[viewPortIndex].flags |= 0x40; return; } - gScreenViewports[arg0].flags &= ~0x40; + gScreenViewports[viewPortIndex].flags &= ~0x40; } -s32 func_80066BA8(s32 arg0, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4) { - *arg1 = gScreenViewports[arg0].unk20; - *arg3 = gScreenViewports[arg0].unk28; - *arg2 = gScreenViewports[arg0].unk24; - *arg4 = gScreenViewports[arg0].unk2C; +s32 func_80066BA8(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4) { + *arg1 = gScreenViewports[viewPortIndex].unk20; + *arg3 = gScreenViewports[viewPortIndex].unk28; + *arg2 = gScreenViewports[viewPortIndex].unk24; + *arg4 = gScreenViewports[viewPortIndex].unk2C; if ((*arg1 | *arg3 | *arg2 | *arg4) == 0) { return 0; } return 1; } -void func_80066C2C(s32 arg0, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4) { - *arg1 = gScreenViewports[arg0].unk0; - *arg2 = gScreenViewports[arg0].unk4; - *arg3 = gScreenViewports[arg0].unk8; - *arg4 = gScreenViewports[arg0].unkC; +void func_80066C2C(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4) { + *arg1 = gScreenViewports[viewPortIndex].unk0; + *arg2 = gScreenViewports[viewPortIndex].unk4; + *arg3 = gScreenViewports[viewPortIndex].unk8; + *arg4 = gScreenViewports[viewPortIndex].unkC; } // Unused? @@ -957,8 +900,6 @@ OSMesgQueue *func_8006A100(void) { return &D_801210E0; } -void func_8006A434(void); - #ifdef NON_MATCHING // Has regalloc & stack issues. s32 func_8006A10C(void) { diff --git a/src/camera.h b/src/camera.h index 49ddb688..ad631dd6 100644 --- a/src/camera.h +++ b/src/camera.h @@ -6,6 +6,7 @@ #include "structs.h" #include "f3ddkr.h" #include "menu.h" +#include "libultra_internal.h" #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 @@ -49,6 +50,39 @@ typedef struct ScreenViewport { s32 flags; } ScreenViewport; +/* Size: 6 bytes */ +typedef struct unk80121110 { + u16 unk0; + s8 unk2; + s8 unk3; + s8 unk4; + s8 unk6; +} unk80121110; + +/* Size: 0x44 bytes, might just be Object? */ +typedef struct unk80120AC0 { + s16 unk0; + s16 unk2; + s16 unk4; + u8 pad6[6]; + f32 x_position; + f32 y_position; + f32 z_position; + f32 pad18; + f32 unk1C; + f32 pad20; + f32 unk24; + f32 unk28; + f32 unk2C; + f32 unk30; + s16 unk34; + s16 pad36; + s16 unk38; + s8 pad3A; + s8 unk3B; + u8 pad3C[8]; +} unk80120AC0; + extern ScreenViewport gScreenViewports[4]; // Not sure about the typing here @@ -69,4 +103,80 @@ extern s32 D_800DD300; extern s16 gButtonMask; +extern s32 D_A4000000; + +extern s32 SP_IMEM; + +//TODO: Remove from here once header files for below are created with these signatures. + void func_800014BC(f32 arg0); //audio.c + 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 + +f32 sqrtf(f32); //IDO? + +void func_80066060(s32 arg0, s32 arg1); +void func_80066098(s8 arg0); +void func_800660C0(void); +void func_800660D0(void); +f32 get_current_camera_fov(void); +void update_camera_fov(f32 camFieldOfView); +void func_80066194(void); +Matrix *func_80066204(void); +s32 get_viewport_count(void); +s32 func_80066220(void); +void func_80066CDC(Gfx **dlist, s32 arg1); +void func_80066230(Gfx **dlist, s32 arg1); +f32 func_80066348(f32 arg0, f32 arg1, f32 arg2); +void func_800663DC(s32 xPos, s32 yPos, s32 zPos, s32 arg3, s32 arg4, s32 arg5); +void func_80066488(s32 arg0, f32 xPos, f32 yPos, f32 zPos, s16 arg4, s16 arg5, s16 arg6); +void func_80066520(void); +s8 func_80066510(void); +s32 func_8006652C(s32 arg0); +void func_800665E8(s32 arg0); +void func_80066818(s32 viewPortIndex, s32 arg1); +void func_80066894(s32 viewPortIndex, s32 arg1); +s32 func_80066910(s32 viewPortIndex); +void func_80066940(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void func_80066AA8(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +s32 func_80066BA8(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); +void func_80066C2C(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); +void func_80066C80(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); +void func_80066CDC(Gfx **dlist, s32 arg1); +void func_80067F20(f32 arg0); +void func_80067F2C(Gfx **dlist, s32 *arg1); +void func_8006807C(Gfx **dlist, s32 *arg1); +void func_80068158(Gfx **dlist, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void func_800682AC(Gfx **dlist); +void func_80068408(Gfx **dlist, s32 *arg1); +void func_80068508(s32 arg0); +unk80120AC0 *func_80069CFC(void); +unk80120AC0 *func_80069D20(void); +unk80120AC0 *func_80069D7C(void); +Matrix *func_80069DA4(void); +Matrix *func_80069DB0(void); +Matrix *func_80069DBC(void); +f32 func_80069DC8(f32 x, f32 y, f32 z); +void func_80069E14(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4); +void func_80069F28(f32 arg0); +void func_8006A03C(f32 *mtx); +OSMesgQueue *func_8006A100(void); +void func_8006A434(void); +void func_8006A458(s8 *activePlayers); +u8 func_8006A4F8(s32 arg0); +void func_8006A50C(void); +u16 get_buttons_held_from_player(s32 arg0); +u16 get_buttons_pressed_from_player(s32 arg0); +u16 func_8006A578(s32 arg0); +s32 func_8006A59C(s32 arg0); +s32 func_8006A5E0(s32 arg0); +s32 func_8006A624(s8 arg0); +void disable_button_mask(void); + #endif