Skip to content
Draft
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
1 change: 0 additions & 1 deletion include/Game/Boss/Koopa.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class Koopa : public LiveActor {
virtual bool receiveMsgEnemyAttack(u32 msg, HitSensor* pSender, HitSensor* pReceiver);
virtual bool receiveOtherMsg(u32 msg, HitSensor* pSender, HitSensor* pReceiver);

private:
/* 0x8C */ TVec3f _8C;
/* 0x98 */ KoopaSequencer* mSequencer;
/* 0x9C */ KoopaSensorCtrl* mSensorCtrl;
Expand Down
18 changes: 18 additions & 0 deletions include/Game/Boss/KoopaDemoJumpToPlanet.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#pragma once

#include "Game/Boss/Koopa.hpp"

class KoopaDemoJumpToPlanet : public NerveExecutor {
public:
KoopaDemoJumpToPlanet(Koopa*);

virtual void init();
virtual void kill();

void startReady();
void exeStart();
void exeFall();

/* 0x8 */ bool _8;
/* 0C */ Koopa* mParent;
};
18 changes: 18 additions & 0 deletions include/Game/Boss/KoopaDemoPowerUp.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#pragma once

#include "Game/Boss/Koopa.hpp"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer forward declaration for types referred to by pointer or reference in header files.


class KoopaDemoPowerUp : public NerveExecutor {
public:
KoopaDemoPowerUp(Koopa*);

virtual void init();
virtual void appear();
virtual void kill();

void exeWaitDemo();
void exeDemo();

/* 0x8 */ bool _8;
/* 0C */ Koopa* mParent;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing the x in 0x.

};
20 changes: 19 additions & 1 deletion include/Game/Boss/KoopaFunction.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
#pragma once

#include "Game/Boss/Koopa.hpp"
#include "Game/Map/KoopaBattleMapStair.hpp"
#include "JSystem/JGeometry/TVec.hpp"

namespace KoopaFunction {
s32 registerBattleMapStair(KoopaBattleMapStair*);
};
void startRecoverKoopaArmor(Koopa*);
void startRecoverKoopaTailThorn(Koopa*);
void endFaceCtrl(Koopa*, s32);
void initKoopaCamera(Koopa*, const char*);
void endKoopaCamera(Koopa*, const char*, bool, s32);
void setKoopaPos(Koopa*, const char*);
void startKoopaCamera(Koopa*, const char*);
void startKoopaTargetCamera(Koopa*, const char*);
void startFaceCtrl(Koopa*);
bool isKoopaVs1(const Koopa*);
bool isKoopaVs2(const Koopa*);
bool isKoopaLv3(const Koopa*);
bool isKoopaVs3(const Koopa*);
void* getKoopaPlanetShadow(Koopa*);
LiveActor* getKoopaPowerUpSwitch(Koopa*);
TVec3f* getPlanetCenterPos(const Koopa*);
}; // namespace KoopaFunction
17 changes: 17 additions & 0 deletions include/Game/Boss/KoopaPlanetShadow.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include "Game/Boss/Koopa.hpp"
#include "Game/LiveActor/LiveActor.hpp"
#include "Game/Util/JMapInfo.hpp"
#include "revolution/mtx.h"
class KoopaPlanetShadow : public LiveActor {
public:
KoopaPlanetShadow(const Koopa*);

virtual void init(const JMapInfoIter&);
virtual void calcAndSetBaseMtx();


/* 0x8c */ const Koopa* mParent;
/* 0x90 */ MtxPtr mParentJointMtx;
};
21 changes: 21 additions & 0 deletions include/Game/Boss/KoopaSequencer.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once

#include "Game/Boss/Koopa.hpp"
#include "Game/Boss/KoopaDemoPowerUp.hpp"
#include "Game/System/NerveExecutor.hpp"
#include "Game/Util/JMapInfo.hpp"

class KoopaSequencer : public NerveExecutor {
public:
KoopaSequencer(const char*, s32);

virtual void init(Koopa*, const JMapInfoIter&);

Koopa* mParent;
KoopaDemoPowerUp* mDemoPowerUp;
s32 _10;
s32 _14;
s32 _18;
s32 _1C;
bool _20;
};
49 changes: 49 additions & 0 deletions src/Game/Boss/KoopaDemoJumpToPlanet.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#include "Game/Boss/KoopaDemoJumpToPlanet.hpp"
#include "Game/Boss/Koopa.hpp"
#include "Game/Boss/KoopaFunction.hpp"
#include "Game/LiveActor/Nerve.hpp"
#include "Game/Util/ActorSwitchUtil.hpp"
#include "Game/Util/LiveActorUtil.hpp"
#include "Game/Util/NerveUtil.hpp"
#include "Game/Util/PlayerUtil.hpp"

namespace NrvKoopaDemoJumpToPlanet {
NEW_NERVE(KoopaDemoJumpToPlanetNrvStart, KoopaDemoJumpToPlanet, Start);
NEW_NERVE(KoopaDemoJumpToPlanetNrvFall, KoopaDemoJumpToPlanet, Fall);
}

KoopaDemoJumpToPlanet::KoopaDemoJumpToPlanet(Koopa* pKoopa) : NerveExecutor("Demo[惑星までジャンプ]"), mParent(pKoopa) {}

void KoopaDemoJumpToPlanet::init() {
KoopaFunction::initKoopaCamera(mParent, "ウェイト(惑星までジャンプ)");
KoopaFunction::initKoopaCamera(mParent, "落下(惑星までジャンプ)");
KoopaFunction::initKoopaCamera(mParent, "ワープ後(惑星までジャンプ)");
initNerve(&NrvKoopaDemoJumpToPlanet::KoopaDemoJumpToPlanetNrvStart::sInstance);
}

void KoopaDemoJumpToPlanet::kill() {
_8 = true;
KoopaFunction::endKoopaCamera(mParent, "ウェイト(惑星までジャンプ)", false, -1);
KoopaFunction::endKoopaCamera(mParent, "落下(惑星までジャンプ)", false, -1);
KoopaFunction::endKoopaCamera(mParent, "ワープ後(惑星までジャンプ)", false, -1);
}

void KoopaDemoJumpToPlanet::startReady() {
MR::onSwitchB(mParent);
}

void KoopaDemoJumpToPlanet::exeStart() {
if(MR::isFirstStep(this)) {
return;
}
KoopaFunction::setKoopaPos(mParent, "戦闘開始(クッパ)");
MR::setPlayerPosAndWait("戦闘開始(マリオ)");
KoopaFunction::startKoopaCamera(mParent, "落下(惑星までジャンプ)");
MR::startAction(mParent, "JumpSoon");
KoopaFunction::startFaceCtrl(mParent);
setNerve(&NrvKoopaDemoJumpToPlanet::KoopaDemoJumpToPlanetNrvFall::sInstance);
}

void KoopaDemoJumpToPlanet::exeFall() {

}
81 changes: 81 additions & 0 deletions src/Game/Boss/KoopaDemoPowerUp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#include "Game/Boss/KoopaDemoPowerUp.hpp"
#include "Game/Boss/KoopaFunction.hpp"
namespace NrvKoopaDemoPowerUp {
NEW_NERVE(KoopaDemoPowerUpNrvWaitDemo, KoopaDemoPowerUp, WaitDemo);
NEW_NERVE(KoopaDemoPowerUpNrvDemo, KoopaDemoPowerUp, Demo);
} // namespace NrvKoopaDemoPowerUp

KoopaDemoPowerUp::KoopaDemoPowerUp(Koopa* pKoopa) : NerveExecutor("Demo[パワーアップ]"), mParent(pKoopa) {}

void KoopaDemoPowerUp::init() {
KoopaFunction::initKoopaCamera(mParent, "パワーアップデモ");
KoopaFunction::initKoopaCamera(mParent, "最終パワーアップデモ");
MR::createCenterScreenBlur();
initNerve(&NrvKoopaDemoPowerUp::KoopaDemoPowerUpNrvWaitDemo::sInstance);
}

void KoopaDemoPowerUp::appear() {
_8 = false;
setNerve(&NrvKoopaDemoPowerUp::KoopaDemoPowerUpNrvWaitDemo::sInstance);
}

void KoopaDemoPowerUp::kill() {
_8 = true;
KoopaFunction::endKoopaCamera(mParent, "パワーアップデモ", false, -1);
KoopaFunction::endKoopaCamera(mParent, "最終パワーアップデモ", false, -1);
}

void KoopaDemoPowerUp::exeWaitDemo() {
bool v1 = MR::tryStartDemoMarioPuppetable(mParent, "パワーアップデモ");
if (!v1) {
return;
}
if (KoopaFunction::isKoopaVs1(mParent) || KoopaFunction::isKoopaVs2(mParent)) {
KoopaFunction::setKoopaPos(mParent, "パワーアップデモ(クッパ)");
MR::setPlayerPosAndWait("パワーアップデモ(マリオ)");
if (KoopaFunction::isKoopaLv3(mParent)) {
MR::startAction(mParent, "DemoKoopaPowerUpFinal");
KoopaFunction::startKoopaTargetCamera(mParent, "最終パワーアップデモ");
MR::onSwitchB(KoopaFunction::getKoopaPowerUpSwitch(mParent));
} else {
MR::startAction(mParent, "DemoKoopaPowerUp");
KoopaFunction::startKoopaTargetCamera(mParent, "パワーアップデモ");
MR::onSwitchA(KoopaFunction::getKoopaPowerUpSwitch(mParent));
}
} else {
KoopaFunction::setKoopaPos(mParent, "パワーアップデモLv3(クッパ)");
MR::setPlayerPosAndWait("パワーアップデモLv3(マリオ)");
MR::startAction(mParent, "DemoKoopaPowerUpFinal");
KoopaFunction::startKoopaTargetCamera(mParent, "最終パワーアップデモ");
MR::onSwitchA(KoopaFunction::getKoopaPowerUpSwitch(mParent));
}
MR::startBckPlayer("BattleWait", static_cast< const char* >(nullptr));
KoopaFunction::startRecoverKoopaArmor(mParent);
KoopaFunction::startRecoverKoopaTailThorn(mParent);
KoopaFunction::endFaceCtrl(mParent, -1);
setNerve(&NrvKoopaDemoPowerUp::KoopaDemoPowerUpNrvDemo::sInstance);
}

void KoopaDemoPowerUp::exeDemo() {
if (KoopaFunction::isKoopaLv3(mParent)) {
if (MR::isStep(this, 2)) {
MR::startCenterScreenBlur(140, 15.0f, 80, 5, 30);
}
} else {
if (MR::isStep(this, 65)) {
MR::startCenterScreenBlur(135, 15.0f, 80, 5, 30);
}
}
if (MR::isActionEnd(mParent)) {
if (KoopaFunction::isKoopaVs3(mParent) || KoopaFunction::isKoopaLv3(mParent)) {
KoopaFunction::endKoopaCamera(mParent, "最終パワーアップデモ", false, -1);
} else {
KoopaFunction::endKoopaCamera(mParent, "パワーアップデモ", false, -1);
}
MR::endDemo(mParent, "パワーアップデモ");
}
TVec3f v1 = mParent->mGravity.negateInline();
MR::appearStarPieceToDirection(mParent, mParent->mPosition, v1, 10, 50.0f, 60.0f, false);
MR::startSound(mParent, "SE_OJ_STAR_PIECE_BURST", -1, -1);
kill();
}
39 changes: 39 additions & 0 deletions src/Game/Boss/KoopaPlanetShadow.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include "Game/Boss/KoopaPlanetShadow.hpp"
#include "Game/Boss/KoopaFunction.hpp"
#include "Game/LiveActor/LiveActor.hpp"
#include "Game/Util/JMapInfo.hpp"
#include "Game/Util/JointUtil.hpp"
#include "Game/Util/LiveActorUtil.hpp"
#include "Game/Util/MathUtil.hpp"
#include "Game/Util/MtxUtil.hpp"
#include "Game/Util/ObjUtil.hpp"
#include "JSystem/JGeometry/TMatrix.hpp"
#include "JSystem/JGeometry/TVec.hpp"

#include <cstddef>

KoopaPlanetShadow::KoopaPlanetShadow(const Koopa* pKoopa) : LiveActor("惑星用の影"), mParent(pKoopa), mParentJointMtx(nullptr){};

void KoopaPlanetShadow::init(const JMapInfoIter& pIter) {
initModelManagerWithAnm("KoopaPlanetShadow", nullptr, false);
MR::connectToSceneEnemyDecoration(this);
MR::invalidateClipping(this);
mParentJointMtx = MR::getJointMtx(mParent, "Hip1");
makeActorDead();
}

void KoopaPlanetShadow::calcAndSetBaseMtx() {
TVec3f v1(mParentJointMtx[0][3], mParentJointMtx[1][3], mParentJointMtx[2][3]);
TVec3f* centerPos = KoopaFunction::getPlanetCenterPos(mParent);
TVec3f v2(v1 - *centerPos);

if (MR::isNearZero(v2, 0.001f)) {
return;
}

MR::normalize(&v2);
TPos3f v3;
v3.identity();
MR::makeMtxUpFrontPos(&v3, v2, mParent->_8C, *centerPos);
MR::setBaseTRMtx(this, v3);
}
15 changes: 15 additions & 0 deletions src/Game/Boss/KoopaSequencer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "Game/Boss/KoopaSequencer.hpp"
#include "Game/Boss/Koopa.hpp"
#include "Game/Boss/KoopaDemoPowerUp.hpp"
#include "Game/System/NerveExecutor.hpp"
#include "Game/Util/JMapInfo.hpp"
#include "revolution/types.h"

KoopaSequencer::KoopaSequencer(const char* pName, s32 pNum)
: NerveExecutor(pName), mParent(nullptr), mDemoPowerUp(nullptr), _10(0), _14(0), _18(1), _1C(pNum), _20(false) {}

void KoopaSequencer::init(Koopa* pParent, const JMapInfoIter& pIter) {
mParent = pParent;
mDemoPowerUp = new KoopaDemoPowerUp(mParent);
mParent->init(pIter);
}