From 5417608f6e9e5c6ff4e4f8fbdc9184f10260da42 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 16 Apr 2024 22:16:00 -0400 Subject: [PATCH] d_a_npc_nz 100%, weak order not matching --- configure.py | 2 +- src/d/actor/d_a_npc_bs1.cpp | 8 +-- src/d/actor/d_a_npc_nz.cpp | 90 ++++++++++++++++++---------------- src/d/actor/d_a_npc_nz_cut.inc | 9 ++-- 4 files changed, 58 insertions(+), 51 deletions(-) diff --git a/configure.py b/configure.py index dd3d34b90..a7c9c1fb6 100644 --- a/configure.py +++ b/configure.py @@ -1482,7 +1482,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_mk"), ActorRel(NonMatching, "d_a_npc_mn"), ActorRel(NonMatching, "d_a_npc_mt"), - ActorRel(NonMatching, "d_a_npc_nz"), + ActorRel(NonMatching, "d_a_npc_nz", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_npc_ob1"), ActorRel(NonMatching, "d_a_npc_os", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_npc_p1"), diff --git a/src/d/actor/d_a_npc_bs1.cpp b/src/d/actor/d_a_npc_bs1.cpp index 907c36fbc..66907083e 100644 --- a/src/d/actor/d_a_npc_bs1.cpp +++ b/src/d/actor/d_a_npc_bs1.cpp @@ -1895,14 +1895,14 @@ BOOL daNpc_Bs1_c::evn_talk() { } else { setAnmFromMsgTag(); u16 msgStatus = l_msg->mStatus; - if (msgStatus == 0xE) { + if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) { l_msg->mStatus = next_msgStatus(&m738); - if (l_msg->mStatus == 0xF) { + if (l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { fopMsgM_messageSet(m738); } } else { - if (msgStatus == 0x12) { - l_msg->mStatus = 0x13; + if (msgStatus == fopMsgStts_BOX_CLOSED_e) { + l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; l_msg = NULL; l_msgId = fpcM_ERROR_PROCESS_ID_e; return TRUE; diff --git a/src/d/actor/d_a_npc_nz.cpp b/src/d/actor/d_a_npc_nz.cpp index 3eb6d6363..b62ba03cf 100644 --- a/src/d/actor/d_a_npc_nz.cpp +++ b/src/d/actor/d_a_npc_nz.cpp @@ -80,8 +80,6 @@ BOOL daNpc_Nz_c::TailNodeCallBack(J3DNode* node, int param_1) { /* 000003A4-00000978 .text TailControl__10daNpc_Nz_cFv */ void daNpc_Nz_c::TailControl() { - /* Nonmatching */ - cXyz sp64; cXyz sp58; cXyz sp4C; @@ -95,12 +93,15 @@ void daNpc_Nz_c::TailControl() { mDoMtx_stack_c::YrotS(angle); mDoMtx_stack_c::XrotM(angle2); mDoMtx_stack_c::multVec(&sp58, &sp40); + + int i; + s16 temp9; + int temp7; 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++, r19++, r18++) { + for(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; @@ -113,9 +114,9 @@ void daNpc_Nz_c::TailControl() { 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); + temp7 = cM_atan2s(sp64.x, sp64.z); dist = sp64.absXZ(); - s16 temp9 = -cM_atan2s(sp64.y, dist); + temp9 = -cM_atan2s(sp64.y, dist); sp58.set(0.0f, 0.0f, 20.0f); mDoMtx_stack_c::YrotS(temp7); mDoMtx_stack_c::XrotM(temp9); @@ -340,8 +341,6 @@ void daNpc_Nz_c::setAnm(s8 param_1, bool param_2) { /* 0000146C-000017E0 .text setMtx__10daNpc_Nz_cFv */ void daNpc_Nz_c::setMtx() { - /* Nonmatching */ - mpMorf->getModel()->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); @@ -354,32 +353,34 @@ void daNpc_Nz_c::setMtx() { daShopItem_c* item = getShopItem(field_0x909); if(item) { cXyz* pScale = item->getScaleP(); - field_0xA90 = cLib_maxLimit(field_0xA90 + 1, 0x14); + field_0xA90 = cLib_maxLimit(field_0xA90 + 1, 20); f32 temp4 = 0.0f; f32 scaleX; f32 scaleY; - if(field_0xA90 < 0xC) { - scaleX = (field_0xA90 / 12.0f); - scaleX *= 0.85f; - scaleY = (field_0xA90 / 12.0f) * 1.4f; + f32 multX1 = 0.85f; + f32 multY1 = 1.4f; + f32 multX2 = 1.1f; + f32 multY2 = 0.8f; + f32 multX3 = 1.0f; + f32 multY3 = 1.0f; + if(field_0xA90 < 12) { + scaleX = field_0xA90 / 12.0f; + scaleY = field_0xA90 / 12.0f; + scaleX *= multX1; + scaleY *= multY1; } - else if(field_0xA90 < 0x10) { - scaleY = (field_0xA90 - 0xC); - scaleY *= 0.25f; - scaleX = scaleY * 1.1f; - f32 temp = (1.0f - scaleY); - scaleX += temp * 0.85f; - scaleY = scaleY * 0.8f + temp * 1.4f; + else if(field_0xA90 < 16) { + scaleX = (field_0xA90 - 12) / 4.0f; + scaleY = (field_0xA90 - 12) / 4.0f; + scaleX = (scaleX * multX2) + (1.0f - scaleX) * multX1; + scaleY = (scaleY * multY2) + (1.0f - scaleY) * multY1; } else { - f32 temp = (field_0xA90 - 0x10); - temp *= 0.5f; - scaleY = temp; - scaleY *= 1.0f; - temp = 1.0f - temp; - scaleX = scaleY + temp * 1.1f; - scaleY = scaleY + temp * 0.8f; + scaleX = (field_0xA90 - 16) / 2.0f; + scaleY = (field_0xA90 - 16) / 2.0f; + scaleX = (scaleX * multX3) + (1.0f - scaleX) * multX2; + scaleY = (scaleY * multY3) + (1.0f - scaleY) * multY2; } pScale->z = scaleX; @@ -702,8 +703,6 @@ u16 daNpc_Nz_c::next_msgStatus(u32* pMsgNo) { /* 00002038-000022C0 .text anmAtr__10daNpc_Nz_cFUs */ void daNpc_Nz_c::anmAtr(u16) { - /* Nonmatching */ - if(field_0x6D5 == 9 && mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) { setAnm(0, false); } @@ -712,12 +711,18 @@ void daNpc_Nz_c::anmAtr(u16) { } if(dComIfGp_checkMesgSendButton()) { - if(mpCurrMsg->mStatus == 0x11 || mpCurrMsg->mStatus == 0x12 || mpCurrMsg->mStatus == 0x10) { + if (mpCurrMsg->mStatus == fopMsgStts_BOX_CLOSING_e || + mpCurrMsg->mStatus == fopMsgStts_BOX_CLOSED_e || + mpCurrMsg->mStatus == fopMsgStts_MSG_ENDS_e + ) { return; } daShopItem_c* item; switch(mpCurrMsg->mMsgNo) { + case 0x33F5: + case 0x33F6: + break; case 0x33F7: case 0x33F8: case 0x33F9: @@ -745,7 +750,6 @@ void daNpc_Nz_c::anmAtr(u16) { field_0xA90 = 0; fopAcM_seStart(this, JA_SE_CV_M_NZ_TALK_IN, 0); setAnm(0xC, false); - break; case 0x3405: case 0x3406: @@ -840,8 +844,6 @@ bool daNpc_Nz_c::_draw() { /* 0000254C-00002768 .text createInit__10daNpc_Nz_cFv */ BOOL daNpc_Nz_c::createInit() { - /* Nonmatching */ - setAnm(0, false); modeProcInit(0); @@ -880,8 +882,6 @@ BOOL daNpc_Nz_c::createInit() { /* 00002768-0000282C .text setSmokeParticle__10daNpc_Nz_cFv */ void daNpc_Nz_c::setSmokeParticle() { - /* Nonmatching */ - if(field_0x914.getEmitter() != NULL) { field_0x914.end(); } @@ -904,8 +904,6 @@ void daNpc_Nz_c::getArg() { /* 00002830-000028FC .text _create__10daNpc_Nz_cFv */ s32 daNpc_Nz_c::_create() { - /* Nonmatching */ - fopAcM_SetupActor(this, daNpc_Nz_c); getArg(); @@ -923,12 +921,22 @@ s32 daNpc_Nz_c::_create() { if(!fopAcM_entrySolidHeap(this, createHeap_CB, 0x2FE0)) { return cPhs_ERROR_e; } - - if(!createInit()) { - return cPhs_ERROR_e; + + BOOL success = createInit(); + if (!success) { + // Fakematch? + if (success) { + return cPhs_ERROR_e; + } else { + return cPhs_ERROR_e; + } + } else { + return cPhs_COMPLEATE_e; } +} - return cPhs_COMPLEATE_e; +/* 000028FC-00002AF0 .text __ct__10daNpc_Nz_cFv */ +daNpc_Nz_c::daNpc_Nz_c() { } /* 00002E00-00002E6C .text _delete__10daNpc_Nz_cFv */ diff --git a/src/d/actor/d_a_npc_nz_cut.inc b/src/d/actor/d_a_npc_nz_cut.inc index 0f62f2af4..9fb851290 100644 --- a/src/d/actor/d_a_npc_nz_cut.inc +++ b/src/d/actor/d_a_npc_nz_cut.inc @@ -245,17 +245,16 @@ void daNpc_Nz_c::cutEatesaFirstProc() { /* 00003F54-0000404C .text cutKillAllStart__10daNpc_Nz_cFv */ void daNpc_Nz_c::cutKillAllStart() { - /* Nonmatching */ - fopAcM_Search((fopAcIt_JudgeFunc)&searchNzAndBomb_CB, this); fopAcM_Search((fopAcIt_JudgeFunc)&searchTsuboAndBarrel_CB, this); fopAcM_Search((fopAcIt_JudgeFunc)&searchEsaInit_CB, this); cXyz pos = field_0x6C4; - pos.x += cM_ssin(home.angle.y + 0x8000) * 250.0f; - pos.z += cM_scos(home.angle.y + 0x8000) * 250.0f; + s16 r5 = home.angle.y + 0x8000; + pos.x += cM_ssin(home.angle.y) * 250.0f; + pos.z += cM_scos(home.angle.y) * 250.0f; - daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, home.angle.y + 0x8000); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, r5); } /* 0000404C-00004080 .text cutKillAllProc__10daNpc_Nz_cFv */