blob: 3ca33716a33010765b306ae9227c83fe39427918 (
plain)
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
82
83
84
85
86
87
88
|
#include "d/t/d_t_defeat_boss.h"
#include "common.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_DEFEAT_BOSS, dTgDefeatBoss_c, fProfile::TAG_DEFEAT_BOSS, 0x29E, 0, 0);
void dTgDefeatBoss_c::getDungeonFlagIndex(u32 &outFlagIdx) {
outFlagIdx = 0x3;
}
bool dTgDefeatBoss_c::checkDungeonFlag() {
u32 dungeonFlagIdx;
getDungeonFlagIndex(dungeonFlagIdx);
return DungeonflagManager::sInstance->getCounterOrFlag(dungeonFlagIdx, 8) != 0;
}
int dTgDefeatBoss_c::create() {
if (checkDungeonFlag()) {
return FAILED;
}
mSceneflagPolarity = getSceneflagPolarity();
if (getSceneflag() >= 0xFF) {
mSceneflagPolarity = -1;
}
mStoryflagPolarity = getStoryflagPolarity();
if (!StoryflagManager::sInstance->checkFlagValid(getStoryflag())) {
mStoryflagPolarity = -1;
}
if (mSceneflagPolarity == -1 && mStoryflagPolarity == -1) {
return FAILED;
}
return SUCCEEDED;
}
int dTgDefeatBoss_c::actorExecute() {
if (checkDungeonFlag()) {
switch (mSceneflagPolarity) {
case 0x0: {
SceneflagManager::sInstance->unsetFlag(mRoomID, getSceneflag());
} break;
case 0x1: {
SceneflagManager::sInstance->setFlag(mRoomID, getSceneflag());
} break;
}
switch (mStoryflagPolarity) {
case 0x0: {
StoryflagManager *pStoryflagMgr = StoryflagManager::sInstance;
pStoryflagMgr->unsetFlag(getStoryflag());
} break;
case 0x1: {
StoryflagManager *pStoryflagMgr = StoryflagManager::sInstance;
pStoryflagMgr->setFlag(getStoryflag());
} break;
}
fBase_c::deleteRequest();
}
return SUCCEEDED;
}
u16 dTgDefeatBoss_c::getSceneflag() {
return mParams & 0xff;
}
s32 dTgDefeatBoss_c::getSceneflagPolarity() {
return mParams >> 0x8 & 0x1;
}
u32 dTgDefeatBoss_c::getStoryflag() {
return mParams >> 9 & 0xffff;
}
s32 dTgDefeatBoss_c::getStoryflagPolarity() {
return (mParams >> 0x19) & 0x1;
}
|