SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
PlanetMapCreator.cpp
1#include "Game/Map/PlanetMapCreator.hpp"
2#include "Game/Scene/SceneObjHolder.hpp"
3#include "Game/NameObj/NameObjFactory.hpp"
4#include "Game/Util.hpp"
5#include <cstdio>
6#include <cstring>
7
8#ifdef NON_MATCHING
9// scheduling issues
10PlanetMapCreator::PlanetMapCreator(const char *pName) : NameObj(pName) {
11 mPlanetMapData = 0;
12 const JMapInfo* iter = MR::createCsvParser(sArcName, sFileName);
13 mTableCount = MR::getCsvDataElementNum(iter);
14 mPlanetMapData = new PlanetMapData*[mTableCount];
15 createPlanetMapDataTable((JMapInfo*)iter);
16}
17#endif
18
19#ifdef NON_MATCHING
20// regalloc issues
21void PlanetMapCreator::makeArchiveListPlanet(NameObjArchiveListCollector *pArchiveList, const JMapInfoIter &rIter, const char *pName) {
22 PlanetMapData* planetData = getTableData(pName);
23
24 bool isForceLow = isScenarioForceLow(planetData);
25
26 if (isForceLow) {
27 pArchiveList->addArchive(planetData->mData[0]);
28 }
29 else {
30 const char* planetName = planetData->mPlanetName;
31
32 pArchiveList->addArchive(planetName);
33
34 const char* tmp_1 = planetData->mData[0];
35
36 if (tmp_1) {
37 pArchiveList->addArchive(tmp_1);
38 }
39
40 const char* tmp_2 = planetData->mData[1];
41
42 if (tmp_2) {
43 pArchiveList->addArchive(tmp_2);
44 }
45
46 const char* tmp_3 = planetData->mData[2];
47
48 if (tmp_3) {
49 pArchiveList->addArchive(tmp_3);
50 }
51
52 const char* tmp_4 = planetData->mData[3];
53
54 if (tmp_4) {
55 pArchiveList->addArchive(tmp_4);
56 }
57
58 const char* tmp_5 = planetData->mData[4];
59
60 if (tmp_5) {
61 pArchiveList->addArchive(tmp_5);
62 }
63
64 const char* asdf = planetData->mPlanetName;
65
66 for (int i = 0; i < 0xD; i++) {
67 if (MR::isEqualString(asdf, sUniquePlanetUniqueArchiveName[i]._0)) {
68 pArchiveList->addArchive(sUniquePlanetUniqueArchiveName[i]._4);
69 }
70 }
71 }
72}
73#endif
74
75void PlanetMapCreator::createPlanetMapDataTable(JMapInfo *pInfo) {
76 for (int i = 0; i < mTableCount; i++) {
77 PlanetMapData* data = new PlanetMapData();
78 mPlanetMapData[i] = data;
79 addTableData(pInfo, i);
80 }
81}
82
83void PlanetMapCreator::addTableData(const JMapInfo *pInfo, s32 idx) {
84 PlanetMapData* curData = mPlanetMapData[idx];
85 MR::getCsvDataStr(&curData->mPlanetName, pInfo, "PlanetName", idx);
86 makeSubModelName(&curData->mData[0], pInfo, idx, "LowFlag", "Low");
87 makeSubModelName(&curData->mData[1], pInfo, idx, "MiddleFlag", "Middle");
88 makeSubModelName(&curData->mData[2], pInfo, idx, "BloomFlag", "Bloom");
89 makeSubModelName(&curData->mData[3], pInfo, idx, "WaterFlag", "Water");
90 makeSubModelName(&curData->mData[4], pInfo, idx, "IndirectFlag", "Indirect");
91
92 for (int i = 0; i < 5; i++) {
93 if (curData->mData[i]) {
94 if (!MR::isExistModel(curData->mData[i])) {
95 curData->mData[i] = 0;
96 }
97 }
98 }
99
100 for (int i = 0; i < 8; i++) {
101 char data[0x20];
102 snprintf(data, 0x20, "ForceLowScenarioName%d", i);
103 MR::getCsvDataStr(&curData->mForceScenarioData[i], pInfo, data, idx);
104 }
105}
106
107PlanetMapData* PlanetMapCreator::getTableData(const char *pName) const {
108 for (int i = 0; i < mTableCount; i++) {
109 if (MR::isEqualString(pName, mPlanetMapData[i]->mPlanetName)) {
110 return mPlanetMapData[i];
111 }
112 }
113
114 return 0;
115}
116
117bool PlanetMapCreator::isScenarioForceLow(const PlanetMapData *pData) const {
118 bool isForce = isDataForceLow(pData);
119
120 if (!isForce) {
121 return false;
122 }
123
124 char name[0x40];
125 snprintf(name, 0x40, "%s_%d", MR::getCurrentStageName(), MR::getCurrentScenarioNo());
126
127 for (int i = 0; i < 8; i++) {
128 if (MR::isEqualString(pData->mForceScenarioData[i], "Low")) {
129 return false;
130 }
131
132 if (MR::isEqualString(name, pData->mForceScenarioData[i])) {
133 return true;
134 }
135 }
136
137 return false;
138}
139
140void PlanetMapCreatorFunction::makeArchiveList(NameObjArchiveListCollector *pArchiveList, const JMapInfoIter &rIter, const char *pName) {
141 reinterpret_cast<PlanetMapCreator*>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetMapCreator))->makeArchiveListPlanet(pArchiveList, rIter, pName);
142}
143
144// PlanetMapCreatorFunction::getPlanetMapCreator
145
146bool PlanetMapCreatorFunction::isLoadArchiveAfterScenarioSelected(const char *pArchive) {
147 PlanetMapCreator* creator = reinterpret_cast<PlanetMapCreator*>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetMapCreator));
148 bool doesHaveTableData = creator->getTableData(pArchive);
149
150 return (!doesHaveTableData) ? false : isDataForceLow(reinterpret_cast<PlanetMapCreator*>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetMapCreator))->getTableData(pArchive));
151
152 return false;
153}
154
155bool PlanetMapCreatorFunction::isRegisteredObj(const char *pArchive) {
156 PlanetMapCreator* creator = reinterpret_cast<PlanetMapCreator*>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetMapCreator));
157 return creator->getTableData(pArchive);
158}
159
160PlanetMapCreator::~PlanetMapCreator() {
161
162}
163
164// this is only here to generate the table until I match functions that use it
165const char* someFunction() {
166 return sUniquePlanetCreateFuncTable[0].mName;
167}
Stores archive names of NameObjs.
The most basic form of an object.
Definition NameObj.hpp:11