mirror of
https://github.com/zeldaret/botw
synced 2026-05-31 09:21:36 -04:00
ec59fe675b
The wrong overload of agl::utl::Parameter::init was being used. The one that only takes a name will use the name string for the label as well; this is not what the original function does, as the label for all the parameters is set to "" (the empty string).
95 lines
3.3 KiB
C++
95 lines
3.3 KiB
C++
#include "KingSystem/Sound/sndMusicDefinition.h"
|
|
|
|
namespace ksys::snd {
|
|
|
|
static sead::SafeString str_EventBgm = "EventBgm";
|
|
|
|
void MusicDefinition::doCreate_(u8* data, u32 file_size, sead::Heap* heap) {
|
|
auto archive = agl::utl::ResParameterArchive(data);
|
|
auto root_list = archive.getRootList();
|
|
|
|
auto MusicDefines = agl::utl::getResParameterList(root_list, "MusicDefines");
|
|
if (MusicDefines) {
|
|
s32 num_music_defines = MusicDefines.getResParameterObjNum();
|
|
if (num_music_defines == 0) {
|
|
return;
|
|
}
|
|
mMusicDefines.allocBufferAssert(num_music_defines, heap);
|
|
|
|
for (auto it = mMusicDefines.begin(), end = mMusicDefines.end(); it != end; ++it) {
|
|
auto param_obj = &it->param_obj;
|
|
it->name.init("", "Name", "", param_obj);
|
|
it->category.init("", "Category", "", param_obj);
|
|
it->volume.init(1, "Volume", "", param_obj);
|
|
it->is_enable_weather_filter.init(false, "IsEnableWeatherFilter", "", param_obj);
|
|
it->is_indoor_ducking.init(false, "IsIndoorDucking", "", param_obj);
|
|
|
|
mMusicList.addObj(param_obj,
|
|
sead::FormatFixedSafeString<32>("MusicDefine_%d", it.getIndex()));
|
|
}
|
|
|
|
addList(&mMusicList, "MusicDefines");
|
|
}
|
|
|
|
auto CategoryDefines = agl::utl::getResParameterList(root_list, "CategoryDefines");
|
|
if (CategoryDefines) {
|
|
s32 num_category_defines = CategoryDefines.getResParameterObjNum();
|
|
if (num_category_defines == 0)
|
|
return;
|
|
mCategoryDefines.allocBufferAssert(num_category_defines, heap);
|
|
|
|
for (auto it = mCategoryDefines.begin(), end = mCategoryDefines.end(); it != end; ++it) {
|
|
it->name.init("", "Name", "", &it->param_obj);
|
|
it->priority_value.init(0, "PriorityValue", "", &it->param_obj);
|
|
|
|
mCategoryList.addObj(&it->param_obj, sead::FormatFixedSafeString<32>(
|
|
"CategoryDefine_%d", it.getIndex()));
|
|
}
|
|
|
|
addList(&mCategoryList, "CategoryDefines");
|
|
}
|
|
|
|
if (data)
|
|
applyResParameterArchive(agl::utl::ResParameterArchive(data));
|
|
|
|
for (auto& music : mMusicDefines) {
|
|
if (music.category.ref() == str_EventBgm) {
|
|
music.is_event_bgm = true;
|
|
mEventBgmCount++;
|
|
} else {
|
|
music.is_event_bgm = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
int MusicDefinition::getMusicIndexByName(const sead::SafeString& name) const {
|
|
for (int i = 0; i < mMusicDefines.size(); i++) {
|
|
if (mMusicDefines.get(i)->name.ref() == name) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
const sead::SafeString&
|
|
MusicDefinition::getMusicCategoryByName(const sead::SafeString& name) const {
|
|
for (int i = 0; i < mMusicDefines.size(); i++) {
|
|
if (mMusicDefines.get(i)->name.ref() == name) {
|
|
return mMusicDefines.get(i)->category.ref();
|
|
}
|
|
}
|
|
return sead::SafeString::cEmptyString;
|
|
}
|
|
|
|
int MusicDefinition::getPriorityValueByCategoryName(const sead::SafeString& name) const {
|
|
for (int i = 0; i < mCategoryDefines.size(); i++) {
|
|
auto element = mCategoryDefines.get(i);
|
|
if (element->name.ref() == name) {
|
|
return element->priority_value.ref();
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
} // namespace ksys::snd
|