SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
RestartCube.cpp
1#include "Game/AreaObj/RestartCube.hpp"
2#include "Game/AudioLib/AudWrap.hpp"
3#include "Game/System/GameDataTemporaryInGalaxy.hpp"
4#include "Game/GameAudio/AudStageBgmTable.hpp"
5
6RestartCube::RestartCube(int type, const char *pName) : AreaObj(type, pName) {
7 mIdInfo = nullptr;
8 _40 = -1;
9 _44 = -1;
10 _48 = false;
11}
12
13RestartCube::~RestartCube() {
14
15}
16
17void RestartCube::init(const JMapInfoIter &rIter) {
18 AreaObj::init(rIter);
19 mIdInfo = new JMapIdInfo(mObjArg0, rIter);
20 _40 = mObjArg1;
21 _44 = mObjArg2;
22 _48 = false;
23}
24
25void RestartCube::updatePlayerRestartIdInfo() {
26 if (mObjArg3 == -1 || MR::isOnGroundPlayer()) {
27 MR::setPlayerRestartIdInfo(*mIdInfo);
28
29 if (!_48 && !MR::isCubeBgmChangeInvalid() && _40 >= 0) {
30 changeBgm();
31 }
32 }
33}
34
35void RestartCube::changeBgm() {
36 if (MR::isPowerStarGetDemoActive()) {
37 _48 = true;
38 return;
39 }
40
41 if (MR::isPlayingStageBgmID(0x2000014)) {
42 _48 = true;
43 return;
44 }
45
46 if (MR::isPlayingStageBgmID(0x200003E)) {
47 _48 = 1;
48 return;
49 }
50
51 if (MR::isPlayerDead()) {
52 _48 = 1;
53 return;
54 }
55
56 if (!MR::isPlayingStageBgmID(0x2000039)) {
57 u32 bgmID = AudStageBgmTable::getBgmId(MR::getCurrentStageName(), _40);
58
59 if (bgmID + 0x10000 != 0xFFFF) {
60 u32 val = AudWrap::getBgmMgr()->_10;
61 if (val == bgmID && MR::isPlayingStageBgm()) {
62 return;
63 }
64
65 AudWrap::startStageBgm(bgmID, false);
66
67 if (MR::isEqualStageName("ReverseKingdomGalaxy") && bgmID == 0x1010012) {
68 MR::setCubeBgmChangeInvalid();
69 }
70
71 if (MR::isEqualStageName("CannonFleetGalaxy") && bgmID == 0x1010002) {
72 MR::setCubeBgmChangeInvalid();
73 }
74
75 if (MR::isEqualStageName("BattleShipGalaxy") && bgmID == 0x1010002) {
76 MR::setCubeBgmChangeInvalid();
77 }
78 }
79
80 if (_44 >= 0) {
81 s32 state = AudStageBgmTable::getBgmState(MR::getCurrentStageName(), _44);
82
83 if (state >= 0) {
84 AudBgm* bgm = AudWrap::getStageBgm();
85
86 if (bgm) {
87 bgm->changeTrackMuteState(state, 0);
88 }
89 }
90 }
91 }
92}
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition AreaObj.cpp:41
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.