d_a_npc_cb1 closer on demo, plus a couple retail matches

This commit is contained in:
LagoLunatic
2025-07-31 20:15:53 -04:00
parent 0d3fef9d3d
commit 9ee87682b1
3 changed files with 340 additions and 90 deletions
+37 -25
View File
@@ -17,6 +17,18 @@ class daNpc_Cb1_c : public daPy_npc_c {
public:
typedef BOOL (daNpc_Cb1_c::*ActionFunc_t)(void*);
enum daNpc_Cb1_StatusBit_e {
daCbStts_NO_CARRY_ACTION = 0x0001,
daCbStts_TACT = 0x0002,
daCbStts_TACT_CORRECT = 0x0004,
daCbStts_TACT_CANCEL = 0x0008,
daCbStts_MUSIC = 0x0010,
daCbStts_NUT = 0x0020,
daCbStts_SHIP_RIDE = 0x0040,
daCbStts_PLAYER_FIND = 0x0080,
daCbStts_UNK_0100 = 0x0100,
};
// daPy_py_c virtuals
f32 getBaseAnimeFrame() { return 0.0f; }
f32 getBaseAnimeFrameRate() { return 1.0f; }
@@ -52,30 +64,30 @@ public:
BOOL isTypeEkaze() { return fopAcM_GetParam(this) == 3; }
BOOL isTypeKaze() { return fopAcM_GetParam(this) == 4; }
BOOL isTypeKazeBoss() { return fopAcM_GetParam(this) == 5; }
BOOL isNoCarryAction() { return m_status & 0x01; }
BOOL isTact() { return m_status & 0x02; }
BOOL isTactCorrect() { return m_status & 0x04; }
BOOL isTactCancel() { return m_status & 0x08; }
BOOL isMusic() { return m_status & 0x10; }
BOOL isNut() { return m_status & 0x20; }
BOOL isShipRide() { return m_status & 0x40; }
BOOL isPlayerFind() { return m_status & 0x80; }
void offNoCarryAction() { m_status &= ~0x01; }
void offTact() { m_status &= ~0x02; }
void offTactCorrect() { m_status &= ~0x04; }
void offTactCancel() { m_status &= ~0x08; }
void offMusic() { m_status &= ~0x10; }
void offNut() { m_status &= ~0x20; }
void offShipRide() { m_status &= ~0x40; }
void offPlayerFind() { m_status &= ~0x80; }
void noCarryAction() { m_status |= 0x01; }
void onTact() { m_status |= 0x02; }
void onTactCorrect() { m_status |= 0x04; }
void onTactCancel() { m_status |= 0x08; }
void onMusic() { m_status |= 0x10; }
void onNut() { m_status |= 0x20; }
void onShipRide() { m_status |= 0x40; }
void onPlayerFind() { m_status |= 0x80; }
BOOL isNoCarryAction() { return m_status & daCbStts_NO_CARRY_ACTION; }
BOOL isTact() { return m_status & daCbStts_TACT; }
BOOL isTactCorrect() { return m_status & daCbStts_TACT_CORRECT; }
BOOL isTactCancel() { return m_status & daCbStts_TACT_CANCEL; }
BOOL isMusic() { return m_status & daCbStts_MUSIC; }
BOOL isNut() { return m_status & daCbStts_NUT; }
BOOL isShipRide() { return m_status & daCbStts_SHIP_RIDE; }
BOOL isPlayerFind() { return m_status & daCbStts_PLAYER_FIND; }
void offNoCarryAction() { m_status &= ~daCbStts_NO_CARRY_ACTION; }
void offTact() { m_status &= ~daCbStts_TACT; }
void offTactCorrect() { m_status &= ~daCbStts_TACT_CORRECT; }
void offTactCancel() { m_status &= ~daCbStts_TACT_CANCEL; }
void offMusic() { m_status &= ~daCbStts_MUSIC; }
void offNut() { m_status &= ~daCbStts_NUT; }
void offShipRide() { m_status &= ~daCbStts_SHIP_RIDE; }
void offPlayerFind() { m_status &= ~daCbStts_PLAYER_FIND; }
void noCarryAction() { m_status |= daCbStts_NO_CARRY_ACTION; }
void onTact() { m_status |= daCbStts_TACT; }
void onTactCorrect() { m_status |= daCbStts_TACT_CORRECT; }
void onTactCancel() { m_status |= daCbStts_TACT_CANCEL; }
void onMusic() { m_status |= daCbStts_MUSIC; }
void onNut() { m_status |= daCbStts_NUT; }
void onShipRide() { m_status |= daCbStts_SHIP_RIDE; }
void onPlayerFind() { m_status |= daCbStts_PLAYER_FIND; }
void restartPoint(s16 point) {
setPointRestart(point, 1);
setWaitNpcAction(NULL);
@@ -88,7 +100,7 @@ public:
static s16 getMaxFlyingTimer();
s16 getFlyingTimer() { return m_flyingTimer; }
int getFlyingTimer() { return m_flyingTimer; }
void setFlyingTimer(s16 time) { m_flyingTimer = time; }
static bool isFlying() { return m_flying; }
void onFlying() { m_flying = true; }
+299 -65
View File
@@ -197,7 +197,12 @@ cPhs_State daNpc_Cb1_c::create() {
fopAcM_SetupActor(this, daNpc_Cb1_c);
if(!isTypeBossDie()) {
if(dComIfGs_checkGetItem(dItem_MASTER_SWORD_3_e)) {
#if VERSION == VERSION_DEMO
if(dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_WT))
#else
if(dComIfGs_checkGetItem(dItem_MASTER_SWORD_3_e))
#endif
{
if(!isTypeKazeBoss()) {
return cPhs_ERROR_e;
}
@@ -237,7 +242,7 @@ cPhs_State daNpc_Cb1_c::create() {
cPhs_State result = dComIfG_resLoad(&mPhs, "Cb");
if(result == cPhs_COMPLEATE_e) {
if(fopAcM_GetParam(this) == 4) {
if(isTypeKaze()) {
if(dComIfGs_getPlayerPriestFlag() == 1) {
dComIfGs_setRestartOption(&dComIfGs_getPlayerPriestPos(), dComIfGs_getPlayerPriestRotate(), dComIfGs_getPlayerPriestRoomNo(), 1);
}
@@ -249,7 +254,12 @@ cPhs_State daNpc_Cb1_c::create() {
return cPhs_ERROR_e;
}
if(isTypeKazeBoss() || isTypeForest() || isTypeWaterFall() || isTypeEkaze() || isTypeKaze()) {
#if VERSION == VERSION_DEMO
if(isTypeForest() || isTypeWaterFall() || isTypeEkaze() || isTypeKaze())
#else
if(isTypeKazeBoss() || isTypeForest() || isTypeWaterFall() || isTypeEkaze() || isTypeKaze())
#endif
{
onMusic();
}
@@ -303,7 +313,6 @@ static BOOL nodeCallBack(J3DNode* node, int calcTiming) {
/* 00000984-00000CF4 .text nutNodeCallBack__FP7J3DNodei */
static BOOL nutNodeCallBack(J3DNode* node, int calcTiming) {
/* Nonmatching - instruction ordering */
if (calcTiming == J3DNodeCBCalcTiming_In) {
J3DJoint* joint = (J3DJoint*)node;
J3DModel* model = j3dSys.getModel();
@@ -320,8 +329,10 @@ static BOOL nutNodeCallBack(J3DNode* node, int calcTiming) {
cXyz temp = a_this->getNutPos() - temp2;
f32 temp4 = temp.abs();
f32 f1;
if(!cM3d_IsZero(temp4)) {
temp *= 14.0f / temp4;
f1 = 14.0f / temp4;
temp *= f1;
}
a_this->getNutPos() = temp2 + temp;
@@ -331,7 +342,8 @@ static BOOL nutNodeCallBack(J3DNode* node, int calcTiming) {
f32 temp5 = a_this->getNusSpeed().abs();
if(!cM3d_IsZero(temp5)) {
a_this->getNusSpeed() *= 5.8f / temp5;
f1 = 5.8f / temp5;
a_this->getNusSpeed() *= f1;
}
Mtx temp3;
@@ -377,7 +389,7 @@ static BOOL ppNodeCallBack(J3DNode* node, int calcTiming) {
/* 00000D9C-00001458 .text createHeap__11daNpc_Cb1_cFv */
BOOL daNpc_Cb1_c::createHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Cb", CB_BDL_CB);
JUT_ASSERT(0x3A8, modelData != NULL);
JUT_ASSERT(DEMO_SELECT(937, 936), modelData != NULL);
mpMorf = new mDoExt_McaMorf(
modelData,
@@ -394,13 +406,13 @@ BOOL daNpc_Cb1_c::createHeap() {
}
m_backbone_jnt_num = modelData->getJointName()->getIndex("backbone");
JUT_ASSERT(0x3B4, m_backbone_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(949, 948), m_backbone_jnt_num >= 0);
m_armRend_jnt_num = modelData->getJointName()->getIndex("armRend");
JUT_ASSERT(0x3B7, m_armRend_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(952, 951), m_armRend_jnt_num >= 0);
m_armL2_jnt_num = modelData->getJointName()->getIndex("armL2");
JUT_ASSERT(0x3BA, m_armL2_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(955, 954), m_armL2_jnt_num >= 0);
modelData->getJointNodePointer(m_backbone_jnt_num)->setCallBack(nodeCallBack);
@@ -413,20 +425,20 @@ BOOL daNpc_Cb1_c::createHeap() {
if(isMusic()) {
modelData = (J3DModelData*)dComIfG_getObjectRes("Cb", CB_BDL_CB_STICK);
JUT_ASSERT(0x3CC, modelData != NULL);
JUT_ASSERT(DEMO_SELECT(973, 972), modelData != NULL);
mpStickModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000022);
if(mpStickModel == NULL) {
return FALSE;
}
m_nut_jnt_num = modelData->getJointName()->getIndex("nut");
JUT_ASSERT(0x3D6, m_nut_jnt_num >= 0);
JUT_ASSERT(DEMO_SELECT(983, 982), m_nut_jnt_num >= 0);
modelData->getJointNodePointer(m_nut_jnt_num)->setCallBack(nutNodeCallBack);
mpStickModel->setUserArea((u32)this);
modelData = (J3DModelData*)dComIfG_getObjectRes("Cb", CB_BDL_CB_CELLO);
JUT_ASSERT(0x3DD, modelData != NULL);
JUT_ASSERT(DEMO_SELECT(990, 989), modelData != NULL);
mpCelloModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000022);
if(mpCelloModel == NULL) {
return FALSE;
@@ -434,7 +446,7 @@ BOOL daNpc_Cb1_c::createHeap() {
}
modelData = (J3DModelData*)dComIfG_getObjectRes("Cb", CB_BDL_PP);
JUT_ASSERT(0x3E9, modelData != NULL);
JUT_ASSERT(DEMO_SELECT(1002, 1001), modelData != NULL);
mpPropellerModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000022);
if(mpPropellerModel == NULL) {
return FALSE;
@@ -450,7 +462,7 @@ BOOL daNpc_Cb1_c::createHeap() {
}
modelData = (J3DModelData*)dComIfG_getObjectRes("Cb", CB_BDL_CB_NUT);
JUT_ASSERT(0x401, modelData != NULL);
JUT_ASSERT(DEMO_SELECT(1026, 1025), modelData != NULL);
mpNutModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000022);
if(mpNutModel == NULL) {
return FALSE;
@@ -472,8 +484,10 @@ BOOL daNpc_Cb1_c::createHeap() {
/* 00001458-0000155C .text setAction__11daNpc_Cb1_cFPM11daNpc_Cb1_cFPCvPvPv_iM11daNpc_Cb1_cFPCvPvPv_iPv */
BOOL daNpc_Cb1_c::setAction(daNpc_Cb1_c::ActionFunc_t* param_1, daNpc_Cb1_c::ActionFunc_t param_2, void* param_3) {
#if VERSION > VERSION_DEMO
setFlyingTimer(0);
offFlying();
#endif
if(*param_1 != param_2) {
if(*param_1) {
@@ -655,12 +669,17 @@ BOOL daNpc_Cb1_c::flyAction(BOOL param_1, f32 param_2, s16 param_3, BOOL param_4
temp.z += param_2 * cM_scos(param_3);
}
if(!isMusic() && mWindCyl.ChkTgHit()) {
#if VERSION == VERSION_DEMO
if(mWindCyl.ChkTgHit())
#else
if(!isMusic() && mWindCyl.ChkTgHit())
#endif
{
cCcD_Obj* tg = mWindCyl.GetTgHitObj();
if(tg && tg->ChkAtType(AT_TYPE_WIND)) {
temp += *mWindCyl.GetTgRVecP() * 0.01f;
ySpeedLimit = 30.0f;
temp5 = 30.0f;
ySpeedLimit = 30.0f;
}
m8F8 = 20000;
@@ -682,12 +701,18 @@ BOOL daNpc_Cb1_c::flyAction(BOOL param_1, f32 param_2, s16 param_3, BOOL param_4
s16 angle = cM_atan2s(temp.x, temp.z);
f32 temp6 = cLib_maxLimit(std::sqrtf(temp.x * temp.x + temp.z * temp.z), temp5);
angle -= (int)shape_angle.y; // TODO: what??
temp6 = cLib_maxLimit(temp6 * l_HIO.field_0xA8, 14000.0f);
f32 temp6 = std::sqrtf(temp.x * temp.x + temp.z * temp.z);
if (temp6 > temp5) {
temp6 = temp5;
}
angle = angle - shape_angle.y;
temp6 *= l_HIO.field_0xA8;
if (temp6 > 14000.0f) {
temp6 = 14000.0f;
}
s16 sin = -temp6 * cM_ssin(angle);
s16 cos = temp6 * cM_scos(angle);
s16 sin = -temp6 * cM_ssin(angle);
cLib_chaseAngleS(&shape_angle.x, cos, l_HIO.field_0xE0);
cLib_chaseAngleS(&shape_angle.z, sin, l_HIO.field_0xE0);
@@ -695,9 +720,9 @@ BOOL daNpc_Cb1_c::flyAction(BOOL param_1, f32 param_2, s16 param_3, BOOL param_4
speed += temp;
f32 temp2 = speed.abs();
f32 temp8 = temp2;
if(!cM3d_IsZero(temp2) && temp2 > temp5) {
f32 temp8 = speed.abs();
if(!cM3d_IsZero(temp8) && temp8 > temp5) {
f32 temp2 = temp8;
cLib_chaseF(&temp8, temp5, 1.0f);
if(temp8 > 30.0f) {
temp8 = 30.0f;
@@ -841,17 +866,24 @@ BOOL daNpc_Cb1_c::isFlyAction() {
/* 00002914-00002A2C .text sowCheck__11daNpc_Cb1_cFv */
BOOL daNpc_Cb1_c::sowCheck() {
if(!dComIfGp_event_runCheck() && (m4E4 & 1) == 0) {
#if VERSION > VERSION_DEMO
if(!dComIfGp_event_runCheck() && (m4E4 & 1) == 0)
#endif
{
dAttList_c* list = dComIfGp_getAttention().getActionBtnB();
if(list) {
fopAc_ac_c* actor = list->getActor();
if((list->mType == fopAc_Attn_TYPE_SPEAK_e || list->mType == fopAc_Attn_TYPE_TALK_e) && (actor->attention_info.flags & 0x10000000)) {
if((list->mType == fopAc_Attn_TYPE_SPEAK_e || list->mType == fopAc_Attn_TYPE_TALK_e) && (actor->attention_info.flags & fopAc_Attn_UNK10000000_e)) {
if(m8E2 != 0x2D) {
#if VERSION == VERSION_DEMO
dComIfGp_getVibration().StartShock(2, -0x21, cXyz(0.0f, 1.0f, 0.0f));
#else
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
#endif
}
dComIfGp_setDoStatus(0x2D);
dComIfGp_setDoStatus(dActStts_ba_nageru__dupe_2D);
if(CPad_CHECK_TRIG_A(0)) {
eventInfo.onCondition(dEvtCnd_CANTALK_e);
@@ -967,7 +999,9 @@ static char* l_cutNameTbl[] = {
/* 00002AD8-00002DC8 .text eventProc__11daNpc_Cb1_cFv */
BOOL daNpc_Cb1_c::eventProc() {
#if VERSION > VERSION_DEMO
mAcch.ClrWallNone();
#endif
if(eventInfo.checkCommandDemoAccrpt() && m8DD != -1) {
if(m8DD == 0) {
@@ -1003,7 +1037,9 @@ BOOL daNpc_Cb1_c::eventProc() {
mPlayerAction = NULL;
mNpcAction = NULL;
#if VERSION > VERSION_DEMO
mAcch.SetWallNone();
#endif
}
@@ -1027,9 +1063,11 @@ BOOL daNpc_Cb1_c::eventProc() {
return TRUE;
}
#if VERSION > VERSION_DEMO
if(dComIfGp_getLinkPlayer()->eventInfo.checkCommandDoor() == FALSE) {
return TRUE;
}
#endif
}
return FALSE;
@@ -1185,7 +1223,7 @@ BOOL daNpc_Cb1_c::evActWalk(int staffIdx) {
f32* speed_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Speed");
f32* pDist = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist");
JUT_ASSERT(0x80C, speed_p != NULL);
JUT_ASSERT(DEMO_SELECT(2042, 2060), speed_p != NULL);
cXyz* pPos = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
cXyz temp;
@@ -1199,7 +1237,7 @@ BOOL daNpc_Cb1_c::evActWalk(int staffIdx) {
cXyz* pOffset = dComIfGp_evmng_getMyXyzP(staffIdx, "Offset");
if(pOffset) {
fopAc_ac_c* target = dComIfGp_event_getTalkPartner();
JUT_ASSERT(0x81D, target != NULL);
JUT_ASSERT(DEMO_SELECT(2059, 2077), target != NULL);
cLib_offsetPos(&temp, &target->current.pos, fopAcM_searchActorAngleY(this, target), pOffset);
temp4 = target->current.pos;
@@ -1260,7 +1298,7 @@ BOOL daNpc_Cb1_c::evActToLink(int staffIdx) {
f32* speed_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Speed");
f32* dist_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist");
JUT_ASSERT(0x865, speed_p != NULL && dist_p != NULL);
JUT_ASSERT(DEMO_SELECT(2131, 2149), speed_p != NULL && dist_p != NULL);
if(fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)) < *dist_p) {
setAnm(ANM_00);
@@ -1324,7 +1362,11 @@ BOOL daNpc_Cb1_c::evActTact(int staffIdx) {
/* 00003A2C-00003A50 .text evInitCelloPlay__11daNpc_Cb1_cFi */
void daNpc_Cb1_c::evInitCelloPlay(int) {
#if VERSION == VERSION_DEMO
setAnm(ANM_09);
#else
setAnm(ANM_17);
#endif
}
/* 00003A50-00003A84 .text evActCelloPlay__11daNpc_Cb1_cFi */
@@ -1355,7 +1397,7 @@ BOOL daNpc_Cb1_c::evActTurn(int staffIdx) {
target = dComIfGp_event_getTalkPartner();
}
JUT_ASSERT(0x916, target != NULL);
JUT_ASSERT(DEMO_SELECT(2308, 2326), target != NULL);
angle = fopAcM_searchActorAngleY(this, target);
}
@@ -1380,7 +1422,7 @@ void daNpc_Cb1_c::evInitSow(int staffIdx) {
onNut();
int* timer_p = dComIfGp_evmng_getMyIntegerP(staffIdx, "Timer");
JUT_ASSERT(0x943, timer_p != NULL);
JUT_ASSERT(DEMO_SELECT(2353, 2371), timer_p != NULL);
m8EE = *timer_p;
}
@@ -1427,7 +1469,9 @@ void daNpc_Cb1_c::evInitSetGoal(int staffIdx) {
/* 00003E74-00003E98 .text evActSetGoal__11daNpc_Cb1_cFi */
BOOL daNpc_Cb1_c::evActSetGoal(int param_1) {
#if VERSION > VERSION_DEMO
evInitSetGoal(param_1);
#endif
return TRUE;
}
@@ -1860,7 +1904,6 @@ BOOL daNpc_Cb1_c::chkWallHit() {
/* 0000593C-00005F0C .text routeCheck__11daNpc_Cb1_cFfPs */
BOOL daNpc_Cb1_c::routeCheck(f32 param_1, s16* param_2) {
/* Nonmatching */
if(!mAcch.ChkGroundHit()) {
cXyz temp = current.pos;
current.pos = old.pos;
@@ -1902,7 +1945,7 @@ BOOL daNpc_Cb1_c::routeCheck(f32 param_1, s16* param_2) {
}
cXyz temp(current.pos.x, current.pos.y + 100.0f, current.pos.z);
cXyz temp2(cM_ssin(*param_2) * 80.0f + temp.x, temp.y, cM_scos(*param_2) * 80.0f + temp.z);
cXyz temp2(cM_ssin(*param_2) * 80.0f + current.pos.x, current.pos.y + 100.0f, cM_scos(*param_2) * 80.0f + current.pos.z);
routeWallCheck(temp, temp2, param_2);
}
@@ -1927,7 +1970,7 @@ BOOL daNpc_Cb1_c::searchNpcAction(void*) {
if(!checkNpcCallCommand()) {
temp2 = 0.0f;
if(fopAcM_GetSpeedF(this) == 0.0f) {
if(speedF == 0.0f) {
setNpcAction(&daNpc_Cb1_c::waitNpcAction, NULL);
return TRUE;
@@ -1957,7 +2000,7 @@ BOOL daNpc_Cb1_c::searchNpcAction(void*) {
if(door || !routeCheck(dist2, &temp) || dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK1_e) || ((daPy_py_c*)pPlayer)->checkAttentionLock()) {
temp2 = 0.0f;
if(fopAcM_GetSpeedF(this) == 0.0f) {
if(speedF == 0.0f) {
offNpcCallCommand();
setNpcAction(&daNpc_Cb1_c::waitNpcAction, this);
@@ -2040,6 +2083,14 @@ BOOL daNpc_Cb1_c::jumpNpcAction(void* param_1) {
/* 00006518-00006574 .text rescueNpcAction__11daNpc_Cb1_cFPv */
BOOL daNpc_Cb1_c::rescueNpcAction(void*) {
#if VERSION == VERSION_DEMO
if(m8F0 == 0) {
setAnm(ANM_00);
fopDwTg_DrawQTo(&draw_tag);
} else if(m8F0 != -1) {
m8DD = 0;
}
#else
if(m8F0 != -1) {
if(m8F0 == 0) {
setAnm(ANM_00);
@@ -2048,6 +2099,7 @@ BOOL daNpc_Cb1_c::rescueNpcAction(void*) {
m8DD = 0;
}
#endif
return TRUE;
}
@@ -2057,7 +2109,15 @@ BOOL daNpc_Cb1_c::musicNpcAction(void*) {
if(m8F0 == 0) {
setAnm(ANM_09);
}
else if(m8F0 != -1 && !isTypeKazeBoss()) {
#if VERSION == VERSION_DEMO
else if(m8F0 != -1)
#else
else if(m8F0 != -1 && !isTypeKazeBoss())
#endif
{
#if VERSION == VERSION_DEMO
getStickAngY();
#endif
cLib_addCalcAngleS(&shape_angle.y, home.angle.y, 8, 0x2000, 0x400);
current.angle.y = shape_angle.y;
@@ -2401,7 +2461,11 @@ BOOL daNpc_Cb1_c::setAnm(u8 param_1) {
}
if(m8DB == 9) {
#if VERSION == VERSION_DEMO
mDoAud_cbPracticeStop();
#else
musicStop();
#endif
}
m8DB = param_1;
@@ -2420,23 +2484,44 @@ BOOL daNpc_Cb1_c::setAnm(u8 param_1) {
/* 00007390-000074F0 .text playAnm__11daNpc_Cb1_cFv */
void daNpc_Cb1_c::playAnm() {
if(mpMorf->play(&eyePos, (m_status & 0x100) && mAcch.ChkGroundHit() ? dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd) : 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))) || mpMorf->getFrame() < m8B0) {
BOOL r3 = mpMorf->play(
&eyePos,
#if VERSION == VERSION_DEMO
mAcch.ChkGroundHit() ? dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd) : 0,
#else
(m_status & daCbStts_UNK_0100) && mAcch.ChkGroundHit() ? dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd) : 0,
#endif
dComIfGp_getReverb(fopAcM_GetRoomNo(this))
);
if(r3 || mpMorf->getFrame() < m8B0) {
m8D7 = 1;
m8D8++;
AnmData& data = anmTblData[m8DC];
#if VERSION == VERSION_DEMO
if(m8D8 >= data.field_0x04)
#else
s8 temp = data.field_0x04;
if(isTypeKazeBoss() && temp == 0x18) {
temp = 0xD;
}
if(m8D8 >= temp) {
if(m8D8 >= temp)
#endif
{
if(data.field_0x05 == 0x13) {
#if VERSION == VERSION_DEMO
mDoAud_cbPracticeStop();
#else
musicStop();
#endif
}
else if(data.field_0x05 == 0x11) {
#if VERSION == VERSION_DEMO
mDoAud_cbPracticePlay(&eyePos);
#else
musicPlay();
#endif
}
initAnm(data.field_0x05, 1);
@@ -2564,6 +2649,12 @@ u16 daNpc_Cb1_c::next_msgStatus(u32* pMsgNo) {
/* 000079AC-00007A8C .text getMsg__11daNpc_Cb1_cFv */
u32 daNpc_Cb1_c::getMsg() {
#if VERSION == VERSION_DEMO
if(isShipRide()) {
return 0x152F;
}
#endif
if(isTypeBossDie()) {
return 0x1456;
}
@@ -2580,7 +2671,13 @@ u32 daNpc_Cb1_c::getMsg() {
return dComIfGs_isEventBit(0x1880) ? 0x151F : 0x1519;
}
return isShipRide() ? 0x152F : 0;
#if VERSION > VERSION_DEMO
if(isShipRide()) {
return 0x152F;
}
#endif
return 0;
}
/* 00007A8C-00007B38 .text setCollision__11daNpc_Cb1_cFv */
@@ -2676,6 +2773,43 @@ void daNpc_Cb1_c::setBaseMtx() {
/* 00007E7C-00008104 .text init__11daNpc_Cb1_cFv */
BOOL daNpc_Cb1_c::init() {
gravity = l_HIO.field_0x70;
#if VERSION > VERSION_DEMO
offPlayerRoom();
offFlying();
setFlyingTimer(0);
m_status = 0;
#endif
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAB;
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAB;
attention_info.distances[fopAc_Attn_TYPE_CARRY_e] = 8;
#if VERSION == VERSION_DEMO
if(!dComIfGs_isEventBit(0x1610)) {
onNpcNotChange();
}
if (shipRideCheck()) {
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAF;
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAF;
} else if(isTypeBossDie()) {
setNpcAction(&daNpc_Cb1_c::rescueNpcAction, NULL);
} else if(isTypeForest()) {
setNpcAction(&daNpc_Cb1_c::musicNpcAction, NULL);
} else if(isTypeWaterFall()) {
setNpcAction(&daNpc_Cb1_c::musicNpcAction, NULL);
} else {
if(isTypeEkaze()) {
onNpcCallCommand();
setNpcAction(&daNpc_Cb1_c::waitNpcAction, NULL);
} else {
setNpcAction(&daNpc_Cb1_c::waitNpcAction, NULL);
}
offMusic();
}
#else
static const char* l_eventNameTbl[] = {
"cb_rescue",
"OPTION_CHAR_END",
@@ -2684,17 +2818,6 @@ BOOL daNpc_Cb1_c::init() {
"cb_sow"
};
gravity = l_HIO.field_0x70;
offPlayerRoom();
offFlying();
setFlyingTimer(0);
m_status = 0;
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAB;
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAB;
attention_info.distances[fopAc_Attn_TYPE_CARRY_e] = 8;
for(int i = 0; i < 5; i++) {
mEventIdx[i] = dComIfGp_evmng_getEventIdx(l_eventNameTbl[i]);
}
@@ -2735,6 +2858,7 @@ BOOL daNpc_Cb1_c::init() {
offMusic();
}
#endif
mStts.Init(0xFE, 0xFF, this);
mCyl.Set(l_cyl_src);
@@ -2742,6 +2866,25 @@ BOOL daNpc_Cb1_c::init() {
mWindCyl.Set(l_wind_cyl_src);
mWindCyl.SetStts(&mStts);
#if VERSION == VERSION_DEMO
static const char* l_eventNameTbl[] = {
"cb_rescue",
"OPTION_CHAR_END",
"cb_tact",
"cb_tactCancel",
"cb_sow"
};
for(int i = 0; i < 5; i++) {
mEventIdx[i] = dComIfGp_evmng_getEventIdx(l_eventNameTbl[i]);
}
m8E3 = -1;
eventInfo.setXyCheckCB(&daNpc_Cb1_XyCheckCB);
eventInfo.setXyEventCB(&daNpc_Cb1_XyEventCB);
#endif
return TRUE;
}
@@ -2753,7 +2896,11 @@ BOOL daNpc_Cb1_c::draw() {
return TRUE;
}
}
else if(!fopAcM_checkCarryNow(this)) {
else
#if VERSION > VERSION_DEMO
if(!fopAcM_checkCarryNow(this))
#endif
{
s32 homeRoomNo = fopAcM_GetHomeRoomNo(this);
if (homeRoomNo < 0 || !dComIfGp_roomControl_checkStatusFlag(homeRoomNo, 0x10)) {
return TRUE;
@@ -2775,7 +2922,12 @@ BOOL daNpc_Cb1_c::draw() {
mDoExt_modelUpdateDL(pFaceModel);
mShadowId = 0;
if((m_status & 0x100) && fopAcM_GetHomeRoomNo(this) >= 0 && !fopAcM_checkCarryNow(this) && !isShipRide()) {
if(
#if VERSION > VERSION_DEMO
(m_status & daCbStts_UNK_0100) &&
#endif
fopAcM_GetHomeRoomNo(this) >= 0 && !fopAcM_checkCarryNow(this) && !isShipRide()
) {
cXyz shadowPos(current.pos.x, current.pos.y + 80.0f, current.pos.z);
mShadowId = dComIfGd_setShadow(
mShadowId, 0, mpMorf->getModel(), &shadowPos, 600.0f, 20.0f,
@@ -2794,7 +2946,12 @@ BOOL daNpc_Cb1_c::draw() {
mpCelloModel->setBaseTRMtx(pModel->getAnmMtx(m_armL2_jnt_num));
mDoExt_modelUpdateDL(mpCelloModel);
if((m_status & 0x100) && mShadowId) {
if(
#if VERSION > VERSION_DEMO
(m_status & daCbStts_UNK_0100) &&
#endif
mShadowId
) {
dComIfGd_addRealShadow(mShadowId, mpStickModel);
dComIfGd_addRealShadow(mShadowId, mpCelloModel);
}
@@ -2811,7 +2968,12 @@ BOOL daNpc_Cb1_c::draw() {
mDoExt_modelUpdateDL(mpPropellerModel);
if((m_status & 0x100) && mShadowId) {
if(
#if VERSION > VERSION_DEMO
(m_status & daCbStts_UNK_0100) &&
#endif
mShadowId
) {
dComIfGd_addRealShadow(mShadowId, mpPropellerModel);
}
}
@@ -2845,12 +3007,26 @@ BOOL daNpc_Cb1_c::execute() {
offPlayerRoom();
}
m_status &= ~0x100;
#if VERSION > VERSION_DEMO
m_status &= ~daCbStts_UNK_0100;
#endif
if(!isShipRide() && !fopAcM_checkCarryNow(this)) {
if(!check_initialRoom() || (isTypeKazeBoss() && !dComIfG_Bgsp()->ChkMoveBG_NoDABg(mAcch.m_gnd))) {
if(
!isShipRide()
#if VERSION > VERSION_DEMO
&& !fopAcM_checkCarryNow(this)
#endif
) {
if(
!check_initialRoom()
#if VERSION > VERSION_DEMO
|| (isTypeKazeBoss() && !dComIfG_Bgsp()->ChkMoveBG_NoDABg(mAcch.m_gnd))
#endif
) {
#if VERSION > VERSION_DEMO
home.roomNo = 0xFF;
current.roomNo = 0xFF;
#endif
if(dComIfGp_getCb1Player() == this) {
dComIfGp_setCb1Player(NULL);
@@ -2880,6 +3056,12 @@ BOOL daNpc_Cb1_c::execute() {
);
}
#if VERSION == VERSION_DEMO
if (checkNowPosMove("Cb1")) {
playAnm();
}
#endif
cXyz temp2 = cXyz::Zero;
f32 temp3 = 3.0f;
@@ -2896,7 +3078,9 @@ BOOL daNpc_Cb1_c::execute() {
m8E0 = mAcch.ChkGroundHit();
mAcch.CrrPos(*dComIfG_Bgsp());
m_status |= 0x100;
#if VERSION > VERSION_DEMO
m_status |= daCbStts_UNK_0100;
#endif
if(mAcch.GetGroundH() == -G_CM3D_F_INF || dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) == 4) {
if(isFlyAction() && m8FC > -400.0f) {
@@ -2953,6 +3137,7 @@ BOOL daNpc_Cb1_c::execute() {
setCollision();
}
#if VERSION > VERSION_DEMO
if(checkNowPosMove("Cb1")) {
playAnm();
}
@@ -2962,11 +3147,18 @@ BOOL daNpc_Cb1_c::execute() {
dComIfGp_setAStatus(dActStts_HIDDEN_e);
dComIfGp_setRStatusForce(dActStts_BLANK_e);
}
#endif
if(!eventProc()) {
offTact();
if(!isFlyAction() && !isMusic() && mWindCyl.ChkTgHit()) {
if(
!isFlyAction()
#if VERSION > VERSION_DEMO
&& !isMusic()
#endif
&& mWindCyl.ChkTgHit()
) {
temp2 = *mWindCyl.GetTgRVecP();
f32 temp = mWindCyl.GetTgRVecP()->absXZ();
if(temp < 1.0f) {
@@ -2981,11 +3173,20 @@ BOOL daNpc_Cb1_c::execute() {
}
cLib_addCalcPosXZ(&m88C, temp2, 0.5f, temp3, 0.5f);
if(dComIfGp_getPlayer(0) == this) {
#if VERSION == VERSION_DEMO
int r4 = dActStts_BLANK_e;
dComIfGp_setDoStatus(r4);
dComIfGp_setAStatus(dActStts_HIDDEN_e);
if(mAcch.ChkGroundHit()) {
r4 = dActStts_RETURN_e;
}
dComIfGp_setRStatusForce(r4);
#else
if(mAcch.ChkGroundHit()) {
dComIfGp_setRStatusForce(dActStts_RETURN_e);
}
#endif
fopAcM_SetStatusMap(this, 0x12);
@@ -2998,13 +3199,29 @@ BOOL daNpc_Cb1_c::execute() {
m4E4 |= 1;
}
#if VERSION == VERSION_DEMO
playerAction(NULL);
if(dComIfGp_getRStatusForce() == 7 && !dComIfGp_event_runCheck() && (CPad_CHECK_TRIG_R(0) || CPad_CHECK_TRIG_START(0))) {
m4E4 |= 1;
} else
#else
if(!dComIfGp_event_runCheck() && dComIfGp_getRStatusForce() == 7 && !dComIfGp_event_runCheck() && (CPad_CHECK_TRIG_R(0) || CPad_CHECK_TRIG_START(0))) {
m4E4 |= 1;
}
playerAction(NULL);
#endif
if(getDamageFogTimer() == 0 && !isMusic() && mCyl.ChkTgHit() && mCyl.GetTgHitObj()) {
if(
getDamageFogTimer() == 0
#if VERSION > VERSION_DEMO
&& !isMusic()
#endif
&& mCyl.ChkTgHit()
&& mCyl.GetTgHitObj()
) {
cXyz temp = current.pos - *mCyl.GetTgHitPosP();
current.angle.y = cM_atan2s(temp.x, temp.z);
speedF = l_HIO.field_0xC4;
@@ -3034,7 +3251,14 @@ BOOL daNpc_Cb1_c::execute() {
current.angle.y = shape_angle.y;
}
if(getDamageFogTimer() == 0 && !isMusic() && mCyl.ChkTgHit() && mCyl.GetTgHitObj()) {
if(
getDamageFogTimer() == 0 &&
#if VERSION > VERSION_DEMO
!isMusic() &&
#endif
mCyl.ChkTgHit() &&
mCyl.GetTgHitObj()
) {
cXyz temp = current.pos - *mCyl.GetTgHitPosP();
current.angle.y = cM_atan2s(temp.x, temp.z);
speedF = l_HIO.field_0xC4;
@@ -3062,7 +3286,13 @@ BOOL daNpc_Cb1_c::execute() {
daNpc_Cb1_c::~daNpc_Cb1_c() {
dComIfG_resDelete(&mPhs, "Cb");
if(heap && mpMorf) {
#if VERSION == VERSION_DEMO
if(mpMorf)
#else
if(heap && mpMorf)
#endif
{
mpMorf->stopZelAnime();
}
@@ -3074,7 +3304,11 @@ daNpc_Cb1_c::~daNpc_Cb1_c() {
offFlying();
offPlayerRoom();
#if VERSION == VERSION_DEMO
mDoAud_cbPracticeStop();
#else
musicStop();
#endif
}
/* 000093A8-000093C8 .text daNpc_Cb1_Create__FP10fopAc_ac_c */
+4
View File
@@ -70,6 +70,10 @@ const dCcD_SrcCyl daObjTpost_c::m_cyl_src = {
/* Height */ 0.0f,
},
};
#ifdef __MWERKS__
static
#endif
const s32 daObjTpost_c::m_send_price[] = {
0x05,
0x0A,