1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include "d/flag/enemyflag_manager.h"
EnemyflagManager *EnemyflagManager::sInstance = nullptr;
u16 EnemyflagManager::sEnemyDefeatFlags[4096] = {};
/* 0x800BEAC0 */
void EnemyflagManager::clearSavedFlags() {
u16 empty[0x1000];
memset(empty, 0, 0x2000);
FileManager::GetInstance()->setEnemyDefeatFlags(empty, 0, 0x1000);
}
/* 0x800BEB00 */
bool EnemyflagManager::checkUncommittedFlag(u16 flag) {
if (checkIsValidFlag(flag)) {
return mFlagHelper.checkFlag(flag / 16, flag % 16, mFlagSpace.getFlagPtrUnchecked(), mFlagSpace.mCount);
} else {
return false;
}
}
/* 0x800BEB80 */
EnemyflagManager::EnemyflagManager()
: CommittableFlagManager(false), mFlagSpace(sEnemyDefeatFlags, ARRAY_LENGTH(sEnemyDefeatFlags)) {}
/* 0x800BEBC0 */
void EnemyflagManager::init() {
mSceneIndex = 0;
clearAll();
}
/* 0x800BEBD0 */
void EnemyflagManager::copyFromSave(u16 sceneIndex) {
mSceneIndex = sceneIndex;
u16 count = mFlagSpace.mCount;
u16 *flags = FileManager::GetInstance()->getEnemyDefeatFlagsConst();
mFlagSpace.copyFromSaveFile(flags, 0, count);
}
/* 0x800BEC30 */
void EnemyflagManager::updateFlagIndex(u16 sceneIndex) {
if (mSceneIndex == sceneIndex) {
return;
}
mSceneIndex = sceneIndex;
clearAll();
}
/* 0x800BEC50 */
void EnemyflagManager::clearAll() {
clearSavedFlags();
mFlagSpace.unsetAll();
}
/* 0x800BEC90 */
bool EnemyflagManager::checkIsValidFlag(u16 flag) {
return flag < 0xFFFF;
}
/* 0x800BECB0 */
bool EnemyflagManager::checkFlag(u16 flag) {
if (!checkIsValidFlag(flag)) {
return false;
} else {
u16 *pData = FileManager::GetInstance()->getEnemyDefeatFlagsConst();
return mFlagHelper.checkFlag(flag / 16, flag % 16, pData, getFlagCount());
}
}
/* 0x800BED50 */
u16 EnemyflagManager::getFlagCount() const {
return 0x1000;
}
/* 0x800BED60 */
void EnemyflagManager::setFlag(u16 flag) {
if (checkUncommittedFlag2(flag) != 1 && checkIsValidFlag(flag)) {
mFlagHelper.setFlag(flag / 16, flag % 16, mFlagSpace.getFlagPtrChecked(), mFlagSpace.mCount);
setNeedsCommit(true);
}
}
|