SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
AstroMapObjFunction.cpp
1#include "Game/MapObj/AstroMapObjFunction.hpp"
2#include "Game/Demo/AstroDemoFunction.hpp"
3#include <cstdio>
4
5namespace {
6 s32 getNumGrandStarForRevival(const char *pName, s32 domeId) {
7 const char* modelName = AstroMapObjFunction::getModelName(pName, domeId);
8
9 if ( MR::isEqualString(modelName, "AstroDomeEntranceObservatory") )
10 return 1;
11 if ( MR::isEqualString(modelName, "AstroDomeEntranceWell") )
12 return 1;
13 if ( MR::isEqualString(modelName, "AstroBaseA") )
14 return 1;
15 if ( MR::isEqualString(modelName, "AstroBaseCenterB") )
16 return 1;
17 if ( MR::isEqualString(modelName, "AstroRotateStepA") )
18 return 1;
19 if ( MR::isEqualString(modelName, "AstroDecoratePartsA") )
20 return 1;
21 if ( MR::isEqualString(modelName, "AstroDecoratePartsGearA") )
22 return 1;
23 if ( MR::isEqualString(modelName, "AstroParking") )
24 return 1;
25 if ( MR::isEqualString(modelName, "AstroDomeEntranceKitchen") )
26 return 3;
27 if ( MR::isEqualString(modelName, "AstroDomeEntranceBedRoom") )
28 return 3;
29 if ( MR::isEqualString(modelName, "AstroBaseB") )
30 return 3;
31 if ( MR::isEqualString(modelName, "AstroBaseKitchen") )
32 return 3;
33 if ( MR::isEqualString(modelName, "AstroLibrary") )
34 return 3;
35 if ( MR::isEqualString(modelName, "AstroCountDownPlate") )
36 return 5;
37 if ( MR::isEqualString(modelName, "AstroDomeEntranceMachine") )
38 return 5;
39 if ( MR::isEqualString(modelName, "AstroDomeEntranceTower") )
40 return 5;
41 if ( MR::isEqualString(modelName, "AstroBaseC") )
42 return 5;
43 if ( MR::isEqualString(modelName, "AstroBaseCenterA") )
44 return 5;
45 if ( MR::isEqualString(modelName, "AstroBaseCenterTop") )
46 return 5;
47 if ( MR::isEqualString(modelName, "AstroRotateStepB") )
48 return 5;
49
50 s32 res = -1;
51 if ( domeId != -1 )
52 res = domeId;
53 return res;
54 }
55
56 s32 getNumGrandStarForOpen(const char *pName, s32 domeId) {
57 s32 num = -1;
58
59 if (domeId != -1) {
60 num = domeId;
61 }
62
63 return num;
64 }
65};
66
67void AstroMapObjFunction::makeArchiveListFromArg0(NameObjArchiveListCollector *pList, const JMapInfoIter &rIter) {
68 s32 domeId = -1;
69 MR::getJMapInfoArg0NoInit(rIter, &domeId);
70 s32 domeIdx = domeId;
71 const char* objName;
72 MR::getObjectName(&objName, rIter);
73 const char* modelName = AstroMapObjFunction::getModelName(objName, domeIdx);
74 pList->addArchive(modelName);
75
76 if (MR::isEqualString(modelName, "AstroDomeEntrance")) {
77 pList->addArchive("GalaxyNamePlate");
78 pList->addArchive(cAstroNamePlateArcName);
79 }
80}
81
82void AstroMapObjFunction::makeArchiveListAstroNamePlate(NameObjArchiveListCollector *pList, const JMapInfoIter &rIter) {
83 pList->addArchive("GalaxyNamePlate");
84 pList->addArchive(cAstroNamePlateArcName);
85}
86
87bool AstroMapObjFunction::isAlreadyRevival(const char *pName, s32 domeId) {
88 if (MR::isEqualString(pName, "AstroChildRoom")) {
89 return MR::isOnGameEventFlagChildsRoom();
90 }
91
92 if (MR::isEqualString(pName, "TridentPlanet")) {
93 return MR::isOnGameEventFlagGreenDriver();
94 }
95
96 s32 openNum = AstroDemoFunction::getOpenedAstroDomeNum();
97 return openNum >= ::getNumGrandStarForRevival(pName, domeId);
98}
99
100bool AstroMapObjFunction::isEnableRevival(const char *pName, s32 domeId) {
101 if (MR::isEqualString(pName, "AstroChildRoom")) {
102 return true;
103 }
104
105 s32 openNum = AstroDemoFunction::getOpenedAstroDomeNum();
106 return ::getNumGrandStarForRevival(pName, domeId) == openNum + 1;
107}
108
109bool AstroMapObjFunction::isAlreadyOpen(const char *pName, s32 domeId) {
110 if (MR::isEqualString(pName, "AstroLibrary")) {
111 return MR::isOnGameEventFlagLibraryRoom();
112 }
113
114 s32 openNum = AstroDemoFunction::getOpenedAstroDomeNum();
115
116 return openNum >= ::getNumGrandStarForOpen(pName, domeId);
117}
118
119bool AstroMapObjFunction::isEnableOpen(const char *pName, s32 domeId) {
120 s32 openNum = AstroDemoFunction::getOpenedAstroDomeNum();
121 return ::getNumGrandStarForOpen(pName, domeId) == openNum + 1;
122}
123
124s32 AstroMapObjFunction::getDomeIdFromArg0(const JMapInfoIter &rIter) {
125 s32 domeId = -1;
126 MR::getJMapInfoArg0NoInit(rIter, &domeId);
127 return domeId;
128}
129
130const char* AstroMapObjFunction::getModelName(const char *pName, s32 domeIdx) {
131 const char** tbl = nullptr;
132
133 if (MR::isEqualString(pName, "AstroDome")) {
134 tbl = cAstroDomeNameTable;
135 }
136 else if (MR::isEqualString(pName, "AstroDomeSky")) {
137 tbl = cAstroDomeSkyNameTable;
138 }
139 else if (MR::isEqualString(pName, "AstroDomeEntrance")) {
140 tbl = cAstroDomeEntranceNameTable;
141 }
142 else if (MR::isEqualString(pName, "AstroStarPlate")) {
143 tbl = cAstroStarPlateNameTable;
144 }
145
146 if (tbl != nullptr) {
147 return tbl[domeIdx - 1];
148 }
149 else {
150 return pName;
151 }
152}
153
154#ifndef NON_MATCHING
155const JMapInfo* AstroMapObjFunction::createAstroNamePlateParser() {
156 char buf[0x40];
157 snprintf(buf, 0x40, "%s.arc", cAstroNamePlateArcName);
158 return MR::createCsvParser(buf, cAstroNamePlateFileName);
159}
160#endif
161
162// AstroMapObjFunction::trySetAndShowNamePlate
163// AstroMapObjFunction::tryRegisterMultiDemoAndFunction
164// AstroMapObjFunction::initilizePeculiar
Stores archive names of NameObjs.