1#include "Game/Scene/StageDataHolder.hpp"
2#include "Game/Scene/StageResourceLoader.hpp"
3#include "Game/System/ScenarioDataParser.hpp"
4#include "JSystem/JKernel/JKRArchive.hpp"
12 u32 commonLayer = ScenarioDataFunction::getCurrentCommonLayers(_A8);
13 initLayerJmpInfo(&_EC,
"/jmp/Placement",
"/jmp/MapParts", commonLayer);
16 createLocalStageDataHolder(_EC, 1);
19 initPlacementInfoOrderedCommon();
23void StageDataHolder::initAfterScenarioSelected() {
24 s32 curScenarioNo = MR::getCurrentScenarioNo();
25 u32 curLayers = ScenarioDataFunction::getCurrentScenarioLayers(_A8, curScenarioNo);
28 curLayers |= ScenarioDataFunction::getCurrentCommonLayers(_A8);
31 initLayerJmpInfo(&_F4,
"/jmp/Placement",
"/jmp/MapParts", curLayers);
32 createLocalStageDataHolder(_F4,
false);
34 for (s32 i = 0; i < mStageDataHolderCount; i++) {
35 mStageDataArray[i]->initAfterScenarioSelected();
39 initPlacementInfoOrderedScenario();
42 initAllLayerJmpInfo(&mPlacementObjs,
"/jmp/Placement",
"/jmp/MapParts");
43 initAllLayerJmpInfo(&mStartObjs,
"/jmp/Start");
45 s32 generalPosFileCount = mArchive->countFile(
"/jmp/GeneralPos");
46 generalPosFileCount -= 2;
47 s32 isValidGeneralPosCount = (generalPosFileCount > 0) ? generalPosFileCount : 0;
49 if (isValidGeneralPosCount) {
50 initAllLayerJmpInfo(&mGeneralPosObjs,
"/jmp/GeneralPos");
53 s32 childObjFileCount = mArchive->countFile(
"/jmp/ChildObj");
54 childObjFileCount -= 2;
55 s32 isValidChildObjCount = (childObjFileCount > 0) ? childObjFileCount : 0;
57 if (isValidChildObjCount) {
58 initAllLayerJmpInfo(&mChildObjs,
"/jmp/ChildObj");
61 initJmpInfo(&mListObjs,
"/jmp/List");
62 initJmpInfo(&mPathObjs,
"/jmp/Path");
66void StageDataHolder::requestFileLoadCommon() {
67 if (!MR::tryRequestLoadStageResource()) {
68 _FC->requestFileLoad();
69 _100->requestFileLoad();
73void StageDataHolder::requestFileLoadScenario() {
74 if (MR::isLoadStageScenarioResource()) {
75 _104->requestFileLoad();
76 _108->requestFileLoad();
77 _10C->requestFileLoad();
81void StageDataHolder::initPlacement() {
82 MR::setInitializeStatePlacementPlayer();
84 MR::setInitializeStatePlacementHighPriority();
86 _104->initPlacement();
87 MR::setInitializeStatePlacement();
88 _100->initPlacement();
89 _108->initPlacement();
90 _10C->initPlacement();
94JMapInfo StageDataHolder::getCommonPathPointInfo(
const JMapInfo **pOut,
int idx)
const {
95 JMapInfo* inf = findJmpInfoFromArray(&mPathObjs,
"CommonPathInfo");
96 JMapInfoIter pathIter = inf->findElement<s32>(
"l_id", idx, 0);
97 return getCommonPathPointInfoFromRailDataIndex(pOut, pathIter._4);
101s32 StageDataHolder::getCurrentStartCameraId()
const {
102 JMapInfoIter marioIter = makeCurrentMarioJMapInfoIter();
104 bool ret = marioIter.mInfo->getValue<s32>(marioIter._4,
"Camera_id", &cameraID);
113void StageDataHolder::getStartCameraIdInfoFromStartDataIndex(
JMapIdInfo *pInfo,
int startDataIdx)
const {
115 JMapInfoIter startIter = getStartJMapInfoIterFromStartDataIndex(startDataIdx);
118 copy.mInfo->getValue<s32>(startIter._4,
"Camera_id", &cameraID);
119 pInfo->initalize(cameraID, copy);
124 s32 data = (s32)rIter.mInfo->mData + rIter.mInfo->mData->mDataOffset + rIter.mInfo->mData->_C * rIter._4;
126 if (_E4 > data || data >= _E8) {
127 for (s32 i = 0; i < mStageDataHolderCount; i++) {
128 const StageDataHolder* holder = mStageDataArray[i]->findPlacedStageDataHolder(rIter);
142const StageDataHolder* StageDataHolder::getStageDataHolderFromZoneId(
int zoneID)
const {
147 for (s32 i = 0; i < mStageDataHolderCount; i++) {
149 s32 curZoneID = holder->mZoneID;
151 if (zoneID == curZoneID) {
159const StageDataHolder* StageDataHolder::getStageDataHolderFromZoneId(
int zoneID) {
160 return getStageDataHolderFromZoneId(zoneID);
163bool StageDataHolder::isPlacedZone(
int zoneID)
const {
168 for (s32 i = 0; i < mStageDataHolderCount; i++) {
169 if (zoneID != mStageDataArray[i]->mZoneID) {
179const char* StageDataHolder::getJapaneseObjectName(
const char *pName)
const {
180 const JMapInfoIter englishName = mObjNameTbl->findElement<
const char *>(
"en_name", pName, 0);
188 const char* japaneseName;
189 last.mInfo->getValue<
const char *>(englishName._4,
"jp_name", &japaneseName);
194void* StageDataHolder::getStageArchiveResource(
const char *pName) {
195 return mArchive->getResource(0x3F3F3F3F, pName);
198s32 StageDataHolder::getStageArchiveResourceSize(
void *pData) {
199 return mArchive->getResSize(pData);
202void StageDataHolder::initTableData() {
203 JKRArchive* archive = (JKRArchive*)MR::receiveArchive(
"/StageData/ObjTableTable.arc");
204 void* tableFile = archive->getResource(0x3F3F3F3F,
"ObjNameTable.tbl");
207 mObjNameTbl->attach(tableFile);
212 while (inf != pInfoArr->mArr + pInfoArr->mMaxSize) {
213 if (MR::isEqualStringCase(inf->getName(), pName)) {
223JMapInfoIter StageDataHolder::getStartJMapInfoIterFromStartDataIndex(
int idx_)
const {
226 JMapInfo* pEnd = mStartObjs.mArr + mStartObjs.mMaxSize;
234 const JMapData * curData = inf->mData;
237 curIdx = isValid ? curData->mNumEntries : 0;
246 curIdx = isValid ? curData->mNumEntries : 0;
253 for (s32 i = 0; i < mStageDataHolderCount; i++) {
254 locHolder = mStageDataArray[i];
255 int startPosNum = locHolder->getStartPosNum();
257 if (idx < startPosNum) {
258 return locHolder->getStartJMapInfoIterFromStartDataIndex(idx);
269void StageDataHolder::calcDataAddress() {
272 updateDataAddress(&mPlacementObjs);
273 updateDataAddress(&mStartObjs);
274 updateDataAddress(&mGeneralPosObjs);
275 updateDataAddress(&mChildObjs);
276 updateDataAddress(&mPathObjs);
279void StageDataHolder::calcPlacementMtx(
const JMapInfoIter &rIter) {
281 rIter.getValue<f32>(
"pos_x", &pos.x);
282 rIter.getValue<f32>(
"pos_y", &pos.y);
283 rIter.getValue<f32>(
"pos_z", &pos.z);
286 rIter.getValue<f32>(
"dir_x", &rot.x);
287 rIter.getValue<f32>(
"dir_y", &rot.y);
288 rIter.getValue<f32>(
"dir_z", &rot.z);
290 MR::makeMtxTR(mPlacementMtx, pos, rot);
296 while (inf != pInfoArray->mArr + pInfoArray->mMaxSize) {
297 if ((u32)inf->mData < _E4) {
298 _E4 = (u32)inf->mData;
301 u32 addr = (inf->mData->mEntrySize * inf->mData->mNumEntries) + ((s32)inf->mData + inf->mData->mDataOffset);
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.