SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
SkeletalFishBossBattleDirector.cpp
1#include "Game/Boss/SkeletalFishBossBattleDirector.hpp"
2#include "Game/Boss/SkeletalFishBoss.hpp"
3#include "Game/LiveActor/LiveActorGroup.hpp"
4#include "Game/MapObj/SubmarineVolcanoBigColumn.hpp"
5#include "Game/Map/CollisionParts.hpp"
6#include "Game/Map/HitInfo.hpp"
7#include <cstdio>
8
9SkeletalFishBossBattleDirector::SkeletalFishBossBattleDirector(SkeletalFishBoss *pBoss) : NameObj("スカルシャークボス戦指揮") {
10 mFishBoss = pBoss;
11 _90 = 0;
12 _D4 = 0;
13 MR::connectToSceneEnemyMovement(this);
14
15 for (s32 i = 0; i < 0x20; i++) {
16 mColumns[i] = nullptr;
17 }
18
19 for (s32 i = 0; i < 4; i++) {
20 ModelObj* guardMdl = new ModelObj("デモ用スカルシャークガード", "SkeletalFishGuard", nullptr, 18, -2, -2, false);
21 mGuardModels[i] = guardMdl;
22 mGuardModels[i]->initWithoutIter();
23 MR::initLightCtrl(mGuardModels[i]);
24 MR::invalidateClipping(mGuardModels[i]);
25 mGuardModels[i]->makeActorDead();
26 }
27}
28
29void SkeletalFishBossBattleDirector::initiate() {
30 LiveActorGroup* grp = MR::getGroupFromArray(mFishBoss);
31
32 for (s32 i = 0; i < grp->mObjectCount; i++) {
33 if (!strcmp(grp->getActor(i)->mName, "海底火山巨大石柱") || (!strcmp(grp->getActor(i)->mName, "海底火山石柱(小)"))) {
34 mColumns[_90] = static_cast<SubmarineVolcanoBigColumn*>(grp->getActor(i));
35 _90++;
36 }
37
38 if (strcmp(grp->getActor(i)->mName, "羽虫S")) {
39 if (strcmp(grp->getActor(i)->mName, "羽虫L")) {
40 continue;
41 }
42 }
43
44 _94[_D4] = grp->getActor(i);
45 MR::invalidateClipping(_94[_D4]);
46 _D4++;
47 }
48
49 killBirdLouse();
50}
51
52void SkeletalFishBossBattleDirector::startPowerUpDemo1() {
53 playGuardAnim("PowerUp1", 2);
54}
55
56void SkeletalFishBossBattleDirector::startPowerUpDemo2() {
57 playGuardAnim("PowerUp2", 4);
58}
59
60void SkeletalFishBossBattleDirector::playGuardAnim(const char *pAnimName, s32 numGuards) {
61 for (s32 i = 0; i < numGuards; i++) {
62 char buf[0x80];
63 snprintf(buf, sizeof(buf), "%s%c", pAnimName, i + 0x41);
64 mGuardModels[i]->makeActorAppeared();
65 MR::requestMovementOn(mGuardModels[i]);
66 MR::startBck(mGuardModels[i], buf, nullptr);
67 MR::startSound(mGuardModels[i], "SE_BM_SKL_GUARD_APPEAR", -1, -1);
68 }
69}
70
71void SkeletalFishBossBattleDirector::movement() {
72
73}
74
75void SkeletalFishBossBattleDirector::tryColumnCollision(HitSensor *pSensor) {
76 for (s32 i = 0; i < _90; i++) {
77 CollisionParts* parts = MR::getCollisionParts(mColumns[i]);
78
79 if (parts != nullptr) {
80 HitInfo hitInfo;
81 if (parts->checkStrikeBall(&hitInfo, 1, pSensor->mPosition, pSensor->mRadius, false, nullptr)) {
82 if (hitInfo.mParentTriangle.mSensor != nullptr) {
83 MR::sendMsgEnemyAttack(hitInfo.mParentTriangle.mSensor, pSensor);
84 return;
85 }
86 }
87 }
88 }
89}
90
91void SkeletalFishBossBattleDirector::pauseOffCast() {
92 LiveActorGroup* group = MR::getGroupFromArray(mFishBoss);
93
94 for (s32 i = 0; i < group->mObjectCount; i++) {
95 MR::requestMovementOn(group->getActor(i));
96 if (MR::isExistEffectKeeper(group->getActor(i))) {
97 MR::pauseOffEffectAll(group->getActor(i));
98 }
99 }
100
101 for (s32 i = 0; i < _90; i++) {
102 mColumns[i]->pauseOff();
103 }
104}
105
106void SkeletalFishBossBattleDirector::endPowerUpDemo1() {
107 killGuard();
108}
109
110void SkeletalFishBossBattleDirector::endPowerUpDemo2() {
111 killGuard();
112}
113
114void SkeletalFishBossBattleDirector::killGuard() {
115 for (s32 i = 0; i < 4; i++) {
116 mGuardModels[i]->makeActorDead();
117 }
118}
119
120void SkeletalFishBossBattleDirector::appearBirdLouse() {
121 for (s32 i = 0; i < _D4; i++) {
122 _94[i]->endClipped();
123 }
124}
125
126void SkeletalFishBossBattleDirector::killBirdLouse() {
127 for (s32 i = 0; i < _D4; i++) {
128 _94[i]->startClipped();
129 }
130}
131
132SkeletalFishBossBattleDirector::~SkeletalFishBossBattleDirector() {
133
134}
The most basic form of an object.
Definition NameObj.hpp:11
void initWithoutIter()
Initializes a NameObj without a JMapInfoIter instance.
Definition NameObj.cpp:41
const char * mName
A string to identify the NameObj.
Definition NameObj.hpp:38