diff --git a/asm/f/op/f_op_actor.s b/asm/f/op/f_op_actor.s index eb99b79c6e6..c043ea7391b 100644 --- a/asm/f/op/f_op_actor.s +++ b/asm/f/op/f_op_actor.s @@ -306,7 +306,7 @@ lbl_80018F5C: /* 80018FA0 00015EE0 2C 1E 00 01 */ cmpwi r30, 1 /* 80018FA4 00015EE4 40 82 00 0C */ bne lbl_80018FB0 /* 80018FA8 00015EE8 38 7F 00 D8 */ addi r3, r31, 0xd8 -/* 80018FAC 00015EEC 48 00 75 29 */ bl fopDwTg_DrawQTo +/* 80018FAC 00015EEC 48 00 75 29 */ bl fopDwTg_DrawQTo__FP16create_tag_class lbl_80018FB0: /* 80018FB0 00015EF0 7F C3 F3 78 */ mr r3, r30 /* 80018FB4 00015EF4 83 E1 00 0C */ lwz r31, 0xc(r1) @@ -330,7 +330,7 @@ lbl_80018FB0: /* 80018FFC 00015F3C 38 7F 00 C4 */ addi r3, r31, 0xc4 /* 80019000 00015F40 48 00 08 61 */ bl fopAcTg_ActorQTo /* 80019004 00015F44 38 7F 00 D8 */ addi r3, r31, 0xd8 -/* 80019008 00015F48 48 00 74 CD */ bl fopDwTg_DrawQTo +/* 80019008 00015F48 48 00 74 CD */ bl fopDwTg_DrawQTo__FP16create_tag_class /* 8001900C 00015F4C 7F E3 FB 78 */ mr r3, r31 /* 80019010 00015F50 48 00 11 29 */ bl fopAcM_DeleteHeap__FP10fopAc_ac_c /* 80019014 00015F54 80 6D 88 A0 */ lwz r3, lbl_80450E20-_SDA_BASE_(r13) diff --git a/include/d/d_com/d_com_inf_game/d_com_inf_game.h b/include/d/d_com/d_com_inf_game/d_com_inf_game.h index 60704a170d1..b0c1ece7e44 100644 --- a/include/d/d_com/d_com_inf_game/d_com_inf_game.h +++ b/include/d/d_com/d_com_inf_game/d_com_inf_game.h @@ -72,6 +72,7 @@ private: #pragma pack(push, 1) class dComIfG_play_c { public: + bool& getField0x4f7d() { return field_0x4f7d; } void ct(void); void init(void); void itemInit(void); @@ -202,9 +203,11 @@ private: // NEEDS TO BE FIXED /* 0x04F46 */ u8 mItemID; /* 0x04F47 */ u8 field_0x4f47[0x13]; /* 0x04F5A */ u8 mNowVibration; - /* 0x04F5B */ u8 field_0x4f5b[0x23]; + /* 0x04F5B */ u8 field_0x4f5b[0x22]; + /* 0x04F7D */ bool field_0x4f7d; /* 0x04F7E */ u8 unk_heart; - /* 0x04F7F */ u8 field_0x4f7f[0x79]; + /* 0x04F7F */ u8 field_0x4f7f; + /* 0x04F80 */ u8 field_0x4f80[0x78]; /* 0x04FF8 */ u32 mTimerPtr; /* 0x04FFC */ int mTimerNowTimeMs; /* 0x05000 */ int mTimerLimitTimeMs; diff --git a/include/f/f_op/f_op_camera.h b/include/f/f_op/f_op_camera.h new file mode 100644 index 00000000000..8acbbd0fed8 --- /dev/null +++ b/include/f/f_op/f_op_camera.h @@ -0,0 +1,8 @@ +#ifndef F_F_OP_CAMERA_H_ +#define F_F_OP_CAMERA_H_ + +#include "f/f_op/f_op_camera_mng.h" +s32 fopCam_Draw(camera_class* param_1); +void fopCam_Execute(camera_class* pCamera); +int fopCam_IsDelete(camera_class* pCamera); +#endif \ No newline at end of file diff --git a/include/f/f_op/f_op_camera/asm/func_8001E1C8.s b/include/f/f_op/f_op_camera/asm/func_8001E1C8.s index a780c67bd28..d515da95e9b 100644 --- a/include/f/f_op/f_op_camera/asm/func_8001E1C8.s +++ b/include/f/f_op/f_op_camera/asm/func_8001E1C8.s @@ -11,7 +11,7 @@ /* 8001E1F0 0001B130 2C 1F 00 01 */ cmpwi r31, 1 /* 8001E1F4 0001B134 40 82 00 0C */ bne lbl_8001E200 /* 8001E1F8 0001B138 38 7E 02 10 */ addi r3, r30, 0x210 -/* 8001E1FC 0001B13C 48 00 22 D9 */ bl fopDwTg_DrawQTo +/* 8001E1FC 0001B13C 48 00 22 D9 */ bl fopDwTg_DrawQTo__FP16create_tag_class lbl_8001E200: /* 8001E200 0001B140 7F E3 FB 78 */ mr r3, r31 /* 8001E204 0001B144 83 E1 00 0C */ lwz r31, 0xc(r1) diff --git a/include/f/f_op/f_op_camera/asm/func_8001E21C.s b/include/f/f_op/f_op_camera/asm/func_8001E21C.s index 3a1451e748b..d72a1b8ce63 100644 --- a/include/f/f_op/f_op_camera/asm/func_8001E21C.s +++ b/include/f/f_op/f_op_camera/asm/func_8001E21C.s @@ -11,7 +11,7 @@ /* 8001E244 0001B184 2C 1F 00 01 */ cmpwi r31, 1 /* 8001E248 0001B188 40 82 00 0C */ bne lbl_8001E254 /* 8001E24C 0001B18C 38 7E 02 10 */ addi r3, r30, 0x210 -/* 8001E250 0001B190 48 00 22 85 */ bl fopDwTg_DrawQTo +/* 8001E250 0001B190 48 00 22 85 */ bl fopDwTg_DrawQTo__FP16create_tag_class lbl_8001E254: /* 8001E254 0001B194 7F E3 FB 78 */ mr r3, r31 /* 8001E258 0001B198 83 E1 00 0C */ lwz r31, 0xc(r1) diff --git a/include/f/f_op/f_op_camera_mng.h b/include/f/f_op/f_op_camera_mng.h index 1a77bccfac4..a7fe96e1671 100644 --- a/include/f/f_op/f_op_camera_mng.h +++ b/include/f/f_op/f_op_camera_mng.h @@ -2,11 +2,16 @@ #define F_F_OP_CAMERA_MNG_H_ #include "dolphin/types.h" +#include "f/f_op/f_op_draw_tag.h" +#include "f/f_pc/f_pc_leaf.h" class camera_class { public: - /* 0x00 */ u8 field_0x00[0xb0]; - /* 0xB0 */ u32 parameter; + /* 0x000 */ u8 field_0x00[0xB0]; + /* 0x0B0 */ u32 parameter; + /* 0x0B4 */ u8 field_0xB4[0x15C]; + /* 0x210 */ create_tag_class pCreateTag; + /* 0x224 */ leafdraw_method_class* pMthd; }; void fopCamM_Management(void); diff --git a/include/f/f_op/f_op_draw_tag.h b/include/f/f_op/f_op_draw_tag.h new file mode 100644 index 00000000000..21bc0ea16bc --- /dev/null +++ b/include/f/f_op/f_op_draw_tag.h @@ -0,0 +1,8 @@ +#ifndef F_F_OP_DRAW_TAG +#define F_F_OP_DRAW_TAG + +#include "SComponent/c_tag.h" + +void fopDwTg_DrawQTo(create_tag_class* pTag); + +#endif \ No newline at end of file diff --git a/include/f/f_op/f_op_kankyo/asm/func_8001F314.s b/include/f/f_op/f_op_kankyo/asm/func_8001F314.s index 7acc7119502..1c76d6b1166 100644 --- a/include/f/f_op/f_op_kankyo/asm/func_8001F314.s +++ b/include/f/f_op/f_op_kankyo/asm/func_8001F314.s @@ -11,7 +11,7 @@ /* 8001F33C 0001C27C 2C 1F 00 01 */ cmpwi r31, 1 /* 8001F340 0001C280 40 82 00 0C */ bne lbl_8001F34C /* 8001F344 0001C284 38 7E 00 C4 */ addi r3, r30, 0xc4 -/* 8001F348 0001C288 48 00 11 8D */ bl fopDwTg_DrawQTo +/* 8001F348 0001C288 48 00 11 8D */ bl fopDwTg_DrawQTo__FP16create_tag_class lbl_8001F34C: /* 8001F34C 0001C28C 7F E3 FB 78 */ mr r3, r31 /* 8001F350 0001C290 83 E1 00 0C */ lwz r31, 0xc(r1) diff --git a/include/f/f_op/f_op_kankyo/asm/func_8001F368.s b/include/f/f_op/f_op_kankyo/asm/func_8001F368.s index 8a4dee487af..24182c1f87f 100644 --- a/include/f/f_op/f_op_kankyo/asm/func_8001F368.s +++ b/include/f/f_op/f_op_kankyo/asm/func_8001F368.s @@ -9,7 +9,7 @@ /* 8001F388 0001C2C8 48 00 31 21 */ bl fpcMtd_Delete /* 8001F38C 0001C2CC 7C 7E 1B 78 */ mr r30, r3 /* 8001F390 0001C2D0 38 7F 00 C4 */ addi r3, r31, 0xc4 -/* 8001F394 0001C2D4 48 00 11 41 */ bl fopDwTg_DrawQTo +/* 8001F394 0001C2D4 48 00 11 41 */ bl fopDwTg_DrawQTo__FP16create_tag_class /* 8001F398 0001C2D8 7F C3 F3 78 */ mr r3, r30 /* 8001F39C 0001C2DC 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8001F3A0 0001C2E0 83 C1 00 08 */ lwz r30, 8(r1) diff --git a/include/f/f_op/f_op_msg/asm/func_8001F4E8.s b/include/f/f_op/f_op_msg/asm/func_8001F4E8.s index 60ba9d8ef4c..200d5e7db5f 100644 --- a/include/f/f_op/f_op_msg/asm/func_8001F4E8.s +++ b/include/f/f_op/f_op_msg/asm/func_8001F4E8.s @@ -11,7 +11,7 @@ /* 8001F510 0001C450 2C 1F 00 01 */ cmpwi r31, 1 /* 8001F514 0001C454 40 82 00 0C */ bne lbl_8001F520 /* 8001F518 0001C458 38 7E 00 C4 */ addi r3, r30, 0xc4 -/* 8001F51C 0001C45C 48 00 0F B9 */ bl fopDwTg_DrawQTo +/* 8001F51C 0001C45C 48 00 0F B9 */ bl fopDwTg_DrawQTo__FP16create_tag_class lbl_8001F520: /* 8001F520 0001C460 7F E3 FB 78 */ mr r3, r31 /* 8001F524 0001C464 83 E1 00 0C */ lwz r31, 0xc(r1) diff --git a/include/f/f_op/f_op_msg/asm/func_8001F53C.s b/include/f/f_op/f_op_msg/asm/func_8001F53C.s index ffdb94d4a87..8d2485e7013 100644 --- a/include/f/f_op/f_op_msg/asm/func_8001F53C.s +++ b/include/f/f_op/f_op_msg/asm/func_8001F53C.s @@ -9,7 +9,7 @@ /* 8001F55C 0001C49C 48 00 2F 4D */ bl fpcMtd_Delete /* 8001F560 0001C4A0 7C 7F 1B 78 */ mr r31, r3 /* 8001F564 0001C4A4 38 7E 00 C4 */ addi r3, r30, 0xc4 -/* 8001F568 0001C4A8 48 00 0F 6D */ bl fopDwTg_DrawQTo +/* 8001F568 0001C4A8 48 00 0F 6D */ bl fopDwTg_DrawQTo__FP16create_tag_class /* 8001F56C 0001C4AC 7F E3 FB 78 */ mr r3, r31 /* 8001F570 0001C4B0 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8001F574 0001C4B4 83 C1 00 08 */ lwz r30, 8(r1) diff --git a/ldscript.lcf b/ldscript.lcf index bd5d979e9be..4a3cea76eb1 100644 --- a/ldscript.lcf +++ b/ldscript.lcf @@ -3380,7 +3380,7 @@ func_8001F248 func_8001F220 func_8001F1F8 func_8001F1D0 -fopCam_Draw +fopCam_Draw__FP12camera_class func_8001E270 func_8001E21C func_8001E1C8 @@ -3435,6 +3435,10 @@ func_8001EBAC func_8001EB84 func_8001EB5C fopScn_Draw +fopCam_Execute__FP12camera_class +fopCam_IsDelete__FP12camera_class +fopCam_Delete__FP12camera_class +fopCam_Create__FPv } /* .init 80003100 - 80005600 diff --git a/src/f/f_op/f_op_camera.cpp b/src/f/f_op/f_op_camera.cpp index f82fac3e5ab..20f57db136c 100644 --- a/src/f/f_op/f_op_camera.cpp +++ b/src/f/f_op/f_op_camera.cpp @@ -1,64 +1,70 @@ /* f_op_camera.cpp autogenerated by split.py v0.4 at 2021-02-15 20:13:32.027855 */ +#include "f/f_op/f_op_camera.h" #include "d/d_com/d_com_inf_game/d_com_inf_game.h" +#include "f/f_op/f_op_draw_tag.h" +#include "f/f_pc/f_pc_leaf.h" #include "global.h" // additional symbols needed for f_op_camera.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:13:32.027886 extern "C" { -void fopCam_Draw(void); void fopDwTg_DrawQTo(void); void fopDwTg_Init(void); void fopDwTg_ToDrawQ(void); -void fpcLf_DrawMethod(void); -void fpcLf_GetPriority(void); -void fpcMtd_Create(void); -void fpcMtd_Delete(void); -void fpcMtd_Execute(void); -void fpcMtd_IsDelete(void); void func_8001E180(void); void func_8001E1C8(void); void func_8001E21C(void); void func_8001E270(void); +void fopDwTg_DrawQTo__FP16create_tag_class(void); } // additional symbols needed for f_op_camera.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:13:32.027892 -extern u8 lbl_80451124; +extern s8 lbl_80451124; -extern "C" { -// fopCam_Draw__FP12camera_class -// fopCam_Draw(camera_class*) -asm void fopCam_Draw(void) { - nofralloc -#include "f/f_op/f_op_camera/asm/func_8001E140.s" +s32 fopCam_Draw(camera_class* pCamera) { + s32 tmp = 1; + + if (g_dComIfG_gameInfo.getPlay().getField0x4f7d() == false) { + tmp = fpcLf_DrawMethod(pCamera->pMthd, pCamera); + } + return tmp; } -// fopCam_Execute__FP12camera_class -// fopCam_Execute(camera_class*) -asm void func_8001E180(void) { +// Matches, but wrong registers +#ifdef NONMATCHING +void fopCam_Execute(camera_class* pCamera) { + if (!g_dComIfG_gameInfo.getPlay().getField0x4f7d() && !lbl_80451124) { + fpcMtd_Execute((process_method_class*)pCamera->pMthd, pCamera); + } +} +#else +asm void fopCam_Execute(camera_class* pCamera) { nofralloc #include "f/f_op/f_op_camera/asm/func_8001E180.s" } +#endif -// fopCam_IsDelete__FP12camera_class -// fopCam_IsDelete(camera_class*) -asm void func_8001E1C8(void) { - nofralloc -#include "f/f_op/f_op_camera/asm/func_8001E1C8.s" +int fopCam_IsDelete(camera_class* pCamera) { + int tmp = fpcMtd_IsDelete((process_method_class*)pCamera->pMthd, pCamera); + if (tmp == 1) { + fopDwTg_DrawQTo(&pCamera->pCreateTag); + } + + return tmp; } -// fopCam_Delete__FP12camera_class -// fopCam_Delete(camera_class*) -asm void func_8001E21C(void) { - nofralloc -#include "f/f_op/f_op_camera/asm/func_8001E21C.s" +int fopCam_Delete(camera_class* pCamera) { + int tmp = fpcMtd_Delete((process_method_class*)pCamera->pMthd, pCamera); + if (tmp == 1) { + fopDwTg_DrawQTo(&pCamera->pCreateTag); + } + + return tmp; } -// fopCam_Create__FPv -// fopCam_Create(void*) -asm void func_8001E270(void) { +asm void fopCam_Create(void*) { nofralloc #include "f/f_op/f_op_camera/asm/func_8001E270.s" } -}; diff --git a/src/f/f_op/f_op_draw_tag.cpp b/src/f/f_op/f_op_draw_tag.cpp index fadf9c7a1da..463e68211ca 100644 --- a/src/f/f_op/f_op_draw_tag.cpp +++ b/src/f/f_op/f_op_draw_tag.cpp @@ -1,14 +1,11 @@ /* f_op_draw_tag.cpp autogenerated by split.py v0.4 at 2021-02-15 20:18:52.463012 */ +#include "f/f_op/f_op_draw_tag.h" #include "global.h" // additional symbols needed for f_op_draw_tag.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:18:52.463040 extern "C" { -void cTg_AdditionToTree(void); -void cTg_Create(void); -void cTg_SingleCutFromTree(void); -void cTr_Create(void); void fopDwTg_CreateQueue(void); void fopDwTg_DrawQTo(void); void fopDwTg_Init(void); @@ -27,14 +24,16 @@ asm void fopDwTg_ToDrawQ(void) { nofralloc #include "f/f_op/f_op_draw_tag/asm/func_800204AC.s" } +}; // fopDwTg_DrawQTo__FP16create_tag_class // fopDwTg_DrawQTo(create_tag_class*) -asm void fopDwTg_DrawQTo(void) { +asm void fopDwTg_DrawQTo(create_tag_class*) { nofralloc #include "f/f_op/f_op_draw_tag/asm/func_800204D4.s" } +extern "C" { // fopDwTg_Init__FP16create_tag_classPv // fopDwTg_Init(create_tag_class*, void*) asm void fopDwTg_Init(void) { diff --git a/src/f/f_op/f_op_kankyo.cpp b/src/f/f_op/f_op_kankyo.cpp index f3de28dceb1..f492bab6a65 100644 --- a/src/f/f_op/f_op_kankyo.cpp +++ b/src/f/f_op/f_op_kankyo.cpp @@ -1,11 +1,13 @@ /* f_op_kankyo.cpp autogenerated by split.py v0.4 at 2021-02-15 21:03:24.816040 */ #include "d/d_com/d_com_inf_game/d_com_inf_game.h" +#include "f/f_op/f_op_draw_tag.h" #include "global.h" // additional symbols needed for f_op_kankyo.cpp // autogenerated by split.py v0.4 at 2021-02-15 21:03:24.816064 extern "C" { +void fopDwTg_DrawQTo__FP16create_tag_class(void); void fopDwTg_DrawQTo(void); void fopDwTg_Init(void); void fopDwTg_ToDrawQ(void); diff --git a/src/f/f_op/f_op_msg.cpp b/src/f/f_op/f_op_msg.cpp index 0e414605aa3..f2ade0b8bad 100644 --- a/src/f/f_op/f_op_msg.cpp +++ b/src/f/f_op/f_op_msg.cpp @@ -1,10 +1,12 @@ /* f_op_msg.cpp autogenerated by split.py v0.4 at 2021-02-15 21:05:32.071191 */ +#include "f/f_op/f_op_draw_tag.h" #include "global.h" // additional symbols needed for f_op_msg.cpp // autogenerated by split.py v0.4 at 2021-02-15 21:05:32.071227 extern "C" { +void fopDwTg_DrawQTo__FP16create_tag_class(void); void fopDwTg_DrawQTo(void); void fopDwTg_Init(void); void fopDwTg_ToDrawQ(void);