diff --git a/configure.py b/configure.py index 7a745d0841f..80505c736f3 100755 --- a/configure.py +++ b/configure.py @@ -1834,7 +1834,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_obj_Turara"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_TvCdlst"), ActorRel(Equivalent, "d_a_obj_Y_taihou"), # weak func ordering. - ActorRel(NonMatching, "d_a_obj_amiShutter"), + ActorRel(Equivalent, "d_a_obj_amiShutter"), # function ordr ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ari"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_automata"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_avalanche"), diff --git a/include/d/actor/d_a_obj_amiShutter.h b/include/d/actor/d_a_obj_amiShutter.h index e2859ffe6d5..c19f61e1c82 100644 --- a/include/d/actor/d_a_obj_amiShutter.h +++ b/include/d/actor/d_a_obj_amiShutter.h @@ -1,8 +1,11 @@ #ifndef D_A_OBJ_AMISHUTTER_H #define D_A_OBJ_AMISHUTTER_H +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_event_lib.h" #include "f_op/f_op_actor_mng.h" + /** * @ingroup actors-objects * @class daAmiShutter_c @@ -11,19 +14,37 @@ * @details * */ -class daAmiShutter_c : public fopAc_ac_c { +struct fakeAmiShutterPadding { + u8 padding[8]; +}; + +class daAmiShutter_c : public dBgS_MoveBgActor, public fakeAmiShutterPadding, public dEvLib_callback_c { public: + typedef void (daAmiShutter_c::*modeProc)(); + + enum Mode { + MODE_WAIT = 0, + MODE_WAIT_EVENT = 1, + MODE_CLOSE = 2, + MODE_CLOSE_EVENT = 3, + MODE_CLOSE_END = 4, + MODE_OPEN = 5 + }; + + daAmiShutter_c(): dEvLib_callback_c(this) {} + /* 80BA22E8 */ ~daAmiShutter_c() {}; + /* 80BA155C */ void setBaseMtx(); - /* 80BA15E4 */ void CreateHeap(); - /* 80BA1650 */ void create(); - /* 80BA182C */ void Execute(f32 (**)[3][4]); + /* 80BA15E4 */ int CreateHeap(); + /* 80BA1650 */ cPhs__Step create(); + /* 80BA182C */ int Execute(Mtx**); /* 80BA1888 */ void moveShutter(); - /* 80BA1974 */ void playerAreaCheck(); + /* 80BA1974 */ BOOL playerAreaCheck(); /* 80BA1B4C */ void init_modeWait(); /* 80BA1B58 */ void modeWait(); /* 80BA1BCC */ void init_modeWaitEvent(); /* 80BA1BD8 */ void modeWaitEvent(); - /* 80BA1C90 */ void eventStart(); + /* 80BA1C90 */ BOOL eventStart(); /* 80BA1CB4 */ void init_modeClose(); /* 80BA1D48 */ void modeClose(); /* 80BA1DCC */ void init_modeCloseEvent(); @@ -32,22 +53,44 @@ public: /* 80BA1F7C */ void modeCloseEnd(); /* 80BA1F80 */ void init_modeOpen(); /* 80BA2004 */ void modeOpen(); - /* 80BA2080 */ void Draw(); - /* 80BA2124 */ void Delete(); - /* 80BA22E8 */ ~daAmiShutter_c(); + /* 80BA2080 */ int Draw(); + /* 80BA2124 */ int Delete(); + + + u8 getType() { return fopAcM_GetParamBit(this, 16, 4); } + + u8 getSwBit() { return fopAcM_GetParamBit(this, 8, 8); } + + int getEvent() { return fopAcM_GetParamBit(this, 0, 8); } bool isShutterOpen() { return mOpen; } private: - /* 0x568 */ u8 field_0x568[0x5d9 - 0x568]; - /* 0x5D9 */ bool mOpen; + /* 0x5b8 */ request_of_phase_process_class mPhaseReq; + /* 0x5c0 */ J3DModel* mpModel; + /* 0x5c4 */ u8 mMode; + /* 0x5c5 */ u8 mType; + /* 0x5c6 */ u8 mSwBit; + /* 0x5c7 */ u8 mSwitch; + /* 0x5c8 */ f32 mPosZ; + /* 0x5cc */ cXyz mPos; + /* 0x5d8 */ u8 mWaitTime; + /* 0x5d9 */ bool mOpen; }; STATIC_ASSERT(sizeof(daAmiShutter_c) == 0x5dc); -class daAmiShutter_HIO_c { +struct daAmiShutter_HIO_c : public mDoHIO_entry_c { + /* 0x04 */ f32 mRange; + /* 0x08 */ f32 mMaxOpenSpeed; + /* 0x0c */ f32 mMaxCloseSpeed; + /* 0x10 */ u8 mWaitTime; + /* 0x11 */ u8 field_0x11; + /* 80BA14CC */ daAmiShutter_HIO_c(); - /* 80BA21E0 */ ~daAmiShutter_HIO_c(); + /* 80BA21E0 */ ~daAmiShutter_HIO_c() {}; + + void genMessage(JORMContext*); }; diff --git a/include/d/d_bg_w.h b/include/d/d_bg_w.h index 7c5e99b084d..6f20f133876 100644 --- a/include/d/d_bg_w.h +++ b/include/d/d_bg_w.h @@ -221,6 +221,7 @@ public: bool ChkFlush() { return field_0x91 & 8; } void SetLock() { mFlags |= LOCK_e; } void OffRoofRegist() { field_0x91 |= 0x4; } + void OnRoofRegist() { field_0x91 &= ~0x04; } bool ChkRoofRegist() { return field_0x91 & 4;} cBgD_Vtx_t* GetVtxTbl() const { return pm_vtx_tbl; } int GetVtxNum() const { return pm_bgd->m_v_num; } diff --git a/src/d/actor/d_a_obj_amiShutter.cpp b/src/d/actor/d_a_obj_amiShutter.cpp index ff573309767..d83a753c750 100644 --- a/src/d/actor/d_a_obj_amiShutter.cpp +++ b/src/d/actor/d_a_obj_amiShutter.cpp @@ -4,570 +4,349 @@ */ #include "d/actor/d_a_obj_amiShutter.h" -#include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void __ct__18daAmiShutter_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__14daAmiShutter_cFv(); -extern "C" void CreateHeap__14daAmiShutter_cFv(); -extern "C" void create__14daAmiShutter_cFv(); -extern "C" void Execute__14daAmiShutter_cFPPA3_A4_f(); -extern "C" void moveShutter__14daAmiShutter_cFv(); -extern "C" void playerAreaCheck__14daAmiShutter_cFv(); -extern "C" void init_modeWait__14daAmiShutter_cFv(); -extern "C" void modeWait__14daAmiShutter_cFv(); -extern "C" void init_modeWaitEvent__14daAmiShutter_cFv(); -extern "C" void modeWaitEvent__14daAmiShutter_cFv(); -extern "C" void eventStart__14daAmiShutter_cFv(); -extern "C" void init_modeClose__14daAmiShutter_cFv(); -extern "C" void modeClose__14daAmiShutter_cFv(); -extern "C" void init_modeCloseEvent__14daAmiShutter_cFv(); -extern "C" void modeCloseEvent__14daAmiShutter_cFv(); -extern "C" void init_modeCloseEnd__14daAmiShutter_cFv(); -extern "C" void modeCloseEnd__14daAmiShutter_cFv(); -extern "C" void init_modeOpen__14daAmiShutter_cFv(); -extern "C" void modeOpen__14daAmiShutter_cFv(); -extern "C" void Draw__14daAmiShutter_cFv(); -extern "C" void Delete__14daAmiShutter_cFv(); -extern "C" static void daAmiShutter_Draw__FP14daAmiShutter_c(); -extern "C" static void daAmiShutter_Execute__FP14daAmiShutter_c(); -extern "C" static void daAmiShutter_Delete__FP14daAmiShutter_c(); -extern "C" static void daAmiShutter_Create__FP10fopAc_ac_c(); -extern "C" void __dt__18daAmiShutter_HIO_cFv(); -extern "C" void __sinit_d_a_obj_amiShutter_cpp(); -extern "C" static void func_80BA2278(); -extern "C" static void func_80BA2280(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void __dt__14daAmiShutter_cFv(); -extern "C" extern char const* const d_a_obj_amiShutter__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_28(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 struct_80450C98[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); +#include "d/actor/d_a_player.h" +#include "c/c_damagereaction.h" +#include "d/d_bg_w.h" // // Declarations: // /* ############################################################################################## */ -/* 80BA2390-80BA2394 000000 0004+00 5/5 0/0 0/0 .rodata @3655 */ -SECTION_RODATA static f32 const lit_3655 = 70.0f; -COMPILER_STRIP_GATE(0x80BA2390, &lit_3655); -/* 80BA2394-80BA2398 000004 0004+00 1/1 0/0 0/0 .rodata @3656 */ -SECTION_RODATA static f32 const lit_3656 = 400.0f; -COMPILER_STRIP_GATE(0x80BA2394, &lit_3656); - -/* 80BA23DC-80BA23E8 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80BA23E8-80BA23FC 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80BA23FC-80BA2408 -00001 000C+00 0/1 0/0 0/0 .data @3759 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3759[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA2408-80BA2414 -00001 000C+00 0/1 0/0 0/0 .data @3760 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3760[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWaitEvent__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA2414-80BA2420 -00001 000C+00 0/1 0/0 0/0 .data @3761 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3761[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeClose__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA2420-80BA242C -00001 000C+00 0/1 0/0 0/0 .data @3762 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3762[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeCloseEvent__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA242C-80BA2438 -00001 000C+00 0/1 0/0 0/0 .data @3763 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3763[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeCloseEnd__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA2438-80BA2444 -00001 000C+00 0/1 0/0 0/0 .data @3764 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3764[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOpen__14daAmiShutter_cFv, -}; -#pragma pop - -/* 80BA2444-80BA248C 000068 0048+00 0/1 0/0 0/0 .data mode_proc$3758 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[72] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80BA248C-80BA24AC -00001 0020+00 1/0 0/0 0/0 .data l_daAmiShutter_Method */ -static actor_method_class l_daAmiShutter_Method = { - (process_method_func)daAmiShutter_Create__FP10fopAc_ac_c, - (process_method_func)daAmiShutter_Delete__FP14daAmiShutter_c, - (process_method_func)daAmiShutter_Execute__FP14daAmiShutter_c, - 0, - (process_method_func)daAmiShutter_Draw__FP14daAmiShutter_c, -}; - -/* 80BA24AC-80BA24DC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_AmiShutter */ -extern actor_process_profile_definition g_profile_Obj_AmiShutter = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_AmiShutter, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daAmiShutter_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 521, // mPriority - &l_daAmiShutter_Method, // sub_method - 0x00044000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80BA24DC-80BA24F4 000100 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80BA24F4-80BA253C 000118 0048+00 2/2 0/0 0/0 .data __vt__14daAmiShutter_c */ -SECTION_DATA extern void* __vt__14daAmiShutter_c[18] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__14daAmiShutter_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__14daAmiShutter_cFPPA3_A4_f, - (void*)Draw__14daAmiShutter_cFv, - (void*)Delete__14daAmiShutter_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)NULL, - (void*)NULL, - (void*)func_80BA2280, - (void*)func_80BA2278, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, - (void*)__dt__14daAmiShutter_cFv, - (void*)eventStart__14daAmiShutter_cFv, -}; - -/* 80BA253C-80BA2548 000160 000C+00 2/2 0/0 0/0 .data __vt__18daAmiShutter_HIO_c */ -SECTION_DATA extern void* __vt__18daAmiShutter_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18daAmiShutter_HIO_cFv, -}; - -/* 80BA2548-80BA2554 00016C 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; +UNK_REL_DATA /* 80BA14CC-80BA1514 0000EC 0048+00 1/1 0/0 0/0 .text __ct__18daAmiShutter_HIO_cFv */ daAmiShutter_HIO_c::daAmiShutter_HIO_c() { - // NONMATCHING + mMaxOpenSpeed = 70.0f; + mMaxCloseSpeed = 70.0f; + field_0x11 = 3; + mRange = 400.f; + mWaitTime = 0; } -/* 80BA1514-80BA155C 000134 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING +#ifdef DEBUG +void daAmiShutter_HIO_c::genMessage(JORMContext* i_ctx) { + i_ctx->genSlider("open速度", &mMaxOpenSpeed, 0.1f, 1000.0f, + 0, NULL, 0xffff, 0xffff, 512, 24); + i_ctx->genSlider("close速度", &mMaxCloseSpeed, 0.1f, 1000.0f, + 0, NULL, 0xffff, 0xffff, 512, 24); + i_ctx->genSlider("range", &mRange, 0.1f, 1000.0f, + 0, NULL, 0xffff, 0xffff, 512, 24); + i_ctx->genSlider("waitTime", &mWaitTime, 0, 255, + 0, NULL, 0xffff, 0xffff, 512, 24); } +#endif + +/* 80BA256C-80BA2580 000014 0014+00 6/6 0/0 0/0 .bss l_HIO */ +static const daAmiShutter_HIO_c l_HIO; /* 80BA155C-80BA15E4 00017C 0088+00 2/2 0/0 0/0 .text setBaseMtx__14daAmiShutter_cFv */ void daAmiShutter_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* ############################################################################################## */ -/* 80BA23D4-80BA23D4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BA23D4 = "S_Zami"; -#pragma pop /* 80BA15E4-80BA1650 000204 006C+00 1/0 0/0 0/0 .text CreateHeap__14daAmiShutter_cFv */ -void daAmiShutter_c::CreateHeap() { - // NONMATCHING +int daAmiShutter_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes("S_Zami", 4); + JUT_ASSERT(167, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, + J3DMdlFlag_Unk80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + return 1; } /* ############################################################################################## */ -/* 80BA2398-80BA239C 000008 0004+00 1/1 0/0 0/0 .rodata @3739 */ -SECTION_RODATA static f32 const lit_3739 = -800.0f; -COMPILER_STRIP_GATE(0x80BA2398, &lit_3739); - -/* 80BA239C-80BA23A0 00000C 0004+00 1/2 0/0 0/0 .rodata @3740 */ -SECTION_RODATA static f32 const lit_3740 = 600.0f; -COMPILER_STRIP_GATE(0x80BA239C, &lit_3740); /* 80BA1650-80BA182C 000270 01DC+00 1/1 0/0 0/0 .text create__14daAmiShutter_cFv */ -void daAmiShutter_c::create() { - // NONMATCHING +cPhs__Step daAmiShutter_c::create() { + fopAcM_SetupActor(this, daAmiShutter_c); + cPhs__Step phaseStep = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, "S_Zami"); + + if (phaseStep == cPhs_COMPLEATE_e) { + cPhs__Step res = (cPhs__Step) MoveBGCreate("S_Zami", 7, + dBgS_MoveBGProc_Typical, 0x1a00, NULL); + + if (res == cPhs_ERROR_e) { + phaseStep = cPhs_ERROR_e; + return phaseStep; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + mType = getType(); + mPosZ = current.pos.z; + + if (mType == 0 || mType == 1) { + if (mType == 0 && cDmr_SkipInfo != 0 + && daPy_getPlayerActorClass()->current.pos.y > -800.0f){ + mMode = MODE_CLOSE_END; + } else { + mPos = current.pos; + current.pos.z -= 600.0f; + mOpen = true; + init_modeWaitEvent(); + } + } else { + mSwBit = getSwBit(); + mSwitch = fopAcM_isSwitch(this, mSwBit); + mOpen = false; + init_modeWait(); + } + setBaseMtx(); + #ifdef DEBUG + l_HIO.entryHIO("アミシャッター") + #endif + } + return phaseStep; } /* 80BA182C-80BA1888 00044C 005C+00 1/0 0/0 0/0 .text Execute__14daAmiShutter_cFPPA3_A4_f */ -void daAmiShutter_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daAmiShutter_c::Execute(Mtx** i_mtx) { + eventUpdate(); + moveShutter(); + *i_mtx = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; } /* ############################################################################################## */ -/* 80BA2560-80BA256C 000008 000C+00 1/1 0/0 0/0 .bss @3649 */ -static u8 lit_3649[12]; - -/* 80BA256C-80BA2580 000014 0014+00 6/6 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[20]; - -/* 80BA2580-80BA2584 000028 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80BA2580[4]; /* 80BA1888-80BA1974 0004A8 00EC+00 1/1 0/0 0/0 .text moveShutter__14daAmiShutter_cFv */ void daAmiShutter_c::moveShutter() { - // NONMATCHING + static daAmiShutter_c::modeProc const mode_proc[6] = { + &daAmiShutter_c::modeWait, + &daAmiShutter_c::modeWaitEvent, + &daAmiShutter_c::modeClose, + &daAmiShutter_c::modeCloseEvent, + &daAmiShutter_c::modeCloseEnd, + &daAmiShutter_c::modeOpen, + }; + + (this->*mode_proc[mMode])(); } /* ############################################################################################## */ -/* 80BA23A0-80BA23A8 000010 0004+04 0/4 0/0 0/0 .rodata @3822 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3822[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80BA23A0, &lit_3822); -#pragma pop - -/* 80BA23A8-80BA23B0 000018 0008+00 0/1 0/0 0/0 .rodata @3823 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3823[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA23A8, &lit_3823); -#pragma pop - -/* 80BA23B0-80BA23B8 000020 0008+00 0/1 0/0 0/0 .rodata @3824 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3824[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA23B0, &lit_3824); -#pragma pop - -/* 80BA23B8-80BA23C0 000028 0008+00 0/1 0/0 0/0 .rodata @3825 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3825[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA23B8, &lit_3825); -#pragma pop - -/* 80BA23C0-80BA23C4 000030 0004+00 0/1 0/0 0/0 .rodata @3826 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3826 = 50.0f; -COMPILER_STRIP_GATE(0x80BA23C0, &lit_3826); -#pragma pop /* 80BA1974-80BA1B4C 000594 01D8+00 1/1 0/0 0/0 .text playerAreaCheck__14daAmiShutter_cFv */ -void daAmiShutter_c::playerAreaCheck() { - // NONMATCHING +BOOL daAmiShutter_c::playerAreaCheck() { + BOOL inArea = FALSE; + if (mType == 0) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz posDiff = mPos - player->current.pos; + f32 distance = posDiff.absXZ(); + if (distance >= l_HIO.mRange + && player->current.pos.y > current.pos.y + && player->current.pos.y < current.pos.y + 50.f){ + inArea = TRUE; + } + } else if (dComIfGp_getLinkPlayer()->getFootOnGround()) { + inArea = TRUE; + } + return inArea; } /* 80BA1B4C-80BA1B58 00076C 000C+00 3/3 0/0 0/0 .text init_modeWait__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeWait() { - // NONMATCHING + mMode = MODE_WAIT; } /* 80BA1B58-80BA1BCC 000778 0074+00 1/0 0/0 0/0 .text modeWait__14daAmiShutter_cFv */ void daAmiShutter_c::modeWait() { - // NONMATCHING + u8 isSwitch = fopAcM_isSwitch(this, mSwBit); + if (mSwitch != isSwitch) { + mSwitch = isSwitch; + mSwitch == FALSE ? init_modeClose() : init_modeOpen(); + } } /* 80BA1BCC-80BA1BD8 0007EC 000C+00 1/1 0/0 0/0 .text init_modeWaitEvent__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeWaitEvent() { - // NONMATCHING + mMode = MODE_WAIT_EVENT; } /* 80BA1BD8-80BA1C90 0007F8 00B8+00 1/0 0/0 0/0 .text modeWaitEvent__14daAmiShutter_cFv */ void daAmiShutter_c::modeWaitEvent() { - // NONMATCHING + if (playerAreaCheck() == TRUE) { + if (getEvent() != 0xff) { + if (mType == 0 && fopAcM_isSwitch(this, 4) == TRUE) { + eventStart(); + } else { + orderEvent(getEvent(), 0xff, 1); + } + } else { + eventStart(); + } + } } /* 80BA1C90-80BA1CB4 0008B0 0024+00 2/1 0/0 0/0 .text eventStart__14daAmiShutter_cFv */ -void daAmiShutter_c::eventStart() { - // NONMATCHING +BOOL daAmiShutter_c::eventStart() { + init_modeCloseEvent(); + return TRUE; } /* ############################################################################################## */ -/* 80BA23C4-80BA23C8 000034 0004+00 3/6 0/0 0/0 .rodata @3890 */ -SECTION_RODATA static f32 const lit_3890 = 1.0f; -COMPILER_STRIP_GATE(0x80BA23C4, &lit_3890); - -/* 80BA23C8-80BA23CC 000038 0004+00 3/3 0/0 0/0 .rodata @3891 */ -SECTION_RODATA static f32 const lit_3891 = -1.0f; -COMPILER_STRIP_GATE(0x80BA23C8, &lit_3891); /* 80BA1CB4-80BA1D48 0008D4 0094+00 1/1 0/0 0/0 .text init_modeClose__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeClose() { - // NONMATCHING + mDoAud_seStart(Z2SE_OBJ_NET_SHTR_CL, ¤t.pos, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mpBgW->OffRoofRegist(); + mMode = MODE_CLOSE; } /* ############################################################################################## */ -/* 80BA23CC-80BA23D0 00003C 0004+00 0/1 0/0 0/0 .rodata @3900 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3900 = 0.5f; -COMPILER_STRIP_GATE(0x80BA23CC, &lit_3900); -#pragma pop - /* 80BA1D48-80BA1DCC 000968 0084+00 1/0 0/0 0/0 .text modeClose__14daAmiShutter_cFv */ void daAmiShutter_c::modeClose() { - // NONMATCHING + f32 distance = cLib_addCalc(¤t.pos.z, mPosZ, 0.5f, + l_HIO.mMaxCloseSpeed, 1.0f); + if (distance == 0.0f) { + mpBgW->OnRoofRegist(); + mOpen = false; + init_modeWait(); + } } /* 80BA1DCC-80BA1E60 0009EC 0094+00 1/1 0/0 0/0 .text init_modeCloseEvent__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeCloseEvent() { - // NONMATCHING + mDoAud_seStart(Z2SE_OBJ_NET_L_SHTR_CL, ¤t.pos, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mWaitTime = l_HIO.mWaitTime; + mMode = MODE_CLOSE_EVENT; } /* ############################################################################################## */ -/* 80BA23D0-80BA23D4 000040 0004+00 0/2 0/0 0/0 .rodata @3919 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3919 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BA23D0, &lit_3919); -#pragma pop /* 80BA1E60-80BA1EEC 000A80 008C+00 1/0 0/0 0/0 .text modeCloseEvent__14daAmiShutter_cFv */ void daAmiShutter_c::modeCloseEvent() { - // NONMATCHING + if (mWaitTime != 0) { + mWaitTime -= 1; + return; + } + + f32 distance = cLib_addCalc(¤t.pos.z, mPosZ, 0.2, + l_HIO.mMaxOpenSpeed, 1.0f); + if (distance == 0.0f) { + mOpen = false; + init_modeCloseEnd(); + } } /* 80BA1EEC-80BA1F7C 000B0C 0090+00 1/1 0/0 0/0 .text init_modeCloseEnd__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeCloseEnd() { - // NONMATCHING + if (mType == 0 && fopAcM_isSwitch(this, 4) == 0) { + daPy_getPlayerActorClass()->changeOriginalDemo(); + daPy_getPlayerActorClass()->changeDemoMode(daPy_demo_c::DEMO_TURN_BACK_e, + 0, 0,0); + } + mMode = MODE_CLOSE_END; } /* 80BA1F7C-80BA1F80 000B9C 0004+00 1/0 0/0 0/0 .text modeCloseEnd__14daAmiShutter_cFv */ void daAmiShutter_c::modeCloseEnd() { - /* empty function */ + // EMPTY METHOD } /* 80BA1F80-80BA2004 000BA0 0084+00 1/1 0/0 0/0 .text init_modeOpen__14daAmiShutter_cFv */ void daAmiShutter_c::init_modeOpen() { - // NONMATCHING + mDoAud_seStart(Z2SE_OBJ_NET_SHTR_OP, ¤t.pos, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mMode = MODE_OPEN; } /* 80BA2004-80BA2080 000C24 007C+00 1/0 0/0 0/0 .text modeOpen__14daAmiShutter_cFv */ void daAmiShutter_c::modeOpen() { - // NONMATCHING + f32 distance = cLib_addCalc(¤t.pos.z, mPosZ - 600.0f, 0.2, + l_HIO.mMaxOpenSpeed, 1.0f); + if (distance == 0.0f) { + mOpen = true; + init_modeWait(); + } } /* 80BA2080-80BA2124 000CA0 00A4+00 1/0 0/0 0/0 .text Draw__14daAmiShutter_cFv */ -void daAmiShutter_c::Draw() { - // NONMATCHING +int daAmiShutter_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; } /* 80BA2124-80BA2154 000D44 0030+00 1/0 0/0 0/0 .text Delete__14daAmiShutter_cFv */ -void daAmiShutter_c::Delete() { - // NONMATCHING +int daAmiShutter_c::Delete() { + dComIfG_resDelete(&mPhaseReq, "S_Zami"); + #ifdef DEBUG + l_HIO.removeHIO(); + #endif + + return 1; } /* 80BA2154-80BA2180 000D74 002C+00 1/0 0/0 0/0 .text daAmiShutter_Draw__FP14daAmiShutter_c */ -static void daAmiShutter_Draw(daAmiShutter_c* param_0) { - // NONMATCHING +int daAmiShutter_Draw(daAmiShutter_c* i_this) { + return i_this->MoveBGDraw(); } /* 80BA2180-80BA21A0 000DA0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Execute__FP14daAmiShutter_c */ -static void daAmiShutter_Execute(daAmiShutter_c* param_0) { - // NONMATCHING +int daAmiShutter_Execute(daAmiShutter_c* i_this) { + return i_this->MoveBGExecute(); } /* 80BA21A0-80BA21C0 000DC0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Delete__FP14daAmiShutter_c */ -static void daAmiShutter_Delete(daAmiShutter_c* param_0) { - // NONMATCHING +int daAmiShutter_Delete(daAmiShutter_c* i_this) { + fopAcM_GetID(i_this); + return i_this->MoveBGDelete(); } /* 80BA21C0-80BA21E0 000DE0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Create__FP10fopAc_ac_c */ -static void daAmiShutter_Create(fopAc_ac_c* param_0) { - // NONMATCHING +int daAmiShutter_Create(fopAc_ac_c* i_this) { + fopAcM_GetID(i_this); + return static_cast(i_this)->create(); } -/* 80BA21E0-80BA223C 000E00 005C+00 2/1 0/0 0/0 .text __dt__18daAmiShutter_HIO_cFv */ -daAmiShutter_HIO_c::~daAmiShutter_HIO_c() { - // NONMATCHING -} +/* 80BA248C-80BA24AC -00001 0020+00 1/0 0/0 0/0 .data l_daAmiShutter_Method */ +actor_method_class l_daAmiShutter_Method = { + (process_method_func)daAmiShutter_Create, + (process_method_func)daAmiShutter_Delete, + (process_method_func)daAmiShutter_Execute, + NULL, + (process_method_func)daAmiShutter_Draw, +}; -/* 80BA223C-80BA2278 000E5C 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_amiShutter_cpp */ -void __sinit_d_a_obj_amiShutter_cpp() { - // NONMATCHING -} -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80BA223C, __sinit_d_a_obj_amiShutter_cpp); -#pragma pop - -/* 80BA2278-80BA2280 000E98 0008+00 1/0 0/0 0/0 .text @1448@eventStart__14daAmiShutter_cFv */ -static void func_80BA2278() { - // NONMATCHING -} - -/* 80BA2280-80BA2288 000EA0 0008+00 1/0 0/0 0/0 .text @1448@__dt__14daAmiShutter_cFv */ -static void func_80BA2280() { - // NONMATCHING -} - -/* 80BA2288-80BA22D0 000EA8 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80BA22D0-80BA22D8 000EF0 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart()() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA22D8-80BA22E0 000EF8 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA22E0-80BA22E8 000F00 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA22E8-80BA237C 000F08 0094+00 2/1 0/0 0/0 .text __dt__14daAmiShutter_cFv */ -daAmiShutter_c::~daAmiShutter_c() { - // NONMATCHING -} - -/* 80BA23D4-80BA23D4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80BA24AC-80BA24DC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_AmiShutter */ +extern actor_process_profile_definition g_profile_Obj_AmiShutter = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_AmiShutter, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daAmiShutter_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 521, // mPriority + &l_daAmiShutter_Method, // sub_method + 0x00044000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType + }; diff --git a/src/d/actor/d_a_obj_kjgjs.cpp b/src/d/actor/d_a_obj_kjgjs.cpp index 0547318a16c..bb29eab4371 100644 --- a/src/d/actor/d_a_obj_kjgjs.cpp +++ b/src/d/actor/d_a_obj_kjgjs.cpp @@ -60,8 +60,7 @@ static const Vec l_cull_box[4] = { int daObjKJgjs_c::Create() { fopAcM_SetMtx(this, mMtx[1]); MTXCopy(mMtx[1], mpModel->mBaseTransformMtx); - dBgW* bgw_p = mpBgW; - bgw_p->field_0x91 |= 4; + mpBgW->OffRoofRegist(); if (!field_0x60c) { fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, l_cull_box[1].y, l_cull_box[1].z);