diff options
| author | TakaRikka <takarikka@outlook.com> | 2022-06-01 03:49:32 -0700 |
|---|---|---|
| committer | TakaRikka <takarikka@outlook.com> | 2022-06-01 03:49:32 -0700 |
| commit | 3f22fa448376893fffd83815ecd4cdccb197f1a4 (patch) | |
| tree | ee4fc3c63d8d1d36d5705c7d75a6ba3c47c6549c /src/m_Do/m_Do_audio.cpp | |
| parent | 36e62e0b80225b6ef6cbe6a7322397899d3a0ffd (diff) | |
m_Do / d_a_npc work
Diffstat (limited to 'src/m_Do/m_Do_audio.cpp')
| -rw-r--r-- | src/m_Do/m_Do_audio.cpp | 92 |
1 files changed, 52 insertions, 40 deletions
diff --git a/src/m_Do/m_Do_audio.cpp b/src/m_Do/m_Do_audio.cpp index b5365c30af..2ae9e42e30 100644 --- a/src/m_Do/m_Do_audio.cpp +++ b/src/m_Do/m_Do_audio.cpp @@ -6,23 +6,14 @@ #include "m_Do/m_Do_audio.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "m_Do/m_Do_Reset.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "d/com/d_com_inf_game.h" // // Types: // -struct mDoRst { - static u8 mResetData[4 + 4 /* padding */]; -}; - -struct mDoDvdThd_toMainRam_c { - /* 80016394 */ void create(char const*, u8, JKRHeap*); -}; - -struct mDoDvdThd_mountXArchive_c { - /* 800161E0 */ void create(char const*, u8, JKRArchive::EMountMode, JKRHeap*); -}; - struct JAIStreamDataMgr { /* 802A3AD8 */ ~JAIStreamDataMgr(); }; @@ -96,7 +87,6 @@ extern "C" extern void* __vt__14Z2SoundStarter[5 + 1 /* padding */]; extern "C" extern void* __vt__11Z2SoundInfo[20]; extern "C" extern void* __vt__15Z2SpeechStarter[5]; extern "C" extern void* __vt__10Z2AudioMgr[3]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 data_80450B40[4]; extern "C" extern u8 data_80450B48[4]; extern "C" extern u8 data_80450B4C[4]; @@ -112,7 +102,7 @@ extern "C" extern u8 data_80450B80[4]; extern "C" extern u8 data_80450B84[4]; extern "C" extern u8 data_80450B88[4]; extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; -extern "C" extern u8 struct_80450C80[8]; +extern "C" extern bool struct_80450C80; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; @@ -140,18 +130,6 @@ void mDoAud_zelAudio_c::reset() { data_80450bba = false; } -/* ############################################################################################## */ -/* 80373D68-80373D68 0003C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80373D68 = "/Audiores/Z2Sound.baa"; -SECTION_DEAD static char const* const stringBase_80373D7E = "/Audiores/Seqs/Z2SoundSeqs.arc"; -SECTION_DEAD static char const* const stringBase_80373D9D = - "ヒープ確保失敗につきオーディオ初期化できません\n"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80373DCD = "\0\0"; -#pragma pop - /* 803DBF40-803DBF4C 008C60 000C+00 1/1 0/1 0/0 .bss @3620 */ static u8 lit_3620[12]; @@ -168,24 +146,58 @@ static mDoDvdThd_toMainRam_c* l_affCommand; static mDoDvdThd_mountXArchive_c* l_arcCommand; /* 80006FC0-80007164 001900 01A4+00 1/1 0/0 0/0 .text mDoAud_Create__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoAud_Create() { - nofralloc -#include "asm/m_Do/m_Do_audio/mDoAud_Create__Fv.s" +static void mDoAud_Create() { + if (l_affCommand == NULL) { + l_affCommand = mDoDvdThd_toMainRam_c::create("/Audiores/Z2Sound.baa", 2, NULL); + + if (l_affCommand == NULL) { + return; + } + } + + if (l_arcCommand == NULL) { + l_arcCommand = mDoDvdThd_mountXArchive_c::create("/Audiores/Seqs/Z2SoundSeqs.arc", 0, JKRArchive::MOUNT_DVD, NULL); + + if (l_arcCommand == NULL) { + return; + } + } + + if (l_affCommand->sync() && l_arcCommand->sync()) { + if (g_mDoAud_audioHeap != NULL) { + s32 groupID = JKRHeap::sCurrentHeap->changeGroupID(5); + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.init(g_mDoAud_audioHeap, 0xA00000, l_affCommand->getMemAddress(), l_arcCommand->getArchive()); + JKRHeap::sCurrentHeap->changeGroupID(groupID); + g_mDoAud_audioHeap->adjustSize(); + } else { + // "Cannot initialize audio due to heap allocation failure\n" + OSReport_Error("ヒープ確保失敗につきオーディオ初期化できません\n"); + } + + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.mStatusMgr.setEventBit(dComIfGs_getPEventBit()); + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).reset(); + + u32 soundMode = OSGetSoundMode(); + Z2AudioMgr::getInterface()->setOutputMode(soundMode); + JKRHeap::free(l_affCommand->getMemAddress(), NULL); + l_affCommand->destroy(); + l_arcCommand->destroy(); + + mDoAud_zelAudio_c::onInitFlag(); + struct_80450C80 = true; + } } -#pragma pop /* 80007164-800071BC 001AA4 0058+00 0/0 1/1 0/0 .text mDoAud_Execute__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoAud_Execute() { - nofralloc -#include "asm/m_Do/m_Do_audio/mDoAud_Execute__Fv.s" +void mDoAud_Execute() { + if (!mDoAud_zelAudio_c::isInitFlag()) { + if (!mDoRst::isShutdown() && !mDoRst::isReturnToMenu()) { + mDoAud_Create(); + } + } else { + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.gframeProcess(); + } } -#pragma pop /* 800071BC-800071F8 001AFC 003C+00 0/0 3/3 0/0 .text mDoAud_setSceneName__FPCcll */ void mDoAud_setSceneName(char const* spot, s32 room, s32 layer) { |
