blob: 5e815bde0bc137ead2a1dc8e16328a92a3a73787 (
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
|
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
extern "C" {
#include "overlays/actors/ovl_Dm_Char01/z_dm_char01.h"
}
void Rando::ActorBehavior::InitDmChar01Behavior() {
bool shouldRegisterOnSceneInit = IS_RANDO && RANDO_SAVE_OPTIONS[RO_ACCESS_DUNGEONS] == RO_ACCESS_DUNGEONS_OPEN;
bool shouldRegisterVB = IS_RANDO && RANDO_SAVE_OPTIONS[RO_ACCESS_DUNGEONS] >= RO_ACCESS_DUNGEONS_FORM_OR_SONG &&
RANDO_SAVE_OPTIONS[RO_ACCESS_DUNGEONS] <= RO_ACCESS_DUNGEONS_SONG_ONLY;
COND_VB_SHOULD(VB_OPEN_WOODFALL_FROM_SONG, shouldRegisterVB, {
DmChar01* dmChar01 = va_arg(args, DmChar01*);
Player* player = GET_PLAYER(gPlayState);
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) {
return;
}
bool hasSongAccess = (gPlayState->msgCtx.ocarinaMode == OCARINA_MODE_EVENT &&
gPlayState->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA);
bool hasFormAccess =
(player->transformation == PLAYER_FORM_DEKU && (gPlayState->msgCtx.ocarinaMode == OCARINA_MODE_EVENT ||
gPlayState->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE));
switch (RANDO_SAVE_OPTIONS[RO_ACCESS_DUNGEONS]) {
case RO_ACCESS_DUNGEONS_FORM_OR_SONG:
*should = hasSongAccess || hasFormAccess;
break;
case RO_ACCESS_DUNGEONS_FORM_ONLY:
*should = hasFormAccess;
break;
case RO_ACCESS_DUNGEONS_SONG_ONLY:
*should = hasSongAccess;
break;
default:
break;
}
});
COND_HOOK(OnFlagSet, shouldRegisterVB, [](FlagType flagType, u32 flag) {
if (flagType == FLAG_WEEK_EVENT_REG && flag == WEEKEVENTREG_20_01) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
gPlayState->msgCtx.ocarinaMode = OCARINA_MODE_END;
Message_CloseTextbox(gPlayState);
}
});
COND_ID_HOOK(OnSceneInit, SCENE_21MITURINMAE, shouldRegisterOnSceneInit,
[](s16 sceneId, s8 spawnNum) { SET_WEEKEVENTREG(WEEKEVENTREG_20_01); });
}
|