From 68d74528d9d61d0b2ca56daeabf3d058fc770c71 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 19:33:26 -0700 Subject: [PATCH 1/8] fopKy_Draw --- src/f_op/f_op_kankyo.cpp | 50 +++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index a5a060661d4..c7b300f1d3f 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -4,21 +4,10 @@ // #include "f_op/f_op_kankyo.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct process_method_class {}; - -struct leafdraw_method_class {}; - -struct leafdraw_class {}; - -struct create_tag_class {}; - // // Forward References: // @@ -44,7 +33,6 @@ extern "C" void fpcMtd_Execute__FP20process_method_classPv(); extern "C" void fpcMtd_IsDelete__FP20process_method_classPv(); extern "C" void fpcMtd_Delete__FP20process_method_classPv(); extern "C" void fpcMtd_Create__FP20process_method_classPv(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 pauseTimer__9dScnPly_c[4]; // @@ -52,6 +40,17 @@ extern "C" extern u8 pauseTimer__9dScnPly_c[4]; // /* 8001F284-8001F2C0 019BC4 003C+00 1/0 0/0 0/0 .text fopKy_Draw__FPv */ +#ifndef NONMATCHING +static int fopKy_Draw(void* param_0) { + int ret; + + if (!dComIfGp_isPauseFlag()) { + ret = fpcLf_DrawMethod(((msg_class*)param_0)->field_0xd8, param_0); + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -60,8 +59,14 @@ static asm void fopKy_Draw(void* param_0) { #include "asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s" } #pragma pop +#endif /* 8001F2C0-8001F314 019C00 0054+00 1/0 0/0 0/0 .text fopKy_Execute__FPv */ +#ifdef NONMATCHING +static void fopKy_Execute(void* param_0) { + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -70,8 +75,14 @@ static asm void fopKy_Execute(void* param_0) { #include "asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s" } #pragma pop +#endif /* 8001F314-8001F368 019C54 0054+00 1/0 0/0 0/0 .text fopKy_IsDelete__FPv */ +#ifdef NONMATCHING +static void fopKy_IsDelete(void* param_0) { + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -80,8 +91,14 @@ static asm void fopKy_IsDelete(void* param_0) { #include "asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s" } #pragma pop +#endif /* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */ +#ifdef NONMATCHING +static void fopKy_Delete(void* param_0) { + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -90,12 +107,18 @@ static asm void fopKy_Delete(void* param_0) { #include "asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80450CE8-80450CF0 0001E8 0004+04 1/1 0/0 0/0 .sbss fopKy_KANKYO_TYPE */ static u8 fopKy_KANKYO_TYPE[4 + 4 /* padding */]; /* 8001F3B4-8001F488 019CF4 00D4+00 1/0 0/0 0/0 .text fopKy_Create__FPv */ +#ifdef NONMATCHING +static void fopKy_Create(void* param_0) { + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -104,6 +127,7 @@ static asm void fopKy_Create(void* param_0) { #include "asm/f_op/f_op_kankyo/fopKy_Create__FPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A3940-803A3958 -00001 0014+04 0/0 7/0 0/0 .data g_fopKy_Method */ From ac6223b949efa11043db6e80c57ed79b4f8876f5 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 19:42:25 -0700 Subject: [PATCH 2/8] fopKy_Execute --- src/f_op/f_op_kankyo.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index c7b300f1d3f..1e14a49554b 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -5,6 +5,7 @@ #include "f_op/f_op_kankyo.h" #include "d/com/d_com_inf_game.h" +#include "d/s/d_s_play.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -33,14 +34,12 @@ extern "C" void fpcMtd_Execute__FP20process_method_classPv(); extern "C" void fpcMtd_IsDelete__FP20process_method_classPv(); extern "C" void fpcMtd_Delete__FP20process_method_classPv(); extern "C" void fpcMtd_Create__FP20process_method_classPv(); -extern "C" extern u8 pauseTimer__9dScnPly_c[4]; // // Declarations: // /* 8001F284-8001F2C0 019BC4 003C+00 1/0 0/0 0/0 .text fopKy_Draw__FPv */ -#ifndef NONMATCHING static int fopKy_Draw(void* param_0) { int ret; @@ -50,21 +49,17 @@ static int fopKy_Draw(void* param_0) { return ret; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void fopKy_Draw(void* param_0) { - nofralloc -#include "asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s" -} -#pragma pop -#endif /* 8001F2C0-8001F314 019C00 0054+00 1/0 0/0 0/0 .text fopKy_Execute__FPv */ -#ifdef NONMATCHING -static void fopKy_Execute(void* param_0) { - +#ifndef NONMATCHING +static int fopKy_Execute(void* param_0) { + int ret; + + if (dScnPly_c::isPause() && (!dComIfGp_isPauseFlag() || fpcM_GetName(param_0) == 0x15)) { + ret = fpcMtd_Execute(((process_method_class*)((msg_class*)param_0)->field_0xd8),param_0); + } + + return ret; } #else #pragma push From a76a695ff11743069d28265558ec64632cff46c3 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 20:13:08 -0700 Subject: [PATCH 3/8] fopKy_IsDelete --- src/f_op/f_op_kankyo.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 1e14a49554b..5b45121c531 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -51,7 +51,6 @@ static int fopKy_Draw(void* param_0) { } /* 8001F2C0-8001F314 019C00 0054+00 1/0 0/0 0/0 .text fopKy_Execute__FPv */ -#ifndef NONMATCHING static int fopKy_Execute(void* param_0) { int ret; @@ -61,21 +60,21 @@ static int fopKy_Execute(void* param_0) { return ret; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void fopKy_Execute(void* param_0) { - nofralloc -#include "asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s" -} -#pragma pop -#endif /* 8001F314-8001F368 019C54 0054+00 1/0 0/0 0/0 .text fopKy_IsDelete__FPv */ -#ifdef NONMATCHING -static void fopKy_IsDelete(void* param_0) { - +#ifndef NONMATCHING +static int fopKy_IsDelete(void* param_0) { + int ret; + msg_class* msg = (msg_class*)param_0; + leafdraw_method_class* leaf_mtd = msg->field_0xd8; + process_method_class* proc_mtd = (process_method_class*)leaf_mtd; + ret = fpcMtd_IsDelete(proc_mtd,msg); + + if (ret == 1) { + fopDwTg_DrawQTo(&msg->field_0xc4); + } + + return ret; } #else #pragma push From 9b5bc55f2a958e46e1ce5d108ff82694524f1f88 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 20:15:36 -0700 Subject: [PATCH 4/8] fopKy_Delete --- src/f_op/f_op_kankyo.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 5b45121c531..329f4b81a27 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -62,7 +62,6 @@ static int fopKy_Execute(void* param_0) { } /* 8001F314-8001F368 019C54 0054+00 1/0 0/0 0/0 .text fopKy_IsDelete__FPv */ -#ifndef NONMATCHING static int fopKy_IsDelete(void* param_0) { int ret; msg_class* msg = (msg_class*)param_0; @@ -76,21 +75,16 @@ static int fopKy_IsDelete(void* param_0) { return ret; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void fopKy_IsDelete(void* param_0) { - nofralloc -#include "asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s" -} -#pragma pop -#endif /* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */ -#ifdef NONMATCHING -static void fopKy_Delete(void* param_0) { - +#ifndef NONMATCHING +static int fopKy_Delete(void* param_0) { + msg_class* msg = (msg_class*)param_0; + leafdraw_method_class* leaf_mtd = msg->field_0xd8; + process_method_class* proc_mtd = (process_method_class*)leaf_mtd; + int ret = fpcMtd_Delete(proc_mtd,msg); + fopDwTg_DrawQTo(&msg->field_0xc4); + return ret; } #else #pragma push From 791399ac6cfaf2e6bfb362cd0e29a6271eb8bbf6 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 22:43:29 -0700 Subject: [PATCH 5/8] fopKy_Create attempt --- include/f_op/f_op_kankyo.h | 5 +++ include/f_pc/f_pc_manager.h | 5 +++ src/f_op/f_op_kankyo.cpp | 87 ++++++++++++++++++++++--------------- 3 files changed, 62 insertions(+), 35 deletions(-) diff --git a/include/f_op/f_op_kankyo.h b/include/f_op/f_op_kankyo.h index e88eeb1b1a2..7496364ac43 100644 --- a/include/f_op/f_op_kankyo.h +++ b/include/f_op/f_op_kankyo.h @@ -2,5 +2,10 @@ #define F_OP_F_OP_KANKYO_H #include "dolphin/types.h" +#include "f_pc/f_pc_manager.h" + +inline void* fopKyM_GetAppend(void* param_0) { + return fpcM_GetAppend(param_0); +} #endif /* F_OP_F_OP_KANKYO_H */ diff --git a/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h index 84d376093ed..cebe63b4548 100644 --- a/include/f_pc/f_pc_manager.h +++ b/include/f_pc/f_pc_manager.h @@ -9,6 +9,7 @@ #include "f_pc/f_pc_node_req.h" #include "f_pc/f_pc_stdcreate_req.h" #include "f_pc/f_pc_executor.h" +#include "f_pc/f_pc_leaf.h" typedef int (*FastCreateReqFunc)(void*); typedef void (*fpcM_ManagementFunc)(void); @@ -37,6 +38,10 @@ inline int fpcM_Create(s16 procName, FastCreateReqFunc createFunc, void* process process); } +inline s16 fpcM_DrawPriority(const void* param_0) { + return fpcLf_GetPriority((const leafdraw_class*)param_0); +} + inline s32 fpcM_ChangeLayerID(void* proc, int layerID) { return fpcPi_Change(&((base_process_class*)proc)->mPi, layerID, 0xFFFD, 0xFFFD); } diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 329f4b81a27..2a7760dcc67 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -4,25 +4,15 @@ // #include "f_op/f_op_kankyo.h" +#include "f_pc/f_pc_manager.h" #include "d/com/d_com_inf_game.h" #include "d/s/d_s_play.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Forward References: -// - -extern "C" static void fopKy_Draw__FPv(); -extern "C" static void fopKy_Execute__FPv(); -extern "C" static void fopKy_IsDelete__FPv(); -extern "C" static void fopKy_Delete__FPv(); -extern "C" static void fopKy_Create__FPv(); -extern "C" extern void* g_fopKy_Method[5 + 1 /* padding */]; - -// -// External References: -// +// // +// // External References: +// // extern "C" void fopDwTg_ToDrawQ__FP16create_tag_classi(); extern "C" void fopDwTg_DrawQTo__FP16create_tag_class(); @@ -77,7 +67,6 @@ static int fopKy_IsDelete(void* param_0) { } /* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */ -#ifndef NONMATCHING static int fopKy_Delete(void* param_0) { msg_class* msg = (msg_class*)param_0; leafdraw_method_class* leaf_mtd = msg->field_0xd8; @@ -86,16 +75,6 @@ static int fopKy_Delete(void* param_0) { fopDwTg_DrawQTo(&msg->field_0xc4); return ret; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void fopKy_Delete(void* param_0) { - nofralloc -#include "asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s" -} -#pragma pop -#endif /* ############################################################################################## */ /* 80450CE8-80450CF0 0001E8 0004+04 1/1 0/0 0/0 .sbss fopKy_KANKYO_TYPE */ @@ -103,8 +82,48 @@ static u8 fopKy_KANKYO_TYPE[4 + 4 /* padding */]; /* 8001F3B4-8001F488 019CF4 00D4+00 1/0 0/0 0/0 .text fopKy_Create__FPv */ #ifdef NONMATCHING -static void fopKy_Create(void* param_0) { - +// regalloc +class append_class { +public: + cXyz field_0x00; + cXyz field_0x0c; + u32 field_0x18; +}; + +class unk_class { +public: + u8 field_0x00[0xdc]; + cXyz field_0xdc; + cXyz field_0xe8; + u32 field_0xf4; +}; + +static int fopKy_Create(void* param_0) { + msg_class* msg = (msg_class*)param_0; + + if (fpcM_IsFirstCreating(param_0)) { + leaf_process_profile_definition* profile = fpcM_GetProfile(param_0); + + msg->field_0xc0 = fpcBs_MakeOfType((int*)fopKy_KANKYO_TYPE); + msg->field_0xd8 = profile->mBase.mMethods; + + fopDwTg_Init((create_tag_class*)(&msg->field_0xc4), msg); + append_class* append = (append_class*)fopKyM_GetAppend(msg); + + if (append) { + ((unk_class*)msg)->field_0xdc = append->field_0x00; + ((unk_class*)msg)->field_0xe8 = append->field_0x0c; + ((unk_class*)msg)->field_0xf4 = append->field_0x18; + } + } + + int ret = fpcMtd_Create((process_method_class*)(msg->field_0xd8), msg); + if (ret == 4) { + s16 priority = fpcM_DrawPriority(msg); + fopDwTg_ToDrawQ((create_tag_class*)(&msg->field_0xc4),priority); + } + + return ret; } #else #pragma push @@ -119,12 +138,10 @@ static asm void fopKy_Create(void* param_0) { /* ############################################################################################## */ /* 803A3940-803A3958 -00001 0014+04 0/0 7/0 0/0 .data g_fopKy_Method */ -SECTION_DATA extern void* g_fopKy_Method[5 + 1 /* padding */] = { - (void*)fopKy_Create__FPv, - (void*)fopKy_Delete__FPv, - (void*)fopKy_Execute__FPv, - (void*)fopKy_IsDelete__FPv, - (void*)fopKy_Draw__FPv, - /* padding */ - NULL, +void* g_fopKy_Method[5] = { + fopKy_Create, + fopKy_Delete, + fopKy_Execute, + fopKy_IsDelete, + fopKy_Draw }; From 5a5db5918264370600923951300d6ba7808549c7 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 22:44:30 -0700 Subject: [PATCH 6/8] remove asm --- asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s | 20 ------------------ asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s | 17 --------------- asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s | 24 ---------------------- asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s | 23 --------------------- 4 files changed, 84 deletions(-) delete mode 100644 asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s delete mode 100644 asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s delete mode 100644 asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s delete mode 100644 asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s diff --git a/asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s b/asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s deleted file mode 100644 index 40ee22697a7..00000000000 --- a/asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s +++ /dev/null @@ -1,20 +0,0 @@ -lbl_8001F368: -/* 8001F368 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8001F36C 7C 08 02 A6 */ mflr r0 -/* 8001F370 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001F374 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8001F378 93 C1 00 08 */ stw r30, 8(r1) -/* 8001F37C 7C 7F 1B 78 */ mr r31, r3 -/* 8001F380 80 63 00 D8 */ lwz r3, 0xd8(r3) -/* 8001F384 7F E4 FB 78 */ mr r4, r31 -/* 8001F388 48 00 31 21 */ bl fpcMtd_Delete__FP20process_method_classPv -/* 8001F38C 7C 7E 1B 78 */ mr r30, r3 -/* 8001F390 38 7F 00 C4 */ addi r3, r31, 0xc4 -/* 8001F394 48 00 11 41 */ bl fopDwTg_DrawQTo__FP16create_tag_class -/* 8001F398 7F C3 F3 78 */ mr r3, r30 -/* 8001F39C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8001F3A0 83 C1 00 08 */ lwz r30, 8(r1) -/* 8001F3A4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001F3A8 7C 08 03 A6 */ mtlr r0 -/* 8001F3AC 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001F3B0 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s b/asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s deleted file mode 100644 index 06df34378a8..00000000000 --- a/asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_8001F284: -/* 8001F284 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8001F288 7C 08 02 A6 */ mflr r0 -/* 8001F28C 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001F290 7C 64 1B 78 */ mr r4, r3 -/* 8001F294 3C A0 80 40 */ lis r5, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8001F298 38 A5 61 C0 */ addi r5, r5, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8001F29C 88 05 5E B5 */ lbz r0, 0x5eb5(r5) -/* 8001F2A0 28 00 00 00 */ cmplwi r0, 0 -/* 8001F2A4 40 82 00 0C */ bne lbl_8001F2B0 -/* 8001F2A8 80 64 00 D8 */ lwz r3, 0xd8(r4) -/* 8001F2AC 48 00 27 79 */ bl fpcLf_DrawMethod__FP21leafdraw_method_classPv -lbl_8001F2B0: -/* 8001F2B0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001F2B4 7C 08 03 A6 */ mtlr r0 -/* 8001F2B8 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001F2BC 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s b/asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s deleted file mode 100644 index ae5a21d319e..00000000000 --- a/asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_8001F2C0: -/* 8001F2C0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8001F2C4 7C 08 02 A6 */ mflr r0 -/* 8001F2C8 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001F2CC 7C 64 1B 78 */ mr r4, r3 -/* 8001F2D0 88 0D 8B A4 */ lbz r0, pauseTimer__9dScnPly_c+0x0(r13) -/* 8001F2D4 7C 00 07 75 */ extsb. r0, r0 -/* 8001F2D8 40 82 00 2C */ bne lbl_8001F304 -/* 8001F2DC 3C A0 80 40 */ lis r5, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8001F2E0 38 A5 61 C0 */ addi r5, r5, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8001F2E4 88 05 5E B5 */ lbz r0, 0x5eb5(r5) -/* 8001F2E8 28 00 00 00 */ cmplwi r0, 0 -/* 8001F2EC 41 82 00 10 */ beq lbl_8001F2FC -/* 8001F2F0 A8 04 00 08 */ lha r0, 8(r4) -/* 8001F2F4 2C 00 00 15 */ cmpwi r0, 0x15 -/* 8001F2F8 40 82 00 0C */ bne lbl_8001F304 -lbl_8001F2FC: -/* 8001F2FC 80 64 00 D8 */ lwz r3, 0xd8(r4) -/* 8001F300 48 00 31 61 */ bl fpcMtd_Execute__FP20process_method_classPv -lbl_8001F304: -/* 8001F304 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001F308 7C 08 03 A6 */ mtlr r0 -/* 8001F30C 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001F310 4E 80 00 20 */ blr diff --git a/asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s b/asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s deleted file mode 100644 index 2528ee1860c..00000000000 --- a/asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s +++ /dev/null @@ -1,23 +0,0 @@ -lbl_8001F314: -/* 8001F314 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8001F318 7C 08 02 A6 */ mflr r0 -/* 8001F31C 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001F320 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8001F324 93 C1 00 08 */ stw r30, 8(r1) -/* 8001F328 7C 7E 1B 78 */ mr r30, r3 -/* 8001F32C 80 63 00 D8 */ lwz r3, 0xd8(r3) -/* 8001F330 7F C4 F3 78 */ mr r4, r30 -/* 8001F334 48 00 31 51 */ bl fpcMtd_IsDelete__FP20process_method_classPv -/* 8001F338 7C 7F 1B 78 */ mr r31, r3 -/* 8001F33C 2C 1F 00 01 */ cmpwi r31, 1 -/* 8001F340 40 82 00 0C */ bne lbl_8001F34C -/* 8001F344 38 7E 00 C4 */ addi r3, r30, 0xc4 -/* 8001F348 48 00 11 8D */ bl fopDwTg_DrawQTo__FP16create_tag_class -lbl_8001F34C: -/* 8001F34C 7F E3 FB 78 */ mr r3, r31 -/* 8001F350 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8001F354 83 C1 00 08 */ lwz r30, 8(r1) -/* 8001F358 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001F35C 7C 08 03 A6 */ mtlr r0 -/* 8001F360 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001F364 4E 80 00 20 */ blr From e7ed9aca420adaca5170de26cbd74e6a6f76a5f0 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 27 Dec 2022 23:12:52 -0700 Subject: [PATCH 7/8] msg_class -> kankyo_class --- include/f_op/f_op_kankyo.h | 13 ++++++-- include/f_op/f_op_kankyo_mng.h | 4 +++ src/f_op/f_op_kankyo.cpp | 57 +++++++++++++--------------------- 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/include/f_op/f_op_kankyo.h b/include/f_op/f_op_kankyo.h index 7496364ac43..1e13eb78db5 100644 --- a/include/f_op/f_op_kankyo.h +++ b/include/f_op/f_op_kankyo.h @@ -3,9 +3,16 @@ #include "dolphin/types.h" #include "f_pc/f_pc_manager.h" +#include "f_op/f_op_kankyo_mng.h" -inline void* fopKyM_GetAppend(void* param_0) { - return fpcM_GetAppend(param_0); -} +class kankyo_class : public leafdraw_class { +public: + /* 0xC0 */ int field_0xc0; + /* 0xC4 */ create_tag_class field_0xc4; + /* 0xD8 */ leafdraw_method_class* field_0xd8; + /* 0xDC */ cXyz field_0xdc; + /* 0xE8 */ cXyz field_0xe8; + /* 0xF4 */ u32 field_0xf4; +}; #endif /* F_OP_F_OP_KANKYO_H */ diff --git a/include/f_op/f_op_kankyo_mng.h b/include/f_op/f_op_kankyo_mng.h index 97908389642..f111f21fa83 100644 --- a/include/f_op/f_op_kankyo_mng.h +++ b/include/f_op/f_op_kankyo_mng.h @@ -20,4 +20,8 @@ static int fopKyM_Create(s16 param_1, fopKyM_CreateFunc param_2, void* param_3); base_process_class* fopKyM_fastCreate(s16 param_0, int param_1, cXyz* param_2, cXyz* param_3, fopKyM_CreateFunc); +inline void* fopKyM_GetAppend(void* param_0) { + return fpcM_GetAppend(param_0); +} + #endif \ No newline at end of file diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 2a7760dcc67..99ebe25c69f 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -34,7 +34,7 @@ static int fopKy_Draw(void* param_0) { int ret; if (!dComIfGp_isPauseFlag()) { - ret = fpcLf_DrawMethod(((msg_class*)param_0)->field_0xd8, param_0); + ret = fpcLf_DrawMethod(((kankyo_class*)param_0)->field_0xd8, param_0); } return ret; @@ -45,7 +45,7 @@ static int fopKy_Execute(void* param_0) { int ret; if (dScnPly_c::isPause() && (!dComIfGp_isPauseFlag() || fpcM_GetName(param_0) == 0x15)) { - ret = fpcMtd_Execute(((process_method_class*)((msg_class*)param_0)->field_0xd8),param_0); + ret = fpcMtd_Execute(((process_method_class*)((kankyo_class*)param_0)->field_0xd8),param_0); } return ret; @@ -54,13 +54,13 @@ static int fopKy_Execute(void* param_0) { /* 8001F314-8001F368 019C54 0054+00 1/0 0/0 0/0 .text fopKy_IsDelete__FPv */ static int fopKy_IsDelete(void* param_0) { int ret; - msg_class* msg = (msg_class*)param_0; - leafdraw_method_class* leaf_mtd = msg->field_0xd8; + kankyo_class* env = (kankyo_class*)param_0; + leafdraw_method_class* leaf_mtd = env->field_0xd8; process_method_class* proc_mtd = (process_method_class*)leaf_mtd; - ret = fpcMtd_IsDelete(proc_mtd,msg); + ret = fpcMtd_IsDelete(proc_mtd,env); if (ret == 1) { - fopDwTg_DrawQTo(&msg->field_0xc4); + fopDwTg_DrawQTo(&env->field_0xc4); } return ret; @@ -68,11 +68,11 @@ static int fopKy_IsDelete(void* param_0) { /* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */ static int fopKy_Delete(void* param_0) { - msg_class* msg = (msg_class*)param_0; - leafdraw_method_class* leaf_mtd = msg->field_0xd8; + kankyo_class* env = (kankyo_class*)param_0; + leafdraw_method_class* leaf_mtd = env->field_0xd8; process_method_class* proc_mtd = (process_method_class*)leaf_mtd; - int ret = fpcMtd_Delete(proc_mtd,msg); - fopDwTg_DrawQTo(&msg->field_0xc4); + int ret = fpcMtd_Delete(proc_mtd,env); + fopDwTg_DrawQTo(&env->field_0xc4); return ret; } @@ -83,44 +83,29 @@ static u8 fopKy_KANKYO_TYPE[4 + 4 /* padding */]; /* 8001F3B4-8001F488 019CF4 00D4+00 1/0 0/0 0/0 .text fopKy_Create__FPv */ #ifdef NONMATCHING // regalloc -class append_class { -public: - cXyz field_0x00; - cXyz field_0x0c; - u32 field_0x18; -}; - -class unk_class { -public: - u8 field_0x00[0xdc]; - cXyz field_0xdc; - cXyz field_0xe8; - u32 field_0xf4; -}; - static int fopKy_Create(void* param_0) { - msg_class* msg = (msg_class*)param_0; + kankyo_class* env = (kankyo_class*)param_0; if (fpcM_IsFirstCreating(param_0)) { leaf_process_profile_definition* profile = fpcM_GetProfile(param_0); - msg->field_0xc0 = fpcBs_MakeOfType((int*)fopKy_KANKYO_TYPE); - msg->field_0xd8 = profile->mBase.mMethods; + env->field_0xc0 = fpcBs_MakeOfType((int*)fopKy_KANKYO_TYPE); + env->field_0xd8 = profile->mBase.mMethods; - fopDwTg_Init((create_tag_class*)(&msg->field_0xc4), msg); - append_class* append = (append_class*)fopKyM_GetAppend(msg); + fopDwTg_Init((create_tag_class*)(&env->field_0xc4), env); + fopKyM_prm_class* append = (fopKyM_prm_class*)fopKyM_GetAppend(env); if (append) { - ((unk_class*)msg)->field_0xdc = append->field_0x00; - ((unk_class*)msg)->field_0xe8 = append->field_0x0c; - ((unk_class*)msg)->field_0xf4 = append->field_0x18; + env->field_0xdc = append->field_0x0; + env->field_0xe8 = append->field_0xc; + env->field_0xf4 = append->field_0x18; } } - int ret = fpcMtd_Create((process_method_class*)(msg->field_0xd8), msg); + int ret = fpcMtd_Create((process_method_class*)(env->field_0xd8), env); if (ret == 4) { - s16 priority = fpcM_DrawPriority(msg); - fopDwTg_ToDrawQ((create_tag_class*)(&msg->field_0xc4),priority); + s16 priority = fpcM_DrawPriority(env); + fopDwTg_ToDrawQ((create_tag_class*)(&env->field_0xc4),priority); } return ret; From 5bf08be0fa50a5ab8e97de3b7a9ee8cb59209b9e Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Wed, 28 Dec 2022 10:01:08 -0700 Subject: [PATCH 8/8] cleanup casts, add enum, convert fopKy_KANKYO_TYPE to int --- src/f_op/f_op_kankyo.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 99ebe25c69f..cb76f4aece6 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -9,6 +9,7 @@ #include "d/s/d_s_play.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "d/d_procname.h" // // // // External References: @@ -32,9 +33,10 @@ extern "C" void fpcMtd_Create__FP20process_method_classPv(); /* 8001F284-8001F2C0 019BC4 003C+00 1/0 0/0 0/0 .text fopKy_Draw__FPv */ static int fopKy_Draw(void* param_0) { int ret; + kankyo_class* env = (kankyo_class*)param_0; if (!dComIfGp_isPauseFlag()) { - ret = fpcLf_DrawMethod(((kankyo_class*)param_0)->field_0xd8, param_0); + ret = fpcLf_DrawMethod(env->field_0xd8, param_0); } return ret; @@ -43,9 +45,10 @@ static int fopKy_Draw(void* param_0) { /* 8001F2C0-8001F314 019C00 0054+00 1/0 0/0 0/0 .text fopKy_Execute__FPv */ static int fopKy_Execute(void* param_0) { int ret; + kankyo_class* env = (kankyo_class*)param_0; - if (dScnPly_c::isPause() && (!dComIfGp_isPauseFlag() || fpcM_GetName(param_0) == 0x15)) { - ret = fpcMtd_Execute(((process_method_class*)((kankyo_class*)param_0)->field_0xd8),param_0); + if (dScnPly_c::isPause() && (!dComIfGp_isPauseFlag() || fpcM_GetName(param_0) == PROC_ENVSE)) { + ret = fpcMtd_Execute((process_method_class*)env->field_0xd8,param_0); } return ret; @@ -55,10 +58,8 @@ static int fopKy_Execute(void* param_0) { static int fopKy_IsDelete(void* param_0) { int ret; kankyo_class* env = (kankyo_class*)param_0; - leafdraw_method_class* leaf_mtd = env->field_0xd8; - process_method_class* proc_mtd = (process_method_class*)leaf_mtd; - ret = fpcMtd_IsDelete(proc_mtd,env); + ret = fpcMtd_IsDelete((process_method_class*)env->field_0xd8,env); if (ret == 1) { fopDwTg_DrawQTo(&env->field_0xc4); } @@ -69,16 +70,16 @@ static int fopKy_IsDelete(void* param_0) { /* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */ static int fopKy_Delete(void* param_0) { kankyo_class* env = (kankyo_class*)param_0; - leafdraw_method_class* leaf_mtd = env->field_0xd8; - process_method_class* proc_mtd = (process_method_class*)leaf_mtd; - int ret = fpcMtd_Delete(proc_mtd,env); + + int ret = fpcMtd_Delete((process_method_class*)env->field_0xd8,env); fopDwTg_DrawQTo(&env->field_0xc4); + return ret; } /* ############################################################################################## */ /* 80450CE8-80450CF0 0001E8 0004+04 1/1 0/0 0/0 .sbss fopKy_KANKYO_TYPE */ -static u8 fopKy_KANKYO_TYPE[4 + 4 /* padding */]; +static int fopKy_KANKYO_TYPE; /* 8001F3B4-8001F488 019CF4 00D4+00 1/0 0/0 0/0 .text fopKy_Create__FPv */ #ifdef NONMATCHING @@ -89,10 +90,10 @@ static int fopKy_Create(void* param_0) { if (fpcM_IsFirstCreating(param_0)) { leaf_process_profile_definition* profile = fpcM_GetProfile(param_0); - env->field_0xc0 = fpcBs_MakeOfType((int*)fopKy_KANKYO_TYPE); + env->field_0xc0 = fpcBs_MakeOfType(&fopKy_KANKYO_TYPE); env->field_0xd8 = profile->mBase.mMethods; - fopDwTg_Init((create_tag_class*)(&env->field_0xc4), env); + fopDwTg_Init((create_tag_class*)&env->field_0xc4, env); fopKyM_prm_class* append = (fopKyM_prm_class*)fopKyM_GetAppend(env); if (append) { @@ -102,10 +103,10 @@ static int fopKy_Create(void* param_0) { } } - int ret = fpcMtd_Create((process_method_class*)(env->field_0xd8), env); + int ret = fpcMtd_Create((process_method_class*)env->field_0xd8, env); if (ret == 4) { s16 priority = fpcM_DrawPriority(env); - fopDwTg_ToDrawQ((create_tag_class*)(&env->field_0xc4),priority); + fopDwTg_ToDrawQ((create_tag_class*)&env->field_0xc4,priority); } return ret;