mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-23 22:45:05 -04:00
2051 lines
63 KiB
C++
2051 lines
63 KiB
C++
#include "d/dolzel.h" // IWYU pragma: keep
|
|
|
|
#include "JSystem/JAudio2/JASBasicWaveBank.h"
|
|
#include "JSystem/JAudio2/JAUSectionHeap.h"
|
|
#include "JSystem/JAudio2/JAUSoundTable.h"
|
|
#include "Z2AudioLib/Z2SceneMgr.h"
|
|
#include "Z2AudioLib/Z2Param.h"
|
|
#include "Z2AudioLib/Z2SeMgr.h"
|
|
#include "Z2AudioLib/Z2SeqMgr.h"
|
|
#include "Z2AudioLib/Z2SoundMgr.h"
|
|
#include "Z2AudioLib/Z2SoundObjMgr.h"
|
|
#include "Z2AudioLib/Z2StatusMgr.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include <cstring>
|
|
#include "Z2AudioLib/SpotName.h"
|
|
|
|
Z2SceneMgr::Z2SceneMgr() : JASGlobalInstance<Z2SceneMgr>(true) {
|
|
sceneNum = -1;
|
|
BGM_ID = -1;
|
|
roomNum = -1;
|
|
requestSeWave_1 = 0;
|
|
loadedSeWave_1 = 0;
|
|
requestSeWave_2 = 0;
|
|
loadedSeWave_2 = 0;
|
|
requestBgmWave_1 = 0;
|
|
loadedBgmWave_1 = 0;
|
|
requestBgmWave_2 = 0;
|
|
loadedBgmWave_2 = 0;
|
|
requestDemoWave = 0;
|
|
loadedDemoWave = 0;
|
|
field_0x18 = 0;
|
|
field_0x19 = 0;
|
|
field_0x1a = false;
|
|
field_0x1b = false;
|
|
sceneExist = 0;
|
|
inGame = 0;
|
|
inDarkness_ = false;
|
|
load1stWait = 0;
|
|
}
|
|
|
|
void Z2SceneMgr::setInDarkness(bool inDarkness) {
|
|
OS_REPORT("[Z2SceneMgr::setInDarkness] inDarkness = %d\n", inDarkness);
|
|
|
|
inDarkness_ = inDarkness;
|
|
if (!inDarkness) {
|
|
Z2GetSoundMgr()->resetFilterAll();
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::setSceneExist(bool isSceneExist) {
|
|
sceneExist = isSceneExist;
|
|
timer = 0;
|
|
|
|
JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr();
|
|
|
|
if (isSceneExist) {
|
|
inGame = true;
|
|
|
|
if (requestDemoWave == 0x85) {
|
|
seMgr->getCategory(9)->getParams()->moveVolume(0.0f, 0);
|
|
} else if (requestDemoWave == 0x7F) {
|
|
Z2GetSeMgr()->seMoveVolumeAll(0.0f, 0);
|
|
} else {
|
|
seMgr->getCategory(9)->getParams()->moveVolume(1.0f, 33);
|
|
}
|
|
} else {
|
|
seMgr->getCategory(9)->getParams()->moveVolume(0.0f, 180);
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::setFadeOutStart(u8 fadeType) {
|
|
OS_REPORT("[Z2SceneMgr::setFadeOutStart] fadeType = %d\n", fadeType);
|
|
|
|
setSceneExist(false);
|
|
Z2GetSeqMgr()->bgmAllMute(33, 3.0f / 10.0f);
|
|
Z2GetSeMgr()->seMoveVolumeAll(0.0f, 33);
|
|
Z2GetSeqMgr()->setBattleBgmOff(true);
|
|
load1stWait = 40;
|
|
timer = -1;
|
|
}
|
|
|
|
void Z2SceneMgr::setFadeInStart(u8 fadeType) {
|
|
OS_REPORT("[Z2SceneMgr::setFadeInStart] fadeType = %d\n", fadeType);
|
|
|
|
if (requestDemoWave == 0x7f) {
|
|
Z2GetSeMgr()->seMoveVolumeAll(0.0f, 0);
|
|
} else {
|
|
Z2GetSeMgr()->seMoveVolumeAll(1.0f, 33);
|
|
|
|
if (requestDemoWave == 0x85) {
|
|
Z2GetSoundMgr()->getSeMgr()->getCategory(9)->getParams()->moveVolume(0.0f, 0);
|
|
}
|
|
}
|
|
|
|
Z2GetSeqMgr()->setTwilightGateVol(1.0f);
|
|
Z2GetStatusMgr()->menuOut();
|
|
|
|
if (!field_0x1a) {
|
|
Z2GetSeqMgr()->bgmAllUnMute(33);
|
|
}
|
|
|
|
inGame = true;
|
|
}
|
|
|
|
void Z2SceneMgr::setSceneName(char* spot, s32 room, s32 layer) {
|
|
OS_REPORT("[Z2SceneMgr::setSceneName] spot = %s, room = %d, layer = %d\n", spot, room, layer);
|
|
JAISoundID bgm_id = -1;
|
|
JAISound* sound;
|
|
|
|
int spotNo = 0;
|
|
|
|
u8 se_wave1 = 0;
|
|
u8 se_wave2 = 0;
|
|
u8 bgm_wave1 = 0;
|
|
u8 bgm_wave2 = 0;
|
|
u8 demo_wave = 0;
|
|
|
|
bool bVar6 = false;
|
|
bool height_vol_mod = false;
|
|
bool field_bgm_play = false;
|
|
bool time_proc_vol_mod = false;
|
|
bool bVar2 = false;
|
|
field_0x1b = false;
|
|
|
|
f32 fVar1 = -1.0f;
|
|
|
|
Z2GetSeqMgr()->resetBattleBgmParams();
|
|
Z2GetSeqMgr()->setWindStoneVol(1.0f, 0);
|
|
Z2GetSeqMgr()->setTwilightGateVol(1.0f);
|
|
Z2GetSeMgr()->resetCrowdSize();
|
|
Z2GetSoundObjMgr()->setGhostEnemyState(0);
|
|
Z2GetSeMgr()->resetModY();
|
|
|
|
if (Z2GetStatusMgr()->getDemoStatus() == 8) {
|
|
Z2GetStatusMgr()->setDemoName("force_end");
|
|
}
|
|
|
|
if (spot != NULL) {
|
|
for (spotNo = 0; spotNo < ARRAY_SIZE(sSpotName); spotNo++) {
|
|
if (strcmp(spot, sSpotName[spotNo]) == 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (spotNo == ARRAY_SIZE(sSpotName)) {
|
|
spotNo = Z2SCENE_NONE;
|
|
}
|
|
}
|
|
|
|
switch (spotNo) {
|
|
case Z2SCENE_ENEMY_TEST:
|
|
bgm_wave2 = 2;
|
|
if (room < 30) {
|
|
se_wave1 = 0x8a;
|
|
} else {
|
|
se_wave1 = 0x8b;
|
|
}
|
|
break;
|
|
case Z2SCENE_ORDON_RANCH:
|
|
if (layer == 1) {
|
|
if (dComIfGs_isSaveSwitch(0x67)) {
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
} else {
|
|
if (layer == 8) {
|
|
demo_wave = 0x5c;
|
|
}
|
|
bgm_id = Z2BGM_RANCH;
|
|
bgm_wave1 = 1;
|
|
bgm_wave2 = 2;
|
|
time_proc_vol_mod = true;
|
|
}
|
|
|
|
se_wave1 = 0x26;
|
|
se_wave2 = 0x25;
|
|
field_0x1b = true;
|
|
break;
|
|
case Z2SCENE_ORDON_VILLAGE:
|
|
field_0x1b = true;
|
|
se_wave1 = 0x26;
|
|
|
|
if (room == 0) {
|
|
se_wave2 = 0x27;
|
|
switch (layer) {
|
|
case 1:
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
break;
|
|
case 8:
|
|
bgm_id = 0x2000011;
|
|
demo_wave = 0x64;
|
|
break;
|
|
case 10:
|
|
case 11:
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
break;
|
|
default:
|
|
bgm_id = Z2BGM_TOAL_VILLEGE;
|
|
bgm_wave1 = 3;
|
|
bgm_wave2 = 4;
|
|
time_proc_vol_mod = true;
|
|
break;
|
|
}
|
|
} else if (room == 1) {
|
|
se_wave2 = 0x28;
|
|
switch (layer) {
|
|
case 1:
|
|
field_0x1b = false;
|
|
if (dComIfGs_isSaveSwitch(0x67)) {
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
break;
|
|
case 12:
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
break;
|
|
case 5:
|
|
case 8:
|
|
bgm_id = Z2BGM_EVENT01;
|
|
bgm_wave1 = 5;
|
|
break;
|
|
case 9:
|
|
demo_wave = 0x5c;
|
|
break;
|
|
case 3:
|
|
bVar2 = true;
|
|
if (!dComIfGs_isSaveSwitch(0xa)) {
|
|
break;
|
|
}
|
|
// fallthrough
|
|
case 4:
|
|
/* dSv_event_flag_c::F_0014 - Ordon Village - sword tutorial ends */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[18])
|
|
/* dSv_event_flag_c::F_0625 - Faron Woods - Saved Talo and a monkey */
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[625]))
|
|
{
|
|
bgm_wave1 = 0x55;
|
|
/* dSv_event_flag_c::F_0094 - Ordon Village - Talo went after the monkey */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[194])) {
|
|
bgm_id = Z2BGM_EVENT05;
|
|
}
|
|
break;
|
|
}
|
|
// fallthrough
|
|
default:
|
|
bgm_id = Z2BGM_TOAL_VILLEGE;
|
|
bgm_wave1 = 3;
|
|
time_proc_vol_mod = true;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_ORDON_INTERIOR:
|
|
se_wave1 = 0x26;
|
|
|
|
switch (room) {
|
|
case 0:
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
bgm_wave2 = 9;
|
|
se_wave2 = 0x2a;
|
|
break;
|
|
case 1:
|
|
if (layer == 0) {
|
|
/* dSv_event_flag_c::F_0038 - Ordon Village - Opening (2nd day) cat returns home */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[136])) {
|
|
bgm_id = Z2BGM_SHOP01;
|
|
} else {
|
|
bgm_id = Z2BGM_SHOP02;
|
|
}
|
|
bgm_wave1 = 7;
|
|
} else if (layer == 2) {
|
|
/* dSv_event_flag_c::M_020 - Cutscene - [cutscene: ] Colin kidnapped : ON once watched */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[53])) {
|
|
bgm_id = Z2BGM_SHOP01;
|
|
bgm_wave1 = 7;
|
|
} else {
|
|
bgm_id = Z2BGM_ROOM_2;
|
|
bgm_wave1 = 0x35;
|
|
}
|
|
}
|
|
se_wave2 = 0x29;
|
|
break;
|
|
case 2:
|
|
if (layer == 0 || layer == 3) {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
} else if (layer == 1) {
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(1);
|
|
} else if (layer == 2) {
|
|
/* dSv_event_flag_c::M_020 - Cutscene - [cutscene: ] Colin kidnapped : ON once watched */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[53])) {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
} else {
|
|
bgm_id = Z2BGM_ROOM_2;
|
|
bgm_wave1 = 0x35;
|
|
}
|
|
}
|
|
se_wave2 = 0x2c;
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
case 7:
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
break;
|
|
case 5:
|
|
if (layer == 0) {
|
|
if (dComIfGs_isSaveSwitch(0x67)) {
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(1);
|
|
} else {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
}
|
|
} else {
|
|
/* dSv_event_flag_c::M_020 - Cutscene - [cutscene: ] Colin kidnapped : ON once watched */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[53])) {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
} else {
|
|
bgm_id = Z2BGM_ROOM_2;
|
|
bgm_wave1 = 0x35;
|
|
}
|
|
}
|
|
se_wave2 = 0x2b;
|
|
}
|
|
field_0x1b = true;
|
|
break;
|
|
case Z2SCENE_ORDON_SPRING:
|
|
se_wave1 = 0x26;
|
|
se_wave2 = 0x2d;
|
|
|
|
switch (layer) {
|
|
case 4:
|
|
field_0x1b = false;
|
|
bVar2 = true;
|
|
if (dComIfGs_isSaveSwitch(0x67)) {
|
|
bgm_id = Z2BGM_TOAL_NIGHT;
|
|
bgm_wave1 = 6;
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
break;
|
|
case 7:
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
break;
|
|
case 8:
|
|
demo_wave = 0x65;
|
|
break;
|
|
case 10:
|
|
demo_wave = 0x69;
|
|
break;
|
|
case 9:
|
|
case 11:
|
|
demo_wave = 0x6a;
|
|
break;
|
|
case 12:
|
|
demo_wave = 0x85;
|
|
break;
|
|
case 13:
|
|
case 14:
|
|
demo_wave = 0x5c;
|
|
break;
|
|
case 3:
|
|
/* dSv_event_flag_c::F_0014 - Ordon Village - sword tutorial ends */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[18])
|
|
/* dSv_event_flag_c::F_0625 - Faron Woods - Saved Talo and a monkey */
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[625]))
|
|
{
|
|
bgm_id = Z2BGM_EVENT05;
|
|
bgm_wave1 = 0x55;
|
|
break;
|
|
}
|
|
// fallthrough
|
|
default:
|
|
bVar2 = true;
|
|
break;
|
|
}
|
|
break;
|
|
case Z2SCENE_TWILIGHT_HYRULE_CASTLE:
|
|
se_wave1 = 0x2e;
|
|
if (inDarkness_) {
|
|
se_wave2 = 0x30;
|
|
if (room == 0) {
|
|
if (layer == 11) {
|
|
demo_wave = 0x66;
|
|
} else if (layer == 7 || layer == 10) {
|
|
demo_wave = 0x67;
|
|
} else {
|
|
/* dSv_event_flag_c::M_009 - Cutscene - [cutscene: 6B] Prison escape - Midna rides on back */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[42])) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
}
|
|
}
|
|
} else if (room == 3 && (layer == 8 || layer == 12)) {
|
|
demo_wave = 0x68;
|
|
} else if ((room == 3 && layer == 10) || (room == 2 && layer == 8)) {
|
|
bgm_id = Z2BGM_DEMO08;
|
|
bgm_wave1 = 0x21;
|
|
demo_wave = 0x69;
|
|
} else {
|
|
if (room == 3 && layer == 14) {
|
|
bVar2 = true;
|
|
}
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
}
|
|
} else {
|
|
if (room == 3 && layer == 9) {
|
|
demo_wave = 0x75;
|
|
}
|
|
se_wave2 = 0x2f;
|
|
}
|
|
break;
|
|
case Z2SCENE_CASTLE_THRONE_ROOM:
|
|
if (layer == 8) {
|
|
demo_wave = 0x68;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x7f;
|
|
}
|
|
break;
|
|
case Z2SCENE_CORO_SHOP:
|
|
se_wave1 = 0x31;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x33;
|
|
} else {
|
|
if (layer == 1) {
|
|
bgm_id = Z2BGM_EVENT05;
|
|
bgm_wave1 = 0x55;
|
|
se_wave2 = 0x32;
|
|
} else {
|
|
bgm_id = Z2BGM_FILONE_FOREST;
|
|
bgm_wave1 = 0xf;
|
|
time_proc_vol_mod = true;
|
|
Z2GetSeqMgr()->changeBgmStatus(1);
|
|
se_wave2 = 0x32;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_FARON_WOODS:
|
|
se_wave1 = 0x31;
|
|
if (layer == 11) {
|
|
demo_wave = 0x6c;
|
|
inDarkness_ = false;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x6a;
|
|
} else if (inDarkness_) {
|
|
if (layer == 7) {
|
|
demo_wave = 0x78;
|
|
} else if (layer == 8) {
|
|
demo_wave = 0x66;
|
|
} else if (layer == 10) {
|
|
bgm_id = Z2BGM_DEMO10;
|
|
bgm_wave1 = 0x21;
|
|
demo_wave = 0x6b;
|
|
} else {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
}
|
|
se_wave2 = 0x33;
|
|
} else {
|
|
se_wave2 = 0x32;
|
|
switch (layer) {
|
|
case 4:
|
|
case 6:
|
|
case 12:
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
break;
|
|
case 13:
|
|
demo_wave = 0x5c;
|
|
break;
|
|
case 1:
|
|
/* dSv_event_flag_c::F_0014 - Ordon Village - sword tutorial ends */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[18])
|
|
/* dSv_event_flag_c::F_0625 - Faron Woods - Saved Talo and a monkey */
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[625]))
|
|
{
|
|
bgm_id = Z2BGM_EVENT05;
|
|
bgm_wave1 = 0x55;
|
|
}
|
|
break;
|
|
default:
|
|
bgm_id = Z2BGM_FILONE_FOREST;
|
|
bgm_wave1 = 0xf;
|
|
time_proc_vol_mod = true;
|
|
|
|
if (room == 14) {
|
|
Z2GetSeqMgr()->changeBgmStatus(1);
|
|
} else {
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_KAKARIKO_VILLAGE:
|
|
se_wave1 = 0x34;
|
|
if (layer == 8) {
|
|
demo_wave = 0x6e;
|
|
inDarkness_ = false;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x36;
|
|
} else {
|
|
se_wave2 = 0x35;
|
|
switch (layer) {
|
|
case 6:
|
|
case 7:
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
break;
|
|
case 9:
|
|
demo_wave = 0x6e;
|
|
break;
|
|
case 10:
|
|
demo_wave = 0x6f;
|
|
break;
|
|
case 11:
|
|
bVar2 = true;
|
|
demo_wave = 0x70;
|
|
break;
|
|
case 12:
|
|
demo_wave = 0x71;
|
|
break;
|
|
case 13:
|
|
demo_wave = 0x83;
|
|
bgm_wave1 = 0x2c;
|
|
break;
|
|
case 0:
|
|
bgm_id = Z2BGM_KAKARIKO;
|
|
bgm_wave1 = 0x10;
|
|
bgm_wave2 = 0x18;
|
|
demo_wave = 0x84;
|
|
time_proc_vol_mod = true;
|
|
break;
|
|
case 1:
|
|
bgm_id = Z2BGM_EVENT02;
|
|
bgm_wave1 = 0x1c;
|
|
bgm_wave2 = 0x18;
|
|
break;
|
|
case 4:
|
|
bVar2 = true;
|
|
bgm_id = Z2BGM_LUTERA2;
|
|
bgm_wave1 = 0x2c;
|
|
break;
|
|
default:
|
|
bgm_id = Z2BGM_KAKARIKO;
|
|
bgm_wave1 = 0x10;
|
|
bgm_wave2 = 0x23;
|
|
time_proc_vol_mod = true;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_KAKARIKO_INTERIOR:
|
|
se_wave1 = 0x34;
|
|
if (inDarkness_) {
|
|
se_wave2 = 0x36;
|
|
if (room == 0 && layer == 8) {
|
|
demo_wave = 0x6d;
|
|
bgm_wave1 = 0xe;
|
|
} else {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
if (room == 5) {
|
|
bgm_wave2 = 0x1c;
|
|
}
|
|
}
|
|
} else {
|
|
switch (room) {
|
|
case 1:
|
|
/* dSv_event_flag_c::M_031 - Goron Mines - Goron Mines clear */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[64])) {
|
|
bgm_id = Z2BGM_SHOP01;
|
|
} else {
|
|
bgm_id = Z2BGM_SHOP02;
|
|
}
|
|
bgm_wave1 = 7;
|
|
break;
|
|
case 2:
|
|
if (layer == 13) {
|
|
demo_wave = 0x83;
|
|
} else {
|
|
/* dSv_event_flag_c::M_031 - Goron Mines - Goron Mines clear */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[64])) {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
/* dSv_event_flag_c::M_076 - Misc. - First conversation with Castle Town Malo Mart shop clerk */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[109])) {
|
|
bgm_id = Z2BGM_SHOP_MARO;
|
|
bgm_wave1 = 0x33;
|
|
/* dSv_event_flag_c::M_052 - Main Event - Horseback battle clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[85])) {
|
|
bgm_id = Z2BGM_SHOP01;
|
|
bgm_wave1 = 7;
|
|
} else {
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
}
|
|
break;
|
|
case 0:
|
|
if (layer == 9) {
|
|
demo_wave = 0x85;
|
|
} else {
|
|
bgm_id = Z2BGM_CHURCH1;
|
|
bgm_wave1 = 0x2f;
|
|
}
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
break;
|
|
}
|
|
se_wave2 = 0x86;
|
|
}
|
|
break;
|
|
case Z2SCENE_SANCTUARY_BASEMENT:
|
|
se_wave1 = 0x34;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x36;
|
|
} else {
|
|
bgm_id = Z2BGM_CHURCH2;
|
|
bgm_wave1 = 0x30;
|
|
se_wave2 = 0x86;
|
|
Z2GetSeqMgr()->muteSceneBgm(30, 0.5f);
|
|
}
|
|
break;
|
|
case Z2SCENE_KAKARIKO_GRAVEYARD:
|
|
se_wave1 = 0x34;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x36;
|
|
} else {
|
|
if (layer == 4) {
|
|
bgm_id = Z2BGM_LUTERA2;
|
|
bgm_wave1 = 0x2c;
|
|
} else {
|
|
bgm_id = Z2BGM_CHURCH2;
|
|
bgm_wave1 = 0x30;
|
|
Z2GetSeqMgr()->unMuteSceneBgm(30);
|
|
time_proc_vol_mod = true;
|
|
bgm_wave2 = 0x2c;
|
|
}
|
|
se_wave2 = 0x37;
|
|
}
|
|
break;
|
|
case Z2SCENE_DEATH_MOUNTAIN:
|
|
se_wave1 = 0x34;
|
|
if (layer == 8) {
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x39;
|
|
} else {
|
|
bgm_id = Z2BGM_DEATH_MOUNTAIN01;
|
|
bgm_wave1 = 0x11;
|
|
se_wave2 = 0x38;
|
|
time_proc_vol_mod = true;
|
|
if (room == 3) {
|
|
height_vol_mod = true;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_HIDDEN_VILLAGE:
|
|
if (layer == 0) {
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
if (dComIfGs_isSwitch(0x2e, 0) && !dComIfGs_isSwitch(0x11, 0)) {
|
|
bgm_id = Z2BGM_HIDDEN_VILLAGE;
|
|
}
|
|
field_0x1b = true;
|
|
} else if (layer == 1) {
|
|
Z2GetSeqMgr()->bgmStop(33, 0);
|
|
}
|
|
bgm_wave1 = 0x31;
|
|
se_wave1 = 0x34;
|
|
se_wave2 = 0x4f;
|
|
break;
|
|
case Z2SCENE_IMPAZ_HOUSE:
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
se_wave1 = 0x34;
|
|
se_wave2 = 0x4f;
|
|
field_0x1b = true;
|
|
break;
|
|
case Z2SCENE_SUMO_HALL:
|
|
if (layer == 8) {
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
} else {
|
|
bgm_id = Z2BGM_DEATH_MOUNTAIN02;
|
|
bgm_wave1 = 0x11;
|
|
se_wave1 = 0x34;
|
|
bgm_wave2 = 0x12;
|
|
se_wave2 = 0x3a;
|
|
}
|
|
break;
|
|
case Z2SCENE_LAKE_HYLIA:
|
|
se_wave1 = 0x3b;
|
|
if (layer == 8) {
|
|
demo_wave = 0x72;
|
|
inDarkness_ = false;
|
|
} else if (room == 1 && layer == 9) {
|
|
demo_wave = 0x74;
|
|
} else if (layer == 10 || layer == 11) {
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x3d;
|
|
if (layer == 14) {
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 10000, 40000, 50000);
|
|
} else {
|
|
if (dComIfGs_isSaveSwitch(0xf) && !dComIfGs_isSaveSwitch(0x10)) {
|
|
field_0x1b = true;
|
|
}
|
|
bgm_wave2 = 0x4d;
|
|
}
|
|
} else {
|
|
if (room == 0) {
|
|
bgm_id = Z2BGM_LAKE;
|
|
bgm_wave1 = 0x34;
|
|
height_vol_mod = true;
|
|
time_proc_vol_mod = true;
|
|
}
|
|
se_wave2 = 0x3c;
|
|
}
|
|
break;
|
|
case Z2SCENE_UPPER_ZORAS_RIVER:
|
|
se_wave1 = 0x55;
|
|
if (layer == 8) {
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x3f;
|
|
} else {
|
|
bgm_wave1 = 0x34;
|
|
se_wave2 = 0x3e;
|
|
height_vol_mod = true;
|
|
}
|
|
break;
|
|
case Z2SCENE_FISHING_POND:
|
|
if (layer == 8) {
|
|
demo_wave = 0x7f;
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
} else {
|
|
se_wave1 = 0x3b;
|
|
bgm_id = Z2BGM_FISHING;
|
|
bgm_wave1 = 0x2b;
|
|
se_wave2 = 0x3e;
|
|
height_vol_mod = true;
|
|
time_proc_vol_mod = true;
|
|
}
|
|
break;
|
|
case Z2SCENE_HENA_CABIN:
|
|
se_wave1 = 0x3b;
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
bgm_wave2 = 0x47;
|
|
se_wave2 = 0x3e;
|
|
break;
|
|
case Z2SCENE_ZORAS_RIVER:
|
|
se_wave1 = 0x55;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_CARGO_GAME_TW;
|
|
bgm_wave1 = 0x24;
|
|
se_wave2 = 0x41;
|
|
field_0x1b = true;
|
|
} else {
|
|
if (layer == 4) {
|
|
bgm_id = 0x200000b;
|
|
} else if (layer == 1) {
|
|
bgm_id = Z2BGM_MINIGAME_ROOM;
|
|
bgm_wave1 = 0x47;
|
|
bgm_wave2 = 0x42;
|
|
} else if (layer == 0 || layer == 2) {
|
|
bgm_wave2 = 0x57;
|
|
}
|
|
se_wave2 = 0x40;
|
|
}
|
|
break;
|
|
case Z2SCENE_ZORAS_DOMAIN:
|
|
se_wave1 = 0x3b;
|
|
if (layer == 8 || layer == 9) {
|
|
demo_wave = 0x82;
|
|
} else if (layer == 10 || layer == 11) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0x0e;
|
|
bgm_wave2 = 0x2c;
|
|
se_wave2 = 0x3f;
|
|
} else {
|
|
bgm_id = Z2BGM_ZORA_VILLAGE;
|
|
bgm_wave1 = 0x20;
|
|
se_wave2 = 0x3e;
|
|
height_vol_mod = true;
|
|
time_proc_vol_mod = true;
|
|
}
|
|
break;
|
|
case Z2SCENE_CASTLE_TOWN:
|
|
se_wave1 = 0x42;
|
|
if (layer == 8) {
|
|
demo_wave = 0x68;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x44;
|
|
} else {
|
|
se_wave2 = 0x43;
|
|
time_proc_vol_mod = true;
|
|
if (room == 1 && layer == 9) {
|
|
demo_wave = 0x7a;
|
|
} else if (layer == 10) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else if (!(layer == 1 && room == 1
|
|
/* dSv_event_flag_c::F_0542 - Cutscene - [Cutscene] Hyrule Castle barrier disappears (Midna goes crazy) */
|
|
&& dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[542])))
|
|
{
|
|
bgm_id = Z2BGM_CASTLE_TOWN;
|
|
bgm_wave1 = 0x25;
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_CASTLE_TOWN_INTERIOR:
|
|
if (room == 6) {
|
|
se_wave1 = 0x2e;
|
|
se_wave2 = 0x2f;
|
|
} else {
|
|
se_wave1 = 0x42;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x44;
|
|
} else {
|
|
se_wave2 = 0x5b;
|
|
if (room == 5) {
|
|
if (layer == 8) {
|
|
demo_wave = 0x73;
|
|
} else if (layer == 9) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else {
|
|
bgm_id = Z2BGM_INDOOR_03;
|
|
bgm_wave1 = 8;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_CASTLE_TOWN_SHOPS:
|
|
se_wave1 = 0x42;
|
|
se_wave2 = 0x5b;
|
|
|
|
switch (room) {
|
|
case 0:
|
|
if (layer == 1) {
|
|
bgm_id = Z2BGM_SHOP_MARO;
|
|
bgm_wave1 = 0x33;
|
|
} else {
|
|
bgm_id = Z2BGM_SHOP_CELEB;
|
|
bgm_wave1 = 0x32;
|
|
}
|
|
break;
|
|
case 1:
|
|
bgm_id = Z2BGM_FORTUNE;
|
|
bgm_wave1 = 0x37;
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
break;
|
|
case 2:
|
|
bgm_id = Z2BGM_INDOOR;
|
|
bgm_wave1 = 8;
|
|
break;
|
|
case 3:
|
|
bgm_id = Z2BGM_INDOOR_04;
|
|
bgm_wave1 = 0x56;
|
|
break;
|
|
case 4:
|
|
bgm_id = Z2BGM_CASTLE_TOWN;
|
|
bgm_wave1 = 0x25;
|
|
Z2GetSeqMgr()->changeBgmStatus(5);
|
|
break;
|
|
case 5:
|
|
bgm_id = Z2BGM_SHOP02;
|
|
bgm_wave1 = 7;
|
|
break;
|
|
}
|
|
break;
|
|
case Z2SCENE_STAR_TENT:
|
|
se_wave1 = 0x42;
|
|
se_wave2 = 0x87;
|
|
/* dSv_event_flag_c::F_289 - Castle Town - Heard conversation about entering Star Game 1 */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[289])) {
|
|
bgm_id = Z2BGM_MINIGAME_ROOM;
|
|
}
|
|
bgm_wave1 = 0x46;
|
|
break;
|
|
case Z2SCENE_SACRED_GROVE:
|
|
se_wave1 = 0x31;
|
|
bgm_wave2 = 0x1b;
|
|
se_wave2 = 0x45;
|
|
|
|
if (room == 3) {
|
|
bgm_id = Z2BGM_HOLY_FOREST;
|
|
bgm_wave1 = 0x2a;
|
|
} else if (room == 2) {
|
|
if (layer == 10) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else {
|
|
bgm_id = Z2BGM_TEMPLE_OF_TIME;
|
|
bgm_wave1 = 0x3e;
|
|
}
|
|
} else if (room == 1) {
|
|
if (layer == 0 || layer == 9) {
|
|
demo_wave = 0x76;
|
|
} else if (layer == 8 || layer == 11) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else {
|
|
bgm_wave2 = 0x40;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_SNOWPEAK:
|
|
if (layer == 8) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else {
|
|
bgm_id = Z2BGM_SNOW_MOUNTAIN;
|
|
bgm_wave1 = 0x2d;
|
|
bgm_wave2 = 0x3a;
|
|
se_wave1 = 0x46;
|
|
se_wave2 = 0x47;
|
|
}
|
|
height_vol_mod = true;
|
|
break;
|
|
case Z2SCENE_GERUDO_DESERT:
|
|
se_wave1 = 0x48;
|
|
se_wave2 = 0x49;
|
|
if (layer == 8 || layer == 9 || layer == 10) {
|
|
demo_wave = 0x77;
|
|
} else if (layer == 11) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else {
|
|
bgm_id = Z2BGM_DESERT;
|
|
bgm_wave1 = 0x1f;
|
|
}
|
|
break;
|
|
case Z2SCENE_ARBITERS_GROUNDS_EXTERIOR:
|
|
if (room == 1) {
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 1000, 2000, 9000);
|
|
bgm_wave1 = 0x3d;
|
|
bgm_wave2 = 0x1c;
|
|
}
|
|
se_wave1 = 0x48;
|
|
se_wave2 = 0x49;
|
|
break;
|
|
case Z2SCENE_MIRROR_CHAMBER:
|
|
switch (layer) {
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
demo_wave = 0x80;
|
|
break;
|
|
case 11:
|
|
case 12:
|
|
demo_wave = 0x78;
|
|
break;
|
|
case 13:
|
|
demo_wave = 0x7e;
|
|
break;
|
|
default:
|
|
bVar2 = true;
|
|
bgm_id = Z2BGM_DESERT;
|
|
bgm_wave1 = 0x1f;
|
|
break;
|
|
}
|
|
se_wave1 = 0x48;
|
|
se_wave2 = 0x49;
|
|
break;
|
|
case Z2SCENE_HYRULE_FIELD:
|
|
se_wave1 = 0x4a;
|
|
if (room == 10 && layer == 11) {
|
|
demo_wave = 0x74;
|
|
fVar1 = 0.7f;
|
|
} else if (layer == 9 || layer == 10) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else if (layer == 2 || layer == 3) {
|
|
bgm_id = Z2BGM_HORSE_BATTLE;
|
|
bgm_wave1 = 0xd;
|
|
se_wave1 = 0x54;
|
|
se_wave2 = 0x4e;
|
|
field_0x1b = true;
|
|
fVar1 = 1.0f;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
} else if (inDarkness_) {
|
|
if (layer == 12) {
|
|
demo_wave = 0x6a;
|
|
} else {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
}
|
|
|
|
se_wave2 = 0x4c;
|
|
if (room == 13 && layer == 14) {
|
|
bgm_wave2 = 0x1c;
|
|
}
|
|
} else {
|
|
field_bgm_play = true;
|
|
if (Z2GetStatusMgr()->checkDayTime()) {
|
|
bgm_id = Z2BGM_FIELD_LINK_DAY;
|
|
} else {
|
|
bgm_id = Z2BGM_FIELD_LINK_NIGHT;
|
|
}
|
|
|
|
bgm_wave1 = 0x19;
|
|
switch (room) {
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
se_wave2 = 0x5e;
|
|
break;
|
|
case 0:
|
|
case 5:
|
|
case 7:
|
|
se_wave2 = 0x5f;
|
|
break;
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
se_wave2 = 0x60;
|
|
break;
|
|
case 12:
|
|
case 13:
|
|
case 14:
|
|
se_wave2 = 0x61;
|
|
break;
|
|
case 1:
|
|
case 6:
|
|
case 15:
|
|
se_wave2 = 0x4b;
|
|
break;
|
|
}
|
|
switch (room) {
|
|
case 0:
|
|
case 3:
|
|
case 6:
|
|
case 10:
|
|
case 13:
|
|
fVar1 = 1.0f;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 4:
|
|
case 5:
|
|
case 14:
|
|
case 15:
|
|
fVar1 = 0.7f;
|
|
break;
|
|
case 7:
|
|
case 9:
|
|
case 11:
|
|
case 12:
|
|
fVar1 = 0.8f;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_CASTLE_TOWN_GATES:
|
|
se_wave1 = 0x4a;
|
|
if (layer == 8) {
|
|
demo_wave = 0x73;
|
|
fVar1 = 1.0f;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x75;
|
|
fVar1 = 0.5f;
|
|
} else if (layer == 10) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
se_wave2 = 0x4c;
|
|
} else {
|
|
if (room == 8) {
|
|
se_wave2 = 0x62;
|
|
fVar1 = 0.8f;
|
|
} else if (room == 16) {
|
|
se_wave2 = 0x88;
|
|
fVar1 = 0.8f;
|
|
} else if (room == 17) {
|
|
se_wave2 = 0x89;
|
|
fVar1 = 1.0f;
|
|
}
|
|
|
|
field_bgm_play = true;
|
|
if (Z2GetStatusMgr()->checkDayTime()) {
|
|
bgm_id = Z2BGM_FIELD_LINK_DAY;
|
|
} else {
|
|
bgm_id = Z2BGM_FIELD_LINK_NIGHT;
|
|
}
|
|
bgm_wave1 = 0x19;
|
|
}
|
|
break;
|
|
case Z2SCENE_HYLIA_BRIDGE_BATTLE:
|
|
se_wave1 = 0x54;
|
|
bgm_wave1 = 0x3d;
|
|
se_wave2 = 0x4e;
|
|
fVar1 = 1.0f;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_ELDIN_BRIDGE_BATTLE:
|
|
se_wave1 = 0x4a;
|
|
if (layer == 11) {
|
|
se_wave1 = 0;
|
|
se_wave2 = 0;
|
|
demo_wave = 0x7f;
|
|
} else if (layer == 10) {
|
|
bgm_wave1 = 0x59;
|
|
} else if (layer != 8 && layer != 9) {
|
|
if (layer == 0) {
|
|
bgm_wave1 = 13;
|
|
} else if (layer == 4) {
|
|
bgm_wave1 = 0x3d;
|
|
}
|
|
fVar1 = 1.0f;
|
|
se_wave2 = 0x4d;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_SHADES_REALM:
|
|
se_wave1 = 0x4a;
|
|
if (dComIfGs_getStartPoint() == 2) {
|
|
bgm_wave2 = 0x50;
|
|
} else if (dComIfGs_getStartPoint() == 3) {
|
|
bgm_wave2 = 0x4f;
|
|
} else if (dComIfGs_getStartPoint() == 4) {
|
|
bgm_wave2 = 0x3b;
|
|
} else if (dComIfGs_getStartPoint() == 5) {
|
|
bgm_wave2 = 0x51;
|
|
} else if (dComIfGs_getStartPoint() == 6) {
|
|
bgm_wave2 = 0x52;
|
|
} else if (dComIfGs_getStartPoint() == 7) {
|
|
bgm_wave2 = 0x53;
|
|
} else {
|
|
bgm_wave1 = 0x44;
|
|
}
|
|
|
|
se_wave2 = 0x5d;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
|
|
case Z2SCENE_FOREST_TEMPLE:
|
|
bgm_id = Z2BGM_DUNGEON_FOREST;
|
|
bgm_wave1 = 0xa;
|
|
bgm_wave2 = 0x40;
|
|
se_wave1 = 1;
|
|
se_wave2 = 2;
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
break;
|
|
case Z2SCENE_FOREST_TEMPLE_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_FOREST;
|
|
bgm_wave1 = 0xa;
|
|
bgm_wave2 = 0xb;
|
|
se_wave1 = 1;
|
|
se_wave2 = 3;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
Z2GetSeqMgr()->unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME);
|
|
break;
|
|
case Z2SCENE_FOREST_TEMPLE_BOSS:
|
|
se_wave1 = 1;
|
|
if (dComIfGs_isStageSwitch(2, 1)) {
|
|
bgm_id = Z2BGM_DUNGEON_FOREST;
|
|
bgm_wave1 = 0xa;
|
|
/* dSv_event_flag_c::M_022 - Forest Temple - Forest Temple clear (Midna creates warp hole) */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[55])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0xc;
|
|
se_wave2 = 4;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
Z2GetSeqMgr()->unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME);
|
|
break;
|
|
case Z2SCENE_GORON_MINES:
|
|
bgm_id = Z2BGM_DUNGEON_LV2;
|
|
bgm_wave1 = 0x13;
|
|
bgm_wave2 = 0x3c;
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
se_wave1 = 5;
|
|
se_wave2 = 6;
|
|
break;
|
|
case Z2SCENE_GORON_MINES_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV2;
|
|
bgm_wave1 = 0x13;
|
|
se_wave1 = 5;
|
|
se_wave2 = 7;
|
|
bgm_wave2 = 0x14;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_GORON_MINES_BOSS:
|
|
se_wave1 = 5;
|
|
if (dComIfGs_isStageSwitch(3, 0x7c)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV2;
|
|
bgm_wave1 = 0x13;
|
|
/* dSv_event_flag_c::M_031 - Goron Mines - Goron Mines clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[64])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x16;
|
|
se_wave2 = 8;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_LAKEBED_TEMPLE:
|
|
bgm_id = Z2BGM_DUNGEON_LV3;
|
|
bgm_wave1 = 0x15;
|
|
bgm_wave2 = 0x40;
|
|
se_wave1 = 9;
|
|
se_wave2 = 0xa;
|
|
break;
|
|
case Z2SCENE_LAKEBED_TEMPLE_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV3;
|
|
bgm_wave1 = 0x15;
|
|
bgm_wave2 = 0x17;
|
|
se_wave1 = 9;
|
|
se_wave2 = 0xb;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_LAKEBED_TEMPLE_BOSS:
|
|
se_wave1 = 9;
|
|
if (dComIfGs_isStageSwitch(4, 0xe)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV3;
|
|
bgm_wave1 = 0x15;
|
|
/* dSv_event_flag_c::M_045 - Lakebed Temple - Lakebed Temple clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x1e;
|
|
se_wave2 = 0xc;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_ARBITERS_GROUNDS:
|
|
bgm_id = Z2BGM_DUNGEON_LV4;
|
|
bgm_wave1 = 0x1a;
|
|
bgm_wave2 = 0x41;
|
|
se_wave1 = 0xd;
|
|
se_wave2 = 0xe;
|
|
if (room == 1) {
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_ARBITERS_GROUNDS_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV4;
|
|
bgm_wave1 = 0x1a;
|
|
bgm_wave2 = 0x22;
|
|
se_wave1 = 0xd;
|
|
se_wave2 = 0xf;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_ARBITERS_GROUNDS_BOSS:
|
|
se_wave1 = 0xd;
|
|
if (dComIfGs_isStageSwitch(0xa, 0xa)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV4;
|
|
bgm_wave1 = 0x1a;
|
|
/* dSv_event_flag_c::F_0265 - Arbiter's Grounds - Arbiter's Grounds clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[265])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x4c;
|
|
se_wave2 = 0x10;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_SNOWPEAK_RUINS:
|
|
bgm_id = Z2BGM_DUNGEON_LV5;
|
|
bgm_wave1 = 0x1d;
|
|
bgm_wave2 = 0x40;
|
|
se_wave1 = 0x11;
|
|
se_wave2 = 0x12;
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
break;
|
|
case Z2SCENE_SNOWPEAK_RUINS_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV5;
|
|
bgm_wave1 = 0x1d;
|
|
bgm_wave2 = 0x38;
|
|
se_wave1 = 0x11;
|
|
se_wave2 = 0x13;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
break;
|
|
case Z2SCENE_SNOWPEAK_RUINS_BOSS:
|
|
Z2GetSeqMgr()->unMuteSceneBgm(60);
|
|
se_wave1 = 0x11;
|
|
if (dComIfGs_isStageSwitch(8, 0x19)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV5;
|
|
bgm_wave1 = 0x1d;
|
|
/* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[266])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x2e;
|
|
se_wave2 = 0x14;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_TEMPLE_OF_TIME:
|
|
bgm_id = Z2BGM_DUNGEON_LV6;
|
|
bgm_wave1 = 0x26;
|
|
bgm_wave2 = 0x40;
|
|
se_wave1 = 0x15;
|
|
se_wave2 = 0x16;
|
|
break;
|
|
case Z2SCENE_TEMPLE_OF_TIME_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV6;
|
|
bgm_wave1 = 0x26;
|
|
bgm_wave2 = 0x3f;
|
|
se_wave1 = 0x15;
|
|
se_wave2 = 0x17;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_TEMPLE_OF_TIME_BOSS:
|
|
se_wave1 = 0x15;
|
|
if (dComIfGs_isStageSwitch(7, 0x18)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV6;
|
|
bgm_wave1 = 0x26;
|
|
/* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[267])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x4e;
|
|
se_wave2 = 0x18;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_CITY_IN_THE_SKY:
|
|
if (room == 16) {
|
|
bgm_id = Z2BGM_OBACHAN;
|
|
bgm_wave1 = 0x40;
|
|
} else {
|
|
bgm_id = Z2BGM_DUNGEON_LV7;
|
|
bgm_wave1 = 0x27;
|
|
}
|
|
se_wave1 = 0x19;
|
|
se_wave2 = 0x1a;
|
|
break;
|
|
case Z2SCENE_CITY_IN_THE_SKY_MINIBOSS:
|
|
bgm_id = Z2BGM_DUNGEON_LV7;
|
|
bgm_wave1 = 0x27;
|
|
bgm_wave2 = 0x43;
|
|
se_wave1 = 0x19;
|
|
se_wave2 = 0x1b;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_CITY_IN_THE_SKY_BOSS:
|
|
se_wave1 = 0x19;
|
|
if (dComIfGs_isStageSwitch(0x16, 0x25)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV7;
|
|
bgm_wave1 = 0x27;
|
|
/* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[268])) {
|
|
bgm_id = 0x200005b;
|
|
} else {
|
|
bgm_wave1 = 0x1e;
|
|
se_wave2 = 0x1c;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
}
|
|
break;
|
|
case Z2SCENE_PALACE_OF_TWILIGHT:
|
|
if (layer == 8) {
|
|
if (room == 0 || room == 9) {
|
|
demo_wave = 0x77;
|
|
} else if (room == 11) {
|
|
demo_wave = 0x81;
|
|
}
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x78;
|
|
} else {
|
|
bVar2 = true;
|
|
bgm_id = Z2BGM_DUNGEON_LV8;
|
|
bgm_wave1 = 0x28;
|
|
Z2GetSeqMgr()->changeBgmStatus(room);
|
|
}
|
|
se_wave1 = 0x1d;
|
|
se_wave2 = 0x1e;
|
|
break;
|
|
case Z2SCENE_PALACE_OF_TWILIGHT_MINIBOSS_A:
|
|
case Z2SCENE_PALACE_OF_TWILIGHT_MINIBOSS_B:
|
|
bgm_id = Z2BGM_DUNGEON_LV8;
|
|
bgm_wave1 = 0x28;
|
|
bgm_wave2 = 0x48;
|
|
se_wave1 = 0x1d;
|
|
se_wave2 = 0x1f;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_PALACE_OF_TWILIGHT_THRONE_ROOM:
|
|
if (layer == 8) {
|
|
demo_wave = 0x81;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x79;
|
|
} else if (dComIfGs_isStageSwitch(0x17, 0x16)) {
|
|
bgm_id = Z2BGM_DUNGEON_LV8;
|
|
bgm_wave1 = 0x28;
|
|
/* dSv_event_flag_c::F_0570 - Palace of Twilight - Cleared Palace of Twilight */
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[570])) {
|
|
bgm_id = 0x200005b;
|
|
JSUList<JAIStream>* stream_list = Z2GetSoundMgr()->getStreamMgr()->getStreamList();
|
|
JSULink<JAIStream>* stream;
|
|
for (stream = stream_list->getFirst(); stream != NULL; stream = stream->getNext()) {
|
|
if (stream->getObject()->getID() == 0x2000046) {
|
|
bgm_id = -1;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case Z2SCENE_PALACE_OF_TWILIGHT_BOSS:
|
|
se_wave1 = 0x1d;
|
|
bgm_wave1 = 0x39;
|
|
se_wave2 = 0x20;
|
|
|
|
if (room == 50) {
|
|
inDarkness_ = true;
|
|
}
|
|
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_HYRULE_CASTLE:
|
|
if (room >= 1 && room <= 6) {
|
|
bgm_id = 0x2000040;
|
|
bgm_wave2 = 0x58;
|
|
} else if (room == 8 || room == 12) {
|
|
bgm_id = Z2BGM_DUNGEON_LV9_02;
|
|
bgm_wave1 = 0x29;
|
|
height_vol_mod = true;
|
|
} else {
|
|
Z2GetSeqMgr()->bgmStop(45, 0);
|
|
bgm_wave2 = 0x3d;
|
|
}
|
|
|
|
se_wave1 = 0x21;
|
|
se_wave2 = 0x22;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_FINAL_BATTLE_THRONE_ROOM:
|
|
if (room == 50) {
|
|
if (layer == 8) {
|
|
demo_wave = 0x7b;
|
|
} else if (layer == 0) {
|
|
bgm_wave1 = 0x49;
|
|
se_wave2 = 0x23;
|
|
} else if (layer == 10) {
|
|
demo_wave = 0x7b;
|
|
} else if (layer == 1) {
|
|
bgm_wave1 = 0x4a;
|
|
se_wave2 = 0x24;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x7c;
|
|
}
|
|
}
|
|
|
|
se_wave1 = 0x56;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_FINAL_BATTLE_FIELD:
|
|
bgm_wave1 = 0x4b;
|
|
se_wave2 = 0x63;
|
|
se_wave1 = 0x8c;
|
|
field_0x1b = true;
|
|
Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500);
|
|
break;
|
|
case Z2SCENE_FINAL_BATTLE_CUTSCENE:
|
|
if (layer == 8) {
|
|
demo_wave = 0x7c;
|
|
fVar1 = 0.1f;
|
|
} else if (layer == 10) {
|
|
demo_wave = 0x7d;
|
|
} else if (layer == 9) {
|
|
demo_wave = 0x7e;
|
|
fVar1 = 0.08f;
|
|
} else if (layer == 11) {
|
|
demo_wave = 0x7f;
|
|
}
|
|
break;
|
|
case Z2SCENE_LIGHT_SPIRIT_CHAMBER:
|
|
demo_wave = 0x7c;
|
|
break;
|
|
case Z2SCENE_CAVE_OF_ORDEALS:
|
|
se_wave2 = 0x51;
|
|
if (room != 49 || layer < 5 || layer > 8) {
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
}
|
|
break;
|
|
case Z2SCENE_ICE_BLOCK_PUZZLE:
|
|
se_wave1 = 0x11;
|
|
se_wave2 = 0x12;
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
break;
|
|
case Z2SCENE_GORGE_LANTERN_CAVE:
|
|
case Z2SCENE_LAKE_LANTERN_CAVE:
|
|
se_wave2 = 0x52;
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
break;
|
|
case Z2SCENE_ELDIN_MAGNET_CAVE:
|
|
se_wave1 = 5;
|
|
se_wave2 = 6;
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
break;
|
|
case Z2SCENE_GROTTO_GRASS_1:
|
|
case Z2SCENE_GROTTO_GRASS_2:
|
|
case Z2SCENE_GROTTO_ROCK_1:
|
|
case Z2SCENE_GROTTO_ROCK_2:
|
|
case Z2SCENE_GROTTO_POND:
|
|
se_wave2 = 0x50;
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
break;
|
|
case Z2SCENE_FARON_WOODS_CAVE:
|
|
se_wave2 = 0x53;
|
|
if (inDarkness_) {
|
|
bgm_id = Z2BGM_TWILIGHT;
|
|
bgm_wave1 = 0xe;
|
|
} else {
|
|
bgm_id = Z2BGM_SUB_DUNGEON;
|
|
bgm_wave1 = 0x45;
|
|
}
|
|
break;
|
|
}
|
|
|
|
/*dSv_event_flag_c::M_071 - Cutscene - [cutscene: 20] Zant appears (during Midna's desperate hour) */
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[104])
|
|
/* dSv_event_flag_c::F_0250 - Cutscene - [cutscene: 21] reunion with Zelda / Midna revived (Hyrule Castle barrier appears) */
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[250])
|
|
&& demo_wave == 0 && spotNo != Z2SCENE_ELDIN_BRIDGE_BATTLE)
|
|
{
|
|
bgm_wave1 = 0x36;
|
|
if (spotNo == Z2SCENE_CASTLE_TOWN_SHOPS && room == 5) {
|
|
bgm_id = -1;
|
|
} else {
|
|
bgm_id = Z2BGM_MIDNA_SOS;
|
|
if ((spotNo == Z2SCENE_CASTLE_TOWN_INTERIOR && room == 5)
|
|
|| spotNo == Z2SCENE_CASTLE_TOWN_SHOPS || spotNo == Z2SCENE_STAR_TENT)
|
|
{
|
|
Z2GetSeqMgr()->muteSceneBgm(33, 0.5f);
|
|
} else {
|
|
Z2GetSeqMgr()->unMuteSceneBgm(33);
|
|
}
|
|
}
|
|
|
|
time_proc_vol_mod = false;
|
|
} else if (sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS && roomNum == 1 && !(spotNo == Z2SCENE_CASTLE_TOWN && room == 3)) {
|
|
bgm_id = Z2BGM_FORTUNE;
|
|
bgm_wave1 = 0x37;
|
|
Z2GetSeqMgr()->changeBgmStatus(1);
|
|
time_proc_vol_mod = false;
|
|
}
|
|
|
|
if (Z2GetSoundMgr()->getStreamMgr()->isActive()) {
|
|
JAUSoundTable* sound_table = JAUSoundTable::getInstance();
|
|
#if DUSK_AUDIO_DISABLED
|
|
if (sound_table->isValid())
|
|
#endif
|
|
{
|
|
JSUList<JAIStream>* stream_list = Z2GetSoundMgr()->getStreamMgr()->getStreamList();
|
|
JSULink<JAIStream>* stream;
|
|
for (stream = stream_list->getFirst(); stream != NULL; stream = stream->getNext()) {
|
|
if (bVar2 || sound_table->getTypeID(stream->getObject()->getID()) != 0x71) {
|
|
stream->getObject()->stop(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Z2GetSeqMgr()->setHeightVolMod(height_vol_mod, 30);
|
|
Z2GetSeqMgr()->setTimeProcVolMod(time_proc_vol_mod, 0);
|
|
Z2GetSeqMgr()->setFieldBgmPlay(field_bgm_play);
|
|
Z2GetEnvSeMgr()->initSceneEnvSe(spotNo, room, fVar1);
|
|
|
|
if (sceneNum != spotNo || bgm_id != BGM_ID || se_wave1 != loadedSeWave_1
|
|
|| se_wave2 != loadedSeWave_2 || bgm_wave1 != loadedBgmWave_1
|
|
|| bgm_wave2 != loadedBgmWave_2 || demo_wave != loadedDemoWave)
|
|
{
|
|
sceneNum = spotNo;
|
|
sceneChange(bgm_id, se_wave1, se_wave2, bgm_wave1, bgm_wave2, demo_wave, false);
|
|
}
|
|
|
|
roomNum = room;
|
|
}
|
|
|
|
void Z2SceneMgr::sceneChange(JAISoundID bgm, u8 seWave1, u8 seWave2, u8 bgmWave1, u8 bgmWave2,
|
|
u8 demoWave, bool param_6) {
|
|
OS_REPORT("[Z2SceneMgr::sceneChange] bgm:0x%08x, SeWave1:%d, SeWave2:%d BgmWave1:%d BgmWave2:%d demoWave:%d (%d)\n",
|
|
*(u32*)&bgm, seWave1, seWave2, bgmWave1, bgmWave2, demoWave, param_6);
|
|
|
|
if (bgm != BGM_ID) {
|
|
if (Z2GetSeqMgr()->getMainBgmID() == bgm) {
|
|
field_0x1a = false;
|
|
} else {
|
|
field_0x1a = true;
|
|
}
|
|
} else {
|
|
if (Z2GetSeqMgr()->getMainBgmID() == bgm) {
|
|
if (param_6) {
|
|
field_0x1a = true;
|
|
} else {
|
|
field_0x1a = false;
|
|
}
|
|
} else {
|
|
field_0x1a = true;
|
|
}
|
|
}
|
|
|
|
requestSeWave_1 = seWave1;
|
|
requestSeWave_2 = seWave2;
|
|
requestBgmWave_1 = bgmWave1;
|
|
requestBgmWave_2 = bgmWave2;
|
|
requestDemoWave = demoWave;
|
|
BGM_ID = bgm;
|
|
Z2GetFxLineMgr()->setSceneFx(sceneNum);
|
|
}
|
|
|
|
void Z2SceneMgr::framework() {
|
|
if (load1stWait > 0) {
|
|
load1stWait--;
|
|
if (load1stWait == 0 && timer == 0) {
|
|
_load1stWaveInner_1();
|
|
}
|
|
} else if (load1stWait < 0) {
|
|
load1stWait++;
|
|
if (load1stWait == 0 && field_0x1a) {
|
|
_load1stWaveInner_2();
|
|
}
|
|
}
|
|
|
|
if (isSceneExist()) {
|
|
if (timer < 10000) {
|
|
timer++;
|
|
}
|
|
if (!field_0x1b && Z2GetStatusMgr()->getDemoStatus() != 3 && timer == Z2Param::BATTLE_BGM_WAIT_TIME) {
|
|
Z2GetSeqMgr()->setBattleBgmOff(false);
|
|
}
|
|
} else {
|
|
Z2GetSeqMgr()->setBattleBgmOff(true);
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::load1stDynamicWave() {
|
|
OS_REPORT("[Z2SceneMgr::load1stDynamicWave] load1stWait:%d\n", load1stWait);
|
|
|
|
timer = 0;
|
|
Z2GetSoundObjMgr()->deleteEnemyAll();
|
|
setSceneExist(false);
|
|
if (load1stWait == 0) {
|
|
_load1stWaveInner_1();
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::_load1stWaveInner_1() {
|
|
OS_REPORT("[Z2SceneMgr::_load1stWaveInner_1] requestSe:%d loadedSe:%d\n", requestSeWave_1, loadedSeWave_1);
|
|
|
|
Z2GetSeMgr()->seStopAll(0);
|
|
Z2GetEnvSeMgr()->resetSceneInner();
|
|
/* dSv_event_flag_c::M_071 - Cutscene - [cutscene: 20] Zant appears (during Midna's desperate hour) */
|
|
field_0x18 = dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[104]) ? 0x59 : 0x58;
|
|
|
|
if (loadedSeWave_2 != 0 && requestSeWave_2 != loadedSeWave_2) {
|
|
eraseSeWave(loadedSeWave_2);
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
|
|
if (loadedDemoWave != 0 && requestDemoWave != loadedDemoWave) {
|
|
if (loadedSeWave_2 != 0 && eraseSeWave(loadedSeWave_2)) {
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
eraseSeWave(loadedDemoWave);
|
|
loadedDemoWave = 0;
|
|
}
|
|
|
|
if (field_0x18 != field_0x19 || requestSeWave_1 != loadedSeWave_1) {
|
|
if (loadedSeWave_2 != 0 && eraseSeWave(loadedSeWave_2)) {
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
if (loadedDemoWave != 0 && eraseSeWave(loadedDemoWave)) {
|
|
loadedDemoWave = 0;
|
|
}
|
|
if (loadedSeWave_1 != 0 && eraseSeWave(loadedSeWave_1)) {
|
|
loadedSeWave_1 = 0;
|
|
}
|
|
if (field_0x18 != field_0x19 && eraseSeWave(field_0x19) && loadSeWave(field_0x18)) {
|
|
field_0x19 = field_0x18;
|
|
}
|
|
if (requestSeWave_1 != 0 && loadSeWave(requestSeWave_1)) {
|
|
loadedSeWave_1 = requestSeWave_1;
|
|
} else {
|
|
loadedSeWave_1 = 0;
|
|
}
|
|
}
|
|
|
|
if (field_0x1a && Z2GetSeqMgr()->checkBgmPlaying()) {
|
|
OS_REPORT("[Z2SceneMgr::load1stDynamicWave]bgm StopCount = %d\n", 15);
|
|
Z2GetSeqMgr()->bgmStop(15, 0);
|
|
load1stWait = -15;
|
|
} else {
|
|
_load1stWaveInner_2();
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::_load1stWaveInner_2() {
|
|
OS_REPORT("[Z2SceneMgr::_load1stWaveInner_2] requestBgm:%d loadedBgm:%d\n", requestBgmWave_1, loadedBgmWave_1);
|
|
|
|
if (loadedBgmWave_2 != 0 && requestBgmWave_2 != loadedBgmWave_2) {
|
|
eraseBgmWave(loadedBgmWave_2);
|
|
loadedBgmWave_2 = 0;
|
|
}
|
|
|
|
if (requestBgmWave_1 != loadedBgmWave_1) {
|
|
if (loadedBgmWave_2 != 0 && eraseBgmWave(loadedBgmWave_2)) {
|
|
loadedBgmWave_2 = 0;
|
|
}
|
|
if (loadedBgmWave_1 != 0 && eraseBgmWave(loadedBgmWave_1)) {
|
|
loadedBgmWave_1 = 0;
|
|
}
|
|
if (requestBgmWave_1 != 0 && loadBgmWave(requestBgmWave_1)) {
|
|
loadedBgmWave_1 = requestBgmWave_1;
|
|
} else {
|
|
loadedBgmWave_1 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool Z2SceneMgr::check1stDynamicWave() {
|
|
return load1stWait != 0 || getSeLoadStatus(requestSeWave_1) == 1 || getBgmLoadStatus(requestBgmWave_1) == 1;
|
|
}
|
|
|
|
void Z2SceneMgr::load2ndDynamicWave() {
|
|
OS_REPORT("[Z2SceneMgr::load2ndDynamicWave] requestSe:%d, loadedSe:%d requestBgm:%d loadedBgm:%d requestDemo:%d loadedDemo:%d\n",
|
|
requestSeWave_2, loadedSeWave_2, requestBgmWave_2, loadedBgmWave_2, requestDemoWave, loadedDemoWave);
|
|
|
|
if (requestDemoWave != loadedDemoWave) {
|
|
if (loadedSeWave_2 != 0 && eraseSeWave(loadedSeWave_2)) {
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
if (loadedDemoWave != 0 && eraseSeWave(loadedDemoWave)) {
|
|
loadedDemoWave = 0;
|
|
}
|
|
if (requestDemoWave != 0 && requestDemoWave != 0x7f && loadSeWave(requestDemoWave)) {
|
|
loadedDemoWave = requestDemoWave;
|
|
} else {
|
|
loadedDemoWave = 0;
|
|
}
|
|
}
|
|
|
|
if (requestSeWave_2 != loadedSeWave_2) {
|
|
if (loadedSeWave_2 != 0 && eraseSeWave(loadedSeWave_2)) {
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
if (requestSeWave_2 != 0 && loadSeWave(requestSeWave_2)) {
|
|
loadedSeWave_2 = requestSeWave_2;
|
|
} else {
|
|
loadedSeWave_2 = 0;
|
|
}
|
|
}
|
|
|
|
if (requestBgmWave_2 != loadedBgmWave_2) {
|
|
if (loadedBgmWave_2 != 0 && eraseBgmWave(loadedBgmWave_2)) {
|
|
loadedBgmWave_2 = 0;
|
|
}
|
|
if (requestBgmWave_2 != 0 && loadBgmWave(requestBgmWave_2)) {
|
|
loadedBgmWave_2 = requestBgmWave_2;
|
|
} else {
|
|
loadedBgmWave_2 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Z2SceneMgr::sceneBgmStart() {
|
|
OS_REPORT("[Z2SceneMgr::sceneBgmStart] %08x\n", *(u32*)&BGM_ID);
|
|
inGame = true;
|
|
|
|
int var_r28 = 0;
|
|
setSceneExist(true);
|
|
Z2GetStatusMgr()->setPauseFlag(0);
|
|
|
|
if (!field_0x1a && Z2GetSeqMgr()->checkBgmIDPlaying(BGM_ID)) {
|
|
return;
|
|
}
|
|
|
|
if (!BGM_ID.isAnonymous() && var_r28 == 0 && Z2GetStatusMgr()->getDemoStatus() != 11) {
|
|
bool var;
|
|
int section = BGM_ID.id_.info.type.parts.sectionID;
|
|
switch (section) {
|
|
case 1:
|
|
var = false;
|
|
switch (Z2GetSeqMgr()->getSubBgmID()) {
|
|
case Z2BGM_BATTLE_NORMAL:
|
|
case Z2BGM_BOOMERAMG_MONKEY:
|
|
case Z2BGM_SUMOMO:
|
|
var = true;
|
|
break;
|
|
}
|
|
Z2GetSeqMgr()->bgmStart(BGM_ID, 0, var);
|
|
Z2GetSeqMgr()->unMuteSceneBgm(0);
|
|
|
|
switch (BGM_ID) {
|
|
case Z2BGM_DUNGEON_FOREST:
|
|
case Z2BGM_DUNGEON_LV2:
|
|
case Z2BGM_DUNGEON_LV5:
|
|
case Z2BGM_CASTLE_TOWN:
|
|
case Z2BGM_DUNGEON_LV8:
|
|
case Z2BGM_DUNGEON_LV9_02:
|
|
case Z2BGM_SNOW_MOUNTAIN:
|
|
if (sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS) {
|
|
Z2GetSeqMgr()->changeBgmStatus(5);
|
|
} else {
|
|
Z2GetSeqMgr()->changeBgmStatus(roomNum);
|
|
}
|
|
break;
|
|
case Z2BGM_HOLY_FOREST:
|
|
case Z2BGM_LUTERA2:
|
|
case Z2BGM_DEMO08:
|
|
case Z2BGM_DEMO10:
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
break;
|
|
case Z2BGM_CHURCH2:
|
|
if (sceneNum == Z2SCENE_SANCTUARY_BASEMENT) {
|
|
Z2GetSeqMgr()->muteSceneBgm(0, 0.5f);
|
|
}
|
|
break;
|
|
case Z2BGM_MIDNA_SOS:
|
|
if ((sceneNum == Z2SCENE_CASTLE_TOWN_INTERIOR && roomNum == 5)
|
|
|| sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS || sceneNum == Z2SCENE_STAR_TENT)
|
|
{
|
|
Z2GetSeqMgr()->muteSceneBgm(0, 0.5f);
|
|
}
|
|
break;
|
|
case Z2BGM_TOAL_NIGHT:
|
|
if (sceneNum == Z2SCENE_ORDON_INTERIOR && roomNum == 2) {
|
|
Z2GetSeqMgr()->changeBgmStatus(2);
|
|
} else {
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
break;
|
|
case Z2BGM_FILONE_FOREST:
|
|
if (sceneNum == Z2SCENE_CORO_SHOP
|
|
|| (sceneNum == Z2SCENE_FARON_WOODS && roomNum == 14))
|
|
{
|
|
Z2GetSeqMgr()->changeBgmStatus(2);
|
|
} else {
|
|
Z2GetSeqMgr()->changeBgmStatus(0);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (!Z2GetSeqMgr()->bgmStreamCheckReady()) {
|
|
Z2GetSeqMgr()->bgmStreamPrepare(BGM_ID);
|
|
}
|
|
Z2GetSeqMgr()->bgmStreamPlay();
|
|
break;
|
|
}
|
|
}
|
|
|
|
Z2GetSeqMgr()->bgmAllUnMute(0);
|
|
field_0x1a = false;
|
|
}
|
|
|
|
void Z2SceneMgr::loadStaticWaves() {
|
|
OS_REPORT("[Z2SceneMgr::loadStaticWaves] 常駐シーン波形を読み込みます\n");
|
|
#if PLATFORM_SHIELD
|
|
loadSceneWave(0, 2);
|
|
#endif
|
|
loadSeWave(0);
|
|
loadBgmWave(0);
|
|
loadSeWave(0x58);
|
|
field_0x18 = 0x58;
|
|
field_0x19 = 0x58;
|
|
}
|
|
|
|
BOOL Z2SceneMgr::checkFirstWaves() {
|
|
return false;
|
|
}
|
|
|
|
bool Z2SceneMgr::eraseSeWave(u32 wave) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(2976, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(0);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->erase();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Z2SceneMgr::eraseBgmWave(u32 wave) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(2988, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(1);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->erase();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
s32 Z2SceneMgr::getWaveLoadStatus(u32 wave, u32 bank) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(3001, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(bank);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->getStatus();
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#if PLATFORM_SHIELD
|
|
bool Z2SceneMgr::loadSceneWave(u32 wave, u32 bank) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(3014, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(bank);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->load(NULL);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
bool Z2SceneMgr::loadSeWave(u32 wave) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(3030, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(0);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->load(NULL);
|
|
}
|
|
}
|
|
|
|
JUT_WARN_DEVICE(3038, 1, "Z2SceneMgr::cannot load SE wave:%d\n", wave);
|
|
return false;
|
|
}
|
|
|
|
bool Z2SceneMgr::loadBgmWave(u32 wave) {
|
|
JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
|
|
JUT_ASSERT(3047, sectionHeap);
|
|
|
|
JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(1);
|
|
if (wave_bank != NULL) {
|
|
JASWaveArc* wave_arc = wave_bank->getWaveArc(wave);
|
|
if (wave_arc != NULL) {
|
|
return wave_arc->loadTail(NULL);
|
|
}
|
|
}
|
|
|
|
JUT_WARN_DEVICE(3055, 1, "Z2SceneMgr::cannot load BGM wave:%d\n", wave);
|
|
return false;
|
|
}
|