diff --git a/docs/recommended_todo.md b/docs/recommended_todo.md
index 55681c2f3..fdd319875 100644
--- a/docs/recommended_todo.md
+++ b/docs/recommended_todo.md
@@ -90,7 +90,7 @@
| aiTeki.cpp | 5858 | pelletNumber.cpp | 6199 |
| gamePelletList.cpp | 8282 | mapMgrTraceMove.cpp | 9030 |
| cellIterator.cpp | 9434 | itemHole.cpp | 11676 |
-| itemBigFountain.cpp | 12679 | itemHoney.cpp | 12872 |
+| itemHoney.cpp | 12300 | itemBigFountain.cpp | 12679 |
| aiRescue.cpp | 13908 | texCaster.cpp | 13913 |
| aiBreakGate.cpp | 13918 | creatureLOD.cpp | 14136 |
| flockMgr.cpp | 14542 | naviWhistle.cpp | 16714 |
diff --git a/include/PSAutoBgm/AutoBgm.h b/include/PSAutoBgm/AutoBgm.h
index e36eb504f..6c47afcf0 100644
--- a/include/PSAutoBgm/AutoBgm.h
+++ b/include/PSAutoBgm/AutoBgm.h
@@ -4,10 +4,7 @@
#include "PSSystem/SeqTrack.h"
#include "types.h"
#include "PSSystem/PSBgm.h"
-#include "PSSystem/Seq.h"
#include "PSSystem/PSBgmTask.h"
-#include "JSystem/JAudio/JAI/JAInter.h"
-#include "JSystem/JAudio/JAD/JADUtility.h"
#include "PSAutoBgm/Conductor.h"
#include "PSAutoBgm/MeloArr.h"
@@ -30,16 +27,27 @@ struct AutoBgm : public PSSystem::DirectedBgm {
void loadConductor(PSSystem::TaskChecker*);
void loadedCallback(u32, u32);
+ void setPikiMaskNum(u8* cond)
+ {
+ int num = 0;
+ for (int i = 0; i < 16; i++) {
+ if (cond[i]) {
+ num++;
+ }
+ }
+ mPikiMaskNum = num;
+ }
+
// _00-_10 = JSULink
// _10 = VTABLE
// _14-_B8 = DirectedBgm
ConductorMgr _B8; // _B8
u8 _328[0x8]; // _328 - unknown
- char* _330; // _330 - cnd file name?
+ char* mConductorFilePath; // _330 (.cnd)
PSSystem::TaskChecker* _334; // _334
u8* _338; // _338 - str?
MeloArrMgr _33C; // _33C
- u16 _34C; // _34C - unknown
+ u16 mPikiMaskNum; // _34C - unknown
u8 _34E; // _34E - unknown
u8 _34F; // _34F - might be padding
};
diff --git a/include/PSGame/PikScene.h b/include/PSGame/PikScene.h
index 63438df0e..f133392d7 100644
--- a/include/PSGame/PikScene.h
+++ b/include/PSGame/PikScene.h
@@ -3,7 +3,7 @@
#include "types.h"
#include "PSSystem/PSScene.h"
-#include "PSSystem/Director.h"
+#include "PSSystem/PSSeq.h"
#include "PSSystem/PSBgm.h"
#include "PSGame/SceneInfo.h"
#include "JSystem/JAudio/JAI/JAInter.h"
@@ -43,7 +43,7 @@ struct PikSceneMgr : public PSSystem::SceneMgr {
virtual void newAutoBgm(const char*, const char*, JAInter::SoundInfo&, JADUtility::AccessMode, SceneInfo&,
PSSystem::DirectorMgrBase*)
= 0; // _1C
- virtual void curSceneIsBigBossFloor(); // _20 (weak)
+ virtual bool curSceneIsBigBossFloor(); // _20 (weak)
virtual void newGameScene(u8, SceneInfo*) = 0; // _24
PSSystem::BgmSeq* newBgmSeq(const char*, JAInter::SoundInfo&);
diff --git a/include/PSM/BgmTrackMap.h b/include/PSM/BgmTrackMap.h
index 747a45879..29496f1eb 100644
--- a/include/PSM/BgmTrackMap.h
+++ b/include/PSM/BgmTrackMap.h
@@ -23,6 +23,28 @@ struct BgmTrackMap {
strcpy(mFileName, "");
};
+ inline int getPikNum()
+ {
+ int num = 0;
+ for (int i = 0; i < 16; i++) {
+ if (mPikNum[i]) {
+ num++;
+ }
+ }
+ return num;
+ }
+
+ inline int getPikMaskNum()
+ {
+ int num = 0;
+ for (int i = 0; i < 8; i++) {
+ if (mPikMask[i]) {
+ num++;
+ }
+ }
+ return num;
+ }
+
char mFileName[32]; // _00
u8 mBasicTrackCount; // _20
u8 mEventTrackCount; // _21
@@ -34,13 +56,13 @@ struct BgmTrackMap {
u8 mPikMask[8]; // _36
};
-struct BgmTrackMapFile : public PSSystem::TextDataBase, public PSSystem::SingletonBase {
+struct BgmTrackMapFile : public ::PSSystem::TextDataBase, public ::PSSystem::SingletonBase {
BgmTrackMapFile(bool flag);
virtual ~BgmTrackMapFile() { } // _08 (weak)
virtual bool read(Stream& input); // _0C
- void readTrackMap(const char*);
+ BgmTrackMap readTrackMap(const char*);
// _00 = VTBL 1
// _1C = VTBL 2
diff --git a/include/PSM/BossBgmFader.h b/include/PSM/BossBgmFader.h
index 5a760cdb7..2b75a2c44 100644
--- a/include/PSM/BossBgmFader.h
+++ b/include/PSM/BossBgmFader.h
@@ -24,18 +24,18 @@ struct TypedProc {
void getBossFadeVolume();
// _00 VTBL
- f32 _04; // _04
- f32 _08; // _08
- f32 _0C; // _0C
- f32 _10; // _10
- u32 _14; // _14, unknown
- u32 _18; // _18, unknown
- u32 _1C; // _1C, unknown
- u32 _20; // _20
- PSM::DirectorUpdator* mDirectorUpdator; // _24
- u8 _28; // _28
- u8 _29[0x3]; // _29, unknown/padding
- f32 _2C; // _2C
+ f32 _04; // _04
+ f32 _08; // _08
+ f32 _0C; // _0C
+ f32 _10; // _10
+ u32 _14; // _14, unknown
+ u32 _18; // _18, unknown
+ u32 _1C; // _1C, unknown
+ u32 _20; // _20
+ DirectorUpdator* mDirectorUpdator; // _24
+ u8 _28; // _28
+ u8 _29[0x3]; // _29, unknown/padding
+ f32 _2C; // _2C
};
/**
@@ -51,23 +51,30 @@ struct TypedProc_MidBoss : public TypedProc {
// _00 = VTBL
// _00-_30 = TypedProc
- PSM::DirectorUpdator* _30; // _30
+ DirectorUpdator* mBossUpdator; // _30
};
/**
* @size{0x44}
*/
-struct Mgr : PSSystem::SingletonBase {
+struct Mgr : ::PSSystem::SingletonBase {
Mgr();
virtual ~Mgr(); // _08 (weak)
- void appendTarget(JSULink*);
+ void appendTarget(JSULink*);
void exec();
+ inline void setUpdator(::PSSystem::DirectorBase* director)
+ {
+ if (mEnemyBossList.mLinkCount) {
+ mTypedProc.mBossUpdator = new DirectorUpdator(director, mEnemyBossList.mLinkCount, DirectorUpdator::TYPE_0);
+ }
+ }
+
// _00 VTBL
- JSUList mEnemyBossList; // _04
- TypedProc_MidBoss mTypedProc; // _10
+ JSUList mEnemyBossList; // _04
+ TypedProc_MidBoss mTypedProc; // _10
};
} // namespace BossBgmFader
} // namespace PSM
diff --git a/include/PSM/Director.h b/include/PSM/Director.h
index cc18da23a..975647e79 100644
--- a/include/PSM/Director.h
+++ b/include/PSM/Director.h
@@ -2,7 +2,7 @@
#define _PSM_DIRECTOR_H
#include "Dolphin/os.h"
-#include "PSSystem/Director.h"
+#include "PSSystem/PSSeq.h"
struct JASTrack;
@@ -18,9 +18,9 @@ struct SeqTrackBase;
} // namespace PSSystem
namespace PSM {
-struct OneShotDirector : public PSSystem::OneShotDirector {
+struct OneShotDirector : public ::PSSystem::OneShotDirector {
inline OneShotDirector()
- : PSSystem::OneShotDirector()
+ : ::PSSystem::OneShotDirector()
, mActor(nullptr)
{
}
@@ -29,7 +29,7 @@ struct OneShotDirector : public PSSystem::OneShotDirector {
// _00 = VTBL
// _00-_48 = PSSystem::OneShotDirector
- PSSystem::DirectorCopyActor* mActor; // _48
+ ::PSSystem::DirectorCopyActor* mActor; // _48
};
/**
@@ -38,9 +38,9 @@ struct OneShotDirector : public PSSystem::OneShotDirector {
struct DamageDirector : public OneShotDirector {
DamageDirector();
- virtual ~DamageDirector(); // _08 (weak)
- virtual void execInner(); // _1C
- virtual void directOnTrack(PSSystem::SeqTrackBase&); // _20
+ virtual ~DamageDirector(); // _08 (weak)
+ virtual void execInner(); // _1C
+ virtual void directOnTrack(::PSSystem::SeqTrackBase&); // _20
// _00 = VTBL
// _00-_48 = OneShotDirector
@@ -49,48 +49,48 @@ struct DamageDirector : public OneShotDirector {
u32 _54; // _54
};
-struct SwitcherDirector : public PSSystem::SwitcherDirector {
+struct SwitcherDirector : public ::PSSystem::SwitcherDirector {
inline SwitcherDirector(int p1, const char* p2)
- : PSSystem::SwitcherDirector(p1, p2)
+ : ::PSSystem::SwitcherDirector(p1, p2)
{
}
- virtual ~SwitcherDirector(); // _08 (weak)
+ virtual ~SwitcherDirector() { } // _08 (weak)
// _00 = VTBL
// _00-_48 = PSSystem::SwitcherDirector
};
struct PikminNumberDirector : public SwitcherDirector {
- PikminNumberDirector(int, u8, PSSystem::DirectedBgm&);
+ PikminNumberDirector(int, u8, ::PSSystem::DirectedBgm&);
- virtual ~PikminNumberDirector(); // _08 (weak)
- virtual void execInner(); // _1C
- virtual void directOnTrack(PSSystem::SeqTrackBase&); // _20
- virtual void directOffTrack(PSSystem::SeqTrackBase&); // _24
+ virtual ~PikminNumberDirector(); // _08 (weak)
+ virtual void execInner(); // _1C
+ virtual void directOnTrack(::PSSystem::SeqTrackBase&); // _20
+ virtual void directOffTrack(::PSSystem::SeqTrackBase&); // _24
// _00 = VTBL
// _00-_48 = SwitcherDirector
- PSSystem::DirectorCopyActor* mActor; // _48
- u8 _4C; // _4C
+ ::PSSystem::DirectorCopyActor* mActor; // _48
+ u8 _4C; // _4C
};
/**
* @size{0x54}
*/
struct PikminNumberDirector_AutoBgm : public PikminNumberDirector {
- PikminNumberDirector_AutoBgm(int, u8, PSSystem::DirectedBgm&);
+ PikminNumberDirector_AutoBgm(int, u8, ::PSSystem::DirectedBgm&);
- virtual ~PikminNumberDirector_AutoBgm(); // _08 (weak)
- virtual void directOnTrack(PSSystem::SeqTrackBase&); // _20
- virtual void directOffTrack(PSSystem::SeqTrackBase&); // _24
+ virtual ~PikminNumberDirector_AutoBgm(); // _08 (weak)
+ virtual void directOnTrack(::PSSystem::SeqTrackBase&); // _20
+ virtual void directOffTrack(::PSSystem::SeqTrackBase&); // _24
- void getTrack(PSSystem::SeqTrackBase&);
+ void getTrack(::PSSystem::SeqTrackBase&);
// _00 = VTBL
// _00-_4C = PikminNumberDirector
- u8 _4C; // _4C
- PSSystem::DirectedBgm* mDirectedBgm; // _50
+ u8 _4C; // _4C
+ ::PSSystem::DirectedBgm* mDirectedBgm; // _50
};
struct TempoChangeDirectorBase : public SwitcherDirector {
@@ -101,15 +101,15 @@ struct TempoChangeDirectorBase : public SwitcherDirector {
, mActor(nullptr)
{
}
- virtual ~TempoChangeDirectorBase(); // _08 (weak)
- virtual void directOnTrack(PSSystem::SeqTrackBase&); // _20
- virtual void directOffTrack(PSSystem::SeqTrackBase&); // _24
+ virtual ~TempoChangeDirectorBase(); // _08 (weak)
+ virtual void directOnTrack(::PSSystem::SeqTrackBase&); // _20
+ virtual void directOffTrack(::PSSystem::SeqTrackBase&); // _24
// _00 = VTBL
// _00-_48 = SwitcherDirector
f32 _48;
u32 _4C;
- PSSystem::DirectorCopyActor* mActor;
+ ::PSSystem::DirectorCopyActor* mActor;
};
/**
@@ -129,10 +129,10 @@ struct ActorDirector_TempoChange : public TempoChangeDirectorBase {
struct TrackOnDirectorBase : public SwitcherDirector {
TrackOnDirectorBase(int, const char*, long, long);
- virtual ~TrackOnDirectorBase(); // _08 (weak)
- virtual void directOnTrack(PSSystem::SeqTrackBase&); // _20
- virtual void directOffTrack(PSSystem::SeqTrackBase&); // _24
- virtual void onPlayInit(JASTrack*); // _2C
+ virtual ~TrackOnDirectorBase() { } // _08 (weak)
+ virtual void directOnTrack(::PSSystem::SeqTrackBase&); // _20
+ virtual void directOffTrack(::PSSystem::SeqTrackBase&); // _24
+ virtual void onPlayInit(JASTrack*); // _2C
// _00 = VTBL
// _00-_48 = SwitcherDirector
@@ -147,7 +147,7 @@ struct TrackOnDirectorBase : public SwitcherDirector {
struct PikAttackDirector : public TrackOnDirectorBase {
PikAttackDirector(int);
- virtual ~PikAttackDirector(); // _08 (weak)
+ virtual ~PikAttackDirector() { } // _08 (weak)
// _00 = VTBL
// _00-_54 = TrackOnDirectorBase
@@ -170,19 +170,23 @@ struct TrackOnDirector_Scaled : public TrackOnDirectorBase {
// _00 = VTBL
// _00-_54 = TrackOnDirectorBase
- f32 _54; // _54
- f32 _58; // _58
- f32 _5C; // _5C
- u32 _60; // _60
- PSSystem::DirectorCopyActor* mActor; // _64
+ f32 _54; // _54
+ f32 _58; // _58
+ f32 _5C; // _5C
+ u32 _60; // _60
+ ::PSSystem::DirectorCopyActor* mActor; // _64
};
/**
* @size{0x58}
*/
struct TrackOnDirector_Voting : public TrackOnDirectorBase {
- virtual ~TrackOnDirector_Voting(); // _08 (weak)
- virtual void execInner(); // _1C
+ TrackOnDirector_Voting(int track, const char* name, int p1, int p2)
+ : TrackOnDirectorBase(track, name, p1, p2)
+ {
+ }
+ virtual ~TrackOnDirector_Voting() { } // _08 (weak)
+ virtual void execInner(); // _1C
// _00 = VTBL
// _00-_54 = TrackOnDirectorBase
@@ -195,7 +199,7 @@ struct TrackOnDirector_Voting : public TrackOnDirectorBase {
struct ExiteDirector : public TrackOnDirectorBase {
ExiteDirector(int);
- virtual ~ExiteDirector(); // _08 (weak)
+ virtual ~ExiteDirector() { } // _08 (weak)
// _00 = VTBL
// _00-_54 = TrackOnDirectorBase
@@ -207,21 +211,26 @@ struct ExiteDirector : public TrackOnDirectorBase {
struct ActorDirector_TrackOn : public TrackOnDirectorBase {
ActorDirector_TrackOn(const char*, int, long, long);
- virtual ~ActorDirector_TrackOn(); // _08 (weak)
- virtual void execInner(); // _1C
+ virtual ~ActorDirector_TrackOn() { } // _08 (weak)
+ virtual void execInner(); // _1C
// _00 = VTBL
// _00-_54 = TrackOnDirectorBase
- PSSystem::DirectorCopyActor* mActor; // _54
+ ::PSSystem::DirectorCopyActor* mActor; // _54
};
/**
* @size{0x58}
*/
struct GroundDirector_Cave : public ActorDirector_TrackOn {
- virtual ~GroundDirector_Cave(); // _08 (weak)
- virtual void directOn(); // _10 (weak)
- virtual void directOff(); // _14 (weak)
+ GroundDirector_Cave(const char* name, int tracks, long a1, long a2)
+ : ActorDirector_TrackOn(name, tracks, a1, a2)
+ {
+ }
+
+ virtual ~GroundDirector_Cave() { } // _08 (weak)
+ virtual void directOn() { } // _10 (weak)
+ virtual void directOff() { } // _14 (weak)
// _00 = VTBL
// _00-_58 = ActorDirector_TrackOn
@@ -263,6 +272,11 @@ struct ActorDirector_Enemy : public ActorDirector_Scaled {
* @size{0x6C}
*/
struct ActorDirector_Battle : public ActorDirector_Enemy {
+ ActorDirector_Battle(const char* name, int tracks, long a1, long a2, u32 a3)
+ : ActorDirector_Enemy(name, tracks, a1, a2, a3)
+ {
+ }
+
virtual ~ActorDirector_Battle(); // _08 (weak)
virtual f64 getVolZeroDist(Game::EnemyBase*); // _40
virtual f64 getVolMaxDist(Game::EnemyBase*); // _44
@@ -275,6 +289,11 @@ struct ActorDirector_Battle : public ActorDirector_Enemy {
* @size{0x6C}
*/
struct ActorDirector_Kehai : public ActorDirector_Enemy {
+ ActorDirector_Kehai(const char* name, int tracks, long a1, long a2, u32 a3)
+ : ActorDirector_Enemy(name, tracks, a1, a2, a3)
+ {
+ }
+
virtual ~ActorDirector_Kehai(); // _08 (weak)
virtual f64 getVolZeroDist(Game::EnemyBase*); // _40
virtual f64 getVolMaxDist(Game::EnemyBase*); // _44
@@ -289,24 +308,29 @@ struct ActorDirector_Kehai : public ActorDirector_Enemy {
struct DirectorUpdator {
enum Type { TYPE_0 };
- DirectorUpdator(PSSystem::DirectorBase*, u8, Type);
+ DirectorUpdator(::PSSystem::DirectorBase*, u8, Type);
void directOn(u8);
void directOff(u8);
void frameEndWork();
- u8 _00; // _00
- Type mType; // _04
- u8 _08; // _08
- u8 _09; // _09
- PSSystem::DirectorBase* mDirector; // _0C
+ u8 _00; // _00
+ Type mType; // _04
+ u8 _08; // _08
+ u8 _09; // _09
+ ::PSSystem::DirectorBase* mDirector; // _0C
};
-struct ListDirectorActor : public PSSystem::DirectorCopyActor {
+struct ListDirectorActor : public ::PSSystem::DirectorCopyActor {
+ ListDirectorActor()
+ : ::PSSystem::DirectorCopyActor(nullptr, nullptr)
+ {
+ }
virtual void onUpdateFromMasterD(); // _0C
// _00 = VTBL
// _00-_0C = PSSystem::DirectorCopyActor
+ JSUPtrList mPtrList; // _0C
};
} // namespace PSM
diff --git a/include/PSM/DirectorMgr.h b/include/PSM/DirectorMgr.h
index cc9cefd50..4548a5662 100644
--- a/include/PSM/DirectorMgr.h
+++ b/include/PSM/DirectorMgr.h
@@ -2,47 +2,57 @@
#define _PSM_DIRECTORMGR_H
#include "types.h"
-#include "PSSystem/Director.h"
+#include "PSSystem/PSSeq.h"
#include "PSM/Director.h"
#include "PSM/BgmTrackMap.h"
namespace PSM {
-struct DirectorMgr_Scene : public PSSystem::DirectorMgrBase, public JKRDisposer {
+struct DirectorMgr_Scene : public ::PSSystem::DirectorMgrBase, public JKRDisposer {
+
+ enum DirectorType {
+ Director_Working = 0,
+ Director_Treasure = 1,
+ Director_EnemyNear = 2,
+ Director_Battle = 3,
+ Director_Ground = 4, // aka spiderworts
+ Director_Pikmin = 5, // missing notes when pikmin die
+ Director_Damage = 6, // distortion when getting hit
+ Director_Tempo = 7, // slow music when low health
+ };
+
DirectorMgr_Scene(DirectorMgr_Scene*, u8);
- virtual ~DirectorMgr_Scene(); // _08 (weak)
- virtual void newDirector(u8, PSSystem::DirectedBgm&); // _0C
- virtual void isSlave(); // _1C (weak)
- virtual void newPikminNumberDirector(int, u8, PSSystem::DirectedBgm&); // _20
+ virtual ~DirectorMgr_Scene(); // _08 (weak)
+ virtual ::PSSystem::DirectorBase* newDirector(u8, ::PSSystem::DirectedBgm&); // _0C
+ virtual bool isSlave() { return mOwner; } // _1C (weak)
+ virtual PikminNumberDirector* newPikminNumberDirector(int, u8, ::PSSystem::DirectedBgm&); // _20
- void initTrackMap(PSSystem::DirectedBgm&);
- void adaptDirectorActor(PSSystem::DirectorBase*, u8);
+ void initTrackMap(::PSSystem::DirectedBgm&);
+ void adaptDirectorActor(::PSSystem::DirectorBase*, u8);
// _00 = VTBL 1 (DirectorMgrBase)
// _0C = VTBL 2 (JKRDisposer + Self)
// _00-_0C = PSSystem::DirectorMgrBase
// _0C-_24 = JKRDisposer
- PSSystem::DirectorCopyActor* _24[4]; // _24
- ListDirectorActor* mListDirectorActor; // _34
- PSSystem::DirectorCopyActor* _38[3]; // _38
- DirectorMgr_Scene* mOwner; // _44
- BgmTrackMap mBgmTrackMap; // _48
+ ::PSSystem::DirectorCopyActor* mCopyActorList[8]; // _24
+ DirectorMgr_Scene* mOwner; // _44
+ BgmTrackMap mBgmTrackMap; // _48
};
struct DirectorMgr_Scene_AutoBgm : public DirectorMgr_Scene {
- virtual ~DirectorMgr_Scene_AutoBgm(); // _08 (weak)
- virtual void newPikminNumberDirector(int, u8, PSSystem::DirectedBgm&); // _20
+ virtual ~DirectorMgr_Scene_AutoBgm() { } // _08 (weak)
+ virtual PikminNumberDirector* newPikminNumberDirector(int, u8, ::PSSystem::DirectedBgm&); // _20
// _00 = VTBL 1
// _0C = VTBL 2
// _00-_88 = DirectorMgr_Scene
};
-struct DirectorMgr_Battle : public PSSystem::DirectorMgrBase, public JKRDisposer {
+struct DirectorMgr_Battle : public ::PSSystem::DirectorMgrBase, public JKRDisposer {
DirectorMgr_Battle();
- virtual ~DirectorMgr_Battle(); // _08 (weak)
- virtual void newDirector(u8, PSSystem::DirectedBgm&); // _0C
+ virtual ~DirectorMgr_Battle() { } // _08 (weak)
+ virtual ::PSSystem::DirectorBase* newDirector(u8, ::PSSystem::DirectedBgm&); // _0C
// _00 = VTBL 1 (DirectorMgrBase)
// _0C = VTBL 2 (JKRDisposer + Self)
@@ -50,11 +60,23 @@ struct DirectorMgr_Battle : public PSSystem::DirectorMgrBase, public JKRDisposer
// _0C-_24 = JKRDisposer
};
-struct DirectorMgr_2PBattle : public PSSystem::DirectorMgrBase, public JKRDisposer {
+struct DirectorMgr_2PBattle : public ::PSSystem::DirectorMgrBase, public JKRDisposer {
+
+ enum DirectorType {
+ Director2P_Working = 0,
+ Director2P_EnemyNear = 1,
+ Director2P_Battle = 2,
+ Director2P_OlimarMarble = 3,
+ Director2P_LouieMarble = 4,
+ Director2P_OlimarIchou = 5,
+ Director2P_LouieIchou = 6,
+ Director2P_PikBattle = 7,
+ };
+
DirectorMgr_2PBattle();
- virtual ~DirectorMgr_2PBattle(); // _08 (weak)
- virtual void newDirector(u8, PSSystem::DirectedBgm&); // _0C
+ virtual ~DirectorMgr_2PBattle() { } // _08 (weak)
+ virtual ::PSSystem::DirectorBase* newDirector(u8, ::PSSystem::DirectedBgm&); // _0C
// _00 = VTBL 1 (DirectorMgrBase)
// _0C = VTBL 2 (JKRDisposer + Self)
diff --git a/include/PSM/Scene.h b/include/PSM/Scene.h
index 558a7cb96..80dd2bf07 100644
--- a/include/PSM/Scene.h
+++ b/include/PSM/Scene.h
@@ -52,7 +52,7 @@ struct SceneMgr : public PSGame::PikSceneMgr {
virtual void newDirectedBgm(const char*, JAInter::SoundInfo&); // _18
virtual void newAutoBgm(const char*, const char*, JAInter::SoundInfo&, JADUtility::AccessMode, PSGame::SceneInfo&,
PSSystem::DirectorMgrBase*); // _1C
- virtual void curSceneIsBigBossFloor(); // _20
+ virtual bool curSceneIsBigBossFloor(); // _20
virtual void newGameScene(u8, PSGame::SceneInfo*); // _24
void initEnvironmentSe(Scene_Game*);
diff --git a/include/PSSystem/PSBgm.h b/include/PSSystem/PSBgm.h
index 390a3e331..dba5ba6e7 100644
--- a/include/PSSystem/PSBgm.h
+++ b/include/PSSystem/PSBgm.h
@@ -34,6 +34,14 @@ struct BgmSeq : public SeqBase {
* @size = 0xB8
*/
struct DirectedBgm : public BgmSeq {
+
+ enum CastType {
+ BgmType_NULL = 0,
+ BgmType_Battle = 2,
+ BgmType_Cave = 3,
+ BgmType_2PBattle = 8,
+ };
+
DirectedBgm(const char* bmsFileName, const JAInter::SoundInfo& info, DirectorMgrBase* directorMgr);
virtual ~DirectedBgm(); // _08 (weak)
@@ -55,10 +63,10 @@ struct DirectedBgm : public BgmSeq {
// _00-_10 = JSULink
// _10 = VTABLE
// _14-_6C = BgmSeq
- DirectorMgrBase* mDirectorMgr; // _6C
- SeqTrackRoot* _70; // _70
- SeqTrackChild* _74[16]; // _74
- u8 _B4; // _B4 - unknown
+ DirectorMgrBase* mDirectorMgr; // _6C
+ SeqTrackRoot* mRootTrack; // _70
+ SeqTrackChild* mChildTracks[16]; // _74
+ u8 _B4; // _B4 - unknown
};
/**
diff --git a/include/PSSystem/Director.h b/include/PSSystem/PSSeq.h
similarity index 73%
rename from include/PSSystem/Director.h
rename to include/PSSystem/PSSeq.h
index 74c86f05f..0de709b68 100644
--- a/include/PSSystem/Director.h
+++ b/include/PSSystem/PSSeq.h
@@ -31,6 +31,34 @@ struct DirectorBase : public JADHioNode {
void directOffInner();
void powerOn();
+ inline void setupTracks(int startID, int maxID, SeqTrackBase** tracks)
+ {
+ for (u8 i = 0; i < maxID; i++) {
+ int id = i + startID;
+ P2ASSERTLINE(419, id < 16);
+ setTrack(i, tracks[id]);
+ }
+ }
+ // there should only be a single inline judging by the line number, but i have no clue how to handle this condition check
+ inline void setupTracks(int startID, int maxID, SeqTrackBase** tracks, u8* cond)
+ {
+ for (int i = 0; i < maxID; i++) {
+ int id = i + startID;
+ if (cond[i]) {
+ P2ASSERTLINE(419, id < 16);
+ }
+ setTrack(i, tracks[id]);
+ }
+ }
+
+ // this is supposed to be a function for BgmSeq or DirectedBGM, but those are in a different header,
+ // but the panic has to be in this file AAAAAAAAAAAAAAA
+ inline void isBgmTrackValid()
+ {
+ bool check = true; // _B4 && _70
+ P2ASSERTLINE(415, check);
+ }
+
static u8 sToolMode;
// _00 = VTBL
@@ -67,7 +95,7 @@ struct SwitcherDirector : public DirectorBase {
{
}
- virtual ~SwitcherDirector(); // _08 (weak)
+ virtual ~SwitcherDirector() { } // _08 (weak)
virtual void directOnTrack(SeqTrackBase&) = 0; // _20
virtual void directOffTrack(SeqTrackBase&) = 0; // _24
virtual void doUpdateRequest(); // _28
@@ -90,15 +118,15 @@ struct DirectorCopyActor : public DirectorActorBase {
virtual void onUpdateFromSlaveD(); // _10 (weak)
// _00 = VTBL
- DirectorBase* _04; // _04
- DirectorBase* _08; // _08
+ DirectorBase* mDirectorChild; // _04
+ DirectorBase* mDirectorParent; // _08
};
struct DirectorMgrBase : public JADHioNode {
DirectorMgrBase(u8);
- virtual ~DirectorMgrBase(); // _08 (weak)
- virtual void newDirector(u8, DirectedBgm&) = 0; // _0C
+ virtual ~DirectorMgrBase() { } // _08 (weak)
+ virtual DirectorBase* newDirector(u8, DirectedBgm&) = 0; // _0C
void initAndAdaptToBgm(DirectedBgm&);
void playInit(JASTrack*);
diff --git a/include/PSSystem/SeqTrack.h b/include/PSSystem/SeqTrack.h
index ef72b8589..2a9e90329 100644
--- a/include/PSSystem/SeqTrack.h
+++ b/include/PSSystem/SeqTrack.h
@@ -3,7 +3,7 @@
#include "types.h"
#include "PSSystem/PSBgmTask.h"
-#include "PSSystem/Director.h"
+#include "PSSystem/PSSeq.h"
#include "JSystem/JAudio/JAS/JASTrack.h"
#include "JSystem/JAudio/JAD/JADDataMgr.h"
diff --git a/src/utilityU/PSMainSide_DirectorMgr.cpp b/src/utilityU/PSMainSide_DirectorMgr.cpp
index 02112b153..a8191bf8c 100644
--- a/src/utilityU/PSMainSide_DirectorMgr.cpp
+++ b/src/utilityU/PSMainSide_DirectorMgr.cpp
@@ -1,174 +1,8 @@
#include "PSM/DirectorMgr.h"
-#include "PSSystem/PSBgm.h"
-#include "types.h"
-
-/*
- Generated from dpostproc
-
- .section .rodata # 0x804732E0 - 0x8049E220
- lbl_8049DA80:
- .asciz "PSMainSide_DirectorMgr.cpp"
- .skip 1
- lbl_8049DA9C:
- .asciz "P2Assert"
- .skip 3
- .asciz "caveglass.bms"
- .skip 2
- .asciz "caverelax.bms"
- .skip 2
- .asciz "/user/Totaka/trackMap_Seq_T.txt"
- .asciz "caveconc.bms"
- .skip 3
- .asciz "/user/Totaka/trackMap_Cond_T.txt"
- .skip 3
- .asciz "cavesoil.bms"
- .skip 3
- .asciz "cavemetal.bms"
- .skip 2
- .asciz "/user/Wakai/trackMap_Cond_W.txt"
- .asciz "/user/Wakai/trackMap_Seq_W.txt"
- .skip 1
- .asciz "track map is\nnot initialized\n"
- .skip 2
- .asciz "kehaiD "
- .skip 2
- .asciz "battleD "
- .skip 2
- .asciz "OtakaraD"
- .skip 3
- .asciz "GroundD "
- .skip 2
- .asciz "PSGame.h"
- .skip 3
- .asciz "PSCommon.h"
- .skip 1
- .asciz "eventD "
- .skip 2
- .asciz "OriBeedaD"
- .skip 2
- .asciz "RugBeedaD"
- .skip 2
- .asciz "OriIchouD"
- .skip 2
- .asciz "RouIchouD"
- .skip 2
- .asciz "PikBattlD"
- .skip 2
-
- .section .data, "wa" # 0x8049E220 - 0x804EFC20
- lbl_804EF880:
- .4byte lbl_8046F928
- .4byte lbl_8046FB60
- .4byte lbl_8046F9D8
- .4byte lbl_8046FA98
- .4byte lbl_8046FC0C
- .4byte lbl_8046FD34
- .4byte lbl_8046FEA8
- .4byte lbl_8046FF14
- lbl_804EF8A0:
- .4byte lbl_80470060
- .4byte lbl_80470068
- .4byte lbl_80470070
- .4byte lbl_80470078
- .4byte lbl_80470080
- .4byte lbl_80470088
- .4byte lbl_80470090
- .4byte lbl_80470098
- lbl_804EF8C0:
- .4byte lbl_80470518
- .4byte lbl_804705F8
- .4byte lbl_804706D4
- .4byte lbl_804707B0
- .4byte lbl_80470850
- .4byte lbl_804708F0
- .4byte lbl_804709C4
- .4byte lbl_80470A98
- .global __vt__Q23PSM20DirectorMgr_2PBattle
- __vt__Q23PSM20DirectorMgr_2PBattle:
- .4byte 0
- .4byte 0
- .4byte __dt__Q23PSM20DirectorMgr_2PBattleFv
- .4byte
- newDirector__Q23PSM20DirectorMgr_2PBattleFUcRQ28PSSystem11DirectedBgm .4byte
- 0 .4byte 0 .4byte "@12@__dt__Q23PSM20DirectorMgr_2PBattleFv" .global
- __vt__Q23PSM18DirectorMgr_Battle
- __vt__Q23PSM18DirectorMgr_Battle:
- .4byte 0
- .4byte 0
- .4byte __dt__Q23PSM18DirectorMgr_BattleFv
- .4byte
- newDirector__Q23PSM18DirectorMgr_BattleFUcRQ28PSSystem11DirectedBgm .4byte 0
- .4byte 0
- .4byte "@12@__dt__Q23PSM18DirectorMgr_BattleFv"
- .global __vt__Q23PSM25DirectorMgr_Scene_AutoBgm
- __vt__Q23PSM25DirectorMgr_Scene_AutoBgm:
- .4byte 0
- .4byte 0
- .4byte __dt__Q23PSM25DirectorMgr_Scene_AutoBgmFv
- .4byte
- newDirector__Q23PSM17DirectorMgr_SceneFUcRQ28PSSystem11DirectedBgm .4byte 0
- .4byte 0
- .4byte "@12@__dt__Q23PSM25DirectorMgr_Scene_AutoBgmFv"
- .4byte isSlave__Q23PSM17DirectorMgr_SceneFv
- .4byte
- newPikminNumberDirector__Q23PSM25DirectorMgr_Scene_AutoBgmFiUcRQ28PSSystem11DirectedBgm
- .global __vt__Q23PSM19GroundDirector_Cave
- __vt__Q23PSM19GroundDirector_Cave:
- .4byte 0
- .4byte 0
- .4byte __dt__Q23PSM19GroundDirector_CaveFv
- .4byte exec__Q28PSSystem12DirectorBaseFv
- .4byte directOn__Q23PSM19GroundDirector_CaveFv
- .4byte directOff__Q23PSM19GroundDirector_CaveFv
- .4byte underDirection__Q28PSSystem12DirectorBaseFv
- .4byte execInner__Q23PSM21ActorDirector_TrackOnFv
- .4byte
- directOnTrack__Q23PSM19TrackOnDirectorBaseFRQ28PSSystem12SeqTrackBase .4byte
- directOffTrack__Q23PSM19TrackOnDirectorBaseFRQ28PSSystem12SeqTrackBase .4byte
- doUpdateRequest__Q28PSSystem16SwitcherDirectorFv .4byte
- onPlayInit__Q23PSM19TrackOnDirectorBaseFP8JASTrack .4byte
- onDirectOn__Q28PSSystem12DirectorBaseFv .4byte
- onDirectOff__Q28PSSystem12DirectorBaseFv .global
- "__vt__Q28PSSystem38SingletonBase"
- "__vt__Q28PSSystem38SingletonBase":
- .4byte 0
- .4byte 0
- .4byte "__dt__Q28PSSystem38SingletonBaseFv"
- .global __vt__Q23PSM17DirectorMgr_Scene
- __vt__Q23PSM17DirectorMgr_Scene:
- .4byte 0
- .4byte 0
- .4byte __dt__Q23PSM17DirectorMgr_SceneFv
- .4byte
- newDirector__Q23PSM17DirectorMgr_SceneFUcRQ28PSSystem11DirectedBgm .4byte 0
- .4byte 0
- .4byte "@12@__dt__Q23PSM17DirectorMgr_SceneFv"
- .4byte isSlave__Q23PSM17DirectorMgr_SceneFv
- .4byte
- newPikminNumberDirector__Q23PSM17DirectorMgr_SceneFiUcRQ28PSSystem11DirectedBgm
- .4byte 0
-
- .section .sdata2, "a" # 0x80516360 - 0x80520E40
- lbl_80520D60:
- .asciz ""
- .skip 3
- lbl_80520D64:
- .asciz "new_"
- .skip 3
- lbl_80520D6C:
- .asciz "eventD"
- .skip 1
- lbl_80520D74:
- .float 200.0
- lbl_80520D78:
- .float 1500.0
- lbl_80520D7C:
- .asciz "PSSeq.h"
- lbl_80520D84:
- .float 300.0
- lbl_80520D88:
- .float 600.0
-*/
+#include "PSAutoBgm/AutoBgm.h"
+#include "PSSystem/PSGame.h"
+#include "PSGame/PikScene.h"
+#include "PSM/BossBgmFader.h"
namespace PSM {
@@ -177,9 +11,39 @@ namespace PSM {
* Address: 8046F2BC
* Size: 0002D8
*/
-DirectorMgr_Scene::DirectorMgr_Scene(PSM::DirectorMgr_Scene*, unsigned char p2)
- : PSSystem::DirectorMgrBase(p2)
+DirectorMgr_Scene::DirectorMgr_Scene(DirectorMgr_Scene* owner, u8 type)
+ : ::PSSystem::DirectorMgrBase(type)
+ , mOwner(owner)
{
+
+ if (!isSlave()) {
+ for (u8 i = 0; i < 8; i++) {
+ switch (i) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ mCopyActorList[i] = new ListDirectorActor;
+ break;
+ case 4:
+ mCopyActorList[i] = new ListDirectorActor;
+ break;
+ case 5:
+ case 6:
+ case 7:
+ mCopyActorList[i] = new ::PSSystem::DirectorCopyActor(nullptr, nullptr);
+ break;
+ default:
+ JUT_PANICLINE(60, "P2Assert");
+ }
+ }
+ } else {
+ for (u8 i = 0; i < 8; i++) {
+ mCopyActorList[i] = mOwner->mCopyActorList[i];
+ P2ASSERTLINE(69, mCopyActorList[i]);
+ }
+ }
+
/*
stwu r1, -0x20(r1)
mflr r0
@@ -410,248 +274,40 @@ __ct__Q28PSSystem17DirectorCopyActorFPQ28PSSystem12DirectorBasePQ28PSSystem12Dir
* Address: 8046F594
* Size: 00008C
*/
-DirectorMgr_Scene::~DirectorMgr_Scene()
-{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r4
- stw r30, 8(r1)
- or. r30, r3, r3
- beq lbl_8046F604
- lis r4, __vt__Q23PSM17DirectorMgr_Scene@ha
- addi r3, r30, 0xc
- addi r5, r4, __vt__Q23PSM17DirectorMgr_Scene@l
- li r4, 0
- stw r5, 0(r30)
- addi r0, r5, 0x10
- stw r0, 0xc(r30)
- bl __dt__11JKRDisposerFv
- cmplwi r30, 0
- beq lbl_8046F5F4
- lis r4, __vt__Q28PSSystem15DirectorMgrBase@ha
- mr r3, r30
- addi r0, r4, __vt__Q28PSSystem15DirectorMgrBase@l
- li r4, 0
- stw r0, 0(r30)
- bl __dt__10JADHioNodeFv
-
-lbl_8046F5F4:
- extsh. r0, r31
- ble lbl_8046F604
- mr r3, r30
- bl __dl__FPv
-
-lbl_8046F604:
- lwz r0, 0x14(r1)
- mr r3, r30
- lwz r31, 0xc(r1)
- lwz r30, 8(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
-}
+DirectorMgr_Scene::~DirectorMgr_Scene() { }
/*
* --INFO--
* Address: 8046F620
* Size: 000294
*/
-void DirectorMgr_Scene::initTrackMap(PSSystem::DirectedBgm&)
+void DirectorMgr_Scene::initTrackMap(::PSSystem::DirectedBgm& bgm)
{
- /*
- stwu r1, -0x90(r1)
- mflr r0
- lis r5, lbl_8049DA80@ha
- stw r0, 0x94(r1)
- stmw r27, 0x7c(r1)
- mr r31, r3
- mr r27, r4
- addi r3, r1, 0x48
- addi r30, r5, lbl_8049DA80@l
- li r4, 0
- bl __ct__Q23PSM15BgmTrackMapFileFb
- lwz r29, 0x14(r27)
- addi r4, r30, 0x28
- mr r28, r29
- mr r3, r29
- bl strcmp
- cmpwi r3, 0
- beq lbl_8046F67C
- mr r3, r29
- addi r4, r30, 0x38
- bl strcmp
- cmpwi r3, 0
- bne lbl_8046F684
-
-lbl_8046F67C:
- addi r29, r30, 0x48
- b lbl_8046F7A4
-
-lbl_8046F684:
- mr r3, r29
- addi r4, r30, 0x68
- bl strcmp
- cmpwi r3, 0
- bne lbl_8046F6D8
- mr r3, r27
- addi r29, r30, 0x78
- lwz r12, 0x10(r27)
- lwz r12, 0x24(r12)
- mtctr r12
- bctrl
- clrlwi r0, r3, 0x18
- cmplwi r0, 3
- beq lbl_8046F6D0
- addi r3, r30, 0
- addi r5, r30, 0x1c
- li r4, 0x74
- crclr 6
- bl panic_f__12JUTExceptionFPCciPCce
-
-lbl_8046F6D0:
- lwz r28, 0x330(r27)
- b lbl_8046F7A4
-
-lbl_8046F6D8:
- addi r3, r2, lbl_80520D64@sda21
- bl strlen
- mr r5, r3
- mr r4, r29
- addi r3, r2, lbl_80520D64@sda21
- bl strncmp
- cmpwi r3, 0
- bne lbl_8046F738
- mr r3, r27
- addi r29, r30, 0x78
- lwz r12, 0x10(r27)
- lwz r12, 0x24(r12)
- mtctr r12
- bctrl
- clrlwi r0, r3, 0x18
- cmplwi r0, 3
- beq lbl_8046F730
- addi r3, r30, 0
- addi r5, r30, 0x1c
- li r4, 0x7e
- crclr 6
- bl panic_f__12JUTExceptionFPCciPCce
-
-lbl_8046F730:
- lwz r28, 0x330(r27)
- b lbl_8046F7A4
-
-lbl_8046F738:
- mr r3, r29
- addi r4, r30, 0x9c
- bl strcmp
- cmpwi r3, 0
- beq lbl_8046F760
- mr r3, r29
- addi r4, r30, 0xac
- bl strcmp
- cmpwi r3, 0
- bne lbl_8046F7A0
-
-lbl_8046F760:
- mr r3, r27
- addi r29, r30, 0xbc
- lwz r12, 0x10(r27)
- lwz r12, 0x24(r12)
- mtctr r12
- bctrl
- clrlwi r0, r3, 0x18
- cmplwi r0, 3
- beq lbl_8046F798
- addi r3, r30, 0
- addi r5, r30, 0x1c
- li r4, 0x8b
- crclr 6
- bl panic_f__12JUTExceptionFPCciPCce
-
-lbl_8046F798:
- lwz r28, 0x330(r27)
- b lbl_8046F7A4
-
-lbl_8046F7A0:
- addi r29, r30, 0xdc
-
-lbl_8046F7A4:
- mr r4, r29
- addi r3, r1, 0x48
- li r5, 2
- bl onlyLoad__Q28PSSystem12TextDataBaseFPCcQ212JKRDvdRipper15EAllocDirection
- mr r5, r28
- addi r3, r1, 8
- addi r4, r1, 0x48
- bl readTrackMap__Q23PSM15BgmTrackMapFileFPCc
- lwz r0, 8(r1)
- lis r3, __vt__Q23PSM15BgmTrackMapFile@ha
- lwz r4, 0xc(r1)
- addic. r5, r1, 0x64
- addi r3, r3, __vt__Q23PSM15BgmTrackMapFile@l
- stw r0, 0x48(r31)
- addi r0, r3, 0x10
- stw r4, 0x4c(r31)
- lwz r5, 0x10(r1)
- lwz r4, 0x14(r1)
- stw r5, 0x50(r31)
- stw r4, 0x54(r31)
- lwz r5, 0x18(r1)
- lwz r4, 0x1c(r1)
- stw r5, 0x58(r31)
- stw r4, 0x5c(r31)
- lwz r5, 0x20(r1)
- lwz r4, 0x24(r1)
- stw r5, 0x60(r31)
- stw r4, 0x64(r31)
- lbz r4, 0x28(r1)
- stb r4, 0x68(r31)
- lbz r4, 0x29(r1)
- stb r4, 0x69(r31)
- lbz r4, 0x2a(r1)
- stb r4, 0x6a(r31)
- lbz r4, 0x2b(r1)
- stb r4, 0x6b(r31)
- lbz r4, 0x2c(r1)
- stb r4, 0x6c(r31)
- lbz r4, 0x2d(r1)
- stb r4, 0x6d(r31)
- lwz r5, 0x2e(r1)
- lwz r4, 0x32(r1)
- stw r5, 0x6e(r31)
- stw r4, 0x72(r31)
- lwz r5, 0x36(r1)
- lwz r4, 0x3a(r1)
- stw r5, 0x76(r31)
- stw r4, 0x7a(r31)
- lwz r5, 0x3e(r1)
- lwz r4, 0x42(r1)
- stw r5, 0x7e(r31)
- stw r4, 0x82(r31)
- stw r3, 0x48(r1)
- stw r0, 0x64(r1)
- beq lbl_8046F894
- lis r3, "__vt__Q28PSSystem38SingletonBase"@ha
- li r0, 0
- addi r3, r3,
-"__vt__Q28PSSystem38SingletonBase"@l stw r0,
-"sInstance__Q28PSSystem38SingletonBase"@sda21(r13) stw
-r3, 0x64(r1)
-
-lbl_8046F894:
- addi r3, r1, 0x48
- li r4, 0
- bl __dt__Q28PSSystem12TextDataBaseFv
- lmw r27, 0x7c(r1)
- lwz r0, 0x94(r1)
- mtlr r0
- addi r1, r1, 0x90
- blr
- */
+ BgmTrackMapFile file(false);
+ char* path = bgm.mBmsFileName;
+ char* bms = path;
+
+ // Determine what trackMap file to load, depending on bms/cnd file name
+ if (!strcmp(bms, "caveglass.bms") || (!strcmp(bms, "caverelax.bms"))) {
+ path = "/user/Totaka/trackMap_Seq_T.txt";
+ } else if (!strcmp(bms, "caveconc.bms")) {
+ path = "/user/Totaka/trackMap_Cond_T.txt";
+ P2ASSERTLINE(116, bgm.getCastType() == ::PSSystem::DirectedBgm::BgmType_Cave);
+ bms = static_cast(&bgm)->mConductorFilePath;
+ } else if (!strncmp("new_", bms, strlen("new_"))) {
+ path = "/user/Totaka/trackMap_Cond_T.txt";
+ P2ASSERTLINE(126, bgm.getCastType() == ::PSSystem::DirectedBgm::BgmType_Cave);
+ bms = static_cast(&bgm)->mConductorFilePath;
+ } else if (!strcmp(bms, "cavesoil.bms") || (!strcmp(bms, "cavemetal.bms"))) {
+ path = "/user/Wakai/trackMap_Cond_W.txt";
+ P2ASSERTLINE(139, bgm.getCastType() == ::PSSystem::DirectedBgm::BgmType_Cave);
+ bms = static_cast(&bgm)->mConductorFilePath;
+ } else {
+ path = "/user/Wakai/trackMap_Seq_W.txt";
+ }
+
+ file.onlyLoad(path, JKRDvdRipper::ALLOC_DIR_BOTTOM);
+ mBgmTrackMap = file.readTrackMap(bms);
}
/*
@@ -659,8 +315,93 @@ r3, 0x64(r1)
* Address: 8046F8B4
* Size: 000770
*/
-void DirectorMgr_Scene::newDirector(unsigned char, PSSystem::DirectedBgm&)
+::PSSystem::DirectorBase* DirectorMgr_Scene::newDirector(u8 type, ::PSSystem::DirectedBgm& bgm)
{
+ JUT_ASSERTLINE(161, mBgmTrackMap.mBasicTrackCount, "track map is\nnot initialized\n");
+ ::PSSystem::DirectorBase* actor = nullptr;
+ DamageDirector* damage = nullptr;
+ switch (type) {
+ case Director_Working: {
+ actor = new ActorDirector_Scaled("eventD", mBgmTrackMap.mEventTrackCount, 200.0, 1500.0, 100, 100, 100);
+ P2ASSERTLINE(173, actor);
+ actor->setupTracks(mBgmTrackMap.mBasicTrackCount, mBgmTrackMap.mEventTrackCount, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director_EnemyNear: {
+ actor = new ActorDirector_Kehai("kehaiD ", mBgmTrackMap.mKehaiTrackCount, 100, 100, 100);
+ P2ASSERTLINE(188, actor);
+ actor->setupTracks(mBgmTrackMap.mBasicTrackCount + mBgmTrackMap.mEventTrackCount + mBgmTrackMap.mOtakaraTrackCount,
+ mBgmTrackMap.mKehaiTrackCount, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director_Battle: {
+ actor = new ActorDirector_Battle("battleD ", mBgmTrackMap.mBattleTrackCount, 100, 100, 100);
+ P2ASSERTLINE(188, actor);
+ actor->setupTracks(mBgmTrackMap.mBasicTrackCount + mBgmTrackMap.mEventTrackCount + mBgmTrackMap.mOtakaraTrackCount
+ + mBgmTrackMap.mKehaiTrackCount,
+ mBgmTrackMap.mBattleTrackCount, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director_Treasure: {
+ actor = new ActorDirector_TrackOn("OtakaraD", mBgmTrackMap.mOtakaraTrackCount, 100, 100);
+ P2ASSERTLINE(219, actor);
+ actor->setupTracks(mBgmTrackMap.mBasicTrackCount + mBgmTrackMap.mEventTrackCount, mBgmTrackMap.mOtakaraTrackCount,
+ (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director_Ground: {
+ actor;
+ if (bgm.getCastType() == ::PSSystem::DirectedBgm::BgmType_Cave) {
+ actor = new GroundDirector_Cave("GroundD ", mBgmTrackMap.mGroundTrackCount, 100, 100);
+ } else {
+ actor = new ActorDirector_Scaled("GroundD ", mBgmTrackMap.mGroundTrackCount, 300.0f, 600.0f, 200, 200, 10);
+ }
+ P2ASSERTLINE(275, actor);
+
+ actor->setupTracks(mBgmTrackMap.mBasicTrackCount + mBgmTrackMap.mEventTrackCount + mBgmTrackMap.mOtakaraTrackCount
+ + mBgmTrackMap.mKehaiTrackCount + mBgmTrackMap.mBattleTrackCount,
+ mBgmTrackMap.mBattleTrackCount, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director_Pikmin: {
+ int pikNum = mBgmTrackMap.getPikNum();
+ int mask = mBgmTrackMap.getPikMaskNum();
+ actor = newPikminNumberDirector(pikNum, mask, bgm);
+ P2ASSERTLINE(290, actor);
+ actor->setupTracks(0, 16, (::PSSystem::SeqTrackBase**)bgm.mChildTracks, mBgmTrackMap.mPikNum);
+ if (bgm.getCastType() == 3) {
+ static_cast(&bgm)->setPikiMaskNum(mBgmTrackMap.mPikNum);
+ }
+ break;
+ }
+ case Director_Damage: {
+ damage = new DamageDirector;
+ damage->isBgmTrackValid();
+ damage->setTrack(0, bgm.mRootTrack);
+ break;
+ case Director_Tempo:
+ actor = new ActorDirector_TempoChange;
+ actor->isBgmTrackValid();
+ actor->setTrack(0, bgm.mRootTrack);
+ break;
+ }
+ }
+
+ ::PSSystem::DirectorBase* ret;
+ if (actor || (!actor && damage)) {
+ ret = actor;
+ }
+
+ P2ASSERTLINE(334, ret);
+
+ ::PSSystem::DirectorCopyActor* obj = mCopyActorList[type];
+ if (isSlave()) {
+ obj->mDirectorChild = ret;
+ } else {
+ obj->mDirectorParent = ret;
+ }
+ adaptDirectorActor(ret, type);
+ return ret;
/*
stwu r1, -0x30(r1)
mflr r0
@@ -1269,57 +1010,37 @@ r3, r22 lmw r22, 8(r1) lwz r0, 0x34(r1) mtlr r0 addi r1, r1,
* Address: 80470024
* Size: 0000A8
*/
-void DirectorMgr_Scene::adaptDirectorActor(PSSystem::DirectorBase*, unsigned char)
+void DirectorMgr_Scene::adaptDirectorActor(::PSSystem::DirectorBase* director, u8 type)
{
- /*
- .loc_0x0:
- stwu r1, -0x10(r1)
- mflr r0
- rlwinm r6,r5,0,24,31
- stw r0, 0x14(r1)
- rlwinm r0,r5,2,22,29
- add r3, r3, r0
- cmplwi r6, 0x7
- lwz r5, 0x24(r3)
- bgt- .loc_0x7C
- lis r3, 0x804F
- rlwinm r0,r6,2,0,29
- subi r3, r3, 0x760
- lwzx r0, r3, r0
- mtctr r0
- bctr
- stw r5, 0x64(r4)
- b .loc_0x98
- stw r5, 0x54(r4)
- b .loc_0x98
- stw r5, 0x64(r4)
- b .loc_0x98
- stw r5, 0x64(r4)
- b .loc_0x98
- stw r5, 0x64(r4)
- b .loc_0x98
- stw r5, 0x48(r4)
- b .loc_0x98
- stw r5, 0x48(r4)
- b .loc_0x98
- stw r5, 0x50(r4)
- b .loc_0x98
-
- .loc_0x7C:
- lis r3, 0x804A
- lis r5, 0x804A
- subi r3, r3, 0x2580
- li r4, 0x195
- subi r5, r5, 0x2564
- crclr 6, 0x6
- bl -0x445A78
-
- .loc_0x98:
- lwz r0, 0x14(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
+ ::PSSystem::DirectorCopyActor* actor = mCopyActorList[type];
+ switch (type) {
+ case 0:
+ static_cast(director)->mActor = actor;
+ break;
+ case 1:
+ static_cast(director)->mActor = actor;
+ break;
+ case 2:
+ static_cast(director)->mActor = actor;
+ break;
+ case 3:
+ static_cast(director)->mActor = actor;
+ break;
+ case 4:
+ static_cast(director)->mActor = actor;
+ break;
+ case 5:
+ static_cast(director)->mActor = actor;
+ break;
+ case 6:
+ static_cast(director)->mActor = actor;
+ break;
+ case 7:
+ static_cast(director)->mActor = actor;
+ break;
+ default:
+ JUT_PANICLINE(405, "P2Assert");
+ }
}
/*
@@ -1327,52 +1048,11 @@ void DirectorMgr_Scene::adaptDirectorActor(PSSystem::DirectorBase*, unsigned cha
* Address: 804700CC
* Size: 000094
*/
-void DirectorMgr_Scene::newPikminNumberDirector(int, unsigned char, PSSystem::DirectedBgm&)
+PikminNumberDirector* DirectorMgr_Scene::newPikminNumberDirector(int pikNum, u8 pikMask, ::PSSystem::DirectedBgm& bgm)
{
- /*
- .loc_0x0:
- stwu r1, -0x20(r1)
- mflr r0
- li r3, 0x50
- stw r0, 0x24(r1)
- stw r31, 0x1C(r1)
- stw r30, 0x18(r1)
- mr r30, r6
- stw r29, 0x14(r1)
- mr r29, r5
- stw r28, 0x10(r1)
- mr r28, r4
- bl -0x44C254
- mr. r31, r3
- beq- .loc_0x4C
- mr r4, r28
- mr r5, r29
- mr r6, r30
- bl -0x19278
- mr r31, r3
-
- .loc_0x4C:
- cmplwi r31, 0
- bne- .loc_0x70
- lis r3, 0x804A
- lis r5, 0x804A
- subi r3, r3, 0x2580
- li r4, 0x19C
- subi r5, r5, 0x2564
- crclr 6, 0x6
- bl -0x445AF8
-
- .loc_0x70:
- lwz r0, 0x24(r1)
- mr r3, r31
- lwz r31, 0x1C(r1)
- lwz r30, 0x18(r1)
- lwz r29, 0x14(r1)
- lwz r28, 0x10(r1)
- mtlr r0
- addi r1, r1, 0x20
- blr
- */
+ PikminNumberDirector* director = new PikminNumberDirector(pikNum, pikMask, bgm);
+ P2ASSERTLINE(412, director);
+ return director;
}
/*
@@ -1380,8 +1060,11 @@ void DirectorMgr_Scene::newPikminNumberDirector(int, unsigned char, PSSystem::Di
* Address: 80470160
* Size: 000090
*/
-void DirectorMgr_Scene_AutoBgm::newPikminNumberDirector(int, unsigned char, PSSystem::DirectedBgm&)
+PikminNumberDirector* DirectorMgr_Scene_AutoBgm::newPikminNumberDirector(int pikNum, u8 pikMask, ::PSSystem::DirectedBgm& bgm)
{
+ PikminNumberDirector_AutoBgm* director = new PikminNumberDirector_AutoBgm(pikNum, pikMask, bgm);
+ P2ASSERTLINE(425, director);
+ return director;
/*
.loc_0x0:
stwu r1, -0x20(r1)
@@ -1433,30 +1116,8 @@ void DirectorMgr_Scene_AutoBgm::newPikminNumberDirector(int, unsigned char, PSSy
* Size: 000050
*/
DirectorMgr_Battle::DirectorMgr_Battle()
- : PSSystem::DirectorMgrBase(2)
+ : ::PSSystem::DirectorMgrBase(::PSSystem::DirectedBgm::BgmType_Battle)
{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- li r4, 2
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r3
- bl __ct__Q28PSSystem15DirectorMgrBaseFUc
- addi r3, r31, 0xc
- bl __ct__11JKRDisposerFv
- lis r4, __vt__Q23PSM18DirectorMgr_Battle@ha
- mr r3, r31
- addi r4, r4, __vt__Q23PSM18DirectorMgr_Battle@l
- stw r4, 0(r31)
- addi r0, r4, 0x10
- stw r0, 0xc(r31)
- lwz r31, 0xc(r1)
- lwz r0, 0x14(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
}
/*
@@ -1464,8 +1125,45 @@ DirectorMgr_Battle::DirectorMgr_Battle()
* Address: 80470240
* Size: 000244
*/
-void DirectorMgr_Battle::newDirector(unsigned char, PSSystem::DirectedBgm&)
+::PSSystem::DirectorBase* DirectorMgr_Battle::newDirector(u8 flag, ::PSSystem::DirectedBgm& bgm)
{
+ ::PSSystem::DirectorBase* director = nullptr;
+ u8 tracks = 255;
+ u8 info = 255;
+
+ PSGame::PikSceneMgr* mgr = static_cast(::PSSystem::getSceneMgr());
+ ::PSSystem::checkSceneMgr(mgr);
+ bool boss = mgr->curSceneIsBigBossFloor();
+ switch (flag) {
+ case 0:
+ if (boss) {
+ info = 14;
+ tracks = 1;
+ } else {
+ info = 10;
+ tracks = 1;
+ }
+ director = new PikAttackDirector(tracks);
+ BossBgmFader::Mgr* boss = ::PSSystem::SingletonBase::getInstance();
+ boss->setUpdator(director);
+ break;
+ case 1:
+ if (boss) {
+ info = 11;
+ tracks = 1;
+ } else {
+ info = 15;
+ tracks = 1;
+ }
+ director = new ExiteDirector(tracks);
+ break;
+ }
+
+ P2ASSERTLINE(495, tracks != 255);
+ P2ASSERTLINE(496, info != 255);
+ P2ASSERTLINE(497, director);
+ director->setupTracks(0, tracks, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ return director;
/*
stwu r1, -0x30(r1)
mflr r0
@@ -1649,30 +1347,8 @@ __ct__Q23PSM15DirectorUpdatorFPQ28PSSystem12DirectorBaseUcQ33PSM15DirectorUpdato
* Size: 000050
*/
DirectorMgr_2PBattle::DirectorMgr_2PBattle()
- : PSSystem::DirectorMgrBase(8)
+ : ::PSSystem::DirectorMgrBase(::PSSystem::DirectedBgm::BgmType_2PBattle)
{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- li r4, 8
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r3
- bl __ct__Q28PSSystem15DirectorMgrBaseFUc
- addi r3, r31, 0xc
- bl __ct__11JKRDisposerFv
- lis r4, __vt__Q23PSM20DirectorMgr_2PBattle@ha
- mr r3, r31
- addi r4, r4, __vt__Q23PSM20DirectorMgr_2PBattle@l
- stw r4, 0(r31)
- addi r0, r4, 0x10
- stw r0, 0xc(r31)
- lwz r31, 0xc(r1)
- lwz r0, 0x14(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
}
/*
@@ -1680,8 +1356,67 @@ DirectorMgr_2PBattle::DirectorMgr_2PBattle()
* Address: 804704D4
* Size: 0006B8
*/
-void DirectorMgr_2PBattle::newDirector(unsigned char, PSSystem::DirectedBgm&)
+::PSSystem::DirectorBase* DirectorMgr_2PBattle::newDirector(u8 type, ::PSSystem::DirectedBgm& bgm)
{
+ ::PSSystem::DirectorBase* actor = nullptr;
+ switch (type) {
+ case Director2P_Working: {
+ actor = new ActorDirector_Scaled("eventD ", 1, 200.0, 1500.0, 100, 100, 100);
+ P2ASSERTLINE(615, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director2P_EnemyNear: {
+ actor = new ActorDirector_Kehai("kehaiD ", 1, 100, 100, 100);
+ P2ASSERTLINE(627, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ static_cast(actor)->mActor = new ListDirectorActor;
+ break;
+ }
+ case Director2P_Battle: {
+ actor = new ActorDirector_Battle("battleD ", 1, 100, 100, 100);
+ P2ASSERTLINE(639, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ static_cast(actor)->mActor = new ListDirectorActor;
+ break;
+ }
+ case Director2P_OlimarMarble: {
+ actor = new ActorDirector_TrackOn("OriBeedaD", 1, 100, 100);
+ P2ASSERTLINE(662, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director2P_LouieMarble: {
+ actor = new ActorDirector_TrackOn("RugBeedaD", 1, 100, 100);
+ P2ASSERTLINE(699, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ }
+ case Director2P_OlimarIchou: {
+ actor = new ActorDirector_TrackOn("OriIchouD", 1, 100, 100);
+ P2ASSERTLINE(729, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ static_cast(actor)->mActor = new ListDirectorActor;
+ break;
+ }
+ case Director2P_LouieIchou: {
+ actor = new ActorDirector_TrackOn("RouIchouD", 1, 100, 100);
+ P2ASSERTLINE(757, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ static_cast(actor)->mActor = new ListDirectorActor;
+ break;
+ case Director2P_PikBattle:
+ actor = new TrackOnDirector_Voting(1, "PikBattlD", 100, 100);
+ P2ASSERTLINE(757, actor);
+ actor->setupTracks(0, 1, (::PSSystem::SeqTrackBase**)bgm.mChildTracks);
+ break;
+ default:
+ JUT_PANICLINE(791, "P2Assert");
+ }
+ }
+
+ P2ASSERTLINE(797, actor);
+ return actor;
/*
stwu r1, -0x20(r1)
mflr r0
@@ -2233,389 +1968,4 @@ __ct__Q28PSSystem17DirectorCopyActorFPQ28PSSystem12DirectorBasePQ28PSSystem12Dir
*/
}
-/*
- * --INFO--
- * Address: 80470B8C
- * Size: 00008C
- */
-DirectorMgr_2PBattle::~DirectorMgr_2PBattle()
-{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r4
- stw r30, 8(r1)
- or. r30, r3, r3
- beq lbl_80470BFC
- lis r4, __vt__Q23PSM20DirectorMgr_2PBattle@ha
- addi r3, r30, 0xc
- addi r5, r4, __vt__Q23PSM20DirectorMgr_2PBattle@l
- li r4, 0
- stw r5, 0(r30)
- addi r0, r5, 0x10
- stw r0, 0xc(r30)
- bl __dt__11JKRDisposerFv
- cmplwi r30, 0
- beq lbl_80470BEC
- lis r4, __vt__Q28PSSystem15DirectorMgrBase@ha
- mr r3, r30
- addi r0, r4, __vt__Q28PSSystem15DirectorMgrBase@l
- li r4, 0
- stw r0, 0(r30)
- bl __dt__10JADHioNodeFv
-
-lbl_80470BEC:
- extsh. r0, r31
- ble lbl_80470BFC
- mr r3, r30
- bl __dl__FPv
-
-lbl_80470BFC:
- lwz r0, 0x14(r1)
- mr r3, r30
- lwz r31, 0xc(r1)
- lwz r30, 8(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
-}
-
-/*
- * --INFO--
- * Address: 80470C18
- * Size: 00008C
- */
-DirectorMgr_Battle::~DirectorMgr_Battle()
-{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r4
- stw r30, 8(r1)
- or. r30, r3, r3
- beq lbl_80470C88
- lis r4, __vt__Q23PSM18DirectorMgr_Battle@ha
- addi r3, r30, 0xc
- addi r5, r4, __vt__Q23PSM18DirectorMgr_Battle@l
- li r4, 0
- stw r5, 0(r30)
- addi r0, r5, 0x10
- stw r0, 0xc(r30)
- bl __dt__11JKRDisposerFv
- cmplwi r30, 0
- beq lbl_80470C78
- lis r4, __vt__Q28PSSystem15DirectorMgrBase@ha
- mr r3, r30
- addi r0, r4, __vt__Q28PSSystem15DirectorMgrBase@l
- li r4, 0
- stw r0, 0(r30)
- bl __dt__10JADHioNodeFv
-
-lbl_80470C78:
- extsh. r0, r31
- ble lbl_80470C88
- mr r3, r30
- bl __dl__FPv
-
-lbl_80470C88:
- lwz r0, 0x14(r1)
- mr r3, r30
- lwz r31, 0xc(r1)
- lwz r30, 8(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
-}
-
-/*
- * --INFO--
- * Address: 80470CA4
- * Size: 0000A4
- */
-DirectorMgr_Scene_AutoBgm::~DirectorMgr_Scene_AutoBgm()
-{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r4
- stw r30, 8(r1)
- or. r30, r3, r3
- beq lbl_80470D2C
- lis r3, __vt__Q23PSM25DirectorMgr_Scene_AutoBgm@ha
- addi r3, r3, __vt__Q23PSM25DirectorMgr_Scene_AutoBgm@l
- stw r3, 0(r30)
- addi r0, r3, 0x10
- stw r0, 0xc(r30)
- beq lbl_80470D1C
- lis r4, __vt__Q23PSM17DirectorMgr_Scene@ha
- addi r3, r30, 0xc
- addi r5, r4, __vt__Q23PSM17DirectorMgr_Scene@l
- li r4, 0
- stw r5, 0(r30)
- addi r0, r5, 0x10
- stw r0, 0xc(r30)
- bl __dt__11JKRDisposerFv
- cmplwi r30, 0
- beq lbl_80470D1C
- lis r4, __vt__Q28PSSystem15DirectorMgrBase@ha
- mr r3, r30
- addi r0, r4, __vt__Q28PSSystem15DirectorMgrBase@l
- li r4, 0
- stw r0, 0(r30)
- bl __dt__10JADHioNodeFv
-
-lbl_80470D1C:
- extsh. r0, r31
- ble lbl_80470D2C
- mr r3, r30
- bl __dl__FPv
-
-lbl_80470D2C:
- lwz r0, 0x14(r1)
- mr r3, r30
- lwz r31, 0xc(r1)
- lwz r30, 8(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
-}
-
-/*
- * --INFO--
- * Address: 80470D48
- * Size: 000014
- */
-void DirectorMgr_Scene::isSlave()
-{
- /*
- lwz r3, 0x44(r3)
- neg r0, r3
- or r0, r0, r3
- srwi r3, r0, 0x1f
- blr
- */
-}
-
-/*
- * --INFO--
- * Address: 80470D5C
- * Size: 000088
- */
-// BgmTrackMapFile::~BgmTrackMapFile()
-// {
-// /*
-// stwu r1, -0x10(r1)
-// mflr r0
-// stw r0, 0x14(r1)
-// stw r31, 0xc(r1)
-// mr r31, r4
-// stw r30, 8(r1)
-// or. r30, r3, r3
-// beq lbl_80470DC8
-// lis r3, __vt__Q23PSM15BgmTrackMapFile@ha
-// addic. r0, r30, 0x1c
-// addi r3, r3, __vt__Q23PSM15BgmTrackMapFile@l
-// stw r3, 0(r30)
-// addi r0, r3, 0x10
-// stw r0, 0x1c(r30)
-// beq lbl_80470DAC
-// lis r3, "__vt__Q28PSSystem38SingletonBase"@ha
-// li r0, 0
-// addi r3, r3,
-// "__vt__Q28PSSystem38SingletonBase"@l stw r3,
-// 0x1c(r30) stw r0,
-// "sInstance__Q28PSSystem38SingletonBase"@sda21(r13)
-
-// lbl_80470DAC:
-// mr r3, r30
-// li r4, 0
-// bl __dt__Q28PSSystem12TextDataBaseFv
-// extsh. r0, r31
-// ble lbl_80470DC8
-// mr r3, r30
-// bl __dl__FPv
-
-// lbl_80470DC8:
-// lwz r0, 0x14(r1)
-// mr r3, r30
-// lwz r31, 0xc(r1)
-// lwz r30, 8(r1)
-// mtlr r0
-// addi r1, r1, 0x10
-// blr
-// */
-// }
-
-/*
- * --INFO--
- * Address: 80470DE4
- * Size: 0000B0
- */
-GroundDirector_Cave::~GroundDirector_Cave()
-{
- /*
- stwu r1, -0x10(r1)
- mflr r0
- stw r0, 0x14(r1)
- stw r31, 0xc(r1)
- mr r31, r4
- stw r30, 8(r1)
- or. r30, r3, r3
- beq lbl_80470E78
- lis r4, __vt__Q23PSM19GroundDirector_Cave@ha
- addi r0, r4, __vt__Q23PSM19GroundDirector_Cave@l
- stw r0, 0(r30)
- beq lbl_80470E68
- lis r4, __vt__Q23PSM21ActorDirector_TrackOn@ha
- addi r0, r4, __vt__Q23PSM21ActorDirector_TrackOn@l
- stw r0, 0(r30)
- beq lbl_80470E68
- lis r4, __vt__Q23PSM19TrackOnDirectorBase@ha
- addi r0, r4, __vt__Q23PSM19TrackOnDirectorBase@l
- stw r0, 0(r30)
- beq lbl_80470E68
- lis r4, __vt__Q23PSM16SwitcherDirector@ha
- addi r0, r4, __vt__Q23PSM16SwitcherDirector@l
- stw r0, 0(r30)
- beq lbl_80470E68
- lis r4, __vt__Q28PSSystem16SwitcherDirector@ha
- addi r0, r4, __vt__Q28PSSystem16SwitcherDirector@l
- stw r0, 0(r30)
- beq lbl_80470E68
- lis r5, __vt__Q28PSSystem12DirectorBase@ha
- li r4, 0
- addi r0, r5, __vt__Q28PSSystem12DirectorBase@l
- stw r0, 0(r30)
- bl __dt__10JADHioNodeFv
-
-lbl_80470E68:
- extsh. r0, r31
- ble lbl_80470E78
- mr r3, r30
- bl __dl__FPv
-
-lbl_80470E78:
- lwz r0, 0x14(r1)
- mr r3, r30
- lwz r31, 0xc(r1)
- lwz r30, 8(r1)
- mtlr r0
- addi r1, r1, 0x10
- blr
- */
-}
-
-/*
- * --INFO--
- * Address: 80470E94
- * Size: 000004
- */
-void GroundDirector_Cave::directOn() { }
-
-/*
- * --INFO--
- * Address: 80470E98
- * Size: 000004
- */
-void GroundDirector_Cave::directOff() { }
-
-namespace PSSystem {
-
-} // namespace PSSystem
-
-/*
- * --INFO--
- * Address: 80470E9C
- * Size: 000050
- */
-// void SingletonBase::~SingletonBase()
-// {
-// /*
-// stwu r1, -0x10(r1)
-// mflr r0
-// stw r0, 0x14(r1)
-// stw r31, 0xc(r1)
-// or. r31, r3, r3
-// beq lbl_80470ED4
-// lis r5, "__vt__Q28PSSystem38SingletonBase"@ha
-// extsh. r0, r4
-// addi r4, r5,
-// "__vt__Q28PSSystem38SingletonBase"@l li r0, 0 stw
-// r4, 0(r31) stw r0,
-// "sInstance__Q28PSSystem38SingletonBase"@sda21(r13) ble
-// lbl_80470ED4 bl __dl__FPv
-
-// lbl_80470ED4:
-// lwz r0, 0x14(r1)
-// mr r3, r31
-// lwz r31, 0xc(r1)
-// mtlr r0
-// addi r1, r1, 0x10
-// blr
-// */
-// }
-
-namespace PSM {
-
-/*
- * --INFO--
- * Address: 80470EEC
- * Size: 000008
- */
-// DirectorMgr_Scene::@12 @~DirectorMgr_Scene()
-// {
-// /*
-// addi r3, r3, -12
-// b __dt__Q23PSM17DirectorMgr_SceneFv
-// */
-// }
-
-/*
- * --INFO--
- * Address: 80470EF4
- * Size: 000008
- */
-// DirectorMgr_Scene_AutoBgm::@12 @~DirectorMgr_Scene_AutoBgm()
-// {
-// /*
-// addi r3, r3, -12
-// b __dt__Q23PSM25DirectorMgr_Scene_AutoBgmFv
-// */
-// }
-
-/*
- * --INFO--
- * Address: 80470EFC
- * Size: 000008
- */
-// DirectorMgr_Battle::@12 @~DirectorMgr_Battle()
-// {
-// /*
-// addi r3, r3, -12
-// b __dt__Q23PSM18DirectorMgr_BattleFv
-// */
-// }
-
-/*
- * --INFO--
- * Address: 80470F04
- * Size: 000008
- */
-// DirectorMgr_2PBattle::@12 @~DirectorMgr_2PBattle()
-// {
-// /*
-// addi r3, r3, -12
-// b __dt__Q23PSM20DirectorMgr_2PBattleFv
-// */
-// }
-} // namespace PSM
} // namespace PSM
diff --git a/tools/progress.csv b/tools/progress.csv
index 42c86e472..890c72b4a 100644
--- a/tools/progress.csv
+++ b/tools/progress.csv
@@ -595,3 +595,5 @@ You have 2814 out of 10000 Pokos and 83 out of 201 treasures.",2023-09-27 12:57:
You have 2816 out of 10000 Pokos and 83 out of 201 treasures.",2023-09-27 14:49:41.379248
2823,1313596,0.2823509485094851,83,295822,0.4149814268239308,"
You have 2823 out of 10000 Pokos and 83 out of 201 treasures.",2023-09-28 17:16:18.816529
+2824,1314256,0.28249281223776707,83,295906,0.4150992626841887,"
+You have 2824 out of 10000 Pokos and 83 out of 201 treasures.",2023-09-28 23:28:22.205709