diff --git a/asm/d/s/d_s_play.s b/asm/d/s/d_s_play.s index 16211631a37..c335a9f3a17 100644 --- a/asm/d/s/d_s_play.s +++ b/asm/d/s/d_s_play.s @@ -240,14 +240,14 @@ lbl_80259744: /* 8025974C 0025668C 38 7E 4C 9C */ addi r3, r30, 0x4c9c /* 80259750 00256690 4B E1 67 E9 */ bl dVibration_c_NS_Pause lbl_80259754: -/* 80259754 00256694 4B DC 6C F1 */ bl fopDwIt_Begin +/* 80259754 00256694 4B DC 6C F1 */ bl fopDwIt_Begin__Fv /* 80259758 00256698 7C 7C 1B 78 */ mr r28, r3 /* 8025975C 0025669C 48 00 00 18 */ b lbl_80259774 lbl_80259760: /* 80259760 002566A0 80 7C 00 0C */ lwz r3, 0xc(r28) /* 80259764 002566A4 4B DC 89 3D */ bl fpcM_Draw /* 80259768 002566A8 7F 83 E3 78 */ mr r3, r28 -/* 8025976C 002566AC 4B DC 6D 15 */ bl fopDwIt_Next +/* 8025976C 002566AC 4B DC 6D 15 */ bl fopDwIt_Next__FP16create_tag_class /* 80259770 002566B0 7C 7C 1B 78 */ mr r28, r3 lbl_80259774: /* 80259774 002566B4 28 1C 00 00 */ cmplwi r28, 0 diff --git a/asm/sbss.s b/asm/sbss.s index 8712b60e054..a12212f01ca 100644 --- a/asm/sbss.s +++ b/asm/sbss.s @@ -368,8 +368,8 @@ lbl_80450CE8: .global lbl_80450CF0 lbl_80450CF0: .skip 0x8 -.global lbl_80450CF8 -lbl_80450CF8: +.global l_fopDwTg_id +l_fopDwTg_id: .skip 0x8 .global lbl_80450D00 lbl_80450D00: diff --git a/asm/sdata.s b/asm/sdata.s index 45e615fae08..97eef9aa519 100644 --- a/asm/sdata.s +++ b/asm/sdata.s @@ -41,8 +41,8 @@ lbl_804505C0: .global lbl_804505C8 lbl_804505C8: .incbin "baserom.dol", 0x3D0328, 0x8 -.global lbl_804505D0 -lbl_804505D0: +.global g_fopDwTg_Queue +g_fopDwTg_Queue: .incbin "baserom.dol", 0x3D0330, 0x8 .global lbl_804505D8 lbl_804505D8: diff --git a/include/f/f_op/f_op_draw_iter.h b/include/f/f_op/f_op_draw_iter.h new file mode 100644 index 00000000000..9da1e53ca90 --- /dev/null +++ b/include/f/f_op/f_op_draw_iter.h @@ -0,0 +1,10 @@ +#ifndef F_F_OP_DRAW_ITER_H_ +#define F_F_OP_DRAW_ITER_H_ + +#include "SComponent/c_tag.h" + +void fopDwIt_GetTag(void); +void fopDwIt_Begin(void); +void fopDwIt_Next(create_tag_class* pCreateTag); + +#endif \ No newline at end of file diff --git a/include/f/f_op/f_op_draw_iter/asm/func_80020400.s b/include/f/f_op/f_op_draw_iter/asm/func_80020400.s index 1f740a04da9..86a9d33b14c 100644 --- a/include/f/f_op/f_op_draw_iter/asm/func_80020400.s +++ b/include/f/f_op/f_op_draw_iter/asm/func_80020400.s @@ -1,17 +1,17 @@ -/* 80020400 0001D340 80 8D 80 50 */ lwz r4, lbl_804505D0-_SDA_BASE_(r13) -/* 80020404 0001D344 38 6D 80 50 */ la r3, lbl_804505D0(r13) +/* 80020400 0001D340 80 8D 80 50 */ lwz r4, g_fopDwTg_Queue-_SDA_BASE_(r13) +/* 80020404 0001D344 38 6D 80 50 */ la r3, g_fopDwTg_Queue(r13) /* 80020408 0001D348 80 A3 00 04 */ lwz r5, 4(r3) /* 8002040C 0001D34C 48 00 00 20 */ b lbl_8002042C lbl_80020410: -/* 80020410 0001D350 80 6D 87 78 */ lwz r3, lbl_80450CF8-_SDA_BASE_(r13) +/* 80020410 0001D350 80 6D 87 78 */ lwz r3, l_fopDwTg_id-_SDA_BASE_(r13) /* 80020414 0001D354 38 03 00 01 */ addi r0, r3, 1 -/* 80020418 0001D358 90 0D 87 78 */ stw r0, lbl_80450CF8-_SDA_BASE_(r13) +/* 80020418 0001D358 90 0D 87 78 */ stw r0, l_fopDwTg_id-_SDA_BASE_(r13) /* 8002041C 0001D35C 1C 00 00 0C */ mulli r0, r0, 0xc /* 80020420 0001D360 7C 64 00 2E */ lwzx r3, r4, r0 /* 80020424 0001D364 28 03 00 00 */ cmplwi r3, 0 /* 80020428 0001D368 4C 82 00 20 */ bnelr lbl_8002042C: -/* 8002042C 0001D36C 80 6D 87 78 */ lwz r3, lbl_80450CF8-_SDA_BASE_(r13) +/* 8002042C 0001D36C 80 6D 87 78 */ lwz r3, l_fopDwTg_id-_SDA_BASE_(r13) /* 80020430 0001D370 38 03 00 01 */ addi r0, r3, 1 /* 80020434 0001D374 7C 00 28 00 */ cmpw r0, r5 /* 80020438 0001D378 41 80 FF D8 */ blt lbl_80020410 diff --git a/include/f/f_op/f_op_draw_iter/asm/func_80020444.s b/include/f/f_op/f_op_draw_iter/asm/func_80020444.s index bc59f4ac5d6..05cda3fd53f 100644 --- a/include/f/f_op/f_op_draw_iter/asm/func_80020444.s +++ b/include/f/f_op/f_op_draw_iter/asm/func_80020444.s @@ -1,15 +1,15 @@ /* 80020444 0001D384 94 21 FF F0 */ stwu r1, -0x10(r1) /* 80020448 0001D388 7C 08 02 A6 */ mflr r0 /* 8002044C 0001D38C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80020450 0001D390 80 6D 80 50 */ lwz r3, lbl_804505D0-_SDA_BASE_(r13) +/* 80020450 0001D390 80 6D 80 50 */ lwz r3, g_fopDwTg_Queue-_SDA_BASE_(r13) /* 80020454 0001D394 80 63 00 00 */ lwz r3, 0(r3) /* 80020458 0001D398 38 00 00 00 */ li r0, 0 -/* 8002045C 0001D39C 90 0D 87 78 */ stw r0, lbl_80450CF8-_SDA_BASE_(r13) +/* 8002045C 0001D39C 90 0D 87 78 */ stw r0, l_fopDwTg_id-_SDA_BASE_(r13) /* 80020460 0001D3A0 28 03 00 00 */ cmplwi r3, 0 /* 80020464 0001D3A4 41 82 00 08 */ beq lbl_8002046C /* 80020468 0001D3A8 48 00 00 08 */ b lbl_80020470 lbl_8002046C: -/* 8002046C 0001D3AC 4B FF FF 95 */ bl fopDwIt_GetTag +/* 8002046C 0001D3AC 4B FF FF 95 */ bl fopDwIt_GetTag__Fv lbl_80020470: /* 80020470 0001D3B0 80 01 00 14 */ lwz r0, 0x14(r1) /* 80020474 0001D3B4 7C 08 03 A6 */ mtlr r0 diff --git a/include/f/f_op/f_op_draw_iter/asm/func_80020480.s b/include/f/f_op/f_op_draw_iter/asm/func_80020480.s index 59ecf0c8f72..e7655ebe8cc 100644 --- a/include/f/f_op/f_op_draw_iter/asm/func_80020480.s +++ b/include/f/f_op/f_op_draw_iter/asm/func_80020480.s @@ -4,7 +4,7 @@ /* 8002048C 0001D3CC 80 63 00 08 */ lwz r3, 8(r3) /* 80020490 0001D3D0 28 03 00 00 */ cmplwi r3, 0 /* 80020494 0001D3D4 40 82 00 08 */ bne lbl_8002049C -/* 80020498 0001D3D8 4B FF FF 69 */ bl fopDwIt_GetTag +/* 80020498 0001D3D8 4B FF FF 69 */ bl fopDwIt_GetTag__Fv lbl_8002049C: /* 8002049C 0001D3DC 80 01 00 14 */ lwz r0, 0x14(r1) /* 800204A0 0001D3E0 7C 08 03 A6 */ mtlr r0 diff --git a/include/f/f_op/f_op_draw_tag/asm/func_800204AC.s b/include/f/f_op/f_op_draw_tag/asm/func_800204AC.s index e2fe579cd16..f5bd8b44333 100644 --- a/include/f/f_op/f_op_draw_tag/asm/func_800204AC.s +++ b/include/f/f_op/f_op_draw_tag/asm/func_800204AC.s @@ -2,7 +2,7 @@ /* 800204B0 0001D3F0 7C 08 02 A6 */ mflr r0 /* 800204B4 0001D3F4 90 01 00 14 */ stw r0, 0x14(r1) /* 800204B8 0001D3F8 7C 65 1B 78 */ mr r5, r3 -/* 800204BC 0001D3FC 38 6D 80 50 */ la r3, lbl_804505D0(r13) +/* 800204BC 0001D3FC 38 6D 80 50 */ la r3, g_fopDwTg_Queue(r13) /* 800204C0 0001D400 48 24 64 0D */ bl cTg_AdditionToTree /* 800204C4 0001D404 80 01 00 14 */ lwz r0, 0x14(r1) /* 800204C8 0001D408 7C 08 03 A6 */ mtlr r0 diff --git a/include/f/f_op/f_op_draw_tag/asm/func_80020518.s b/include/f/f_op/f_op_draw_tag/asm/func_80020518.s index 18bb008cae2..f8a705db71e 100644 --- a/include/f/f_op/f_op_draw_tag/asm/func_80020518.s +++ b/include/f/f_op/f_op_draw_tag/asm/func_80020518.s @@ -1,7 +1,7 @@ /* 80020518 0001D458 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8002051C 0001D45C 7C 08 02 A6 */ mflr r0 /* 80020520 0001D460 90 01 00 14 */ stw r0, 0x14(r1) -/* 80020524 0001D464 38 6D 80 50 */ la r3, lbl_804505D0(r13) +/* 80020524 0001D464 38 6D 80 50 */ la r3, g_fopDwTg_Queue(r13) /* 80020528 0001D468 3C 80 80 3F */ lis r4, lbl_803F1E10@ha /* 8002052C 0001D46C 38 84 1E 10 */ addi r4, r4, lbl_803F1E10@l /* 80020530 0001D470 38 A0 03 E8 */ li r5, 0x3e8 diff --git a/include/f/f_op/f_op_overlap.h b/include/f/f_op/f_op_overlap.h new file mode 100644 index 00000000000..371a4cbcab0 --- /dev/null +++ b/include/f/f_op/f_op_overlap.h @@ -0,0 +1,8 @@ +#ifndef F_F_OP_OVERLAP_H_ +#define F_F_OP_OVERLAP_H_ + +#include "dolphin/types.h" + +void fopOvlp_Draw(void* param_1); + +#endif \ No newline at end of file diff --git a/ldscript.lcf b/ldscript.lcf index 4a3cea76eb1..efb63a65040 100644 --- a/ldscript.lcf +++ b/ldscript.lcf @@ -3439,6 +3439,11 @@ fopCam_Execute__FP12camera_class fopCam_IsDelete__FP12camera_class fopCam_Delete__FP12camera_class fopCam_Create__FPv +fopOvlp_Draw__FPv +fopOvlp_Execute__FPv +fopOvlp_IsDelete__FPv +fopOvlp_Delete__FPv +fopOvlp_Create__FPv } /* .init 80003100 - 80005600 diff --git a/src/f/f_op/f_op_draw_iter.cpp b/src/f/f_op/f_op_draw_iter.cpp index ec047bf10dd..31c7b15d861 100644 --- a/src/f/f_op/f_op_draw_iter.cpp +++ b/src/f/f_op/f_op_draw_iter.cpp @@ -1,39 +1,41 @@ /* f_op_draw_iter.cpp autogenerated by split.py v0.4 at 2021-02-15 20:16:49.147351 */ +#include "f/f_op/f_op_draw_iter.h" +#include "SComponent/c_tree.h" #include "global.h" // additional symbols needed for f_op_draw_iter.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:16:49.147373 extern "C" { -void fopDwIt_Begin(void); -void fopDwIt_GetTag(void); -void fopDwIt_Next(void); +void fopDwIt_GetTag__Fv(void); } // additional symbols needed for f_op_draw_iter.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:16:49.147378 -extern u8 lbl_804505D0; -extern u8 lbl_80450CF8; +extern node_lists_tree_class g_fopDwTg_Queue; +extern u32 l_fopDwTg_id; + +// void fopDwIt_GetTag(void) { +// u32 tmp = l_fopDwTg_id; +// while (!g_fopDwTg_Queue.mpLists[tmp].mpHead) { +// if (g_fopDwTg_Queue.mNumLists <= tmp + 1) { +// return; +// } +// l_fopDwTg_id++; +// } +// } -extern "C" { -// fopDwIt_GetTag__Fv -// fopDwIt_GetTag(void) asm void fopDwIt_GetTag(void) { nofralloc #include "f/f_op/f_op_draw_iter/asm/func_80020400.s" } -// fopDwIt_Begin__Fv -// fopDwIt_Begin(void) asm void fopDwIt_Begin(void) { nofralloc #include "f/f_op/f_op_draw_iter/asm/func_80020444.s" } -// fopDwIt_Next__FP16create_tag_class -// fopDwIt_Next(create_tag_class*) -asm void fopDwIt_Next(void) { +asm void fopDwIt_Next(create_tag_class* pCreateTag) { nofralloc #include "f/f_op/f_op_draw_iter/asm/func_80020480.s" } -}; diff --git a/src/f/f_op/f_op_draw_tag.cpp b/src/f/f_op/f_op_draw_tag.cpp index 463e68211ca..463ccc135a6 100644 --- a/src/f/f_op/f_op_draw_tag.cpp +++ b/src/f/f_op/f_op_draw_tag.cpp @@ -15,7 +15,7 @@ void fopDwTg_ToDrawQ(void); // additional symbols needed for f_op_draw_tag.cpp // autogenerated by split.py v0.4 at 2021-02-15 20:18:52.463045 extern u8 lbl_803F1E10; -extern u8 lbl_804505D0; +extern u8 g_fopDwTg_Queue; extern "C" { // fopDwTg_ToDrawQ__FP16create_tag_classi diff --git a/src/f/f_op/f_op_overlap.cpp b/src/f/f_op/f_op_overlap.cpp index 40016c9fd5e..41300d04e7b 100644 --- a/src/f/f_op/f_op_overlap.cpp +++ b/src/f/f_op/f_op_overlap.cpp @@ -1,59 +1,38 @@ /* f_op_overlap.cpp autogenerated by split.py v0.4 at 2021-02-15 21:08:55.000952 */ +#include "f/f_op/f_op_overlap.h" +#include "SComponent/c_request.h" +#include "f/f_pc/f_pc_leaf.h" #include "global.h" // additional symbols needed for f_op_overlap.cpp // autogenerated by split.py v0.4 at 2021-02-15 21:08:55.000975 extern "C" { void cReq_Create__FP18request_base_classUc(void); -void fopOvlp_Draw(void); -void fpcLf_DrawMethod(void); -void fpcMtd_Create(void); -void fpcMtd_Delete(void); -void fpcMtd_Execute(void); -void fpcMtd_IsDelete(void); -void func_8001E3A4(void); -void func_8001E3CC(void); -void func_8001E3F4(void); -void func_8001E41C(void); } -// additional symbols needed for f_op_overlap.cpp -// autogenerated by split.py v0.4 at 2021-02-15 21:08:55.000980 - -extern "C" { -// fopOvlp_Draw__FPv -// fopOvlp_Draw(void*) -asm void fopOvlp_Draw(void) { - nofralloc -#include "f/f_op/f_op_overlap/asm/func_8001E37C.s" +void fopOvlp_Draw(void* param_1) { + // matches but is probably wrong + fpcLf_DrawMethod( + (leafdraw_method_class*)((leafdraw_method_class*)param_1)[9].mBase.mpIsDeleteFunc, param_1); } -// fopOvlp_Execute__FPv -// fopOvlp_Execute(void*) -asm void func_8001E3A4(void) { - nofralloc -#include "f/f_op/f_op_overlap/asm/func_8001E3A4.s" +void fopOvlp_Execute(void* param_1) { + // matches but is probably wrong + fpcMtd_Execute((process_method_class*)((int*)param_1)[0x30], param_1); } -// fopOvlp_IsDelete__FPv -// fopOvlp_IsDelete(void*) -asm void func_8001E3CC(void) { - nofralloc -#include "f/f_op/f_op_overlap/asm/func_8001E3CC.s" +void fopOvlp_IsDelete(void* param_1) { + // matches but is probably wrong + fpcMtd_IsDelete((process_method_class*)((int*)param_1)[0x30], param_1); } -// fopOvlp_Delete__FPv -// fopOvlp_Delete(void*) -asm void func_8001E3F4(void) { - nofralloc -#include "f/f_op/f_op_overlap/asm/func_8001E3F4.s" +void fopOvlp_Delete(void* param_1) { + // matches but is probably wrong + fpcMtd_Delete((process_method_class*)((int*)param_1)[0x30], param_1); } -// fopOvlp_Create__FPv -// fopOvlp_Create(void*) -asm void func_8001E41C(void) { +asm void fopOvlp_Create(void* param_1) { nofralloc #include "f/f_op/f_op_overlap/asm/func_8001E41C.s" } -};