diff --git a/configure.py b/configure.py index 30931be90..65c6c8fb4 100755 --- a/configure.py +++ b/configure.py @@ -1466,7 +1466,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_tbox", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_tpota", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_tsubo"), - ActorRel(NonMatching, "d_a_warpdm20"), + ActorRel(Matching, "d_a_warpdm20", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_warphr", extra_cflags=['-pragma "nosyminline on"']), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_wbird"), ActorRel(NonMatching, "d_a_ykgr"), diff --git a/include/d/actor/d_a_warpdm20.h b/include/d/actor/d_a_warpdm20.h index cc558f08b..23ebba96b 100644 --- a/include/d/actor/d_a_warpdm20.h +++ b/include/d/actor/d_a_warpdm20.h @@ -2,44 +2,73 @@ #define D_A_WARPDM20_H #include "f_op/f_op_actor.h" +#include "d/d_particle.h" + +class mDoExt_btkAnm; +class mDoExt_brkAnm; +class mDoExt_bckAnm; class daWarpdm20_c : public fopAc_ac_c { public: - void set_mtx(); // weak but not inlined? - bool _delete(); - void CreateHeap(); + BOOL CreateHeap(); void CreateInit(); cPhs_State _create(); + inline void set_mtx(); bool _execute(); void normal_execute(); void demo_execute(); void demo_proc(); void initWait(int); - void actWait(int); + BOOL actWait(int); void initWait2(int); - void actWait2(int); + BOOL actWait2(int); void initWarp(int); - void actWarp(int); + BOOL actWarp(int); void initWaitDead(int); - void actWaitDead(int); + BOOL actWaitDead(int); void initDead(int); - void actDead(int); + BOOL actDead(int); void initReturnWait(int); - void actReturnWait(int); + BOOL actReturnWait(int); void eventOrder(); void checkOrder(); void animPlay(); void setEndAnm(); - void getSeaY(cXyz); - void set_effect(unsigned short); + f32 getSeaY(cXyz); + BOOL set_effect(unsigned short); void set_wpsenko(); void init_bck_anm(int); - void check_warp(); + BOOL check_warp(); bool _draw(); + static const char m_arcname[]; + static const s16 m_residxA[]; + static const s16 m_residxB[]; + static const u32 m_heapsize; + static const f32 m_warp_distance; + static const f32 m_eff_distance; + public: - /* Place member variables here */ -}; + /* 0x290 */ request_of_phase_process_class mPhase; + /* 0x298 */ J3DModel* mpModel; + /* 0x29C */ mDoExt_btkAnm* mpBtkAnm; + /* 0x2A0 */ mDoExt_brkAnm* mpBrkAnm; + /* 0x2A4 */ mDoExt_bckAnm* mpBckAnm; + /* 0x2A8 */ u8 m2A8[0x2AC - 0x2A8]; + /* 0x2AC */ dPa_rippleEcallBack mRippleCallback; + /* 0x2C0 */ u8 m2C0[0x2C8 - 0x2C0]; + /* 0x2C8 */ s32 m2C8; + /* 0x2CC */ u8 m2CC; + /* 0x2CD */ u8 m2CD[0x2D2 - 0x2CD]; + /* 0x2D2 */ s16 mEventIdx; + /* 0x2D4 */ u8 m2D4[0x2D6 - 0x2D4]; + /* 0x2D6 */ u8 m2D6; + /* 0x2D8 */ u32 m2D8; + /* 0x2DC */ s32 mStaffIdx; + /* 0x2E0 */ cXyz m2E0; + /* 0x2EC */ cXyz m2EC; + /* 0x2F8 */ bool m2F8; +}; // size = 0x2FC #endif /* D_A_WARPDM20_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index c636635b9..dc032bf98 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -11,6 +11,7 @@ #include "d/d_map.h" #include "d/d_particle.h" #include "d/d_resorce.h" +#include "d/d_s_actor_data_mng.h" #include "d/d_save.h" #include "d/d_stage.h" #include "d/d_vibration.h" @@ -116,78 +117,6 @@ public: /* 0x10 */ u16 mWaveFrame; }; -class dADM_CharTbl : public cDT { -public: - s32 GetNITEM0() { return mIndex_N_ITEM0; } - s32 GetNITEM1() { return mIndex_N_ITEM1; } - s32 GetNITEM2() { return mIndex_N_ITEM2; } - s32 GetNITEM3() { return mIndex_N_ITEM3; } - s32 GetNITEM4() { return mIndex_N_ITEM4; } - s32 GetNITEM5() { return mIndex_N_ITEM5; } - s32 GetNITEM6() { return mIndex_N_ITEM6; } - s32 GetNITEM7() { return mIndex_N_ITEM7; } - s32 GetNITEM8() { return mIndex_N_ITEM8; } - s32 GetNITEM9() { return mIndex_N_ITEM9; } - s32 GetNITEM10() { return mIndex_N_ITEM10; } - s32 GetNITEM11() { return mIndex_N_ITEM11; } - s32 GetNITEM12() { return mIndex_N_ITEM12; } - s32 GetNITEM13() { return mIndex_N_ITEM13; } - s32 GetNITEM14() { return mIndex_N_ITEM14; } - s32 GetNITEM15() { return mIndex_N_ITEM15; } - s32 GetPercent() { return mIndex_percent; } - s32 GetITEM0() { return mIndex_ITEM0; } - s32 GetITEM1() { return mIndex_ITEM1; } - s32 GetITEM2() { return mIndex_ITEM2; } - s32 GetITEM3() { return mIndex_ITEM3; } - s32 GetITEM4() { return mIndex_ITEM4; } - s32 GetITEM5() { return mIndex_ITEM5; } - s32 GetITEM6() { return mIndex_ITEM6; } - s32 GetITEM7() { return mIndex_ITEM7; } - -private: - /* 0x28 */ s32 mIndex_ARG; - /* 0x2C */ s32 mIndex_N_ITEM0; - /* 0x30 */ s32 mIndex_N_ITEM1; - /* 0x34 */ s32 mIndex_N_ITEM2; - /* 0x38 */ s32 mIndex_N_ITEM3; - /* 0x3C */ s32 mIndex_N_ITEM4; - /* 0x40 */ s32 mIndex_N_ITEM5; - /* 0x44 */ s32 mIndex_N_ITEM6; - /* 0x48 */ s32 mIndex_N_ITEM7; - /* 0x4C */ s32 mIndex_N_ITEM8; - /* 0x50 */ s32 mIndex_N_ITEM9; - /* 0x54 */ s32 mIndex_N_ITEM10; - /* 0x58 */ s32 mIndex_N_ITEM11; - /* 0x5C */ s32 mIndex_N_ITEM12; - /* 0x60 */ s32 mIndex_N_ITEM13; - /* 0x64 */ s32 mIndex_N_ITEM14; - /* 0x68 */ s32 mIndex_N_ITEM15; - /* 0x6C */ s32 mIndex_percent; - /* 0x70 */ s32 mIndex_ITEM0; - /* 0x74 */ s32 mIndex_ITEM1; - /* 0x78 */ s32 mIndex_ITEM2; - /* 0x7C */ s32 mIndex_ITEM3; - /* 0x80 */ s32 mIndex_ITEM4; - /* 0x84 */ s32 mIndex_ITEM5; - /* 0x88 */ s32 mIndex_ITEM6; - /* 0x8C */ s32 mIndex_ITEM7; -}; -STATIC_ASSERT(sizeof(dADM_CharTbl) == 0x90); - -class dADM { -public: - /* 0x00 */ int mBlockCount; - /* 0x04 */ void* mpData; - /* 0x08 */ dADM_CharTbl mCharTbl; - -public: - dADM(); - void FindTag(u32, u32*, u32*); - void SetData(void*); - - virtual ~dADM(); -}; - class dComIfG_camera_info_class { public: dComIfG_camera_info_class() {} diff --git a/include/d/d_particle.h b/include/d/d_particle.h index fcc40c01c..67fb3b43e 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -211,8 +211,8 @@ public: JPABaseEmitter* getEmitter() { return mpBaseEmitter; } void isStatus(u8) {} - void offStatus(int) {} - void onStatus(int) {} + void offStatus(int flag) { mFlags &= ~flag; } + void onStatus(int flag) { mFlags |= flag;} void remove() { end(); } void setRate(f32 rate) { mRate = rate; } diff --git a/include/d/d_s_actor_data_mng.h b/include/d/d_s_actor_data_mng.h index 29e2d2241..bd18f3968 100644 --- a/include/d/d_s_actor_data_mng.h +++ b/include/d/d_s_actor_data_mng.h @@ -2,6 +2,7 @@ #define D_S_ACTOR_DATA_MNG #include "SSystem/SComponent/c_data_tbl.h" +#include "global.h" class dADM_CharTbl : public cDT { public: @@ -15,14 +16,43 @@ public: void SetData(u32, u32, u32, u32, u32, u32, u32); void SetUpIndex(); int GetNameIndex2(const char*, int) const; + + s32 GetNITEM0() { return mIndex_N_ITEM[0]; } + s32 GetNITEM1() { return mIndex_N_ITEM[1]; } + s32 GetNITEM2() { return mIndex_N_ITEM[2]; } + s32 GetNITEM3() { return mIndex_N_ITEM[3]; } + s32 GetNITEM4() { return mIndex_N_ITEM[4]; } + s32 GetNITEM5() { return mIndex_N_ITEM[5]; } + s32 GetNITEM6() { return mIndex_N_ITEM[6]; } + s32 GetNITEM7() { return mIndex_N_ITEM[7]; } + s32 GetNITEM8() { return mIndex_N_ITEM[8]; } + s32 GetNITEM9() { return mIndex_N_ITEM[9]; } + s32 GetNITEM10() { return mIndex_N_ITEM[10]; } + s32 GetNITEM11() { return mIndex_N_ITEM[11]; } + s32 GetNITEM12() { return mIndex_N_ITEM[12]; } + s32 GetNITEM13() { return mIndex_N_ITEM[13]; } + s32 GetNITEM14() { return mIndex_N_ITEM[14]; } + s32 GetNITEM15() { return mIndex_N_ITEM[15]; } + s32 GetPercent() { return mIndex_percent; } + s32 GetITEM0() { return mIndex_ITEM[0]; } + s32 GetITEM1() { return mIndex_ITEM[1]; } + s32 GetITEM2() { return mIndex_ITEM[2]; } + s32 GetITEM3() { return mIndex_ITEM[3]; } + s32 GetITEM4() { return mIndex_ITEM[4]; } + s32 GetITEM5() { return mIndex_ITEM[5]; } + s32 GetITEM6() { return mIndex_ITEM[6]; } + s32 GetITEM7() { return mIndex_ITEM[7]; } }; +STATIC_ASSERT(sizeof(dADM_CharTbl) == 0x90); + class dADM { public: - /* 0x00 */ s32 mBlockCount; - /* 0x04 */ void *mpData; + /* 0x00 */ int mBlockCount; + /* 0x04 */ void* mpData; /* 0x08 */ dADM_CharTbl mCharTbl; +public: dADM(); virtual ~dADM(); bool FindTag(u32, u32*, u32*); diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string.h index 6721ecd7a..70f1fca9a 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/string.h @@ -9,9 +9,9 @@ extern "C" { #endif -SECTION_INIT void* memcpy(void* dest, const void* src, size_t n); -SECTION_INIT void __fill_mem(void* dest, int val, size_t count); -SECTION_INIT void* memset(void* dest, int val, size_t count); +void* memcpy(void* dest, const void* src, size_t n); +void __fill_mem(void* dest, int val, size_t count); +void* memset(void* dest, int val, size_t count); int memcmp(const void* lhs, const void* rhs, size_t count); void* __memrchr(const void* ptr, int ch, size_t count); diff --git a/src/PowerPC_EABI_Support/Runtime/Src/__mem.c b/src/PowerPC_EABI_Support/Runtime/Src/__mem.c index 734ec8867..126e382f1 100644 --- a/src/PowerPC_EABI_Support/Runtime/Src/__mem.c +++ b/src/PowerPC_EABI_Support/Runtime/Src/__mem.c @@ -1,7 +1,7 @@ #include "dolphin/types.h" #include "string.h" -void* memcpy(void* dst, const void* src, size_t n) +SECTION_INIT void* memcpy(void* dst, const void* src, size_t n) { const char* p; char* q; @@ -19,7 +19,7 @@ void* memcpy(void* dst, const void* src, size_t n) return (dst); } -void __fill_mem(void* dst, int val, u32 n) +SECTION_INIT void __fill_mem(void* dst, int val, u32 n) { u32 v = (u8)val; u32 i; @@ -76,9 +76,9 @@ void __fill_mem(void* dst, int val, u32 n) return; } -void* memset(void* dst, int val, size_t n) +SECTION_INIT void* memset(void* dst, int val, size_t n) { __fill_mem(dst, val, n); return (dst); -} \ No newline at end of file +} diff --git a/src/d/actor/d_a_npc_fa1.cpp b/src/d/actor/d_a_npc_fa1.cpp index 9fc11e595..c488b6887 100644 --- a/src/d/actor/d_a_npc_fa1.cpp +++ b/src/d/actor/d_a_npc_fa1.cpp @@ -224,8 +224,9 @@ BOOL daNpc_Fa1_c::_draw() { g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); g_env_light.setLightTevColorType(pJVar1, &tevStr); mpDoExt_McaMorf->entryDL(); - if (mGroundY != -G_CM3D_F_INF) { - dComIfGd_setSimpleShadow(¤t.pos, mGroundY, 10.0f, &m774, 0, 1.0f, + f32 ground_y = mGroundY; + if (ground_y != -G_CM3D_F_INF) { + dComIfGd_setSimpleShadow(¤t.pos, ground_y, 10.0f, &m774, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } dSnap_RegistFig(DSNAP_TYPE_FA, this, 1.0f, 1.0f, 1.0f); diff --git a/src/d/actor/d_a_warpdm20.cpp b/src/d/actor/d_a_warpdm20.cpp index e58ad305c..b2046d055 100644 --- a/src/d/actor/d_a_warpdm20.cpp +++ b/src/d/actor/d_a_warpdm20.cpp @@ -4,167 +4,518 @@ // #include "d/actor/d_a_warpdm20.h" +#include "d/actor/d_a_ship.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_sea.h" +#include "d/res/res_gdemo20.h" #include "d/d_procname.h" #include "d/d_priority.h" +#include "d/d_bg_s_func.h" +#include "d/d_com_inf_game.h" +#include "f_op/f_op_actor_mng.h" + +#include "weak_data_1811.h" // IWYU pragma: keep + +typedef void (daWarpdm20_c::*EventInitFunc)(int); +typedef BOOL (daWarpdm20_c::*EventActionFunc)(int); + +static EventInitFunc event_init_tbl[] = { + &daWarpdm20_c::initWait, + &daWarpdm20_c::initWarp, + &daWarpdm20_c::initDead, + &daWarpdm20_c::initWaitDead, + &daWarpdm20_c::initWait2, + &daWarpdm20_c::initReturnWait, +}; +static EventActionFunc event_action_tbl[] = { + &daWarpdm20_c::actWait, + &daWarpdm20_c::actWarp, + &daWarpdm20_c::actDead, + &daWarpdm20_c::actWaitDead, + &daWarpdm20_c::actWait2, + &daWarpdm20_c::actReturnWait, +}; + +const char daWarpdm20_c::m_arcname[] = "Gdemo20"; +const s16 daWarpdm20_c::m_residxA[] = {GDEMO20_BDL_GDEMO20_1, GDEMO20_BCK_GDEMO20_1, GDEMO20_BTK_GDEMO20_1, GDEMO20_BRK_GDEMO20_1}; +const s16 daWarpdm20_c::m_residxB[] = {-1, -1, -1, -1}; +const u32 daWarpdm20_c::m_heapsize = 0x3000; +const f32 daWarpdm20_c::m_warp_distance = 500.0f; +const f32 daWarpdm20_c::m_eff_distance = 2000.0f; + +namespace daWarpdm20_prm { +static inline u8 getType(daWarpdm20_c* i_this) { + return fopAcM_GetParam(i_this) & 0xF; +} +} // namespace daWarpdm20_prm /* 00000078-000000BC .text _delete__12daWarpdm20_cFv */ bool daWarpdm20_c::_delete() { - /* Nonmatching */ + mRippleCallback.remove(); + dComIfG_resDeleteDemo(&mPhase, m_arcname); + return true; } /* 000000BC-000000DC .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* a_this) { + return ((daWarpdm20_c*)a_this)->CreateHeap(); } /* 000000DC-0000046C .text CreateHeap__12daWarpdm20_cFv */ -void daWarpdm20_c::CreateHeap() { - /* Nonmatching */ +BOOL daWarpdm20_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, m_residxA[0]); + JUT_ASSERT(DEMO_SELECT(210, 215), modelData != NULL); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000222); + if (mpModel == NULL) { + return FALSE; + } + + mpBckAnm = NULL; + if (m_residxA[1] != -1) { + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname, m_residxA[1]); + JUT_ASSERT(DEMO_SELECT(228, 233), pbck != NULL); + + mpBckAnm = new mDoExt_bckAnm(); + if (mpBckAnm == NULL || !mpBckAnm->init(modelData, pbck, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) { + return FALSE; + } + mpBckAnm->setPlaySpeed(0.0f); + } + + mpBtkAnm = NULL; + if (m_residxA[2] != -1) { + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname, m_residxA[2]); + JUT_ASSERT(DEMO_SELECT(270, 275), pbtk != NULL); + + mpBtkAnm = new mDoExt_btkAnm(); + if (mpBtkAnm == NULL || !mpBtkAnm->init(modelData, pbtk, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, FALSE)) { + return FALSE; + } + mpBtkAnm->setPlaySpeed(0.0f); + } + + mpBrkAnm = NULL; + if (m_residxA[3] != -1) { + J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname, m_residxA[3]); + JUT_ASSERT(DEMO_SELECT(290, 295), pbrk != NULL); + + mpBrkAnm = new mDoExt_brkAnm(); + if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, pbrk, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, FALSE)) { + return FALSE; + } + mpBrkAnm->setPlaySpeed(0.0f); + } + return TRUE; } /* 000004B4-000005C8 .text CreateInit__12daWarpdm20_cFv */ void daWarpdm20_c::CreateInit() { - /* Nonmatching */ + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -300.0f, 0.0f, -300.0f, 300.0f, 500.0f, 300.0f); + fopAcM_setCullSizeFar(this, 1.0f); + set_mtx(); + m2E0 = current.pos; + m2EC.set(1.0f, 1.0f, 1.0f); + m2C8 = 0; + if (dComIfGs_isEventBit(0x2d08)) { + m2CC = 1; + setEndAnm(); + } + + mEventIdx = dComIfGp_evmng_getEventIdx("TO_HYRULE_WARP", 0xff); + + if (dComIfGs_isEventBit(0x2d02)) { + dComIfGs_onEventBit(0x1820); + } } /* 000005C8-000006A0 .text _create__12daWarpdm20_cFv */ cPhs_State daWarpdm20_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daWarpdm20_c); + + m2D6 = daWarpdm20_prm::getType(this); + cPhs_State PVar1 = dComIfG_resLoad(&mPhase, m_arcname); + if (PVar1 == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x3000)) { + return cPhs_ERROR_e; + } + CreateInit(); + } + return PVar1; } /* 00000744-00000820 .text set_mtx__12daWarpdm20_cFv */ void daWarpdm20_c::set_mtx() { - /* Nonmatching */ + cXyz sp08(current.pos); + sp08.y += 2000.0f; + + current.pos.y = getSeaY(sp08); +#if VERSION > VERSION_DEMO + if (current.pos.y == -G_CM3D_F_INF) { + current.pos.y = 0.0f; + } +#endif + m2E0.y = current.pos.y; + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000820-00000988 .text _execute__12daWarpdm20_cFv */ bool daWarpdm20_c::_execute() { - /* Nonmatching */ + if (demoActorID == 0) { + set_effect(0x83d8); + checkOrder(); + demo_proc(); + eventOrder(); + } else { + demo_execute(); + } + + if (m2CC != 0) { + fopAcM_seStart(this, JA_SE_OBJ_HL_WAPR_EFF, 0); + } + + set_mtx(); + return true; } /* 00000988-00000AF0 .text normal_execute__12daWarpdm20_cFv */ void daWarpdm20_c::normal_execute() { - /* Nonmatching */ + JPABaseEmitter* emitter = mRippleCallback.getEmitter(); + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 abs = (player->current.pos - current.pos).absXZ(); + f32 max = 2000.0f; + + if (dComIfGs_isEventBit(0x2d08)) { + m2CC = 1; + animPlay(); + if (emitter != NULL) { + if (abs < max) { + emitter->playCreateParticle(); + } else { + emitter->stopCreateParticle(); + } + } + + if (check_warp()) { + m2C8 = 1; + } + } } /* 00000AF0-00000BB4 .text demo_execute__12daWarpdm20_cFv */ void daWarpdm20_c::demo_execute() { - /* Nonmatching */ + m2CC = 1; + dDemo_actor_c* pdVar1 = dComIfGp_demo_getActor(demoActorID); + if (pdVar1 != NULL) { + m2D8 = pdVar1->getShapeId(); + if (m2D8 == 0) { + fopAcM_offDraw(this); + } else if (m2D8 == 1) { + set_effect(0x82bd); + if (mRippleCallback.getEmitter() != NULL) { + mRippleCallback.getEmitter()->playCreateParticle(); + } + set_wpsenko(); + fopAcM_onDraw(this); + animPlay(); + } + } } /* 00000BB4-00000CD0 .text demo_proc__12daWarpdm20_cFv */ void daWarpdm20_c::demo_proc() { - /* Nonmatching */ + static char* action_table[] = { + "WAIT", + "WARP", + "DEAD", + "WAIT_DEAD", + "WAIT2", + "RETURN_WAIT", + }; + + mStaffIdx = dComIfGp_evmng_getMyStaffId("Gdemo20"); + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk() && mStaffIdx != -1) { + s32 iVar1 = dComIfGp_evmng_getMyActIdx(mStaffIdx, action_table, ARRAY_SIZE(action_table), FALSE, 0); + if (iVar1 == -1) { + dComIfGp_evmng_cutEnd(mStaffIdx); + } else { + if (dComIfGp_evmng_getIsAddvance(mStaffIdx)) { + (this->*event_init_tbl[iVar1])(mStaffIdx); + } + + if ((this->*event_action_tbl[iVar1])(mStaffIdx)) { + dComIfGp_evmng_cutEnd(mStaffIdx); + } + } + } } /* 00000CD0-00000CEC .text initWait__12daWarpdm20_cFi */ void daWarpdm20_c::initWait(int) { - /* Nonmatching */ + if (mRippleCallback.getEmitter() != NULL) { + mRippleCallback.getEmitter()->playCreateParticle(); + } } /* 00000CEC-00000D10 .text actWait__12daWarpdm20_cFi */ -void daWarpdm20_c::actWait(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actWait(int) { + animPlay(); + return TRUE; } /* 00000D10-00000D44 .text initWait2__12daWarpdm20_cFi */ void daWarpdm20_c::initWait2(int) { - /* Nonmatching */ + dComIfGp_evmng_setGoal(¤t.pos); } /* 00000D44-00000D68 .text actWait2__12daWarpdm20_cFi */ -void daWarpdm20_c::actWait2(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actWait2(int) { + animPlay(); + return TRUE; } /* 00000D68-00000DE0 .text initWarp__12daWarpdm20_cFi */ void daWarpdm20_c::initWarp(int) { - /* Nonmatching */ + mDoAud_seStart(JA_SE_LK_HL_WAPR_D_IN); + dComIfGp_evmng_setGoal(¤t.pos); } /* 00000DE0-00000E04 .text actWarp__12daWarpdm20_cFi */ -void daWarpdm20_c::actWarp(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actWarp(int) { + animPlay(); + return TRUE; } /* 00000E04-00000F20 .text initWaitDead__12daWarpdm20_cFi */ void daWarpdm20_c::initWaitDead(int) { - /* Nonmatching */ + if (mRippleCallback.getEmitter() != NULL) { + mRippleCallback.getEmitter()->playCreateParticle(); + } + + cXyz sp08(current.pos); + sp08.z += 1000.0f; + dComIfGp_evmng_setGoal(&sp08); + m2CC = 1; + init_bck_anm(GDEMO20_BCK_GDEMO20_1A); + + if (mpBrkAnm != NULL) { + mpBrkAnm->setFrame(mpBrkAnm->getEndFrame()); + } + + if (mpBckAnm != NULL) { + mpBckAnm->setPlaySpeed(0.0f); + } +#if VERSION <= VERSION_JPN + mDoAud_seStart(JA_SE_LK_HL_WAPR_D_OUT); +#else + mDoAud_seStart(JA_SE_LK_HL_WAPR_U_OUT); +#endif } /* 00000F20-00000F94 .text actWaitDead__12daWarpdm20_cFi */ -void daWarpdm20_c::actWaitDead(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actWaitDead(int) { + if (mpBtkAnm != NULL) { + mpBtkAnm->setPlaySpeed(1.0f); + mpBtkAnm->play(); + } + + if (mpBrkAnm != NULL) { + mpBrkAnm->setPlaySpeed(1.0f); + mpBrkAnm->play(); + } + return TRUE; } /* 00000F94-00001004 .text initDead__12daWarpdm20_cFi */ void daWarpdm20_c::initDead(int) { - /* Nonmatching */ +#if VERSION >= VERSION_USA + fopAcM_seStart(this, JA_SE_OBJ_HL_WARP_OFF, 0); +#endif } /* 00001004-00001104 .text actDead__12daWarpdm20_cFi */ -void daWarpdm20_c::actDead(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actDead(int) { + BOOL uVar6 = FALSE; + if (mpBtkAnm != NULL) { + mpBtkAnm->setPlaySpeed(1.0f); + mpBtkAnm->play(); + } + + if (mpBrkAnm != NULL) { + mpBrkAnm->setPlaySpeed(1.0f); + mpBrkAnm->play(); + } + + if (mpBckAnm != NULL) { + mpBckAnm->setPlaySpeed(1.0f); + if (mpBckAnm->play()) { + uVar6 = TRUE; + m2CC = 0; + } + } + + JPABaseEmitter* emitter = mRippleCallback.getEmitter(); + if (emitter != NULL) { + cLib_chasePos(&m2EC, cXyz::Zero, 0.2f); + JGeometry::TVec3 scale = m2EC; + emitter->setGlobalScale(scale); + } + return uVar6; } /* 00001104-00001174 .text initReturnWait__12daWarpdm20_cFi */ void daWarpdm20_c::initReturnWait(int) { - /* Nonmatching */ + if (mRippleCallback.getEmitter() != NULL) { + mRippleCallback.getEmitter()->playCreateParticle(); + } +#if VERSION <= VERSION_JPN + mDoAud_seStart(JA_SE_LK_HL_WAPR_D_OUT); +#else + mDoAud_seStart(JA_SE_LK_HL_WAPR_U_OUT); +#endif } /* 00001174-00001198 .text actReturnWait__12daWarpdm20_cFi */ -void daWarpdm20_c::actReturnWait(int) { - /* Nonmatching */ +BOOL daWarpdm20_c::actReturnWait(int) { + animPlay(); + return TRUE; } /* 00001198-000011F4 .text eventOrder__12daWarpdm20_cFv */ void daWarpdm20_c::eventOrder() { - /* Nonmatching */ + if (m2C8 == 1) { + fopAcM_orderOtherEventId(this, mEventIdx, 0xff, 0xffff, 0, 1); + eventInfo.onCondition(2); + } } /* 000011F4-000012B4 .text checkOrder__12daWarpdm20_cFv */ void daWarpdm20_c::checkOrder() { - /* Nonmatching */ + if (eventInfo.checkCommandDemoAccrpt()) { + if (dComIfGp_evmng_startCheck(mEventIdx) && m2C8 != 0) { + m2C8 = 0; + } + + if (dComIfGp_evmng_endCheck(mEventIdx)) { + dComIfGp_event_reset(); + fopAcM_delete(this); + } + } else if (m2C8 == 0 && !dComIfGp_event_runCheck()) { + normal_execute(); + } } /* 000012B4-00001348 .text animPlay__12daWarpdm20_cFv */ void daWarpdm20_c::animPlay() { - /* Nonmatching */ + if (mpBtkAnm != NULL) { + mpBtkAnm->setPlaySpeed(1.0f); + mpBtkAnm->play(); + } + + if (mpBrkAnm != NULL) { + mpBrkAnm->setPlaySpeed(1.0f); + mpBrkAnm->play(); + } + + if (mpBckAnm != NULL) { + mpBckAnm->setPlaySpeed(1.0f); + mpBckAnm->play(); + } } /* 00001348-000013C4 .text setEndAnm__12daWarpdm20_cFv */ void daWarpdm20_c::setEndAnm() { - /* Nonmatching */ + if (mpBckAnm != NULL) { + mpBckAnm->setFrame(mpBckAnm->getEndFrame()); + } + + if (mpBrkAnm != NULL) { + mpBrkAnm->setFrame(mpBrkAnm->getEndFrame()); + } } /* 000013C4-00001418 .text getSeaY__12daWarpdm20_cF4cXyz */ -void daWarpdm20_c::getSeaY(cXyz) { - /* Nonmatching */ +f32 daWarpdm20_c::getSeaY(cXyz arg1) { + f32 fVar3; + if (daSea_ChkArea(arg1.x, arg1.z)) { + fVar3 = daSea_calcWave(arg1.x, arg1.z); + } else { + fVar3 = dBgS_ObjGndChk_Wtr_Func(arg1); + } + return fVar3; } /* 00001418-000014CC .text set_effect__12daWarpdm20_cFUs */ -void daWarpdm20_c::set_effect(unsigned short) { - /* Nonmatching */ +BOOL daWarpdm20_c::set_effect(unsigned short arg1) { + BOOL ret; + + if (mRippleCallback.getEmitter() == NULL) { + dComIfGp_particle_setShipTail(arg1, &m2E0, NULL, &m2EC, 0xff, &mRippleCallback); + mRippleCallback.offStatus(1); + mRippleCallback.setRate(7.0f); + if (mRippleCallback.getEmitter() != NULL) { + mRippleCallback.getEmitter()->stopCreateParticle(); + } + ret = TRUE; + } else { + ret = FALSE; + } + return ret; } /* 000014CC-00001550 .text set_wpsenko__12daWarpdm20_cFv */ void daWarpdm20_c::set_wpsenko() { - /* Nonmatching */ + if (!m2F8) { + dComIfGp_particle_set(dPa_name::ID_SCENE_82BC, ¤t.pos); + m2F8 = true; + } } /* 00001550-000015F0 .text init_bck_anm__12daWarpdm20_cFi */ -void daWarpdm20_c::init_bck_anm(int) { - /* Nonmatching */ +void daWarpdm20_c::init_bck_anm(int arg1) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, m_residxA[0]); + J3DAnmTransform* anmTransform = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname, arg1); + mpBckAnm->init(modelData, anmTransform, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true); } /* 000015F0-000016EC .text check_warp__12daWarpdm20_cFv */ -void daWarpdm20_c::check_warp() { - /* Nonmatching */ +BOOL daWarpdm20_c::check_warp() { + daShip_c* ship = dComIfGp_getShipActor(); + f32 max = 500.0f; + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && ship != NULL) { + f32 abs = (ship->current.pos - current.pos).absXZ(); + if (abs < max) { + return TRUE; + } + } + return FALSE; } /* 000016EC-000017C0 .text _draw__12daWarpdm20_cFv */ bool daWarpdm20_c::_draw() { - /* Nonmatching */ + if (m2CC == 0) { + return true; + } + + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mpModel, &tevStr); + + if (mpBtkAnm != NULL) { + mpBtkAnm->entry(mpModel->getModelData()); + } + + if (mpBrkAnm != NULL) { + mpBrkAnm->entry(mpModel->getModelData()); + } + + if (mpBckAnm != NULL) { + mpBckAnm->entry(mpModel->getModelData()); + } + mDoExt_modelUpdateDL(mpModel); + return true; } /* 000017C0-000017E0 .text daWarpdm20_Create__FPv */