From 992e323ade82ee2deb2495ac0282f1c6bffc5a9f Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:36:09 -0700 Subject: [PATCH] e_gs / e_is done (#2474) * e_gs done * e_is done --- configure.py | 4 +- include/d/actor/d_a_e_gs.h | 35 +- include/d/actor/d_a_e_is.h | 60 +- include/d/actor/d_a_horse.h | 2 +- include/d/d_bg_pc.h | 4 +- include/d/d_bg_s_grp_pass_chk.h | 4 +- src/d/actor/d_a_e_gs.cpp | 469 +++++----- src/d/actor/d_a_e_is.cpp | 1545 +++++++++++++++---------------- src/d/d_bg_w_kcol.cpp | 60 +- 9 files changed, 1116 insertions(+), 1067 deletions(-) diff --git a/configure.py b/configure.py index fa1f768ec8a..4f3d3d9cae1 100755 --- a/configure.py +++ b/configure.py @@ -1660,13 +1660,13 @@ config.libs = [ ActorRel(NonMatching, "d_a_e_gi"), ActorRel(NonMatching, "d_a_e_gm"), ActorRel(Equivalent, "d_a_e_gob"), # weak func order - ActorRel(NonMatching, "d_a_e_gs"), + ActorRel(MatchingFor("GZ2E01"), "d_a_e_gs"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_hb_leaf"), ActorRel(NonMatching, "d_a_e_hm"), ActorRel(NonMatching, "d_a_e_hp"), ActorRel(NonMatching, "d_a_e_hz"), ActorRel(NonMatching, "d_a_e_hzelda"), - ActorRel(NonMatching, "d_a_e_is"), + ActorRel(MatchingFor("GZ2E01"), "d_a_e_is"), ActorRel(Equivalent, "d_a_e_kg"), ActorRel(Equivalent, "d_a_e_kk"), # weak func order ActorRel(NonMatching, "d_a_e_kr"), diff --git a/include/d/actor/d_a_e_gs.h b/include/d/actor/d_a_e_gs.h index 0d2da9476b1..1d775de9892 100644 --- a/include/d/actor/d_a_e_gs.h +++ b/include/d/actor/d_a_e_gs.h @@ -2,6 +2,7 @@ #define D_A_E_GS_H #include "f_op/f_op_actor_mng.h" +#include "d/d_cc_uty.h" /** * @ingroup actors-enemies @@ -11,16 +12,42 @@ * @details * */ -class e_gs_class : public fopEn_enemy_c { -private: - /* 0x5ac */ u8 field_0x5ac[0x6bc - 0x5ac]; +class e_gs_class { +public: + /* 0x000 */ fopEn_enemy_c enemy; + /* 0x5AC */ request_of_phase_process_class phase; + /* 0x5B4 */ s16 mode; + /* 0x5B6 */ u8 arg0; + /* 0x5B7 */ u8 arg1; + /* 0x5B8 */ u8 field_0x5B8[0x5C8 - 0x5B8]; + /* 0x5C8 */ mDoExt_McaMorfSO* model_morf; + /* 0x5CC */ int anm; + /* 0x5D0 */ mDoExt_invisibleModel invisible_model; + /* 0x5D8 */ f32 opacity; + /* 0x5DC */ Z2CreatureEnemy sound; + /* 0x680 */ s16 lifetime; + /* 0x682 */ s16 action; + /* 0x684 */ f32 player_dist; + /* 0x688 */ s16 angle_to_player; + /* 0x68A */ s16 timers[4]; + /* 0x692 */ s16 field_0x692; + /* 0x694 */ dCcU_AtInfo atInfo; + /* 0x6B8 */ u8 hio_init; }; STATIC_ASSERT(sizeof(e_gs_class) == 0x6bc); class daE_GS_HIO_c { +public: /* 806DF46C */ daE_GS_HIO_c(); - /* 806DFD5C */ ~daE_GS_HIO_c(); + /* 806DFD5C */ virtual ~daE_GS_HIO_c() {} + + /* 0x04 */ s8 id; + /* 0x08 */ f32 base_size; + /* 0x0C */ s16 appear_time_lag; + /* 0x10 */ f32 appear_alpha_speed; + /* 0x14 */ f32 disappear_alpha_speed; + /* 0x18 */ f32 react_distance; }; diff --git a/include/d/actor/d_a_e_is.h b/include/d/actor/d_a_e_is.h index 0faf949a1d3..8f651184ac6 100644 --- a/include/d/actor/d_a_e_is.h +++ b/include/d/actor/d_a_e_is.h @@ -1,6 +1,10 @@ #ifndef D_A_E_IS_H #define D_A_E_IS_H + #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" /** * @ingroup actors-enemies @@ -10,17 +14,63 @@ * @details Armos Titans are enemies from early, unreleased versions of the game. * */ -class e_is_class : public fopEn_enemy_c { - /* 806F76B4 */ e_is_class(); -private: - /* 0x5ac */ u8 field_0x5ac[0xcf8 - 0x5ac]; +class e_is_class { +public: + /* 0x000 */ fopEn_enemy_c enemy; + /* 0x5AC */ request_of_phase_process_class phase; + /* 0x5B4 */ u8 field_0x5b4; + /* 0x5B8 */ u32 swbit; + /* 0x5BC */ u32 swbit2; + /* 0x5C0 */ u32 swbit3; + /* 0x5C4 */ u32 field_0x5c4; + /* 0x5C8 */ mDoExt_McaMorfSO* model_morf; + /* 0x5CC */ Z2CreatureEnemy sound; + /* 0x670 */ int anm; + /* 0x674 */ f32 field_0x674; + /* 0x678 */ f32 poweron_color_strength_target; + /* 0x67C */ f32 poweron_color_strength; + /* 0x680 */ f32 core_color_strength_target; + /* 0x684 */ f32 core_color_strength; + /* 0x688 */ s8 field_0x688; + /* 0x68C */ u32 shadowId; + /* 0x690 */ s16 lifetime; + /* 0x692 */ s16 action; + /* 0x694 */ s16 mode; + /* 0x696 */ u8 field_0x696[0x6A6 - 0x696]; + /* 0x6A6 */ s16 angle_to_player; + /* 0x6A8 */ f32 player_distance; + /* 0x6AC */ f32 field_0x6ac; + /* 0x6B0 */ s16 timers[4]; + /* 0x6B8 */ s16 body_hit_invulnerability_timer; + /* 0x6BA */ s16 core_hit_invulnerability_timer; + /* 0x6BC */ s8 field_0x6bc; + /* 0x6BD */ s8 field_0x6bd; + /* 0x6C0 */ int swbit4; + /* 0x6C4 */ dBgS_AcchCir acchcir; + /* 0x704 */ dBgS_ObjAcch acch; + /* 0x8DC */ dCcD_Stts ccStts; + /* 0x918 */ dCcD_Sph at_sph; + /* 0xA50 */ dCcD_Sph core_sph; + /* 0xB88 */ dCcD_Cyl cc_cyl; + /* 0xCC4 */ dCcU_AtInfo atInfo; + /* 0xCE8 */ s8 field_0xce8; + /* 0xCE9 */ u8 field_0xCE9[0xCF4 - 0xCE9]; + /* 0xCF4 */ u8 hioInit; }; STATIC_ASSERT(sizeof(e_is_class) == 0xcf8); class daE_IS_HIO_c { +public: /* 806F5A4C */ daE_IS_HIO_c(); - /* 806F7AC4 */ ~daE_IS_HIO_c(); + /* 806F7AC4 */ virtual ~daE_IS_HIO_c() {} + + /* 0x04 */ s8 id; + /* 0x08 */ f32 base_size; + /* 0x0C */ f32 normal_speed; + /* 0x10 */ f32 attack_init_range; + /* 0x14 */ f32 search_dist; + /* 0x18 */ f32 hit_width; }; diff --git a/include/d/actor/d_a_horse.h b/include/d/actor/d_a_horse.h index ab9f7eca8fc..12243947781 100644 --- a/include/d/actor/d_a_horse.h +++ b/include/d/actor/d_a_horse.h @@ -243,7 +243,7 @@ public: void offEndResetStateFlg0(daHorse_ERFLG0 i_flag) { m_endResetStateFlg0 &= ~i_flag;} void onResetStateFlg0(daHorse_RFLG0 i_flag) { m_resetStateFlg0 |= i_flag;} void offNoDrawWait() { offStateFlg0(FLG0_NO_DRAW_WAIT); } - bool checkSpecialWallHit(const cXyz& param_0) { return (this->*m_checkSpecialWallHit)(param_0); } + bool checkSpecialWallHit(const cXyz& param_0) const { return (this->*m_checkSpecialWallHit)(param_0); } MtxP getSaddleMtx() { return m_model->getAnmMtx(21); } MtxP getRootMtx() { return m_model->getAnmMtx(0); } f32 getAnmFrameMax(int i_idx) const { return m_frameCtrl[i_idx].getEnd(); } diff --git a/include/d/d_bg_pc.h b/include/d/d_bg_pc.h index 9a27765da57..0b1837b1b4b 100644 --- a/include/d/d_bg_pc.h +++ b/include/d/d_bg_pc.h @@ -52,9 +52,9 @@ public: u8 getRoomPathPnt() const { return BGPC_GET_BITS(m_code.code2, 24, 8); } u8 getRoomInf() const { return BGPC_GET_BITS(m_code.code4, 0, 8); } - u32 maskNrm() { return BGPC_CHECK_BIT(m_code.code4, 8); } + u32 maskNrm() const { return BGPC_CHECK_BIT(m_code.code4, 8); } // BUG: Seems like this uses the same mask as maskNrm - u32 getWtr() { return BGPC_CHECK_BIT(m_code.code4, 8); } + u32 getWtr() const { return BGPC_CHECK_BIT(m_code.code4, 8); } u8 getSnd() const { return BGPC_GET_BITS(m_code.code4, 11, 8); } u8 getRoom() const { return BGPC_GET_BITS(m_code.code4, 20, 8); } diff --git a/include/d/d_bg_s_grp_pass_chk.h b/include/d/d_bg_s_grp_pass_chk.h index 301c6578133..865f7a34904 100644 --- a/include/d/d_bg_s_grp_pass_chk.h +++ b/include/d/d_bg_s_grp_pass_chk.h @@ -22,8 +22,8 @@ public: void OffNormalGrp() { mGrp &= ~NORMAL_GRP; } void OffFullGrp() { mGrp &= ~FULL_GRP; } void OnAll() { mGrp |= FULL_GRP; } - u32 MaskNormalGrp() const {return mGrp & NORMAL_GRP; } - u32 MaskWaterGrp() const {return mGrp & WATER_GRP; } + u32 MaskNormalGrp() { return mGrp & NORMAL_GRP; } + u32 MaskWaterGrp() { return mGrp & WATER_GRP; } private: /* 0x4 */ u32 mGrp; }; diff --git a/src/d/actor/d_a_e_gs.cpp b/src/d/actor/d_a_e_gs.cpp index b57c64ba5d2..14acc47bd35 100644 --- a/src/d/actor/d_a_e_gs.cpp +++ b/src/d/actor/d_a_e_gs.cpp @@ -4,112 +4,243 @@ */ #include "d/actor/d_a_e_gs.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" +#include "c/c_damagereaction.h" +/* 806DF46C-806DF4B4 0000EC 0048+00 1/1 0/0 0/0 .text __ct__12daE_GS_HIO_cFv */ +daE_GS_HIO_c::daE_GS_HIO_c() { + id = -1; + base_size = 1.2f; + appear_time_lag = 5; + appear_alpha_speed = 60.0f; + disappear_alpha_speed = 30.0f; + react_distance = 300.0f; +} +/* 806DF4B4-806DF560 000134 00AC+00 1/1 0/0 0/0 .text anm_init__FP10e_gs_classifUcf */ +static void anm_init(e_gs_class* a_this, int i_anm, f32 i_morf, u8 i_mode, f32 i_speed) { + a_this->model_morf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_gs", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f); + a_this->anm = i_anm; +} -// -// Forward References: -// +/* 806DF560-806DF660 0001E0 0100+00 1/0 0/0 0/0 .text daE_GS_Draw__FP10e_gs_class */ +static int daE_GS_Draw(e_gs_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; -extern "C" void __ct__12daE_GS_HIO_cFv(); -extern "C" static void anm_init__FP10e_gs_classifUcf(); -extern "C" static void daE_GS_Draw__FP10e_gs_class(); -extern "C" static void e_gs_wait__FP10e_gs_class(); -extern "C" static void action__FP10e_gs_class(); -extern "C" static void daE_GS_Execute__FP10e_gs_class(); -extern "C" static bool daE_GS_IsDelete__FP10e_gs_class(); -extern "C" static void daE_GS_Delete__FP10e_gs_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daE_GS_Create__FP10fopAc_ac_c(); -extern "C" void __dt__12daE_GS_HIO_cFv(); -extern "C" void __sinit_d_a_e_gs_cpp(); -extern "C" extern char const* const d_a_e_gs__stringBase0; + J3DModel* model = a_this->model_morf->getModel(); + if (a_this->opacity < 1.0f) { + return 1; + } -// -// External References: -// + g_env_light.settingTevStruct(7, &actor->current.pos, &actor->tevStr); + actor->tevStr.TevColor.a = (u8)a_this->opacity; + g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void create__21mDoExt_invisibleModelFP8J3DModelUc(); -extern "C" void entryDL__21mDoExt_invisibleModelFP4cXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void cDmrNowMidnaTalk__Fv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -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 getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void checkNowWolfEyeUp__9daPy_py_cFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cM_rndF__Ff(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxScale__FfffUc(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" void __register_global_object(); + J3DModelData* modelData = model->getModelData(); + u8 alpha = a_this->opacity; -// -// Declarations: -// + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + modelData->getMaterialNodePointer(i)->getTevKColor(3)->a = alpha; + } -/* ############################################################################################## */ -/* 806DFDF4-806DFDF8 000000 0004+00 3/3 0/0 0/0 .rodata @3646 */ -SECTION_RODATA static f32 const lit_3646 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x806DFDF4, &lit_3646); + a_this->invisible_model.entryDL(NULL); + return 1; +} -/* 806DFDF8-806DFDFC 000004 0004+00 0/1 0/0 0/0 .rodata @3647 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3647 = 60.0f; -COMPILER_STRIP_GATE(0x806DFDF8, &lit_3647); -#pragma pop +/* 806DFE98-806DFE9C 000008 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_HIOInit; -/* 806DFDFC-806DFE00 000008 0004+00 0/1 0/0 0/0 .rodata @3648 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3648 = 30.0f; -COMPILER_STRIP_GATE(0x806DFDFC, &lit_3648); -#pragma pop +/* 806DFEA8-806DFEC4 000018 001C+00 4/4 0/0 0/0 .bss l_HIO */ +static daE_GS_HIO_c l_HIO; -/* 806DFE00-806DFE04 00000C 0004+00 0/1 0/0 0/0 .rodata @3649 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3649 = 300.0f; -COMPILER_STRIP_GATE(0x806DFE00, &lit_3649); -#pragma pop +/* 806DF660-806DF7CC 0002E0 016C+00 1/1 0/0 0/0 .text e_gs_wait__FP10e_gs_class */ +static void e_gs_wait(e_gs_class* a_this) { + switch (a_this->mode) { + case 0: + anm_init(a_this, 6, 40.0f, 2, 1.0f); + a_this->mode = 1; + break; + case 1: + if (a_this->player_dist < l_HIO.react_distance - 50.0f) { + anm_init(a_this, 4, 10.0f, 0, 1.0f); + a_this->mode = 2; + } + break; + case 2: + if (a_this->model_morf->isStop()) { + anm_init(a_this, 5, 10.0f, 2, 1.0f); + a_this->mode = 3; + a_this->timers[1] = 20.0f + cM_rndF(20.0f); + } + break; + case 3: + if (a_this->player_dist > 50.0f + l_HIO.react_distance && a_this->timers[1] == 0) { + a_this->mode = 0; + } + break; + } +} + +/* 806DF7CC-806DF874 00044C 00A8+00 1/1 0/0 0/0 .text action__FP10e_gs_class */ +static void action(e_gs_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + cXyz sp14; + cXyz sp8; + a_this->player_dist = fopAcM_searchPlayerDistance(actor); + a_this->angle_to_player = fopAcM_searchPlayerAngleY(actor); + + switch (a_this->action) { + case 0: + e_gs_wait(a_this); + break; + } + + cLib_addCalcAngleS2(&actor->shape_angle.y, actor->current.angle.y, 2, 0x2000); + cLib_addCalcAngleS2(&actor->shape_angle.x, actor->current.angle.x, 2, 0x2000); + cLib_addCalcAngleS2(&actor->shape_angle.z, actor->current.angle.z, 2, 0x2000); +} + +/* 806DF874-806DFA48 0004F4 01D4+00 2/1 0/0 0/0 .text daE_GS_Execute__FP10e_gs_class */ +static int daE_GS_Execute(e_gs_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + f32 alpha_target = 0.0f; + f32 alpha_speed = l_HIO.disappear_alpha_speed; + + if (daPy_py_c::checkNowWolfPowerUp()) { + if (a_this->timers[0] == 0) { + alpha_target = 255.0f; + alpha_speed = l_HIO.appear_alpha_speed; + } + } else { + a_this->timers[0] = l_HIO.appear_time_lag; + } + + cLib_addCalc2(&a_this->opacity, alpha_target, 1.0f, alpha_speed); + + if (cDmrNowMidnaTalk() || dComIfGp_event_runCheck()) { + return 1; + } + + cXyz sp20; + cXyz sp14; + cXyz sp8; + a_this->lifetime++; + + for (int i = 0; i < 4; i++) { + if (a_this->timers[i] != 0) { + a_this->timers[i]--; + } + } + + if (a_this->field_0x692 != 0) { + a_this->field_0x692--; + } + + action(a_this); + + mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z); + mDoMtx_stack_c::YrotM(actor->shape_angle.y); + mDoMtx_stack_c::XrotM(actor->shape_angle.x); + mDoMtx_stack_c::ZrotM(actor->shape_angle.z); + mDoMtx_stack_c::scaleM(l_HIO.base_size, l_HIO.base_size, l_HIO.base_size); + a_this->model_morf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + + a_this->model_morf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + a_this->model_morf->modelCalc(); + return 1; +} + +/* 806DFA48-806DFA50 0006C8 0008+00 1/0 0/0 0/0 .text daE_GS_IsDelete__FP10e_gs_class */ +static int daE_GS_IsDelete(e_gs_class* a_this) { + return 1; +} + +/* 806DFA50-806DFAB8 0006D0 0068+00 1/0 0/0 0/0 .text daE_GS_Delete__FP10e_gs_class */ +static int daE_GS_Delete(e_gs_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + fopAcM_GetID(actor); + dComIfG_resDelete(&a_this->phase, "E_gs"); + + if (a_this->hio_init) { + l_HIOInit = FALSE; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (actor->heap != NULL) { + a_this->model_morf->stopZelAnime(); + } + + return 1; +} + +/* 806DFAB8-806DFC00 000738 0148+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + e_gs_class* a_this = (e_gs_class*)i_this; + + a_this->model_morf = new mDoExt_McaMorfSO((J3DModelData* )dComIfG_getObjectRes("E_gs", 9), NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_gs", 6), 2, 1.0f, 0, -1, &a_this->sound, 0x80000, 0x11000084); + if (a_this->model_morf == NULL || a_this->model_morf->getModel() == NULL) { + return 0; + } + + if (!a_this->invisible_model.create(a_this->model_morf->getModel(), 1)) { + return 0; + } + + MtxScale(0.0f, 0.0f, 0.0f, 0); + a_this->model_morf->getModel()->setBaseTRMtx(*calc_mtx); + return 1; +} + +/* 806DFC00-806DFD5C 000880 015C+00 1/0 0/0 0/0 .text daE_GS_Create__FP10fopAc_ac_c */ +static int daE_GS_Create(fopAc_ac_c* i_this) { + e_gs_class* a_this = (e_gs_class*)i_this; + fopAcM_SetupActor(i_this, e_gs_class); + + int phase_state = dComIfG_resLoad(&a_this->phase, "E_gs"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_gs PARAM %x\n", fopAcM_GetParam(i_this)); + a_this->arg0 = fopAcM_GetParam(i_this); + a_this->arg1 = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; + + OS_REPORT("E_GS//////////////E_GS SET 1 !!\n"); + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x4B000)) { + OS_REPORT("//////////////E_GS SET NON !!\n"); + return cPhs_ERROR_e; + } + + if (!l_HIOInit) { + a_this->hio_init = TRUE; + l_HIOInit = TRUE; + l_HIO.id = mDoHIO_CREATE_CHILD("幽霊兵士", &l_HIO); + } + + fopAcM_SetMtx(i_this, a_this->model_morf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(i_this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(i_this, 200.0f, 200.0f, 200.0f); + + i_this->health = 100; + i_this->field_0x560 = 100; + + a_this->sound.init(&i_this->current.pos, &i_this->eyePos, 3, 1); + a_this->atInfo.mpSound = &a_this->sound; + + daE_GS_Execute(a_this); + } + + return phase_state; +} /* 806DFE34-806DFE54 -00001 0020+00 1/0 0/0 0/0 .data l_daE_GS_Method */ static actor_method_class l_daE_GS_Method = { - (process_method_func)daE_GS_Create__FP10fopAc_ac_c, - (process_method_func)daE_GS_Delete__FP10e_gs_class, - (process_method_func)daE_GS_Execute__FP10e_gs_class, - (process_method_func)daE_GS_IsDelete__FP10e_gs_class, - (process_method_func)daE_GS_Draw__FP10e_gs_class, + (process_method_func)daE_GS_Create, + (process_method_func)daE_GS_Delete, + (process_method_func)daE_GS_Execute, + (process_method_func)daE_GS_IsDelete, + (process_method_func)daE_GS_Draw, }; /* 806DFE54-806DFE84 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_GS */ @@ -129,157 +260,3 @@ extern actor_process_profile_definition g_profile_E_GS = { fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 806DFE84-806DFE90 000050 000C+00 2/2 0/0 0/0 .data __vt__12daE_GS_HIO_c */ -SECTION_DATA extern void* __vt__12daE_GS_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_GS_HIO_cFv, -}; - -/* 806DF46C-806DF4B4 0000EC 0048+00 1/1 0/0 0/0 .text __ct__12daE_GS_HIO_cFv */ -daE_GS_HIO_c::daE_GS_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806DFE04-806DFE08 000010 0004+00 2/4 0/0 0/0 .rodata @3663 */ -SECTION_RODATA static u8 const lit_3663[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806DFE04, &lit_3663); - -/* 806DFE08-806DFE0C 000014 0004+00 1/1 0/0 0/0 .rodata @3664 */ -SECTION_RODATA static f32 const lit_3664 = -1.0f; -COMPILER_STRIP_GATE(0x806DFE08, &lit_3664); - -/* 806DFE2C-806DFE2C 000038 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_806DFE2C = "E_gs"; -#pragma pop - -/* 806DF4B4-806DF560 000134 00AC+00 1/1 0/0 0/0 .text anm_init__FP10e_gs_classifUcf */ -static void anm_init(e_gs_class* param_0, int param_1, f32 param_2, u8 param_3, f32 param_4) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806DFE0C-806DFE10 000018 0004+00 2/4 0/0 0/0 .rodata @3687 */ -SECTION_RODATA static f32 const lit_3687 = 1.0f; -COMPILER_STRIP_GATE(0x806DFE0C, &lit_3687); - -/* 806DF560-806DF660 0001E0 0100+00 1/0 0/0 0/0 .text daE_GS_Draw__FP10e_gs_class */ -static void daE_GS_Draw(e_gs_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806DFE10-806DFE14 00001C 0004+00 0/1 0/0 0/0 .rodata @3715 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3715 = 40.0f; -COMPILER_STRIP_GATE(0x806DFE10, &lit_3715); -#pragma pop - -/* 806DFE14-806DFE18 000020 0004+00 0/1 0/0 0/0 .rodata @3716 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3716 = 50.0f; -COMPILER_STRIP_GATE(0x806DFE14, &lit_3716); -#pragma pop - -/* 806DFE18-806DFE1C 000024 0004+00 0/1 0/0 0/0 .rodata @3717 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3717 = 10.0f; -COMPILER_STRIP_GATE(0x806DFE18, &lit_3717); -#pragma pop - -/* 806DFE1C-806DFE20 000028 0004+00 0/1 0/0 0/0 .rodata @3718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3718 = 20.0f; -COMPILER_STRIP_GATE(0x806DFE1C, &lit_3718); -#pragma pop - -/* 806DFE98-806DFE9C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_806DFE98[4]; - -/* 806DFE9C-806DFEA8 00000C 000C+00 1/1 0/0 0/0 .bss @3641 */ -static u8 lit_3641[12]; - -/* 806DFEA8-806DFEC4 000018 001C+00 4/4 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[28]; - -/* 806DF660-806DF7CC 0002E0 016C+00 1/1 0/0 0/0 .text e_gs_wait__FP10e_gs_class */ -static void e_gs_wait(e_gs_class* param_0) { - // NONMATCHING -} - -/* 806DF7CC-806DF874 00044C 00A8+00 1/1 0/0 0/0 .text action__FP10e_gs_class */ -static void action(e_gs_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806DFE20-806DFE24 00002C 0004+00 0/1 0/0 0/0 .rodata @3789 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3789 = 255.0f; -COMPILER_STRIP_GATE(0x806DFE20, &lit_3789); -#pragma pop - -/* 806DF874-806DFA48 0004F4 01D4+00 2/1 0/0 0/0 .text daE_GS_Execute__FP10e_gs_class */ -static void daE_GS_Execute(e_gs_class* param_0) { - // NONMATCHING -} - -/* 806DFA48-806DFA50 0006C8 0008+00 1/0 0/0 0/0 .text daE_GS_IsDelete__FP10e_gs_class */ -static bool daE_GS_IsDelete(e_gs_class* param_0) { - return true; -} - -/* 806DFA50-806DFAB8 0006D0 0068+00 1/0 0/0 0/0 .text daE_GS_Delete__FP10e_gs_class */ -static void daE_GS_Delete(e_gs_class* param_0) { - // NONMATCHING -} - -/* 806DFAB8-806DFC00 000738 0148+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806DFE24-806DFE28 000030 0004+00 1/1 0/0 0/0 .rodata @3893 */ -SECTION_RODATA static f32 const lit_3893 = -200.0f; -COMPILER_STRIP_GATE(0x806DFE24, &lit_3893); - -/* 806DFE28-806DFE2C 000034 0004+00 1/1 0/0 0/0 .rodata @3894 */ -SECTION_RODATA static f32 const lit_3894 = 200.0f; -COMPILER_STRIP_GATE(0x806DFE28, &lit_3894); - -/* 806DFC00-806DFD5C 000880 015C+00 1/0 0/0 0/0 .text daE_GS_Create__FP10fopAc_ac_c */ -static void daE_GS_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 806DFD5C-806DFDA4 0009DC 0048+00 2/1 0/0 0/0 .text __dt__12daE_GS_HIO_cFv */ -daE_GS_HIO_c::~daE_GS_HIO_c() { - // NONMATCHING -} - -/* 806DFDA4-806DFDE0 000A24 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_gs_cpp */ -void __sinit_d_a_e_gs_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x806DFDA4, __sinit_d_a_e_gs_cpp); -#pragma pop - -/* 806DFE2C-806DFE2C 000038 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_e_is.cpp b/src/d/actor/d_a_e_is.cpp index 617911f4019..197a81921af 100644 --- a/src/d/actor/d_a_e_is.cpp +++ b/src/d/actor/d_a_e_is.cpp @@ -4,795 +4,792 @@ */ #include "d/actor/d_a_e_is.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +enum daE_IS_ACTION { + ACTION_WAIT = 0, + ACTION_MOVE = 1, + ACTION_ATTACK = 3, + ACTION_TRAP = 4, + ACTION_POWEROFF = 5, -// -// Forward References: -// + ACTION_DAMAGE = 10, + ACTION_BREAK = 11, -extern "C" void __ct__12daE_IS_HIO_cFv(); -extern "C" static void anm_init__FP10e_is_classifUcf(); -extern "C" static void daE_IS_Draw__FP10e_is_class(); -extern "C" static void pl_check__FP10e_is_classfs(); -extern "C" static void s_stop_sub__FPvPv(); -extern "C" static void damage_check__FP10e_is_class(); -extern "C" static void e_is_wait__FP10e_is_class(); -extern "C" static void e_is_move__FP10e_is_class(); -extern "C" static void e_is_attack__FP10e_is_class(); -extern "C" static void e_is_trap__FP10e_is_class(); -extern "C" static void e_is_poweroff__FP10e_is_class(); -extern "C" static void e_is_damage__FP10e_is_class(); -extern "C" static void e_is_break__FP10e_is_class(); -extern "C" static void e_is_sekizou__FP10e_is_class(); -extern "C" static void action__FP10e_is_class(); -extern "C" static void anm_se_set__FP10e_is_class(); -extern "C" static void daE_IS_Execute__FP10e_is_class(); -extern "C" static bool daE_IS_IsDelete__FP10e_is_class(); -extern "C" static void daE_IS_Delete__FP10e_is_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daE_IS_Create__FP10fopAc_ac_c(); -extern "C" void __ct__10e_is_classFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__12daE_IS_HIO_cFv(); -extern "C" void __sinit_d_a_e_is_cpp(); -extern "C" static void func_806F7B48(); -extern "C" static void func_806F7B50(); -extern "C" extern char const* const d_a_e_is__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void fopAcM_otherBgCheck__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_plAngleCheck__FPC10fopAc_ac_cs(); -extern "C" void fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -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 -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void StartCAt__8dCcD_SphFR4cXyz(); -extern "C" void MoveCAt__8dCcD_SphFR4cXyz(); -extern "C" void def_se_set__FP10Z2CreatureP8cCcD_ObjUlP10fopAc_ac_c(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 806F7B6C-806F7B70 000000 0004+00 14/14 0/0 0/0 .rodata @3648 */ -SECTION_RODATA static f32 const lit_3648 = 1.0f; -COMPILER_STRIP_GATE(0x806F7B6C, &lit_3648); - -/* 806F7B70-806F7B74 000004 0004+00 0/1 0/0 0/0 .rodata @3649 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3649 = 7.0f; -COMPILER_STRIP_GATE(0x806F7B70, &lit_3649); -#pragma pop - -/* 806F7B74-806F7B78 000008 0004+00 0/1 0/0 0/0 .rodata @3650 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3650 = 300.0f; -COMPILER_STRIP_GATE(0x806F7B74, &lit_3650); -#pragma pop - -/* 806F7B78-806F7B7C 00000C 0004+00 0/2 0/0 0/0 .rodata @3651 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3651 = 200.0f; -COMPILER_STRIP_GATE(0x806F7B78, &lit_3651); -#pragma pop - -/* 806F7B7C-806F7B80 000010 0004+00 0/1 0/0 0/0 .rodata @3652 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3652 = 120.0f; -COMPILER_STRIP_GATE(0x806F7B7C, &lit_3652); -#pragma pop - -/* 806F7C1C-806F7C28 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, + ACTION_SEKIZOU = 100, }; -/* 806F7C28-806F7C3C 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 +UNK_REL_DATA -/* 806F7C3C-806F7C7C 000020 0040+00 0/1 0/0 0/0 .data at_sph_src$4258 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph at_sph_src = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x4, 0xd}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_NONE, 0x0, 0x2, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 30.0f} // mSph - } // mSphAttr -}; -#pragma pop +/* 806F5A4C-806F5A94 0000EC 0048+00 1/1 0/0 0/0 .text __ct__12daE_IS_HIO_cFv */ +daE_IS_HIO_c::daE_IS_HIO_c() { + id = -1; + base_size = 1.0f; + normal_speed = 7.0f; + attack_init_range = 300.0f; + search_dist = 200.0f; + hit_width = 120.0f; +} -/* 806F7C7C-806F7CC0 000060 0044+00 0/1 0/0 0/0 .data cc_cyl_src$4259 */ -#pragma push -#pragma force_active on -static dCcD_SrcCyl cc_cyl_src = { - { - {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x2}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {0.0f, 0.0f, 0.0f}, // mCenter - 200.0f, // mRadius - 250.0f // mHeight - } // mCyl -}; -#pragma pop +/* 806F5A94-806F5B40 000134 00AC+00 7/7 0/0 0/0 .text anm_init__FP10e_is_classifUcf */ +static void anm_init(e_is_class* a_this, int i_anm, f32 i_morf, u8 i_mode, f32 i_speed) { + a_this->model_morf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_IS", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f); + a_this->anm = i_anm; +} -/* 806F7CC0-806F7D00 0000A4 0040+00 0/1 0/0 0/0 .data core_sph_src$4260 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph core_sph_src = { +/* 806F5B40-806F5E38 0001E0 02F8+00 1/0 0/0 0/0 .text daE_IS_Draw__FP10e_is_class */ +static int daE_IS_Draw(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + J3DModel* model = a_this->model_morf->getModel(); + g_env_light.settingTevStruct(0, &actor->current.pos, &actor->tevStr); + g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr); + + J3DModelData* modelData = model->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* material = modelData->getMaterialNodePointer(i); + + if (i == 0) { + material->getTevColor(2)->r = 0; + material->getTevColor(2)->g = 242.0f * a_this->poweron_color_strength; + material->getTevColor(2)->b = 117.0f * a_this->poweron_color_strength; + } else if (i == 1) { + material->getTevColor(1)->r = 255.0f - (80.0f * a_this->core_color_strength); + material->getTevColor(1)->g = 255.0f - (10.0f * a_this->core_color_strength); + material->getTevColor(1)->b = 255.0f - (55.0f * a_this->core_color_strength); + + material->getTevColor(2)->r = 60.0f * a_this->core_color_strength; + material->getTevColor(2)->g = 225.0f * a_this->core_color_strength; + material->getTevColor(2)->b = 150.0f * a_this->core_color_strength; + } + } + + fopAcM_setEffectMtx(actor, modelData); + a_this->model_morf->entryDL(); + + cXyz sp14; + sp14.set(actor->current.pos.x, 50.0f + actor->current.pos.y + BREG_F(18), actor->current.pos.z); + a_this->shadowId = dComIfGd_setShadow(a_this->shadowId, 1, model, &sp14, 600.0f + BREG_F(19), 0.0f, actor->current.pos.y, a_this->acch.GetGroundH(), a_this->acch.m_gnd, &actor->tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + return 1; +} + +/* 806F5E38-806F5EB4 0004D8 007C+00 2/2 0/0 0/0 .text pl_check__FP10e_is_classfs */ +static BOOL pl_check(e_is_class* a_this, f32 i_srchRange, s16 i_srchAngle) { + fopAc_ac_c* actor = &a_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + if (a_this->player_distance < i_srchRange) { + s16 temp_r0 = actor->shape_angle.y - a_this->angle_to_player; + if (temp_r0 < i_srchAngle && temp_r0 > (s16)-i_srchAngle && !fopAcM_otherBgCheck(actor, player)) { + return TRUE; + } + } + + return FALSE; +} + +/* 806F5EB4-806F5F3C 000554 0088+00 1/1 0/0 0/0 .text s_stop_sub__FPvPv */ +static void* s_stop_sub(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_IS && i_data != i_actor && + ((e_is_class*)i_actor)->action == ACTION_POWEROFF && ((e_is_class*)i_actor)->mode == 10) { - {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdfd, 0x3}, 0x0}}, // mObj - {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph - } // mSphAttr -}; -#pragma pop + ((e_is_class*)i_actor)->action = ACTION_BREAK; + ((e_is_class*)i_actor)->mode = 0; + return i_actor; + } + + return NULL; +} + +/* 806F5F3C-806F6134 0005DC 01F8+00 1/1 0/0 0/0 .text damage_check__FP10e_is_class */ +static void damage_check(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + dComIfGp_getPlayer(0); + a_this->ccStts.Move(); + + if (a_this->core_hit_invulnerability_timer == 0 && a_this->core_sph.ChkTgHit()) { + a_this->core_hit_invulnerability_timer = 6; + a_this->atInfo.mpCollider = a_this->core_sph.GetTgHitObj(); + + cc_at_check(actor, &a_this->atInfo); + + if (a_this->atInfo.mpCollider->ChkAtType(AT_TYPE_40)) { + a_this->field_0xce8++; + if (a_this->field_0xce8 >= 3) { + a_this->action = ACTION_POWEROFF; + } else { + a_this->sound.startCreatureVoice(Z2SE_EN_KR_V_DAMAGE, -1); + a_this->action = ACTION_DAMAGE; + } + + a_this->mode = 0; + return; + } + + if (actor->health <= 0) { + a_this->action = ACTION_POWEROFF; + } else { + a_this->sound.startCreatureVoice(Z2SE_EN_KR_V_DAMAGE, -1); + a_this->action = ACTION_DAMAGE; + } + + a_this->mode = 0; + + cXyz eff_pos(a_this->core_sph.GetC()); + csXyz eff_rot(actor->shape_angle); + eff_rot.y -= 0x8000; + dComIfGp_particle_set(0x81D7, &eff_pos, &eff_rot, NULL); + return; + } + + if (a_this->body_hit_invulnerability_timer == 0 && a_this->cc_cyl.ChkTgHit()) { + def_se_set(&a_this->sound, a_this->cc_cyl.GetTgHitObj(), 0x2A, NULL); + a_this->body_hit_invulnerability_timer = 6; + } +} + +/* 806F6134-806F6320 0007D4 01EC+00 1/1 0/0 0/0 .text e_is_wait__FP10e_is_class */ +static void e_is_wait(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + actor->speedF = 0.0f; + s8 var_r29 = FALSE; + a_this->core_hit_invulnerability_timer = 5; + + switch (a_this->mode) { + case 0: + fopAcM_OffStatus(actor, 0); + actor->attention_info.flags = 0; + + if (a_this->field_0x5b4 == 1) { + anm_init(a_this, 0xB, 1.0f, 0, 0.0f); + } else { + anm_init(a_this, 0xA, 1.0f, 0, 0.0f); + } + + a_this->mode = 1; + a_this->poweron_color_strength_target = 0.0f; + a_this->core_color_strength_target = 0.0f; + break; + case 1: + if (a_this->field_0x5b4 == 0) { + if (dComIfGs_isSwitch(a_this->swbit2, fopAcM_GetRoomNo(actor))) { + var_r29 = TRUE; + } + } else if (!dComIfGs_isSwitch(a_this->swbit2, fopAcM_GetRoomNo(actor))) { + var_r29 = TRUE; + } + + if (a_this->field_0x6bd != 0 || (var_r29 && pl_check(a_this, a_this->field_0x6ac, 0x1000))) { + a_this->core_color_strength_target = 1.0f; + a_this->poweron_color_strength_target = 1.0f; + a_this->mode = 2; + } + break; + case 2: + if (a_this->core_color_strength >= 1.0f) { + a_this->mode = 3; + a_this->model_morf->setPlaySpeed(1.0f); + fopAcM_OnStatus(actor, 0); + actor->attention_info.flags = 4; + } + break; + case 3: + if (a_this->model_morf->isStop()) { + a_this->action = ACTION_MOVE; + a_this->mode = 0; + } + break; + } +} + +/* 806F7DD0-806F7DD4 000008 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_HIOInit; + +/* 806F7DE0-806F7DFC 000018 001C+00 4/4 0/0 0/0 .bss l_HIO */ +static daE_IS_HIO_c l_HIO; + +/* 806F6320-806F63FC 0009C0 00DC+00 1/1 0/0 0/0 .text e_is_move__FP10e_is_class */ +static void e_is_move(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + f32 speed_target = 0.0f; + + switch (a_this->mode) { + case 0: + anm_init(a_this, 0x10, 10.0f, 2, 1.0f); + a_this->mode = 1; + break; + case 1: + speed_target = l_HIO.normal_speed; + if (a_this->player_distance < l_HIO.attack_init_range) { + a_this->action = ACTION_ATTACK; + a_this->mode = 0; + } + break; + } + + cLib_addCalc2(&actor->speedF, speed_target, 1.0f, 1.0f); + cLib_addCalcAngleS2(&actor->current.angle.y, a_this->angle_to_player, 1, 0x200); +} + +/* 806F63FC-806F65BC 000A9C 01C0+00 1/1 0/0 0/0 .text e_is_attack__FP10e_is_class */ +static void e_is_attack(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + cXyz spC; + int anm_frame = a_this->model_morf->getFrame(); + cLib_addCalc0(&actor->speedF, 1.0f, 1.0f); + + switch (a_this->mode) { + case 0: + anm_init(a_this, 4, 10.0f, 0, 1.0f); + a_this->mode = 1; + break; + case 1: + if (anm_frame >= 25 && anm_frame <= 33) { + if (anm_frame == 25) { + a_this->sound.startCreatureSound(Z2SE_CM_KAZAKIRI_S, 0, -1); + a_this->field_0x688 = 1; + } else { + a_this->field_0x688 = 2; + } + } + + if (a_this->model_morf->isStop()) { + if (pl_check(a_this, 100000.0f, 0x1000)) { + a_this->action = ACTION_MOVE; + a_this->mode = 0; + break; + } + + anm_init(a_this, 0xC, 10.0f, 2, 1.0f); + a_this->mode = 2; + } + break; + case 2: + if (pl_check(a_this, 100000.0f, 0x1000)) { + a_this->action = ACTION_MOVE; + a_this->mode = 0; + break; + } + + cLib_addCalcAngleS2(&actor->current.angle.y, a_this->angle_to_player, 1, 0x200); + break; + } +} + +/* 806F65BC-806F67B0 000C5C 01F4+00 1/1 0/0 0/0 .text e_is_trap__FP10e_is_class */ +static void e_is_trap(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + cXyz sp18; + a_this->model_morf->getFrame(); + cLib_addCalc0(&actor->speedF, 1.0f, 1.0f); + + switch (a_this->mode) { + case 0: + a_this->core_hit_invulnerability_timer = 10; + + if (actor->current.pos.y - a_this->acch.GetGroundH() > 50.0f) { + a_this->mode = 1; + a_this->field_0x6bc = 1; + actor->speed.y = 20.0f + TREG_F(11); + a_this->core_sph.SetTgType(0xD8FBFDFF); + anm_init(a_this, 9, 2.0f, 0, 1.0f); + a_this->mode = 2; + } + break; + case 2: + if (a_this->model_morf->isStop()) { + anm_init(a_this, 0xD, 10.0f, 2, 1.0f); + a_this->mode = 2; + } + break; + case 1: + case 3: + break; + } + + if (a_this->field_0x6bc == 1 && a_this->acch.ChkGroundHit()) { + dComIfGp_getVibration().StartShock(YREG_S(2) + 5, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + a_this->sound.startCreatureSound(Z2SE_EN_MK_FALL_GROUND, 0, -1); + a_this->field_0x6bc++; + } + + if (a_this->anm == 0xD && a_this->model_morf->checkFrame(29.0f + YREG_F(7))) { + a_this->model_morf->setFrame(0.0f); + } + + cLib_addCalc2(&actor->current.pos.x, 0.0f, 0.5f, 3.0f); + cLib_addCalc2(&actor->current.pos.z, -1040.0f, 0.5f, 3.0f); +} + +/* 806F67B0-806F691C 000E50 016C+00 1/1 0/0 0/0 .text e_is_poweroff__FP10e_is_class */ +static void e_is_poweroff(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + a_this->core_hit_invulnerability_timer = 5; + fopAcM_OffStatus(actor, 0); + actor->attention_info.flags = 0; + + switch (a_this->mode) { + case 10: + break; + case 0: + a_this->field_0x674 = 1.0f; + a_this->poweron_color_strength_target = 0.0f; + a_this->core_color_strength_target = 0.0f; + a_this->timers[0] = 65; + a_this->mode = 1; + break; + case 1: + if (a_this->timers[0] == 0) { + a_this->mode = 10; + if (a_this->field_0x5b4 == 0) { + if (fpcM_Search(s_stop_sub, a_this)) { + a_this->action = ACTION_BREAK; + a_this->mode = 0; + } + } else { + dComIfGs_onSwitch(a_this->swbit, fopAcM_GetRoomNo(actor)); + dComIfGs_onSwitch(a_this->swbit3, fopAcM_GetRoomNo(actor)); + if (a_this->swbit4 != 0xFF) { + dComIfGs_onSwitch(a_this->swbit4, fopAcM_GetRoomNo(actor)); + } + } + } + break; + } + + cLib_addCalc0(&a_this->field_0x674, 1.0f, 0.01f); + a_this->model_morf->setPlaySpeed(a_this->field_0x674); + + cLib_addCalc0(&actor->speedF, 1.0f, 1.0f); +} + +/* 806F691C-806F6A38 000FBC 011C+00 1/1 0/0 0/0 .text e_is_damage__FP10e_is_class */ +static void e_is_damage(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + switch (a_this->mode) { + case 0: + if (a_this->field_0x6bc != 0) { + anm_init(a_this, 6, 5.0f, 0, 1.0f); + } else { + anm_init(a_this, 5, 5.0f, 0, 1.0f); + } + + a_this->mode = 1; + /* fallthrough */ + case 1: + if (a_this->model_morf->isStop()) { + if (a_this->field_0x6bc != 0) { + a_this->action = ACTION_TRAP; + anm_init(a_this, 0xD, 10.0f, 2, 1.0f); + a_this->mode = 2; + } else { + a_this->action = ACTION_MOVE; + a_this->mode = 0; + } + } + break; + } + + cLib_addCalc0(&actor->speedF, 1.0f, 2.0f); +} + +/* 806F6A38-806F6B68 0010D8 0130+00 1/1 0/0 0/0 .text e_is_break__FP10e_is_class */ +static void e_is_break(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + a_this->body_hit_invulnerability_timer = 5; + a_this->core_hit_invulnerability_timer = 5; + + switch (a_this->mode) { + case 0: + if (a_this->field_0x6bc != 0) { + anm_init(a_this, 8, 20.0f, 0, 1.0f); + } else { + anm_init(a_this, 7, 20.0f, 0, 1.0f); + } + + a_this->mode = 1; + a_this->core_color_strength_target = 0.0f; + a_this->core_color_strength = 0.0f; + /* fallthrough */ + case 1: + if (a_this->model_morf->isStop()) { + cXyz disappear_pos(actor->current.pos); + disappear_pos.y += 200.0f; + fopAcM_createDisappear(actor, &disappear_pos, 20, 0, actor->field_0x564); + fopAcM_delete(actor); + } + break; + } + + cLib_addCalc0(&actor->speedF, 1.0f, 2.0f); +} + +/* 806F6B68-806F6B7C 001208 0014+00 1/1 0/0 0/0 .text e_is_sekizou__FP10e_is_class */ +static void e_is_sekizou(e_is_class* a_this) { + a_this->model_morf->setPlaySpeed(0.0f); +} + +/* 806F6B7C-806F6D90 00121C 0214+00 1/1 0/0 0/0 .text action__FP10e_is_class */ +static void action(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + cXyz mae; + cXyz ato; + a_this->angle_to_player = fopAcM_searchPlayerAngleY(actor); + a_this->player_distance = fopAcM_searchPlayerDistance(actor); + a_this->field_0x6ac = 1000.0f + TREG_F(0); + + s8 var_r29 = 1; + switch (a_this->action) { + case ACTION_WAIT: + e_is_wait(a_this); + break; + case ACTION_MOVE: + e_is_move(a_this); + break; + case ACTION_ATTACK: + e_is_attack(a_this); + break; + case ACTION_TRAP: + e_is_trap(a_this); + var_r29 = 0; + break; + case ACTION_POWEROFF: + e_is_poweroff(a_this); + var_r29 = 0; + break; + case ACTION_DAMAGE: + e_is_damage(a_this); + var_r29 = 0; + break; + case ACTION_BREAK: + e_is_break(a_this); + var_r29 = 0; + break; + case ACTION_SEKIZOU: + e_is_sekizou(a_this); + var_r29 = 0; + break; + } + + cXyz* cc_move_p = a_this->ccStts.GetCCMoveP(); + if (cc_move_p != NULL) { + actor->current.pos += *cc_move_p * 0.5f; + } + + cLib_addCalcAngleS2(&actor->shape_angle.y, actor->current.angle.y, 4, 0x2000); + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + mae.x = 0.0f; + mae.y = 0.0f; + mae.z = actor->speedF; + MtxPosition(&mae, &ato); + actor->speed.x = ato.x; + actor->speed.z = ato.z; + actor->current.pos += actor->speed; + actor->speed.y += actor->gravity; + + a_this->acch.CrrPos(dComIfG_Bgsp()); + + if (var_r29 && actor->current.pos.y < actor->home.pos.y - 5.0f) { + a_this->action = ACTION_TRAP; + a_this->mode = 0; + } +} + +/* 806F6D90-806F6E58 001430 00C8+00 1/1 0/0 0/0 .text anm_se_set__FP10e_is_class */ +static void anm_se_set(e_is_class* a_this) { + if (a_this->anm == 0x10) { + if (a_this->model_morf->checkFrame(39.0f)) { + a_this->sound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1); + } else if (a_this->model_morf->checkFrame(19.0f)) { + a_this->sound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1); + } + } +} + +/* 806F6E58-806F7204 0014F8 03AC+00 2/1 0/0 0/0 .text daE_IS_Execute__FP10e_is_class */ +static int daE_IS_Execute(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + cXyz sp2C; + cXyz sp20; + a_this->lifetime++; + + for (int i = 0; i < 4; i++) { + if (a_this->timers[i] != 0) { + a_this->timers[i]--; + } + } + + if (a_this->body_hit_invulnerability_timer != 0) { + a_this->body_hit_invulnerability_timer--; + } + + if (a_this->core_hit_invulnerability_timer != 0) { + a_this->core_hit_invulnerability_timer--; + } + + cLib_addCalc2(&a_this->poweron_color_strength, a_this->poweron_color_strength_target, 1.0f, 0.02f); + cLib_addCalc2(&a_this->core_color_strength, a_this->core_color_strength_target, 1.0f, 0.02f); + + action(a_this); + damage_check(a_this); + + mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z); + mDoMtx_stack_c::YrotM(actor->shape_angle.y); + mDoMtx_stack_c::scaleM(l_HIO.base_size, l_HIO.base_size, l_HIO.base_size); + + J3DModel* model = a_this->model_morf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + a_this->model_morf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + anm_se_set(a_this); + a_this->model_morf->modelCalc(); + + sp20 = actor->current.pos; + + if (a_this->field_0x6bc != 0) { + sp20.y += 100.0f + YREG_F(14); + a_this->cc_cyl.SetR(150.0f + YREG_F(15)); + + if (fopAcM_plAngleCheck(actor, 0x4000) && a_this->core_hit_invulnerability_timer == 0) { + a_this->cc_cyl.OffTgSetBit(); + } else { + a_this->cc_cyl.OnTgSetBit(); + a_this->core_hit_invulnerability_timer = 1; + } + } else { + a_this->cc_cyl.SetR(80.0f); + } + + if (a_this->body_hit_invulnerability_timer != 0) { + sp20.y += 20000.0f; + } + + a_this->cc_cyl.SetC(sp20); + dComIfG_Ccsp()->Set(&a_this->cc_cyl); + + if (a_this->field_0x688 != 0) { + MTXCopy(model->getAnmMtx(0xA), *calc_mtx); + sp2C.set(0.0f, 0.0f, 0.0f); + MtxPosition(&sp2C, &sp20); + + if (a_this->field_0x688 == 1) { + a_this->at_sph.StartCAt(sp20); + } else { + a_this->at_sph.MoveCAt(sp20); + } + + a_this->at_sph.SetR(80.0f + TREG_F(8)); + a_this->field_0x688 = 0; + } else { + cXyz sp14(-30000.0f, 20000.0f, 15000.0f); + a_this->at_sph.SetC(actor->current.pos + sp14); + } + + dComIfG_Ccsp()->Set(&a_this->at_sph); + + MTXCopy(model->getAnmMtx(2), *calc_mtx); + sp2C.set(50.0f + YREG_F(0), 30.0f + YREG_F(1), YREG_F(2)); + MtxPosition(&sp2C, &sp20); + actor->eyePos = sp20; + actor->attention_info.position = actor->eyePos; + actor->attention_info.position.y += 150.0f + TREG_F(3); + + if (a_this->core_hit_invulnerability_timer != 0) { + sp20.x += 15350.0f; + } + + a_this->core_sph.SetC(sp20); + a_this->core_sph.SetR(50.0f); + dComIfG_Ccsp()->Set(&a_this->core_sph); + return 1; +} + +/* 806F7204-806F720C 0018A4 0008+00 1/0 0/0 0/0 .text daE_IS_IsDelete__FP10e_is_class */ +static int daE_IS_IsDelete(e_is_class* a_this) { + return 1; +} + +/* 806F720C-806F7274 0018AC 0068+00 1/0 0/0 0/0 .text daE_IS_Delete__FP10e_is_class */ +static int daE_IS_Delete(e_is_class* a_this) { + fopAc_ac_c* actor = &a_this->enemy; + + fopAcM_GetID(actor); + dComIfG_resDelete(&a_this->phase, "E_IS"); + + if (a_this->hioInit) { + l_HIOInit = 0; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (actor->heap != NULL) { + a_this->model_morf->stopZelAnime(); + } + + return 1; +} + +/* 806F7274-806F736C 001914 00F8+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + e_is_class* a_this = (e_is_class*)i_this; + + a_this->model_morf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_IS", 0x13), NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_IS", 0xE), 2, 1.0f, 0, -1, &a_this->sound, 0, 0x11020203); + if (a_this->model_morf == NULL || a_this->model_morf->getModel() == NULL) { + return 0; + } + + return 1; +} + +/* 806F736C-806F76B4 001A0C 0348+00 1/0 0/0 0/0 .text daE_IS_Create__FP10fopAc_ac_c */ +static int daE_IS_Create(fopAc_ac_c* i_this) { + e_is_class* a_this = (e_is_class*)i_this; + fopAcM_SetupActor(i_this, e_is_class); + + int phase_state = dComIfG_resLoad(&a_this->phase, "E_IS"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_IS PARAM %x\n", fopAcM_GetParam(i_this)); + a_this->field_0x5b4 = fopAcM_GetParam(i_this); + if (a_this->field_0x5b4 == 0xFF) { + a_this->field_0x5b4 = 0; + } + + a_this->swbit = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; + a_this->swbit2 = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; + a_this->swbit3 = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + + a_this->field_0x5c4 = i_this->current.angle.z & 0xFF; + i_this->current.angle.z = 0; + i_this->shape_angle.z = 0; + + OS_REPORT("E_IS//////////////E_IS SET 1 !!\n"); + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x4B000)) { + OS_REPORT("//////////////E_IS SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////E_IS SET 2 !!\n"); + if (l_HIOInit == 0) { + a_this->hioInit = 1; + l_HIOInit = 1; + l_HIO.id = mDoHIO_CREATE_CHILD("動くイデリア石像", &l_HIO); + } + + i_this->attention_info.flags = 4; + + fopAcM_SetMtx(i_this, a_this->model_morf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(i_this, -500.0f, -200.0f, -500.0f); + fopAcM_SetMax(i_this, 500.0f, 500.0f, 500.0f); + + i_this->health = 30; + i_this->field_0x560 = 30; + + a_this->ccStts.Init(250, 0, i_this); + + static dCcD_SrcSph at_sph_src = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x4, 0xd}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_NONE, 0x0, 0x2, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 30.0f} // mSph + } // mSphAttr + }; + + static dCcD_SrcCyl cc_cyl_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x5, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 200.0f, // mRadius + 250.0f // mHeight + } // mCyl + }; + + static dCcD_SrcSph core_sph_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdfd, 0x3}, 0x0}}, // mObj + {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; + + a_this->at_sph.Set(at_sph_src); + a_this->at_sph.SetStts(&a_this->ccStts); + + a_this->cc_cyl.Set(cc_cyl_src); + a_this->cc_cyl.SetStts(&a_this->ccStts); + a_this->cc_cyl.OnTgShield(); + a_this->cc_cyl.SetTgHitMark((CcG_Tg_HitMark)2); + + a_this->core_sph.Set(core_sph_src); + a_this->core_sph.SetStts(&a_this->ccStts); + + a_this->acch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &a_this->acchcir, fopAcM_GetSpeed_p(i_this), NULL, NULL); + a_this->acchcir.SetWall(50.0f, 50.0f); + + a_this->sound.init(&i_this->current.pos, &i_this->eyePos, 3, 1); + a_this->atInfo.mpSound = &a_this->sound; + i_this->gravity = -7.0f; + a_this->action = ACTION_WAIT; + + if (a_this->field_0x5b4 == 1 && dComIfGs_isSwitch(a_this->swbit, fopAcM_GetRoomNo(i_this))) { + a_this->action = ACTION_POWEROFF; + anm_init(a_this, 0xD, 10.0f, 2, 0.0f); + a_this->mode = 10; + a_this->field_0x6bc = 1; + i_this->current.pos.set(0.0f, 3650.0f, -1040.0f); + i_this->old = i_this->current; + i_this->home = i_this->current; + } + + daE_IS_Execute(a_this); + } + + return phase_state; +} /* 806F7D00-806F7D20 -00001 0020+00 1/0 0/0 0/0 .data l_daE_IS_Method */ static actor_method_class l_daE_IS_Method = { - (process_method_func)daE_IS_Create__FP10fopAc_ac_c, - (process_method_func)daE_IS_Delete__FP10e_is_class, - (process_method_func)daE_IS_Execute__FP10e_is_class, - (process_method_func)daE_IS_IsDelete__FP10e_is_class, - (process_method_func)daE_IS_Draw__FP10e_is_class, + (process_method_func)daE_IS_Create, + (process_method_func)daE_IS_Delete, + (process_method_func)daE_IS_Execute, + (process_method_func)daE_IS_IsDelete, + (process_method_func)daE_IS_Draw, }; /* 806F7D20-806F7D50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_IS */ extern actor_process_profile_definition g_profile_E_IS = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_E_IS, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(e_is_class), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 184, // mPriority - &l_daE_IS_Method, // sub_method - 0x00040100, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_E_IS, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(e_is_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 184, // mPriority + &l_daE_IS_Method, // sub_method + 0x00040100, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 806F7D50-806F7D5C 000134 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 806F7D5C-806F7D68 000140 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 806F7D68-806F7D74 00014C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 806F7D74-806F7D80 000158 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 806F7D80-806F7D8C 000164 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 806F7D8C-806F7D98 000170 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 806F7D98-806F7DBC 00017C 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_806F7B50, - (void*)NULL, - (void*)NULL, - (void*)func_806F7B48, -}; - -/* 806F7DBC-806F7DC8 0001A0 000C+00 2/2 0/0 0/0 .data __vt__12daE_IS_HIO_c */ -SECTION_DATA extern void* __vt__12daE_IS_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_IS_HIO_cFv, -}; - -/* 806F5A4C-806F5A94 0000EC 0048+00 1/1 0/0 0/0 .text __ct__12daE_IS_HIO_cFv */ -daE_IS_HIO_c::daE_IS_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7B80-806F7B84 000014 0004+00 3/13 0/0 0/0 .rodata @3666 */ -SECTION_RODATA static u8 const lit_3666[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806F7B80, &lit_3666); - -/* 806F7B84-806F7B88 000018 0004+00 1/1 0/0 0/0 .rodata @3667 */ -SECTION_RODATA static f32 const lit_3667 = -1.0f; -COMPILER_STRIP_GATE(0x806F7B84, &lit_3667); - -/* 806F7C14-806F7C14 0000A8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_806F7C14 = "E_IS"; -#pragma pop - -/* 806F5A94-806F5B40 000134 00AC+00 7/7 0/0 0/0 .text anm_init__FP10e_is_classifUcf */ -static void anm_init(e_is_class* param_0, int param_1, f32 param_2, u8 param_3, f32 param_4) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7B88-806F7B8C 00001C 0004+00 0/1 0/0 0/0 .rodata @3710 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3710 = 242.0f; -COMPILER_STRIP_GATE(0x806F7B88, &lit_3710); -#pragma pop - -/* 806F7B8C-806F7B90 000020 0004+00 0/1 0/0 0/0 .rodata @3711 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3711 = 117.0f; -COMPILER_STRIP_GATE(0x806F7B8C, &lit_3711); -#pragma pop - -/* 806F7B90-806F7B94 000024 0004+00 0/1 0/0 0/0 .rodata @3712 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3712 = 255.0f; -COMPILER_STRIP_GATE(0x806F7B90, &lit_3712); -#pragma pop - -/* 806F7B94-806F7B98 000028 0004+00 0/2 0/0 0/0 .rodata @3713 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3713 = 80.0f; -COMPILER_STRIP_GATE(0x806F7B94, &lit_3713); -#pragma pop - -/* 806F7B98-806F7B9C 00002C 0004+00 0/6 0/0 0/0 .rodata @3714 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3714 = 10.0f; -COMPILER_STRIP_GATE(0x806F7B98, &lit_3714); -#pragma pop - -/* 806F7B9C-806F7BA0 000030 0004+00 0/1 0/0 0/0 .rodata @3715 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3715 = 55.0f; -COMPILER_STRIP_GATE(0x806F7B9C, &lit_3715); -#pragma pop - -/* 806F7BA0-806F7BA4 000034 0004+00 0/1 0/0 0/0 .rodata @3716 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3716 = 60.0f; -COMPILER_STRIP_GATE(0x806F7BA0, &lit_3716); -#pragma pop - -/* 806F7BA4-806F7BA8 000038 0004+00 0/1 0/0 0/0 .rodata @3717 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3717 = 225.0f; -COMPILER_STRIP_GATE(0x806F7BA4, &lit_3717); -#pragma pop - -/* 806F7BA8-806F7BAC 00003C 0004+00 0/2 0/0 0/0 .rodata @3718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3718 = 150.0f; -COMPILER_STRIP_GATE(0x806F7BA8, &lit_3718); -#pragma pop - -/* 806F7BAC-806F7BB0 000040 0004+00 0/4 0/0 0/0 .rodata @3719 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3719 = 50.0f; -COMPILER_STRIP_GATE(0x806F7BAC, &lit_3719); -#pragma pop - -/* 806F7BB0-806F7BB4 000044 0004+00 0/1 0/0 0/0 .rodata @3720 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3720 = 600.0f; -COMPILER_STRIP_GATE(0x806F7BB0, &lit_3720); -#pragma pop - -/* 806F5B40-806F5E38 0001E0 02F8+00 1/0 0/0 0/0 .text daE_IS_Draw__FP10e_is_class */ -static void daE_IS_Draw(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F5E38-806F5EB4 0004D8 007C+00 2/2 0/0 0/0 .text pl_check__FP10e_is_classfs */ -static void pl_check(e_is_class* param_0, f32 param_1, s16 param_2) { - // NONMATCHING -} - -/* 806F5EB4-806F5F3C 000554 0088+00 1/1 0/0 0/0 .text s_stop_sub__FPvPv */ -static void s_stop_sub(void* param_0, void* param_1) { - // NONMATCHING -} - -/* 806F5F3C-806F6134 0005DC 01F8+00 1/1 0/0 0/0 .text damage_check__FP10e_is_class */ -static void damage_check(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F6134-806F6320 0007D4 01EC+00 1/1 0/0 0/0 .text e_is_wait__FP10e_is_class */ -static void e_is_wait(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7DD0-806F7DD4 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_806F7DD0[4]; - -/* 806F7DD4-806F7DE0 00000C 000C+00 1/1 0/0 0/0 .bss @3643 */ -static u8 lit_3643[12]; - -/* 806F7DE0-806F7DFC 000018 001C+00 4/4 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[28]; - -/* 806F6320-806F63FC 0009C0 00DC+00 1/1 0/0 0/0 .text e_is_move__FP10e_is_class */ -static void e_is_move(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BB4-806F7BB8 000048 0004+00 0/1 0/0 0/0 .rodata @3917 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3917 = 100000.0f; -COMPILER_STRIP_GATE(0x806F7BB4, &lit_3917); -#pragma pop - -/* 806F63FC-806F65BC 000A9C 01C0+00 1/1 0/0 0/0 .text e_is_attack__FP10e_is_class */ -static void e_is_attack(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BB8-806F7BBC 00004C 0004+00 0/2 0/0 0/0 .rodata @3965 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3965 = 20.0f; -COMPILER_STRIP_GATE(0x806F7BB8, &lit_3965); -#pragma pop - -/* 806F7BBC-806F7BC0 000050 0004+00 0/3 0/0 0/0 .rodata @3966 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3966 = 2.0f; -COMPILER_STRIP_GATE(0x806F7BBC, &lit_3966); -#pragma pop - -/* 806F65BC-806F67B0 000C5C 01F4+00 1/1 0/0 0/0 .text e_is_trap__FP10e_is_class */ -static void e_is_trap(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BC0-806F7BC4 000054 0004+00 0/0 0/0 0/0 .rodata @3967 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3967 = 29.0f; -COMPILER_STRIP_GATE(0x806F7BC0, &lit_3967); -#pragma pop - -/* 806F7BC4-806F7BC8 000058 0004+00 0/1 0/0 0/0 .rodata @3968 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3968 = 0.5f; -COMPILER_STRIP_GATE(0x806F7BC4, &lit_3968); -#pragma pop - -/* 806F7BC8-806F7BCC 00005C 0004+00 0/0 0/0 0/0 .rodata @3969 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3969 = 3.0f; -COMPILER_STRIP_GATE(0x806F7BC8, &lit_3969); -#pragma pop - -/* 806F7BCC-806F7BD0 000060 0004+00 0/1 0/0 0/0 .rodata @3970 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3970 = -1040.0f; -COMPILER_STRIP_GATE(0x806F7BCC, &lit_3970); -#pragma pop - -/* 806F7BD0-806F7BD4 000064 0004+00 0/1 0/0 0/0 .rodata @4007 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4007 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x806F7BD0, &lit_4007); -#pragma pop - -/* 806F67B0-806F691C 000E50 016C+00 1/1 0/0 0/0 .text e_is_poweroff__FP10e_is_class */ -static void e_is_poweroff(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BD4-806F7BD8 000068 0004+00 0/2 0/0 0/0 .rodata @4031 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4031 = 5.0f; -COMPILER_STRIP_GATE(0x806F7BD4, &lit_4031); -#pragma pop - -/* 806F691C-806F6A38 000FBC 011C+00 1/1 0/0 0/0 .text e_is_damage__FP10e_is_class */ -static void e_is_damage(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F6A38-806F6B68 0010D8 0130+00 1/1 0/0 0/0 .text e_is_break__FP10e_is_class */ -static void e_is_break(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F6B68-806F6B7C 001208 0014+00 1/1 0/0 0/0 .text e_is_sekizou__FP10e_is_class */ -static void e_is_sekizou(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BD8-806F7BDC 00006C 0004+00 0/1 0/0 0/0 .rodata @4102 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4102 = 1000.0f; -COMPILER_STRIP_GATE(0x806F7BD8, &lit_4102); -#pragma pop - -/* 806F6B7C-806F6D90 00121C 0214+00 1/1 0/0 0/0 .text action__FP10e_is_class */ -static void action(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BDC-806F7BE0 000070 0004+00 1/1 0/0 0/0 .rodata @4120 */ -SECTION_RODATA static f32 const lit_4120 = 39.0f; -COMPILER_STRIP_GATE(0x806F7BDC, &lit_4120); - -/* 806F7BE0-806F7BE4 000074 0004+00 1/1 0/0 0/0 .rodata @4121 */ -SECTION_RODATA static f32 const lit_4121 = 19.0f; -COMPILER_STRIP_GATE(0x806F7BE0, &lit_4121); - -/* 806F6D90-806F6E58 001430 00C8+00 1/1 0/0 0/0 .text anm_se_set__FP10e_is_class */ -static void anm_se_set(e_is_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7BE4-806F7BE8 000078 0004+00 0/1 0/0 0/0 .rodata @4205 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4205 = 1.0f / 50.0f; -COMPILER_STRIP_GATE(0x806F7BE4, &lit_4205); -#pragma pop - -/* 806F7BE8-806F7BEC 00007C 0004+00 0/1 0/0 0/0 .rodata @4206 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4206 = 100.0f; -COMPILER_STRIP_GATE(0x806F7BE8, &lit_4206); -#pragma pop - -/* 806F7BEC-806F7BF0 000080 0004+00 0/1 0/0 0/0 .rodata @4207 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4207 = 20000.0f; -COMPILER_STRIP_GATE(0x806F7BEC, &lit_4207); -#pragma pop - -/* 806F7BF0-806F7BF4 000084 0004+00 0/1 0/0 0/0 .rodata @4208 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4208 = -30000.0f; -COMPILER_STRIP_GATE(0x806F7BF0, &lit_4208); -#pragma pop - -/* 806F7BF4-806F7BF8 000088 0004+00 0/1 0/0 0/0 .rodata @4209 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4209 = 15000.0f; -COMPILER_STRIP_GATE(0x806F7BF4, &lit_4209); -#pragma pop - -/* 806F7BF8-806F7BFC 00008C 0004+00 0/1 0/0 0/0 .rodata @4210 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4210 = 30.0f; -COMPILER_STRIP_GATE(0x806F7BF8, &lit_4210); -#pragma pop - -/* 806F7BFC-806F7C00 000090 0004+00 0/1 0/0 0/0 .rodata @4211 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4211 = 15350.0f; -COMPILER_STRIP_GATE(0x806F7BFC, &lit_4211); -#pragma pop - -/* 806F6E58-806F7204 0014F8 03AC+00 2/1 0/0 0/0 .text daE_IS_Execute__FP10e_is_class */ -static void daE_IS_Execute(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F7204-806F720C 0018A4 0008+00 1/0 0/0 0/0 .text daE_IS_IsDelete__FP10e_is_class */ -static bool daE_IS_IsDelete(e_is_class* param_0) { - return true; -} - -/* 806F720C-806F7274 0018AC 0068+00 1/0 0/0 0/0 .text daE_IS_Delete__FP10e_is_class */ -static void daE_IS_Delete(e_is_class* param_0) { - // NONMATCHING -} - -/* 806F7274-806F736C 001914 00F8+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806F7C00-806F7C04 000094 0004+00 0/1 0/0 0/0 .rodata @4332 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4332 = -500.0f; -COMPILER_STRIP_GATE(0x806F7C00, &lit_4332); -#pragma pop - -/* 806F7C04-806F7C08 000098 0004+00 0/1 0/0 0/0 .rodata @4333 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4333 = -200.0f; -COMPILER_STRIP_GATE(0x806F7C04, &lit_4333); -#pragma pop - -/* 806F7C08-806F7C0C 00009C 0004+00 0/1 0/0 0/0 .rodata @4334 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4334 = 500.0f; -COMPILER_STRIP_GATE(0x806F7C08, &lit_4334); -#pragma pop - -/* 806F7C0C-806F7C10 0000A0 0004+00 0/1 0/0 0/0 .rodata @4335 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4335 = -7.0f; -COMPILER_STRIP_GATE(0x806F7C0C, &lit_4335); -#pragma pop - -/* 806F7C10-806F7C14 0000A4 0004+00 0/1 0/0 0/0 .rodata @4336 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4336 = 3650.0f; -COMPILER_STRIP_GATE(0x806F7C10, &lit_4336); -#pragma pop - -/* 806F736C-806F76B4 001A0C 0348+00 1/0 0/0 0/0 .text daE_IS_Create__FP10fopAc_ac_c */ -static void daE_IS_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 806F76B4-806F7868 001D54 01B4+00 1/1 0/0 0/0 .text __ct__10e_is_classFv */ -e_is_class::e_is_class() { - // NONMATCHING -} - -/* 806F7868-806F78B0 001F08 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 806F78B0-806F78F8 001F50 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 806F78F8-806F7940 001F98 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 806F7940-806F799C 001FE0 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 806F799C-806F7A0C 00203C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 806F7A0C-806F7A7C 0020AC 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 806F7A7C-806F7AC4 00211C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 806F7AC4-806F7B0C 002164 0048+00 2/1 0/0 0/0 .text __dt__12daE_IS_HIO_cFv */ -daE_IS_HIO_c::~daE_IS_HIO_c() { - // NONMATCHING -} - -/* 806F7B0C-806F7B48 0021AC 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_is_cpp */ -void __sinit_d_a_e_is_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x806F7B0C, __sinit_d_a_e_is_cpp); -#pragma pop - -/* 806F7B48-806F7B50 0021E8 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_806F7B48() { - // NONMATCHING -} - -/* 806F7B50-806F7B58 0021F0 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_806F7B50() { - // NONMATCHING -} - -/* 806F7C14-806F7C14 0000A8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/d_bg_w_kcol.cpp b/src/d/d_bg_w_kcol.cpp index c0948b2017b..4e0f64a6d05 100644 --- a/src/d/d_bg_w_kcol.cpp +++ b/src/d/d_bg_w_kcol.cpp @@ -14,12 +14,10 @@ dBgWKCol::~dBgWKCol() {} /* 8007E7D0-8007E804 079110 0034+00 0/0 1/1 0/0 .text initKCollision__8dBgWKColFPv */ void* dBgWKCol::initKCollision(void* i_kclData) { - KC_Header* header_p = (KC_Header*)i_kclData; - - header_p->m_pos_data = (Vec*)((u32)header_p + (u32)header_p->m_pos_data); - header_p->m_nrm_data = (Vec*)((u32)header_p + (u32)header_p->m_nrm_data); - header_p->m_prism_data = (KC_PrismData*)((u32)header_p + (u32)header_p->m_prism_data); - header_p->m_block_data = (KC_PrismData*)((u32)header_p + (u32)header_p->m_block_data); + ((KC_Header*)i_kclData)->m_pos_data = (Vec*)((u32)((KC_Header*)i_kclData) + (u32)((KC_Header*)i_kclData)->m_pos_data); + ((KC_Header*)i_kclData)->m_nrm_data = (Vec*)((u32)((KC_Header*)i_kclData) + (u32)((KC_Header*)i_kclData)->m_nrm_data); + ((KC_Header*)i_kclData)->m_prism_data = (KC_PrismData*)((u32)((KC_Header*)i_kclData) + (u32)((KC_Header*)i_kclData)->m_prism_data); + ((KC_Header*)i_kclData)->m_block_data = (KC_PrismData*)((u32)((KC_Header*)i_kclData) + (u32)((KC_Header*)i_kclData)->m_block_data); return i_kclData; } @@ -42,7 +40,8 @@ void dBgWKCol::create(void* pprism, void* plc) { /* 8007E850-8007E86C 079190 001C+00 1/1 0/0 0/0 .text getTriNrm__8dBgWKColCFP12KC_PrismDataPP3Vec */ void dBgWKCol::getTriNrm(KC_PrismData* pkc, Vec** nrm) const { - *nrm = &m_pkc_head->m_nrm_data[pkc->fnrm_i]; + Vec* var_r31 = &m_pkc_head->m_nrm_data[pkc->fnrm_i]; + *nrm = var_r31; } /* 8007E86C-8007E87C 0791AC 0010+00 1/0 0/0 0/0 .text ChkNotReady__8dBgWKColCFv */ @@ -80,7 +79,7 @@ cM3dGPla dBgWKCol::GetTriPla(int poly_index) const { Vec* tri_pos; getTri1Pos(pd, &tri_pos); - VECDotProduct(tri_nrm, tri_pos); + f32 ndot = -PSVECDotProduct(tri_nrm, tri_pos); cM3dGPla plane; plane.SetupNP(*tri_nrm, *tri_pos); @@ -114,27 +113,27 @@ bool dBgWKCol::GetTriPnt(KC_PrismData const* pd, Vec* ppos, Vec* param_3, Vec* edge_nrm3 = &m_pkc_head->m_nrm_data[pd->enrm3_i]; Vec sp64; - VECCrossProduct(face_nrm, edge_nrm1, &sp64); + PSVECCrossProduct(face_nrm, edge_nrm1, &sp64); Vec sp70; - VECCrossProduct(edge_nrm2, face_nrm, &sp70); + PSVECCrossProduct(edge_nrm2, face_nrm, &sp70); - f32 var_f30 = VECDotProduct(&sp64, edge_nrm3); + f32 var_f30 = PSVECDotProduct(&sp64, edge_nrm3); if (cM3d_IsZero(var_f30)) { return false; } - var_f30 = pd->height / var_f30; - VECScale(&sp64, &sp64, var_f30); - VECAdd(&sp64, ppos, param_4); - var_f30 = VECDotProduct(&sp70, edge_nrm3); - if (cM3d_IsZero(var_f30)) { + f32 var_f31 = pd->height / var_f30; + PSVECScale(&sp64, &sp64, var_f31); + PSVECAdd(&sp64, ppos, param_4); + f32 var_f29 = PSVECDotProduct(&sp70, edge_nrm3); + if (cM3d_IsZero(var_f29)) { return false; } - var_f30 = pd->height / var_f30; - VECScale(&sp70, &sp70, var_f30); - VECAdd(&sp70, ppos, param_3); + var_f31 = pd->height / var_f29; + PSVECScale(&sp70, &sp70, var_f31); + PSVECAdd(&sp70, ppos, param_3); return true; } @@ -171,13 +170,12 @@ bool dBgWKCol::chkPolyThrough(dBgPc* ppoly, cBgS_PolyPassChk* ppolypasschk, JUT_ASSERT(279, ppoly != 0); if (pgrppasschk != NULL) { + dBgS_GrpPassChk* var_r28 = (dBgS_GrpPassChk*)pgrppasschk; if (ppoly->maskNrm() == 0) { - if (((dBgS_GrpPassChk*)pgrppasschk)->MaskNormalGrp() == 0) { + if (var_r28->MaskNormalGrp() == 0) { return true; } - } else if (ppoly->getWtr() != 0 && - (((dBgS_GrpPassChk*)pgrppasschk)->MaskWaterGrp() == 0)) - { + } else if (ppoly->getWtr() != 0 && var_r28->MaskWaterGrp() == 0) { return true; } } @@ -218,8 +216,7 @@ bool dBgWKCol::chkPolyThrough(dBgPc* ppoly, cBgS_PolyPassChk* ppolypasschk, return true; } - if (ppoly->getWallCode() == 8 && polypass->ChkNoHorse()) - { + if (ppoly->getWallCode() == 8 && polypass->ChkNoHorse()) { return true; } @@ -229,7 +226,8 @@ bool dBgWKCol::chkPolyThrough(dBgPc* ppoly, cBgS_PolyPassChk* ppolypasschk, } if (polypass->ChkHorse() && dComIfGp_getHorseActor() != NULL) { - if (!dComIfGp_getHorseActor()->checkSpecialWallHit(param_4)) { + daHorse_c* horse_p = dComIfGp_getHorseActor(); + if (!horse_p->checkSpecialWallHit(param_4)) { return true; } } @@ -262,8 +260,8 @@ bool dBgWKCol::LineCheck(cBgS_LinChk* plinchk) { f32 var_f29 = 0.0f; cXyz sp144; - VECSubtract(pcross, pstart, &sp144); - VECScale(&sp144, &sp144, var_f25); + PSVECSubtract(pcross, pstart, &sp144); + PSVECScale(&sp144, &sp144, var_f25); cXyz sp138; cXyz sp12C; @@ -274,7 +272,7 @@ bool dBgWKCol::LineCheck(cBgS_LinChk* plinchk) { do { sp138 = sp12C; if (var_f29 + 500.0f <= var_f31) { - VECAdd(&sp12C, &sp144, &sp12C); + PSVECAdd(&sp12C, &sp144, &sp12C); } else { sp12C = *pcross; } @@ -283,11 +281,11 @@ bool dBgWKCol::LineCheck(cBgS_LinChk* plinchk) { cXyz sp114; cXyz sp108; - VECSubtract(&sp138, &m_pkc_head->m_area_min_pos, &sp114); + PSVECSubtract(&sp138, &m_pkc_head->m_area_min_pos, &sp114); sp108 = sp114; cXyz spFC; - VECSubtract(&sp12C, &m_pkc_head->m_area_min_pos, &spFC); + PSVECSubtract(&sp12C, &m_pkc_head->m_area_min_pos, &spFC); if (sp114.x > spFC.x) { sp114.x = spFC.x;