Files
dusklight/src/Z2AudioLib/Z2SeqMgr.cpp
T
qwertyquerty 767ba3bb14 Ongoing gameplay dev (#49)
* launch.json cwd

* bodge to load gci for testing

* stub card stat

* gameplay bodges

* viewport, ub fixes

* add release with debug info cmake variant

* be fixes, sound stub

* viewport h

* d_msg_flow BE

* be fopAcM_createItemFromEnemyID

* update launch configuration to use iso

* more audio stubs

* Attempt to set viewport and get messages for brightness check

* skip opening scene again, fixed JMessage::TResourceContainer::TCResource::Do_destroy

* add guards for viewport changes

* moar endian swapping to get Link sitting in PROC_OPENING_SCENE and for dialogues

* BE d_msg_class i_data

* stub bgm start

* fix div by 0 error (for now)

* TEMP_BROKEN in d_menu_ring

* REQUIRES_GX_LINES

* properly stub renderingAmap::draw with REQUIRES_GX_LINES

* better stubbing outside of stubs

* fix event data getting swapped multiple times

* evil draw vp fix

* Stub log imgui

This redirects all spammy logs to an imgui window that is cleared per frame.

This fixes the serious performance dip of the logging, and makes the regular log readable.

* Oops move those optimization changes I accidentally committed behind a flag

DUSK_SELECTED_OPT

* gx_line macro in map

* fix audio stubbing

* switch to CARD API aurora impl

* remove kabufuda from link libs

* refactor imgui stuff and add input viewer

* merge stub log with refactor

* accidentally committed a metaforce header shh

* basic map loader

* ImGuiConsole: Add missing <thread> include

* you may now play as luigi (you may now load stages with bridges)

* bloom fix

* bloom leak fix

* cloud shadow fix

* add soft reset button to imgui menu

* if it broke dont not fix it

* i swear i committed this

* BE swap indMtx in JPAResource::setPTev

* wnark ct fix

* frsqrte implementation from kinoko

* Fix Clang compile error in JAISeq::prepare_getSeqData_

* Add endian conversions to dMsgFlow_c::getInitNodeIndex

This fixes a freeze when Fado tries to stop you from leaving the
starting area.

* Add RAII GXTexObj wrapper; fix almost all leaks

* Update aurora for indirect texturing

* Update aurora for CARD fix

* Fix Clang build

* More d_msg_flow endian fixes

Fixes softlock when trying to talk to Fado and possibly other NPCs.

* no frame limiter

* get pause menu working

* proper frame limiting

* particle pointer size fix

* improve map loader a bit

---------

Co-authored-by: Jasper St. Pierre <jstpierre@mecheye.net>
Co-authored-by: TakaRikka <takarikka@outlook.com>
Co-authored-by: CraftyBoss <talibabdulmaalik@gmail.com>
Co-authored-by: Luke Street <luke@street.dev>
Co-authored-by: Lurs <2795933+Lurs@users.noreply.github.com>
Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
Co-authored-by: tgsm <doodrabbit@hotmail.com>
Co-authored-by: Max Roncace <me@caseif.net>
Co-authored-by: Phillip Stephens <antidote.crk@gmail.com>
2026-03-12 04:01:03 -07:00

2351 lines
80 KiB
C++

#include "Z2AudioLib/Z2SeqMgr.h"
#include "Z2AudioLib/Z2LinkMgr.h"
#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2SceneMgr.h"
#include "Z2AudioLib/Z2SoundMgr.h"
#include "Z2AudioLib/Z2SoundObjMgr.h"
#include "Z2AudioLib/Z2StatusMgr.h"
#include "Z2AudioLib/Z2Calc.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAISeq.h"
#include "os_report.h"
#include "dusk/audio.h"
static const char* sSpotName[] = {
"F_SP00",
"F_SP103",
"R_SP01",
"F_SP104",
"R_SP107",
"F_SP108",
"R_SP108",
"F_SP117",
"F_SP109",
"R_SP109",
"R_SP209",
"F_SP110",
"R_SP110",
"F_SP111",
"F_SP128",
"R_SP128",
"F_SP115",
"F_SP112",
"F_SP126",
"F_SP127",
"R_SP127",
"F_SP113",
"F_SP116",
"R_SP116",
"R_SP160",
"R_SP161",
"F_SP114",
"F_SP118",
"F_SP124",
"F_SP125",
"F_SP121",
"F_SP122",
"F_SP123",
"F_SP200",
"F_SP102",
"",
"R_SP300",
"R_SP301",
"T_ENEMY",
"D_MN54",
"D_MN05",
"D_MN05B",
"D_MN05A",
"D_MN04",
"D_MN04B",
"D_MN04A",
"D_MN01",
"D_MN01B",
"D_MN01A",
"D_MN10",
"D_MN10B",
"D_MN10A",
"D_MN11",
"D_MN11B",
"D_MN11A",
"D_MN06",
"D_MN06B",
"D_MN06A",
"D_MN07",
"D_MN07B",
"D_MN07A",
"D_MN08",
"D_MN08B",
"D_MN08C",
"D_MN08A",
"D_MN08D",
"D_MN09",
"D_MN09A",
"D_MN09B",
"D_MN09C",
"D_SB00",
"D_SB01",
"D_SB02",
"D_SB03",
"D_SB04",
"D_SB05",
"D_SB06",
"D_SB07",
"D_SB08",
"D_SB09",
"D_SB10",
};
Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(true) {
mMainBgmMaster.forceIn();
mSubBgmMaster.forceIn();
mBgmPause.forceIn();
mSceneBgm.forceIn();
mFanfareMute.forceIn();
mStreamBgmMaster.forceIn();
field_0x84.forceIn();
mWindStone.forceIn();
mTwilightGateVol = 1.0f;
mAllBgmMaster.forceIn();
field_0xa4.forceIn();
#if DEBUG
field_0x00_debug = 1.0f;
field_0x04_debug = 0;
#endif
field_0xb8 = -1;
resetBattleBgmParams();
mBgmStatus = 0xff;
mSubBgmStatus = 0xff;
mFanfareCount = 0;
mDekuToadCount = 0;
mFanfareID.setAnonymous();
field_0xc4 = 0;
mFlags.mRiding = false;
field_0xc8 = 1.0f;
field_0xcc = 1.0f;
mRideCount = 0;
mFlags.mFieldBgmPlay = false;
mFlags.mBattleBgmOff = true;
mFlags.mHeightVolMod = false;
mFlags.mTimeProcVolMod = false;
}
void Z2SeqMgr::bgmStart(u32 bgmID, u32 fadeTime, s32 param_2) {
DUSK_AUDIO_SKIP();
switch (bgmID) {
case 0xFFFFFFFF:
return;
case 0x200005D:
bgmAllUnMute(33);
bgmStreamPrepare(0x200005d);
bgmStreamPlay();
return;
case Z2BGM_BOSSBABA_1:
param_2 = 1;
mMainBgmMaster.forceIn();
break;
case Z2BGM_GAME_OVER:
if (getMainBgmID() == bgmID) {
return;
}
Z2GetSceneMgr()->setInGame(false);
Z2GetSceneMgr()->setSceneExist(false);
setBattleBgmOff(true);
Z2GetSoundMgr()->getSeqMgr()->stop(0);
Z2GetSoundMgr()->getStreamMgr()->stop(0);
Z2GetSoundMgr()->startSound(bgmID, &mMainBgmHandle, NULL);
mBgmStatus = 0xff;
return;
case Z2BGM_LAKE:
if (Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL &&
Z2GetLink()->getCurrentPos()->y > -10000.0f)
{
bgmID = Z2BGM_RAKKA_HOUSE;
}
break;
case Z2BGM_VS_GANON_01:
bgmAllUnMute(0);
// fallthrough
case Z2BGM_VS_GANON_02:
case Z2BGM_VS_GANON_04:
case Z2BGM_GOMA_BTL02:
if (mStreamBgmHandle) {
mStreamBgmHandle->stop(0);
}
mStreamBgmMaster.forceIn();
}
#if !PLATFORM_SHIELD
if (Z2GetStatusMgr()->getDemoStatus() == 9) {
if (mMainBgmHandle) {
mMainBgmHandle->stop(0);
}
if (param_2 == 0) {
if (mSubBgmHandle) {
mSubBgmHandle->stop(0);
}
mMainBgmMaster.forceIn();
}
} else
#endif
{
bgmStop(0, param_2);
}
if (bgmID == Z2BGM_FIELD_LINK_DAY || bgmID == Z2BGM_FIELD_LINK_NIGHT) {
fieldBgmStart();
} else {
Z2GetSoundMgr()->startSound(bgmID, &mMainBgmHandle, NULL);
mBgmStatus = 0xff;
}
if (param_2 == 0 && fadeTime != 0) {
mMainBgmMaster.fadeInFromOut(fadeTime);
}
if (bgmID == Z2BGM_BOSS_SNOWWOMAN_1 || bgmID == Z2BGM_HORSE_BATTLE
|| bgmID == Z2BGM_VS_GANON_02 || bgmID == Z2BGM_TOAL_VILLEGE)
{
changeBgmStatus(0);
}
if (mFlags.mTimeProcVolMod && !Z2GetStatusMgr()->checkDayTime()) {
field_0xa4.forceOut();
} else {
field_0xa4.forceIn();
}
#if DEBUG
if (bgmID == Z2BGM_HIDDEN_VILLAGE) {
OS_REPORT("[Z2SeqMgr::bgmStart] Z2BGM_HIDDEN_VILLAGE start(%d)\n", mMainBgmHandle.isSoundAttached());
OS_REPORT(" mainBgmMasterVol::%.2f \n", mMainBgmMaster.get());
OS_REPORT(" subBgmMasterVol::%.2f \n", mSubBgmMaster.get());
OS_REPORT(" allBgmMasterVol::%.2f \n", mAllBgmMaster.get());
OS_REPORT(" bgmPauseVol::%.2f \n", mBgmPause.get());
OS_REPORT(" fanfareMuteVol::%.2f \n", mFanfareMute.get());
OS_REPORT(" windStoneVol::%.2f \n", mWindStone.get());
OS_REPORT(" twilightGateVol::%.2f \n", mTwilightGateVol);
}
#endif
}
void Z2SeqMgr::bgmStop(u32 fadeTime, s32 param_1) {
if (mMainBgmHandle) {
mMainBgmHandle->stop(fadeTime);
}
if (mStreamBgmHandle) {
mStreamBgmHandle->stop(fadeTime);
}
if (param_1 == 0) {
if (mSubBgmHandle) {
mSubBgmHandle->stop(fadeTime);
}
mMainBgmMaster.forceIn();
}
}
void Z2SeqMgr::subBgmStart(u32 bgmID) {
if (bgmID == -1) {
return;
}
int fadeinTime = 0;
int fadeoutTime = 0;
switch (bgmID) {
case Z2BGM_ITEM_GET:
case Z2BGM_ITEM_GET_MINI:
case Z2BGM_OPEN_BOX:
case Z2BGM_ITEM_GET_ME:
case Z2BGM_HEART_GET:
case Z2BGM_FISHING_BARE:
case Z2BGM_FISHING_GET1:
case Z2BGM_FISHING_GET2:
case Z2BGM_FISHING_GET3:
case Z2BGM_HOWL_TOBIKUSA:
case Z2BGM_HOWL_UMAKUSA:
case Z2BGM_HOWL_ZELDASONG:
case Z2BGM_HOWL_LIGHT_PRLD:
case Z2BGM_LIGHT_PRLD_DUO:
case Z2BGM_SOUL_REQ_HOWL:
case Z2BGM_SOUL_REQ_DUO:
case Z2BGM_HEALING_HOWL:
case Z2BGM_HEALING_DUO:
case Z2BGM_NEW_01_HOWL:
case Z2BGM_NEW_01_DUO:
case Z2BGM_NEW_02_HOWL:
case Z2BGM_NEW_02_DUO:
case Z2BGM_NEW_03_HOWL:
case Z2BGM_NEW_03_DUO:
case Z2BGM_ITEM_GET_INSECT:
case Z2BGM_ITEM_GET_SMELL:
case Z2BGM_ITEM_GET_POU:
case Z2BGM_ITEM_GET_ME_S:
case Z2BGM_KOMONJO_GET_INTRO:
if (getSubBgmID() == Z2BGM_OBACHAN) {
subBgmStop();
}
mFanfareID = bgmID;
return;
case Z2BGM_FACE_OFF_BATTLE:
case Z2BGM_BOSS_OCTAEEL_D02:
case Z2BGM_DRAGON_D02:
case Z2BGM_FACE_OFF_BATTLE2:
case Z2BGM_FACE_OFF_BATTLE3:
fadeinTime = 0;
fadeoutTime = -1;
break;
case Z2BGM_LUTERA1:
case Z2BGM_BOSS_SNOWWOMAN_D1:
Z2GetStatusMgr()->setDemoName("force_start");
fadeinTime = 0;
fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME;
break;
case Z2BGM_TARO_RESCUE:
fadeinTime = 0;
fadeoutTime = 120;
bgmStop(0, 0);
break;
case Z2BGM_OBACHAN:
case Z2BGM_POSTMAN:
if (mSubBgmHandle) {
mSubBgmHandle->stop(0);
}
// fallthrough
case Z2BGM_FISHING_HIT:
case Z2BGM_SNOW_BOARD:
case Z2BGM_RIVER_GAME:
case Z2BGM_RIVER_GAME_00:
setBattleBgmOff(true);
// fallthrough
case Z2BGM_BOSSBABA_0:
case Z2BGM_WILD_GOAT:
case Z2BGM_EVENT01:
case Z2BGM_MAGNE_GORON:
case Z2BGM_MAGNE_GORON_D02:
case Z2BGM_SUMO:
case Z2BGM_DEKUTOAD:
case Z2BGM_RODEO:
case Z2BGM_BOSSFIREMAN_1:
case Z2BGM_SUMO_D1:
case Z2BGM_STATUE_GAME:
case Z2BGM_BOSS_OCTAEEL_D01:
case Z2BGM_HIDDEN_VIL_D1:
case Z2BGM_IB_MBOSS:
case Z2BGM_GG_MBOSS:
case Z2BGM_WCS_GAME:
case Z2BGM_HARAGIGANT_D01:
case Z2BGM_HARAGIGANT_D02:
case Z2BGM_DRAGON_D01:
case Z2BGM_KOROKORO_GAME:
case Z2BGM_YAMIMUSHI_B_D01:
case Z2BGM_GOMA_D01:
case Z2BGM_MINIGAME_WIN01:
case Z2BGM_MINIGAME_WIN02:
fadeinTime = 0;
fadeoutTime = 1;
break;
case Z2BGM_COWBOY_GAME:
bgmAllUnMute(0);
fadeinTime = 0;
fadeoutTime = 1;
break;
case Z2BGM_SNOWBOARD_WIN:
case Z2BGM_SNOWBOARD_LOSE:
if (mSubBgmHandle) {
mSubBgmHandle->stop(0);
}
// fallthrough
case Z2BGM_BOOMERAMG_MONKEY:
case Z2BGM_VARIANT:
case Z2BGM_TN_MBOSS:
case Z2BGM_P_ZANT:
if (mStreamBgmHandle) {
mStreamBgmHandle->stop(0);
}
// fallthrough
case Z2BGM_HORSE_BATTLE:
case Z2BGM_TN_MBOSS_LV9:
mStreamBgmMaster.forceIn();
fadeinTime = 0;
fadeoutTime = 1;
break;
case Z2BGM_MAGNE_GORON_D01:
case Z2BGM_DEKUTOAD_D01:
fadeinTime = 0;
fadeoutTime = 20;
break;
case Z2BGM_IB_MBOSS_D01:
case Z2BGM_GG_MBOSS_D01:
fadeinTime = 0;
fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME;
break;
default:
fadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME;
fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME;
break;
}
if (bgmID == getSubBgmID()) {
if (bgmID == Z2BGM_SUMO
#if PLATFORM_GCN
|| bgmID == Z2BGM_COWBOY_GAME
#endif
) {
mSubBgmHandle->stop(0);
mSubBgmHandle.releaseSound();
} else {
field_0xb8 = -1;
return;
}
} else if (mSubBgmHandle) {
subBgmStop();
subBgmStopInner();
}
Z2GetSoundMgr()->startSound(bgmID, &mSubBgmHandle, NULL);
mSubBgmStatus = 0xff;
switch (bgmID) {
case Z2BGM_HORSE_BATTLE:
case Z2BGM_FACE_OFF_BATTLE2:
changeSubBgmStatus(0);
break;
case Z2BGM_VARIANT:
case Z2BGM_TN_MBOSS:
bgmStreamStop(0);
// fallthrough
case Z2BGM_TN_MBOSS_LV9:
mStreamBgmMaster.fadeIn(0);
// fallthrough
case Z2BGM_RODEO:
changeSubBgmStatus(1);
break;
}
if (fadeinTime != 0) {
mSubBgmMaster.fadeInFromOut(fadeinTime);
} else {
mSubBgmMaster.forceIn();
}
if (fadeoutTime >= 0) {
mMainBgmMaster.fadeOut(fadeoutTime);
}
field_0xb8 = -1;
#if DEBUG
if (bgmID == Z2BGM_HIDDEN_VIL_D1) {
OS_REPORT("[Z2SeqMgr::subBgmStart] HIDDEN_VIL_D01 start(%d)\n", mSubBgmHandle.isSoundAttached());
OS_REPORT(" subBgmMasterVol::%.2f \n", mSubBgmMaster.get());
OS_REPORT(" mainBgmMasterVol::%.2f \n", mMainBgmMaster.get());
OS_REPORT(" allBgmMasterVol::%.2f \n", mAllBgmMaster.get());
OS_REPORT(" bgmPauseVol::%.2f \n", mBgmPause.get());
OS_REPORT(" fanfareMuteVol::%.2f \n", mFanfareMute.get());
OS_REPORT(" windStoneVol::%.2f \n", mWindStone.get());
OS_REPORT(" twilightGateVol::%.2f \n", mTwilightGateVol);
}
#endif
}
void Z2SeqMgr::subBgmStop() {
switch (getSubBgmID()) {
case Z2BGM_ITEM_GET:
case Z2BGM_ITEM_GET_MINI:
case Z2BGM_OPEN_BOX:
case Z2BGM_ITEM_GET_ME:
case Z2BGM_HEART_GET:
case Z2BGM_FISHING_BARE:
case Z2BGM_FISHING_GET1:
case Z2BGM_FISHING_GET2:
case Z2BGM_FISHING_GET3:
case Z2BGM_ITEM_GET_INSECT:
case Z2BGM_ITEM_GET_SMELL:
case Z2BGM_ITEM_GET_POU:
case Z2BGM_SNOWBOARD_WIN:
case Z2BGM_SNOWBOARD_LOSE:
case Z2BGM_MINIGAME_WIN01:
case Z2BGM_MINIGAME_WIN02:
case Z2BGM_ITEM_GET_ME_S:
case Z2BGM_KOMONJO_GET_INTRO:
return;
case Z2BGM_LUTERA1:
case Z2BGM_BOSS_SNOWWOMAN_D1:
Z2GetStatusMgr()->setDemoName("force_end");
field_0xb8 = 0;
break;
case Z2BGM_HIDDEN_VIL_D1:
bgmStart(Z2BGM_HIDDEN_VILLAGE, 0, 0);
// fallthrough
case Z2BGM_BOSSBABA_0:
case Z2BGM_MAGNE_GORON:
case Z2BGM_MAGNE_GORON_D01:
case Z2BGM_MAGNE_GORON_D02:
case Z2BGM_DEKUTOAD:
case Z2BGM_DEKUTOAD_D01:
case Z2BGM_BOSSFIREMAN_1:
case Z2BGM_SUMO_D1:
case Z2BGM_BOSS_OCTAEEL_D01:
case Z2BGM_BOSS_OCTAEEL_D02:
case Z2BGM_VARIANT:
case Z2BGM_DEATH_MOUNTAIN02:
case Z2BGM_SNOW_BOARD:
case Z2BGM_IB_MBOSS_D01:
case Z2BGM_SUMOMO:
case Z2BGM_RIVER_GAME:
case Z2BGM_GG_MBOSS_D01:
case Z2BGM_HARAGIGANT_D01:
case Z2BGM_HARAGIGANT_D02:
case Z2BGM_DRAGON_D01:
case Z2BGM_DRAGON_D02:
case Z2BGM_YAMIMUSHI_B_D01:
case Z2BGM_GOMA_D01:
case Z2BGM_FACE_OFF_BATTLE3:
case Z2BGM_RIVER_GAME_00:
field_0xb8 = 0;
break;
case Z2BGM_FISHING_HIT:
setBattleBgmOff(false);
mSubBgmHandle->stop(23);
field_0xb8 = 55;
break;
case Z2BGM_IB_MBOSS:
field_0xb8 = 420;
mSubBgmHandle->stop(45);
break;
case Z2BGM_TN_MBOSS:
field_0xb8 = 510;
mSubBgmHandle->stop(45);
break;
case Z2BGM_TN_MBOSS_LV9:
field_0xb8 = 360;
mSubBgmHandle->stop(45);
break;
case Z2BGM_GG_MBOSS:
case Z2BGM_P_ZANT:
field_0xb8 = 420;
mSubBgmHandle->stop(45);
break;
case Z2BGM_OBACHAN:
case Z2BGM_POSTMAN:
setBattleBgmOff(false);
// fallthrough
default:
field_0xb8 = 15;
break;
}
#if DEBUG
if (getSubBgmID() == Z2BGM_HIDDEN_VIL_D1) {
OS_REPORT("[Z2SeqMgr::subBgmStop] HIDDEN_VIL_D01 stop\n");
}
#endif
}
void Z2SeqMgr::subBgmStopInner() {
if (field_0xb8 == -1) {
return;
}
if (!mSubBgmHandle) {
return;
}
int fadeTime = Z2Param::BGM_CROSS_FADEOUT_TIME;
switch (getSubBgmID()) {
case Z2BGM_MAGNE_GORON:
case Z2BGM_MAGNE_GORON_D01:
case Z2BGM_DEKUTOAD:
case Z2BGM_DEKUTOAD_D01:
case Z2BGM_SUMO_D1:
case Z2BGM_VARIANT:
case Z2BGM_IB_MBOSS_D01:
fadeTime = 10;
break;
case Z2BGM_LUTERA1:
fadeTime = 50;
break;
case Z2BGM_RIVER_GAME:
case Z2BGM_RIVER_GAME_00:
fadeTime = 33;
setBattleBgmOff(false);
break;
case Z2BGM_SNOW_BOARD:
fadeTime = 90;
setBattleBgmOff(false);
break;
}
mSubBgmHandle->stop(fadeTime);
mSubBgmHandle.releaseSound();
mMainBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEOUT_TIME);
field_0xb8 = -1;
}
static void dummy1() {
OS_REPORT("[Z2SeqMgr::bgmStreamPrepare] %08x\n");
OS_REPORT("[Z2SeqMgr::bgmStreamPlay] \n");
}
void Z2SeqMgr::bgmStreamPrepare(u32 bgmID) {
DUSK_AUDIO_SKIP();
u32 bgmID2 = bgmID;
if (mStreamBgmHandle) {
bgmStreamStop(0);
}
Z2GetSoundMgr()->startSound(bgmID, &mStreamBgmHandle, NULL);
mStreamBgmHandle->lockWhenPrepared();
switch (bgmID) {
#if PLATFORM_GCN
case 0x2000010:
mAllBgmMaster.forceIn();
// fallthrough
#endif
case 0x200000f:
return;
case 0x2000014:
Z2GetSceneMgr()->setSceneExist(true);
return;
case 0x2000023:
if (!mMainBgmHandle) {
return;
}
mMainBgmHandle->stop(Z2Param::BGM_CROSS_FADEOUT_TIME);
return;
case 0x2000038:
if (mMainBgmHandle) {
mMainBgmHandle->stop(0);
}
// fallthrough
case 0x2000003:
case 0x2000047:
case 0x200005f:
mStreamBgmMaster.fadeOut(0);
return;
case 0x200007c:
mStreamBgmMaster.fadeOut(45);
return;
case 0x200003f:
case 0x200005c:
Z2GetStatusMgr()->setDemoName("force_start");
break;
}
mStreamBgmMaster.fadeOut(Z2Param::BGM_CROSS_FADEOUT_TIME);
}
bool Z2SeqMgr::bgmStreamCheckReady() {
if (mStreamBgmHandle) {
return mStreamBgmHandle->isPrepared();
} else {
return false;
}
}
void Z2SeqMgr::bgmStreamPlay() {
DUSK_AUDIO_SKIP();
if (mStreamBgmHandle) {
mStreamBgmHandle->unlockIfLocked();
}
if (getStreamBgmID() == -1) {
if (mMainBgmHandle) {
mMainBgmHandle->stop(30);
}
}
#if !PLATFORM_SHIELD
else if (getStreamBgmID() == 0x2000000) {
if (mStreamBgmHandle) {
mStreamBgmHandle->stop();
}
bgmStart(Z2BGM_MENU_SELECT, 0, 0);
}
#endif
}
void Z2SeqMgr::bgmStreamStop(u32 fadeTime) {
if (getStreamBgmID() == 0x200003f || getStreamBgmID() == 0x200005c) {
Z2GetStatusMgr()->setDemoName("force_end");
}
if (mStreamBgmHandle) {
mStreamBgmHandle->stop(fadeTime);
}
mStreamBgmHandle.releaseSound();
}
void Z2SeqMgr::changeBgmStatus(s32 status) {
if (mMainBgmHandle) {
u32 moveTime = 0;
bool mute;
#if PLATFORM_SHIELD
f32 volume1 = 1.0f;
f32 volume2 = 1.0f;
f32 volume3 = 1.0f;
f32 volume4 = 1.0f;
#else
f32 volume1, volume2, volume3, volume4;
#endif
switch (getMainBgmID()) {
case Z2BGM_TOAL_VILLEGE:
if (status == mBgmStatus) {
return;
}
if (mBgmStatus != 0xff) {
moveTime = 60;
}
if (status == 1) {
volume1 = 0.65f;
volume2 = 0.0f;
volume3 = 1.0f;
moveTime = 30;
} else {
volume1 = 1.0f;
volume2 = 1.0f;
volume3 = 0.0f;
}
setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, volume3, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, volume3, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_HORSE_BATTLE:
setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_DUNGEON_FOREST:
mute = false;
switch (status) {
case 4:
case 0xc:
muteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME, 0.0f);
// fallthrough
case 7:
mute = true;
break;
case 2:
Z2GetSoundObjMgr()->setForceBattleArea(true, 1500, 5000, 10000);
break;
}
if (!mute) {
unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME);
}
break;
case Z2BGM_DUNGEON_LV2:
switch (status) {
case 0xe:
case 0x10:
case 0x11:
subBgmStart(Z2BGM_DEATH_MOUNTAIN02);
break;
default:
if (getSubBgmID() == Z2BGM_DEATH_MOUNTAIN02) {
subBgmStop();
}
}
return;
case Z2BGM_DUNGEON_LV5:
if (mBgmStatus != 0xff) {
moveTime = 45;
}
if (status == 2 || status == 1) {
volume1 = 0.0f;
volume2 = 1.0f;
} else {
volume1 = 1.0f;
volume2 = 0.0f;
}
setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, volume2, moveTime, -1.0f, -1.0f);
if (status == 4) {
muteSceneBgm(60, 0.29f);
} else {
unMuteSceneBgm(60);
}
break;
case Z2BGM_CASTLE_TOWN:
if (mBgmStatus != 0xff) {
moveTime = 45;
}
switch (status) {
case 0:
case 1:
case 5:
setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
break;
case 2:
setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
break;
case 3:
setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 1.0f, moveTime, -1.0f, -1.0f);
break;
case 4:
setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
break;
}
if (status == 5) {
muteSceneBgm(moveTime, 0.35f);
mFlags.mHeightVolMod = false;
} else {
unMuteSceneBgm(moveTime);
if (status < 2) {
mFlags.mHeightVolMod = false;
} else {
mFlags.mHeightVolMod = true;
}
}
break;
case Z2BGM_HOLY_FOREST:
if (mBgmStatus != 0xff) {
moveTime = 45;
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 5, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 0, -1.0f, -1.0f);
}
if (status == 1) {
volume1 = 0.6f;
volume2 = 1.0f;
} else {
volume1 = 1.0f;
volume2 = 0.0f;
}
setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume2, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_LUTERA2:
if (status == 0) {
muteSceneBgm(0, 0.5f);
} else if (status == 1) {
unMuteSceneBgm(80);
}
break;
case Z2BGM_DEMO08:
if (status == 1) {
setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, 90, -1.0f, -1.0f);
} else if (status == 2) {
bgmStop(90, 0);
} else {
setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 0, -1.0f, -1.0f);
}
break;
case Z2BGM_DEMO10:
if (status == 1) {
setChildTrackVolume(&mMainBgmHandle, 0, 0.3f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, 0.3f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, 0.6f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, 0.6f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, 1.0f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 1.0f, 143, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 1.0f, 143, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 0, -1.0f, -1.0f);
}
break;
case Z2BGM_BOSS_SNOWWOMAN_1:
if (status == 1) {
setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, 1.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 1.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 1.0f, 60, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, 0, -1.0f, -1.0f);
}
break;
case Z2BGM_DUNGEON_LV8:
if (status == mBgmStatus) {
return;
}
if (mBgmStatus != 0xff) {
moveTime = 45;
}
if (status == 0 || status == 0xb) {
volume1 = 1.0f;
volume2 = 0.0f;
volume3 = 0.0f;
volume4 = 0.0f;
} else if (status >= 100) {
volume1 = 0.0f;
volume2 = 1.0f;
volume3 = status < 200 ? 1.0f :
status > 3100 ? 0.0f :
Z2Calc::getParamByExp(status, 3100.0f, 200.0f, 0.3f, 0.0f, 1.0f,
Z2Calc::CURVE_POSITIVE);
volume4 = status < 200 ? 1.0f :
status > 1600 ? 0.0f :
Z2Calc::getParamByExp(status, 1600.0f, 200.0f, 0.3f, 0.0f, 1.0f,
Z2Calc::CURVE_POSITIVE);
} else {
volume1 = 0.0f;
volume2 = 1.0f;
volume3 = 0.0f;
volume4 = 0.0f;
}
setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, volume3, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, volume3, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 14, volume4, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_BOSS_ZANT:
if (status == 0xd) {
mSceneBgm.move(0.3f, 134);
} else {
mSceneBgm.forceIn();
if (status > 6) {
status = (status - 7) * 2;
} else {
status = status * 2 - 1;
}
}
break;
case Z2BGM_FORTUNE:
if (status == 1) {
muteSceneBgm(45, 0.5f);
} else {
unMuteSceneBgm(45);
}
break;
case Z2BGM_DUNGEON_LV9_02:
if (mBgmStatus != 0xff) {
moveTime = 30;
}
if (status == 0xc) {
volume4 = 1.0f;
volume1 = 0.0f;
volume2 = 0.5f;
volume3 = 0.0f;
} else if (status == 8) {
volume4 = 0.0f;
volume1 = 0.5f;
volume2 = 1.0f;
volume3 = 0.8f;
} else if (status > 3000) {
volume4 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 1.0f, 0.0f, false);
volume1 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.0f, 1.0f, false);
volume2 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.5f, 1.0f, false);
volume3 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.0f, 1.0f, false);
}
setChildTrackVolume(&mMainBgmHandle, 0, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, volume3, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_VS_GANON_02:
if (status == mBgmStatus) {
return;
}
if (mBgmStatus != 0xff) {
moveTime = 45;
}
if (status == 1) {
volume1 = 0.0f;
volume2 = 1.0f;
} else {
volume1 = 1.0f;
volume2 = 0.0f;
}
setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, volume2, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, volume2, moveTime, -1.0f, -1.0f);
break;
case Z2BGM_TOAL_NIGHT:
case Z2BGM_FILONE_FOREST:
if (status == 1) {
muteSceneBgm(45, 0.5f);
} else if (status == 2) {
muteSceneBgm(0, 0.5f);
} else {
unMuteSceneBgm(45);
}
break;
case Z2BGM_VS_GANON_04:
if (status == mBgmStatus) {
return;
}
if (status >= 4) {
moveTime = 50;
if (status == 4) {
volume4 = 1.0f;
volume1 = 0.0f;
} else if (status == 5) {
volume4 = 0.0f;
volume1 = 1.0f;
} else if (status == 6) {
volume4 = 0.0f;
volume1 = 0.0f;
} else if (status == 7) {
volume4 = 0.0f;
volume1 = 0.0f;
moveTime = 0;
} else if (status == 8) {
volume4 = 1.0f;
volume1 = 1.0f;
moveTime = 0;
}
setChildTrackVolume(&mMainBgmHandle, 12, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, volume4, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 14, volume1, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 15, volume1, moveTime, -1.0f, -1.0f);
}
break;
}
Z2GetSoundStarter()->setPortData(&mMainBgmHandle, 9, status, -1);
mBgmStatus = status & 0xff;
}
}
void Z2SeqMgr::changeSubBgmStatus(s32 status) {
if (!mSubBgmHandle) {
return;
}
u32 moveTime = 0;
bool bvar2 = true;
switch (getSubBgmID()) {
case Z2BGM_DEKUTOAD:
if (status == 1 && mSubBgmStatus == 2) {
mSubBgmMaster.forceOut();
mDekuToadCount = 100;
} else if (status == 3) {
mSubBgmMaster.forceOut();
mDekuToadCount = 30;
}
break;
case Z2BGM_HORSE_BATTLE:
if (status == mSubBgmStatus) {
return;
}
if (status != 2) {
bvar2 = false;
if (mSubBgmStatus != 0xff) {
moveTime = 40;
}
}
if (status == 1) {
setChildTrackVolume(&mSubBgmHandle, 0, 0.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 1, 0.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 60, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, 60, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f);
}
break;
case Z2BGM_FACE_OFF_BATTLE2:
if (status == mSubBgmStatus) {
return;
}
bvar2 = false;
if (mSubBgmStatus != 0xff) {
moveTime = 30;
}
if (status == 1) {
setChildTrackVolume(&mSubBgmHandle, 0, 0.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, 10, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f);
}
break;
case Z2BGM_RODEO:
if (status == mSubBgmStatus) {
break;
}
if (status == 1) {
if (mSubBgmStatus != 0xff) {
moveTime = 60;
}
setChildTrackVolume(&mSubBgmHandle, 9, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, moveTime, -1.0f, -1.0f);
} else if (status == 2) {
if (mSubBgmStatus != 0xff) {
moveTime = 20;
}
setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, moveTime, -1.0f, -1.0f);
}
break;
case Z2BGM_VARIANT:
switch (status) {
case 1:
switch (mSubBgmStatus) {
case 2:
setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, 15, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, 15, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, 15, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, 15, -1.0f, -1.0f);
break;
case 3:
Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 1, -1);
return;
}
break;
case 2:
setChildTrackVolume(&mSubBgmHandle, 0, 0.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 8, 1.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 1.0f, 10, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, 10, -1.0f, -1.0f);
break;
}
break;
case Z2BGM_BATTLE_TWILIGHT:
if (mSubBgmStatus == status) {
return;
}
if (mSubBgmStatus != 0xff) {
moveTime = 25;
}
bvar2 = false;
if (status == 2) {
setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 5, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
} else if (status == 3) {
setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 4, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 5, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 6, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 7, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 8, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 0, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f);
}
#if PLATFORM_GCN
break;
case Z2BGM_BATTLE_NORMAL:
return;
#endif
}
if (bvar2) {
Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, status, -1);
}
mSubBgmStatus = status & 0xff;
}
void Z2SeqMgr::onVariantBgmJumpEnd(bool param_0) {
if (param_0) {
u32 moveTime = 0;
if (mSubBgmStatus == 3) {
moveTime = 45;
mSubBgmStatus = 1;
}
setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, 0, -1.0f, -1.0f);
}
Z2GetSoundMgr()->getSeqMgr()->calc();
Z2GetSoundMgr()->getSeqMgr()->mixOut();
}
void Z2SeqMgr::changeFishingBgm(s32 param_0) {
switch (param_0) {
case 0:
if (getSubBgmID() == Z2BGM_FISHING_HIT) {
subBgmStop();
}
unMuteSceneBgm(Z2Param::BGM_CROSS_FADEOUT_TIME);
break;
case 1:
if (getSubBgmID() == Z2BGM_FISHING_HIT) {
subBgmStop();
}
muteSceneBgm(2, 0.5f);
break;
case 2:
subBgmStart(Z2BGM_FISHING_HIT);
muteSceneBgm(1, 0.0f);
break;
case 4:
if (getSubBgmID() == Z2BGM_FISHING_HIT) {
subBgmStop();
}
muteSceneBgm(1, 0.0f);
break;
}
}
static void dummy2() {
OS_REPORT("[Z2SeqMgr::talkInBgm]\n");
OS_REPORT("[Z2SeqMgr::talkOutBgm]\n");
OS_REPORT("[Z2SeqMgr::menuInBgm]\n");
OS_REPORT("[Z2SeqMgr::menuOutBgm]\n");
OS_REPORT("[Z2SeqMgr::fanfareFramework] mOpenBoxWait = %d\n");
}
void Z2SeqMgr::talkInBgm() {
if (getStreamBgmID() == 0x2000038 || getStreamBgmID() == 0x200007c || getMainBgmID() == Z2BGM_WCS_D01) {
return;
}
mBgmPause.move(Z2Param::VOL_BGM_TALKING, 2);
}
void Z2SeqMgr::talkOutBgm() {
mBgmPause.move(Z2Param::VOL_BGM_DEFAULT, 2);
}
void Z2SeqMgr::menuInBgm() {
mBgmPause.move(Z2Param::VOL_BGM_PAUSING, 2);
}
void Z2SeqMgr::menuOutBgm() {
mBgmPause.move(Z2Param::VOL_BGM_DEFAULT, 2);
}
void Z2SeqMgr::fanfareFramework() {
u8 r30;
switch (mFanfareID) {
case Z2BGM_OPEN_BOX:
mFanfareCount = 150;
// fallthrough
case Z2BGM_KOMONJO_GET_INTRO:
Z2GetSoundMgr()->startSound(mFanfareID, &mFanfareHandle, 0);
mFanfareMute.fadeOut(1);
mFanfareID.setAnonymous();
break;
case Z2BGM_ITEM_GET_ME:
if (mFanfareCount == 0) {
Z2GetSoundMgr()->startSound(mFanfareID, &mFanfareHandle, 0);
mFanfareCount = 25;
}
if (mFanfareCount == 1) {
mFanfareMute.fadeOut(1);
mFanfareID.setAnonymous();
mFanfareCount = 0;
}
break;
case Z2BGM_FISHING_BARE:
case Z2BGM_FISHING_GET1:
case Z2BGM_FISHING_GET2:
case Z2BGM_FISHING_GET3:
changeFishingBgm(0);
// fallthrough
case Z2BGM_ITEM_GET:
case Z2BGM_ITEM_GET_MINI:
case Z2BGM_HEART_GET:
case Z2BGM_ITEM_GET_INSECT:
case Z2BGM_ITEM_GET_SMELL:
case Z2BGM_ITEM_GET_POU:
case Z2BGM_ITEM_GET_ME_S:
r30 = mFanfareCount;
if (mFanfareCount == 0) {
Z2GetSoundMgr()->startSound(mFanfareID, &mFanfareHandle, 0);
mFanfareMute.fadeOut(1);
mFanfareID.setAnonymous();
}
break;
case Z2BGM_HOWL_TOBIKUSA:
case Z2BGM_HOWL_UMAKUSA:
case Z2BGM_HOWL_ZELDASONG:
case Z2BGM_HOWL_LIGHT_PRLD:
case Z2BGM_LIGHT_PRLD_DUO:
case Z2BGM_SOUL_REQ_HOWL:
case Z2BGM_SOUL_REQ_DUO:
case Z2BGM_HEALING_HOWL:
case Z2BGM_HEALING_DUO:
case Z2BGM_NEW_01_HOWL:
case Z2BGM_NEW_01_DUO:
case Z2BGM_NEW_02_HOWL:
case Z2BGM_NEW_02_DUO:
case Z2BGM_NEW_03_HOWL:
case Z2BGM_NEW_03_DUO:
if (mFanfareCount == 0) {
mFanfareCount = 50;
mFanfareMute.fadeOut(30);
} else if (mFanfareCount == 1) {
Z2GetSoundMgr()->startSound(mFanfareID, &mFanfareHandle, 0);
mFanfareID.setAnonymous();
}
break;
}
if (!isItemGetDemo() && mFanfareMute.getDest() != 1.0f) {
mFanfareMute.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME);
}
if (mFanfareCount != 0) {
mFanfareCount--;
}
}
void Z2SeqMgr::stopWolfHowlSong() {
switch (mFanfareID) {
case Z2BGM_HOWL_TOBIKUSA:
case Z2BGM_HOWL_UMAKUSA:
case Z2BGM_HOWL_ZELDASONG:
case Z2BGM_HOWL_LIGHT_PRLD:
case Z2BGM_LIGHT_PRLD_DUO:
case Z2BGM_SOUL_REQ_HOWL:
case Z2BGM_SOUL_REQ_DUO:
case Z2BGM_HEALING_HOWL:
case Z2BGM_HEALING_DUO:
case Z2BGM_NEW_01_HOWL:
case Z2BGM_NEW_01_DUO:
case Z2BGM_NEW_02_HOWL:
case Z2BGM_NEW_02_DUO:
case Z2BGM_NEW_03_HOWL:
case Z2BGM_NEW_03_DUO:
mFanfareID.setAnonymous();
mFanfareCount = 0;
break;
}
if (mFanfareHandle) {
switch (mFanfareHandle->getID()) {
case Z2BGM_HOWL_TOBIKUSA:
case Z2BGM_HOWL_UMAKUSA:
case Z2BGM_HOWL_ZELDASONG:
case Z2BGM_HOWL_LIGHT_PRLD:
case Z2BGM_LIGHT_PRLD_DUO:
case Z2BGM_SOUL_REQ_HOWL:
case Z2BGM_SOUL_REQ_DUO:
case Z2BGM_HEALING_HOWL:
case Z2BGM_HEALING_DUO:
case Z2BGM_NEW_01_HOWL:
case Z2BGM_NEW_01_DUO:
case Z2BGM_NEW_02_HOWL:
case Z2BGM_NEW_02_DUO:
case Z2BGM_NEW_03_HOWL:
case Z2BGM_NEW_03_DUO:
mFanfareHandle->stop(30);
}
}
}
void Z2SeqMgr::setHeightVolMod(bool isVolMod, u32 fadeTime) {
mFlags.mHeightVolMod = isVolMod;
if (!isVolMod) {
field_0x84.fadeIn(fadeTime);
}
}
void Z2SeqMgr::setTimeProcVolMod(bool isVolMod, u32 fadeTime) {
mFlags.mTimeProcVolMod = isVolMod;
}
static f32 sDeathMtBottom = -1000.0f;
static f32 sDeathMtTop = 3650.0f;
static f32 sUnderWaterDepthMax = 3500.0f;
void Z2SeqMgr::processBgmFramework() {
fanfareFramework();
battleBgmFramework();
mbossBgmMuteProcess();
fieldBgmFramework();
if (!mStreamBgmHandle && mStreamBgmMaster.getDest() != 1.0f) {
mStreamBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME);
}
if (field_0xb8 != -1) {
if (field_0xb8 > 0) {
field_0xb8--;
} else {
subBgmStopInner();
field_0xb8 = -1;
}
} else if (!mSubBgmHandle && mMainBgmMaster.getDest() != 1.0f) {
mMainBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME);
}
if (mFlags.mTimeProcVolMod) {
if (Z2GetStatusMgr()->checkDayTime() && field_0xa4.getDest() != 1.0f) {
field_0xa4.fadeIn(600);
} else if (!Z2GetStatusMgr()->checkDayTime() && field_0xa4.getDest() != 0.0f) {
field_0xa4.fadeOut(600);
}
}
if (mFlags.mHeightVolMod && Z2GetSceneMgr()->isSceneExist()
&& Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL)
{
f32 link_y = Z2GetLink()->getCurrentPos()->y;
f32 depth;
switch (getMainBgmID()) {
case Z2BGM_DEATH_MOUNTAIN01:
field_0x84.move(Z2Calc::getParamByExp(link_y, sDeathMtTop, sDeathMtBottom, 0.3f, 0.0f, 1.0f, Z2Calc::CURVE_NEGATIVE), 0);
break;
case Z2BGM_RAKKA_HOUSE:
if (link_y < -10500.0f) {
bgmStart(Z2BGM_LAKE, 150, 0);
field_0x84.forceIn();
} else if (link_y < -7500.0f) {
field_0x84.move(Z2Calc::getParamByExp(link_y, -10500.0f, -7500.0f, 0.3f, 0.0f, 1.0f, Z2Calc::CURVE_POSITIVE), 0);
}
break;
case Z2BGM_FIELD_LINK_DAY:
case Z2BGM_FIELD_LINK_NIGHT:
case Z2BGM_ZORA_VILLAGE:
case Z2BGM_FISHING:
case Z2BGM_LAKE:
depth = Z2GetStatusMgr()->getCameraInWaterDepth();
if (depth > sUnderWaterDepthMax) {
field_0x84.forceOut();
} else if (depth > 0.0f) {
field_0x84.move(Z2Calc::getParamByExp(depth, sUnderWaterDepthMax, 0.0f, 0.3f, 0.1f, 1.0f, Z2Calc::CURVE_POSITIVE), 0);
} else if (field_0x84.getDest() != 1.0f) {
field_0x84.fadeIn(30);
}
break;
case Z2BGM_SNOW_MOUNTAIN:
if (Z2GetSceneMgr()->getCurrentRoomNum() == 0) {
if (link_y > -1500.0f) {
field_0x84.move(0.3f, 0);
} else if (link_y > -13000.0f) {
field_0x84.move(Z2Calc::getParamByExp(link_y, -1500.0f, -13000.0f, 0.3f, 0.3f, 1.0f, Z2Calc::CURVE_NEGATIVE), 0);
} else {
field_0x84.forceIn();
}
} else if (Z2GetSceneMgr()->getCurrentRoomNum() == 1) {
if (link_y > -4500.0f) {
field_0x84.fadeOut(30);
} else if (link_y > -45000.0f) {
field_0x84.move(Z2Calc::getParamByExp(link_y, -3000.0f, -45000.0f, 0.3f, 0.0f, 1.0f, Z2Calc::CURVE_NEGATIVE), 0);
} else {
field_0x84.forceIn();
}
} else if (Z2GetSceneMgr()->getCurrentRoomNum() == 2) {
if (link_y > 900.0f) {
field_0x84.forceOut();
} else if (link_y > -1500.0f) {
field_0x84.move(Z2Calc::getParamByExp(link_y, 900.0f, -1500.0f, 0.3f, 0.0f, 0.3f, Z2Calc::CURVE_NEGATIVE), 0);
} else {
field_0x84.move(0.3f, 0);
}
}
break;
case Z2BGM_DUNGEON_LV9_02:
changeBgmStatus(link_y);
break;
}
}
if (mDekuToadCount != 0) {
mDekuToadCount--;
if (getSubBgmID() == Z2BGM_DEKUTOAD) {
if (mDekuToadCount == 60) {
mSubBgmMaster.fadeIn(60);
mDekuToadCount = 0;
} else if (mDekuToadCount == 0) {
mSubBgmMaster.fadeIn(30);
}
}
}
mAllBgmMaster.calc();
mBgmPause.calc();
mFanfareMute.calc();
mSceneBgm.calc();
mMainBgmMaster.calc();
mSubBgmMaster.calc();
mStreamBgmMaster.calc();
field_0x84.calc();
mWindStone.calc();
field_0xa4.calc();
f32 base_vol = mAllBgmMaster.get() * mBgmPause.get() * mFanfareMute.get() * mWindStone.get() * mTwilightGateVol;
#if DEBUG
if (field_0x04_debug) {
base_vol *= field_0x00_debug;
}
#endif
if (mMainBgmHandle) {
f32 volume = 1.0f;
if (getMainBgmID() != Z2BGM_GAME_OVER) {
volume = base_vol * mMainBgmMaster.get() * mSceneBgm.get() * mStreamBgmMaster.get() * field_0x84.get() * field_0xa4.get();
}
mMainBgmHandle->getAuxiliary().moveVolume(volume, 0);
}
if (mSubBgmHandle) {
mSubBgmHandle->getAuxiliary().moveVolume(base_vol * mSubBgmMaster.get() * mStreamBgmMaster.get(), 0);
}
if (mStreamBgmHandle) {
mStreamBgmHandle->getAuxiliary().moveVolume(base_vol * mMainBgmMaster.get() * mSceneBgm.get(), 0);
}
setWindStoneVol(1.0f, 30);
}
bool Z2SeqMgr::checkBgmIDPlaying(u32 bgmID) {
if (getMainBgmID() == bgmID) {
return true;
}
if (getSubBgmID() == bgmID) {
return true;
}
if (getStreamBgmID() == bgmID) {
return true;
}
return false;
}
f32 Z2SeqMgr::getChildTrackVolume(JAISoundHandle* handle, int trackId) {
JUT_ASSERT(2030, handle);
f32 volume = 0.0f;
if (*handle) {
JAISeq* seq = handle->getSound()->asSeq();
if (seq != NULL) {
JASTrack* track = seq->getChildTrack(trackId);
if (!track) {
int r24 = trackId;
} else {
JAISoundChild* child = seq->getChild(trackId);
if (child != NULL) {
volume = child->mMove.params_.mVolume;
f32 f30 = volume;
}
}
}
}
return volume;
}
static void dummy3() {
OS_REPORT("[Z2SeqMgr::getChildTrackVolume]シーケンスがないですよ。\n");
OS_REPORT("[Z2SeqMgr::getChildTrackVolume]子トラック%dがオープンしてませんよ\n");
OS_REPORT("[Z2SeqMgr::getChildTrackVolume]子トラック%dのボリューム%.2f\n");
OS_REPORT("[Z2SeqMgr::setChildTrackVolume]シーケンスがないですよ。\n");
OS_REPORT("[Z2SeqMgr::setChildTrackVolume]子トラック%dがオープンしてませんよ\n");
OS_REPORT("[Z2SeqMgr::setChildTrackVolume]子トラック%dのボリューム%.2f → %.2f カウント %d\n");
}
void Z2SeqMgr::setChildTrackVolume(JAISoundHandle* handle, int trackId, f32 volume,
u32 moveTime, f32 pan, f32 dolby) {
int r24;
JUT_ASSERT(2064, handle);
if (!*handle) {
return;
}
JAISeq* seq = handle->getSound()->asSeq();
if (seq == NULL) {
return;
}
JASTrack* track = seq->getChildTrack(trackId);
if (track == NULL) {
r24 = trackId;
return;
}
JAISoundChild* child = seq->getChild(trackId);
if (child == NULL) {
return;
}
if (volume > 1.0f) {
volume = 1.0f;
} else if (volume < 0.0f) {
volume = 0.0f;
}
child->mMove.moveVolume(volume, moveTime);
u32 r23 = moveTime;
if (pan != -1.0f) {
child->mMove.movePan(pan, moveTime);
}
if (dolby != -1.0f) {
child->mMove.moveDolby(dolby, moveTime);
}
}
void Z2SeqMgr::resetBattleBgmParams() {
if (Z2GetSoundObjMgr() != NULL) {
Z2GetSoundObjMgr()->setForceBattleArea(false, 700, 1100, 1500);
}
}
void Z2SeqMgr::setBattleBgmOff(bool isBgmOff) {
if (mFlags.mBattleBgmOff != isBgmOff && isBgmOff &&
(getSubBgmID() == Z2BGM_BATTLE_NORMAL || getSubBgmID() == Z2BGM_BATTLE_TWILIGHT))
{
stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME);
}
mFlags.mBattleBgmOff = isBgmOff;
}
void Z2SeqMgr::setBattleSearched(bool isBattleSearched) {
if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist()
&& mFlags.mBattleSearched != isBattleSearched && mBattleSeqState != 3)
{
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL && mBattleSeqState == 1) {
if (isBattleSearched) {
setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f);
} else {
setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f);
}
}
mFlags.mBattleSearched = isBattleSearched;
}
}
void Z2SeqMgr::setBattleDistIgnore(bool isBattleDistIgnore) {
mFlags.mBattleDistIgnore = isBattleDistIgnore;
}
void Z2SeqMgr::setBattleGhostMute(bool isBattleGhostMute) {
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) {
if (isBattleGhostMute) {
mSubBgmMaster.move(1.0f, 5);
} else {
mSubBgmMaster.move(0.4f, 5);
}
}
}
void Z2SeqMgr::setBattleDistState(u8 state) {
if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist()) {
if (!mFlags.mBattleDistIgnore) {
if (state < 2 && mBattleSeqCount != 0) {
mBattleSeqCount = 0;
if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT || getSubBgmID() == Z2BGM_BATTLE_NORMAL)
{
JAISoundFader* fader = mSubBgmHandle->getFader();
fader->fadeIn(10);
mMainBgmMaster.fadeOut(10);
}
}
#if !DEBUG
if ((Z2GetSoundObjMgr()->isTwilightBattle() && getSubBgmID() == Z2BGM_BATTLE_NORMAL) ||
(!Z2GetSoundObjMgr()->isTwilightBattle() && getSubBgmID() == Z2BGM_BATTLE_TWILIGHT))
{
mSubBgmHandle->stop(30);
mSubBgmHandle->releaseHandle();
}
#endif
if (Z2GetSoundObjMgr()->isTwilightBattle() || getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) {
switch (state) {
case 0:
if (mBattleSeqState == 0) {
startBattleBgm(true);
}
break;
case 1:
if (mBattleSeqState == 0) {
startBattleBgm(true);
}
break;
case 3:
if (mBattleSeqState != 0) {
stopBattleBgm(25, 25);
}
break;
}
} else if (getMainBgmID() != Z2BGM_FIELD_LINK_DAY) {
switch (state) {
case 0:
if (mBattleSeqState == 0) {
startBattleBgm(true);
} else if (mBattleSeqState == 1) {
setChildTrackVolume(&mSubBgmHandle, data_8045086C, 1.0f, Z2Param::CLOSE_BATTLE_TRACK_FI_TIME, -1.0f, -1.0f);
}
break;
case 1:
if (mBattleSeqState == 0) {
startBattleBgm(true);
} else if (mBattleSeqState == 1) {
setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, Z2Param::CLOSE_BATTLE_TRACK_FO_TIME, -1.0f, -1.0f);
}
break;
case 2:
if (mBattleSeqState == 1) {
setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, Z2Param::CLOSE_BATTLE_TRACK_FO_TIME, -1.0f, -1.0f);
}
break;
case 3:
if (mBattleSeqState == 1 || mBattleSeqState == 2) {
stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME);
}
break;
}
}
}
mBattleDistState = state;
}
}
void Z2SeqMgr::setBattleSeqState(u8 state) {
if (mFlags.mBattleBgmOff) {
return;
}
if (!Z2GetSceneMgr()->isSceneExist()) {
return;
}
if (mBattleSeqState == state) {
return;
}
if (state == 0) {
stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME);
return;
}
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL && !(getMainBgmID() == Z2BGM_FIELD_LINK_DAY && !Z2GetSoundObjMgr()->isTwilightBattle())) {
switch (state) {
case 2:
if (mBattleSeqState == 1) {
Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 1, -1);
setChildTrackVolume(&mSubBgmHandle, data_8045086C, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, 0, -1.0f, -1.0f);
}
if (mBattleSeqCount != 0) {
mBattleSeqCount = 0;
JAISoundFader* fader = mSubBgmHandle->getFader();
fader->fadeIn(10);
mMainBgmMaster.fadeOut(10);
}
break;
case 3:
mMainBgmMaster.forceOut();
mSubBgmMaster.forceIn();
if (mBattleSeqState == 1) {
Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 3, -1);
} else if (mBattleSeqState == 2) {
Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 2, -1);
}
break;
}
mBattleSeqState = state;
}
}
void Z2SeqMgr::setBattleLastHit(u8 lastHit) {
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) {
setBattleDistIgnore(true);
mSubBgmMaster.move(Z2Param::ENEMY_LASTHIT_MUTE_VOLUME, Z2Param::ENDING_BLOW_VOL_DOWN_TIME);
field_0xc1 = Z2Param::ENDING_BLOW_MIN_FINISH_TIME;
mBattleLastHit = lastHit;
}
}
void Z2SeqMgr::battleBgmFramework() {
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL || getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) {
if (mBattleSeqCount != 0) {
mBattleSeqCount--;
if (mBattleSeqCount == 0) {
mSubBgmHandle->stop();
mBattleSeqState = 0;
}
}
}
if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist()) {
Z2GetSoundObjMgr()->searchEnemy();
switch (getSubBgmID()) {
case Z2BGM_BATTLE_TWILIGHT:
break;
case Z2BGM_BATTLE_NORMAL:
if (getMainBgmID() == Z2BGM_FIELD_LINK_DAY && !Z2GetSoundObjMgr()->isTwilightBattle()) {
return;
}
if (field_0xc1 != 0) {
field_0xc1--;
if (field_0xc1 < mBattleLastHit && mSubBgmMaster.getDest() != 1.0f) {
mSubBgmMaster.fadeIn(Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME);
}
if (field_0xc1 == 0) {
setBattleDistIgnore(false);
if (Z2GetSoundObjMgr()->checkBattleFinish()) {
setBattleSeqState(3);
} else if (mSubBgmMaster.getDest() != 1.0f) {
mSubBgmMaster.fadeIn(Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME);
}
}
}
break;
default:
mBattleSeqState = 0;
setBattleDistIgnore(false);
mFlags.mBattleSearched = 0;
field_0xc1 = 0;
mBattleLastHit = Z2Param::ENDING_BLOW_VOL_LOWER_TIME;
}
}
}
void Z2SeqMgr::startBattleBgm(bool isFadeIn) {
if (mFlags.mBattleBgmOff) {
return;
}
if (!Z2GetSceneMgr()->isSceneExist()) {
return;
}
if (mBattleSeqState) {
return;
}
if (!mFlags.mBattleDistIgnore && mBattleDistState > 1) {
return;
}
JAISoundID bgm_id = Z2BGM_BATTLE_NORMAL;
if (Z2GetSceneMgr()->isInDarkness() || Z2GetSoundObjMgr()->isTwilightBattle()) {
bgm_id = Z2BGM_BATTLE_TWILIGHT;
}
u32 subBgmID = getSubBgmID();
s16 ivar2;
u8 fadeinTime, fadeoutTime;
if (subBgmID != bgm_id) {
mBattleSeqState = 1;
if (Z2GetSoundMgr()->startSound(bgm_id, &mSubBgmHandle, NULL)) {
Z2GetSoundObjMgr()->setBattleInit();
mSubBgmStatus = 0xff;
ivar2 = Z2GetLink()->getMoveSpeed() - 23;
if (ivar2 < 0) {
ivar2 = 0;
}
if (ivar2 > Z2Param::BGM_CROSS_FADEIN_TIME) {
ivar2 = Z2Param::BGM_CROSS_FADEIN_TIME;
}
switch (bgm_id) {
case Z2BGM_BATTLE_NORMAL:
fadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME - ivar2;
fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME - ivar2 / 2;
if (!mFlags.mBattleSearched) {
setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, 0, -1.0f, -1.0f);
setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, 0, -1.0f, -1.0f);
}
if (mBattleDistState != 0) {
setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, 0, -1.0f, -1.0f);
}
break;
case Z2BGM_BATTLE_TWILIGHT:
changeSubBgmStatus(Z2GetSoundObjMgr()->isTwilightBattle());
fadeinTime = 25 - ivar2 / 4;
fadeoutTime = 25 - ivar2 / 4;
break;
}
if (isFadeIn) {
mSubBgmMaster.fadeInFromOut(fadeinTime);
} else {
mSubBgmMaster.forceIn();
}
mMainBgmMaster.fadeOut(fadeoutTime);
}
}
}
void Z2SeqMgr::stopBattleBgm(u8 subFadeoutTime, u8 mainFadeinTime) {
if (mBattleSeqCount) {
return;
}
s16 ivar6 = 0;
if (Z2GetLink() != NULL) {
ivar6 = Z2GetLink()->getMoveSpeed() - 23;
}
if (ivar6 < 0) {
ivar6 = 0;
}
if (ivar6 > Z2Param::BGM_CROSS_FADEIN_TIME) {
ivar6 = Z2Param::BGM_CROSS_FADEIN_TIME;
}
if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) {
subFadeoutTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6;
mainFadeinTime = Z2Param::BGM_CROSS_FADEOUT_TIME + ivar6 / 2;
mSubBgmHandle->fadeOut(subFadeoutTime);
mBattleSeqCount = subFadeoutTime;
} else if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) {
if (mSubBgmStatus > 1) {
subFadeoutTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6 / 4;
mainFadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6 / 4;
} else {
subFadeoutTime = 25 + ivar6 / 4;
mainFadeinTime = 25 + ivar6 / 4;
}
mSubBgmHandle->fadeOut(subFadeoutTime);
mBattleSeqCount = subFadeoutTime;
}
mMainBgmMaster.fadeIn(mainFadeinTime);
mBattleDistState = 3;
setBattleDistIgnore(false);
mFlags.mBattleSearched = false;
}
void Z2SeqMgr::fieldBgmStart() {
if (Z2GetSceneMgr()->isSceneExist() && mFlags.mFieldBgmPlay) {
if (Z2GetStatusMgr()->checkDayTime()) {
Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_DAY, &mMainBgmHandle, NULL);
changeBgmStatus(0);
field_0xc4 = 0;
if (Z2GetLink()->isRiding()) {
mFlags.mRiding = true;
mRideCount = 0;
fieldRidingMute();
} else {
mFlags.mRiding = false;
mRideCount = 0;
fieldRidingMute();
}
} else {
Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_NIGHT, &mMainBgmHandle, NULL);
mBgmStatus = 0;
}
}
}
void Z2SeqMgr::fieldRidingMute() {
f32 volume1, volume2;
if (Z2GetSceneMgr()->isSceneExist() && mMainBgmHandle) {
if (mFlags.mRiding) {
volume1 = 1.0f;
volume2 = 0.0f;
} else {
volume1 = 0.0f;
volume2 = 1.0f;
}
setChildTrackVolume(&mMainBgmHandle, 5, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, volume1, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, volume2, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, volume2, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 14, volume2, mRideCount, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 15, volume2, mRideCount, -1.0f, -1.0f);
}
}
void Z2SeqMgr::onFieldBgmJumpStart() {
field_0xc8 = getChildTrackVolume(&mMainBgmHandle, 5);
field_0xcc = getChildTrackVolume(&mMainBgmHandle, 12);
}
void Z2SeqMgr::onFieldBgmJumpEnd() {
setChildTrackVolume(&mMainBgmHandle, 5, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 6, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 7, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 8, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 9, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 10, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 11, field_0xc8, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 12, field_0xcc, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 13, field_0xcc, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 14, field_0xcc, 0, -1.0f, -1.0f);
setChildTrackVolume(&mMainBgmHandle, 15, field_0xcc, 0, -1.0f, -1.0f);
Z2GetSoundMgr()->getSeqMgr()->calc();
Z2GetSoundMgr()->getSeqMgr()->mixOut();
if (mRideCount != 0) {
fieldRidingMute();
}
}
void Z2SeqMgr::fieldBgmFramework() {
if (Z2GetSceneMgr()->isSceneExist() && !Z2GetSceneMgr()->isInDarkness()
&& (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_HYRULE_FIELD || Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_CASTLE_TOWN_GATES)
&& mFlags.mFieldBgmPlay)
{
if (mRideCount != 0) {
mRideCount--;
}
if (getMainBgmID() == Z2BGM_FIELD_LINK_DAY) {
field_0xc4 = Z2GetSoundStarter()->getPortData(&mMainBgmHandle, 10, -1);
if (Z2GetStatusMgr()->isPaused()) {
changeBgmStatus(13);
} else {
if (field_0xc4 != 16) {
if (mFlags.mRiding != Z2GetLink()->isRiding()) {
mFlags.mRiding = Z2GetLink()->isRiding();
mRideCount = 50;
fieldRidingMute();
}
}
if (field_0xc4 == 0 || field_0xc4 == 21 || field_0xc4 == 22
|| field_0xc4 == 23 || field_0xc4 == 24) {
return;
}
if (Z2GetStatusMgr()->getDemoStatus() == 10) {
switch (field_0xc4) {
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 17:
case 18:
case 19:
case 20:
changeBgmStatus(2);
break;
default:
changeBgmStatus(13);
break;
}
} else if (mBattleDistState <= 2) {
if ((field_0xc4 < 7 || field_0xc4 > 15) && mBattleDistState <= 1) {
switch (field_0xc4) {
case 2:
changeBgmStatus(7);
break;
case 3:
changeBgmStatus(6);
break;
case 4:
changeBgmStatus(5);
break;
case 0:
case 1:
case 5:
case 7:
case 19:
case 20:
default:
changeBgmStatus(4);
break;
}
}
} else if (Z2GetStatusMgr()->checkDayTime()) {
if (Z2GetLink()->getMovingTime() < 150) {
switch (field_0xc4) {
case 3:
if (mFlags.mRiding && Z2GetSoundObjMgr()->getEnemyNumVeryFar() == 0) {
changeBgmStatus(3);
}
break;
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 17:
case 18:
case 19:
case 20:
changeBgmStatus(2);
break;
default:
changeBgmStatus(13);
break;
}
} else {
switch (field_0xc4) {
case 2:
case 3:
changeBgmStatus(13);
break;
default:
changeBgmStatus(12);
break;
}
}
} else {
if (field_0xc4 >= 7 && field_0xc4 <= 15 && Z2GetStatusMgr()->getHour() >= 20) {
mMainBgmHandle->stop(60);
mMainBgmHandle.releaseSound();
} else {
switch (field_0xc4) {
case 2:
case 3:
break;
case 17:
case 18:
case 19:
case 20:
changeBgmStatus(11);
break;
default:
changeBgmStatus(10);
break;
}
}
}
}
} else if (getMainBgmID() == Z2BGM_FIELD_LINK_NIGHT) {
if (!Z2GetStatusMgr()->isPaused()) {
u8 hour = Z2GetStatusMgr()->getHour();
if (hour >= 5 && hour < 20) {
mMainBgmHandle->stop(60);
mMainBgmHandle.releaseSound();
}
}
} else if (getMainBgmID() == -1 && !Z2GetStatusMgr()->isPaused() && mBattleSeqState == 0) {
u8 hour = Z2GetStatusMgr()->getHour();
if (hour >= 6 && hour < 19) {
if (hour >= 8) {
Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_DAY, &mMainBgmHandle, NULL);
changeBgmStatus(9);
field_0xc4 = 24;
} else {
Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_DAY, &mMainBgmHandle, NULL);
changeBgmStatus(8);
field_0xc4 = 23;
}
if (Z2GetLink()->isRiding()) {
mFlags.mRiding = true;
mRideCount = 0;
fieldRidingMute();
} else {
mFlags.mRiding = false;
mRideCount = 0;
fieldRidingMute();
}
} else if (hour >= 20 || hour < 5) {
Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_NIGHT, &mMainBgmHandle, NULL);
}
}
}
}
void Z2SeqMgr::mbossBgmMuteProcess() {}
void Z2SeqMgr::bgmSetSwordUsing(s32 param_0) {}
void Z2SeqMgr::bgmNowBattle(f32 param_0) {}
void Z2SeqMgr::taktModeMute() {
mBgmPause.move(0.3f, 10);
}
void Z2SeqMgr::taktModeMuteOff() {
mBgmPause.fadeIn(10);
}