mirror of https://github.com/zeldaret/botw.git
ksys/res: Start implementing ASList
This commit is contained in:
parent
2364c80231
commit
364b825ce8
|
@ -91502,20 +91502,20 @@
|
|||
0x00000071011abc84,sub_71011ABC84,372,
|
||||
0x00000071011abdf8,nullsub_4622,4,
|
||||
0x00000071011abdfc,sub_71011ABDFC,372,_ZN4ksys3res6ASListC1Ev
|
||||
0x00000071011abf70,sub_71011ABF70,668,
|
||||
0x00000071011ac20c,sub_71011AC20C,8,
|
||||
0x00000071011ac214,sub_71011AC214,8,
|
||||
0x00000071011ac21c,sub_71011AC21C,36,
|
||||
0x00000071011ac240,sub_71011AC240,40,
|
||||
0x00000071011ac268,sub_71011AC268,40,
|
||||
0x00000071011ac290,nullsub_4623,4,
|
||||
0x00000071011ac294,nullsub_4624,4,
|
||||
0x00000071011ac298,sub_71011AC298,4836,
|
||||
0x00000071011ad57c,sub_71011AD57C,304,
|
||||
0x00000071011ad6ac,sub_71011AD6AC,312,
|
||||
0x00000071011ad7e4,sub_71011AD7E4,8,
|
||||
0x00000071011ad7ec,sub_71011AD7EC,8,
|
||||
0x00000071011ad7f4,sub_71011AD7F4,8,
|
||||
0x00000071011abf70,sub_71011ABF70,668,_ZN4ksys3res6ASListD1Ev
|
||||
0x00000071011ac20c,sub_71011AC20C,8,_ZThn632_N4ksys3res6ASListD1Ev
|
||||
0x00000071011ac214,sub_71011AC214,8,_ZThn664_N4ksys3res6ASListD1Ev
|
||||
0x00000071011ac21c,sub_71011AC21C,36,_ZN4ksys3res6ASListD0Ev
|
||||
0x00000071011ac240,sub_71011AC240,40,_ZThn632_N4ksys3res6ASListD0Ev
|
||||
0x00000071011ac268,sub_71011AC268,40,_ZThn664_N4ksys3res6ASListD0Ev
|
||||
0x00000071011ac290,nullsub_4623,4,_ZN4ksys3res6ASList9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071011ac294,nullsub_4624,4,_ZThn632_N4ksys3res6ASList9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071011ac298,sub_71011AC298,4836,_ZN4ksys3res6ASList6parse_EPhmPN4sead4HeapE
|
||||
0x00000071011ad57c,sub_71011AD57C,304,_ZN4sead6BufferIN4ksys3res6ASList6CFPostEE14tryAllocBufferEiPNS_4HeapEi
|
||||
0x00000071011ad6ac,sub_71011AD6AC,312,_ZN4sead6BufferIN4ksys3res6ASList6AddResEE14tryAllocBufferEiPNS_4HeapEi
|
||||
0x00000071011ad7e4,sub_71011AD7E4,8,_ZThn632_N4ksys3res6ASList6parse_EPhmPN4sead4HeapE
|
||||
0x00000071011ad7ec,sub_71011AD7EC,8,_ZN4ksys3res6ASList14finishParsing_Ev
|
||||
0x00000071011ad7f4,sub_71011AD7F4,8,_ZThn632_N4ksys3res6ASList14finishParsing_Ev
|
||||
0x00000071011ad7fc,sub_71011AD7FC,108,
|
||||
0x00000071011ad868,sub_71011AD868,108,
|
||||
0x00000071011ad8d4,sub_71011AD8D4,356,
|
||||
|
@ -91523,13 +91523,13 @@
|
|||
0x00000071011ada94,sub_71011ADA94,424,
|
||||
0x00000071011adc3c,sub_71011ADC3C,424,
|
||||
0x00000071011adde4,sub_71011ADDE4,1032,
|
||||
0x00000071011ae1ec,sub_71011AE1EC,8,
|
||||
0x00000071011ae1f4,sub_71011AE1F4,92,
|
||||
0x00000071011ae250,sub_71011AE250,8,
|
||||
0x00000071011ae258,sub_71011AE258,8,
|
||||
0x00000071011ae260,sub_71011AE260,92,
|
||||
0x00000071011ae2bc,sub_71011AE2BC,8,
|
||||
0x00000071011ae2c4,sub_71011AE2C4,372,
|
||||
0x00000071011ae1ec,sub_71011AE1EC,8,_ZNK4ksys3res6ASList27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071011ae1f4,sub_71011AE1F4,92,_ZNK4ksys3res6ASList18getRuntimeTypeInfoEv
|
||||
0x00000071011ae250,sub_71011AE250,8,_ZNK4ksys3res6ASList10needsParseEv
|
||||
0x00000071011ae258,sub_71011AE258,8,_ZThn632_NK4ksys3res6ASList27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071011ae260,sub_71011AE260,92,_ZThn632_NK4ksys3res6ASList18getRuntimeTypeInfoEv
|
||||
0x00000071011ae2bc,sub_71011AE2BC,8,_ZThn632_NK4ksys3res6ASList10needsParseEv
|
||||
0x00000071011ae2c4,sub_71011AE2C4,372,_ZN4ksys3res6ASList33checkDerivedRuntimeTypeInfoStaticEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071011ae438,sub_71011AE438,212,
|
||||
0x00000071011ae50c,Bmodellist::ctor,596,_ZN4ksys3res9ModelListC1Ev
|
||||
0x00000071011ae760,BmodellistSub::ctor,404,_ZN4ksys3res9ModelList9AttentionC2Ev
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -4,4 +4,138 @@ namespace ksys::res {
|
|||
|
||||
ASList::ASList() : ParamIO("aslist", 0) {}
|
||||
|
||||
ASList::~ASList() {
|
||||
mASDefines.freeBuffer();
|
||||
for (auto& cf : mCFDefines) {
|
||||
cf.posts.freeBuffer();
|
||||
cf.excepts.freeBuffer();
|
||||
}
|
||||
mCFDefines.freeBuffer();
|
||||
mAddReses.freeBuffer();
|
||||
}
|
||||
|
||||
void ASList::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) {}
|
||||
|
||||
bool ASList::parse_(u8* data, size_t size, sead::Heap* heap) {
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
agl::utl::ResParameterArchive archive{data};
|
||||
const auto root = archive.getRootList();
|
||||
|
||||
const auto ASDefines = agl::utl::getResParameterList(root, "ASDefines");
|
||||
auto ASDefine_name = sead::FixedSafeString<32>{"ASDefine_"};
|
||||
const auto ASDefine_prefix_len = ASDefine_name.calcLength();
|
||||
if (!ASDefines.ptr())
|
||||
return true;
|
||||
const auto ASDefines_num = ASDefines.getResParameterObjNum();
|
||||
if (ASDefines_num != 0) {
|
||||
if (!mASDefines.tryAllocBuffer(ASDefines_num, heap))
|
||||
return false;
|
||||
for (auto it = mASDefines.begin(), end = mASDefines.end(); it != end; ++it) {
|
||||
it->name.init("", "Name", "", &it->obj);
|
||||
it->file_name.init("", "Filename", "", &it->obj);
|
||||
it->as = nullptr;
|
||||
|
||||
ASDefine_name.trim(ASDefine_prefix_len);
|
||||
ASDefine_name.appendWithFormat("%d", it.getIndex());
|
||||
mASDefinesList.addObj(&it->obj, ASDefine_name);
|
||||
}
|
||||
addList(&mASDefinesList, "ASDefines");
|
||||
|
||||
const auto CFDefines = agl::utl::getResParameterList(root, "CFDefines");
|
||||
if (int CFDefines_num;
|
||||
CFDefines.ptr() && (CFDefines_num = CFDefines.getResParameterListNum()) != 0) {
|
||||
if (!mCFDefines.tryAllocBuffer(CFDefines_num, heap))
|
||||
return false;
|
||||
|
||||
auto CFDefine_name = sead::FixedSafeString<32>{"CFDefine_"};
|
||||
const auto CFDefine_prefix_len = CFDefine_name.calcLength();
|
||||
|
||||
auto CFPost_name = sead::FixedSafeString<32>{"CFPost_"};
|
||||
const auto CFPost_prefix_len = CFPost_name.calcLength();
|
||||
|
||||
auto Name_name = sead::FixedSafeString<32>{"Name_"};
|
||||
const auto Name_prefix_len = Name_name.calcLength();
|
||||
|
||||
for (auto it = mCFDefines.begin(), end = mCFDefines.end(); it != end; ++it) {
|
||||
CFDefine_name.trim(CFDefine_prefix_len);
|
||||
CFDefine_name.appendWithFormat("%d", it.getIndex());
|
||||
mCFDefinesList.addList(&it->list, CFDefine_name);
|
||||
const auto CFDefine = agl::utl::getResParameterList(CFDefines, CFDefine_name);
|
||||
|
||||
const auto CFPosts = agl::utl::getResParameterList(CFDefine, "CFPosts");
|
||||
if (int num; CFPosts.ptr() && (num = CFPosts.getResParameterObjNum()) != 0) {
|
||||
if (!it->posts.tryAllocBuffer(num, heap))
|
||||
return false;
|
||||
for (auto post = it->posts.begin(), post_end = it->posts.end();
|
||||
post != post_end; ++post) {
|
||||
post->name.init("", "Name", "", &post->obj);
|
||||
post->frame.init(0, "Frame", "", &post->obj);
|
||||
post->start_frame_rate.init(0, "StartFrameRate", "", &post->obj);
|
||||
|
||||
CFPost_name.trim(CFPost_prefix_len);
|
||||
CFPost_name.appendWithFormat("%d", post.getIndex());
|
||||
it->posts_list.addObj(&post->obj, CFPost_name);
|
||||
}
|
||||
}
|
||||
|
||||
const auto CFExcepts = agl::utl::getResParameterObj(CFDefine, "CFExcepts");
|
||||
if (int num; CFExcepts.ptr() && (num = CFExcepts.getNum()) != 0) {
|
||||
if (!it->excepts.tryAllocBuffer(num, heap))
|
||||
return false;
|
||||
for (auto except = it->excepts.begin(), except_end = it->excepts.end();
|
||||
except != except_end; ++except) {
|
||||
Name_name.trim(Name_prefix_len);
|
||||
Name_name.appendWithFormat("%d", except.getIndex());
|
||||
except->name.init("", Name_name, "", &it->excepts_obj);
|
||||
}
|
||||
}
|
||||
|
||||
it->name.init("", "Name", "", &it->pre_obj);
|
||||
it->list.addObj(&it->pre_obj, "CFPre");
|
||||
it->list.addList(&it->posts_list, "CFPosts");
|
||||
it->list.addObj(&it->excepts_obj, "CFExcepts");
|
||||
}
|
||||
|
||||
addList(&mCFDefinesList, "CFDefines");
|
||||
}
|
||||
}
|
||||
|
||||
const auto AddReses = agl::utl::getResParameterList(root, "AddReses");
|
||||
if (int num; AddReses.ptr() && (num = AddReses.getResParameterObjNum()) != 0) {
|
||||
if (!mAddReses.tryAllocBuffer(num, heap))
|
||||
return false;
|
||||
|
||||
auto AddRes_name = sead::FixedSafeString<32>{"AddRes_"};
|
||||
const auto AddRes_prefix_len = AddRes_name.calcLength();
|
||||
for (auto it = mAddReses.begin(), end = mAddReses.end(); it != end; ++it) {
|
||||
it->anim.init("", "Anim", "", &it->obj);
|
||||
it->retarget_model.init("", "RetargetModel", "", &it->obj);
|
||||
it->retarget_no_correct.init(false, "RetargetNoCorrect", "", &it->obj);
|
||||
|
||||
AddRes_name.trim(AddRes_prefix_len);
|
||||
AddRes_name.appendWithFormat("%d", it.getIndex());
|
||||
mAddResesList.addObj(&it->obj, AddRes_name);
|
||||
}
|
||||
addList(&mAddResesList, "AddReses");
|
||||
}
|
||||
|
||||
if (agl::utl::getResParameterObj(root, "Common").ptr()) {
|
||||
const sead::SafeString name = "RateAll";
|
||||
const sead::SafeString label = "";
|
||||
mCommon->rate_all.init(1.0, name, label, &mCommon->obj);
|
||||
addObj(&mCommon->obj, "Common");
|
||||
} else {
|
||||
mCommon->rate_all = 1.0;
|
||||
}
|
||||
|
||||
applyResParameterArchive(agl::utl::ResParameterArchive{data});
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ASList::finishParsing_() {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
|
|
@ -25,21 +25,34 @@ public:
|
|||
};
|
||||
KSYS_CHECK_SIZE_NX150(ASDefine, 0x88);
|
||||
|
||||
struct CFPost {
|
||||
agl::utl::Parameter<sead::SafeString> name;
|
||||
agl::utl::Parameter<float> frame;
|
||||
agl::utl::Parameter<float> start_frame_rate;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(CFPost, 0x98);
|
||||
|
||||
struct CFExcept {
|
||||
agl::utl::Parameter<sead::SafeString> name;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(CFExcept, 0x28);
|
||||
|
||||
struct CFDefine {
|
||||
agl::utl::Parameter<sead::SafeString> name;
|
||||
agl::utl::ParameterObj pre_obj;
|
||||
sead::Buffer<void*> posts;
|
||||
sead::Buffer<CFPost> posts;
|
||||
agl::utl::ParameterList posts_list;
|
||||
sead::Buffer<void*> excepts;
|
||||
agl::utl::ParameterObj obj;
|
||||
agl::utl::ParameterList excepts_list;
|
||||
sead::Buffer<CFExcept> excepts;
|
||||
agl::utl::ParameterObj excepts_obj;
|
||||
agl::utl::ParameterList list;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(CFDefine, 0x138);
|
||||
|
||||
struct AddRes {
|
||||
agl::utl::Parameter<sead::SafeString> _0;
|
||||
agl::utl::Parameter<sead::SafeString> _28;
|
||||
agl::utl::Parameter<bool> _50;
|
||||
agl::utl::Parameter<sead::SafeString> anim;
|
||||
agl::utl::Parameter<sead::SafeString> retarget_model;
|
||||
agl::utl::Parameter<bool> retarget_no_correct;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(AddRes, 0xa0);
|
||||
|
@ -79,7 +92,7 @@ private:
|
|||
agl::utl::ParameterList mCFDefinesList;
|
||||
agl::utl::ParameterList mASDefinesList;
|
||||
agl::utl::ParameterList mAddResesList;
|
||||
sead::StorageFor<Common> mCommon{sead::ZeroInitializeTag{}};
|
||||
sead::StorageFor<Common, true> mCommon{sead::ZeroInitializeTag{}};
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ASList, 0x410);
|
||||
|
||||
|
|
Loading…
Reference in New Issue