SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
GameSystemStationedArchiveLoader.cpp
1#include "Game/System/GameSystemStationedArchiveLoader.hpp"
2#include "Game/Util.hpp"
3
4bool ConditionIfIsNotPlayer::isExecute(const MR::StationedFileInfo *pInfo) const {
5 bool result = false;
6
7 if (pInfo->mLoadType != 2 && pInfo->mLoadType != 3) {
8 result = true;
9 }
10
11 return result;
12}
13
14ConditionUsePlayerHeap::ConditionUsePlayerHeap() {
15 mNapaHeap = nullptr;
16 mGDDRHeap = nullptr;
17 mIsDataMario = 1;
18}
19
20bool ConditionUsePlayerHeap::isExecute(const MR::StationedFileInfo *pInfo) const {
21 s32 type = 3;
22
23 if (mIsDataMario != 0) {
24 type = 2;
25 }
26
27 return pInfo->mLoadType == type;
28}
29
30JKRExpHeap* ConditionUsePlayerHeap::getProperHeap(const MR::StationedFileInfo *pInfo) const {
31 switch (pInfo->mHeapType) {
32 case 0:
33 return mNapaHeap;
34 break;
35 case 1:
36 return mGDDRHeap;
37 break;
38 case 2:
39 return nullptr;
40 break;
41 }
42
43 return nullptr;
44}
45
46PlayerHeapHolder::PlayerHeapHolder() {
47 mCondition = nullptr;
48 mNapaHeap = nullptr;
49 mGDDRHeap = nullptr;
50 mIsDataMario = true;
52 mNapaHeap = PlayerHeapHolder::createHeap(0x500000, (JKRHeap*)MR::getStationedHeapNapa());
53 JKRExpHeap* gddr = PlayerHeapHolder::createHeap(0x500000, (JKRHeap*)MR::getStationedHeapGDDR3());
54 mGDDRHeap = gddr;
55 condition->mNapaHeap = mNapaHeap;
56 condition->mGDDRHeap = gddr;
57 mCondition = condition;
58 condition->mIsDataMario = mIsDataMario;
59}
60
61void PlayerHeapHolder::adjust() {
62 JKRExpHeap* napa = mNapaHeap;
63 if (!napa->isEmpty()) {
64 napa->alloc(0x10000, nullptr);
65 }
66
67 JKRExpHeap* gddr = mGDDRHeap;
68 if (!gddr->isEmpty()) {
69 gddr->alloc(0x10000, nullptr);
70 }
71
72 MR::adjustHeapSize(mNapaHeap, nullptr);
73 MR::adjustHeapSize(mGDDRHeap, nullptr);
74}
75
76void PlayerHeapHolder::dispose() {
77 MR::removeResourceAndFileHolderIfIsEqualHeap(mNapaHeap);
78 MR::removeResourceAndFileHolderIfIsEqualHeap(mGDDRHeap);
79
80 if (mNapaHeap->mSize != 0) {
81 mNapaHeap->freeAll();
82 }
83
84 if (mGDDRHeap->mSize != 0) {
85 mGDDRHeap->freeAll();
86 }
87}
88
89void PlayerHeapHolder::setIsDataMario(bool data) {
90 mIsDataMario = data;
91 mCondition->mIsDataMario = data;
92}
93
94JKRExpHeap* PlayerHeapHolder::createHeap(u32 size, JKRHeap* pParent) {
95 if (pParent->getMaxAllocatableSize(0x10) < size) {
96 size = -1;
97 }
98
99 return JKRExpHeap::create(size, pParent, true);
100}