diff --git a/config/GZ2E01/rels/d_a_obj_nan/symbols.txt b/config/GZ2E01/rels/d_a_obj_nan/symbols.txt index 5de749c8b47..5b780bb0ed8 100644 --- a/config/GZ2E01/rels/d_a_obj_nan/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_nan/symbols.txt @@ -5,10 +5,10 @@ __register_global_object = .text:0x00000078; // type:function size:0x1C scope:gl __destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global __ct__14daObj_NanHIO_cFv = .text:0x000000EC; // type:function size:0x28 scope:global setAction__10daObjNAN_cFM10daObjNAN_cFPCvPv_v = .text:0x00000114; // type:function size:0xA4 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x000001B8; // type:function size:0x274 scope:global +useHeapInit__FP10fopAc_ac_c = .text:0x000001B8; // type:function size:0x274 scope:local __dt__12J3DFrameCtrlFv = .text:0x0000042C; // type:function size:0x48 scope:global -daObjNAN_Create__FP10fopAc_ac_c = .text:0x00000474; // type:function size:0x20 scope:global -daObjNAN_Delete__FP10daObjNAN_c = .text:0x00000494; // type:function size:0x24 scope:global +daObjNAN_Create__FP10fopAc_ac_c = .text:0x00000474; // type:function size:0x20 scope:local +daObjNAN_Delete__FP10daObjNAN_c = .text:0x00000494; // type:function size:0x24 scope:local nan_posMove__10daObjNAN_cFv = .text:0x000004B8; // type:function size:0xB4 scope:global turn__10daObjNAN_cFv = .text:0x0000056C; // type:function size:0x328 scope:global __dt__8cM3dGPlaFv = .text:0x00000894; // type:function size:0x48 scope:global @@ -26,13 +26,13 @@ action__10daObjNAN_cFv = .text:0x0000224C; // type:function size:0x60 scope:glob execute__10daObjNAN_cFv = .text:0x000022AC; // type:function size:0x198 scope:global _delete__10daObjNAN_cFv = .text:0x00002444; // type:function size:0x68 scope:global setBaseMtx__10daObjNAN_cFv = .text:0x000024AC; // type:function size:0x80 scope:global -daObjNAN_Draw__FP10daObjNAN_c = .text:0x0000252C; // type:function size:0x15C scope:global -daObjNAN_Execute__FP10daObjNAN_c = .text:0x00002688; // type:function size:0x20 scope:global +daObjNAN_Draw__FP10daObjNAN_c = .text:0x0000252C; // type:function size:0x15C scope:local +daObjNAN_Execute__FP10daObjNAN_c = .text:0x00002688; // type:function size:0x20 scope:local create__10daObjNAN_cFv = .text:0x000026A8; // type:function size:0x474 scope:global __dt__8cM3dGSphFv = .text:0x00002B1C; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x00002B64; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00002BAC; // type:function size:0x5C scope:global -daObjNAN_IsDelete__FP10daObjNAN_c = .text:0x00002C08; // type:function size:0x8 scope:global +daObjNAN_IsDelete__FP10daObjNAN_c = .text:0x00002C08; // type:function size:0x8 scope:local __dt__14daObj_NanHIO_cFv = .text:0x00002C10; // type:function size:0x48 scope:global __sinit_d_a_obj_nan_cpp = .text:0x00002C58; // type:function size:0x3C scope:local Insect_Release__9dInsect_cFv = .text:0x00002C94; // type:function size:0xC scope:global @@ -42,8 +42,8 @@ __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 sc _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local @3774 = .rodata:0x00000000; // type:object size:0x4 scope:local -l_nan_brk_index = .rodata:0x00000004; // type:object size:0x8 scope:global -l_nan_btk_index = .rodata:0x0000000C; // type:object size:0x8 scope:global +l_nan_brk_index = .rodata:0x00000004; // type:object size:0x8 scope:local +l_nan_btk_index = .rodata:0x0000000C; // type:object size:0x8 scope:local @3868 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float @3869 = .rodata:0x00000018; // type:object size:0x4 scope:local @3870 = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float @@ -78,21 +78,21 @@ l_nan_btk_index = .rodata:0x0000000C; // type:object size:0x8 scope:global @4491 = .rodata:0x000000A8; // type:object size:0x4 scope:local @4601 = .rodata:0x000000AC; // type:object size:0x4 scope:local @4672 = .rodata:0x000000B0; // type:object size:0x4 scope:local -l_nan_itemno = .rodata:0x000000B4; // type:object size:0x2 scope:global +l_nan_itemno = .rodata:0x000000B4; // type:object size:0x2 scope:local @4742 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float @4744 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double @4823 = .rodata:0x000000C8; // type:object size:0x4 scope:local @4824 = .rodata:0x000000CC; // type:object size:0x4 scope:local data:string @4825 = .rodata:0x000000D0; // type:object size:0x4 scope:local @4826 = .rodata:0x000000D4; // type:object size:0x4 scope:local -l_musiya_num = .rodata:0x000000D8; // type:object size:0x4 scope:global -l_heapsize = .rodata:0x000000DC; // type:object size:0x4 scope:global +l_musiya_num = .rodata:0x000000D8; // type:object size:0x4 scope:local +l_heapsize = .rodata:0x000000DC; // type:object size:0x4 scope:local @5034 = .rodata:0x000000E0; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x000000E4; // type:object size:0xE scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -cc_sph_src__25@unnamed@d_a_obj_nan_cpp@ = .data:0x00000020; // type:object size:0x40 scope:global +cc_sph_src__25@unnamed@d_a_obj_nan_cpp@ = .data:0x00000020; // type:object size:0x40 scope:local @3924 = .data:0x00000060; // type:object size:0xC scope:local data:4byte @4034 = .data:0x0000006C; // type:object size:0xC scope:local data:4byte @4126 = .data:0x00000078; // type:object size:0xC scope:local @@ -109,7 +109,7 @@ cc_sph_src__25@unnamed@d_a_obj_nan_cpp@ = .data:0x00000020; // type:object size: @4683 = .data:0x000000FC; // type:object size:0xC scope:local data:4byte @4938 = .data:0x00000108; // type:object size:0xC scope:local @4941 = .data:0x00000114; // type:object size:0xC scope:local -l_daObjNAN_Method = .data:0x00000120; // type:object size:0x20 scope:global +l_daObjNAN_Method = .data:0x00000120; // type:object size:0x20 scope:local g_profile_Obj_Nan = .data:0x00000140; // type:object size:0x30 scope:global __vt__9dInsect_c = .data:0x00000170; // type:object size:0xC scope:global __vt__10cCcD_GStts = .data:0x0000017C; // type:object size:0xC scope:global @@ -121,6 +121,6 @@ __vt__8cM3dGPla = .data:0x000001B8; // type:object size:0xC scope:global __vt__12J3DFrameCtrl = .data:0x000001C4; // type:object size:0xC scope:global __vt__14daObj_NanHIO_c = .data:0x000001D0; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_581_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_hio_init = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3769 = .bss:0x0000000C; // type:object size:0xC scope:local -l_HIO = .bss:0x00000018; // type:object size:0x10 scope:global data:float +l_HIO = .bss:0x00000018; // type:object size:0x10 scope:local data:float diff --git a/configure.py b/configure.py index a1ff32ac70a..6eb697cd9cb 100755 --- a/configure.py +++ b/configure.py @@ -2013,7 +2013,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_mvstair"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_myogan"), ActorRel(NonMatching, "d_a_obj_nagaisu"), - ActorRel(NonMatching, "d_a_obj_nan"), + ActorRel(Equivalent, "d_a_obj_nan"), ActorRel(NonMatching, "d_a_obj_ndoor"), ActorRel(NonMatching, "d_a_obj_nougu"), ActorRel(Equivalent, "d_a_obj_octhashi"), diff --git a/include/d/actor/d_a_obj_nan.h b/include/d/actor/d_a_obj_nan.h index 0095b95b28e..aa7b2cb4755 100644 --- a/include/d/actor/d_a_obj_nan.h +++ b/include/d/actor/d_a_obj_nan.h @@ -1,7 +1,12 @@ #ifndef D_A_OBJ_NAN_H #define D_A_OBJ_NAN_H +#include "SSystem/SComponent/c_phase.h" #include "d/d_insect.h" +#include "d/actor/d_a_player.h" +#include "d/d_cc_d.h" + +class daPy_boomerangMove_c; /** * @ingroup actors-objects @@ -13,10 +18,12 @@ */ class daObjNAN_c : public dInsect_c { public: - /* 80CA05D4 */ void setAction(void (daObjNAN_c::*)()); + typedef void (daObjNAN_c::*actionFunc)(); + + /* 80CA05D4 */ void setAction(actionFunc); /* 80CA0978 */ void nan_posMove(); /* 80CA0A2C */ void turn(); - /* 80CA0D9C */ void nan_WalkAnm(); + /* 80CA0D9C */ u8 nan_WalkAnm(); /* 80CA0E7C */ void wait(); /* 80CA1184 */ void walk(); /* 80CA1904 */ void bin_wait(); @@ -27,13 +34,39 @@ public: /* 80CA2368 */ void drop(); /* 80CA2658 */ void hit_check(); /* 80CA270C */ void action(); - /* 80CA276C */ void execute(); - /* 80CA2904 */ void _delete(); + /* 80CA276C */ int execute(); + /* 80CA2904 */ int _delete(); /* 80CA296C */ void setBaseMtx(); - /* 80CA2B68 */ void create(); + /* 80CA2B68 */ int create(); + + inline int CreateHeap(); + inline int draw(); private: - /* 0x590 */ u8 field_0x568[0x800 - 0x590]; + /* 0x590 */ request_of_phase_process_class mPhase; + /* 0x598 */ Z2Creature mCreatureSound; + /* 0x628 */ mDoExt_McaMorfSO* mMorf; + /* 0x62C */ mDoExt_brkAnm* mBrk; + /* 0x630 */ mDoExt_btkAnm* mBtk; + /* 0x634 */ dCcD_Stts mStts; + /* 0x670 */ dCcD_Sph mSph; + /* 0x7A8 */ daPy_boomerangMove_c mBoomerangMove; + /* 0x7B4 */ int field_0x7b4; + /* 0x7B8 */ actionFunc mAction; + /* 0x7C4 */ actionFunc mPrevAction; + /* 0x7D0 */ int field_0x7d0; + /* 0x7D4 */ csXyz field_0x7d4; + /* 0x7DA */ csXyz field_0x7da; + /* 0x7E0 */ s16 field_0x7e0; + /* 0x7E2 */ s16 field_0x7e2; + /* 0x7E4 */ s16 field_0x7e4; + /* 0x7E8 */ f32 field_0x7e8; + /* 0x7E6 */ u8 field_0x7e6[0x7f8 - 0x7ec]; + /* 0x7F8 */ u16 field_0x7f8; + /* 0x7FA */ u8 field_0x7fa; + /* 0x7FB */ u8 field_0x7fb; + /* 0x7FC */ u8 field_0x7fc; + /* 0x7FC */ u8 field_0x7fd; }; STATIC_ASSERT(sizeof(daObjNAN_c) == 0x800); @@ -41,7 +74,11 @@ STATIC_ASSERT(sizeof(daObjNAN_c) == 0x800); class daObj_NanHIO_c { public: /* 80CA05AC */ daObj_NanHIO_c(); - /* 80CA30D0 */ ~daObj_NanHIO_c(); + /* 80CA30D0 */ virtual ~daObj_NanHIO_c() {} + + /* 0x04 */ s8 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; }; diff --git a/include/d/d_cc_uty.h b/include/d/d_cc_uty.h index 7975eca9426..9e080aa47c0 100644 --- a/include/d/d_cc_uty.h +++ b/include/d/d_cc_uty.h @@ -1,6 +1,7 @@ #ifndef D_CC_D_CC_UTY_H #define D_CC_D_CC_UTY_H +#include "SSystem/SComponent/c_sxyz.h" #include "dolphin/types.h" class cCcD_Obj; @@ -20,9 +21,7 @@ struct dCcU_AtInfo { /* 0x00 */ cCcD_Obj* mpCollider; /* 0x04 */ fopAc_ac_c* mpActor; /* 0x08 */ Z2Creature* mpSound; - /* 0x0C */ u8 field_0xc[2]; - /* 0x0E */ s16 mHitDirection; - /* 0x10 */ u8 field_0x10[4]; + /* 0x0C */ csXyz mHitDirection; /* 0x14 */ u32 mHitBit; /* 0x18 */ u32 field_0x18; /* 0x1C */ u16 mAttackPower; diff --git a/include/d/d_insect.h b/include/d/d_insect.h index 8d2b109cdb2..be52453e8e7 100644 --- a/include/d/d_insect.h +++ b/include/d/d_insect.h @@ -25,6 +25,7 @@ public: 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; } public: /* 0x56C */ u8 field_0x56C; diff --git a/src/d/actor/d_a_e_ba.cpp b/src/d/actor/d_a_e_ba.cpp index ac6b0050fc1..3e785beb612 100644 --- a/src/d/actor/d_a_e_ba.cpp +++ b/src/d/actor/d_a_e_ba.cpp @@ -146,7 +146,7 @@ static void damage_check(e_ba_class* i_this) { i_this->mIFrames = 10; } i_this->mKnockbackSpeed = 80.0f; - i_this->mKnockbackAngle = i_this->mAtInfo.mHitDirection; + i_this->mKnockbackAngle = i_this->mAtInfo.mHitDirection.y; if (i_this->health <= 0) { i_this->mCreatureSound.startCreatureVoice(Z2SE_EN_BA_V_DEATH, -1); i_this->mpMorf->setPlaySpeed(0.2f); diff --git a/src/d/actor/d_a_e_fs.cpp b/src/d/actor/d_a_e_fs.cpp index 59ecda6ee1f..4eb8a9fe9b7 100644 --- a/src/d/actor/d_a_e_fs.cpp +++ b/src/d/actor/d_a_e_fs.cpp @@ -438,7 +438,7 @@ static void damage_check(e_fs_class* i_this) { } else { i_this->mIFrameTimer = 10; } - i_this->current.angle.y = i_this->mAtInfo.mHitDirection; + i_this->current.angle.y = i_this->mAtInfo.mHitDirection.y; if (i_this->health <= 0) { i_this->mAction = e_fs_class::ACT_END; diff --git a/src/d/actor/d_a_e_fz.cpp b/src/d/actor/d_a_e_fz.cpp index 9df52ec5d1d..df9ecdedebf 100644 --- a/src/d/actor/d_a_e_fz.cpp +++ b/src/d/actor/d_a_e_fz.cpp @@ -253,7 +253,7 @@ void daE_FZ_c::damage_check() { dComIfGp_setHitMark(3,this,&pos3,&s_pos,0,AT_TYPE_0); } - mLastWallHitAngle = mAtInfo.mHitDirection; + mLastWallHitAngle = mAtInfo.mHitDirection.y; setReflectAngle(); current.angle.y += -32768; field_0x712 = 10; diff --git a/src/d/actor/d_a_e_oct_bg.cpp b/src/d/actor/d_a_e_oct_bg.cpp index ba57c225e45..74ce2928d65 100644 --- a/src/d/actor/d_a_e_oct_bg.cpp +++ b/src/d/actor/d_a_e_oct_bg.cpp @@ -740,7 +740,7 @@ void daE_OctBg_c::damage() { field_0x8c0.OffTgSetBit(); field_0x9f8.OffAtSetBit(); attention_info.flags = 0; - current.angle.y = field_0xb30.mHitDirection + 0x8000; + current.angle.y = field_0xb30.mHitDirection.y + 0x8000; speedF = 10.0f; field_0xb96 = 0x1000; speed.y = 0.0f; diff --git a/src/d/actor/d_a_e_ot.cpp b/src/d/actor/d_a_e_ot.cpp index f97a78dc409..cd492703e6c 100644 --- a/src/d/actor/d_a_e_ot.cpp +++ b/src/d/actor/d_a_e_ot.cpp @@ -550,7 +550,7 @@ void daE_OT_c::executeDamage() { mMode = 1; mAnmSpeed = 1.0f; gravity = -5.0f; - current.angle.y = mAtInfo.mHitDirection + 0x8000 + cM_rndFX(0x2000); + current.angle.y = mAtInfo.mHitDirection.y + 0x8000 + cM_rndFX(0x2000); break; case 1: diff --git a/src/d/actor/d_a_e_yk.cpp b/src/d/actor/d_a_e_yk.cpp index 580bf472083..48f7d1dde96 100644 --- a/src/d/actor/d_a_e_yk.cpp +++ b/src/d/actor/d_a_e_yk.cpp @@ -175,7 +175,7 @@ static void damage_check(e_yk_class* i_this) { } i_this->field_0x694 = cM_rndF(10.0f) + 70.0f; - i_this->field_0x698 = i_this->mAtColliderInfo.mHitDirection; + i_this->field_0x698 = i_this->mAtColliderInfo.mHitDirection.y; // If keese is dead, play death sound if (i_this->health <= 0) { diff --git a/src/d/actor/d_a_e_ym.cpp b/src/d/actor/d_a_e_ym.cpp index 2ec51c5ba3b..1a2db9de0d9 100644 --- a/src/d/actor/d_a_e_ym.cpp +++ b/src/d/actor/d_a_e_ym.cpp @@ -964,7 +964,7 @@ void daE_YM_c::executeDown() { field_0x668.set(0, 0, 0); speedF = cM_rndF(5.0f) + 15.0f; speed.y = cM_rndF(5.0f) + 40.0f; - shape_angle.y = mAtInfo.mHitDirection + 0x8000; + shape_angle.y = mAtInfo.mHitDirection.y + 0x8000; shape_angle.x = 0; mAcch.ClrGroundHit(); mAcchCir.SetWall(40.0f, 60.0f); diff --git a/src/d/actor/d_a_obj_nan.cpp b/src/d/actor/d_a_obj_nan.cpp index 6e0fe5183f9..c58572c91da 100644 --- a/src/d/actor/d_a_obj_nan.cpp +++ b/src/d/actor/d_a_obj_nan.cpp @@ -4,322 +4,754 @@ */ #include "d/actor/d_a_obj_nan.h" -#include "dol2asm.h" +#include "SSystem/SComponent/c_xyz.h" +#include "d/d_menu_insect.h" +#include "d/d_cc_uty.h" +#include "d/d_com_inf_game.h" - - -// -// Forward References: -// - -extern "C" void __ct__14daObj_NanHIO_cFv(); -extern "C" void setAction__10daObjNAN_cFM10daObjNAN_cFPCvPv_v(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daObjNAN_Create__FP10fopAc_ac_c(); -extern "C" static void daObjNAN_Delete__FP10daObjNAN_c(); -extern "C" void nan_posMove__10daObjNAN_cFv(); -extern "C" void turn__10daObjNAN_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void nan_WalkAnm__10daObjNAN_cFv(); -extern "C" void wait__10daObjNAN_cFv(); -extern "C" void walk__10daObjNAN_cFv(); -extern "C" void bin_wait__10daObjNAN_cFv(); -extern "C" void bin_action__10daObjNAN_cFv(); -extern "C" void nan_setParticle__10daObjNAN_cFv(); -extern "C" void hook__10daObjNAN_cFv(); -extern "C" void boomerang__10daObjNAN_cFv(); -extern "C" void drop__10daObjNAN_cFv(); -extern "C" void hit_check__10daObjNAN_cFv(); -extern "C" void action__10daObjNAN_cFv(); -extern "C" void execute__10daObjNAN_cFv(); -extern "C" void _delete__10daObjNAN_cFv(); -extern "C" void setBaseMtx__10daObjNAN_cFv(); -extern "C" static void daObjNAN_Draw__FP10daObjNAN_c(); -extern "C" static void daObjNAN_Execute__FP10daObjNAN_c(); -extern "C" void create__10daObjNAN_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static bool daObjNAN_IsDelete__FP10daObjNAN_c(); -extern "C" void __dt__14daObj_NanHIO_cFv(); -extern "C" void __sinit_d_a_obj_nan_cpp(); -extern "C" void Insect_Release__9dInsect_cFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" extern char const* const d_a_obj_nan__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__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 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_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData(); -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 LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__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 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 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 CalcZBuffer__9dInsect_cFf(); -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 SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chaseAngleS__FPsss(); -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 __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void __cvt_fp2unsigned(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_27(); -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: -// - -/* ############################################################################################## */ -/* 80CA31BC-80CA31C0 000000 0004+00 12/12 0/0 0/0 .rodata @3774 */ -SECTION_RODATA static f32 const lit_3774 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CA31BC, &lit_3774); - -/* 80CA32B0-80CA32BC 000000 000C+00 2/2 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, -}; - -/* 80CA32BC-80CA32D0 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 /* 80CA32D0-80CA3310 000020 0040+00 0/1 0/0 0/0 .data cc_sph_src__25@unnamed@d_a_obj_nan_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80CA32D0[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x40, 0x40, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, -}; -#pragma pop - -/* 80CA3310-80CA331C -00001 000C+00 1/1 0/0 0/0 .data @3924 */ -SECTION_DATA static void* lit_3924[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)walk__10daObjNAN_cFv, +static dCcD_SrcSph cc_sph_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0x014040, 0x43}, 0}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 20.0f} // mSph + } // mSphAttr }; -/* 80CA331C-80CA3328 -00001 000C+00 1/1 0/0 0/0 .data @4034 */ -SECTION_DATA static void* lit_4034[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)walk__10daObjNAN_cFv, +/* 80CA05AC-80CA05D4 0000EC 0028+00 1/1 0/0 0/0 .text __ct__14daObj_NanHIO_cFv */ +daObj_NanHIO_c::daObj_NanHIO_c() { + field_0x4 = -1; + field_0xc = 1.2f; + field_0x8 = 1.2f; +} + +/* 80CA05D4-80CA0678 000114 00A4+00 9/9 0/0 0/0 .text + * setAction__10daObjNAN_cFM10daObjNAN_cFPCvPv_v */ +void daObjNAN_c::setAction(actionFunc action) { + if (mAction != NULL) { + field_0x7d0 = -1; + (this->*mAction)(); + } + mPrevAction = mAction; + mAction = action; + field_0x7d0 = 0; + (this->*mAction)(); +} + +/* ############################################################################################## */ +/* 80CA31C0-80CA31C8 000004 0008+00 0/1 0/0 0/0 .rodata l_nan_brk_index */ +static int const l_nan_brk_index[2] = { + 13, 12, }; -/* 80CA3328-80CA3334 -00001 000C+00 0/1 0/0 0/0 .data @4126 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4126[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)turn__10daObjNAN_cFv, -}; -#pragma pop - -/* 80CA3334-80CA3340 -00001 000C+00 0/1 0/0 0/0 .data @4129 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4129[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)turn__10daObjNAN_cFv, -}; -#pragma pop - -/* 80CA3340-80CA334C -00001 000C+00 0/1 0/0 0/0 .data @4133 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4133[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)turn__10daObjNAN_cFv, -}; -#pragma pop - -/* 80CA334C-80CA3358 -00001 000C+00 0/1 0/0 0/0 .data @4138 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4138[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)turn__10daObjNAN_cFv, -}; -#pragma pop - -/* 80CA3358-80CA3364 -00001 000C+00 1/1 0/0 0/0 .data @4318 */ -SECTION_DATA static void* lit_4318[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)drop__10daObjNAN_cFv, +/* 80CA31C8-80CA31D0 00000C 0008+00 0/1 0/0 0/0 .rodata l_nan_btk_index */ +static int const l_nan_btk_index[2] = { + 17, 16, }; -/* 80CA3364-80CA3370 -00001 000C+00 1/1 0/0 0/0 .data @4321 */ -SECTION_DATA static void* lit_4321[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)bin_action__10daObjNAN_cFv, +inline int daObjNAN_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("I_Nan", 9); + JUT_ASSERT(254, modelData != 0); + mMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("I_Nan", 6), 2, 1.0f, + 0, -1, &mCreatureSound, 0, 0x11000284); + if (mMorf == NULL || mMorf->getModel() == NULL) { + return 0; + } + J3DModel* model = mMorf->getModel(); + mBrk = new mDoExt_brkAnm(); + if (mBrk == NULL) { + return 0; + } + J3DAnmTevRegKey* anmRegKey = + (J3DAnmTevRegKey*)dComIfG_getObjectRes("I_Nan", l_nan_brk_index[field_0x7fb]); + if (mBrk->init(model->getModelData(), anmRegKey, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + mBtk = new mDoExt_btkAnm(); + if (mBtk == NULL) { + return 0; + } + J3DAnmTextureSRTKey* anmTexture = + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("I_Nan", l_nan_btk_index[field_0x7fb]); + if (mBtk->init(model->getModelData(), anmTexture, 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + mMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("I_Nan", 6), 2, 5.0f, 1.0f, 0.0f, -1.0f); + return 1; +} + +/* 80CA0678-80CA08EC 0001B8 0274+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); +} + +/* 80CA0934-80CA0954 000474 0020+00 1/0 0/0 0/0 .text daObjNAN_Create__FP10fopAc_ac_c */ +static int daObjNAN_Create(fopAc_ac_c* i_this) { + fopAcM_GetID(i_this); + return static_cast(i_this)->create(); +} + +/* 80CA0954-80CA0978 000494 0024+00 1/0 0/0 0/0 .text daObjNAN_Delete__FP10daObjNAN_c */ +static int daObjNAN_Delete(daObjNAN_c* i_this) { + fopAcM_GetID(i_this); + static_cast(i_this)->_delete(); + return 1; +} + +/* 80CA0978-80CA0A2C 0004B8 00B4+00 1/1 0/0 0/0 .text nan_posMove__10daObjNAN_cFv */ +void daObjNAN_c::nan_posMove() { + if (field_0x7fc == 0) { + cLib_chaseAngleS(&field_0x7d4.x, field_0x7da.x, 0x100); + cLib_chaseAngleS(&field_0x7d4.z, field_0x7da.z, 0x100); + } + cXyz zSpeed(0.0f, 0.0f, speedF); + cXyz posOffset(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::ZXYrotS(field_0x7d4); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&zSpeed, &posOffset); + current.pos += posOffset; +} + +/* 80CA0A2C-80CA0D54 00056C 0328+00 4/0 0/0 0/0 .text turn__10daObjNAN_cFv */ +void daObjNAN_c::turn() { + if (field_0x7d0 == 0) { + speedF = 0.0f; + field_0x7d0++; + } else if (field_0x7d0 != -1) { + dBgS_LinChk linChk; + cXyz cStack_b8(0.0f, 20.0f, 0.0f); + cXyz cStack_c4(0.0f, -20.0f, 0.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x7d4); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(&cStack_b8, &cStack_b8); + mDoMtx_stack_c::multVec(&cStack_c4, &cStack_c4); + linChk.SetObj(); + linChk.Set(&cStack_b8, &cStack_c4, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + const cXyz* normal = plane.GetNP(); + cXyz cStack_d0(0.0f, 0.0f, 0.0f); + cXyz cStack_dc(0.0f, normal->y, normal->z); + f32 uVar9 = cStack_d0.abs(cStack_dc); + current.pos = linChk.GetCross(); + s16 uVar6 = cM_atan2s(normal->z, normal->y); + field_0x7da.x = uVar6; + field_0x7d4.x = uVar6; + s16 sVar7 = -cM_atan2s(normal->x, uVar9); + field_0x7da.z = sVar7; + field_0x7d4.z = sVar7; + } + field_0x7fc = nan_WalkAnm(); + if (field_0x7fc == 0 && + cLib_chaseAngleS(¤t.angle.y, field_0x7e4, 0x40) != 0) + { + setAction(&daObjNAN_c::walk); + } + if (mDraw) { + nan_setParticle(); + } + } +} + +/* 80CA0D9C-80CA0E7C 0008DC 00E0+00 2/2 0/0 0/0 .text nan_WalkAnm__10daObjNAN_cFv */ +u8 daObjNAN_c::nan_WalkAnm() { + if (mMorf->getFrame() == 39.0f || + mMorf->getFrame() == 79.0f) + { + if (field_0x7e2 != 0) { + field_0x7e2--; + mMorf->setPlaySpeed(0.0f); + return 1; + } + field_0x7e2 = (u8)(cM_rndF(30.0f) + 18.0f); + mMorf->setPlaySpeed(1.0f); + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KSKS, 0, -1); + } + return 0; +} + +/* 80CA0E7C-80CA1184 0009BC 0308+00 1/0 0/0 0/0 .text wait__10daObjNAN_cFv */ +void daObjNAN_c::wait() { + if (field_0x7d0 == 0) { + field_0x7d0++; + } else if (field_0x7d0 == -1) { + home.pos = current.pos; + } else { + dBgS_LinChk linChk; + cXyz cStack_b8; + cXyz cStack_c4; + cStack_b8.set(0.0f, 20.0f, 0.0f); + cStack_c4.set(0.0f, -1000.0f, 0.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::multVec(&cStack_b8, &cStack_b8); + mDoMtx_stack_c::multVec(&cStack_c4, &cStack_c4); + linChk.SetObj(); + linChk.Set(&cStack_b8, &cStack_c4, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + const cXyz* normal = plane.GetNP(); + cXyz cStack_d0(0.0f, 0.0f, 0.0f); + cXyz cStack_dc(0.0f, normal->y, normal->z); + f32 uVar8 = cStack_d0.abs(cStack_dc); + current.pos = old.pos = linChk.GetCross(); + s16 uVar6 = cM_atan2s(normal->z, normal->y); + field_0x7da.x = uVar6; + field_0x7d4.x = uVar6; + s16 sVar7 = -cM_atan2s(normal->x, uVar8); + field_0x7da.z = sVar7; + field_0x7d4.z = sVar7; + current.angle.z = 0; + current.angle.x = 0; + setAction(&daObjNAN_c::walk); + } + } +} + +/* 80CA1184-80CA1904 000CC4 0780+00 4/0 0/0 0/0 .text walk__10daObjNAN_cFv */ +void daObjNAN_c::walk() { + if (field_0x7d0 == 0) { + field_0x7e0 = 180; + field_0x7e2 = (u8)(cM_rndF(30.0f) + 18.0f); + field_0x7f8 = 600; + field_0x7fc = 0; + speedF = 0.0f; + field_0x7d0++; + } else if (field_0x7d0 == -1) { + speedF = 0.0f; + } else { + field_0x7fc = nan_WalkAnm(); + f32 dVar15; + if (field_0x7fc != 0) { + dVar15 = 0.0f; + speedF = 0; + } else { + dVar15 = 0.2f; + if (60.0f < mMorf->getFrame() || + (30.0f < mMorf->getFrame() && mMorf->getFrame() < 40.0f)) + { + dVar15 = 0.0f; + } + } + if (field_0x7da.x != field_0x7d4.x || + field_0x7da.z != field_0x7d4.z) + { + dVar15 = 0.0f; + speedF = 0; + } + cLib_chaseF(&speedF, dVar15, 0.02f); + nan_posMove(); + if (mDraw) { + nan_setParticle(); + } + dBgS_LinChk adStack_c8; + dBgS_LinChk adStack_138; + cXyz cStack_170(0.0f, 20.0f, 0.0f); + cXyz cStack_17c(0.0f, -20.0f, 0.0f); + cXyz cStack_188(0.0f, 20.0f, 12.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x7d4); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(&cStack_170, &cStack_170); + mDoMtx_stack_c::multVec(&cStack_17c, &cStack_17c); + mDoMtx_stack_c::multVec(&cStack_188, &cStack_188); + adStack_c8.SetObj(); + adStack_138.SetObj(); + adStack_c8.Set(&cStack_170, &cStack_17c, NULL); + adStack_138.Set(&cStack_170, &cStack_188, NULL); + if (dComIfG_Bgsp().LineCross(&adStack_c8)) { + cM3dGPla plane1; + dComIfG_Bgsp().GetTriPla(adStack_c8, &plane1); + const cXyz* normal = plane1.GetNP(); + cXyz cStack_194(0.0f, 0.0f, 0.0f); + cXyz cStack_1a0(0.0f, normal->y, normal->z); + f32 uVar14 = cStack_194.abs(cStack_1a0); + current.pos = adStack_c8.GetCross(); + field_0x7da.x = cM_atan2s(normal->z, normal->y); + field_0x7da.z = -cM_atan2s(normal->x, uVar14); + if (dComIfG_Bgsp().LineCross(&adStack_138)) { + cM3dGPla plane2; + dComIfG_Bgsp().GetTriPla(adStack_138, &plane2); + normal = plane2.GetNP(); + current.pos = old.pos; + field_0x7e4 = cM_atan2s(normal->x, normal->z) + cM_rndFX(6144.0f); + setAction(&daObjNAN_c::turn); + return; + } else { + + } + } else { + current.pos = old.pos; + field_0x7e4 = current.angle.y - 0x8000 + cM_rndFX(6144.0f); + setAction(&daObjNAN_c::turn); + return; + } + + if (field_0x7f8 == 0) { + field_0x7e4 = cM_rndFX(32768.0f); + setAction(&daObjNAN_c::turn); + return; + } else if (field_0x7e0 == 0 && home.pos.abs(current.pos) > 200.0f) { + cXyz local_1ac; + local_1ac = home.pos - current.pos; + local_1ac.x += cM_rndFX(1050.0f); + local_1ac.z += cM_rndFX(1050.0f); + field_0x7e4 = cM_atan2s(local_1ac.x, local_1ac.z); + setAction(&daObjNAN_c::turn); + return; + } else { + return; + } + } +} + +/* 80CA1904-80CA1A20 001444 011C+00 1/0 0/0 0/0 .text bin_wait__10daObjNAN_cFv */ +void daObjNAN_c::bin_wait() { + if (field_0x7d0 == 0) { + fopAcM_OnStatus(this, 0x4000); + mDraw = false; + field_0x7d0++; + } 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) + { + field_0x7fa = 1; + mDraw = true; + setAction(&daObjNAN_c::drop); + } else { + setAction(&daObjNAN_c::bin_action); + } + } +} + +/* 80CA1A20-80CA1B50 001560 0130+00 1/0 0/0 0/0 .text bin_action__10daObjNAN_cFv */ +void daObjNAN_c::bin_action() { + if (field_0x7d0 == 0) { + mDraw = true; + gravity = -2.0f; + maxFallSpeed = gravity; + scale.setall(0.4f); + field_0x7e0 = 10.0f; + field_0x7d0++; + } else if (field_0x7d0 == -1) { + gravity = 0.0f; + maxFallSpeed = 0.0f; + } else { + f32 newScale = scale.x; + if (mDraw) { + nan_setParticle(); + } + fopAcM_posMoveF(this, 0); + if (field_0x7e0 != 0) { + cLib_chaseF(&newScale, 0.6f, 0.1f); + } else { + cLib_addCalc2(&newScale, 0.0f, 62.0f, 0.05f); + scale.setall(newScale); + if (newScale < 0.1) { + fopAcM_delete(this); + return; + } + } + scale.setall(newScale); + } +} + +/* 80CA1B50-80CA1D5C 001690 020C+00 6/6 0/0 0/0 .text nan_setParticle__10daObjNAN_cFv */ +void daObjNAN_c::nan_setParticle() { + if (CheckZ()) { + cLib_chaseF(&field_0x7e8, 0.0f, 1.0f); + } else { + cLib_chaseF(&field_0x7e8, 1.0f, 1.0f); + } + if (field_0x7fa != 2) { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0) { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) != 0) { + return; + } + if (dComIfGp_getStartStageRoomNo() == 3) { + return; + } + } + mParticleKey1 = dComIfGp_particle_set(mParticleKey1, 0xa1b, ¤t.pos, &tevStr, + &shape_angle, 0, 0xff, 0, -1, 0, 0, 0); + JPABaseEmitter* pEmitter = (JPABaseEmitter*)dComIfGp_particle_getEmitter(mParticleKey1); + if (pEmitter != NULL) { + pEmitter->setGlobalParticleScale(field_0x7e8 * scale.x, field_0x7e8 * scale.x); + } + mParticleKey2 = dComIfGp_particle_set(mParticleKey2, 0xa1c, ¤t.pos, &tevStr, + &shape_angle, 0, 0xff, 0, -1, 0, 0, 0); + pEmitter = dComIfGp_particle_getEmitter(mParticleKey2); + if (pEmitter != NULL) { + pEmitter->setGlobalParticleScale(field_0x7e8 * scale.x, field_0x7e8 * scale.x); + } + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); + } +} + +/* 80CA1D5C-80CA1F60 00189C 0204+00 1/0 0/0 0/0 .text hook__10daObjNAN_cFv */ +void daObjNAN_c::hook() { + if (field_0x7d0 == 0) { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz cStack_b0(0.0f, -5.0f, 0.0f); + mSph.SetTgType(0); + player->setHookshotCarryOffset(fopAcM_GetID(this), &cStack_b0); + field_0x7d0++; + } else if (field_0x7d0 == -1) { + mSph.SetTgType(0x14040); + home.pos = current.pos; + } else { + if (mDraw) { + nan_setParticle(); + } + if (!fopAcM_checkStatus(this, 0x100000)) { + setAction(&daObjNAN_c::drop); + } + dBgS_LinChk linkChk; + linkChk.SetObj(); + linkChk.Set(&old.pos, ¤t.pos, NULL); + if (dComIfG_Bgsp().LineCross(&linkChk)) { + cM3dGPla plane; + cXyz local_bc; + dComIfG_Bgsp().GetTriPla(linkChk, &plane); + const cXyz* normal = plane.GetNP(); + local_bc = linkChk.GetCross(); + local_bc.x += normal->x * 20.0f; + local_bc.y += normal->y * 20.0f; + local_bc.z += normal->z * 20.0f; + current.pos = old.pos = local_bc; + } + } +} + +/* 80CA1F60-80CA2368 001AA0 0408+00 1/0 0/0 0/0 .text boomerang__10daObjNAN_cFv */ +void daObjNAN_c::boomerang() { + if (field_0x7d0 == 0) { + mSph.SetTgType(0); + mSph.GetTgHitGObj(); + mBoomerangMove.initOffset(¤t.pos); + field_0x7d4.setall(0); + field_0x7da.setall(0); + field_0x7d0++; + } else if (field_0x7d0 == -1) { + mSph.SetTgType(0x14040); + home.pos = current.pos; + } else { + daPy_getPlayerActorClass(); + if (mDraw) { + nan_setParticle(); + } + if (mBoomerangMove.posMove(¤t.pos, ¤t.angle.y, NULL, 0x1c00) == 0) { + daPy_py_c* player = daPy_getPlayerActorClass(); + dBgS_LinChk linChk; + cXyz cStack_cc; + cXyz cStack_d8(0.0f, 0.0f, 100.0f); + cStack_cc = player->current.pos; + cStack_cc.y += 200.0f; + mDoMtx_stack_c::transS(cStack_cc); + mDoMtx_stack_c::YrotM(cM_rndFX(32768.0f)); + mDoMtx_stack_c::multVec(&cStack_d8, &cStack_d8); + linChk.SetObj(); + linChk.Set(&cStack_cc, &cStack_d8, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + const cXyz* normal = plane.GetNP(); + cXyz cStack_e4(0.0f, 0.0f, 0.0f); + cXyz cStack_f0(0.0f, normal->y, normal->z); + f32 uVar11 = cStack_e4.abs(cStack_f0); + current.pos = old.pos = linChk.GetCross(); + s16 uVar7 = cM_atan2s(normal->z, normal->y); + field_0x7da.x = uVar7; + field_0x7d4.x = uVar7; + s16 sVar8 = -cM_atan2s(normal->x, uVar11); + field_0x7da.z = sVar8; + field_0x7d4.z = sVar8; + setAction(&daObjNAN_c::walk); + } else { + current.pos = old.pos = cStack_cc; + setAction(&daObjNAN_c::drop); + } + } else { + mBoomerangMove.bgCheckAfterOffset(¤t.pos); + } + } +} + +/* 80CA2368-80CA2658 001EA8 02F0+00 3/0 0/0 0/0 .text drop__10daObjNAN_cFv */ +void daObjNAN_c::drop() { + if (field_0x7d0 == 0) { + speedF = 0.0f; + gravity = -5.0f; + maxFallSpeed = -30.0f; + field_0x7d4.setall(0); + field_0x7da.setall(0); + field_0x7d0++; + } else if (field_0x7d0 == -1) { + gravity = 0.0f; + maxFallSpeed = 0.0f; + home.pos = current.pos; + } else { + dBgS_LinChk linChk; + fopAcM_posMoveF(this, NULL); + linChk.SetObj(); + linChk.Set(&old.pos, ¤t.pos, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linChk, &plane); + const cXyz* normal = plane.GetNP(); + cXyz cStack_e4(0.0f, 0.0f, 0.0f); + cXyz cStack_f0(0.0f, normal->y, normal->z); + f32 uVar11 = cStack_e4.abs(cStack_f0); + current.pos = old.pos = linChk.GetCross(); + s16 uVar7 = cM_atan2s(normal->z, normal->y); + field_0x7da.x = uVar7; + field_0x7d4.x = uVar7; + s16 sVar8 = -cM_atan2s(normal->x, uVar11); + field_0x7da.z = sVar8; + field_0x7d4.z = sVar8; + setAction(&daObjNAN_c::walk); + } + + } +} + +/* 80CA2658-80CA270C 002198 00B4+00 1/1 0/0 0/0 .text hit_check__10daObjNAN_cFv */ +void daObjNAN_c::hit_check() { + dCcU_AtInfo local_40; + mStts.Move(); + if (mSph.ChkTgHit()) { + local_40.mpCollider = mSph.GetTgHitObj(); + if (local_40.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { + setAction(&daObjNAN_c::hook); + } else { + setAction(&daObjNAN_c::boomerang); + } + } +} + +/* 80CA270C-80CA276C 00224C 0060+00 1/1 0/0 0/0 .text action__10daObjNAN_cFv */ +void daObjNAN_c::action() { + (this->*mAction)(); + shape_angle = current.angle; + if (field_0x7fa == 0) { + Insect_GetDemoMain(); + } +} + +/* ############################################################################################## */ +/* 80CA3270-80CA3274 0000B4 0002+02 0/1 0/0 0/0 .rodata l_nan_itemno */ +static u8 const l_nan_itemno[2] = { + 0xC8, 0xC9, }; -/* 80CA3370-80CA337C -00001 000C+00 1/1 0/0 0/0 .data @4444 */ -SECTION_DATA static void* lit_4444[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)drop__10daObjNAN_cFv, -}; +/* 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; + mCreatureSound.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); + Insect_GetDemoMain(); + nan_setParticle(); + return 1; + } + if (field_0x7e0 != 0) { + field_0x7e0--; + } + if (field_0x7f8 != 0) { + field_0x7f8--; + } -/* 80CA337C-80CA3388 -00001 000C+00 1/1 0/0 0/0 .data @4509 */ -SECTION_DATA static void* lit_4509[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)walk__10daObjNAN_cFv, -}; + if (field_0x7fa == 0) { + hit_check(); + } + action(); + mBrk->play(); + mBtk->play(); + mMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + setBaseMtx(); + if (field_0x7fa == 0) { + mSph.SetC(current.pos); + mSph.SetR(scale.x * 20.0f); + dComIfG_Ccsp()->Set(&mSph); + eyePos = current.pos; + attention_info.position = eyePos; + } + return 1; +} -/* 80CA3388-80CA3394 -00001 000C+00 1/1 0/0 0/0 .data @4512 */ -SECTION_DATA static void* lit_4512[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)drop__10daObjNAN_cFv, -}; +/* ############################################################################################## */ +/* 80CA3498-80CA349C 000008 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_hio_init; -/* 80CA3394-80CA33A0 -00001 000C+00 1/1 0/0 0/0 .data @4614 */ -SECTION_DATA static void* lit_4614[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)walk__10daObjNAN_cFv, -}; +/* 80CA2904-80CA296C 002444 0068+00 1/1 0/0 0/0 .text _delete__10daObjNAN_cFv */ +int daObjNAN_c::_delete() { + dComIfG_resDelete(&mPhase, "I_Nan"); + if (field_0x7fd != 0) { + l_hio_init = 0; + } + if (heap != NULL) { + mMorf->stopZelAnime(); + } + return 1; +} -/* 80CA33A0-80CA33AC -00001 000C+00 1/1 0/0 0/0 .data @4680 */ -SECTION_DATA static void* lit_4680[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)hook__10daObjNAN_cFv, -}; +/* 80CA296C-80CA29EC 0024AC 0080+00 1/1 0/0 0/0 .text setBaseMtx__10daObjNAN_cFv */ +void daObjNAN_c::setBaseMtx() { + J3DModel* model = mMorf->getModel(); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x7d4); + mDoMtx_stack_c::ZXYrotM(shape_angle); + model->setBaseScale(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + mMorf->modelCalc(); +} -/* 80CA33AC-80CA33B8 -00001 000C+00 1/1 0/0 0/0 .data @4683 */ -SECTION_DATA static void* lit_4683[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)boomerang__10daObjNAN_cFv, -}; +inline int daObjNAN_c::draw() { + if (mDraw) { + CalcZBuffer(50.0f); + J3DModel* model = mMorf->getModel(); + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mBtk->entry(model->getModelData()); + mBrk->entry(model->getModelData()); + if (field_0x7fa != 2) { + fopAcM_setEffectMtx(this, model->getModelData()); + mMorf->entryDL(); + if (field_0x7fa != 1) { + dBgS_GndChk gndChk; + cXyz cStack_88(current.pos); + cStack_88.y += 20.0f; + gndChk.SetPos(&cStack_88); + f32 groundCross = dComIfG_Bgsp().GroundCross(&gndChk); + if (groundCross != 1000000000.0f) { + dComIfGd_setSimpleShadow(¤t.pos, groundCross, 15.0f, gndChk, 0, -0.6f, + dDlst_shadowControl_c::getSimpleTex()); + } + } + } + } + return 1; +} -/* 80CA33B8-80CA33C4 -00001 000C+00 0/1 0/0 0/0 .data @4938 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4938[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)bin_wait__10daObjNAN_cFv, -}; -#pragma pop +/* 80CA29EC-80CA2B48 00252C 015C+00 1/0 0/0 0/0 .text daObjNAN_Draw__FP10daObjNAN_c */ +static int daObjNAN_Draw(daObjNAN_c* i_this) { + return i_this->draw(); +} -/* 80CA33C4-80CA33D0 -00001 000C+00 0/1 0/0 0/0 .data @4941 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4941[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)wait__10daObjNAN_cFv, -}; -#pragma pop +/* 80CA2B48-80CA2B68 002688 0020+00 2/1 0/0 0/0 .text daObjNAN_Execute__FP10daObjNAN_c */ +static int daObjNAN_Execute(daObjNAN_c* i_this) { + return i_this->execute(); +} + +/* ############################################################################################## */ +/* 80CA3294-80CA3298 0000D8 0004+00 0/1 0/0 0/0 .rodata l_musiya_num */ +static u16 const l_musiya_num[2] = {0x0199, 0x019A}; + +/* 80CA3298-80CA329C 0000DC 0004+00 0/1 0/0 0/0 .rodata l_heapsize */ +static u16 const l_heapsize[2] = {0x0EE0, 0x0EC0}; + +/* 80CA34A8-80CA34B8 000018 0010+00 2/2 0/0 0/0 .bss l_HIO */ +static daObj_NanHIO_c l_HIO; + +/* 80CA2B68-80CA2FDC 0026A8 0474+00 1/1 0/0 0/0 .text create__10daObjNAN_cFv */ +int daObjNAN_c::create() { + u8 uVar6 = (fopAcM_GetParam(this) & 0xf00) >> 8; + fopAcM_SetupActor(this, daObjNAN_c); + int rv = dComIfG_resLoad(&mPhase, "I_Nan"); + if (rv == cPhs_COMPLEATE_e) { + OS_REPORT("NAN PARAM %x\n", fopAcM_GetParam(this)); + field_0x7fa = fopAcM_GetParam(this) & 3; + if (field_0x7fa == 3) { + field_0x7fa = 0; + } + field_0x7fb = (fopAcM_GetParam(this) & 0x10) >> 4; + if (field_0x7fb != 0) { + scale.setall(l_HIO.field_0x8); + } else { + scale.setall(l_HIO.field_0xc); + } + if (uVar6 == 15) { + uVar6 = 0; + } + setItemNo(l_nan_itemno[field_0x7fb]); + setSaveBitNo(l_musiya_num[field_0x7fb]); + if (field_0x7fa != 2) { + if (uVar6 != 0) { + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[0]]) || !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[1]])) { + return cPhs_ERROR_e; + } + } else { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 && + dComIfGp_getStartStageRoomNo() == 3) + { + if (dMenu_Insect_c::isCatchNotGiveInsect(m_itemNo)) { + return cPhs_ERROR_e; + } + if ((field_0x7fb == 0 && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[0]])) || + (field_0x7fb != 0 && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[1]]))) + { + return cPhs_ERROR_e; + } + } + } + } + OS_REPORT("/////////////// I_NAN /////////////////\n"); + if (fopAcM_entrySolidHeap(this, useHeapInit, l_heapsize[field_0x7fb]) == 0) { + return cPhs_ERROR_e; + } + OS_REPORT("/////////////// I_NAN SET OK //////////\n"); + if (l_hio_init == 0) { + l_hio_init = 1; + field_0x7fd = 1; + l_HIO.field_0x4 = -1; + } + gravity = 0.0f; + fopAcM_SetMtx(this, mMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -50.0f, -50.0f, -50.0f); + fopAcM_SetMax(this, 50.0f, 50.0f, 50.0f); + attention_info.flags = 0; + health = 10; + field_0x560 = 10; + mCreatureSound.init(¤t.pos, &eyePos, 3, 1); + if (field_0x7fa == 0) { + attention_info.distances[fopAc_attn_CARRY_e] = 93; + mStts.Init(100, 0, this); + mSph.Set(cc_sph_src); + mSph.SetStts(&mStts); + } + if (field_0x7fa == 2) { + setAction(&daObjNAN_c::bin_wait); + } else { + setAction(&daObjNAN_c::wait); + } + daObjNAN_Execute(this); + } + return rv; +} + +/* 80CA30C8-80CA30D0 002C08 0008+00 1/0 0/0 0/0 .text daObjNAN_IsDelete__FP10daObjNAN_c + */ +static int daObjNAN_IsDelete(daObjNAN_c* i_this) { + return 1; +} /* 80CA33D0-80CA33F0 -00001 0020+00 1/0 0/0 0/0 .data l_daObjNAN_Method */ static actor_method_class l_daObjNAN_Method = { - (process_method_func)daObjNAN_Create__FP10fopAc_ac_c, - (process_method_func)daObjNAN_Delete__FP10daObjNAN_c, - (process_method_func)daObjNAN_Execute__FP10daObjNAN_c, - (process_method_func)daObjNAN_IsDelete__FP10daObjNAN_c, - (process_method_func)daObjNAN_Draw__FP10daObjNAN_c, + (process_method_func)daObjNAN_Create, + (process_method_func)daObjNAN_Delete, + (process_method_func)daObjNAN_Execute, + (process_method_func)daObjNAN_IsDelete, + (process_method_func)daObjNAN_Draw, }; /* 80CA33F0-80CA3420 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Nan */ @@ -340,626 +772,4 @@ extern actor_process_profile_definition g_profile_Obj_Nan = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80CA3420-80CA342C 000170 000C+00 0/0 0/0 0/0 .data __vt__9dInsect_c */ -SECTION_DATA extern void* __vt__9dInsect_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)Insect_Release__9dInsect_cFv, -}; - -/* 80CA342C-80CA3438 00017C 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, -}; - -/* 80CA3438-80CA3444 000188 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, -}; - -/* 80CA3444-80CA3450 000194 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, -}; - -/* 80CA3450-80CA345C 0001A0 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, -}; - -/* 80CA345C-80CA3468 0001AC 000C+00 1/1 0/0 0/0 .data __vt__10daObjNAN_c */ -SECTION_DATA extern void* __vt__10daObjNAN_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)Insect_Release__9dInsect_cFv, -}; - -/* 80CA3468-80CA3474 0001B8 000C+00 7/7 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80CA3474-80CA3480 0001C4 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, -}; - -/* 80CA3480-80CA348C 0001D0 000C+00 2/2 0/0 0/0 .data __vt__14daObj_NanHIO_c */ -SECTION_DATA extern void* __vt__14daObj_NanHIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daObj_NanHIO_cFv, -}; - -/* 80CA05AC-80CA05D4 0000EC 0028+00 1/1 0/0 0/0 .text __ct__14daObj_NanHIO_cFv */ -daObj_NanHIO_c::daObj_NanHIO_c() { - // NONMATCHING -} - -/* 80CA05D4-80CA0678 000114 00A4+00 9/9 0/0 0/0 .text - * setAction__10daObjNAN_cFM10daObjNAN_cFPCvPv_v */ -void daObjNAN_c::setAction(void (daObjNAN_c::*param_0)()) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA31C0-80CA31C8 000004 0008+00 0/1 0/0 0/0 .rodata l_nan_brk_index */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_nan_brk_index[8] = { - 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0C, -}; -COMPILER_STRIP_GATE(0x80CA31C0, &l_nan_brk_index); -#pragma pop - -/* 80CA31C8-80CA31D0 00000C 0008+00 0/1 0/0 0/0 .rodata l_nan_btk_index */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_nan_btk_index[8] = { - 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, -}; -COMPILER_STRIP_GATE(0x80CA31C8, &l_nan_btk_index); -#pragma pop - -/* 80CA31D0-80CA31D4 000014 0004+00 1/3 0/0 0/0 .rodata @3868 */ -SECTION_RODATA static f32 const lit_3868 = 1.0f; -COMPILER_STRIP_GATE(0x80CA31D0, &lit_3868); - -/* 80CA31D4-80CA31D8 000018 0004+00 0/1 0/0 0/0 .rodata @3869 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3869 = 5.0f; -COMPILER_STRIP_GATE(0x80CA31D4, &lit_3869); -#pragma pop - -/* 80CA31D8-80CA31DC 00001C 0004+00 2/12 0/0 0/0 .rodata @3870 */ -SECTION_RODATA static u8 const lit_3870[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CA31D8, &lit_3870); - -/* 80CA31DC-80CA31E0 000020 0004+00 0/1 0/0 0/0 .rodata @3871 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3871 = -1.0f; -COMPILER_STRIP_GATE(0x80CA31DC, &lit_3871); -#pragma pop - -/* 80CA32A0-80CA32A0 0000E4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CA32A0 = "I_Nan"; -#pragma pop - -/* 80CA0678-80CA08EC 0001B8 0274+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CA08EC-80CA0934 00042C 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 80CA0934-80CA0954 000474 0020+00 1/0 0/0 0/0 .text daObjNAN_Create__FP10fopAc_ac_c */ -static void daObjNAN_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CA0954-80CA0978 000494 0024+00 1/0 0/0 0/0 .text daObjNAN_Delete__FP10daObjNAN_c */ -static void daObjNAN_Delete(daObjNAN_c* param_0) { - // NONMATCHING -} - -/* 80CA0978-80CA0A2C 0004B8 00B4+00 1/1 0/0 0/0 .text nan_posMove__10daObjNAN_cFv */ -void daObjNAN_c::nan_posMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA31E0-80CA31E4 000024 0004+00 1/6 0/0 0/0 .rodata @3985 */ -SECTION_RODATA static f32 const lit_3985 = 20.0f; -COMPILER_STRIP_GATE(0x80CA31E0, &lit_3985); - -/* 80CA31E4-80CA31EC 000028 0004+04 0/2 0/0 0/0 .rodata @3986 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3986[1 + 1 /* padding */] = { - -20.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80CA31E4, &lit_3986); -#pragma pop - -/* 80CA31EC-80CA31F4 000030 0008+00 0/5 0/0 0/0 .rodata @3987 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3987[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CA31EC, &lit_3987); -#pragma pop - -/* 80CA31F4-80CA31FC 000038 0008+00 0/5 0/0 0/0 .rodata @3988 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3988[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CA31F4, &lit_3988); -#pragma pop - -/* 80CA31FC-80CA3204 000040 0008+00 0/5 0/0 0/0 .rodata @3989 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3989[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CA31FC, &lit_3989); -#pragma pop - -/* 80CA0A2C-80CA0D54 00056C 0328+00 4/0 0/0 0/0 .text turn__10daObjNAN_cFv */ -void daObjNAN_c::turn() { - // NONMATCHING -} - -/* 80CA0D54-80CA0D9C 000894 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3204-80CA3208 000048 0004+00 0/1 0/0 0/0 .rodata @4018 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4018 = 39.0f; -COMPILER_STRIP_GATE(0x80CA3204, &lit_4018); -#pragma pop - -/* 80CA3208-80CA320C 00004C 0004+00 0/1 0/0 0/0 .rodata @4019 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4019 = 79.0f; -COMPILER_STRIP_GATE(0x80CA3208, &lit_4019); -#pragma pop - -/* 80CA320C-80CA3210 000050 0004+00 0/2 0/0 0/0 .rodata @4020 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4020 = 18.0f; -COMPILER_STRIP_GATE(0x80CA320C, &lit_4020); -#pragma pop - -/* 80CA3210-80CA3214 000054 0004+00 0/2 0/0 0/0 .rodata @4021 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4021 = 30.0f; -COMPILER_STRIP_GATE(0x80CA3210, &lit_4021); -#pragma pop - -/* 80CA0D9C-80CA0E7C 0008DC 00E0+00 2/2 0/0 0/0 .text nan_WalkAnm__10daObjNAN_cFv */ -void daObjNAN_c::nan_WalkAnm() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3214-80CA3218 000058 0004+00 0/1 0/0 0/0 .rodata @4100 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4100 = -1000.0f; -COMPILER_STRIP_GATE(0x80CA3214, &lit_4100); -#pragma pop - -/* 80CA0E7C-80CA1184 0009BC 0308+00 1/0 0/0 0/0 .text wait__10daObjNAN_cFv */ -void daObjNAN_c::wait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3218-80CA321C 00005C 0004+00 0/1 0/0 0/0 .rodata @4292 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4292 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CA3218, &lit_4292); -#pragma pop - -/* 80CA321C-80CA3220 000060 0004+00 0/1 0/0 0/0 .rodata @4293 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4293 = 60.0f; -COMPILER_STRIP_GATE(0x80CA321C, &lit_4293); -#pragma pop - -/* 80CA3220-80CA3224 000064 0004+00 0/1 0/0 0/0 .rodata @4294 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4294 = 40.0f; -COMPILER_STRIP_GATE(0x80CA3220, &lit_4294); -#pragma pop - -/* 80CA3224-80CA3228 000068 0004+00 0/1 0/0 0/0 .rodata @4295 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4295 = 1.0f / 50.0f; -COMPILER_STRIP_GATE(0x80CA3224, &lit_4295); -#pragma pop - -/* 80CA3228-80CA322C 00006C 0004+00 0/1 0/0 0/0 .rodata @4296 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4296 = 12.0f; -COMPILER_STRIP_GATE(0x80CA3228, &lit_4296); -#pragma pop - -/* 80CA322C-80CA3230 000070 0004+00 0/1 0/0 0/0 .rodata @4297 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4297 = 6144.0f; -COMPILER_STRIP_GATE(0x80CA322C, &lit_4297); -#pragma pop - -/* 80CA3230-80CA3234 000074 0004+00 0/2 0/0 0/0 .rodata @4298 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4298 = 32768.0f; -COMPILER_STRIP_GATE(0x80CA3230, &lit_4298); -#pragma pop - -/* 80CA3234-80CA3238 000078 0004+00 0/2 0/0 0/0 .rodata @4299 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4299 = 200.0f; -COMPILER_STRIP_GATE(0x80CA3234, &lit_4299); -#pragma pop - -/* 80CA3238-80CA323C 00007C 0004+00 0/1 0/0 0/0 .rodata @4300 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4300 = 1050.0f; -COMPILER_STRIP_GATE(0x80CA3238, &lit_4300); -#pragma pop - -/* 80CA323C-80CA3244 000080 0008+00 0/1 0/0 0/0 .rodata @4302 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4302[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CA323C, &lit_4302); -#pragma pop - -/* 80CA1184-80CA1904 000CC4 0780+00 4/0 0/0 0/0 .text walk__10daObjNAN_cFv */ -void daObjNAN_c::walk() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA32A0-80CA32A0 0000E4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CA32A6 = "R_SP160"; -#pragma pop - -/* 80CA1904-80CA1A20 001444 011C+00 1/0 0/0 0/0 .text bin_wait__10daObjNAN_cFv */ -void daObjNAN_c::bin_wait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3244-80CA3248 000088 0004+00 0/1 0/0 0/0 .rodata @4362 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4362 = -2.0f; -COMPILER_STRIP_GATE(0x80CA3244, &lit_4362); -#pragma pop - -/* 80CA3248-80CA324C 00008C 0004+00 0/1 0/0 0/0 .rodata @4363 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4363 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CA3248, &lit_4363); -#pragma pop - -/* 80CA324C-80CA3250 000090 0004+00 0/1 0/0 0/0 .rodata @4364 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4364 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CA324C, &lit_4364); -#pragma pop - -/* 80CA3250-80CA3254 000094 0004+00 0/1 0/0 0/0 .rodata @4365 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4365 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CA3250, &lit_4365); -#pragma pop - -/* 80CA3254-80CA3258 000098 0004+00 0/1 0/0 0/0 .rodata @4366 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4366 = 62.0f; -COMPILER_STRIP_GATE(0x80CA3254, &lit_4366); -#pragma pop - -/* 80CA3258-80CA325C 00009C 0004+00 0/1 0/0 0/0 .rodata @4367 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4367 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80CA3258, &lit_4367); -#pragma pop - -/* 80CA325C-80CA3264 0000A0 0008+00 0/1 0/0 0/0 .rodata @4368 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4368[8] = { - 0x3F, 0xB9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9A, -}; -COMPILER_STRIP_GATE(0x80CA325C, &lit_4368); -#pragma pop - -/* 80CA1A20-80CA1B50 001560 0130+00 1/0 0/0 0/0 .text bin_action__10daObjNAN_cFv */ -void daObjNAN_c::bin_action() { - // NONMATCHING -} - -/* 80CA1B50-80CA1D5C 001690 020C+00 6/6 0/0 0/0 .text nan_setParticle__10daObjNAN_cFv */ -void daObjNAN_c::nan_setParticle() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3264-80CA3268 0000A8 0004+00 0/2 0/0 0/0 .rodata @4491 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4491 = -5.0f; -COMPILER_STRIP_GATE(0x80CA3264, &lit_4491); -#pragma pop - -/* 80CA1D5C-80CA1F60 00189C 0204+00 1/0 0/0 0/0 .text hook__10daObjNAN_cFv */ -void daObjNAN_c::hook() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3268-80CA326C 0000AC 0004+00 0/1 0/0 0/0 .rodata @4601 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4601 = 100.0f; -COMPILER_STRIP_GATE(0x80CA3268, &lit_4601); -#pragma pop - -/* 80CA1F60-80CA2368 001AA0 0408+00 1/0 0/0 0/0 .text boomerang__10daObjNAN_cFv */ -void daObjNAN_c::boomerang() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA326C-80CA3270 0000B0 0004+00 0/1 0/0 0/0 .rodata @4672 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4672 = -30.0f; -COMPILER_STRIP_GATE(0x80CA326C, &lit_4672); -#pragma pop - -/* 80CA2368-80CA2658 001EA8 02F0+00 3/0 0/0 0/0 .text drop__10daObjNAN_cFv */ -void daObjNAN_c::drop() { - // NONMATCHING -} - -/* 80CA2658-80CA270C 002198 00B4+00 1/1 0/0 0/0 .text hit_check__10daObjNAN_cFv */ -void daObjNAN_c::hit_check() { - // NONMATCHING -} - -/* 80CA270C-80CA276C 00224C 0060+00 1/1 0/0 0/0 .text action__10daObjNAN_cFv */ -void daObjNAN_c::action() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3270-80CA3274 0000B4 0002+02 0/1 0/0 0/0 .rodata l_nan_itemno */ -#pragma push -#pragma force_active on -SECTION_RODATA static u16 const l_nan_itemno[1 + 1 /* padding */] = { - 0xC8C9, - /* padding */ - 0x0000, -}; -COMPILER_STRIP_GATE(0x80CA3270, &l_nan_itemno); -#pragma pop - -/* 80CA3274-80CA327C 0000B8 0004+04 1/1 0/0 0/0 .rodata @4742 */ -SECTION_RODATA static f32 const lit_4742[1 + 1 /* padding */] = { - 10000.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80CA3274, &lit_4742); - -/* 80CA327C-80CA3284 0000C0 0008+00 1/1 0/0 0/0 .rodata @4744 */ -SECTION_RODATA static u8 const lit_4744[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CA327C, &lit_4744); - -/* 80CA276C-80CA2904 0022AC 0198+00 1/1 0/0 0/0 .text execute__10daObjNAN_cFv */ -void daObjNAN_c::execute() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3498-80CA349C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80CA3498[4]; - -/* 80CA2904-80CA296C 002444 0068+00 1/1 0/0 0/0 .text _delete__10daObjNAN_cFv */ -void daObjNAN_c::_delete() { - // NONMATCHING -} - -/* 80CA296C-80CA29EC 0024AC 0080+00 1/1 0/0 0/0 .text setBaseMtx__10daObjNAN_cFv */ -void daObjNAN_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3284-80CA3288 0000C8 0004+00 0/2 0/0 0/0 .rodata @4823 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4823 = 50.0f; -COMPILER_STRIP_GATE(0x80CA3284, &lit_4823); -#pragma pop - -/* 80CA3288-80CA328C 0000CC 0004+00 0/1 0/0 0/0 .rodata @4824 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4824 = 1000000000.0f; -COMPILER_STRIP_GATE(0x80CA3288, &lit_4824); -#pragma pop - -/* 80CA328C-80CA3290 0000D0 0004+00 0/1 0/0 0/0 .rodata @4825 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4825 = 15.0f; -COMPILER_STRIP_GATE(0x80CA328C, &lit_4825); -#pragma pop - -/* 80CA3290-80CA3294 0000D4 0004+00 0/1 0/0 0/0 .rodata @4826 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4826 = -3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CA3290, &lit_4826); -#pragma pop - -/* 80CA29EC-80CA2B48 00252C 015C+00 1/0 0/0 0/0 .text daObjNAN_Draw__FP10daObjNAN_c */ -static void daObjNAN_Draw(daObjNAN_c* param_0) { - // NONMATCHING -} - -/* 80CA2B48-80CA2B68 002688 0020+00 2/1 0/0 0/0 .text daObjNAN_Execute__FP10daObjNAN_c */ -static void daObjNAN_Execute(daObjNAN_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CA3294-80CA3298 0000D8 0004+00 0/1 0/0 0/0 .rodata l_musiya_num */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const l_musiya_num = 0x0199019A; -COMPILER_STRIP_GATE(0x80CA3294, &l_musiya_num); -#pragma pop - -/* 80CA3298-80CA329C 0000DC 0004+00 0/1 0/0 0/0 .rodata l_heapsize */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const l_heapsize = 0x0EE00EC0; -COMPILER_STRIP_GATE(0x80CA3298, &l_heapsize); -#pragma pop - -/* 80CA329C-80CA32A0 0000E0 0004+00 0/1 0/0 0/0 .rodata @5034 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5034 = -50.0f; -COMPILER_STRIP_GATE(0x80CA329C, &lit_5034); -#pragma pop - -/* 80CA349C-80CA34A8 00000C 000C+00 1/1 0/0 0/0 .bss @3769 */ -static u8 lit_3769[12]; - -/* 80CA34A8-80CA34B8 000018 0010+00 2/2 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[16]; - -/* 80CA2B68-80CA2FDC 0026A8 0474+00 1/1 0/0 0/0 .text create__10daObjNAN_cFv */ -void daObjNAN_c::create() { - // NONMATCHING -} - -/* 80CA2FDC-80CA3024 002B1C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80CA3024-80CA306C 002B64 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CA306C-80CA30C8 002BAC 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CA30C8-80CA30D0 002C08 0008+00 1/0 0/0 0/0 .text daObjNAN_IsDelete__FP10daObjNAN_c - */ -static bool daObjNAN_IsDelete(daObjNAN_c* param_0) { - return true; -} - -/* 80CA30D0-80CA3118 002C10 0048+00 2/1 0/0 0/0 .text __dt__14daObj_NanHIO_cFv */ -daObj_NanHIO_c::~daObj_NanHIO_c() { - // NONMATCHING -} - -/* 80CA3118-80CA3154 002C58 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_nan_cpp */ -void __sinit_d_a_obj_nan_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80CA3118, __sinit_d_a_obj_nan_cpp); -#pragma pop - -/* 80CA3154-80CA3160 002C94 000C+00 2/0 0/0 0/0 .text Insect_Release__9dInsect_cFv */ -// void dInsect_c::Insect_Release() { -extern "C" void Insect_Release__9dInsect_cFv() { - // NONMATCHING -} - -/* 80CA3160-80CA31A8 002CA0 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - /* 80CA32A0-80CA32A0 0000E4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/d_cc_uty.cpp b/src/d/d_cc_uty.cpp index 317be039d7e..2038a6a2938 100644 --- a/src/d/d_cc_uty.cpp +++ b/src/d/d_cc_uty.cpp @@ -390,23 +390,23 @@ fopAc_ac_c* cc_at_check(fopAc_ac_c* i_enemy, dCcU_AtInfo* i_AtInfo) { if (tmp.abs() > 100.0f) { f32 x = i_AtInfo->mpActor->speed.x; f32 z = i_AtInfo->mpActor->speed.z; - i_AtInfo->mHitDirection = cM_atan2s(-x, -z) + (s16)cM_rndFX(4000.0f); + i_AtInfo->mHitDirection.y = cM_atan2s(-x, -z) + (s16)cM_rndFX(4000.0f); } else { if (fopAcM_GetName(i_AtInfo->mpActor) == PROC_BOOMERANG) { x_diff = i_enemy->current.pos.x - player_p->current.pos.x; z_diff = i_enemy->current.pos.z - player_p->current.pos.z; - i_AtInfo->mHitDirection = cM_atan2s(-x_diff, -z_diff) + (s16)cM_rndFX(10000.0f); + i_AtInfo->mHitDirection.y = cM_atan2s(-x_diff, -z_diff) + (s16)cM_rndFX(10000.0f); } else { x_diff = i_enemy->current.pos.x - i_AtInfo->mpActor->current.pos.x; z_diff = i_enemy->current.pos.z - i_AtInfo->mpActor->current.pos.z; - i_AtInfo->mHitDirection = cM_atan2s(-x_diff, -z_diff); + i_AtInfo->mHitDirection.y = cM_atan2s(-x_diff, -z_diff); } } if (i_AtInfo->mHitType == HIT_TYPE_LINK_NORMAL_ATTACK && player_p->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) { - i_AtInfo->mHitDirection = player_p->shape_angle.y; + i_AtInfo->mHitDirection.y = player_p->shape_angle.y; } if (i_AtInfo->mpCollider->ChkAtType(AT_TYPE_HOOKSHOT) &&