diff --git a/config/GZLE01/splits.txt b/config/GZLE01/splits.txt index 217147c30..fe1c9e69e 100644 --- a/config/GZLE01/splits.txt +++ b/config/GZLE01/splits.txt @@ -1948,7 +1948,7 @@ JSystem/J3DU/J3DUDL.cpp: .text start:0x80256F80 end:0x80256F80 .text start:0x80256F80 end:0x80256F88 -JSystem/JParticle/JSystem/JPABaseShape.cpp: +JSystem/JParticle/JPABaseShape.cpp: .text start:0x80256F88 end:0x80257508 .text start:0x80257508 end:0x80257988 .rodata start:0x80366568 end:0x803665F8 diff --git a/configure.py b/configure.py index 09306efee..8c76aa62f 100644 --- a/configure.py +++ b/configure.py @@ -256,7 +256,7 @@ LIBS = [ Matching ("f_op/f_op_scene_req.cpp"), Matching ("f_op/f_op_scene_tag.cpp"), Matching ("f_op/f_op_view.cpp"), - NonMatching("f_op/f_op_kankyo.cpp"), + Matching ("f_op/f_op_kankyo.cpp"), Matching ("f_op/f_op_msg.cpp"), NonMatching("f_op/f_op_kankyo_mng.cpp"), NonMatching("f_op/f_op_msg_mng.cpp"), diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index 1686d735d..bd49d96a0 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -3,30 +3,98 @@ // Translation Unit: f_op_kankyo.cpp // -#include "f_op_kankyo.h" -#include "dolphin/types.h" +#include "f_op/f_op_kankyo.h" +#include "f_op/f_op_draw_tag.h" +#include "f_op/f_op_kankyo_mng.h" +#include "f_pc/f_pc_manager.h" +#include "d/d_procname.h" +#include "d/d_s_play.h" + +extern bool dMenu_flag(void); /* 8002A454-8002A4A4 .text fopKy_Draw__FPv */ -void fopKy_Draw(void*) { - /* Nonmatching */ +static int fopKy_Draw(void* i_this) { + int ret; + kankyo_class* _this = (kankyo_class*)i_this; + + if (!dMenu_flag()) { + ret = fpcLf_DrawMethod(_this->mSubMtd, i_this); + } + + return ret; } /* 8002A4A4-8002A514 .text fopKy_Execute__FPv */ -void fopKy_Execute(void*) { - /* Nonmatching */ +static int fopKy_Execute(void* i_this) { + int ret; + kankyo_class* _this = (kankyo_class*)i_this; + + if (dScnPly_ply_c::isPause() && (!dMenu_flag() || fpcM_GetName(i_this) == PROC_ENVSE || fpcM_GetName(i_this) == PROC_LEVEL_SE)) { + ret = fpcMtd_Execute(&_this->mSubMtd->mBase, i_this); + } + + return ret; } /* 8002A514-8002A568 .text fopKy_IsDelete__FPv */ -void fopKy_IsDelete(void*) { - /* Nonmatching */ +static int fopKy_IsDelete(void* i_this) { + int ret; + kankyo_class* _this = (kankyo_class*)i_this; + + ret = fpcMtd_IsDelete(&_this->mSubMtd->mBase, _this); + if (ret == 1) { + fopDwTg_DrawQTo(&_this->mDwTg); + } + + return ret; } /* 8002A568-8002A5B4 .text fopKy_Delete__FPv */ -void fopKy_Delete(void*) { - /* Nonmatching */ +static int fopKy_Delete(void* i_this) { + kankyo_class* _this = (kankyo_class*)i_this; + + int ret = fpcMtd_Delete(&_this->mSubMtd->mBase, _this); + fopDwTg_DrawQTo(&_this->mDwTg); + + return ret; } +static int fopKy_KANKYO_TYPE; + /* 8002A5B4-8002A688 .text fopKy_Create__FPv */ -void fopKy_Create(void*) { - /* Nonmatching */ +static int fopKy_Create(void* i_this) { + kankyo_class* _this = (kankyo_class*)i_this; + + if (fpcM_IsFirstCreating(i_this)) { + kankyo_process_profile_definition* profile = + (kankyo_process_profile_definition*)fpcM_GetProfile(i_this); + + _this->mBsType = fpcBs_MakeOfType(&fopKy_KANKYO_TYPE); + _this->mSubMtd = profile->mSubMtd; + + fopDwTg_Init(&_this->mDwTg, _this); + fopKyM_prm_class* append = (fopKyM_prm_class*)fopKyM_GetAppend(_this); + + if (append != NULL) { + _this->mPos = append->mPos; + _this->mScale = append->mScale; + _this->mParam = append->mParam; + } + } + + int ret = fpcMtd_Create(&_this->mSubMtd->mBase, _this); + if (ret == cPhs_COMPLEATE_e) { + s32 priority = fpcLf_GetPriority(_this); + fopDwTg_ToDrawQ(&_this->mDwTg, priority); + } + + return ret; } + +leafdraw_method_class g_fopKy_Method = { + (process_method_func)fopKy_Create, + (process_method_func)fopKy_Delete, + (process_method_func)fopKy_Execute, + (process_method_func)fopKy_IsDelete, + (process_method_func)fopKy_Draw, +};