ksys/snd: Fix matching issues in MusicDefinition

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).
This commit is contained in:
Léo Lam 2021-07-13 14:30:28 +02:00
parent 1322b57b55
commit ec59fe675b
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
2 changed files with 19 additions and 24 deletions

View File

@ -86097,7 +86097,7 @@
0x0000007101014450,sub_7101014450,24,
0x0000007101014468,sub_7101014468,52,
0x000000710101449c,registerBmscdefEntryFactory,392,
0x0000007101014624,ResourceBmscdef::doCreate,1716,_ZN4ksys3snd15MusicDefinition9doCreate_EPhjPN4sead4HeapE!
0x0000007101014624,ResourceBmscdef::doCreate,1716,_ZN4ksys3snd15MusicDefinition9doCreate_EPhjPN4sead4HeapE
0x0000007101014cd8,sub_7101014CD8,324,_ZNK4ksys3snd15MusicDefinition19getMusicIndexByNameERKN4sead14SafeStringBaseIcEE
0x0000007101014e1c,sub_7101014E1C,364,_ZNK4ksys3snd15MusicDefinition22getMusicCategoryByNameERKN4sead14SafeStringBaseIcEE
0x0000007101014f88,sub_7101014F88,316,_ZNK4ksys3snd15MusicDefinition30getPriorityValueByCategoryNameERKN4sead14SafeStringBaseIcEE

Can't render this file because it is too large.

View File

@ -4,30 +4,25 @@ namespace ksys::snd {
static sead::SafeString str_EventBgm = "EventBgm";
// NON_MATCHING: two bigger diffs cause a different regalloc
// 1. During `SafeString` generation of line
// `auto categoryDefines_list = agl::utl::getResParameterList(root_list, "CategoryDefines");`
// 2. Mis-ordered operations around
// `addList(&mCategoryList, "CategoryDefines");`
void MusicDefinition::doCreate_(u8* data, u32 file_size, sead::Heap* heap) {
auto archive = agl::utl::ResParameterArchive(data);
auto root_list = archive.getRootList();
auto musicDefines_list = agl::utl::getResParameterList(root_list, "MusicDefines");
if (musicDefines_list) {
s32 musicDefines_list_length = musicDefines_list.getResParameterObjNum();
if (musicDefines_list_length == 0) {
auto MusicDefines = agl::utl::getResParameterList(root_list, "MusicDefines");
if (MusicDefines) {
s32 num_music_defines = MusicDefines.getResParameterObjNum();
if (num_music_defines == 0) {
return;
}
mMusicDefines.allocBufferAssert(musicDefines_list_length, heap);
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);
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()));
@ -36,16 +31,16 @@ void MusicDefinition::doCreate_(u8* data, u32 file_size, sead::Heap* heap) {
addList(&mMusicList, "MusicDefines");
}
auto categoryDefines_list = agl::utl::getResParameterList(root_list, "CategoryDefines");
if (categoryDefines_list) {
s32 categoryDefines_list_length = categoryDefines_list.getResParameterObjNum();
if (categoryDefines_list_length == 0)
auto CategoryDefines = agl::utl::getResParameterList(root_list, "CategoryDefines");
if (CategoryDefines) {
s32 num_category_defines = CategoryDefines.getResParameterObjNum();
if (num_category_defines == 0)
return;
mCategoryDefines.allocBufferAssert(categoryDefines_list_length, heap);
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);
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()));
@ -96,4 +91,4 @@ int MusicDefinition::getPriorityValueByCategoryName(const sead::SafeString& name
return 0;
}
} // namespace ksys::snd
} // namespace ksys::snd