diff --git a/include/d/actor/d_a_npc_nz.h b/include/d/actor/d_a_npc_nz.h index a6e0bf5b0..13b9ad77b 100644 --- a/include/d/actor/d_a_npc_nz.h +++ b/include/d/actor/d_a_npc_nz.h @@ -27,7 +27,7 @@ public: BOOL NodeCallBack(J3DNode*, int); BOOL TailNodeCallBack(J3DNode*, int); void TailControl(); - bool _createHeap(); + BOOL _createHeap(); s16 XyEventCB(int); void eventOrder(); void checkOrder(); diff --git a/include/d/actor/d_a_obj_barrel.h b/include/d/actor/d_a_obj_barrel.h index 58d19181d..176ef56d2 100644 --- a/include/d/actor/d_a_obj_barrel.h +++ b/include/d/actor/d_a_obj_barrel.h @@ -8,13 +8,18 @@ namespace daObjBarrel { public: void attr() const {} void get_slant_angle() {} - void pos_init() { - current.pos = home.pos; - current.angle = home.angle; - shape_angle = home.angle; + bool pos_init() { + if (m60C == 0) { + current.pos = home.pos; + current.angle = home.angle; + shape_angle = home.angle; + return true; + } else { + return false; + } } void prm_get_cull() const {} - void set_slant_angle(short) {} + void set_slant_angle(s16) {} void solidHeapCB(fopAc_ac_c*); void create_heap(); @@ -58,6 +63,8 @@ namespace daObjBarrel { public: /* Place member variables here */ + /* 0x290 */ u8 m290[0x60C - 0x290]; + /* 0x60C */ int m60C; }; namespace Method { diff --git a/include/d/actor/d_a_tsubo.h b/include/d/actor/d_a_tsubo.h index dabb21ff5..059628850 100644 --- a/include/d/actor/d_a_tsubo.h +++ b/include/d/actor/d_a_tsubo.h @@ -32,23 +32,24 @@ namespace daTsubo { void data() const {} void data_spec_boko(int) {} void is_switch() const {} - void pos_init() { - if (m678 != 2) { - return; + bool pos_init() { + if (m678 == 2) { + current.pos = home.pos; + current.angle = home.angle; + shape_angle = home.angle; + + m688.Val(cSAngle::_0); + m68A.Val(cSAngle::_0); + m68C.Val(cSAngle::_0); + m68E.Val(cSAngle::_0); + m690.Val(cSAngle::_0); + m692.Val(current.angle.y); + + mDoMtx_identity(mPoseMtx); + return true; + } else { + return false; } - - current.pos = home.pos; - current.angle = home.angle; - shape_angle = home.angle; - - m688.Val(cSAngle::_0); - m68A.Val(cSAngle::_0); - m68C.Val(cSAngle::_0); - m68E.Val(cSAngle::_0); - m690.Val(cSAngle::_0); - m692.Val(current.angle.y); - - mDoMtx_identity(mPoseMtx); } void prmZ_get_swSave() const {} void prm_get_cull() const {} diff --git a/src/d/actor/d_a_npc_nz.cpp b/src/d/actor/d_a_npc_nz.cpp index 54c82c84f..9b8255309 100644 --- a/src/d/actor/d_a_npc_nz.cpp +++ b/src/d/actor/d_a_npc_nz.cpp @@ -10,7 +10,7 @@ #include "d/d_item.h" #include "d/d_procname.h" -static u8 dummy_bss[0x58]; +static u8 dummy_bss[0x4C]; // need to figure out what's putting this data in front of a bunch of rels static f32 dummy[3] = {1.0f, 1.0f, 1.0f}; @@ -59,8 +59,6 @@ static BOOL daNpcNz_TailNodeCallBack(J3DNode* node, int param_1) { /* 000002C4-000003A4 .text TailNodeCallBack__10daNpc_Nz_cFP7J3DNodei */ BOOL daNpc_Nz_c::TailNodeCallBack(J3DNode* node, int param_1) { - /* Nonmatching */ - if (!param_1) { J3DJoint* joint = (J3DJoint*)node; s32 jntNo = joint->getJntNo(); @@ -84,63 +82,68 @@ BOOL daNpc_Nz_c::TailNodeCallBack(J3DNode* node, int param_1) { void daNpc_Nz_c::TailControl() { /* Nonmatching */ - cXyz temp(0.0f, 0.0f, 5.0f); + cXyz sp64; + cXyz sp58; + cXyz sp4C; + cXyz sp40; + sp58.set(0.0f, 0.0f, 5.0f); field_0x974[0] = field_0xA64[0]; - cXyz temp2 = field_0xA64[1] - field_0xA64[0]; - s32 angle = cM_atan2s(temp2.x, temp2.z); - f32 dist = temp2.absXZ(); - s32 angle2 = cM_atan2s(temp2.x, dist); + sp64 = field_0xA64[1] - field_0xA64[0]; + s32 angle = cM_atan2s(sp64.x, sp64.z); + f32 dist = sp64.absXZ(); + s16 angle2 = -cM_atan2s(sp64.y, dist); mDoMtx_stack_c::YrotS(angle); mDoMtx_stack_c::XrotM(angle2); - mDoMtx_stack_c::multVec(&temp, &temp2); + mDoMtx_stack_c::multVec(&sp58, &sp40); + cXyz* r19 = &field_0x974[1]; + cXyz* r18 = &field_0x9EC[1]; + cXyz* r17 = &field_0x934.mpLines->mpSegments[0]; dBgS_GndChk gndChk; - for(int i = 1; i < 10; i++) { - f32 temp3 = 1.0f - i * 0.1f; - cXyz temp4; - temp4.x = field_0x9EC[i].x + temp2.x * temp3; - temp4.y = field_0x9EC[i].y + temp2.y * temp3; - temp4.z = field_0x9EC[i].z + temp2.z * temp3; - f32 temp5 = field_0x974[i].y + temp4.y - 2.0f; + for(int i = 1; i < 10; i++, r19++, r18++) { + f32 temp3 = 1.0f - (i-1) * 0.1f; + cXyz sp34; + sp34.x = r18[0].x + sp40.x * temp3; + sp34.y = r18[0].y + sp40.y * temp3; + sp34.z = r18[0].z + sp40.z * temp3; + f32 temp5 = r19[0].y + sp34.y - 2.0f; if(temp5 < home.pos.y + 5.0f) { temp5 = home.pos.y + 5.0f; } - cXyz temp6; - temp6.y = temp5 - field_0x974[i].y; - temp6.x = temp4.x + (field_0x974[i].x - field_0x974[i - 1].x); - temp6.z = temp4.z + (field_0x974[i].z - field_0x974[i - 1].z); - s16 temp7 = cM_atan2s(temp6.x, temp6.z); - f32 temp8 = temp6.absXZ(); - s16 temp9 = -cM_atan2s(temp6.x, dist); - cXyz temp10(0.0f, 0.0f, 20.0f); + sp64.y = temp5 - r19[-1].y; + sp64.x = sp34.x + (r19[0].x - r19[-1].x); + sp64.z = sp34.z + (r19[0].z - r19[-1].z); + int temp7 = cM_atan2s(sp64.x, sp64.z); + dist = sp64.absXZ(); + s16 temp9 = -cM_atan2s(sp64.y, dist); + sp58.set(0.0f, 0.0f, 20.0f); mDoMtx_stack_c::YrotS(temp7); mDoMtx_stack_c::XrotM(temp9); - mDoMtx_stack_c::multVec(&temp10, &temp6); - field_0x9EC[i] = field_0x974[i]; - field_0x974[i].x = field_0x974[i - 1].x + temp6.x; - field_0x974[i].y = field_0x974[i - 1].y + temp6.y; - field_0x974[i].z = field_0x974[i - 1].z + temp6.z; - field_0x9EC[i].x = (field_0x974[i].x - field_0x9EC[i].x) * 0.8f; - field_0x9EC[i].y = (field_0x974[i].y - field_0x9EC[i].y) * 0.8f; - field_0x9EC[i].z = (field_0x974[i].z - field_0x9EC[i].z) * 0.8f; + mDoMtx_stack_c::multVec(&sp58, &sp4C); + r18[0] = r19[0]; + r19[0].x = r19[-1].x + sp4C.x; + r19[0].y = r19[-1].y + sp4C.y; + r19[0].z = r19[-1].z + sp4C.z; + r18[0].x = (r19[0].x - r18[0].x) * 0.8f; + r18[0].y = (r19[0].y - r18[0].y) * 0.8f; + r18[0].z = (r19[0].z - r18[0].z) * 0.8f; } - for(int i = 0; i < 10; i++) { - field_0x934.mpLines->mpSegments[i] = field_0x974[i]; + cXyz* r3 = field_0x974; + for(int i = 0; i < 10; i++, r3++, r17++) { + *r17 = r3[0]; } } static daNpc_Nz_HIO_c l_HIO; /* 00000CF8-00000D18 .text createHeap_CB__FP10fopAc_ac_c */ -static int createHeap_CB(fopAc_ac_c* i_this) { - /* Nonmatching */ - +static BOOL createHeap_CB(fopAc_ac_c* i_this) { return static_cast(i_this)->_createHeap(); } /* 00000D18-00000F98 .text _createHeap__10daNpc_Nz_cFv */ -bool daNpc_Nz_c::_createHeap() { +BOOL daNpc_Nz_c::_createHeap() { J3DModelData* modelData = static_cast(dComIfG_getObjectRes(m_bdl_arc_name, 3)); JUT_ASSERT(0xD0, modelData != 0); @@ -175,7 +178,11 @@ bool daNpc_Nz_c::_createHeap() { } } - return field_0x934.init(1, 10, static_cast(dComIfG_getObjectRes(m_arc_name, 0x2E)), 0) != FALSE; + if (field_0x934.init(1, 10, static_cast(dComIfG_getObjectRes(m_arc_name, 0x2E)), 0)) { + return TRUE; + } else { + return FALSE; + } } /* 00000F98-00001010 .text __ct__14daNpc_Nz_HIO_cFv */ @@ -225,9 +232,6 @@ static s16 daNpc_Nz_XyEventCB(void* i_this, int param_1) { /* 000011C0-00001210 .text XyEventCB__10daNpc_Nz_cFi */ s16 daNpc_Nz_c::XyEventCB(int) { - static char* a_demo_name_tbl[] = { - "DEFAULT_NPC_NZ_ESA", - }; field_0x8FA = dComIfGp_evmng_getEventIdx("DEFAULT_NPC_NZ_ESA", -1); return field_0x8FA; } @@ -264,11 +268,10 @@ void daNpc_Nz_c::setAttention() { /* 000012F4-000013E8 .text LookBack__10daNpc_Nz_cFv */ void daNpc_Nz_c::LookBack() { - /* Nonmatching */ - + cXyz* dstTemp; s16 targetY = current.angle.y; cXyz dstPos = dNpc_playerEyePos(0.0f); - cXyz* dstTemp = &dstPos; + dstTemp = &dstPos; s16 maxFollowRotVel; if (m_jnt.trnChk()) { @@ -284,8 +287,6 @@ void daNpc_Nz_c::LookBack() { /* 000013E8-0000146C .text setAnm__10daNpc_Nz_cFScb */ void daNpc_Nz_c::setAnm(s8 param_1, bool param_2) { - /* Nonmatching */ - static const dLib_anm_idx_c a_anm_idx_tbl[] = { {0x23, 0x12}, {0x15, 0x07}, @@ -395,22 +396,22 @@ void daNpc_Nz_c::setMtx() { cXyz temp3 = temp + temp2; switch(field_0x908) { - case 0x82: + case BIRD_ESA_5: temp4 = -15.0f; break; - case 0x83: + case dItem_HYOI_PEAR_e: temp4 = -5.0f; break; - case 0x51: - case 0x53: + case RED_BOTTLE: + case BLUE_BOTTLE: temp4 = -5.0f; break; - case 0xC: - case 0xE: + case BOMB_10: + case BOMB_30: temp4 = -15.0f; break; - case 0x10: - case 0x12: + case ARROW_10: + case ARROW_30: temp4 = -10.0f; break; } @@ -461,8 +462,6 @@ void daNpc_Nz_c::modeEventEsa() { /* 000018EC-000019DC .text modeProc__10daNpc_Nz_cFQ210daNpc_Nz_c6Proc_ei */ void daNpc_Nz_c::modeProc(daNpc_Nz_c::Proc_e proc, int newMode) { - /* Nonmatching */ - typedef void(daNpc_Nz_c::*mode_func_t)(void); struct mode_entry_t { mode_func_t init; @@ -574,7 +573,6 @@ void daNpc_Nz_c::deleteShopItem() { /* 00001CF0-00002038 .text next_msgStatus__10daNpc_Nz_cFPUl */ u16 daNpc_Nz_c::next_msgStatus(u32* pMsgNo) { - /* Nonmatching */ u16 msgStatus = fopMsgStts_MSG_CONTINUES_e; static const u32 shop_next_msg_tbl[4][2] = { @@ -781,8 +779,6 @@ void daNpc_Nz_c::anmAtr(u16) { /* 000022C0-00002390 .text _execute__10daNpc_Nz_cFv */ bool daNpc_Nz_c::_execute() { - /* Nonmatching */ - cLib_addCalc2(&speedF, field_0x6EC, 0.3f, 4.0f); checkOrder(); modeProc(PROC_EXEC, 2); @@ -802,8 +798,6 @@ bool daNpc_Nz_c::_execute() { /* 00002390-0000254C .text _draw__10daNpc_Nz_cFv */ bool daNpc_Nz_c::_draw() { - /* Nonmatching */ - if(!field_0x8FC) { return true; } @@ -834,6 +828,8 @@ bool daNpc_Nz_c::_draw() { dComIfGd_setList(); + GXColor unusedColor_5609 = {255, 255, 0, 128}; + GXColor unusedColor_5611 = {255, 0, 0, 128}; GXColor color = {200, 200, 200, 255}; field_0x934.update(10, scale.x * 5.0f, color, 6, &tevStr); dComIfGd_set3DlineMat(&field_0x934); diff --git a/src/d/actor/d_a_npc_nz_cut.inc b/src/d/actor/d_a_npc_nz_cut.inc index 08580589d..a59d79eeb 100644 --- a/src/d/actor/d_a_npc_nz_cut.inc +++ b/src/d/actor/d_a_npc_nz_cut.inc @@ -16,8 +16,6 @@ static BOOL searchEsa_CB(void* param_1, void* i_this) { /* 000032E8-000034F0 .text _searchEsa__10daNpc_Nz_cFP10fopAc_ac_c */ BOOL daNpc_Nz_c::_searchEsa(fopAc_ac_c* pActor) { - /* Nonmatching */ - if(fopAcM_GetName(pActor) == PROC_ESA) { esa_class* pBait = static_cast(pActor); if(pBait->field_0x298 == 0) { @@ -25,7 +23,7 @@ BOOL daNpc_Nz_c::_searchEsa(fopAc_ac_c* pActor) { if(mpMorf->getFrame() < 6.0f) { cLib_addCalcPos2(&pBait->current.pos, current.pos, 0.1f, 2.5f); mDoMtx_stack_c::transS(pBait->current.pos); - mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::ZXYrotM(pBait->current.angle); pBait->mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } @@ -52,27 +50,22 @@ static BOOL searchNzAndBomb_CB(void* param_1, void*) { /* 00003528-0000377C .text searchTsuboAndBarrel_CB__FPvPv */ static BOOL searchTsuboAndBarrel_CB(void* param_1, void* param_2) { - /* Nonmatching */ - fopAc_ac_c* pActor1 = static_cast(param_1); - fopAc_ac_c* pActor2 = static_cast(param_2); + daNpc_Nz_c* i_this = static_cast(param_2); - if(fopAcM_GetName(pActor1) == PROC_TSUBO || fopAcM_GetName(pActor1) == PROC_Obj_Barrel) { - cXyz delta = pActor1->current.pos - pActor2->current.pos; + if(fopAcM_GetName(param_1) == PROC_TSUBO || fopAcM_GetName(param_1) == PROC_Obj_Barrel) { + cXyz delta = i_this->field_0x6C4 - pActor1->current.pos; if(delta.absXZ() < 300.0f) { + bool success = false; if(fopAcM_GetName(pActor1) == PROC_TSUBO) { - static_cast(pActor1)->pos_init(); - - return true; + success = static_cast(pActor1)->pos_init(); } - else if(fopAcM_GetName(pActor1) == PROC_TSUBO) { // this condition seems weird, also has another part with barrel member variables - static_cast(pActor1)->pos_init(); - - return true; + else if(fopAcM_GetName(pActor1) == PROC_TSUBO) { + success = static_cast(pActor1)->pos_init(); } - if(fopAcM_GetName(pActor1) == PROC_TSUBO) { + if(!success) { fopAcM_delete(pActor1); } } @@ -90,7 +83,7 @@ static BOOL searchEsaInit_CB(void* pActor1, void* pActor2) { cXyz pos(pNz->field_0x6C4); pos.x += cM_ssin(pNz->current.angle.y) * 150.0f; pos.z += cM_scos(pNz->current.angle.y) * 150.0f; - s16 angle = cM_rndFX(358.0f) * 182.0444f; + s16 angle = cAngle::d2s(cM_rndFX(358.0f)); f32 mag = cM_rndF(30.0f); pos.x += mag * cM_ssin(angle); pos.z += mag * cM_scos(angle); @@ -108,8 +101,6 @@ static BOOL searchEsaInit_CB(void* pActor1, void* pActor2) { /* 00003908-00003B90 .text cutProc__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutProc() { - /* Nonmatching */ - typedef void(daNpc_Nz_c::*Func_t)(void); struct mode_entry_t { Func_t start; @@ -167,6 +158,10 @@ void daNpc_Nz_c::cutProc() { } }; + static char* a_demo_name_tbl[] = { + "DEFAULT_NPC_NZ_ESA", + }; + int actIdx = dComIfGp_evmng_getMyActIdx(field_0x8F4, action_table, ARRAY_SIZE(action_table), 1, 0); if(actIdx == -1) { dComIfGp_evmng_cutEnd(field_0x8F4); @@ -187,8 +182,6 @@ void daNpc_Nz_c::cutEatesaStart() { /* 00003BB8-00003CEC .text cutEatesaProc__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutEatesaProc() { - /* Nonmatching */ - fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this); fopAc_ac_c* pBait = mpBait; @@ -199,7 +192,7 @@ void daNpc_Nz_c::cutEatesaProc() { if(pBait) { fopAcM_delete(pBait); mpBait = 0; - field_0x910 = FLOAT_MIN; + field_0x910 = FLOAT_MAX; } else { if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) { @@ -218,8 +211,6 @@ void daNpc_Nz_c::cutEatesaFirstStart() { /* 00003D40-00003F54 .text cutEatesaFirstProc__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutEatesaFirstProc() { - /* Nonmatching */ - cXyz target(field_0x6C4); target.x += cM_ssin(home.angle.y) * 100.0f; target.z += cM_scos(home.angle.y) * 100.0f; @@ -294,8 +285,6 @@ void daNpc_Nz_c::cutHideProc() { /* 00004100-00004204 .text cutSetAnmStart__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutSetAnmStart() { - /* Nonmatching */ - u32* pAnmNo = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "anm_no"); s32 anmNo = 0; u32* pLoopCount = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "loop_count"); @@ -319,8 +308,6 @@ void daNpc_Nz_c::cutSetAnmStart() { /* 00004204-000043C0 .text cutSetAnmProc__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutSetAnmProc() { - /* Nonmatching */ - if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) { field_0x906--; } @@ -360,8 +347,6 @@ void daNpc_Nz_c::cutGoHomeStart() { /* 000043C4-000044D4 .text cutGoHomeProc__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutGoHomeProc() { - /* Nonmatching */ - s16 target = cLib_targetAngleY(¤t.pos, &home.pos); cLib_addCalcAngleS2(¤t.angle.y, target, 4, 0x1000); shape_angle.y = current.angle.y;