// // Generated by dtk // Translation Unit: JAIZelBasic.cpp // #include "JAZelAudio/JAIZelBasic.h" #include "JAZelAudio/JAIZelParam.h" #include "JAZelAudio/JAIZelSound.h" #include "JSystem/JAudio/JAIConst.h" #include "JSystem/JAudio/JAIGlobalParameter.h" #include "JSystem/JAudio/JAISeMgr.h" #include "JSystem/JAudio/JAISequenceMgr.h" #include "JSystem/JAudio/JAISound.h" #include "JSystem/JAudio/JAIStreamMgr.h" #include "JSystem/JAudio/JAIBankWave.h" #include "JSystem/JAudio/JASSystemHeap.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "d/d_com_inf_game.h" JAIZelBasic* JAIZelBasic::zel_basic; u32 jai_rng_seed = 0x12345678; /* 802A1C78-802A1EB4 .text __ct__11JAIZelBasicFv */ JAIZelBasic::JAIZelBasic() { zel_basic = this; field_0x0021 = 0; field_0x0024 = 0; mpStreamBgmSound = NULL; field_0x0020 = 0; mSubBgmNum = -1; mMainBgmNum = -1; mStreamBgmNum = -1; field_0x0080 = 1.0f; field_0x0084 = 1.0f; field_0x0088 = 1.0f; field_0x008c = 1.0f; field_0x0090 = 1.0f; field_0x0094 = 1.0f; field_0x0098 = 1.0f; field_0x009c = 1.0f; field_0x00a0 = 1.0f; field_0x00a4 = 1.0f; field_0x00ac = 1.0f; field_0x00a8 = 1.0f; mHour = 0; mMinute = 0; mWeekday = 0; field_0x002f = 0; field_0x0030 = 0xc00; field_0x0032 = 0; field_0x0034 = 0; field_0x0038 = 0; field_0x003c = 1.0f; field_0x0041 = 0; field_0x0042 = 0; field_0x0043 = 0; field_0x0044 = 0; field_0x0045 = 0; field_0x0046 = 0; field_0x0047 = 0; field_0x0048.x = 1e+07; field_0x0048.y = 1e+07; field_0x0048.z = 1e+07; field_0x0054.x = 1e+07; field_0x0054.y = 1e+07; field_0x0054.z = 1e+07; field_0x00d0 = 0; field_0x0063 = 0; field_0x00b0 = -1; mSomeSpecialBGMFlag = 0; mLastMinibossSubBGMType = 0; field_0x1f3c = 0; field_0x01f8 = 0; field_0x0201 = 0; field_0x0204 = 0; field_0x0064 = 0; field_0x0065 = 0; field_0x00b8 = 0; field_0x00ba = 0; field_0x00bb = 0; field_0x0206 = 0; field_0x01f9 = 0; field_0x01fa = 0; field_0x0202[0] = 0; field_0x0202[1] = 0; field_0x01fb = 0; field_0x01fc = 0; field_0x023a = 0; field_0x0220 = -1; field_0x0224 = -1; mNextSceneBgmId = 0; field_0x022e = 0; field_0x022f = 0; field_0x0230 = 0; field_0x0231 = 0; mFirstDynamicSceneWaveIndex = 0; field_0x0233 = 0; mSetNum = 0; mSecondDynamicSceneWaveIndex = 0; field_0x0236 = 0; field_0x0237 = 0; field_0x022c = 0; field_0x022d = 0; field_0x00b4 = 0; field_0x00bc = 0; field_0x00c0 = 0; field_0x00c1 = 0; field_0x00c4 = 0; field_0x00c8 = 0; field_0x00c9 = 0; field_0x00ca = 0; mCameraSeaFloorGroupInfo = 0; mIslandRoomNo = dIsleRoom_SeaFloor_e; mLinkSeaFloorGroupInfo = 0; field_0x021e = 0; field_0x00cb = -1; field_0x00cc = 0; field_0x1dd4 = 0; field_0x00b9 = 0; field_0x00cd = 0; field_0x0033 = 0; mIsSailing = 0; field_0x1f40 = 0.0; field_0x00b7 = 0; field_0x0040 = 0; field_0x0207 = 0; mbLandingDemoStarted = 0; field_0x0239 = 0; field_0x0208 = 0; field_0x1ec0 = 0; field_0x00ce = 0; field_0x00bd = 0; field_0x00be = 0; field_0x0061 = 0; field_0x01fd = 0; field_0x01fe = 0; field_0x01ff = 0; field_0x0200 = 0; field_0x0205 = 0; field_0x0066 = 0; #if VERSION > VERSION_JPN field_0x00bf = 0; field_0x0028 = 0; field_0x0062 = 0; #endif } /* 802A1EB4-802A2F48 .text zeldaGFrameWork__11JAIZelBasicFv */ void JAIZelBasic::zeldaGFrameWork() { /* Nonmatching */ } /* 802A2F48-802A2F54 .text heartGaugeOn__11JAIZelBasicFv */ void JAIZelBasic::heartGaugeOn() { field_0x0040 = 2; } /* 802A2F54-802A3058 .text processHeartGaugeSound__11JAIZelBasicFv */ void JAIZelBasic::processHeartGaugeSound() { if (!dComIfGp_event_runCheck() && field_0x0040 != 0) { if (field_0x0034 != 0 && field_0x0206 == 0) { if (field_0x0034 <= 2) { seStart(JA_SE_ALMOST_DIE_ALERM_3, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } else if (field_0x0034 <= 4) { seStart(JA_SE_ALMOST_DIE_ALERM_2, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } else if (field_0x0034 <= 6) { seStart(JA_SE_ALMOST_DIE_ALERM_1, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } field_0x0040--; } } /* 802A3058-802A30A4 .text gframeProcess__11JAIZelBasicFv */ void JAIZelBasic::gframeProcess() { if (!JAInter::SeMgr::seHandle) { return; } if (JAInter::SeMgr::seHandle->mState >= SOUNDSTATE_Playing) { zeldaGFrameWork(); } processFrameWork(); } /* 802A30A4-802A31C0 .text resetProcess__11JAIZelBasicFv */ void JAIZelBasic::resetProcess() { OSReport("[JAIZelBasic::resetProcess]\n"); for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) { if (mpSeSound[i]) { mpSeSound[i]->stop(1); mpSeSound[i] = NULL; mSeNum[i] = 0; field_0x0194[i] = 0; } } menuOut(); for (int i = 0; i < JAIGlobalParameter::getParamSeqPlayTrackMax(); i++) { JAInter::SeqUpdateData* data = JAInter::SequenceMgr::getPlayTrackInfo(i); if (data && data->field_0x48) { data->field_0x48->setSeqInterVolume(SOUNDPARAM_Direct, 0.0f, 1); } } if (JAInter::StreamMgr::getUpdateInfo()->mpSound) { JAInter::StreamMgr::getUpdateInfo()->mpSound->stop(1); } if (JAInter::SeMgr::seHandle) { JAInter::SeMgr::seHandle->setSeqInterVolume(SOUNDPARAM_Direct, 0.0f, 1); } mNextSceneBgmId = 0; field_0x022e = 0; field_0x022d = 0; } /* 802A31C0-802A334C .text resetRecover__11JAIZelBasicFv */ void JAIZelBasic::resetRecover() { if (JAInter::SeMgr::seHandle) { JAInter::SeMgr::seHandle->setSeqInterVolume(SOUNDPARAM_Direct, 1.0f, 0); } for (int i = 0; i < JAIGlobalParameter::getParamSeqPlayTrackMax(); i++) { JAInter::SeqUpdateData* data = JAInter::SequenceMgr::getPlayTrackInfo(i); if (data && data->field_0x48 && data->field_0x48 != JAInter::SeMgr::seHandle) { data->field_0x48->stop(0); } } setScene(0, dIsleRoom_SeaFloor_e, 0, -1); load1stDynamicWave(); sceneBgmStart(); load2ndDynamicWave(); field_0x0080 = 1.0f; field_0x0084 = 1.0f; field_0x0088 = 1.0f; field_0x008c = 1.0f; field_0x0090 = 1.0f; field_0x0094 = 1.0f; field_0x0098 = 1.0f; field_0x009c = 1.0f; field_0x00ac = 1.0f; field_0x00a0 = 1.0f; field_0x00a4 = 1.0f; setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_DEFAULT); setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_DEFAULT); setSeCategoryVolume(2, JAIZelParam::VOL_SE_LINK_MOTION_DEFAULT); setSeCategoryVolume(3, JAIZelParam::VOL_SE_LINK_FOOTNOTE_DEFAULT); setSeCategoryVolume(4, JAIZelParam::VOL_SE_CHAR_VOICE_DEFAULT); setSeCategoryVolume(5, JAIZelParam::VOL_SE_CHAR_MOVE_DEFAULT); setSeCategoryVolume(6, JAIZelParam::VOL_SE_OBJECT_DEFAULT); setSeCategoryVolume(7, JAIZelParam::VOL_SE_ATMOSPHERE_DEFAULT); field_0x0206 = 0; field_0x0207 = 0; field_0x0201 = 0; #if VERSION > VERSION_JPN field_0x00bf = 0; #endif } /* 802A334C-802A33D0 .text bgmStreamPrepare__11JAIZelBasicFUl */ void JAIZelBasic::bgmStreamPrepare(u32 param_1) { if (field_0x0063) { return; } startSoundVec(param_1, &mpStreamBgmSound, NULL, 0, 0, 4); if (mpStreamBgmSound) { mpStreamBgmSound->setPrepareFlag(1); } if (param_1 == JA_STRM_BST_START) { field_0x00be = 1; } mStreamBgmNum = param_1; } /* 802A33D0-802A34A4 .text bgmStreamPlay__11JAIZelBasicFv */ void JAIZelBasic::bgmStreamPlay() { OSReport("[JAIZelBasic::bgmStreamPlay] \n"); if (field_0x0063) { return; } if (mpStreamBgmSound) { mpStreamBgmSound->start(0); } switch (mStreamBgmNum) { case JA_STRM_DEMO_TETRA_FLY: field_0x00ba = 1; if (mpMainBgmSound) { mpMainBgmSound->stop(30); } field_0x1f3c = 0; field_0x0201 = 1; break; case JA_STRM_PROLOGUE: if (mpMainBgmSound) { mpMainBgmSound->stop(30); } field_0x1f3c = 0; break; default: break; } field_0x00b8 = 1; } /* 802A34A4-802A4658 .text bgmStart__11JAIZelBasicFUlUll */ void JAIZelBasic::bgmStart(u32, u32, s32) { /* Nonmatching */ } /* 802A4658-802A4770 .text bgmStop__11JAIZelBasicFUll */ void JAIZelBasic::bgmStop(u32 i_fadeTime, s32 param_2) { if (mMainBgmNum != JA_BGM_GOMA && mMainBgmNum != JA_BGM_GOMA_2) { mSomeSpecialBGMFlag = 0; } if (mpMainBgmSound) { mpMainBgmSound->stop(i_fadeTime); } mpMainBgmSound = NULL; mMainBgmNum = -1; if (mpStreamBgmSound) { mpStreamBgmSound->stop(i_fadeTime); } mpStreamBgmSound = NULL; mStreamBgmNum = -1; if (param_2 == 0) { if (mpSubBgmSound) { mpSubBgmSound->stop(i_fadeTime); mpSubBgmSound = NULL; } mSubBgmNum = -1; field_0x008c = 1.0f; field_0x00bb = 0; field_0x0206 = 0; } demoBgmStop(i_fadeTime); field_0x1f3c = 0; field_0x0201 = 0; mLastMinibossSubBGMType = 0; field_0x0064 = 0; field_0x0065 = 0; field_0x00b8 = 0; field_0x00cb = 0xff; field_0x00cc = 0; field_0x0032 = 0; } /* 802A4770-802A47B8 .text mainBgmStopOnly__11JAIZelBasicFUl */ void JAIZelBasic::mainBgmStopOnly(u32 param_1) { if (mpMainBgmSound) { mpMainBgmSound->stop(param_1); } mpMainBgmSound = NULL; mMainBgmNum = -1; } /* 802A47B8-802A4CDC .text subBgmStart__11JAIZelBasicFUl */ void JAIZelBasic::subBgmStart(u32) { /* Nonmatching */ } /* 802A4CDC-802A4DA4 .text subBgmStop__11JAIZelBasicFv */ void JAIZelBasic::subBgmStop() { /* Nonmatching */ } /* 802A4DA4-802A4EB8 .text subBgmStopInner__11JAIZelBasicFv */ void JAIZelBasic::subBgmStopInner() { /* Nonmatching */ } /* 802A4EB8-802A53B4 .text bgmNowBattle__11JAIZelBasicFf */ void JAIZelBasic::bgmNowBattle(f32) { /* Nonmatching */ } /* 802A53B4-802A5548 .text bgmBattleGFrame__11JAIZelBasicFv */ void JAIZelBasic::bgmBattleGFrame() { /* Nonmatching */ } /* 802A5548-802A55AC .text stopBattleBgm__11JAIZelBasicFv */ void JAIZelBasic::stopBattleBgm() { if (mpSubBgmSound && (mSubBgmNum == JA_BGM_BATTLE_NORM || mSubBgmNum == JA_BGM_SEA_ENEMY)) { mpSubBgmSound->stop(45); mpSubBgmSound = NULL; mSubBgmNum = -1; } } /* 802A55AC-802A564C .text bgmNowKaitengiri__11JAIZelBasicFv */ void JAIZelBasic::bgmNowKaitengiri() { if (field_0x00c8 == 0 && mpSubBgmSound) { switch (mSubBgmNum) { case JA_BGM_BATTLE_NORM: mpSubBgmSound->setTrackVolume(JAIZelParam::BTL_KAITENGIRI_TRACK, 1.0, JAIZelParam::BTL_KAITENGIRI_FADEIN_TIME); break; case JA_BGM_MBOSS: case JA_BGM_MBOSS_S: mpSubBgmSound->setTrackVolume(JAIZelParam::MBOSS_BTL_KAITENGIRI_TRACK, 1.0, JAIZelParam::BTL_KAITENGIRI_FADEIN_TIME); break; default: break; } } field_0x00c8 = 2; } /* 802A564C-802A579C .text bgmHitSound__11JAIZelBasicFl */ void JAIZelBasic::bgmHitSound(s32) { /* Nonmatching */ } /* 802A579C-802A57A4 .text bgmSetSwordUsing__11JAIZelBasicFl */ void JAIZelBasic::bgmSetSwordUsing(s32 param_1) { field_0x00c9 = param_1; } /* 802A57A4-802A5818 .text onEnemyDamage__11JAIZelBasicFv */ void JAIZelBasic::onEnemyDamage() { if (mSubBgmNum == JA_BGM_SEA_ENEMY) { if (mpSubBgmSound) { mpSubBgmSound->setPortData(9, 1); } } else if (mSubBgmNum == JA_BGM_BATTLE_NORM) { if (mpSubBgmSound) { JASystem::TTrack* track = mpSubBgmSound->getSeqParameter()->getRootTrackPointer(); if (track) { track->writePortApp(0x000b0000, 1); } } } } /* 802A5818-802A591C .text mbossBgmMuteProcess__11JAIZelBasicFv */ void JAIZelBasic::mbossBgmMuteProcess() { /* Nonmatching */ } /* 802A591C-802A59B0 .text mbossBgmNearByProcess__11JAIZelBasicFf */ void JAIZelBasic::mbossBgmNearByProcess(f32 param_1) { if (!mpSubBgmSound) { return; } if (param_1 <= JAIZelParam::ENEMY_NEARBY_DIST) { field_0x00c4 = 0; if (field_0x00c1 == 0) { mpSubBgmSound->setTrackVolume(JAIZelParam::MBOSS_ENEMY_NEARBY_TRACK, 1.0, JAIZelParam::ENEMY_NEARBY_FADEIN_TIME); field_0x00c1 = 1; } } else { if (field_0x00c1 == 1) { field_0x00c4 = JAIZelParam::ENEMY_NEARBY_FADEOUT_TIME; field_0x00c1 = 0; } } } /* 802A59B0-802A59D8 .text checkBgmPlaying__11JAIZelBasicFv */ bool JAIZelBasic::checkBgmPlaying() { if (mpMainBgmSound || mpStreamBgmSound) { return true; } else { return false; } } /* 802A59D8-802A59F4 .text checkPlayingMainBgmFlag__11JAIZelBasicFv */ int JAIZelBasic::checkPlayingMainBgmFlag() { if (mpMainBgmSound) { return mpMainBgmSound->getID(); } else { return -1; } } /* 802A59F4-802A5A04 .text checkSubBgmPlaying__11JAIZelBasicFv */ BOOL JAIZelBasic::checkSubBgmPlaying() { if (mpSubBgmSound != NULL) { return TRUE; } else { return FALSE; } } /* 802A5A04-802A5A20 .text checkPlayingSubBgmFlag__11JAIZelBasicFv */ int JAIZelBasic::checkPlayingSubBgmFlag() { if (mpSubBgmSound) { return mpSubBgmSound->getID(); } else { return -1; } } /* 802A5A20-802A5A40 .text checkPlayingStreamBgmFlag__11JAIZelBasicFv */ int JAIZelBasic::checkPlayingStreamBgmFlag() { if (JAInter::StreamMgr::getUpdateInfo()->mpSound == NULL) { return -1; } else { return JAInter::StreamMgr::getUpdateInfo()->mpSound->getID(); } } /* 802A5A40-802A5A78 .text changeBgmStatus__11JAIZelBasicFl */ void JAIZelBasic::changeBgmStatus(s32 param_0) { if (mpMainBgmSound) { mpMainBgmSound->setPortData(9, param_0); } } /* 802A5A78-802A5AC0 .text changeSubBgmStatus__11JAIZelBasicFl */ void JAIZelBasic::changeSubBgmStatus(s32 param_1) { if (mpSubBgmSound) { JASystem::TTrack* track = mpSubBgmSound->getSeqParameter()->getRootTrackPointer(); track->writePortApp(0x00090000, param_1); } } /* 802A5AC0-802A5ACC .text bgmMuteMtDragon__11JAIZelBasicFv */ void JAIZelBasic::bgmMuteMtDragon() { field_0x0065 = 1; } /* 802A5ACC-802A5BA4 .text enemyNearBy__11JAIZelBasicFv */ void JAIZelBasic::enemyNearBy() { if (mpMainBgmSound && mMainBgmNum == JA_BGM_DK_BATTLE && field_0x00cb == -1) { if (field_0x00cc == 0) { bgmStart(JA_BGM_UNK_111, 0, 0); } else { bgmStart(JA_BGM_UNK_112, 0, 0); } } if (mpMainBgmSound && mMainBgmNum == JA_BGM_MJ_TOWER_BATTLE && field_0x00cb == -1) { bgmStart(JA_BGM_UNK_115, 0, 0); } field_0x00cb = JAIZelParam::COMMON_BATTLE_FO_DELAY; } /* 802A5BA4-802A5C8C .text enemyNearByGFrame__11JAIZelBasicFv */ void JAIZelBasic::enemyNearByGFrame() { /* Nonmatching */ } /* 802A5C8C-802A5D0C .text bgmAllMute__11JAIZelBasicFUl */ void JAIZelBasic::bgmAllMute(u32 param_1) { field_0x0080 = 0.0; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), param_1, SOUNDPARAM_Unk0); } } /* 802A5D0C-802A5DF0 .text taktModeMute__11JAIZelBasicFv */ void JAIZelBasic::taktModeMute() { field_0x0098 = 0.0f; if (mpMainBgmSound) { if (mMainBgmNum != JA_BGM_TAKT_MAKORE && mMainBgmNum != JA_BGM_TAKT_MEDRI) { mpMainBgmSound->setVolume(calcMainBgmVol(), 10, SOUNDPARAM_Unk0); } else { field_0x0098 = 1.0f; } } field_0x00a4 = 0.0; if (mpSubBgmSound) { mpSubBgmSound->setVolume(calcSubBgmVol(), 10, SOUNDPARAM_Unk0); } } /* 802A5DF0-802A5F24 .text taktModeMuteOff__11JAIZelBasicFv */ void JAIZelBasic::taktModeMuteOff() { field_0x0098 = 1.0; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 10, SOUNDPARAM_Unk0); } if (mSubBgmNum == JA_BGM_TAKT_KAZE) { field_0x008c = 1.0; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 45, SOUNDPARAM_Unk0); } } field_0x00a4 = 1.0; if (mpSubBgmSound) { mpSubBgmSound->setVolume(calcSubBgmVol(), 10, SOUNDPARAM_Unk0); } } /* 802A5F24-802A61AC .text cbPracticePlay__11JAIZelBasicFP3Vec */ void JAIZelBasic::cbPracticePlay(Vec*) { /* Nonmatching */ } /* 802A61AC-802A6434 .text cbPracticeProcess__11JAIZelBasicFv */ void JAIZelBasic::cbPracticeProcess() { /* Nonmatching */ } /* 802A6434-802A6508 .text cbPracticeStop__11JAIZelBasicFv */ void JAIZelBasic::cbPracticeStop() { if (mpSubBgmSound && (mSubBgmNum == JA_BGM_CB_NEXTYEAR || mSubBgmNum == JA_BGM_CB_NEXTYEAR_W)) { mpSubBgmSound->stop(15); mpSubBgmSound = NULL; mSubBgmNum = -1; } field_0x00a8 = 1.0; field_0x009c = 1.0; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 90, SOUNDPARAM_Unk0); } field_0x00d0 = 0; } /* 802A6508-802A6570 .text checkCbPracticePlay__11JAIZelBasicFv */ BOOL JAIZelBasic::checkCbPracticePlay() { BOOL result; if (checkSubBgmPlaying() == 1 && (checkPlayingSubBgmFlag() == JA_BGM_CB_NEXTYEAR || checkPlayingSubBgmFlag() == JA_BGM_CB_NEXTYEAR_W)) { result = 1; } else { result = 0; } return result; } /* 802A6570-802A659C .text prepareLandingDemo__11JAIZelBasicFl */ void JAIZelBasic::prepareLandingDemo(s32 param_1) { mbLandingDemoStarted = param_1; bgmStop(90, 0); } /* 802A659C-802A6608 .text startLandingDemo__11JAIZelBasicFv */ void JAIZelBasic::startLandingDemo() { switch (mbLandingDemoStarted) { case 1: break; case 2: bgmStart(JA_BGM_ISLAND_DRAGON, 0, 0); break; case 3: bgmStart(JA_BGM_ISLAND_WOOD, 0, 0); break; case 4: break; } } /* 802A6608-802A6614 .text endLandingDemo__11JAIZelBasicFv */ void JAIZelBasic::endLandingDemo() { mbLandingDemoStarted = 0; } /* 802A6614-802A6720 .text initSe__11JAIZelBasicFv */ void JAIZelBasic::initSe() { mAudioCamera->field_0x0 = NULL; mAudioCamera->field_0x4 = NULL; mAudioCamera->field_0x8 = NULL; field_0x01f4 = 0; for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) { mpSeSound[i] = NULL; mSeNum[i] = 0; field_0x0194[i] = 0; } for (int i = 0; i < 4; i++) { field_0x2040[i] = 0; field_0x2050[i] = 0; } field_0x203c = 0; field_0x203d = 0; field_0x2064 = 0; field_0x020c = 0; field_0x0210 = 0; field_0x0218 = 0; field_0x1b80 = 0; field_0x1dd0 = 0; field_0x1e98 = 0; field_0x1f38 = NULL; field_0x1ec4 = 0; field_0x1ec8 = 0; field_0x1ecc = 0; field_0x1ed0 = 0; field_0x1f44 = 0; field_0x1f48 = 0; field_0x2060 = NULL; field_0x0214 = 0; field_0x0020 = 0; field_0x1f34 = 0; field_0x01f9 = 0; field_0x01fb = 0; field_0x01fc = 0; field_0x0201 = 0; monsSeInit(); initLevObjSE(); field_0x00ba = 0; } /* 802A6720-802A8550 .text seStart__11JAIZelBasicFUlP3VecUlScffffUc */ void JAIZelBasic::seStart(u32 i_seNum, Vec*, u32, s8, f32, f32, f32, f32, u8) { /* Nonmatching */ // "Kurobo voices should be played in monsSeStart!\n" OSReport("クロボーの声は monsSeStartで!\n"); OSReport("[JAIZelBasic::seStart] overflow JAISound pointer\n"); } /* 802A8550-802A85F4 .text seStop__11JAIZelBasicFUll */ void JAIZelBasic::seStop(u32 i_seNum, s32 param_2) { if (i_seNum == -1) { return; } if (i_seNum == JA_SE_LK_RUN_SLIP) { param_2 = 8; } for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) { if (mSeNum[i] == i_seNum && mpSeSound[i]) { mpSeSound[i]->stop(param_2); mpSeSound[i] = NULL; mSeNum[i] = 0; field_0x0194[i] = 0; } } } /* 802A85F4-802A8634 .text checkSePlaying__11JAIZelBasicFUl */ BOOL JAIZelBasic::checkSePlaying(u32 param_1) { for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) { if (mSeNum[i] == param_1 && mpSeSound[i]) { return true; } } return false; } /* 802A8634-802A8688 .text seStopActor__11JAIZelBasicFP3VecUl */ void JAIZelBasic::seStopActor(Vec* param_1, u32 param_2) { if (param_2 == 0xffffffff) { stopAllSound(param_1); } else if (!param_1) { stopAllSound(param_2); } else { stopAllSound(param_2, param_1); } } /* 802A8688-802A86A8 .text seDeleteObject__11JAIZelBasicFP3Vec */ void JAIZelBasic::seDeleteObject(Vec* param_1) { deleteObject(param_1); } /* 802A86A8-802A8748 .text getLinkVoiceVowel__11JAIZelBasicFUl */ u8 JAIZelBasic::getLinkVoiceVowel(u32) { /* Nonmatching */ } /* 802A8748-802A892C .text linkVoiceStart__11JAIZelBasicFUlP3VecUcSc */ void JAIZelBasic::linkVoiceStart(u32, Vec*, u8, s8) { /* Nonmatching */ } /* 802A892C-802A8958 .text monsSeInit__11JAIZelBasicFv */ void JAIZelBasic::monsSeInit() { for (int i = 0; i < ARRAY_SIZE(field_0x1f4c); i++) { field_0x1f4c[i].field_0x00 = -1; field_0x1f4c[i].field_0x04 = 0; } } /* 802A8958-802A8B24 .text monsSeStart__11JAIZelBasicFUlP3VecUlUlSc */ void JAIZelBasic::monsSeStart(u32 i_seNum, Vec*, u32, u32, s8) { /* Nonmatching */ } /* 802A8B24-802A8BE4 .text kuroboMotionPlay__11JAIZelBasicFUlP3VecUlSc */ void JAIZelBasic::kuroboMotionPlay(u32, Vec*, u32, s8) { /* Nonmatching */ } /* 802A8BE4-802A8CB4 .text kuroboVoicePlay__11JAIZelBasicFUlP3VecSc */ void JAIZelBasic::kuroboVoicePlay(u32, Vec*, s8) { /* Nonmatching */ } /* 802A8CB4-802A8F58 .text setLevObjSE__11JAIZelBasicFUlP3VecSc */ void JAIZelBasic::setLevObjSE(u32, Vec*, s8) { /* Nonmatching */ } /* 802A8F58-802A90C0 .text processLevObjSE__11JAIZelBasicFv */ void JAIZelBasic::processLevObjSE() { /* Nonmatching */ } /* 802A90C0-802A9120 .text initLevObjSE__11JAIZelBasicFv */ void JAIZelBasic::initLevObjSE() { /* Nonmatching */ } /* 802A9120-802A91CC .text charVoicePlay__11JAIZelBasicFllP3VecSc */ void JAIZelBasic::charVoicePlay(s32 param_1, s32 param_2, Vec* param_3, s8 param_4) { if (field_0x0201 == 1) { return; } u16 r31 = (param_1 << 8) + param_2; if (field_0x2060) { field_0x2060->stop(0); } startSoundVec(0x481f, &field_0x2060, param_3, 0, 0, 4); if (field_0x2060) { field_0x2060->setPortData(8, r31); field_0x2060->setPortData(9, param_4); } } /* 802A91CC-802A92CC .text messageSePlay__11JAIZelBasicFUsP3VecSc */ void JAIZelBasic::messageSePlay(u16, Vec*, s8) { /* Nonmatching */ } /* 802A92CC-802A965C .text shipCruiseSePlay__11JAIZelBasicFP3Vecf */ void JAIZelBasic::shipCruiseSePlay(Vec*, f32) { /* Nonmatching */ } /* 802A965C-802A9664 .text setShipSailState__11JAIZelBasicFl */ void JAIZelBasic::setShipSailState(s32 isSailing) { mIsSailing = isSailing; } /* 802A9664-802A9874 .text init__11JAIZelBasicFP12JKRSolidHeapUl */ void JAIZelBasic::init(JKRSolidHeap* param_1, u32 param_2) { JAIGlobalParameter::setParamInterfaceHeapSize(JAIZelParam::DRAM_HEAP_SIZE); JAIGlobalParameter::setParamSeRegistMax(JAIZelParam::SE_REGIST_MAX); JAIGlobalParameter::setParamSoundSceneMax(JAIZelParam::SOUND_SCENE_MAX); JAIGlobalParameter::setParamSeqControlBufferMax(JAIZelParam::SEQ_CONTROL_BUF_MAX); JAIGlobalParameter::setParamStreamControlBufferMax(JAIZelParam::STREAM_CONTROL_BUF_MAX); JAIGlobalParameter::setParamStreamDecodedBufferBlocks(JAIZelParam::STREAM_DECODED_BUFFERS); JAIGlobalParameter::setParamAutoHeapMax(JAIZelParam::AUTO_HEAP_MAX); JAIGlobalParameter::setParamStayHeapMax(JAIZelParam::STAY_HEAP_MAX); JAIGlobalParameter::setParamAutoHeapRoomSize(JAIZelParam::AUTO_HEAP_ROOM_SIZE); JAIGlobalParameter::setParamStayHeapSize(JAIZelParam::STAY_HEAP_ROOM_SIZE); JAIGlobalParameter::setParamSeqPlayTrackMax(JAIZelParam::PLAY_TRACK_MAX); JAIGlobalParameter::setParamSystemTrackMax(JAIZelParam::SYSTEM_TRACK_MAX); JAIGlobalParameter::setParamDistanceMax(JAIZelParam::DISTANCE_MAX); JAIGlobalParameter::setParamMaxVolumeDistance(JAIZelParam::MAX_VOLUME_DISTANCE); JAIGlobalParameter::setParamMinDistanceVolume(JAIZelParam::MIN_DISTANCE_VOLUME); JAIGlobalParameter::setParamSeDolbyCenterValue(JAIZelParam::DOLBY_CENTER_VALUE); JAIGlobalParameter::setParamSeDolbyFrontDistanceMax(JAIZelParam::DOLBY_FLONT_DISTANCE_MAX); JAIGlobalParameter::setParamSeDolbyBehindDistanceMax(JAIZelParam::DOLBY_BEHIND_DISTANCE_MAX); JAIGlobalParameter::setParamSeDistanceFxParameter(JAIZelParam::DISTANCE_FX_PARAM); JAIGlobalParameter::setParamInputGainDown(1.0f); JAIGlobalParameter::setParamOutputGainUp(5.999f); JAIGlobalParameter::setParamAudioResPath(NULL); JAIGlobalParameter::setParamInitDataFileName((char*)JAIZelParam::INIT_DATA_FILE_NAME); JAIGlobalParameter::setParamWavePath((char*)JAIZelParam::WAVE_PATH); JAIGlobalParameter::setParamSequenceArchivesPath((char*)JAIZelParam::SEQ_PATH); JAIGlobalParameter::setParamStreamPath((char*)JAIZelParam::STREAM_PATH); JAIGlobalParameter::setParamSequenceArchivesFileName((char*)JAIZelParam::SEQ_ARCH_FILE_NAME); JAIGlobalParameter::setParamAudioCameraMax(1); JAIGlobalParameter::setParamDummyObjectMax(JAIZelParam::DUMMY_POSITION_MAX); JAIGlobalParameter::setParamDummyObjectLifeTime(JAIZelParam::DUMMY_POSITION_LIFE_TIME); JAIGlobalParameter::setParamStreamInsideBufferCut(true); initDriver(param_1, param_2, 1); initInterface(1); mpMainBgmSound = NULL; mpSubBgmSound = NULL; mpStreamBgmSound = NULL; initSe(); setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_DEFAULT); setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_DEFAULT); setSeCategoryVolume(2, JAIZelParam::VOL_SE_LINK_MOTION_DEFAULT); setSeCategoryVolume(3, JAIZelParam::VOL_SE_LINK_FOOTNOTE_DEFAULT); setSeCategoryVolume(4, JAIZelParam::VOL_SE_CHAR_VOICE_DEFAULT); setSeCategoryVolume(5, JAIZelParam::VOL_SE_CHAR_MOVE_DEFAULT); setSeCategoryVolume(6, JAIZelParam::VOL_SE_OBJECT_DEFAULT); setSeCategoryVolume(7, JAIZelParam::VOL_SE_ATMOSPHERE_DEFAULT); field_0x0080 = 1.0f; field_0x0084 = 1.0f; field_0x0088 = 1.0f; field_0x008c = 1.0f; field_0x0090 = 1.0f; field_0x0094 = 1.0f; field_0x0098 = 1.0f; field_0x009c = 1.0f; field_0x00ac = 1.0f; } /* 802A9874-802A98A0 .text setOutputMode__11JAIZelBasicFUl */ void JAIZelBasic::setOutputMode(u32 param_1) { if (param_1 <= 2) { JAIGlobalParameter::setParamSoundOutputMode(param_1); } } /* 802A98A0-802A9A20 .text talkIn__11JAIZelBasicFv */ void JAIZelBasic::talkIn() { if (field_0x0064 != 1 && isDemo() != 1 && field_0x0098 != 0.0f) { field_0x0084 = JAIZelParam::VOL_BGM_TALKING; if (mpMainBgmSound && mMainBgmNum != JA_BGM_BIRDMAN_GOAL && mMainBgmNum != JA_BGM_BIRDMAN_FAIL) { mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0); } field_0x00a0 = JAIZelParam::VOL_BGM_TALKING; if (mpSubBgmSound) { mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2); } setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_TALKING); setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_TALKING); setSeCategoryVolume(2, JAIZelParam::VOL_SE_LINK_MOTION_TALKING); setSeCategoryVolume(3, JAIZelParam::VOL_SE_LINK_FOOTNOTE_TALKING); setSeCategoryVolume(4, JAIZelParam::VOL_SE_CHAR_VOICE_TALKING); setSeCategoryVolume(5, JAIZelParam::VOL_SE_CHAR_MOVE_TALKING); setSeCategoryVolume(6, JAIZelParam::VOL_SE_OBJECT_TALKING); setSeCategoryVolume(7, JAIZelParam::VOL_SE_ATMOSPHERE_TALKING); } } /* 802A9A20-802A9B74 .text talkOut__11JAIZelBasicFv */ void JAIZelBasic::talkOut() { if (checkStreamPlaying(JA_STRM_MJ_DEMO_INTRO) == 1) { return; } field_0x0084 = JAIZelParam::VOL_BGM_DEFAULT; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0); } field_0x00a0 = JAIZelParam::VOL_BGM_DEFAULT; if (mpSubBgmSound) { mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2); } setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_DEFAULT); setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_DEFAULT); setSeCategoryVolume(2, JAIZelParam::VOL_SE_LINK_MOTION_DEFAULT); setSeCategoryVolume(3, JAIZelParam::VOL_SE_LINK_FOOTNOTE_DEFAULT); setSeCategoryVolume(4, JAIZelParam::VOL_SE_CHAR_VOICE_DEFAULT); setSeCategoryVolume(5, JAIZelParam::VOL_SE_CHAR_MOVE_DEFAULT); setSeCategoryVolume(6, JAIZelParam::VOL_SE_OBJECT_DEFAULT); setSeCategoryVolume(7, JAIZelParam::VOL_SE_ATMOSPHERE_DEFAULT); } /* 802A9B74-802A9CBC .text menuIn__11JAIZelBasicFv */ void JAIZelBasic::menuIn() { field_0x0088 = JAIZelParam::VOL_BGM_PAUSING; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0); } field_0x00a0 = JAIZelParam::VOL_BGM_PAUSING; if (mpSubBgmSound) { mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2); } setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_PAUSING); setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_PAUSING); setSeCategoryVolume(2, JAIZelParam::VOL_SE_LINK_MOTION_PAUSING); setSeCategoryVolume(3, JAIZelParam::VOL_SE_LINK_FOOTNOTE_PAUSING); setSeCategoryVolume(4, JAIZelParam::VOL_SE_CHAR_VOICE_PAUSING); setSeCategoryVolume(5, JAIZelParam::VOL_SE_CHAR_MOVE_PAUSING); setSeCategoryVolume(6, JAIZelParam::VOL_SE_OBJECT_PAUSING); setSeCategoryVolume(7, JAIZelParam::VOL_SE_ATMOSPHERE_PAUSING); field_0x0020 = 1; } /* 802A9CBC-802A9CF8 .text menuOut__11JAIZelBasicFv */ void JAIZelBasic::menuOut() { field_0x0088 = JAIZelParam::VOL_BGM_DEFAULT; talkOut(); field_0x0020 = 0; } /* 802A9CF8-802A9DB0 .text getCameraInfo__11JAIZelBasicFP3VecPA4_fUl */ void JAIZelBasic::getCameraInfo(Vec* param_1, MtxP param_2, u32 param_3) { mAudioCamera[param_3].field_0x0 = param_1; mAudioCamera[param_3].field_0x4 = &field_0x0048; mAudioCamera[param_3].field_0x8 = param_2; if (mAudioCamera[0].field_0x0) { if (mAudioCamera[0].field_0x0->x == 1e+7f && mAudioCamera[0].field_0x0->y == 1e+7f && mAudioCamera[0].field_0x0->z == 1e+7f) { field_0x01f8 = 10; } else if (field_0x01f8 != 0) { field_0x01f8--; } field_0x0048.x = 1e+7f; field_0x0048.y = 1e+7f; field_0x0048.z = 1e+7f; return; } field_0x01f8 = 10; field_0x0048 = *param_1; } /* 802A9DB0-802A9DB8 .text getCameraMapInfo__11JAIZelBasicFUl */ void JAIZelBasic::getCameraMapInfo(u32 param_1) { field_0x0218 = param_1; } /* 802A9DB8-802A9DDC .text setCameraPolygonPos__11JAIZelBasicFP3Vec */ void JAIZelBasic::setCameraPolygonPos(Vec* param_1) { if (!param_1) { return; } field_0x0054 = *param_1; } /* 802A9DDC-802A9F60 .text setCameraGroupInfo__11JAIZelBasicFUc */ void JAIZelBasic::setCameraGroupInfo(u8 param_1) { if (isDemo() == 1) { return; } if (field_0x00bd) { return; } #if VERSION > VERSION_JPN if (field_0x00bf) { return; } #endif if (param_1 != mCameraSeaFloorGroupInfo) { if ((param_1 & 0x80)) { mIslandRoomNo = param_1 & 0x3f; if (mCameraSeaFloorGroupInfo == 0) { OSReport("[JAIZelBasic::setCameraGroupInfo] Outer Sea -> Outer Edge\n"); setScene(0x12, mIslandRoomNo, 1, -1); load1stDynamicWave(); load2ndDynamicWave(); field_0x021e = 0; field_0x022d = 1; } else { OSReport("[JAIZelBasic::setCameraGroupInfo] Inner Edge -> Outer Edge\n"); } } else { if (param_1 && (param_1 & 0x40) == 0) { if (mCameraSeaFloorGroupInfo & 0x40) { OSReport("[JAIZelBasic::setCameraGroupInfo] Inner Sea -> Inner Edge\n"); } else { OSReport("[JAIZelBasic::setCameraGroupInfo] Outer Edge -> Inner Edge\n"); } } else if (mCameraSeaFloorGroupInfo & 0x80) { OSReport("[JAIZelBasic::setCameraGroupInfo] Outer Edge -> Outer Sea\n"); mIslandRoomNo = dIsleRoom_SeaFloor_e; } else if ((mCameraSeaFloorGroupInfo & 0x40) == 0 && mCameraSeaFloorGroupInfo) { OSReport("[JAIZelBasic::setCameraGroupInfo] Inner Edge -> Inner Sea\n"); } } mCameraSeaFloorGroupInfo = param_1; } } /* 802A9F60-802AA2B8 .text changeSeaBgm__11JAIZelBasicFv */ void JAIZelBasic::changeSeaBgm() { if (field_0x0224 != 0x12) { return; } if (mIslandRoomNo == dIsleRoom_SeaFloor_e) { return; } if (mMainBgmNum == JA_BGM_DIE_LINK) { return; } if (!checkEventBit(dSv_event_flag_c::MET_KORL)) { return; } if (mAudioCamera->field_0x0 == NULL) { return; } if (field_0x022d == 0) { return; } if (field_0x01f8 != 0) { return; } if (mbLandingDemoStarted) { return; } #if VERSION > VERSION_JPN if (field_0x0062) { return; } #endif if (!checkDayTime() && checkSeaBgmID() != JA_BGM_SEA_STORM) { return; } if (field_0x0032 == 1) { return; } if (isDemo() == TRUE) { return; } if (mpSubBgmSound && mSubBgmNum == JA_BGM_DIOCTA_BATTLE) { return; } if (mpMainBgmSound && mMainBgmNum == JA_BGM_ELF) { return; } if (field_0x00bd != 0) { return; } f32 sp08 = 0.0f; int r3 = checkOnOuterSea(&sp08); isle_area_s sp0C = mIsleArea[mIslandRoomNo]; if (mMainBgmNum == JA_BGM_SEA || mMainBgmNum == JA_BGM_SEA_STORM) { switch (r3) { case 1: field_0x0094 = 0.0f; startIsleBgm(); return; case 2: field_0x0094 = (sp08 - (sp0C.field_0xC + 2000.0f)) / 1000.0f; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 1, SOUNDPARAM_Unk0); } return; default: return; } } switch (r3) { case 4: field_0x0094 = 1.0f; bgmStart(checkSeaBgmID(), 0x5A, 1); break; case 1: field_0x0094 = ((sp0C.field_0xC + 2000.0f) - sp08) / 2000.0f; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 1, SOUNDPARAM_Unk0); } break; case 2: case 3: field_0x0094 = 0.0f; if (mpMainBgmSound) { mpMainBgmSound->setVolume(calcMainBgmVol(), 0, SOUNDPARAM_Unk0); } break; } } /* 802AA2B8-802AA348 .text startIsleBgm__11JAIZelBasicFv */ void JAIZelBasic::startIsleBgm() { if (!checkDayTime()) { return; } u32 bgmNum; if (mIslandRoomNo == dIsleRoom_OutsetIsland_e && checkEventBit(0xe20) == 1) { bgmNum = JA_BGM_ISLAND_LINK_3; } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } bgmStart(bgmNum, 0, 1); } /* 802AA348-802AA378 .text setLinkGroupInfo__11JAIZelBasicFUc */ void JAIZelBasic::setLinkGroupInfo(u8 param_1) { if (field_0x0224 != 0x12) { return; } if (mIslandRoomNo == dIsleRoom_SeaFloor_e) { return; } if (param_1 == mLinkSeaFloorGroupInfo) { return; } mLinkSeaFloorGroupInfo = param_1; } /* 802AA378-802AA380 .text getMapInfoFxline__11JAIZelBasicFUl */ BOOL JAIZelBasic::getMapInfoFxline(u32 param_0) { return param_0 & 0xFFFF; } /* 802AA380-802AA388 .text getMapInfoFxParameter__11JAIZelBasicFUl */ f32 JAIZelBasic::getMapInfoFxParameter(u32) { return 0.0f; } /* 802AA388-802AA390 .text getMapInfoGround__11JAIZelBasicFUl */ BOOL JAIZelBasic::getMapInfoGround(u32) { return FALSE; } /* 802AA390-802AACE8 .text setScene__11JAIZelBasicFllll */ void JAIZelBasic::setScene(s32 sceneNum, s32 roomNo, s32 param_3, s32 layerNo) { OSReport("[JAIZelBasic::setScene] num = %d, start = %d, layer = %d (%d)\n", sceneNum, roomNo, layerNo, param_3); if (sceneNum >= 0x79) { OSReport("[JAIZelBasic::setScene] too large scene number\n"); return; } if (field_0x022c != 0) { return; } u32 bgmNum; field_0x00bd = field_0x00cd = bgmNum = 0; u32 var1; u32 var2; if (sceneNum == 0x12) { if (roomNo > 0) { mIslandRoomNo = roomNo; } else { mIslandRoomNo = bgmNum; } OSReport(" --- Isle = %d\n", mIslandRoomNo); if (param_3 != 1) { if (mIslandRoomNo == dIsleRoom_OutsetIsland_e) { if (layerNo == 10) { bgmNum = 0; } else if (checkEventBit(0x3510) == 0) { bgmNum = JA_BGM_ISLAND_LINK_0; } else if (checkEventBit(1) == 1 && checkEventBit(0x101) == 0) { bgmNum = JA_BGM_ISLAND_LINK_2; } else if (checkEventBit(0x101) == 1 && checkEventBit(0xe20) == 0) { bgmNum = 0; } else if (checkEventBit(0xe20) == 1) { bgmNum = JA_BGM_ISLAND_LINK_3; } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (mIslandRoomNo == dIsleRoom_WindfallIsland_e) { if (checkEventBit(0x2e01) == 0) { bgmNum = 0; } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (mIslandRoomNo == dIsleRoom_DragonRoostIsland_e) { if (layerNo == 8 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (mIslandRoomNo == dIsleRoom_FlightControlPlatform_e) { if (layerNo == 2 || layerNo == 3) { bgmNum = 0; field_0x00bd = 1; } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else { bgmNum = m_isle_info[mIslandRoomNo].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } var1 = m_isle_info[mIslandRoomNo].field_0x2; var2 = m_isle_info[mIslandRoomNo].field_0x3; } else { mIslandRoomNo = dIsleRoom_SeaFloor_e; if (sceneNum == 16 && checkEventBit(0x280) == 0) { bgmNum = JA_BGM_FIND_TETRA; } else if (sceneNum == 19 && checkEventBit(0x801) == 0) { bgmNum = 0; } else if (sceneNum == 2 && field_0x0021 != 0) { if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_DRC)) { field_0x00cd = 1; } if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_DRC)) { bgmNum = m_scene_info[1].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); field_0x0204 = 1; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 7 && field_0x0021 != 0) { if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_FW)) { field_0x00cd = 1; } if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_FW)) { bgmNum = m_scene_info[3].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 37 && field_0x0021 != 0) { if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_TOTG)) { field_0x00cd = 1; } if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_TOTG)) { bgmNum = m_scene_info[10].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 24 && field_0x0021 != 0) { if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_WT)) { field_0x00cd = 1; } if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_WT)) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 45 && field_0x0021 != 0) { if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_ET)) { field_0x00cd = 1; } if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_ET)) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 54) { if (checkEventBit(0x2d04) == 0) { bgmNum = JA_BGM_HYRULE_OFF; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 53) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 54) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 89) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else if (checkEventBit(0x2d04) == 0) { bgmNum = JA_BGM_HYRULE_OFF; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 39) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 41) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 22) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 44) { if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) { bgmNum = 0; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 11) { if (layerNo == 9 && field_0x0043 == 0) { bgmNum = 0; } else if (field_0x0043 && checkEventBit(0x2a20) == 0) { bgmNum = JA_BGM_BAACHAN; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else if (sceneNum == 32) { if (checkEventBit(0x2110) == 0 && checkEventBit(dSv_event_flag_c::ENDLESS_NIGHT) == 1) { bgmNum = JA_BGM_PIRATE_DEMO5; } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } } else { bgmNum = m_scene_info[sceneNum].bgmNum; bgmNum = expandSceneBgmNum(bgmNum); } var1 = m_scene_info[sceneNum].field_0x2; var2 = m_scene_info[sceneNum].field_0x3; } sceneChange(bgmNum, var1, var2, param_3); field_0x022d = 0; field_0x0220 = sceneNum; field_0x022c = 1; field_0x0239 = layerNo; } /* 802AACE8-802AAD0C .text expandSceneBgmNum__11JAIZelBasicFUl */ u32 JAIZelBasic::expandSceneBgmNum(u32 bgmNum) { /* Nonmatching - regalloc */ if ((bgmNum & 0xF000) == 0x8000) { u32 temp = bgmNum & 0x7FFF; temp |= JAISoundID_Type_Stream; return temp; } else { u32 temp = bgmNum & 0x7FFF; temp |= JAISoundID_Type_Sequence; return temp; } } /* 802AAD0C-802AAD48 .text checkLinkOnSea__11JAIZelBasicFv */ BOOL JAIZelBasic::checkLinkOnSea() { if (field_0x0224 == 0x12) { if (mIslandRoomNo == dIsleRoom_SeaFloor_e) { return TRUE; } else if (mLinkSeaFloorGroupInfo != 0) { return TRUE; } } return FALSE; } /* 802AAD48-802AAD94 .text checkLinkOnBoardSea__11JAIZelBasicFv */ BOOL JAIZelBasic::checkLinkOnBoardSea() { if (checkLinkOnSea() == TRUE && field_0x0047 != 0) { return TRUE; } return FALSE; } /* 802AAD94-802AAE80 .text setSceneName__11JAIZelBasicFPcll */ void JAIZelBasic::setSceneName(char* param_1, s32 roomNo, s32 param_3) { OSReport("[JAIZelBasic::setSceneName] spot = %s, room = %d\n", param_1, roomNo); s32 sceneNum = spotNameToId(param_1); if (sceneNum == 0x75) { for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) { if (mpSeSound[i]) { mpSeSound[i]->stop(1); mpSeSound[i] = NULL; mSeNum[i] = 0; field_0x0194[i] = 0; } } menuOut(); field_0x0066 = 1; #if VERSION > VERSION_JPN field_0x00bf = 0; #endif } else { field_0x0066 = 0; } setScene(sceneNum, roomNo, 0, param_3); } /* 802AAE80-802AAF04 .text spotNameToId__11JAIZelBasicFPc */ int JAIZelBasic::spotNameToId(char* param_1) { if (!param_1) { return 0; } int i; for (i = 0; i < 120; i++) { if (strcmp(param_1, spot_dir_name[i]) == 0) { break; } } if (i == 120) { return 0; } return i + 1; } /* 802AAF04-802AB204 .text sceneChange__11JAIZelBasicFUlUlUll */ void JAIZelBasic::sceneChange(u32, u32, u32, s32) { /* Nonmatching */ OSReport("[JAIZelBasic::sceneChange] bgm = 0x%08x, wave1 = %d, wave2 = %d (%d)\n"); } /* 802AB204-802AB374 .text sceneBgmStart__11JAIZelBasicFv */ void JAIZelBasic::sceneBgmStart() { /* Nonmatching */ OSReport("[JAIZelBasic::sceneBgmStart] %08x\n"); OSReport("--- No BGM because of night time ---\n"); } /* 802AB374-802AB678 .text load1stDynamicWave__11JAIZelBasicFv */ void JAIZelBasic::load1stDynamicWave() { /* Nonmatching */ OSReport("[JAIZelBasic::load1stDynamicWave] (%d) set num = %d\n"); } /* 802AB678-802AB6F4 .text check1stDynamicWave__11JAIZelBasicFv */ BOOL JAIZelBasic::check1stDynamicWave() { /* Nonmatching */ } /* 802AB6F4-802AB858 .text load2ndDynamicWave__11JAIZelBasicFv */ void JAIZelBasic::load2ndDynamicWave() { /* Nonmatching */ OSReport("[JAIZelBasic::load2ndDynamicWave] (%d) set num = %d\n"); } static void dummy() { int len = 0; JUT_ASSERT(0, len != 0); JUT_ASSERT(0, len <= JAIZelParam::SEA_START_VS_ROOM_TBL_SIZE * 2); } /* 802AB858-802AB888 .text loadStaticWaves__11JAIZelBasicFv */ void JAIZelBasic::loadStaticWaves() { /* Nonmatching */ // "[JAIZelBasic::loadStaticWaves] The permanent scene waveform is not loaded here, but at the very start of gFrameProcess.\n" OSReport("[JAIZelBasic::loadStaticWaves] 常駐シーン波形はここでなく、gFrameProcessの一番最初で読み込まれます。\n"); } static void dummy2() { OSReport("Warning : bgm pointer is NULL!\n"); } /* 802AB888-802AB8B0 .text checkFirstWaves__11JAIZelBasicFv */ s32 JAIZelBasic::checkFirstWaves() { return 2 - JAInter::BankWave::getWaveLoadStatus(2); } /* 802AB8B0-802AB9F4 .text setLinkHp__11JAIZelBasicFll */ void JAIZelBasic::setLinkHp(s32, s32) { /* Nonmatching */ } /* 802AB9F4-802ABA44 .text setLinkSwordType__11JAIZelBasicFll */ void JAIZelBasic::setLinkSwordType(s32 param_1, s32 param_2) { field_0x0041 = param_1; field_0x0042 = param_2; if (field_0x0041 != 0 && field_0x0042 == 2 && field_0x0043 != 0 && field_0x0044 == 2) { field_0x0045 = true; return; } field_0x0045 = false; } /* 802ABA44-802ABA94 .text setLinkShieldType__11JAIZelBasicFll */ void JAIZelBasic::setLinkShieldType(s32 param_1, s32 param_2) { field_0x0043 = param_1; field_0x0044 = param_2; if (field_0x0041 != 0 && field_0x0042 == 2 && field_0x0043 != 0 && field_0x0044 == 2) { field_0x0045 = true; return; } field_0x0045 = false; } /* 802ABA94-802ABA9C .text setLinkBootsType__11JAIZelBasicFl */ void JAIZelBasic::setLinkBootsType(s32 param_1) { field_0x0046 = param_1; } /* 802ABA9C-802ABB18 .text setLinkOnBoard__11JAIZelBasicFl */ void JAIZelBasic::setLinkOnBoard(s32 param_1) { field_0x0047 = param_1; if (mpSubBgmSound && mSubBgmNum == JA_BGM_SEA_ENEMY) { if (field_0x0047 == 1) { bgmMute(&mpSubBgmSound, JA_BGM_SEA_ENEMY, 0, 10); } else { bgmMute(&mpSubBgmSound, JA_BGM_SEA_ENEMY, 1, 10); } } } /* 802ABB18-802ABBD0 .text bgmMute__11JAIZelBasicFPP8JAISoundUllUl */ void JAIZelBasic::bgmMute(JAISound**, u32, s32, u32) { /* Nonmatching */ } /* 802ABBD0-802ABC3C .text checkStreamPlaying__11JAIZelBasicFUl */ int JAIZelBasic::checkStreamPlaying(u32 param_1) { /* Nonmatching */ JAISound* sound = JAInter::StreamMgr::streamUpdate->mpSound; if (!sound) { return false; } if (JAInter::StreamLib::getPlayingFlag() == 0) { return false; } return param_1 == sound->mSoundID; } /* 802ABC3C-802ABC88 .text stWaterLevelUp__11JAIZelBasicFv */ void JAIZelBasic::stWaterLevelUp() { if (field_0x00b7 == 0 && mMainBgmNum == JA_BGM_KAMI_TOWER) { bgmStart(JA_BGM_UNK_125, 1, 0); } } /* 802ABC88-802ABCD4 .text stWaterLevelDown__11JAIZelBasicFv */ void JAIZelBasic::stWaterLevelDown() { if (field_0x00b7 == 0 && mMainBgmNum == JA_BGM_KAMI_TOWER) { bgmStart(JA_BGM_KAMI_TOWER, 1, 0); } } /* 802ABCD4-802ABD34 .text stSkyCloisters__11JAIZelBasicFv */ void JAIZelBasic::stSkyCloisters() { if (mMainBgmNum == JA_BGM_KAMI_TOWER) { if (field_0x00b7 == 0) { bgmStart(JA_BGM_UNK_126, 1, 0); } field_0x00b7 = 4; } } /* 802ABD34-802ABDE0 .text stSkyCloistersProcess__11JAIZelBasicFv */ void JAIZelBasic::stSkyCloistersProcess() { /* Nonmatching */ } /* 802ABDE0-802ABE10 .text getRandomU32__11JAIZelBasicFUl */ u32 JAIZelBasic::getRandomU32(u32 param_1) { u32 tmp = jai_rng_seed; jai_rng_seed = tmp * 2; jai_rng_seed += (tmp >> 0x1f ^ (tmp >> 6 & 0x10)); tmp = (jai_rng_seed / param_1); return jai_rng_seed - tmp * param_1; } /* 802ABE10-802ABE18 .text setEventBit__11JAIZelBasicFPv */ void JAIZelBasic::setEventBit(void* param_1) { field_0x0024 = (u8*)param_1; } /* 802ABE18-802ABE50 .text checkEventBit__11JAIZelBasicFUs */ BOOL JAIZelBasic::checkEventBit(u16 param_1) { if (field_0x0024 == NULL) { return false; } u32 var1 = param_1 & 0xff; u32 var2 = (param_1 & 0xff00) >> 8; if (u8(field_0x0024[var2] & var1)) { return TRUE; } else { return FALSE; } } /* 802ABE50-802ABE74 .text checkDayTime__11JAIZelBasicFv */ BOOL JAIZelBasic::checkDayTime() { if (mHour >= 6 && mHour < 20) { return TRUE; } return FALSE; } /* 802ABE74-802ABF2C .text processTime__11JAIZelBasicFv */ void JAIZelBasic::processTime() { u16 time = (mHour << 8 & 0xFF00) + mMinute; if (field_0x0224 == 0x12 && field_0x022d == 1) { if (field_0x0030 < 0x1400 && time >= 0x1400) { mainBgmStopOnly(JAIZelParam::JAI_ZEL_NIGHT_FADEOUT_TIME); } else if (field_0x0030 < 0x53b && time >= 0x53b) { bgmStart(JA_BGM_MORNING, 0, 0); field_0x0032 = 1; } } field_0x0030 = time; processMorningToNormal(); } /* 802ABF2C-802ABFC0 .text processMorningToNormal__11JAIZelBasicFv */ void JAIZelBasic::processMorningToNormal() { if (mMainBgmNum != JA_BGM_MORNING) { field_0x0032 = 0; return; } if (!mpMainBgmSound) { field_0x0094 = 1.0; f32 tmp; if (checkOnOuterSea(&tmp) >= 2) { bgmStart(JA_BGM_SEA, 0, 1); } else { startIsleBgm(); } field_0x0032 = 0; } } /* 802ABFC0-802AC1BC .text checkOnOuterSea__11JAIZelBasicFPf */ int JAIZelBasic::checkOnOuterSea(f32* r4) { if (r4 == NULL) { return -1; } *r4 = 0.0f; if (field_0x0224 != 0x12) { return -1; } if (mIslandRoomNo == dIsleRoom_SeaFloor_e) { return 4; } isle_area_s sp0C = mIsleArea[mIslandRoomNo]; if (sp0C.field_0x0 > 50000.0f) { return 4; } int islandX = ((mIslandRoomNo - 1) % 7) - 3; int islandY = ((mIslandRoomNo - 1) / 7) - 3; f32 f6 = sp0C.field_0x0 - (mAudioCamera->field_0x0->x - islandX * 100000.0f); f32 f0 = sp0C.field_0x8 - (mAudioCamera->field_0x0->z - islandY * 100000.0f); *r4 = f6*f6 + f0*f0; *r4 = std::sqrtf(*r4); if (*r4 <= sp0C.field_0xC) { return 0; } else if (*r4 <= sp0C.field_0xC + 2000.0f) { return 1; } else if (*r4 <= sp0C.field_0xC + 3000.0f) { return 2; } else if (*r4 <= sp0C.field_0xC + 4000.0f) { return 3; } else { return 4; } } /* 802AC1BC-802AC258 .text makeSound__11JAIZelBasicFUl */ JAISound* JAIZelBasic::makeSound(u32 param_1) { if (field_0x8) { return new (field_0x8, 0) JAIZelSound[param_1]; } else { return new (JASDram, 0) JAIZelSound[param_1]; } } /* 802AC258-802AC300 .text checkSeqIDDemoPlaying__11JAIZelBasicFUl */ void JAIZelBasic::checkSeqIDDemoPlaying(u32) { /* Nonmatching */ } /* 802AC300-802AC400 .text checkDemoFanfarePlaying__11JAIZelBasicFv */ u32 JAIZelBasic::checkDemoFanfarePlaying() { /* Nonmatching */ } /* 802AC400-802AC468 .text processDemoFanfareMute__11JAIZelBasicFv */ void JAIZelBasic::processDemoFanfareMute() { if (checkDemoFanfarePlaying()) { if (field_0x00b9 == 0) { muteMainBgmAll(); } field_0x00b9 = 1; } else { if (field_0x00b9 != 0) { unmuteMainBgmAll(); } } } /* 802AC468-802AC594 .text muteMainBgmAll__11JAIZelBasicFv */ void JAIZelBasic::muteMainBgmAll() { /* Nonmatching */ } /* 802AC594-802AC6C0 .text unmuteMainBgmAll__11JAIZelBasicFv */ void JAIZelBasic::unmuteMainBgmAll() { /* Nonmatching */ } /* 802AC6C0-802AC758 .text demoBgmStop__11JAIZelBasicFUl */ void JAIZelBasic::demoBgmStop(u32) { /* Nonmatching */ } /* 802AC758-802AC788 .text isDemo__11JAIZelBasicFv */ BOOL JAIZelBasic::isDemo() { dDemo_manager_c* demo = dComIfGp_demo_get(); if (demo && demo->getMode() != 0) { return true; } return false; } /* 802AC788-802AC7E8 .text checkSeaBgmID__11JAIZelBasicFv */ u32 JAIZelBasic::checkSeaBgmID() { if (checkEventBit(dSv_event_flag_c::ENDLESS_NIGHT) == 1 && checkEventBit(0x3920) == 0) { return JA_BGM_SEA_STORM; } else { return JA_BGM_SEA; } }