Seperated function definitions to a header file for camera.c. This prevents multiple redefinitions that drift out of sync as things are updated

This commit is contained in:
Ryan Myers
2021-09-10 08:00:35 -04:00
parent 72fb903a12
commit 9091276422
2 changed files with 169 additions and 118 deletions
+59 -118
View File
@@ -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) {
+110
View File
@@ -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