diff --git a/include/PR/gu.h b/include/PR/gu.h index 6527777d..6c291e1f 100644 --- a/include/PR/gu.h +++ b/include/PR/gu.h @@ -21,6 +21,8 @@ void guMtxIdent(Mtx *m); void guMtxIdentF(float mf[4][4]); void guMtxL2F(float mf[4][4], Mtx *m); void guNormalize(float *, float *, float *); +void guMtxXFMF(float mf[4][4], float x, float y, float z, + float *ox, float *oy, float *oz); /* Used only in Fast3DEX2 */ void guLookAtReflect (Mtx *m, LookAt *l, float xEye, float yEye, float zEye, diff --git a/src/camera.c b/src/camera.c index 13c3a819..5b134f6e 100644 --- a/src/camera.c +++ b/src/camera.c @@ -174,7 +174,6 @@ unk80120AC0 *func_80069D20(void); void func_800014BC(f32 arg0); s8* get_misc_asset(s32 arg0); s32 func_8006A624(s8 arg0); -void guMtxXFMF(Matrix, f32, f32, f32, f32*, f32*, f32*); void func_8006F870(Matrix, Matrix); s16 get_level_segment_index_from_position(f32, f32, f32); void func_8006A50C(void); @@ -888,12 +887,12 @@ Matrix *func_80069DBC(void) { return &D_80120F60; } -f32 func_80069DC8(f32 arg0, f32 arg1, f32 arg2) { - f32 sp34; - f32 sp30; - f32 returnVal; - guMtxXFMF(D_80120F60, arg0, arg1, arg2, &sp34, &sp30, &returnVal); - return returnVal; +f32 func_80069DC8(f32 x, f32 y, f32 z) { + f32 ox, oy, oz; + + guMtxXFMF(D_80120F60, x, y, z, &ox, &oy, &oz); + + return oz; } void func_80069E14(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 213ec0a6..679be6f4 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -7,6 +7,7 @@ #include "macros.h" #include "structs.h" #include "f3ddkr.h" +#include "PR/gu.h" /* Size: 0x44 bytes */ typedef struct unk80120AC0 { @@ -225,11 +226,11 @@ typedef struct unk8011D388 { } unk8011D388; unk8011D388 D_8011D388[4]; -typedef struct{ - s32 unk00; - s32 unk04; - s32 unk08; -}unk8011D468; +typedef struct { + /* 0x00 */ s32 x; + /* 0x04 */ s32 y; + /* 0x08 */ s32 z; +} unk8011D468; unk8011D468 D_8011D468; s32 D_8011D474; @@ -255,7 +256,6 @@ s32 D_8011D4BC; /******************************/ -extern void guMtxXFMF(Matrix, f32, f32, f32, f32*, f32*, f32*); f32 func_800BB2F4(s32, f32, f32, f32*); void func_8007B3D0(Gfx**); Object *get_object(s32); @@ -1177,8 +1177,8 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030A74.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030DE0.s") -void func_80031018(void){ - Matrix sp_50; +void func_80031018(void) { + Matrix mf; struct { s16 unk00; //sp_38 @@ -1191,9 +1191,9 @@ void func_80031018(void){ f32 unk14; //sp4C; } sp_38; - f32 sp_34 = 0.0f; - f32 sp_30 = 0.0f; - f32 sp_2C = -65536.0f; + f32 x = 0.0f; + f32 y = 0.0f; + f32 z = -65536.0f; sp_38.unk04 = D_8011B0B0->z_rotation; sp_38.unk02 = D_8011B0B0->x_rotation; @@ -1203,9 +1203,11 @@ void func_80031018(void){ sp_38.unk14 = 0.0f; sp_38.unk08 = 1.0f; - func_8006FC30(&sp_50, &sp_38); - guMtxXFMF(&sp_50, sp_34, sp_30, sp_2C, &sp_34, &sp_30, &sp_2C); - D_8011D468.unk00 = sp_34; - D_8011D468.unk04 = sp_30; - D_8011D468.unk08 = sp_2C; + func_8006FC30(&mf, &sp_38); + guMtxXFMF(&mf, x, y, z, &x, &y, &z); + + //Store x/y/z as integers + D_8011D468.x = (s32) x; + D_8011D468.y = (s32) y; + D_8011D468.z = (s32) z; } \ No newline at end of file diff --git a/src/unknown_043920.c b/src/unknown_043920.c index fde4fa26..80b386ee 100644 --- a/src/unknown_043920.c +++ b/src/unknown_043920.c @@ -641,20 +641,18 @@ typedef struct unk800535C4 { /* Unknown Size */ typedef struct unk800535C4_2 { - u8 unk0[0x9C]; - s32 unk9C; - s32 unkA0; - s32 unkA4; - u8 unkA8[0xF8]; - s16 unk1A0; - s16 unk1A2; - s16 unk1A4; + /* 0x00 */ u8 unk0[0x9C]; + /* 0x9C */ f32 oz; + /* 0xA0 */ f32 ox; + /* 0xA4 */ f32 oy; + /* 0xA8 */ u8 unkA8[0xF8]; + /* 0x1A0 */ s16 unk1A0; + /* 0x1A2 */ s16 unk1A2; + /* 0x1A4 */ s16 unk1A4; } unk800535C4_2; -void guMtxXFMF(Matrix*, f32, f32, f32, s32*, s32*, s32*); - void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1) { - Matrix sp30; + Matrix mf; D_8011D510.unk0 = -arg1->unk1A0; D_8011D510.unk2 = -arg0->unk2; @@ -663,9 +661,9 @@ void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1) { D_8011D510.unk10 = 0; D_8011D510.unk14 = 0; D_8011D510.unk8 = 1; - func_8006FE74(&sp30, &D_8011D510); + func_8006FE74(&mf, &D_8011D510); - guMtxXFMF(&sp30, 0, -1, 0, &arg1->unkA0, &arg1->unkA4, &arg1->unk9C); + guMtxXFMF(&mf, 0.0f, -1.0f, 0.0f, &arg1->ox, &arg1->oy, &arg1->oz); } void func_80053664(Object_64 *arg0) { @@ -805,20 +803,20 @@ GLOBAL_ASM("asm/non_matchings/unknown_043920/func_80057220.s") /* Unknown size */ typedef struct Object_64_800575EC { - u8 pad0[0x38]; - f32 unk38; - f32 unk3C; - f32 unk40; - f32 unk44; - f32 unk48; - f32 unk4C; - f32 unk50; - f32 unk54; - f32 unk58; + /* 0x00 */ u8 pad0[0x38]; + /* 0x38 */ f32 ox1; + /* 0x3C */ f32 oy1; + /* 0x40 */ f32 oz1; + /* 0x44 */ f32 ox2; + /* 0x48 */ f32 oy2; + /* 0x4C */ f32 oz2; + /* 0x50 */ f32 ox3; + /* 0x54 */ f32 oy3; + /* 0x58 */ f32 oz3; } Object_64_800575EC; void func_800575EC(Object *obj, Object_64_800575EC *obj64) { - Matrix sp38; + Matrix mf; D_8011D510.unk0 = obj->y_rotation; D_8011D510.unk2 = obj->x_rotation; @@ -827,10 +825,10 @@ void func_800575EC(Object *obj, Object_64_800575EC *obj64) { D_8011D510.unk10 = 0.0f; D_8011D510.unk14 = 0.0f; D_8011D510.unk8 = 1.0f; - func_8006FC30(&sp38, &D_8011D510); - guMtxXFMF(&sp38, 0.0f, 0.0f, 1.0f, &obj64->unk38, &obj64->unk3C, &obj64->unk40); - guMtxXFMF(&sp38, 0.0f, 1.0f, 0.0f, &obj64->unk44, &obj64->unk48, &obj64->unk4C); - guMtxXFMF(&sp38, 1.0f, 0.0f, 0.0f, &obj64->unk50, &obj64->unk54, &obj64->unk58); + func_8006FC30(&mf, &D_8011D510); + guMtxXFMF(&mf, 0.0f, 0.0f, 1.0f, &obj64->ox1, &obj64->oy1, &obj64->oz1); + guMtxXFMF(&mf, 0.0f, 1.0f, 0.0f, &obj64->ox2, &obj64->oy2, &obj64->oz2); + guMtxXFMF(&mf, 1.0f, 0.0f, 0.0f, &obj64->ox3, &obj64->oy3, &obj64->oz3); } GLOBAL_ASM("asm/non_matchings/unknown_043920/func_800576E0.s")