summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-12-29 14:52:19 -0800
committerGitHub <noreply@github.com>2022-12-29 14:52:19 -0800
commitfddeb5f5b5def4d217e00a8c1836250b1dc14db8 (patch)
tree7125ddd31e48283d98a0e59d38c70fe6fd07b149
parent0b97dfb6e59f859f14cab2df44baddce64dd293d (diff)
parent5bf08be0fa50a5ab8e97de3b7a9ee8cb59209b9e (diff)
Merge pull request #226 from Pheenoh/f_op_kankyo
f_op_kankyo 4/5 matched
-rw-r--r--asm/f_op/f_op_kankyo/fopKy_Delete__FPv.s20
-rw-r--r--asm/f_op/f_op_kankyo/fopKy_Draw__FPv.s17
-rw-r--r--asm/f_op/f_op_kankyo/fopKy_Execute__FPv.s24
-rw-r--r--asm/f_op/f_op_kankyo/fopKy_IsDelete__FPv.s23
-rw-r--r--include/f_op/f_op_kankyo.h12
-rw-r--r--include/f_op/f_op_kankyo_mng.h4
-rw-r--r--include/f_pc/f_pc_manager.h5
-rw-r--r--src/f_op/f_op_kankyo.cpp145
8 files changed, 101 insertions, 149 deletions
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 40ee22697a..0000000000
--- 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 06df34378a..0000000000
--- 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 ae5a21d319..0000000000
--- 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 2528ee1860..0000000000
--- 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
diff --git a/include/f_op/f_op_kankyo.h b/include/f_op/f_op_kankyo.h
index e88eeb1b1a..1e13eb78db 100644
--- a/include/f_op/f_op_kankyo.h
+++ b/include/f_op/f_op_kankyo.h
@@ -2,5 +2,17 @@
#define F_OP_F_OP_KANKYO_H
#include "dolphin/types.h"
+#include "f_pc/f_pc_manager.h"
+#include "f_op/f_op_kankyo_mng.h"
+
+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 9790838964..f111f21fa8 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/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h
index 84d376093e..cebe63b454 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 a5a060661d..cb76f4aece 100644
--- a/src/f_op/f_op_kankyo.cpp
+++ b/src/f_op/f_op_kankyo.cpp
@@ -4,35 +4,16 @@
//
#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"
+#include "d/d_procname.h"
-//
-// Types:
-//
-
-struct process_method_class {};
-
-struct leafdraw_method_class {};
-
-struct leafdraw_class {};
-
-struct create_tag_class {};
-
-//
-// 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();
@@ -44,58 +25,93 @@ 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];
//
// Declarations:
//
/* 8001F284-8001F2C0 019BC4 003C+00 1/0 0/0 0/0 .text fopKy_Draw__FPv */
-#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"
+static int fopKy_Draw(void* param_0) {
+ int ret;
+ kankyo_class* env = (kankyo_class*)param_0;
+
+ if (!dComIfGp_isPauseFlag()) {
+ ret = fpcLf_DrawMethod(env->field_0xd8, param_0);
+ }
+
+ return ret;
}
-#pragma pop
/* 8001F2C0-8001F314 019C00 0054+00 1/0 0/0 0/0 .text fopKy_Execute__FPv */
-#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"
+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) == PROC_ENVSE)) {
+ ret = fpcMtd_Execute((process_method_class*)env->field_0xd8,param_0);
+ }
+
+ return ret;
}
-#pragma pop
/* 8001F314-8001F368 019C54 0054+00 1/0 0/0 0/0 .text fopKy_IsDelete__FPv */
-#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"
+static int fopKy_IsDelete(void* param_0) {
+ int ret;
+ kankyo_class* env = (kankyo_class*)param_0;
+
+ ret = fpcMtd_IsDelete((process_method_class*)env->field_0xd8,env);
+ if (ret == 1) {
+ fopDwTg_DrawQTo(&env->field_0xc4);
+ }
+
+ return ret;
}
-#pragma pop
/* 8001F368-8001F3B4 019CA8 004C+00 1/0 0/0 0/0 .text fopKy_Delete__FPv */
-#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"
+static int fopKy_Delete(void* param_0) {
+ kankyo_class* env = (kankyo_class*)param_0;
+
+ int ret = fpcMtd_Delete((process_method_class*)env->field_0xd8,env);
+ fopDwTg_DrawQTo(&env->field_0xc4);
+
+ return ret;
}
-#pragma pop
/* ############################################################################################## */
/* 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
+// regalloc
+static int fopKy_Create(void* param_0) {
+ kankyo_class* env = (kankyo_class*)param_0;
+
+ if (fpcM_IsFirstCreating(param_0)) {
+ leaf_process_profile_definition* profile = fpcM_GetProfile(param_0);
+
+ env->field_0xc0 = fpcBs_MakeOfType(&fopKy_KANKYO_TYPE);
+ env->field_0xd8 = profile->mBase.mMethods;
+
+ fopDwTg_Init((create_tag_class*)&env->field_0xc4, env);
+ fopKyM_prm_class* append = (fopKyM_prm_class*)fopKyM_GetAppend(env);
+
+ if (append) {
+ 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*)env->field_0xd8, env);
+ if (ret == 4) {
+ s16 priority = fpcM_DrawPriority(env);
+ fopDwTg_ToDrawQ((create_tag_class*)&env->field_0xc4,priority);
+ }
+
+ return ret;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -104,15 +120,14 @@ 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 */
-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
};