SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
GameSystemObjHolder.cpp
1#include "Game/System/GameSystemObjHolder.hpp"
2#include "Game/System/ErrorArchive.hpp"
3#include "Game/System/FileLoader.hpp"
4#include "Game/System/HeapMemoryWatcher.hpp"
5#include "Game/System/Language.hpp"
6#include "Game/System/ResourceHolderManager.hpp"
7#include "Game/System/NANDManager.hpp"
8#include "Game/SingletonHolder.hpp"
9#include "Game/Util/RenderMode.hpp"
10#include <JSystem/JUtility/JUTVideo.hpp>
11#include <cstdio>
12
13GameSystemObjHolder::GameSystemObjHolder() :
14 mObjHolder(nullptr), mParticleResHolder(nullptr), mRenderModeObj(nullptr),
15 mCaptureScreenDir(nullptr), mScreenPreserver(nullptr), mSysWrapper(nullptr),
16 mWPadHolder(nullptr), mAsyncExec(nullptr), mMsgHolder(nullptr), mStarPointerDir(nullptr),
17 mRandom(0)
18 {
19 mLanguage = MR::getDecidedLanguageFromIPL();
20 initDvd();
21 initNAND();
22 initNameObj();
23 MR::createAndAddArchive((void*)cErrorArchive, MR::getStationedHeapNapa(), "ErrorMessageArchive.arc");
24}
25
26void GameSystemObjHolder::initAfterStationedResourceLoaded() {
27 SingletonHolder<NameObjRegister>::get()->setCurrentHolder(mObjHolder);
28 mParticleResHolder = new ParticleResourceHolder("/ParticleData/Effect.arc");
29 mMsgHolder->initGameData();
30 MR::createStarPointerLayout();
31}
32
33void GameSystemObjHolder::initMessageResource() {
34 JKRArchive* archive = nullptr;
35 JKRHeap* heap = nullptr;
36 MR::getMountedArchiveAndHeap("ErrorMessageArchive.arc", &archive, &heap);
37
38 char buf[0x80];
39 snprintf(buf, sizeof(buf), "/%s/MessageData/System.arc", MR::getCurrentLanguagePrefix());
40 void* systemFile = MR::decompressFileFromArchive(archive, buf, nullptr, 0);
41 MR::createAndAddArchive(systemFile, heap, "/Memory/SystemMessage.arc");
42 void* errorFile = MR::decompressFileFromArchive(archive, "/LayoutData/ErrorMessageWindow.arc", heap, 0x20);
43 MR::createAndAddArchive(errorFile, heap, "/Memory/ErrorMessageWindow.arc");
44 MR::createAndAddLayoutHolderRawData("/Memory/ErrorMessageWindow.arc");
45 mMsgHolder = new MessageHolder();
46 mMsgHolder->initSystemData();
47}
48
49void GameSystemObjHolder::init() {
50 initAudio();
51 initRenderMode();
52 initResourceHolderManager();
53 initMessageResource();
54 mAsyncExec = new FunctionAsyncExecutor();
55 initGameController();
56 initDisplay();
57}
58
59void GameSystemObjHolder::createAudioSystem() {
60 if (mSysWrapper != nullptr) {
61 mSysWrapper->createAudioSystem();
62 }
63}
64
65void GameSystemObjHolder::update() {
66 mSysWrapper->updateRhythm();
67 mWPadHolder->update();
68 mAsyncExec->update();
69 mStarPointerDir->update();
70}
71
72void GameSystemObjHolder::updateAudioSystem() {
73 if (mSysWrapper != nullptr) {
74 mSysWrapper->movement();
75 }
76}
77
78void GameSystemObjHolder::clearRequestFileInfo(bool unk) {
79 SingletonHolder<FileLoader>::get()->clearRequestFileInfo(unk);
80}
81
82void GameSystemObjHolder::drawStarPointer() {
83 mStarPointerDir->draw();
84}
85
86void GameSystemObjHolder::drawBeforeEndRender() {
87 mScreenPreserver->draw();
88}
89
90void GameSystemObjHolder::captureIfAllowForScreenPreserver() {
91 mScreenPreserver->captureIfAllow();
92}
93
94GXRenderModeObj* GameSystemObjHolder::getRenderModeObj() const {
95 return JUTVideo::sManager->mRenderModeObj;
96}
97
98void GameSystemObjHolder::initDvd() {
99 JKRMemArchive archive;
100 JKRFileLoader::initializeVolumeList();
101
104 }
105}
106
107void GameSystemObjHolder::initNAND() {
110 }
111}
112
113void GameSystemObjHolder::initAudio() {
114 mSysWrapper = new AudSystemWrapper(MR::getAudHeap(), MR::getStationedHeapNapa());
115 mSysWrapper->requestResourceForInitialize();
116}
117
118void GameSystemObjHolder::initRenderMode() {
119 mRenderModeObj = new GXRenderModeObj();
120 RenderModeObj* obj = MR::getSuitableRenderMode();
121
122 mRenderModeObj->viTVmode = obj->mTVMode;
123 mRenderModeObj->fbWidth = obj->mFrameBufWidth;
124 mRenderModeObj->efbHeight = obj->mEFBHeight;
125 mRenderModeObj->xfbHeight = obj->mXFBHeight;
126 mRenderModeObj->viXOrigin = obj->mXOrigin;
127 mRenderModeObj->viYOrigin = obj->mYOrigin;
128 mRenderModeObj->viWidth = obj->mVIWidth;
129 mRenderModeObj->viHeight = obj->mVIHeight;
130 mRenderModeObj->xFBmode = obj->mMode;
131 mRenderModeObj->field_rendering = obj->mFieldRendering;
132 mRenderModeObj->aa = obj->mAA;
133
134 /*for (int i = 0; i < 12; i++) {
135 for (int j = 0; j < 3; j++) {
136 u8* pattern = obj->mSamplePattern[i][j];
137 mRenderModeObj->sample_pattern[i][j] = pattern;
138 }
139 }*/
140
141 mRenderModeObj->vfilter[0] = obj->mFilter[0];
142 mRenderModeObj->vfilter[1] = obj->mFilter[1];
143 mRenderModeObj->vfilter[2] = obj->mFilter[2];
144 mRenderModeObj->vfilter[3] = obj->mFilter[3];
145 mRenderModeObj->vfilter[4] = obj->mFilter[4];
146 mRenderModeObj->vfilter[5] = obj->mFilter[5];
147 mRenderModeObj->vfilter[6] = obj->mFilter[6];
148
149 JUTVideo::createManager(mRenderModeObj);
150}
151
152void GameSystemObjHolder::initNameObj() {
153 mObjHolder = new NameObjHolder(0x100);
154
157 }
158
159 SingletonHolder<NameObjRegister>::get()->setCurrentHolder(mObjHolder);
160}
161
162void GameSystemObjHolder::initResourceHolderManager() {
165 }
166}
167
168void GameSystemObjHolder::initGameController() {
169 mWPadHolder = new WPadHolder();
170 mStarPointerDir = new StarPointerDirector();
171}
Class that stores every NameObj instance in a scene.
virtual void draw() const
Draws the object. Does nothing until overridden.