d_a_npc_worm matching (#2365)

* d_a_npc_worm matching

* Rename a_this
This commit is contained in:
hatal175
2025-04-01 04:30:42 +03:00
committed by GitHub
parent e6b07b81e4
commit 4dfd9b9f3c
11 changed files with 412 additions and 432 deletions
+8 -8
View File
@@ -1,18 +1,18 @@
_prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x0000002C; // type:function size:0x2C scope:global
_unresolved = .text:0x00000058; // type:function size:0x20 scope:global
nodeCallBack__FP8J3DJointi = .text:0x00000078; // type:function size:0xD4 scope:global
daNPC_WORM_Draw__FP14npc_worm_class = .text:0x0000014C; // type:function size:0xF8 scope:global
nodeCallBack__FP8J3DJointi = .text:0x00000078; // type:function size:0xD4 scope:local
daNPC_WORM_Draw__FP14npc_worm_class = .text:0x0000014C; // type:function size:0xF8 scope:local
npc_worm_ground__FP14npc_worm_class = .text:0x00000244; // type:function size:0x280 scope:global
npc_worm_normal__FP14npc_worm_class = .text:0x000004C4; // type:function size:0x280 scope:global
npc_worm_dive__FP14npc_worm_class = .text:0x00000744; // type:function size:0x134 scope:global
npc_worm_binwait__FP14npc_worm_class = .text:0x00000878; // type:function size:0x4C scope:global
action__FP14npc_worm_class = .text:0x000008C4; // type:function size:0x530 scope:global
daNPC_WORM_Execute__FP14npc_worm_class = .text:0x00000DF4; // type:function size:0x1DC scope:global
daNPC_WORM_IsDelete__FP14npc_worm_class = .text:0x00000FD0; // type:function size:0x8 scope:global
daNPC_WORM_Delete__FP14npc_worm_class = .text:0x00000FD8; // type:function size:0x30 scope:global
useHeapInit__FP10fopAc_ac_c = .text:0x00001008; // type:function size:0xB8 scope:global
daNPC_WORM_Create__FP10fopAc_ac_c = .text:0x000010C0; // type:function size:0x190 scope:global
daNPC_WORM_Execute__FP14npc_worm_class = .text:0x00000DF4; // type:function size:0x1DC scope:local
daNPC_WORM_IsDelete__FP14npc_worm_class = .text:0x00000FD0; // type:function size:0x8 scope:local
daNPC_WORM_Delete__FP14npc_worm_class = .text:0x00000FD8; // type:function size:0x30 scope:local
useHeapInit__FP10fopAc_ac_c = .text:0x00001008; // type:function size:0xB8 scope:local
daNPC_WORM_Create__FP10fopAc_ac_c = .text:0x000010C0; // type:function size:0x190 scope:local
getLeftHandPos__9daPy_py_cCFv = .text:0x00001250; // type:function size:0x1C scope:global
Insect_Release__9dInsect_cFv = .text:0x0000126C; // type:function size:0xC scope:global
_ctors = .ctors:0x00000000; // type:label scope:global
@@ -57,6 +57,6 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4056 = .rodata:0x0000009C; // type:object size:0x4 scope:local
@4126 = .rodata:0x000000A0; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x000000A4; // type:object size:0x6 scope:local data:string_table
l_daNPC_WORM_Method = .data:0x00000000; // type:object size:0x20 scope:global
l_daNPC_WORM_Method = .data:0x00000000; // type:object size:0x20 scope:local
g_profile_NPC_WORM = .data:0x00000020; // type:object size:0x30 scope:global
__vt__14npc_worm_class = .data:0x00000050; // type:object size:0xC scope:global
+1 -1
View File
@@ -1815,7 +1815,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_npc_toby"),
ActorRel(MatchingFor("GZ2E01"), "d_a_npc_tr"),
ActorRel(NonMatching, "d_a_npc_uri"),
ActorRel(NonMatching, "d_a_npc_worm"),
ActorRel(MatchingFor("GZ2E01"), "d_a_npc_worm", extra_cflags=['-pragma "nosyminline off"']),
ActorRel(NonMatching, "d_a_npc_wrestler"),
ActorRel(NonMatching, "d_a_npc_yamid"),
ActorRel(NonMatching, "d_a_npc_yamis"),
+27 -3
View File
@@ -2,6 +2,7 @@
#define D_A_NPC_WORM_H
#include "d/actor/d_a_npc.h"
#include "d/d_insect.h"
/**
* @ingroup actors-npcs
@@ -11,9 +12,32 @@
* @details
*
*/
class npc_worm_class : public fopAc_ac_c {
private:
/* 0x568 */ u8 field_0x568[0x5ec - 0x568];
class npc_worm_class : public dInsect_c {
public:
bool check_release() { return field_0x56C == 1; }
/* 0x590 */ request_of_phase_process_class mPhase;
/* 0x598 */ u8 field_0x598;
/* 0x59C */ J3DModel* mModel1;
/* 0x5A0 */ J3DModel* mModel2;
/* 0x5A4 */ s16 field_0x5a4;
/* 0x5A6 */ s16 field_0x5a6;
/* 0x5A8 */ s16 field_0x5a8;
/* 0x5AA */ s16 field_0x5aa;
/* 0x5AC */ s16 field_0x5ac;
/* 0x5AE */ s16 field_0x5ae;
/* 0x5B0 */ f32 field_0x5b0;
/* 0x5B2 */ s16 field_0x5b4[9];
/* 0x5C6 */ s16 field_0x5c6;
/* 0x5C8 */ s16 field_0x5c8;
/* 0x5CA */ s16 field_0x5ca;
/* 0x5CC */ f32 field_0x5cc;
/* 0x5D0 */ f32 field_0x5d0;
/* 0x5D4 */ f32 field_0x5d4;
/* 0x5D8 */ cXyz field_0x5d8;
/* 0x5E4 */ s16 field_0x5e4;
/* 0x5E6 */ u8 field_0x5e6;
/* 0x5E8 */ s16 field_0x5e8[2];
};
STATIC_ASSERT(sizeof(npc_worm_class) == 0x5ec);
+1
View File
@@ -119,6 +119,7 @@ enum dEvt_Condition_e {
dEvtCnd_CANDOOR_e = 0x0004,
dEvtCnd_CANGETITEM_e = 0x0008,
dEvtCnd_CANTALKITEM_e = 0x0020,
dEvtCnd_40_e = 0x0040,
dEvtCnd_DUMMY = 0x8000,
};
+1 -1
View File
@@ -610,7 +610,7 @@ static void e_nest_hahen(e_nest_class* i_this) {
i_this->mTimers[0] = 60;
} else {
dComIfGp_att_CatchRequest(a_this, 0x76, 100.0f, 50.0f, -150.0f, 0x5000, 1);
a_this->eventInfo.onCondition(0x40);
a_this->eventInfo.onCondition(dEvtCnd_40_e);
}
break;
}
+369 -414
View File
@@ -6,435 +6,415 @@
#include "d/actor/d_a_npc_worm.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void nodeCallBack__FP8J3DJointi();
extern "C" static void daNPC_WORM_Draw__FP14npc_worm_class();
extern "C" static void npc_worm_ground__FP14npc_worm_class();
extern "C" static void npc_worm_normal__FP14npc_worm_class();
extern "C" static void npc_worm_dive__FP14npc_worm_class();
extern "C" static void npc_worm_binwait__FP14npc_worm_class();
extern "C" static void action__FP14npc_worm_class();
extern "C" static void daNPC_WORM_Execute__FP14npc_worm_class();
extern "C" static bool daNPC_WORM_IsDelete__FP14npc_worm_class();
extern "C" static void daNPC_WORM_Delete__FP14npc_worm_class();
extern "C" static void useHeapInit__FP10fopAc_ac_c();
extern "C" static void daNPC_WORM_Create__FP10fopAc_ac_c();
extern "C" void getLeftHandPos__9daPy_py_cCFv();
extern "C" void Insect_Release__9dInsect_cFv();
extern "C" extern char const* const d_a_npc_worm__stringBase0;
//
// External References:
//
extern "C" void mDoMtx_XrotS__FPA4_fs();
extern "C" void mDoMtx_XrotM__FPA4_fs();
extern "C" void mDoMtx_YrotS__FPA4_fs();
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void mDoMtx_ZrotM__FPA4_fs();
extern "C" void transM__14mDoMtx_stack_cFfff();
extern "C" void scaleM__14mDoMtx_stack_cFfff();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
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 getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void request__11dAttCatch_cFP10fopAc_ac_cUcfffsi();
extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
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 __ct__9dInsect_cFv();
extern "C" void setLookPos__9daPy_py_cFP4cXyz();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void cM_atan2s__Fff();
extern "C" void cM_rndF__Ff();
extern "C" void cM_rndFX__Ff();
extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
extern "C" void cLib_addCalc2__FPffff();
extern "C" void cLib_addCalc0__FPfff();
extern "C" void cLib_addCalcAngleS2__FPssss();
extern "C" void MtxPosition__FP4cXyzP4cXyz();
extern "C" void _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 now__14mDoMtx_stack_c[48];
extern "C" u8 mCurrentMtx__6J3DSys[48];
extern "C" u8 sincosTable___5JMath[65536];
//
// Declarations:
//
/* 80B2DE78-80B2DF4C 000078 00D4+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
static void nodeCallBack(J3DJoint* param_0, int param_1) {
// NONMATCHING
static int nodeCallBack(J3DJoint* joint, int param_2) {
if (param_2 == 0) {
int jntNo = joint->getJntNo();
J3DModel* model = j3dSys.getModel();
npc_worm_class* i_this = (npc_worm_class*)model->getUserArea();
if (i_this != NULL && jntNo >= 1 && jntNo <= 9) {
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
cMtx_YrotM(*calc_mtx, i_this->field_0x5b4[jntNo - 1]);
model->setAnmMtx(jntNo, *calc_mtx);
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
}
}
return 1;
}
/* ############################################################################################## */
/* 80B2F080-80B2F084 000000 0004+00 7/7 0/0 0/0 .rodata @3717 */
SECTION_RODATA static f32 const lit_3717 = 1.0f / 100.0f;
COMPILER_STRIP_GATE(0x80B2F080, &lit_3717);
/* 80B2DF4C-80B2E044 00014C 00F8+00 1/0 0/0 0/0 .text daNPC_WORM_Draw__FP14npc_worm_class
*/
static void daNPC_WORM_Draw(npc_worm_class* param_0) {
// NONMATCHING
static int daNPC_WORM_Draw(npc_worm_class* i_this) {
g_env_light.settingTevStruct(0, &i_this->current.pos, &i_this->tevStr);
if (i_this->field_0x5d4 > 0.01f) {
g_env_light.setLightTevColorType_MAJI(i_this->mModel2, &i_this->tevStr);
mDoExt_modelUpdateDL(i_this->mModel2);
}
if (i_this->field_0x5e6 == 0) {
return 1;
}
g_env_light.setLightTevColorType_MAJI(i_this->mModel1, &i_this->tevStr);
i_this->mModel1->setUserArea((u32)i_this);
for (u16 i = 0; i < i_this->mModel1->getModelData()->getJointNum(); i++) {
if (i >= 1) {
i_this->mModel1->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
}
}
mDoExt_modelUpdateDL(i_this->mModel1);
return 1;
}
/* ############################################################################################## */
/* 80B2F084-80B2F088 000004 0004+00 0/5 0/0 0/0 .rodata @3774 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3774[4] = {
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80B2F084, &lit_3774);
#pragma pop
/* 80B2F088-80B2F090 000008 0008+00 0/1 0/0 0/0 .rodata @3775 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3775[8] = {
0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80B2F088, &lit_3775);
#pragma pop
/* 80B2F090-80B2F098 000010 0008+00 0/1 0/0 0/0 .rodata @3776 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3776[8] = {
0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80B2F090, &lit_3776);
#pragma pop
/* 80B2F098-80B2F0A0 000018 0008+00 0/1 0/0 0/0 .rodata @3777 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3777[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80B2F098, &lit_3777);
#pragma pop
/* 80B2F0A0-80B2F0A4 000020 0004+00 0/1 0/0 0/0 .rodata @3778 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3778 = 35.0f;
COMPILER_STRIP_GATE(0x80B2F0A0, &lit_3778);
#pragma pop
/* 80B2F0A4-80B2F0A8 000024 0004+00 0/3 0/0 0/0 .rodata @3779 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3779 = 10.0f;
COMPILER_STRIP_GATE(0x80B2F0A4, &lit_3779);
#pragma pop
/* 80B2F0A8-80B2F0AC 000028 0004+00 0/3 0/0 0/0 .rodata @3780 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3780 = 5.0f;
COMPILER_STRIP_GATE(0x80B2F0A8, &lit_3780);
#pragma pop
/* 80B2F0AC-80B2F0B0 00002C 0004+00 0/1 0/0 0/0 .rodata @3781 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3781 = 20.0f;
COMPILER_STRIP_GATE(0x80B2F0AC, &lit_3781);
#pragma pop
/* 80B2E044-80B2E2C4 000244 0280+00 1/1 0/0 0/0 .text npc_worm_ground__FP14npc_worm_class
*/
static void npc_worm_ground(npc_worm_class* param_0) {
// NONMATCHING
static void npc_worm_ground(npc_worm_class* i_this) {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
BOOL bVar2 = FALSE;
switch(i_this->field_0x5a8) {
case 0:
i_this->field_0x5e6 = 0;
i_this->field_0x5a8 = 1;
i_this->current.pos = i_this->field_0x5d8;
break;
case 1:
if (player->checkWolfDig()) {
cXyz diff = player->getLeftHandPos() - i_this->current.pos;
if (diff.abs() < 35.0f) {
i_this->field_0x5e8[0] = cM_rndF(5.0f) + 10.0f;
i_this->field_0x5a8 = 2;
i_this->current.pos.x = player->getLeftHandPos().x + cM_rndFX(20.0f);
i_this->current.pos.z = player->getLeftHandPos().z + cM_rndFX(20.0f);
}
}
break;
case 2:
if (i_this->field_0x5e8[0] == 0) {
bVar2 = TRUE;
}
break;
}
if (bVar2) {
i_this->field_0x5a6 = 1;
i_this->field_0x5a8 = 0;
i_this->field_0x5d4 = 0.0f;
}
}
/* ############################################################################################## */
/* 80B2F0B0-80B2F0B4 000030 0004+00 0/1 0/0 0/0 .rodata @3812 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3812 = 65536.0f;
COMPILER_STRIP_GATE(0x80B2F0B0, &lit_3812);
#pragma pop
/* 80B2F0B4-80B2F0B8 000034 0004+00 0/1 0/0 0/0 .rodata @3813 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3813 = 16000.0f;
COMPILER_STRIP_GATE(0x80B2F0B4, &lit_3813);
#pragma pop
/* 80B2F0B8-80B2F0BC 000038 0004+00 0/1 0/0 0/0 .rodata @3814 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3814 = 130.0f;
COMPILER_STRIP_GATE(0x80B2F0B8, &lit_3814);
#pragma pop
/* 80B2F0BC-80B2F0C0 00003C 0004+00 0/2 0/0 0/0 .rodata @3815 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3815 = 60.0f;
COMPILER_STRIP_GATE(0x80B2F0BC, &lit_3815);
#pragma pop
/* 80B2F0C0-80B2F0C4 000040 0004+00 0/3 0/0 0/0 .rodata @3816 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3816 = 3.0f;
COMPILER_STRIP_GATE(0x80B2F0C0, &lit_3816);
#pragma pop
/* 80B2F0C4-80B2F0C8 000044 0004+00 0/1 0/0 0/0 .rodata @3817 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3817 = 15.0f;
COMPILER_STRIP_GATE(0x80B2F0C4, &lit_3817);
#pragma pop
/* 80B2F0C8-80B2F0CC 000048 0004+00 0/1 0/0 0/0 .rodata @3818 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3818 = 4.0f;
COMPILER_STRIP_GATE(0x80B2F0C8, &lit_3818);
#pragma pop
/* 80B2F0CC-80B2F0D0 00004C 0004+00 0/1 0/0 0/0 .rodata @3819 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3819 = 2.0f;
COMPILER_STRIP_GATE(0x80B2F0CC, &lit_3819);
#pragma pop
/* 80B2F0D0-80B2F0D4 000050 0004+00 0/1 0/0 0/0 .rodata @3820 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3820 = 20000.0f;
COMPILER_STRIP_GATE(0x80B2F0D0, &lit_3820);
#pragma pop
/* 80B2F0D4-80B2F0D8 000054 0004+00 0/1 0/0 0/0 .rodata @3821 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3821 = 0.5f;
COMPILER_STRIP_GATE(0x80B2F0D4, &lit_3821);
#pragma pop
/* 80B2F0D8-80B2F0DC 000058 0004+00 0/1 0/0 0/0 .rodata @3822 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3822 = 0.75f;
COMPILER_STRIP_GATE(0x80B2F0D8, &lit_3822);
#pragma pop
/* 80B2F0DC-80B2F0E0 00005C 0004+00 0/2 0/0 0/0 .rodata @3823 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3823 = 200.0f;
COMPILER_STRIP_GATE(0x80B2F0DC, &lit_3823);
#pragma pop
/* 80B2F0E0-80B2F0E4 000060 0004+00 0/2 0/0 0/0 .rodata @3824 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3824 = 100.0f;
COMPILER_STRIP_GATE(0x80B2F0E0, &lit_3824);
#pragma pop
/* 80B2F0E4-80B2F0E8 000064 0004+00 0/1 0/0 0/0 .rodata @3825 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3825 = -150.0f;
COMPILER_STRIP_GATE(0x80B2F0E4, &lit_3825);
#pragma pop
/* 80B2E2C4-80B2E544 0004C4 0280+00 1/1 0/0 0/0 .text npc_worm_normal__FP14npc_worm_class
*/
static void npc_worm_normal(npc_worm_class* param_0) {
// NONMATCHING
static void npc_worm_normal(npc_worm_class* i_this) {
fopAc_ac_c* a_this = i_this;
switch(i_this->field_0x5a8) {
case -1:
a_this->current.angle.y = cM_rndF(65536.0f);
a_this->speed.y = 0.0f;
a_this->speedF = 0.0f;
a_this->shape_angle.x = -cM_rndF(16000.0f);
i_this->field_0x5d0 = 10.0f;
i_this->field_0x5e8[1] = cM_rndF(60.0f) + 130.0f;
i_this->field_0x5a8 = 1;
i_this->field_0x5e6 = 1;
break;
case 0:
a_this->current.pos.y += 3.0f;
a_this->current.angle.y = cM_rndF(65536.0f);
a_this->speed.y = cM_rndF(5.0f) + 15.0f;
a_this->speedF = cM_rndF(2.0f) + 4.0f;
a_this->shape_angle.x = -cM_rndF(16000.0f);
i_this->field_0x5d0 = 10.0f;
i_this->field_0x5e8[1] = cM_rndF(60.0f) + 130.0f;
i_this->field_0x5a8 = 1;
i_this->field_0x5e6 = 1;
case 1:
if (a_this->current.pos.y <= i_this->field_0x5cc &&
i_this->field_0x5e8[0] == 0)
{
i_this->field_0x5ca = a_this->current.angle.y + (s16)cM_rndFX(20000.0f);
i_this->field_0x5e8[0] = cM_rndF(10.0f) + 3.0f;
a_this->speedF = cM_rndF(0.75f) + 0.5f;
}
if (a_this->eventInfo.checkCommandCatch()) {
fopAcM_delete(a_this);
} else {
dComIfGp_att_CatchRequest(a_this, 0x74, 200.0f, 100.0f, -150.0f, 0x5000, 1);
a_this->eventInfo.onCondition(dEvtCnd_40_e);
}
#ifndef DEBUG
if (i_this->field_0x5e8[1] == 0) {
i_this->field_0x5a6 = 2;
i_this->field_0x5a8 = 0;
}
#endif
break;
}
cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x5ca, 4, 0x400);
cLib_addCalcAngleS2(&a_this->shape_angle.x, 0, 2, 0x800);
}
/* ############################################################################################## */
/* 80B2F0E8-80B2F0EC 000068 0004+00 0/1 0/0 0/0 .rodata @3850 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3850 = -1.0f;
COMPILER_STRIP_GATE(0x80B2F0E8, &lit_3850);
#pragma pop
/* 80B2F0EC-80B2F0F0 00006C 0004+00 0/3 0/0 0/0 .rodata @3851 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3851 = 1.0f;
COMPILER_STRIP_GATE(0x80B2F0EC, &lit_3851);
#pragma pop
/* 80B2F0F0-80B2F0F4 000070 0004+00 0/2 0/0 0/0 .rodata @3852 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3852 = 1.0f / 10.0f;
COMPILER_STRIP_GATE(0x80B2F0F0, &lit_3852);
#pragma pop
/* 80B2F0F4-80B2F0F8 000074 0004+00 0/1 0/0 0/0 .rodata @3853 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3853 = 1.0f / 50.0f;
COMPILER_STRIP_GATE(0x80B2F0F4, &lit_3853);
#pragma pop
/* 80B2E544-80B2E678 000744 0134+00 1/1 0/0 0/0 .text npc_worm_dive__FP14npc_worm_class
*/
static void npc_worm_dive(npc_worm_class* param_0) {
// NONMATCHING
static void npc_worm_dive(npc_worm_class* i_this) {
switch(i_this->field_0x5a8) {
case 0:
i_this->field_0x5a8 = 1;
i_this->field_0x5d8.x = i_this->current.pos.x;
i_this->field_0x5d8.y = i_this->field_0x5cc;
i_this->field_0x5d8.z = i_this->current.pos.z;
break;
case 1:
if (i_this->field_0x5cc - i_this->current.pos.y > 60.0f) {
i_this->field_0x5a6 = 0;
i_this->field_0x5a8 = 0;
}
break;
}
i_this->shape_angle.y += 1000;
cLib_addCalcAngleS2(&i_this->shape_angle.x, 0x3ff0, 8, 0x400);
cXyz local_1c;
cXyz cStack_28;
mDoMtx_stack_c::XrotS(i_this->field_0x5c6);
mDoMtx_stack_c::ZrotM(i_this->field_0x5c8);
local_1c.x = 0.0f;
local_1c.y = -1.0f;
local_1c.z = 0.0f;
mDoMtx_stack_c::multVec(&local_1c, &cStack_28);
i_this->current.pos += cStack_28;
i_this->field_0x5e4 += 0xa00;
cLib_addCalc2(&i_this->field_0x5d4, 1.0f, 0.1f, 0.02f);
}
/* 80B2E678-80B2E6C4 000878 004C+00 1/1 0/0 0/0 .text npc_worm_binwait__FP14npc_worm_class */
static void npc_worm_binwait(npc_worm_class* param_0) {
// NONMATCHING
static void npc_worm_binwait(npc_worm_class* i_this) {
dComIfGp_getPlayer(0);
switch(i_this->field_0x5a8) {
case 0:
i_this->field_0x5e6 = 0;
i_this->field_0x5a8 = 1;
break;
case 1:
if (i_this->check_release()) {
i_this->field_0x5a6 = 1;
i_this->field_0x5a8 = -1;
}
break;
}
}
/* ############################################################################################## */
/* 80B2F0F8-80B2F0FC 000078 0004+00 0/1 0/0 0/0 .rodata @3990 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3990 = 8000.0f;
COMPILER_STRIP_GATE(0x80B2F0F8, &lit_3990);
#pragma pop
/* 80B2F0FC-80B2F100 00007C 0004+00 0/1 0/0 0/0 .rodata @3991 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3991 = 4000.0f;
COMPILER_STRIP_GATE(0x80B2F0FC, &lit_3991);
#pragma pop
/* 80B2F100-80B2F104 000080 0004+00 0/1 0/0 0/0 .rodata @3992 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3992 = 2000.0f;
COMPILER_STRIP_GATE(0x80B2F100, &lit_3992);
#pragma pop
/* 80B2F104-80B2F108 000084 0004+00 0/1 0/0 0/0 .rodata @3993 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3993 = 17.0f / 100.0f;
COMPILER_STRIP_GATE(0x80B2F104, &lit_3993);
#pragma pop
/* 80B2F108-80B2F10C 000088 0004+00 0/1 0/0 0/0 .rodata @3994 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3994 = -50.0f;
COMPILER_STRIP_GATE(0x80B2F108, &lit_3994);
#pragma pop
/* 80B2F10C-80B2F110 00008C 0004+00 0/1 0/0 0/0 .rodata @3995 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3995 = 50.0f;
COMPILER_STRIP_GATE(0x80B2F10C, &lit_3995);
#pragma pop
/* 80B2F110-80B2F114 000090 0004+00 0/1 0/0 0/0 .rodata @3996 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3996 = -10.0f;
COMPILER_STRIP_GATE(0x80B2F110, &lit_3996);
#pragma pop
/* 80B2E6C4-80B2EBF4 0008C4 0530+00 1/1 0/0 0/0 .text action__FP14npc_worm_class */
static void action(npc_worm_class* param_0) {
// NONMATCHING
static void action(npc_worm_class* i_this) {
fopAc_ac_c* a_this = i_this;
cXyz local_124;
cXyz local_130;
int local_140 = 0;
BOOL bVar6 = false;
BOOL bVar5 = FALSE;
BOOL bVar7 = true;
switch (i_this->field_0x5a6) {
case 0:
npc_worm_ground(i_this);
bVar7 = FALSE;
break;
case 1:
npc_worm_normal(i_this);
local_140 = 1;
bVar6 = TRUE;
bVar5 = TRUE;
break;
case 2:
npc_worm_dive(i_this);
local_140 = 2;
break;
case 3:
npc_worm_binwait(i_this);
bVar7 = FALSE;
break;
}
if (local_140 == 1) {
i_this->field_0x5ac = 2000;
i_this->field_0x5aa += i_this->field_0x5ac;
i_this->field_0x5b0 = 8000.0f;
i_this->field_0x5ae = cM_ssin(i_this->field_0x5a4 * 600) * 2000.0f + 4000.0f;
for (int i = 0; i < 9; i++) {
i_this->field_0x5b4[i] = i_this->field_0x5b0 * cM_ssin(i_this->field_0x5aa - i * i_this->field_0x5ae);
}
i_this->shape_angle.y = (int)(-(i_this->field_0x5b4[3] * 2)) + a_this->current.angle.y;
cLib_addCalc2(&i_this->field_0x5d0, 10.0f, 1.0f, 1.0f);
} else if (local_140 == 2) {
i_this->field_0x5aa += i_this->field_0x5ac;
i_this->field_0x5b0 = 8000.0f;
i_this->field_0x5ae = 3000;
int local_154 = 0.17f * (i_this->field_0x5cc - a_this->current.pos.y);
if (local_154 > 8) {
local_154 = 8;
}
i_this->field_0x5ac = local_154 * 200 + 3500;
for (int i = 0; i < 9; i++) {
if (i >= local_154) {
i_this->field_0x5b4[i] = (i_this->field_0x5b0 * cM_ssin(i_this->field_0x5aa - i * i_this->field_0x5ae));
} else {
cLib_addCalcAngleS2(&i_this->field_0x5b4[i], 0, 1, 1000);
}
}
cLib_addCalc0(&i_this->field_0x5d0, 1.0f, 1.0f);
}
if (bVar5) {
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
local_124.x = 0.0f;
local_124.y = 0.0f;
local_124.z = a_this->speedF;
MtxPosition(&local_124, &local_130);
a_this->current.pos.x += local_130.x;
a_this->current.pos.y += a_this->speed.y;
a_this->current.pos.z += local_130.z;
a_this->speed.y -= 5.0f;
if (a_this->speed.y < -50.0f) {
a_this->speed.y = -50.0f;
}
dBgS_LinChk linkChk;
linkChk.Set(&a_this->old.pos, &a_this->current.pos, a_this);
if (dComIfG_Bgsp().LineCross(&linkChk)) {
a_this->current.pos.x = a_this->old.pos.x;
a_this->current.pos.z = a_this->old.pos.z;
}
}
if (bVar6) {
dBgS_GndChk gndchk;
cXyz local_13c(a_this->current.pos);
local_13c.y += 50.0f;
gndchk.SetPos(&local_13c);
i_this->field_0x5cc = dComIfG_Bgsp().GroundCross(&gndchk) + 3.0f;
if (a_this->current.pos.y <= i_this->field_0x5cc) {
a_this->current.pos.y = i_this->field_0x5cc;
a_this->speed.y = -10.0f;
local_13c = a_this->current.pos;
local_13c.y += 50.0f;
local_13c.z += 10.0f;
gndchk.SetPos(&local_13c);
local_13c.y = dComIfG_Bgsp().GroundCross(&gndchk) + 3.0f;
i_this->field_0x5c6 = -cM_atan2s(local_13c.y - a_this->current.pos.y,
local_13c.z - a_this->current.pos.z);
if (i_this->field_0x5c6 > 0x3000 || i_this->field_0x5c6 < -0x3000) {
i_this->field_0x5c6 = 0;
}
local_13c = a_this->current.pos;
local_13c.y += 50.0f;
local_13c.x += 10.0f;
gndchk.SetPos(&local_13c);
local_13c.y = dComIfG_Bgsp().GroundCross(&gndchk) + 3.0f;
i_this->field_0x5c8 =
cM_atan2s(local_13c.y - a_this->current.pos.y, local_13c.x - a_this->current.pos.x);
if (i_this->field_0x5c8 > 0x3000 || i_this->field_0x5c8 < -0x3000) {
i_this->field_0x5c8 = 0;
}
}
}
if (bVar7 && fopAcM_searchPlayerDistance(a_this) < 200.0f) {
daPy_py_c::setLookPos(&a_this->current.pos);
}
}
/* ############################################################################################## */
/* 80B2F114-80B2F118 000094 0004+00 0/1 0/0 0/0 .rodata @4054 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4054 = 2.5f;
COMPILER_STRIP_GATE(0x80B2F114, &lit_4054);
#pragma pop
/* 80B2F118-80B2F11C 000098 0004+00 0/1 0/0 0/0 .rodata @4055 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4055 = 2.0f / 25.0f;
COMPILER_STRIP_GATE(0x80B2F118, &lit_4055);
#pragma pop
/* 80B2F11C-80B2F120 00009C 0004+00 0/1 0/0 0/0 .rodata @4056 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4056 = 11.0f / 10.0f;
COMPILER_STRIP_GATE(0x80B2F11C, &lit_4056);
#pragma pop
/* 80B2EBF4-80B2EDD0 000DF4 01DC+00 2/1 0/0 0/0 .text daNPC_WORM_Execute__FP14npc_worm_class */
static void daNPC_WORM_Execute(npc_worm_class* param_0) {
// NONMATCHING
static int daNPC_WORM_Execute(npc_worm_class* i_this) {
i_this->field_0x5a4++;
for (int i = 0; i < 2; i++) {
if (i_this->field_0x5e8[i] != 0) {
i_this->field_0x5e8[i]--;
}
}
action(i_this);
if (i_this->field_0x5e6 != 0) {
mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y,
i_this->current.pos.z - i_this->field_0x5d0);
mDoMtx_stack_c::XrotM(i_this->field_0x5c6);
mDoMtx_stack_c::ZrotM(i_this->field_0x5c8);
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
mDoMtx_stack_c::XrotM(i_this->shape_angle.x);
mDoMtx_stack_c::transM(0.0f, 0.0f, i_this->field_0x5d0);
mDoMtx_stack_c::scaleM(0.1f, 0.1f, 0.1f);
i_this->mModel1->setBaseTRMtx(mDoMtx_stack_c::get());
fopAcM_SetMtx(i_this, i_this->mModel1->getBaseTRMtx());
}
if (i_this->field_0x5d4 > 0.01f) {
mDoMtx_stack_c::transS(i_this->field_0x5d8.x, i_this->field_0x5d8.y - 2.5f,
i_this->field_0x5d8.z);
mDoMtx_stack_c::XrotM(i_this->field_0x5c6);
mDoMtx_stack_c::ZrotM(i_this->field_0x5c8);
mDoMtx_stack_c::YrotM(i_this->field_0x5e4);
f32 scale = i_this->field_0x5d4 * 0.08f;
mDoMtx_stack_c::scaleM(scale, scale, scale * 1.1f);
mDoMtx_stack_c::YrotM(-i_this->field_0x5e4);
i_this->mModel2->setBaseTRMtx(mDoMtx_stack_c::get());
fopAcM_SetMtx(i_this, i_this->mModel2->getBaseTRMtx());
}
return 1;
}
/* 80B2EDD0-80B2EDD8 000FD0 0008+00 1/0 0/0 0/0 .text daNPC_WORM_IsDelete__FP14npc_worm_class */
static bool daNPC_WORM_IsDelete(npc_worm_class* param_0) {
return true;
static int daNPC_WORM_IsDelete(npc_worm_class* i_this) {
return 1;
}
/* ############################################################################################## */
/* 80B2F124-80B2F124 0000A4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80B2F124 = "Alink";
#pragma pop
/* 80B2EDD8-80B2EE08 000FD8 0030+00 1/0 0/0 0/0 .text daNPC_WORM_Delete__FP14npc_worm_class */
static void daNPC_WORM_Delete(npc_worm_class* param_0) {
// NONMATCHING
static int daNPC_WORM_Delete(npc_worm_class* i_this) {
fopAcM_GetID(i_this);
dComIfG_resDelete(&i_this->mPhase, "Alink");
return 1;
}
/* 80B2EE08-80B2EEC0 001008 00B8+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* a_this) {
npc_worm_class* i_this = (npc_worm_class*)a_this;
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Alink", 0x30);
JUT_ASSERT(776, modelData != 0);
i_this->mModel1 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (i_this->mModel1 == NULL) {
return 0;
}
modelData = (J3DModelData*)dComIfG_getObjectRes("Alink", 0x31);
JUT_ASSERT(794, modelData != 0);
i_this->mModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (i_this->mModel2 == NULL) {
return 0;
}
return 1;
}
/* ############################################################################################## */
/* 80B2F120-80B2F124 0000A0 0004+00 0/1 0/0 0/0 .rodata @4126 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4126 = 65535.0f;
COMPILER_STRIP_GATE(0x80B2F120, &lit_4126);
#pragma pop
/* 80B2EEC0-80B2F050 0010C0 0190+00 1/0 0/0 0/0 .text daNPC_WORM_Create__FP10fopAc_ac_c
*/
static int daNPC_WORM_Create(fopAc_ac_c* a_this) {
fopAcM_SetupActor(a_this, npc_worm_class);
npc_worm_class* i_this = (npc_worm_class*)a_this;
int rv =
dComIfG_resLoad(&i_this->mPhase, "Alink");
if (rv == cPhs_COMPLEATE_e) {
OS_REPORT("NPC_WORM PARAM %x\n", fopAcM_GetParam(i_this));
i_this->field_0x598 = fopAcM_GetParam(i_this);
OS_REPORT("NPC_WORM//////////////NPC_WORM SET 1 !!\n");
if (fopAcM_entrySolidHeap(i_this, useHeapInit, 0x1380) == 0) {
OS_REPORT("//////////////NPC_WORM SET NON !!\n");
return cPhs_ERROR_e;
}
OS_REPORT("//////////////NPC_WORM SET 2 !!\n");
i_this->field_0x5a4 = cM_rndF(65535.0f);
if (i_this->field_0x598 == 1) {
i_this->field_0x5a6 = 1;
} else if (i_this->field_0x598 == 2) {
i_this->field_0x5a6 = 3;
} else {
i_this->field_0x5a6 = 0;
dBgS_GndChk gndchk;
cXyz cStack_84(i_this->current.pos);
cStack_84.y += 100.0f;
gndchk.SetPos(&cStack_84);
f32 fVar1 = dComIfG_Bgsp().GroundCross(&gndchk) + 3.0f;
i_this->field_0x5cc = fVar1;
i_this->current.pos.y = fVar1;
i_this->field_0x5d8.x = i_this->current.pos.x;
i_this->field_0x5d8.y = i_this->field_0x5cc;
i_this->field_0x5d8.z = i_this->current.pos.z;
i_this->field_0x5d4 = 1.0f;
}
daNPC_WORM_Execute(i_this);
}
return rv;
}
/* 80B2F12C-80B2F14C -00001 0020+00 1/0 0/0 0/0 .data l_daNPC_WORM_Method */
static actor_method_class l_daNPC_WORM_Method = {
(process_method_func)daNPC_WORM_Create__FP10fopAc_ac_c,
(process_method_func)daNPC_WORM_Delete__FP14npc_worm_class,
(process_method_func)daNPC_WORM_Execute__FP14npc_worm_class,
(process_method_func)daNPC_WORM_IsDelete__FP14npc_worm_class,
(process_method_func)daNPC_WORM_Draw__FP14npc_worm_class,
(process_method_func)daNPC_WORM_Create,
(process_method_func)daNPC_WORM_Delete,
(process_method_func)daNPC_WORM_Execute,
(process_method_func)daNPC_WORM_IsDelete,
(process_method_func)daNPC_WORM_Draw,
};
/* 80B2F14C-80B2F17C -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_WORM */
@@ -455,29 +435,4 @@ extern actor_process_profile_definition g_profile_NPC_WORM = {
fopAc_CULLBOX_0_e, // cullType
};
/* 80B2F17C-80B2F188 000050 000C+00 1/1 0/0 0/0 .data __vt__14npc_worm_class */
SECTION_DATA extern void* __vt__14npc_worm_class[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)Insect_Release__9dInsect_cFv,
};
/* 80B2EEC0-80B2F050 0010C0 0190+00 1/0 0/0 0/0 .text daNPC_WORM_Create__FP10fopAc_ac_c
*/
static void daNPC_WORM_Create(fopAc_ac_c* param_0) {
// NONMATCHING
}
/* 80B2F050-80B2F06C 001250 001C+00 1/1 0/0 0/0 .text getLeftHandPos__9daPy_py_cCFv */
// void daPy_py_c::getLeftHandPos() const {
extern "C" void getLeftHandPos__9daPy_py_cCFv() {
// NONMATCHING
}
/* 80B2F06C-80B2F078 00126C 000C+00 1/0 0/0 0/0 .text Insect_Release__9dInsect_cFv */
// void dInsect_c::Insect_Release() {
extern "C" void Insect_Release__9dInsect_cFv() {
// NONMATCHING
}
/* 80B2F124-80B2F124 0000A4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+1 -1
View File
@@ -73,7 +73,7 @@ void daKiPot_c::init_modeWait() {
void daKiPot_c::modeWait() {
if (chkEvent() && eventInfo.checkCommandCatch() == 0) {
dComIfGp_att_CatchRequest(this, fpcNm_ITEM_UGLY_SOUP, 100.0f, 50.0f, -50.0f, 0x2000, 1);
eventInfo.onCondition(0x40);
eventInfo.onCondition(dEvtCnd_40_e);
}
}
+1 -1
View File
@@ -290,7 +290,7 @@ int daObj_Oiltubo_c::wait(void* unused) {
case 1:
if (!eventInfo.checkCommandCatch()) {
dComIfGp_att_CatchRequest(this, fpcNm_ITEM_OIL_BOTTLE_2, 100.0f, 50.0f, -50.0f, 0x2000, 1);
eventInfo.onCondition(0x40);
eventInfo.onCondition(dEvtCnd_40_e);
}
break;
case 2:
+1 -1
View File
@@ -165,7 +165,7 @@ int daTag_BottleItem_c::wait(void* param_0) {
cXyz pos = attention_info.position - player->attention_info.position;
dComIfGp_att_CatchRequest(this,mBottleItemType,140.0f,pos.y+100.0f,pos.y-100.0f,0x2000,1);
eventInfo.onCondition(0x40);
eventInfo.onCondition(dEvtCnd_40_e);
}
case 2:
case 0:
+1 -1
View File
@@ -215,7 +215,7 @@ int daTag_SSDrink_c::wait(void* param_0) {
cXyz local_28 = attention_info.position - player->attention_info.position;
dComIfGp_att_CatchRequest(this, field_0x5D3, 200.0f, local_28.y + 100.0f,
local_28.y - 100.0f, 0x4000, 1);
eventInfo.onCondition(0x40);
eventInfo.onCondition(dEvtCnd_40_e);
}
if (field_0x5D4 != 0) {
field_0x5D4 = 0;
+1 -1
View File
@@ -274,7 +274,7 @@ int dEvt_control_c::catchCheck(dEvt_order_c* p_order) {
fopAc_ac_c* actor2 = p_order->mActor2;
fopAc_ac_c* actor1 = p_order->mActor1;
if (actor1 == NULL || (actor2 != NULL && !actor2->eventInfo.chkCondition(0x40))) {
if (actor1 == NULL || (actor2 != NULL && !actor2->eventInfo.chkCondition(dEvtCnd_40_e))) {
return 0;
}