Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 28 additions & 18 deletions include/NPC/NpcBase.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -243,26 +243,27 @@ class TBaseNPC : public TSpineEnemy {
}
f32 getAnmOffDist_()
{
bool bVar3 = false;
f32 fVar1 = gpCamera->mFar;
u32 uVar5 = unkD0->getCurrentAnmKind();
f32 fVar2 = mPtrSaveNormal->mSLDanceAnmOffDist.get();
bool useDanceDistance = false;
f32 distance = gpCamera->mFar;
int animationKind = unkD0->getCurrentAnmKind();
f32 danceDistance = mPtrSaveNormal->mSLDanceAnmOffDist.get();
if (checkActionFlag(NPC_ACTION_HAPPY | NPC_ACTION_DANCE)
|| mActorType == 0x400000D || uVar5 || uVar5 == 23) {
bVar3 = true;
|| mActorType == 0x400000D || animationKind == NPC_ANM_KIND_MAD
|| animationKind == NPC_ANM_KIND_UNK17) {
useDanceDistance = true;
}

if (!isNerveMaybeDontCalcAnim0() && !isNerveMaybeDontCalcAnim1()) {
fVar1 = mIndividualParams->mWaitAnmOffDist1.get();
if (bVar3 && fVar1 < fVar2)
fVar1 = fVar2;
} else {
fVar1 = mIndividualParams->mWaitAnmOffDist0.get();
if (bVar3 && fVar1 < fVar2)
fVar1 = fVar2;
if (isNerveMaybeDontCalcAnim0()) {
distance = mIndividualParams->mWaitAnmOffDist0.get();
if (useDanceDistance)
distance = danceDistance > distance ? danceDistance : distance;
} else if (isNerveMaybeDontCalcAnim1()) {
distance = mIndividualParams->mWaitAnmOffDist1.get();
if (useDanceDistance)
distance = danceDistance > distance ? danceDistance : distance;
}

return fVar1;
return distance;
}
void setNpcAnm_(EnumNpcAnmKind, EnumNpcStopMotionBlendOnOff);
void requestNpcAnm_(EnumNpcAnmKind, EnumNpcStopMotionBlendOnOff);
Expand Down Expand Up @@ -430,11 +431,20 @@ class TBaseNPC : public TSpineEnemy {

void doThing()
{
int iVar13 = mPtrSaveNormal->mSLGraphWanderMinFrame.get();
int sVar1 = mPtrSaveNormal->mSLGraphWanderMaxFrame.get();
int maxFrame = mPtrSaveNormal->mSLGraphWanderMaxFrame.get();
int minFrame = mPtrSaveNormal->mSLGraphWanderMinFrame.get();

unk0 = 0;
unk4 = MsRandI(sVar1, iVar13);
unk4 = MsRandI(minFrame, maxFrame);
}

void startGraphWait()
{
int maxFrame = mPtrSaveNormal->mSLGraphWaitMaxFrame.get();
int minFrame = mPtrSaveNormal->mSLGraphWaitMinFrame.get();

unk0 = 0;
unk4 = MsRandI(minFrame, maxFrame);
}

bool doThing2()
Expand Down
3 changes: 1 addition & 2 deletions src/NPC/NpcAnm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -409,8 +409,6 @@ void TBaseNPC::npcFallIn()

bool TBaseNPC::npcRecoverFromSinking()
{
bool result = false;

if (!checkLiveFlag(LIVE_FLAG_UNK8000000)) {
if (mMActor->getFrameCtrl(ANM_TYPE_BCK)->checkPass(32.0f)) {
onLiveFlag(LIVE_FLAG_UNK8000000);
Expand All @@ -428,6 +426,7 @@ bool TBaseNPC::npcRecoverFromSinking()
}
}

bool result = false;
if (mMActor->isCurAnmAlreadyEnd(ANM_TYPE_BCK)) {
result = true;
offLiveFlag(LIVE_FLAG_AIRBORNE);
Expand Down
62 changes: 33 additions & 29 deletions src/NPC/NpcChange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,52 +464,56 @@ void TBaseNPC::changeNerveProc_()
| LIVE_FLAG_SINK_BOTTOM | LIVE_FLAG_UNK400000)
&& !checkActionFlag(NPC_ACTION_BURNING) && isClean()) {

if (isSunflowerReviving() && isNerveCanGoToTalk()
if (!isSunflowerReviving() && isNerveCanGoToTalk()
&& (mActorType != 0x4000006
|| unkD0->getCurrentAnmKind() == NPC_ANM_KIND_UNK4)
&& !SMS_IsMarioOpeningDoor()) {
bool inCameraCube = true;
if (gpMarDirector->mMap == 7) {
JGeometry::TVec3<f32> local_58 = mPosition;
local_58.y += 75.0f;
if (SMS_IsInSameCameraCube(local_58))
bVar5 = true;
inCameraCube = SMS_IsInSameCameraCube(local_58);
}

f32 fVar1;
f32 fVar2;
if (mThrowCtrl != nullptr) {
fVar1 = mPtrSaveNormal->mSLThrowTalkAcceptHeight.get();
fVar2 = mPtrSaveNormal->mSLThrowTalkAcceptDist.get();
} else {
if (mActorType == 0x400001A) {
fVar2 = mPtrSaveNormal->mSLSunflowerLTalkDist.get();
if (inCameraCube) {
f32 fVar1;
f32 fVar2;
if (mThrowCtrl != nullptr) {
fVar1 = mPtrSaveNormal->mSLThrowTalkAcceptHeight.get();
fVar2 = mPtrSaveNormal->mSLThrowTalkAcceptDist.get();
} else {
fVar2 = mPtrSaveNormal->mTalkAcceptDist.get();
if (mActorType == 0x400001A) {
fVar2 = mPtrSaveNormal->mSLSunflowerLTalkDist.get();
} else {
fVar2 = mPtrSaveNormal->mTalkAcceptDist.get();
}
fVar1 = mPtrSaveNormal->mTalkAcceptHeight.get();
}
fVar1 = mPtrSaveNormal->mTalkAcceptHeight.get();
}

f32 fVar3;
if ((checkActionFlag(NPC_ACTION_UNK400 | NPC_ACTION_UNK1))
|| isSunflower() || mActorType == 0x400001D) {
fVar3 = mPtrSaveNormal->mSLSitTalkAcceptDegree.get();
} else {
fVar3 = mPtrSaveNormal->mTalkAcceptDegree.get();
}
f32 fVar3;
if ((checkActionFlag(NPC_ACTION_UNK400 | NPC_ACTION_UNK1))
|| isSunflower() || mActorType == 0x400001D) {
fVar3 = mPtrSaveNormal->mSLSitTalkAcceptDegree.get();
} else {
fVar3 = mPtrSaveNormal->mTalkAcceptDegree.get();
}

if (abs(SMS_GetMarioPos().y - mPosition.y) < fVar1
&& isInSight(SMS_GetMarioPos(), fVar2, fVar3, -1.0f)
&& MsIsInSight(
SMS_GetMarioPos(), SHORTANGLE2DEG(*gpMarioAngleY),
mPosition, fVar2,
mPtrSaveNormal->mSLMarioTalkAcceptDegree.get(), 0.0f))
bVar5 = true;
if (abs(SMS_GetMarioPos().y - mPosition.y) < fVar1
&& isInSight(SMS_GetMarioPos(), fVar2, fVar3, -1.0f)
&& MsIsInSight(
SMS_GetMarioPos(), SHORTANGLE2DEG(*gpMarioAngleY),
mPosition, fVar2,
mPtrSaveNormal->mSLMarioTalkAcceptDegree.get(),
0.0f))
bVar5 = true;
}
}
}

if (bVar5) {
onLiveFlag(LIVE_FLAG_UNK20000);
if (checkLiveFlag(LIVE_FLAG_UNK40000)) {
bVar4 = true;
offLiveFlag(LIVE_FLAG_UNK40000);
const TNerveBase<TLiveActor>* current
= mSpine->getCurrentNerve();
Expand Down Expand Up @@ -550,7 +554,7 @@ void TBaseNPC::changeNerveProc_()
unk15C->unk0 = 0;

if (latestNerve == &TNerveNPCSink::theNerve()) {
if (gpPollution->isPolluted(mPosition.x, mPosition.y, mPosition.z))
if (gpPollution->isPolluted(mPosition.x, unk1C4, mPosition.z))
return;

mSpine->setNext(&TNerveNPCRecoverFromSink::theNerve());
Expand Down
4 changes: 2 additions & 2 deletions src/NPC/NpcCollision.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,11 @@ void TBaseNPC::execNpcObjCollision_()
void TBaseNPC::setVariableDamageRadius_()
{
const TNpcInitInfo* initInfo = SMSGetNpcInitData(mActorType - 0x4000001);
f32 fVar6 = mScaling.x * initInfo->mDamageRadius;
f32 fVar6 = initInfo->mDamageRadius * mScaling.x;
if (isBeTrampledNpc() && !SMS_IsMarioTouchGround4cm()
&& SMS_GetMarioPos().y > mPosition.y) {
JGeometry::TVec3<f32> diff;
diff.sub(mPosition, SMS_GetMarioPos());
diff.sub(SMS_GetMarioPos(), mPosition);
diff.y = 0.0f;
if (diff.squared() < CLBSquared(fVar6 * 3.0f))
fVar6 = mIndividualParams->mSLDamageRadiusSmall.get();
Expand Down
13 changes: 7 additions & 6 deletions src/NPC/NpcEvent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,9 +281,9 @@ static void evFireStartDemoCamera(TSpcTypedInterp<TEventWatcher>* interp,
{
interp->verifyArgNum(1, &arg_num);
const char* cameraName = interp->pop().getDataString();
gpMarDirector->fireStartDemoCamera(cameraName, nullptr, -1, 0.0f, true,
nullptr, 0, nullptr,
JDrama::TFlagT<u16>());
SMSGetMarDirector()->fireStartDemoCamera(cameraName, nullptr, -1, 0.0f,
true, nullptr, 0, nullptr,
JDrama::TFlagT<u16>());
interp->push();
}

Expand Down Expand Up @@ -377,20 +377,21 @@ void TNpcEvent::reviveOneSunflower()
TBaseNPC* npc
= static_cast<TBaseNPC*>(JDrama::TNameRefGen::search(acStack_50));
--mDownSunflowerNum;
JGeometry::TVec3<f32>* position = &npc->unk1B8;

static const char* sCameraNames[] = {
"ひまわりカメラ0", "ひまわりカメラ1", "ひまわりカメラ2",
"ひまわりカメラ3", "ひまわりカメラ4",
};

gpMarDirector->fireStartDemoCamera(sCameraNames[idx], &npc->unk1B8, -1,
gpMarDirector->fireStartDemoCamera(sCameraNames[idx], position, -1,
0.0f, true, &ReviveSunflowerCallBack,
(uintptr_t)npc, nullptr, 0);

if (mDownSunflowerNum == 0) {
gpItemManager->makeShineAppearWithDemo(
"ひまわり用シャイン", "ひまわりシャインカメラ", npc->unk1B8.x,
npc->unk1B8.y + 500.0f, npc->unk1B8.z);
"ひまわり用シャイン", "ひまわりシャインカメラ", position->x,
position->y + 500.0f, position->z);
TFlagManager::getInstance()->setBool(false, 0x50003);
}
}
Expand Down
12 changes: 7 additions & 5 deletions src/NPC/NpcNerve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ DEFINE_NERVE(TNerveNPCGraphWait, TLiveActor)
TBaseNPC* self = (TBaseNPC*)spine->getBody();

if (spine->getTime() == 0)
self->unk22C->doThing();
self->unk22C->startGraphWait();

if (self->getMarchSpeed() < 0.001f) {
if (self->unk22C->doThing2()) {
Expand Down Expand Up @@ -114,13 +114,14 @@ DEFINE_NERVE(TNerveNPCWaitMarioApproach, TLiveActor)
return true;
}

if (self->getActorType() - 0x400001C > 1) {
u32 actorType = self->getActorType();
if (actorType - 0x400001C > 1) {

if (!self->isPeachTired()) {

if (self->isSunflowerReviving()) {
self->sunflowerReviving();
} else if (self->getActorType() == 0x4000006) {
} else if (actorType == 0x4000006) {
self->monteMESetAnmWhenFar();
self->execTurnToFirstState();
} else {
Expand Down Expand Up @@ -149,11 +150,12 @@ DEFINE_NERVE(TNerveNPCTurnToMario, TLiveActor)
return true;
}

if (self->getActorType() - 0x400001C > 1) {
u32 actorType = self->getActorType();
if (actorType - 0x400001C > 1) {
if (!self->isPeachTired()) {
if (self->isSunflowerReviving()) {
self->sunflowerReviving();
} else if (self->getActorType() == 0x4000006) {
} else if (actorType == 0x4000006) {
self->monteMESetAnmWhenNear();
self->execTurnToFirstState();
} else if (self->isTurnToMarioWhenApproach()) {
Expand Down
Loading