SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
GameEventFlagStorage.cpp
1#include "Game/System/GameEventFlagStorage.hpp"
2#include "Game/System/GameEventFlagTable.hpp"
3#include "JSystem/JSupport/JSUMemoryOutputStream.hpp"
4
5GameEventFlagStorage::GameEventFlagStorage() {
6 mFlagBitArray = nullptr;
7 mFlagBitArray = new MR::BitArray(GameEventFlagTable::getTableSize());
8}
9
10void GameEventFlagStorage::set(const GameEventFlag *pFlag, bool flag_set) {
11 mFlagBitArray->set(GameEventFlagTable::getIndex(pFlag), flag_set);
12}
13
14bool GameEventFlagStorage::isOn(const GameEventFlag *pFlag) const {
15 return mFlagBitArray->isOn(GameEventFlagTable::getIndex(pFlag));
16}
17
18u32 GameEventFlagStorage::getSignature() const {
19 return 0x464C4731;
20}
21
22#ifdef NON_MATCHING
23// some bullshit use of r30 instead of r31 for absolutely no reason???
24s32 GameEventFlagStorage::serialize(u8 *pData, u32 size) const {
25 JSUMemoryOutputStream stream;
26 stream.setBuffer(pData, size);
27
28 for (GameEventFlagIter iter = GameEventFlagTable::getBeginIter(); !iter.isEnd(); iter.goNext()) {
29 if (!(iter.getFlag()->_5 & 0x1)) {
30 GameEventFlagAccessor accessor(iter.getFlag());
31 s16 hash = MR::getHashCode(accessor.getName()) & 0x7FFF;
32 s16 data = hash | (mFlagBitArray->isOn(GameEventFlagTable::getIndex(iter.getFlag())) ? 0x8000 : 0);
33 stream.write(&data, 2);
34 }
35 }
36
37 return stream.mPosition;
38}
39#endif
40
41// GameEventFlagStorage::deserialize
42
43void GameEventFlagStorage::initializeData() {
44 for (int i = 0; i < mFlagBitArray->mArraySize; i++) {
45 mFlagBitArray->set(i, false);
46 }
47}
48
49u32 GameEventFlagStorage::makeHeaderHashCode() const {
50 return MR::getHashCode("2bytes/flag");
51}