diff --git a/configure.py b/configure.py index b0589ccd482..bea9bd7ec48 100755 --- a/configure.py +++ b/configure.py @@ -1957,7 +1957,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_kage"), ActorRel(NonMatching, "d_a_obj_kago"), ActorRel(NonMatching, "d_a_obj_kaisou"), - ActorRel(NonMatching, "d_a_obj_kamakiri"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kamakiri"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kantera"), ActorRel(NonMatching, "d_a_obj_katatsumuri"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kazeneko"), diff --git a/include/d/actor/d_a_npc_worm.h b/include/d/actor/d_a_npc_worm.h index 5dc4035056d..ae8a3408f77 100644 --- a/include/d/actor/d_a_npc_worm.h +++ b/include/d/actor/d_a_npc_worm.h @@ -14,7 +14,7 @@ */ class npc_worm_class : public dInsect_c { public: - bool check_release() { return field_0x56C == 1; } + bool check_release() { return field_0x56c == 1; } /* 0x590 */ request_of_phase_process_class mPhase; /* 0x598 */ u8 field_0x598; diff --git a/include/d/actor/d_a_obj_kamakiri.h b/include/d/actor/d_a_obj_kamakiri.h index 557d996fb7a..94004759d57 100644 --- a/include/d/actor/d_a_obj_kamakiri.h +++ b/include/d/actor/d_a_obj_kamakiri.h @@ -1,7 +1,11 @@ #ifndef D_A_OBJ_KAMAKIRI_H #define D_A_OBJ_KAMAKIRI_H +#include "JSystem/JHostIO/JORMContext.h" +#include "JSystem/JHostIO/JORReflexible.h" +#include "d/d_cc_d.h" #include "d/d_insect.h" +#include "d/actor/d_a_player.h" /** * @ingroup actors-objects @@ -11,14 +15,14 @@ * @details * */ -class daObjKAM_c : public fopAc_ac_c { +class daObjKAM_c : public dInsect_c { public: /* 80C351BC */ void InitCcSph(); /* 80C35228 */ void SetCcSph(); - /* 80C352A0 */ void CreateHeap(); + /* 80C352A0 */ int CreateHeap(); /* 80C35684 */ void ShopWaitAction(); /* 80C357EC */ void WaitAction(); - /* 80C35970 */ void WallCheck(); + /* 80C35970 */ int WallCheck(); /* 80C35BE4 */ void SpeedSet(); /* 80C35CF0 */ void WallWalk(); /* 80C36138 */ void WalkAction(); @@ -30,22 +34,83 @@ public: /* 80C36E34 */ void ParticleSet(); /* 80C36F58 */ void BoomChk(); /* 80C37324 */ void ObjHit(); - /* 80C374AC */ void Execute(); - /* 80C37724 */ void Delete(); + /* 80C374AC */ int Execute(); + /* 80C37724 */ int Delete(); /* 80C3778C */ void setBaseMtx(); - /* 80C378F4 */ void CreateChk(); - /* 80C37AA0 */ void create(); + int Draw() { + if (mDraw != 0) { + Z_BufferChk(); + J3DModel* model = mpMorfSO->getModel(); + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpBtkAnm->entry(model->getModelData()); + mpBrkAnm->entry(model->getModelData()); + mpMorfSO->entryDL(); + if (field_0x9c0 == 0) { + _GXTexObj* texObj = dDlst_shadowControl_c::getSimpleTex(); + dComIfGd_setSimpleShadow(¤t.pos, mObjAcch.GetGroundH(), 15.0f, mObjAcch.m_gnd, 0, -0.6f, texObj); + } + } + return 1; + } + /* 80C378F4 */ u8 CreateChk(); + /* 80C37AA0 */ int create(); private: - /* 0x568 */ u8 field_0x568[0xa68 - 0x568]; + /* 0x590 */ dCcD_Stts mStts; + /* 0x5CC */ dCcD_Sph mSphere; + /* 0x704 */ daPy_boomerangMove_c mBoomerangMove; + /* 0x710 */ dBgS_AcchCir mAcchCir; + /* 0x750 */ dBgS_ObjAcch mObjAcch; + /* 0x928 */ dBgS_GndChk mGndChk; + /* 0x928 */ u8 field_0x97c[0x980 - 0x97c]; + /* 0x980 */ u8 field_0x980; + /* 0x981 */ u8 field_0x981; + /* 0x982 */ s16 field_0x982[3]; + /* 0x988 */ f32 field_0x988; + /* 0x98C */ f32 field_0x98c; + /* 0x990 */ s16 field_0x990; + /* 0x992 */ u8 field_0x992[0x99a - 0x992]; + /* 0x99A */ csXyz field_0x99a; + /* 0x9A0 */ s16 field_0x9a0; + /* 0x9A2 */ s16 mNormalYaw; + /* 0x9A4 */ s16 field_0x9a4; + /* 0x9A8 */ f32 field_0x9a8; + /* 0x9AC */ f32 field_0x9ac; + /* 0x9B0 */ mDoExt_brkAnm* mpBrkAnm; + /* 0x9B4 */ mDoExt_btkAnm* mpBtkAnm; + /* 0x9B8 */ f32 field_0x9b8; + /* 0x9BC */ u32 field_0x9bc; + /* 0x9C0 */ u8 field_0x9c0; + /* 0x9C1 */ u8 field_0x9c1; + /* 0x9C2 */ u8 field_0x9c2; + /* 0x9C4 */ Z2Creature mCreatureSound; + /* 0xA54 */ u8 field_0xa44[0xa58 - 0xa54]; + /* 0xA58 */ mDoExt_McaMorfSO* mpMorfSO; + /* 0xA5C */ request_of_phase_process_class mPhase; + /* 0xA64 */ u8 field_0xa64; }; STATIC_ASSERT(sizeof(daObjKAM_c) == 0xa68); -class daObj_KamHIO_c { +class daObj_KamHIO_c : public JORReflexible { public: /* 80C3518C */ daObj_KamHIO_c(); - /* 80C38360 */ ~daObj_KamHIO_c(); + /* 80C38360 */ virtual ~daObj_KamHIO_c() {} + void genMessage(JORMContext* context) { + // Golden insect (stag beetle) + context->genLabel("黄金蟲(カブト)", 0x80000001, 0, NULL, -1, -1, 0x200, 0x18); + // Model scale (male) + context->genSlider("モデルスケール(オス)", &mModelScaleMale, 0.1f, 4.0f, 0, NULL, -1, -1, 0x200, + 0x18); + // Model scale (female) + context->genSlider("モデルスケール(メス)", &mModelScaleFemale, 0.1f, 4.0f, 0, NULL, -1, -1, 0x200, + 0x18); + } + + s8 field_0x4; + f32 mModelScaleFemale; + f32 mModelScaleMale; }; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 52462826fcc..db0c3d5627d 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -33,6 +33,7 @@ public: class daPy_boomerangMove_c { public: /* 8015E5B0 */ void initOffset(cXyz const*); + void initOffset(cXyz const* xyz, dCcD_GObjInf const*) { initOffset(xyz); } /* 8015E654 */ int posMove(cXyz*, s16*, fopAc_ac_c*, s16); /* 8015E87C */ void bgCheckAfterOffset(cXyz const*); diff --git a/include/d/d_insect.h b/include/d/d_insect.h index be52453e8e7..a007046a686 100644 --- a/include/d/d_insect.h +++ b/include/d/d_insect.h @@ -21,19 +21,19 @@ public: /* 8015E078 */ void Insect_GetDemoMain(); /* 8015E26C */ void CalcZBuffer(f32); - /* 80110648 */ virtual void Insect_Release() { field_0x56C = 1; } + /* 80110648 */ virtual void Insect_Release() { field_0x56c = 1; } bool ChkGetDemo() { return m_mode > 0; } void setItemNo(u8 i_itemNo) { m_itemNo = i_itemNo; } void setSaveBitNo(s16 i_saveBitNo) { m_saveBitNo = i_saveBitNo; } - bool CheckZ() { return (u32)field_0x57C > field_0x578; } + bool CheckZ() { return (u32)field_0x57c > field_0x578; } public: - /* 0x56C */ u8 field_0x56C; + /* 0x56C */ u8 field_0x56c; /* 0x56D */ bool mDraw; /* 0x570 */ u32 mParticleKey1; /* 0x574 */ u32 mParticleKey2; /* 0x578 */ u32 field_0x578; - /* 0x57C */ f32 field_0x57C; + /* 0x57C */ f32 field_0x57c; /* 0x580 */ u8 m_itemNo; /* 0x581 */ u8 mSex; /* 0x582 */ s16 m_saveBitNo; diff --git a/include/d/d_menu_insect.h b/include/d/d_menu_insect.h index 7b428d4cb20..8a856d9eb39 100644 --- a/include/d/d_menu_insect.h +++ b/include/d/d_menu_insect.h @@ -43,7 +43,7 @@ public: /* 801D9E20 */ bool isGiveInsect(int, int); /* 801D9ED4 */ static bool isGiveInsect(u8); /* 801D9E7C */ static bool isCatchInsect(u8); - /* 801D9F3C */ static u8 isCatchNotGiveInsect(u8); + /* 801D9F3C */ static bool isCatchNotGiveInsect(u8); /* 801D9F8C */ void cursorMove(); /* 801DA1EC */ void setCursorPos(); /* 801DA2FC */ u8 dpdMove(); diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp index b9a586980c6..a6d3dcc22c3 100644 --- a/src/d/actor/d_a_obj_ari.cpp +++ b/src/d/actor/d_a_obj_ari.cpp @@ -256,7 +256,7 @@ void daObjARI_c::Action() { /* 80BA33F8-80BA3408 000E58 0010+00 1/0 0/0 0/0 .text Insect_Release__10daObjARI_cFv */ void daObjARI_c::Insect_Release() { - field_0x56C = 1; + field_0x56c = 1; mAction = 1; } @@ -637,7 +637,7 @@ cPhs__Step daObjARI_c::create() { if (step == cPhs_COMPLEATE_e) { mLocation = fopAcM_GetParam(this) & 0xf; if (mLocation == LOC_UNK_2) { - field_0x56C = 0; + field_0x56c = 0; shape_angle.x -= 0x2000; fopAcM_OnStatus(this, 0x4000); } else { diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp index cc8554565d0..efe8e21006f 100644 --- a/src/d/actor/d_a_obj_cho.cpp +++ b/src/d/actor/d_a_obj_cho.cpp @@ -287,7 +287,7 @@ void daObjCHO_c::checkGroundPos() { /* 80BCB310-80BCB320 0010F0 0010+00 1/0 0/0 0/0 .text Insect_Release__10daObjCHO_cFv */ void daObjCHO_c::Insect_Release() { - field_0x56C = 1; + field_0x56c = 1; mAction = ACT_MOVE; } @@ -560,7 +560,7 @@ cPhs__Step daObjCHO_c::create() { if (step == cPhs_COMPLEATE_e) { mLocation = fopAcM_GetParam(this) & 0xf; if (mLocation == LOC_UNK_2) { - field_0x56C = 0; + field_0x56c = 0; shape_angle.x -= 0x2000; fopAcM_OnStatus(this, 0x4000); mTargetSpeedY = -2.0f; diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp index caf662835a8..e7460db9ef2 100644 --- a/src/d/actor/d_a_obj_dan.cpp +++ b/src/d/actor/d_a_obj_dan.cpp @@ -269,7 +269,7 @@ void daObjDAN_c::checkGroundPos() { /* 80BDB0D8-80BDB0E8 000C38 0010+00 1/0 0/0 0/0 .text Insect_Release__10daObjDAN_cFv */ void daObjDAN_c::Insect_Release() { - field_0x56C = 1; + field_0x56c = 1; mAction = ACT_MOVE; } @@ -535,7 +535,7 @@ cPhs__Step daObjDAN_c::create() { if (step == cPhs_COMPLEATE_e) { mLocation = fopAcM_GetParam(this) & 0xf; if (mLocation == LOC_UNK_2) { - field_0x56C = 0; + field_0x56c = 0; shape_angle.x -= 0x2000; fopAcM_OnStatus(this, 0x4000); } else { diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp index 62155956064..35691d4cfde 100644 --- a/src/d/actor/d_a_obj_kabuto.cpp +++ b/src/d/actor/d_a_obj_kabuto.cpp @@ -506,7 +506,7 @@ void daObjKABUTO_c::ShopAction() { /* 80C2CAC4-80C2CADC 001D44 0018+00 1/0 0/0 0/0 .text Insect_Release__13daObjKABUTO_cFv */ void daObjKABUTO_c::Insect_Release() { - field_0x56C = 1; + field_0x56c = 1; mAction = ACT_MOVE; mMode = 0; } @@ -757,7 +757,7 @@ cPhs__Step daObjKABUTO_c::create() { if (step == cPhs_COMPLEATE_e) { mLocation = fopAcM_GetParam(this) & 0xf; if (mLocation == LOC_UNK_2) { - field_0x56C = 0; + field_0x56c = 0; shape_angle.x -= 0x2000; fopAcM_OnStatus(this, 0x4000); } else { diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp index d1847bc3f98..229e4acf8b6 100644 --- a/src/d/actor/d_a_obj_kamakiri.cpp +++ b/src/d/actor/d_a_obj_kamakiri.cpp @@ -1,735 +1,921 @@ /** * @file d_a_obj_kamakiri.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_kamakiri.h" +#include "d/actor/d_a_player.h" #include "d/d_cc_d.h" +#include "d/d_com_inf_game.h" +#include "d/d_menu_insect.h" +#include "d/d_s_play.h" #include "dol2asm.h" +#include "m_Do/m_Do_lib.h" +static u8 l_initHIO; - -// -// Forward References: -// - -extern "C" void __ct__14daObj_KamHIO_cFv(); -extern "C" void InitCcSph__10daObjKAM_cFv(); -extern "C" void SetCcSph__10daObjKAM_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void CreateHeap__10daObjKAM_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daObjKAM_Create__FP10fopAc_ac_c(); -extern "C" static void daObjKAM_Delete__FP10daObjKAM_c(); -extern "C" void ShopWaitAction__10daObjKAM_cFv(); -extern "C" void WaitAction__10daObjKAM_cFv(); -extern "C" void WallCheck__10daObjKAM_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void SpeedSet__10daObjKAM_cFv(); -extern "C" void WallWalk__10daObjKAM_cFv(); -extern "C" void WalkAction__10daObjKAM_cFv(); -extern "C" void MoveAction__10daObjKAM_cFv(); -extern "C" void Action__10daObjKAM_cFv(); -extern "C" void ShopAction__10daObjKAM_cFv(); -extern "C" void Insect_Release__10daObjKAM_cFv(); -extern "C" void Z_BufferChk__10daObjKAM_cFv(); -extern "C" void ParticleSet__10daObjKAM_cFv(); -extern "C" void BoomChk__10daObjKAM_cFv(); -extern "C" void ObjHit__10daObjKAM_cFv(); -extern "C" void Execute__10daObjKAM_cFv(); -extern "C" void Delete__10daObjKAM_cFv(); -extern "C" void setBaseMtx__10daObjKAM_cFv(); -extern "C" static void daObjKAM_Draw__FP10daObjKAM_c(); -extern "C" static void daObjKAM_Execute__FP10daObjKAM_c(); -extern "C" void CreateChk__10daObjKAM_cFv(); -extern "C" void create__10daObjKAM_cFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" static bool daObjKAM_IsDelete__FP10daObjKAM_c(); -extern "C" void __dt__14daObj_KamHIO_cFv(); -extern "C" void __sinit_d_a_obj_kamakiri_cpp(); -extern "C" static void func_80C383E4(); -extern "C" static void func_80C383EC(); -extern "C" extern char const* const d_a_obj_kamakiri__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotS__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss(); -extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef(); -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 mDoLib_project__FP3VecP3Vec(); -extern "C" void mDoLib_pos2camera__FP3VecP3Vec(); -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_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 dComIfGd_setSimpleShadow__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void newData__13dDlst_peekZ_cFssPUl(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void __ct__12dBgS_AcchCirFv(); -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 __ct__11dBgS_GndChkFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__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 GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void __ct__9dInsect_cFv(); -extern "C" void Insect_GetDemoMain__9dInsect_cFv(); -extern "C" void initOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void posMove__20daPy_boomerangMove_cFP4cXyzPsP10fopAc_ac_cs(); -extern "C" void bgCheckAfterOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void isCatchNotGiveInsect__14dMenu_Insect_cFUc(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[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" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C38408-80C3840C 000000 0004+00 13/13 0/0 0/0 .rodata @3775 */ -SECTION_RODATA static f32 const lit_3775 = 1.5f; -COMPILER_STRIP_GATE(0x80C38408, &lit_3775); - -/* 80C3840C-80C38410 000004 0004+00 1/1 0/0 0/0 .rodata @3776 */ -SECTION_RODATA static f32 const lit_3776 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C3840C, &lit_3776); - -/* 80C3850C-80C3852C -00001 0020+00 1/0 0/0 0/0 .data l_daObjKAM_Method */ -static actor_method_class l_daObjKAM_Method = { - (process_method_func)daObjKAM_Create__FP10fopAc_ac_c, - (process_method_func)daObjKAM_Delete__FP10daObjKAM_c, - (process_method_func)daObjKAM_Execute__FP10daObjKAM_c, - (process_method_func)daObjKAM_IsDelete__FP10daObjKAM_c, - (process_method_func)daObjKAM_Draw__FP10daObjKAM_c, -}; - -/* 80C3852C-80C3855C -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Kam */ -extern actor_process_profile_definition g_profile_Obj_Kam = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_Kam, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjKAM_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 482, // mPriority - &l_daObjKAM_Method, // sub_method - 0x000C0120, // mStatus - fopAc_ENV_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80C3855C-80C38580 000050 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_80C383EC, - (void*)NULL, - (void*)NULL, - (void*)func_80C383E4, -}; - -/* 80C38580-80C3858C 000074 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, -}; - -/* 80C3858C-80C38598 000080 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, -}; - -/* 80C38598-80C385A4 00008C 000C+00 1/1 0/0 0/0 .data __vt__10daObjKAM_c */ -SECTION_DATA extern void* __vt__10daObjKAM_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)Insect_Release__10daObjKAM_cFv, -}; - -/* 80C385A4-80C385B0 000098 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80C385B0-80C385BC 0000A4 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 80C385BC-80C385C8 0000B0 000C+00 2/2 0/0 0/0 .data __vt__14daObj_KamHIO_c */ -SECTION_DATA extern void* __vt__14daObj_KamHIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daObj_KamHIO_cFv, -}; +static daObj_KamHIO_c l_HIO; /* 80C3518C-80C351BC 0000EC 0030+00 1/1 0/0 0/0 .text __ct__14daObj_KamHIO_cFv */ daObj_KamHIO_c::daObj_KamHIO_c() { - // NONMATCHING + field_0x4 = -1; + mModelScaleMale = 1.5f; + mModelScaleFemale = 1.2f; } -/* ############################################################################################## */ -/* 80C38410-80C38450 000008 0040+00 1/1 0/0 0/0 .rodata ccSphSrc$3780 */ -const static dCcD_SrcSph ccSphSrc = { - { - {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj - {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph - } // mSphAttr -}; - /* 80C351BC-80C35228 00011C 006C+00 1/1 0/0 0/0 .text InitCcSph__10daObjKAM_cFv */ void daObjKAM_c::InitCcSph() { - // NONMATCHING -} + const static dCcD_SrcSph ccSphSrc = { + { + {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; -/* ############################################################################################## */ -/* 80C38450-80C38454 000048 0004+00 1/4 0/0 0/0 .rodata @3789 */ -SECTION_RODATA static f32 const lit_3789 = 20.0f; -COMPILER_STRIP_GATE(0x80C38450, &lit_3789); + mStts.Init(1, 0, this); + mSphere.Set(ccSphSrc); + mSphere.SetStts(&mStts); + mSphere.SetC(current.pos); + mSphere.OnTgNoHitMark(); +} /* 80C35228-80C35280 000188 0058+00 1/1 0/0 0/0 .text SetCcSph__10daObjKAM_cFv */ void daObjKAM_c::SetCcSph() { - // NONMATCHING + mSphere.SetC(current.pos); + mSphere.SetR(20.0f); + dComIfG_Ccsp()->Set(&mSphere); } /* 80C35280-80C352A0 0001E0 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* param_0) { + daObjKAM_c* i_this = (daObjKAM_c*)param_0; + return i_this->CreateHeap(); } -/* ############################################################################################## */ -/* 80C38454-80C38458 00004C 0004+00 2/9 0/0 0/0 .rodata @3895 */ -SECTION_RODATA static f32 const lit_3895 = 1.0f; -COMPILER_STRIP_GATE(0x80C38454, &lit_3895); - -/* 80C384FC-80C384FC 0000F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C384FC = "I_Kam"; -#pragma pop - /* 80C352A0-80C355F8 000200 0358+00 1/1 0/0 0/0 .text CreateHeap__10daObjKAM_cFv */ -void daObjKAM_c::CreateHeap() { - // NONMATCHING -} +int daObjKAM_c::CreateHeap() { + J3DModelData* modelData; + if (mSex == SEX_FEMALE) { + modelData = (J3DModelData*)dComIfG_getObjectRes("I_Kam", 10); + JUT_ASSERT(0xff, modelData != 0); + } else { + modelData = (J3DModelData*)dComIfG_getObjectRes("I_Kam", 10); + JUT_ASSERT(0x103, modelData != 0); + } + mpMorfSO = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 7), 2, 1.0f, 0, + -1, &mCreatureSound, 0, 0x11000284); + if (mpMorfSO == NULL || mpMorfSO->getModel() == NULL) { + return 0; + } + J3DModel* model = mpMorfSO->getModel(); + mpBrkAnm = new mDoExt_brkAnm(); + if (mpBrkAnm == NULL) { + return 0; + } -/* 80C355F8-80C35640 000558 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING + J3DAnmTevRegKey* anmRegKey; + if (mSex == SEX_FEMALE) { + anmRegKey = (J3DAnmTevRegKey*)dComIfG_getObjectRes("I_Kam", 13); + modelData = model->getModelData(); + if (mpBrkAnm->init(modelData, anmRegKey, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + } else { + anmRegKey = (J3DAnmTevRegKey*)dComIfG_getObjectRes("I_Kam", 14); + modelData = model->getModelData(); + if (mpBrkAnm->init(modelData, anmRegKey, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + } + + mpBtkAnm = new mDoExt_btkAnm(); + if (mpBtkAnm == NULL) { + return 0; + } + + J3DAnmTextureSRTKey* anmTexKey; + if (mSex == SEX_FEMALE) { + anmTexKey = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("I_Kam", 17); + modelData = model->getModelData(); + if (mpBtkAnm->init(modelData, anmTexKey, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + } else { + anmTexKey = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("I_Kam", 0x12); + modelData = model->getModelData(); + if (mpBtkAnm->init(modelData, anmTexKey, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + } + return 1; } /* 80C35640-80C35660 0005A0 0020+00 1/0 0/0 0/0 .text daObjKAM_Create__FP10fopAc_ac_c */ -static void daObjKAM_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObjKAM_Create(fopAc_ac_c* param_0) { + daObjKAM_c* i_this = (daObjKAM_c*)param_0; + fpc_ProcID unused = fopAcM_GetID(param_0); + return i_this->create(); } /* 80C35660-80C35684 0005C0 0024+00 1/0 0/0 0/0 .text daObjKAM_Delete__FP10daObjKAM_c */ -static void daObjKAM_Delete(daObjKAM_c* param_0) { - // NONMATCHING +static int daObjKAM_Delete(daObjKAM_c* param_0) { + fpc_ProcID unused = fopAcM_GetID(param_0); + param_0->Delete(); + return 1; } -/* ############################################################################################## */ -/* 80C38458-80C3845C 000050 0004+00 1/13 0/0 0/0 .rodata @3932 */ -SECTION_RODATA static u8 const lit_3932[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C38458, &lit_3932); - -/* 80C3845C-80C38460 000054 0004+00 0/6 0/0 0/0 .rodata @3933 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3933 = 5.0f; -COMPILER_STRIP_GATE(0x80C3845C, &lit_3933); -#pragma pop - -/* 80C38460-80C38464 000058 0004+00 0/6 0/0 0/0 .rodata @3934 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3934 = -1.0f; -COMPILER_STRIP_GATE(0x80C38460, &lit_3934); -#pragma pop - -/* 80C38464-80C38468 00005C 0004+00 0/6 0/0 0/0 .rodata @3935 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3935 = 50.0f; -COMPILER_STRIP_GATE(0x80C38464, &lit_3935); -#pragma pop - -/* 80C38468-80C3846C 000060 0004+00 0/5 0/0 0/0 .rodata @3936 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3936 = 100.0f; -COMPILER_STRIP_GATE(0x80C38468, &lit_3936); -#pragma pop - /* 80C35684-80C357EC 0005E4 0168+00 1/1 0/0 0/0 .text ShopWaitAction__10daObjKAM_cFv */ void daObjKAM_c::ShopWaitAction() { - // NONMATCHING -} + switch (field_0x981) { + case 0: + speedF = 0.0f; + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 7), 2, 5.0f, 0.0f, 0.0f, + -1.0f); + field_0x981++; + field_0x982[0] = cM_rndF(50.0f) + 50.0f; + break; + case 1: + field_0x982[0]--; + if (field_0x982[0] <= 0) { + field_0x982[0] = 0; + } -/* ############################################################################################## */ -/* 80C3846C-80C38470 000064 0004+00 0/1 0/0 0/0 .rodata @3960 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3960 = 1500.0f; -COMPILER_STRIP_GATE(0x80C3846C, &lit_3960); -#pragma pop + if (field_0x982[0] == 0) { + s32 unkInt = cM_rndF(100.0f); + if (unkInt < 40) { + field_0x980 = 2; + field_0x981 = 0; + } else if (unkInt < 70) { + field_0x980 = 1; + field_0x981 = 0; + } else { + field_0x982[0] = cM_rndF(50.0f) + 50.0f; + } + } + + break; + } + return; +} /* 80C357EC-80C35970 00074C 0184+00 1/1 0/0 0/0 .text WaitAction__10daObjKAM_cFv */ void daObjKAM_c::WaitAction() { - // NONMATCHING + switch (field_0x981) { + case 0: + speedF = 0.0f; + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 7), 2, 5.0f, 0.0f, 0.0f, + -1.0f); + field_0x981++; + field_0x982[0] = cM_rndF(50.0f) + 50.0f; + break; + case 1: + if (fopAcM_searchPlayerDistance(this) < 1500.0f) { + field_0x982[0]--; + if (field_0x982[0] <= 0) { + field_0x982[0] = 0; + } + if (field_0x982[0] == 0) { + s32 unkInt = cM_rndF(100.0f); + if (unkInt < 40) { + field_0x980 = 2; + field_0x981 = 0; + } else if (unkInt < 70) { + field_0x980 = 1; + field_0x981 = 0; + } else { + field_0x982[0] = cM_rndF(50.0f) + 50.0f; + } + } + } + break; + } } -/* ############################################################################################## */ -/* 80C38470-80C38478 000068 0008+00 0/5 0/0 0/0 .rodata @4013 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4013[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C38470, &lit_4013); -#pragma pop - -/* 80C38478-80C38480 000070 0008+00 0/5 0/0 0/0 .rodata @4014 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4014[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C38478, &lit_4014); -#pragma pop - -/* 80C38480-80C38488 000078 0008+00 0/5 0/0 0/0 .rodata @4015 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4015[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C38480, &lit_4015); -#pragma pop - /* 80C35970-80C35B9C 0008D0 022C+00 1/1 0/0 0/0 .text WallCheck__10daObjKAM_cFv */ -void daObjKAM_c::WallCheck() { - // NONMATCHING +int daObjKAM_c::WallCheck() { + dBgS_LinChk linChk; + linChk.SetObj(); + linChk.Set(&old.pos, ¤t.pos, NULL); + + if (dComIfG_Bgsp().LineCross(&linChk) != 0) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + + cXyz* normal = plane.GetNP(); + current.pos = linChk.GetCross(); + + cXyz origin(0.0f, 0.0f, 0.0f); + cXyz normYz(0.0f, normal->y, normal->z); + + f32 normYzMag = origin.abs(normYz); + field_0x99a.z = -cM_atan2s(normal->x, normYzMag); + field_0x99a.x = cM_atan2s(normal->z, normal->y); + mNormalYaw = cM_atan2s(normal->x, normal->z); + return 1; + } + + return 0; } -/* 80C35B9C-80C35BE4 000AFC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C38488-80C3848C 000080 0004+00 0/1 0/0 0/0 .rodata @4039 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4039 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C38488, &lit_4039); -#pragma pop - -/* 80C3848C-80C38490 000084 0004+00 0/3 0/0 0/0 .rodata @4040 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4040 = 10.0f; -COMPILER_STRIP_GATE(0x80C3848C, &lit_4040); -#pragma pop - -/* 80C38490-80C38494 000088 0004+00 0/1 0/0 0/0 .rodata @4041 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4041 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C38490, &lit_4041); -#pragma pop - -/* 80C38494-80C38498 00008C 0004+00 0/3 0/0 0/0 .rodata @4042 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4042 = 0.5f; -COMPILER_STRIP_GATE(0x80C38494, &lit_4042); -#pragma pop - /* 80C35BE4-80C35CF0 000B44 010C+00 1/1 0/0 0/0 .text SpeedSet__10daObjKAM_cFv */ void daObjKAM_c::SpeedSet() { - // NONMATCHING + speed.y += gravity; + cXyz unkXyz1(0.0f, speed.y, speedF); + cXyz unkXyz2(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::ZXYrotS(field_0x99a); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(&unkXyz1, &unkXyz2); + current.pos.x = current.pos.x + unkXyz2.x; + current.pos.y = current.pos.y + unkXyz2.y; + current.pos.z = current.pos.z + unkXyz2.z; + cLib_addCalc2(&speedF, field_0x988, 0.4f, 10.0f); + cLib_addCalc2(&speed.y, field_0x98c, 0.1f, 0.5f); + cLib_addCalcAngleS2(¤t.angle.y, field_0x990, 0x10, 0x100); + shape_angle.y = current.angle.y; } -/* ############################################################################################## */ -/* 80C38498-80C3849C 000090 0004+00 0/2 0/0 0/0 .rodata @4143 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4143 = 3.0f; -COMPILER_STRIP_GATE(0x80C38498, &lit_4143); -#pragma pop - -/* 80C3849C-80C384A0 000094 0004+00 0/1 0/0 0/0 .rodata @4144 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4144 = -100.0f; -COMPILER_STRIP_GATE(0x80C3849C, &lit_4144); -#pragma pop - -/* 80C384A0-80C384A4 000098 0004+00 0/2 0/0 0/0 .rodata @4145 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4145 = 40.0f; -COMPILER_STRIP_GATE(0x80C384A0, &lit_4145); -#pragma pop - -/* 80C384A4-80C384A8 00009C 0004+00 0/1 0/0 0/0 .rodata @4146 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4146 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C384A4, &lit_4146); -#pragma pop - /* 80C35CF0-80C36138 000C50 0448+00 1/1 0/0 0/0 .text WallWalk__10daObjKAM_cFv */ void daObjKAM_c::WallWalk() { - // NONMATCHING + cXyz unkXyz1(0.0f, -100.0f, (yREG_F(6) + 3.0f) * speedF); + cXyz unkXyz2(0.0f, yREG_F(5) + 40.0f, 0.0f); + cXyz unkXyz3(0.0f, 20.0f, 100.0f); + cXyz cross; + + dBgS_LinChk linChk1; + dBgS_LinChk linChk2; + + linChk1.SetObj(); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x99a); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(&unkXyz1, &unkXyz1); + mDoMtx_stack_c::multVec(&unkXyz2, &unkXyz2); + linChk1.Set(&unkXyz2, &unkXyz1, NULL); + + if (dComIfG_Bgsp().LineCross(&linChk1) != 0) { + speedF = TREG_F(1) + 0.3f; + + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk1, &plane); + + cXyz* normal = plane.GetNP(); + s16 normalYaw = cM_atan2s(normal->x, normal->z); + f32 normalY = normal->y; + + cXyz origin(0.0f, 0.0f, 0.0f); + cXyz normYz(0.0f, normal->y, normal->z); + f32 normYzMag = origin.abs(normYz); + + cross = linChk1.GetCross(); + if (normalYaw - mNormalYaw < 0x1000 && normalYaw - mNormalYaw > -0x1000 && + cross.abs(old.pos) < speedF * (TREG_F(0) + 3.0f)) + { + current.pos = cross; + + mNormalYaw = normalYaw; + + field_0x99a.z = -cM_atan2s(normal->x, normYzMag); + field_0x99a.x = cM_atan2s(normal->z, normal->y); + } else { + field_0x990 += (s16)0x100; + } + } else { + field_0x990 += (s16)0x100; + } + + cLib_addCalcAngleS2(¤t.angle.y, field_0x990, 0x10, 0x50); + shape_angle.y = current.angle.y; } /* 80C36138-80C36338 001098 0200+00 2/2 0/0 0/0 .text WalkAction__10daObjKAM_cFv */ void daObjKAM_c::WalkAction() { - // NONMATCHING + for (s32 i = 0; i < 3; i++) { + field_0x982[i]--; + if (field_0x982[i] <= 0) { + field_0x982[i] = 0; + } + } + + switch (field_0x981) { + case 0: { + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 7), 2, 5.0f, 1.0f, 0.0f, + -1.0f); + field_0x988 = 0.5f; + speed.y = 0.0f; + field_0x98c = 0.0f; + field_0x981++; + field_0x982[1] = cM_rndF(50.0f) + 50.0f; + break; + } + case 1: { + if (field_0x982[0] == 0) { + cXyz unkXyz1(cM_rndFX(nREG_F(10) + 100.0f), 0.0f, cM_rndFX(nREG_F(10) + 100.0f)); + s16 unkShort1 = (s16)cM_atan2s(unkXyz1.x, unkXyz1.z); + field_0x990 = unkShort1; + field_0x982[0] = cM_rndF(50.0f) + 50.0f; + } + + if (field_0x982[1] == 0) { + s32 unkInt1 = cM_rndF(100.0f); + if (unkInt1 < 30) { + field_0x980 = 1; + field_0x981 = 0; + } else if (unkInt1 < 60) { + field_0x980 = 0; + field_0x981 = 0; + } else { + field_0x982[1] = cM_rndF(50.0f) + 50.0f; + } + } + break; + } + } + + WallWalk(); } -/* ############################################################################################## */ -/* 80C384A8-80C384AC 0000A0 0004+00 0/1 0/0 0/0 .rodata @4324 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4324 = 30.0f; -COMPILER_STRIP_GATE(0x80C384A8, &lit_4324); -#pragma pop - -/* 80C384AC-80C384B0 0000A4 0004+00 0/3 0/0 0/0 .rodata @4325 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4325 = 8.0f; -COMPILER_STRIP_GATE(0x80C384AC, &lit_4325); -#pragma pop - -/* 80C384B0-80C384B4 0000A8 0004+00 0/1 0/0 0/0 .rodata @4326 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4326 = 200.0f; -COMPILER_STRIP_GATE(0x80C384B0, &lit_4326); -#pragma pop - -/* 80C384B4-80C384B8 0000AC 0004+00 0/1 0/0 0/0 .rodata @4327 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4327 = 11.0f; -COMPILER_STRIP_GATE(0x80C384B4, &lit_4327); -#pragma pop - -/* 80C384B8-80C384BC 0000B0 0004+00 0/1 0/0 0/0 .rodata @4328 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4328 = 1050.0f; -COMPILER_STRIP_GATE(0x80C384B8, &lit_4328); -#pragma pop - /* 80C36338-80C36B20 001298 07E8+00 2/2 0/0 0/0 .text MoveAction__10daObjKAM_cFv */ void daObjKAM_c::MoveAction() { - // NONMATCHING + cXyz* unkXyzP1; + + for (s32 i = 0; i < 3; i++) { + field_0x982[i]--; + if (field_0x982[i] <= 0) { + field_0x982[i] = 0; + } + } + + cXyz unkXyz1; + cXyz unkXyz2(0.0f, 1.0f, 0.0f); + dBgS_LinChk linChk; + daPy_py_c* player = daPy_getPlayerActorClass(); + linChk.SetObj(); + cXyz unkXyz3; + cXyz unkXyz4; + s16 unusedInt1 = 0; + + switch (field_0x981) { + case 0: + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 6), 2, 5.0f, 0.0f, 0.0f, + -1.0f); + field_0x981++; + field_0x982[0] = 20; + break; + case 1: + if (field_0x982[0] == 10) { + mpMorfSO->setPlaySpeed(1.0f); + } + if (field_0x982[0] == 0) { + field_0x981++; + mDoMtx_stack_c::ZXYrotS(field_0x99a); + mDoMtx_stack_c::multVec(&unkXyz2, &unkXyz2); + field_0x982[0] = cM_rndF(10.0f) + 30.0f; + if (field_0x9c0 == 0) { + field_0x982[1] = cM_rndF(40.0f) + 40.0f; + } else { + field_0x982[1] = cM_rndF(40.0f) + 40.0f; + } + field_0x988 = cM_rndF(5.0f) + 8.0f; + field_0x990 = mNormalYaw; + field_0x98c = 3.0f; + speed.y = 5.0f; + } + break; + case 2: + unkXyzP1 = player->getKandelaarFlamePos(); + if (unkXyzP1 != NULL) { + field_0x990 = cLib_targetAngleY(¤t.pos, unkXyzP1); + if (unkXyzP1->abs(current.pos) < yREG_F(4) + 200.0f && speed.y < 0.0f) { + cLib_addCalcAngleS2(¤t.angle.y, field_0x990, 2, 0x500); + } else { + cLib_addCalcAngleS2(¤t.angle.y, field_0x990, 0x10, 0x200); + } + if (unkXyzP1->abs(current.pos) < 11.0f && fopAcM_GetSpeedF(player) < 1.0f) { + unkXyz3.set(0.0f, 0.0f, 10.0f); + if (field_0x9c2 == 0) { + mNormalYaw = cLib_targetAngleY(¤t.pos, unkXyzP1); + } + cLib_offsetPos(&unkXyz4, unkXyzP1, mNormalYaw, &unkXyz3); + current.pos = unkXyz4; + shape_angle.x = 0x4000; + shape_angle.y = mNormalYaw; + speedF = 0.0f; + field_0x988 = 0.0f; + speed.y = 0.0f; + field_0x98c = 0.0f; + mpMorfSO->setPlaySpeed(0.0f); + field_0x990 = 0; + current.angle.y = mNormalYaw; + field_0x9c2 = 1; + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 7), 2, 5.0f, 1.0f, + 0.0f, -1.0f); + } else { + if (field_0x9c2 != 0) { + field_0x9c2 = 0; + field_0x98c = 3.0f; + speed.y = 3.0f; + speedF = 8.0f; + field_0x988 = 8.0f; + mpMorfSO->setPlaySpeed(1.0f); + mNormalYaw = 0; + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 6), 2, 5.0f, + 1.0f, 0.0f, -1.0f); + } + } + } + if (field_0x982[0] == 0) { + if (unkXyzP1 == NULL) { + unkXyz3 = home.pos - current.pos; + unkXyz3.x += cM_rndFX(yREG_F(10) + 1050.0f); + unkXyz3.z += cM_rndFX(yREG_F(10) + 1050.0f); + field_0x990 = (s16)cM_atan2s(unkXyz3.x, unkXyz3.z); + } + field_0x982[0] = cM_rndF(20.0f) + 20.0f; + field_0x988 = cM_rndF(5.0f) + 8.0f; + } + if (field_0x982[1] == 0) { + field_0x98c = -cM_rndF(nREG_F(10) + 3.0f); + field_0x982[1] = cM_rndF(20.0f) + 20.0f; + } + f32 unusedFloat1 = mpMorfSO->getFrame(); + s16 unusedShort1 = current.angle.y; + SpeedSet(); + if (WallCheck()) { + field_0x980 = 0; + field_0x981 = 0; + speedF = 0.0f; + speed.y = 0.0f; + shape_angle.x = 0; + shape_angle.z = 0; + } + if (field_0x9c0 == 0) { + cLib_addCalcAngleS2(&field_0x99a.x, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&field_0x99a.z, 0, 0x10, 0x1000); + } else { + cLib_addCalcAngleS2(&field_0x99a.x, 0, 0x10, 0x100); + cLib_addCalcAngleS2(&field_0x99a.z, 0, 0x10, 0x100); + } + if (field_0x9c0 == 1) { + cLib_addCalcAngleS2(¤t.angle.y, field_0x990, 0x10, 0x100); + } + if (field_0x9c2 == 0) { + cLib_chaseAngleS(&shape_angle.x, 0, 0x400); + } + break; + } + + if (mpMorfSO->getPlaySpeed() == 1.0f) { + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_BTBT, 0, -1); + } } /* 80C36B20-80C36BE4 001A80 00C4+00 1/1 0/0 0/0 .text Action__10daObjKAM_cFv */ void daObjKAM_c::Action() { - // NONMATCHING + switch (field_0x980) { + case 0: + WaitAction(); + break; + case 2: + WalkAction(); + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KSKS, 0, -1); + break; + case 1: + MoveAction(); + break; + } + + Insect_GetDemoMain(); + + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); } /* 80C36BE4-80C36CA0 001B44 00BC+00 1/1 0/0 0/0 .text ShopAction__10daObjKAM_cFv */ void daObjKAM_c::ShopAction() { - // NONMATCHING + switch (field_0x980) { + case 0: + ShopWaitAction(); + break; + case 2: + WalkAction(); + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KSKS, 0, -1); + break; + case 1: + MoveAction(); + break; + } + + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); } /* 80C36CA0-80C36CB8 001C00 0018+00 1/0 0/0 0/0 .text Insect_Release__10daObjKAM_cFv */ void daObjKAM_c::Insect_Release() { - // NONMATCHING + field_0x56c = 1; + field_0x981 = 0; + field_0x980 = 1; } -/* ############################################################################################## */ -/* 80C384BC-80C384C0 0000B4 0002+02 1/2 0/0 0/0 .rodata l_kam_itemno */ -SECTION_RODATA static u16 const l_kam_itemno[1 + 1 /* padding */] = { - 0xCCCD, - /* padding */ - 0x0000, -}; -COMPILER_STRIP_GATE(0x80C384BC, &l_kam_itemno); +static u8 const l_kam_itemno[2] = {0xCC, 0xCD}; -/* 80C384C0-80C384C4 0000B8 0004+00 0/0 0/0 0/0 .rodata @4437 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4437 = -9.0f; -COMPILER_STRIP_GATE(0x80C384C0, &lit_4437); -#pragma pop - -/* 80C384C4-80C384C8 0000BC 0004+00 0/1 0/0 0/0 .rodata @4484 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4484 = 608.0f; -COMPILER_STRIP_GATE(0x80C384C4, &lit_4484); -#pragma pop - -/* 80C384C8-80C384CC 0000C0 0004+00 0/1 0/0 0/0 .rodata @4485 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4485 = 448.0f; -COMPILER_STRIP_GATE(0x80C384C8, &lit_4485); -#pragma pop - -/* 80C384CC-80C384D0 0000C4 0004+00 0/1 0/0 0/0 .rodata @4486 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4486 = 16777215.0f; -COMPILER_STRIP_GATE(0x80C384CC, &lit_4486); -#pragma pop +f32 floatDummy() { + return -9.0f; +} /* 80C36CB8-80C36E34 001C18 017C+00 1/1 0/0 0/0 .text Z_BufferChk__10daObjKAM_cFv */ void daObjKAM_c::Z_BufferChk() { - // NONMATCHING + cXyz currentProj; + cXyz currentOffset; + currentOffset = current.pos; + currentOffset.y += 20.0f; + mDoLib_project(¤tOffset, ¤tProj); + camera_class* camera = dComIfGp_getCamera(0); + f32 cameraHeight; + if (camera != NULL) { + cameraHeight = camera->mCamera.TrimHeight(); + } else { + cameraHeight = 0.0f; + } +#ifdef DEBUG +#define Z_BUFFERCHK_X_MAX 640.0f +#define Z_BUFFERCHK_Y_MAX 456.0f +#else +#define Z_BUFFERCHK_X_MAX 608.0f +#define Z_BUFFERCHK_Y_MAX 448.0f +#endif + if (currentProj.x > 0.0f && currentProj.x < Z_BUFFERCHK_X_MAX && currentProj.y > cameraHeight && + currentProj.y < Z_BUFFERCHK_Y_MAX - cameraHeight) + { + dComIfGd_peekZ(currentProj.x, currentProj.y, &field_0x9bc); + } + f32 near = dComIfGd_getView()->near; + f32 far = dComIfGd_getView()->far; + mDoLib_pos2camera(¤tOffset, ¤tProj); + currentProj.z += 50.0f; + if (currentProj.z > 0.0f) { + currentProj.z = 0.0f; + } + field_0x9b8 = ((near + (far * near) / currentProj.z) / (far - near) + 1.0f) * 16777215.0f; } -/* ############################################################################################## */ -/* 80C384D0-80C384D8 0000C8 0008+00 1/2 0/0 0/0 .rodata @4516 */ -SECTION_RODATA static u8 const lit_4516[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C384D0, &lit_4516); - /* 80C36E34-80C36F58 001D94 0124+00 1/1 0/0 0/0 .text ParticleSet__10daObjKAM_cFv */ void daObjKAM_c::ParticleSet() { - // NONMATCHING + if (field_0x9b8 > field_0x9bc) { + cLib_addCalc2(&field_0x9a8, 0.0f, yREG_F(11) + 1.0f, 1.0f); + } else { + cLib_addCalc2(&field_0x9a8, field_0x9ac, yREG_F(11) + 1.0f, 1.0f); + } + mParticleKey1 = dComIfGp_particle_set(mParticleKey1, 0xa1b, ¤t.pos, &tevStr, &shape_angle, + 0, 0xff, 0, -1, 0, 0, 0); + f32 fVar1 = field_0x9a8; + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey1); + if (emitter != NULL) { + emitter->setGlobalParticleScale(fVar1, fVar1); + } } /* 80C36F58-80C37324 001EB8 03CC+00 1/1 0/0 0/0 .text BoomChk__10daObjKAM_cFv */ void daObjKAM_c::BoomChk() { - // NONMATCHING + if (field_0x9c1 != 0) { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& playerPos = fopAcM_GetPosition(player); + home.pos = current.pos; + cXyz playerPosOffset = playerPos; + playerPosOffset.y += 100.0f; + + if (mBoomerangMove.posMove(¤t.pos, &shape_angle.y, NULL, 0x1c00)) { + mBoomerangMove.bgCheckAfterOffset(¤t.pos); + current.pos.y += yREG_F(19) + 0.5f; + } else { + dBgS_LinChk linChk; + linChk.SetObj(); + linChk.Set(&playerPosOffset, ¤t.pos, NULL); + if (dComIfG_Bgsp().LineCross(&linChk) != 0) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + + current.pos = old.pos = linChk.GetCross(); + + field_0x980 = 0; + field_0x981 = 0; + + cXyz* normal = plane.GetNP(); + current.pos = linChk.GetCross(); + + cXyz origin(0.0f, 0.0f, 0.0f); + cXyz normalYz(0.0f, normal->y, normal->z); + f32 normalYzMag = origin.abs(normalYz); + field_0x99a.z = -cM_atan2s(normal->x, normalYzMag); + field_0x99a.x = cM_atan2s(normal->z, normal->y); + mNormalYaw = cM_atan2s(normal->x, normal->z); + } else { + field_0x980 = 1; + field_0x981 = 2; + + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 6), 2, 5.0f, 1.0f, + 0.0f, -1.0f); + + speedF = 8.0f; + field_0x988 = cM_rndF(5.0f) + 8.0f; + home.pos = current.pos; + field_0x98c = 5.0f; + speed.y = 5.0f; + field_0x982[0] = 50; + current.pos.y += 50.0f; + field_0x982[1] = cM_rndF(5.0f) + 5.0f; + current.pos.y = old.pos.y = playerPos.y + 100.0f; + } + + field_0x9c1 = 0; + } + } } /* 80C37324-80C374AC 002284 0188+00 1/1 0/0 0/0 .text ObjHit__10daObjKAM_cFv */ void daObjKAM_c::ObjHit() { - // NONMATCHING + if (mSphere.ChkTgHit() != 0) { + cCcD_ObjHitInf* hitObj = mSphere.GetTgHitObj(); + if (hitObj->ChkAtType(AT_TYPE_BOOMERANG) != 0) { + if (field_0x9c1 == 0) { + field_0x9c1 = 1; + mBoomerangMove.initOffset(¤t.pos, mSphere.GetTgHitGObj()); + } + } else { + if (hitObj->ChkAtType(AT_TYPE_NORMAL_SWORD) == 0 && + hitObj->ChkAtType(AT_TYPE_HOOKSHOT) != 0) + { + cXyz offset(0.0f, 0.0f, 0.0f); + daPy_getPlayerActorClass()->setHookshotCarryOffset(fopAcM_GetID(this), &offset); + field_0x980 = 1; + field_0x981 = 2; + field_0x9c1 = 0; + mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Kam", 6), 2, 5.0f, 1.0f, + 0.0f, -1.0f); + speedF = 8.0f; + field_0x988 = cM_rndF(5.0f) + 8.0f; + field_0x982[1] = cM_rndF(5.0f) + 5.0f; + } + } + mSphere.ClrTgHit(); + } } -/* ############################################################################################## */ -/* 80C384D8-80C384DC 0000D0 0004+00 0/1 0/0 0/0 .rodata @4693 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4693 = 10000.0f; -COMPILER_STRIP_GATE(0x80C384D8, &lit_4693); -#pragma pop - /* 80C374AC-80C37724 00240C 0278+00 1/1 0/0 0/0 .text Execute__10daObjKAM_cFv */ -void daObjKAM_c::Execute() { - // NONMATCHING +int daObjKAM_c::Execute() { + if (ChkGetDemo() != 0) { + field_0x9b8 = field_0x9bc + 10000.0f; + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); + Insect_GetDemoMain(); + ParticleSet(); + return 1; + } + + daPy_py_c* unusedPlayer = daPy_getPlayerActorClass(); + attention_info.position = current.pos; + eyePos = current.pos; + eyePos.y += 10.0f; + switch (field_0x9c0) { + case 0: + if (fopAcM_checkHookCarryNow(this) == 0) { + Action(); + } else { + home.pos = current.pos; + } + mParticleKey2 = dComIfGp_particle_set(mParticleKey2, 0xa1c, ¤t.pos, &tevStr, + &shape_angle, 0, 0xff, 0, -1, 0, 0, 0); + SetCcSph(); + ObjHit(); + BoomChk(); + eyePos = current.pos; + eyePos.y += 10.0f; + attention_info.position = eyePos; + attention_info.position.y += 10.0f; + ParticleSet(); + break; + case 1: + ShopAction(); + break; + } + if (field_0x980 == 1 && field_0x981 == 2 && speed.y < 0.0f) { + mObjAcch.CrrPos(dComIfG_Bgsp()); + } + mpBrkAnm->play(); + mpBtkAnm->play(); + mpMorfSO->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + setBaseMtx(); + return 1; } -/* ############################################################################################## */ -/* 80C385D0-80C385D4 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80C385D0[4]; - /* 80C37724-80C3778C 002684 0068+00 1/1 0/0 0/0 .text Delete__10daObjKAM_cFv */ -void daObjKAM_c::Delete() { - // NONMATCHING +int daObjKAM_c::Delete() { + dComIfG_resDelete(&mPhase, "I_Kam"); + if (field_0xa64 != 0) { + l_initHIO = FALSE; + mDoHIO_DELETE_CHILD(l_HIO.field_0x4); + } + if (heap != NULL) { + mpMorfSO->stopZelAnime(); + } + return 1; } /* 80C3778C-80C377F4 0026EC 0068+00 1/1 0/0 0/0 .text setBaseMtx__10daObjKAM_cFv */ void daObjKAM_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x99a); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(scale); + + MtxP mtx = mDoMtx_stack_c::get(); + mpMorfSO->getModel()->setBaseTRMtx(mtx); + mpMorfSO->modelCalc(); } -/* ############################################################################################## */ -/* 80C384DC-80C384E0 0000D4 0004+00 1/1 0/0 0/0 .rodata @4757 */ -SECTION_RODATA static f32 const lit_4757 = 15.0f; -COMPILER_STRIP_GATE(0x80C384DC, &lit_4757); - -/* 80C384E0-80C384E4 0000D8 0004+00 1/1 0/0 0/0 .rodata @4758 */ -SECTION_RODATA static f32 const lit_4758 = -3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C384E0, &lit_4758); - /* 80C377F4-80C378D4 002754 00E0+00 1/0 0/0 0/0 .text daObjKAM_Draw__FP10daObjKAM_c */ -static void daObjKAM_Draw(daObjKAM_c* param_0) { - // NONMATCHING +static int daObjKAM_Draw(daObjKAM_c* i_this) { + return i_this->Draw(); } /* 80C378D4-80C378F4 002834 0020+00 2/1 0/0 0/0 .text daObjKAM_Execute__FP10daObjKAM_c */ -static void daObjKAM_Execute(daObjKAM_c* param_0) { - // NONMATCHING +static int daObjKAM_Execute(daObjKAM_c* i_this) { + return i_this->Execute(); } /* ############################################################################################## */ /* 80C384E4-80C384E8 0000DC 0004+00 1/2 0/0 0/0 .rodata l_musiya_num */ -SECTION_RODATA static u32 const l_musiya_num = 0x019D019E; -COMPILER_STRIP_GATE(0x80C384E4, &l_musiya_num); - -/* 80C384FC-80C384FC 0000F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C38502 = "R_SP160"; -#pragma pop +static u16 const l_musiya_num[2] = {0x019D, 0x019E}; /* 80C378F4-80C37AA0 002854 01AC+00 1/1 0/0 0/0 .text CreateChk__10daObjKAM_cFv */ -void daObjKAM_c::CreateChk() { - // NONMATCHING +u8 daObjKAM_c::CreateChk() { + u8 unkInt1 = (fopAcM_GetParam(this) & 0xf00) >> 8; + if (unkInt1 == 0xf) { + unkInt1 = 0; + } + if (field_0x9c0 != 2) { + if (unkInt1 != 0) { + if (!dComIfGs_isEventBit( + (u16)dSv_event_flag_c::saveBitLabels[l_musiya_num[SEX_MALE]]) || + !dComIfGs_isEventBit( + (u16)dSv_event_flag_c::saveBitLabels[l_musiya_num[SEX_FEMALE]])) + { + return 0; + } + } else { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 && + dComIfGp_getStartStageRoomNo() == 3) + { + if (dMenu_Insect_c::isCatchNotGiveInsect(l_kam_itemno[mSex])) { + return 0; + } + + if (mSex == SEX_MALE && + !dComIfGs_isEventBit( + (u16)dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]]) || + mSex == SEX_FEMALE && + !dComIfGs_isEventBit( + (u16)dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]])) + { + return 0; + } + } + } + } + return 1; } -/* ############################################################################################## */ -/* 80C384E8-80C384EC 0000E0 0004+00 0/1 0/0 0/0 .rodata @5032 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5032 = 11.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C384E8, &lit_5032); -#pragma pop - -/* 80C384EC-80C384F0 0000E4 0004+00 0/1 0/0 0/0 .rodata @5033 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5033 = 500.0f; -COMPILER_STRIP_GATE(0x80C384EC, &lit_5033); -#pragma pop - -/* 80C384F0-80C384F4 0000E8 0004+00 0/1 0/0 0/0 .rodata @5034 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5034 = -200.0f; -COMPILER_STRIP_GATE(0x80C384F0, &lit_5034); -#pragma pop - -/* 80C384F4-80C384F8 0000EC 0004+00 0/1 0/0 0/0 .rodata @5035 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5035 = -1000.0f; -COMPILER_STRIP_GATE(0x80C384F4, &lit_5035); -#pragma pop - -/* 80C384F8-80C384FC 0000F0 0004+00 0/1 0/0 0/0 .rodata @5036 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5036 = -50.0f; -COMPILER_STRIP_GATE(0x80C384F8, &lit_5036); -#pragma pop - -/* 80C385D4-80C385E0 00000C 000C+00 1/1 0/0 0/0 .bss @3770 */ -static u8 lit_3770[12]; - -/* 80C385E0-80C385F0 000018 0010+00 2/2 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[16]; - /* 80C37AA0-80C38258 002A00 07B8+00 1/1 0/0 0/0 .text create__10daObjKAM_cFv */ -void daObjKAM_c::create() { - // NONMATCHING -} +int daObjKAM_c::create() { + fopAcM_SetupActor(this, daObjKAM_c); -/* 80C38258-80C382C8 0031B8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} + s32 loadResult = dComIfG_resLoad(&mPhase, "I_Kam"); + if (loadResult == cPhs_COMPLEATE_e) { + OS_REPORT("KAM PARAM %x\n", fopAcM_GetParam(this)); -/* 80C382C8-80C38310 003228 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} + field_0x9c0 = fopAcM_GetParam(this) & 0xf; + if (field_0x9c0 == 2) { + field_0x56c = 0; + shape_angle.x -= (s16)0x2000; + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + } else { + mDraw = true; + } -/* 80C38310-80C38358 003270 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING +#ifdef DEBUG +#define DAOBJKAM_C_CREATE_DIST_INDEX fopAc_attn_ETC_e +#else +#define DAOBJKAM_C_CREATE_DIST_INDEX fopAc_attn_CARRY_e +#endif + attention_info.distances[DAOBJKAM_C_CREATE_DIST_INDEX] = 93; + + mSex = (fopAcM_GetParam(this) & 0x10) >> 4; + setItemNo(l_kam_itemno[mSex]); + setSaveBitNo(l_musiya_num[mSex]); + if (mSex == SEX_FEMALE) { + scale.set(l_HIO.mModelScaleFemale, l_HIO.mModelScaleFemale, l_HIO.mModelScaleFemale); + field_0x9ac = 1.0f; + } else if (mSex == SEX_MALE) { + scale.set(l_HIO.mModelScaleMale, l_HIO.mModelScaleMale, l_HIO.mModelScaleMale); + field_0x9ac = 1.1f; + } + + if (CreateChk() == 0) { + return cPhs_ERROR_e; + } + + if (fopAcM_entrySolidHeap(this, useHeapInit, 0xb50) == 0) { + return cPhs_ERROR_e; + } + + if (l_initHIO == FALSE) { + l_initHIO = TRUE; + field_0xa64 = 1; + // Golden Mantis + l_HIO.field_0x4 = mDoHIO_CREATE_CHILD("黄金蟲(カマキリ)", &l_HIO); + } + + field_0x980 = 0; + field_0x981 = 1; + + gravity = 0.0f + nREG_F(0); + + bool unkBool1 = false; + + cXyz unkXyz1(0.0f, 0.0f, 500.0f); + cXyz unkXyz2(0.0f, 0.0f, -200.0f); + cXyz unkXyz3; + cXyz unkXyz4; + + dBgS_LinChk linkChk; + linkChk.SetObj(); + + for (s32 i = 0; i < 4; i++) { + cLib_offsetPos(&unkXyz3, ¤t.pos, shape_angle.y + (i << 14), &unkXyz1); + cLib_offsetPos(&unkXyz4, ¤t.pos, shape_angle.y + (i << 14), &unkXyz2); + + linkChk.Set(&unkXyz4, &unkXyz3, NULL); + linkChk.SetObj(); + + if (dComIfG_Bgsp().LineCross(&linkChk) != 0) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linkChk, &plane); + cXyz* normal = plane.GetNP(); + current.pos = linkChk.GetCross(); + cXyz origin(0.0f, 0.0f, 0.0f); + cXyz normalYz(0.0f, normal->y, normal->z); + f32 normalYzMag = origin.abs(normalYz); + field_0x99a.z = -cM_atan2s(normal->x, normalYzMag); + field_0x99a.x = cM_atan2s(normal->z, normal->y); + + unkBool1 = true; + + break; + } + } + + if (!unkBool1) { + unkXyz1.set(0.0f, 500.0f, 0.0f); + unkXyz3.set(0.0f, -1000.0f, 0.0f); + linkChk.Set(&unkXyz1, &unkXyz3, NULL); + linkChk.SetObj(); + if (dComIfG_Bgsp().LineCross(&linkChk) != 0) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linkChk, &plane); + cXyz* normal = plane.GetNP(); + current.pos = linkChk.GetCross(); + cXyz origin(0.0f, 0.0f, 0.0f); + cXyz normalYz(0.0f, normal->y, normal->z); + f32 normalYzMag = origin.abs(normalYz); + field_0x99a.z = -cM_atan2s(normal->x, normalYzMag); + field_0x99a.x = cM_atan2s(normal->z, normal->y); + } + } + if (field_0x9c0 == 0) { + InitCcSph(); + } + + if (field_0x9c0 == 2) { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) != 0 || + dComIfGp_getStartStageRoomNo() != 3) + { + InitCcSph(); + } + } + + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + + fopAcM_SetMtx(this, mpMorfSO->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -50.0f, -50.0f, -50.0f); + fopAcM_SetMax(this, 50.0f, 50.0f, 50.0f); + mCreatureSound.init(¤t.pos, &eyePos, 3, 1); + daObjKAM_Execute(this); + } + + return loadResult; } /* 80C38358-80C38360 0032B8 0008+00 1/0 0/0 0/0 .text daObjKAM_IsDelete__FP10daObjKAM_c @@ -738,29 +924,27 @@ static bool daObjKAM_IsDelete(daObjKAM_c* param_0) { return true; } -/* 80C38360-80C383A8 0032C0 0048+00 2/1 0/0 0/0 .text __dt__14daObj_KamHIO_cFv */ -daObj_KamHIO_c::~daObj_KamHIO_c() { - // NONMATCHING -} +/* 80C3850C-80C3852C -00001 0020+00 1/0 0/0 0/0 .data l_daObjKAM_Method */ +static actor_method_class l_daObjKAM_Method = { + (process_method_func)daObjKAM_Create, (process_method_func)daObjKAM_Delete, + (process_method_func)daObjKAM_Execute, (process_method_func)daObjKAM_IsDelete, + (process_method_func)daObjKAM_Draw, +}; -/* 80C383A8-80C383E4 003308 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_kamakiri_cpp */ -void __sinit_d_a_obj_kamakiri_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C383A8, __sinit_d_a_obj_kamakiri_cpp); -#pragma pop - -/* 80C383E4-80C383EC 003344 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80C383E4() { - // NONMATCHING -} - -/* 80C383EC-80C383F4 00334C 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80C383EC() { - // NONMATCHING -} - -/* 80C384FC-80C384FC 0000F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80C3852C-80C3855C -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Kam */ +extern actor_process_profile_definition g_profile_Obj_Kam = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_Kam, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjKAM_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 482, // mPriority + &l_daObjKAM_Method, // sub_method + 0x000C0120, // mStatus + fopAc_ENV_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_obj_nan.cpp b/src/d/actor/d_a_obj_nan.cpp index c58572c91da..81cf43917c8 100644 --- a/src/d/actor/d_a_obj_nan.cpp +++ b/src/d/actor/d_a_obj_nan.cpp @@ -321,7 +321,7 @@ void daObjNAN_c::bin_wait() { fopAcM_OnStatus(this, 0x4000); mDraw = false; field_0x7d0++; - } else if (field_0x7d0 != -1 && field_0x56C != 0) { + } else if (field_0x7d0 != -1 && field_0x56c != 0) { current.angle.y = daPy_getPlayerActorClass()->current.angle.y - 0x4000; if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 3) @@ -558,7 +558,7 @@ static u8 const l_nan_itemno[2] = { /* 80CA276C-80CA2904 0022AC 0198+00 1/1 0/0 0/0 .text execute__10daObjNAN_cFv */ int daObjNAN_c::execute() { if (ChkGetDemo()) { - field_0x57C = field_0x578 + 10000.0f; + field_0x57c = field_0x578 + 10000.0f; mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); Insect_GetDemoMain(); nan_setParticle(); diff --git a/src/d/actor/d_a_obj_ten.cpp b/src/d/actor/d_a_obj_ten.cpp index dc3af8c7b17..00d45ea78b5 100644 --- a/src/d/actor/d_a_obj_ten.cpp +++ b/src/d/actor/d_a_obj_ten.cpp @@ -453,7 +453,7 @@ void daObjTEN_c::checkGroundPos() { /* 80D0A13C-80D0A154 001A5C 0018+00 1/0 0/0 0/0 .text Insect_Release__10daObjTEN_cFv */ void daObjTEN_c::Insect_Release() { - field_0x56C = 1; + field_0x56c = 1; field_0x624 = 2; mAction = ACTION_MOVE; } @@ -729,7 +729,7 @@ int daObjTEN_c::create() { if (rv == cPhs_COMPLEATE_e) { field_0x624 = fopAcM_GetParam(this) & 0xf; if (field_0x624 == 2) { - field_0x56C = 0; + field_0x56c = 0; shape_angle.x -= 0x2000; fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); } else { diff --git a/src/d/d_insect.cpp b/src/d/d_insect.cpp index af8fae97b5c..8986f9805b1 100644 --- a/src/d/d_insect.cpp +++ b/src/d/d_insect.cpp @@ -30,7 +30,7 @@ SECTION_DATA extern void* __vt__8daItem_c__HACK[] = { /* 8015E010-8015E078 158950 0068+00 0/0 0/0 13/13 .text __ct__9dInsect_cFv */ dInsect_c::dInsect_c() { m_itemId = -1; - field_0x56C = 0; + field_0x56c = 0; mDraw = true; m_mode = 0; m_itemNo = fpcNm_ITEM_M_MAYFLY; @@ -127,7 +127,7 @@ void dInsect_c::CalcZBuffer(f32 param_0) { pos_projected.z = -10.0f; } - field_0x57C = + field_0x57c = (((view_near + ((view_far * view_near) / pos_projected.z)) / (view_far - view_near)) + 1.0f) * 16777215.0f; diff --git a/src/d/d_menu_insect.cpp b/src/d/d_menu_insect.cpp index 2e137b27ef6..7392541cdd3 100644 --- a/src/d/d_menu_insect.cpp +++ b/src/d/d_menu_insect.cpp @@ -633,7 +633,7 @@ bool dMenu_Insect_c::isGiveInsect(u8 i_insectID) { /* 801D9F3C-801D9F8C 1D487C 0050+00 0/0 1/1 12/12 .text isCatchNotGiveInsect__14dMenu_Insect_cFUc */ -u8 dMenu_Insect_c::isCatchNotGiveInsect(u8 param_0) { +bool dMenu_Insect_c::isCatchNotGiveInsect(u8 param_0) { if (isCatchInsect(param_0) != 0 && isGiveInsect(param_0) == 0) { return 1; }