mirror of https://github.com/zeldaret/botw.git
ksys/res: Finish implementing ASList
This commit is contained in:
parent
364b825ce8
commit
a5aaebd020
|
@ -91516,13 +91516,13 @@
|
||||||
0x00000071011ad7e4,sub_71011AD7E4,8,_ZThn632_N4ksys3res6ASList6parse_EPhmPN4sead4HeapE
|
0x00000071011ad7e4,sub_71011AD7E4,8,_ZThn632_N4ksys3res6ASList6parse_EPhmPN4sead4HeapE
|
||||||
0x00000071011ad7ec,sub_71011AD7EC,8,_ZN4ksys3res6ASList14finishParsing_Ev
|
0x00000071011ad7ec,sub_71011AD7EC,8,_ZN4ksys3res6ASList14finishParsing_Ev
|
||||||
0x00000071011ad7f4,sub_71011AD7F4,8,_ZThn632_N4ksys3res6ASList14finishParsing_Ev
|
0x00000071011ad7f4,sub_71011AD7F4,8,_ZThn632_N4ksys3res6ASList14finishParsing_Ev
|
||||||
0x00000071011ad7fc,sub_71011AD7FC,108,
|
0x00000071011ad7fc,sub_71011AD7FC,108,_ZN4ksys3res6ASList3m7_Ev
|
||||||
0x00000071011ad868,sub_71011AD868,108,
|
0x00000071011ad868,sub_71011AD868,108,_ZThn632_N4ksys3res6ASList3m7_Ev
|
||||||
0x00000071011ad8d4,sub_71011AD8D4,356,
|
0x00000071011ad8d4,sub_71011AD8D4,356,_ZN4ksys3res6ASList6addAS_EiPNS0_2ASE
|
||||||
0x00000071011ada38,sub_71011ADA38,92,
|
0x00000071011ada38,sub_71011ADA38,92,_ZNK4ksys3res6ASList13getASFileNameERKN4sead14SafeStringBaseIcEE
|
||||||
0x00000071011ada94,sub_71011ADA94,424,
|
0x00000071011ada94,sub_71011ADA94,424,_ZNK4ksys3res6ASList12findASDefineERKN4sead14SafeStringBaseIcEE
|
||||||
0x00000071011adc3c,sub_71011ADC3C,424,
|
0x00000071011adc3c,sub_71011ADC3C,424,_ZNK4ksys3res6ASList12findCFDefineERKN4sead14SafeStringBaseIcEE
|
||||||
0x00000071011adde4,sub_71011ADDE4,1032,
|
0x00000071011adde4,sub_71011ADDE4,1032,_ZNK4ksys3res6ASList15getCFDefineInfoEPfS2_RKN4sead14SafeStringBaseIcEES7_Pb
|
||||||
0x00000071011ae1ec,sub_71011AE1EC,8,_ZNK4ksys3res6ASList27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
0x00000071011ae1ec,sub_71011AE1EC,8,_ZNK4ksys3res6ASList27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071011ae1f4,sub_71011AE1F4,92,_ZNK4ksys3res6ASList18getRuntimeTypeInfoEv
|
0x00000071011ae1f4,sub_71011AE1F4,92,_ZNK4ksys3res6ASList18getRuntimeTypeInfoEv
|
||||||
0x00000071011ae250,sub_71011AE250,8,_ZNK4ksys3res6ASList10needsParseEv
|
0x00000071011ae250,sub_71011AE250,8,_ZNK4ksys3res6ASList10needsParseEv
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -23,6 +23,8 @@ public:
|
||||||
void finalize_() override;
|
void finalize_() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class ASList;
|
||||||
|
|
||||||
sead::Buffer<Element*> mElements;
|
sead::Buffer<Element*> mElements;
|
||||||
agl::utl::ParameterList mElementsList;
|
agl::utl::ParameterList mElementsList;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "KingSystem/Resource/resResourceASList.h"
|
#include "KingSystem/Resource/resResourceASList.h"
|
||||||
|
#include "KingSystem/Resource/resResourceAS.h"
|
||||||
|
|
||||||
namespace ksys::res {
|
namespace ksys::res {
|
||||||
|
|
||||||
|
@ -138,4 +139,109 @@ bool ASList::finishParsing_() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ASList::m7_() {
|
||||||
|
for (auto& as : mASDefines)
|
||||||
|
as.as = nullptr;
|
||||||
|
|
||||||
|
_2b0 = 0;
|
||||||
|
_2b1 = 0;
|
||||||
|
_2b2 = 0;
|
||||||
|
_2b3 = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASList::addAS_(s32 index, AS* as) {
|
||||||
|
mASDefines[index].as = as;
|
||||||
|
|
||||||
|
_2b0 = _2b0 > as->_3b8 ? _2b0 : as->_3b8;
|
||||||
|
|
||||||
|
const auto as_counter = as->_3b9;
|
||||||
|
if (_2b1 == 0) {
|
||||||
|
_2b1 = as_counter;
|
||||||
|
_2b3 = as->_3bb;
|
||||||
|
} else {
|
||||||
|
u8* flags1;
|
||||||
|
u8* flags2;
|
||||||
|
if (as_counter > _2b1) {
|
||||||
|
_2b1 = as_counter;
|
||||||
|
flags1 = &as->_3bb;
|
||||||
|
flags2 = &_2b3;
|
||||||
|
} else {
|
||||||
|
flags1 = &_2b3;
|
||||||
|
flags2 = &as->_3bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
const auto mask = 1u << i;
|
||||||
|
if ((*flags1 & mask) == 0 && (*flags2 & mask) != 0) {
|
||||||
|
_2b3 |= mask;
|
||||||
|
_2b1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_2b2 |= as->_3ba;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* ASList::getASFileName(const sead::SafeString& name) const {
|
||||||
|
const int idx = findASDefine(name);
|
||||||
|
if (idx == -1)
|
||||||
|
return nullptr;
|
||||||
|
return mASDefines[idx].getFileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ASList::findASDefine(const sead::SafeString& name) const {
|
||||||
|
return mASDefines.binarySearch(
|
||||||
|
name, +[](const ASDefine& define, const sead::SafeString& key) {
|
||||||
|
return define.name->compare(key);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
int ASList::findCFDefine(const sead::SafeString& name) const {
|
||||||
|
return mCFDefines.binarySearch(
|
||||||
|
name, +[](const CFDefine& define, const sead::SafeString& key) {
|
||||||
|
return define.name->compare(key);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
int ASList::CFExcept::compare(const ASList::CFExcept& o, const sead::SafeString& n) {
|
||||||
|
return o.name->compare(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ASList::CFPost::compare(const ASList::CFPost& o, const sead::SafeString& n) {
|
||||||
|
return o.name->compare(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASList::getCFDefineInfo(float* frame, float* start_frame_value, const sead::SafeString& name,
|
||||||
|
const sead::SafeString& post_name, bool* is_default) const {
|
||||||
|
const int idx = findCFDefine(name);
|
||||||
|
*is_default = false;
|
||||||
|
if (idx == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const auto& cfdefine = mCFDefines[idx];
|
||||||
|
|
||||||
|
const int except_idx = cfdefine.excepts.binarySearch(post_name, CFExcept::compare);
|
||||||
|
if (except_idx >= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const CFPost* post = nullptr;
|
||||||
|
const int post_idx = cfdefine.posts.binarySearch(post_name, CFPost::compare);
|
||||||
|
if (post_idx != -1) {
|
||||||
|
post = std::addressof(cfdefine.posts[post_idx]);
|
||||||
|
} else {
|
||||||
|
post = std::addressof(cfdefine.posts[0]);
|
||||||
|
if (!post->name->isEmpty())
|
||||||
|
return false;
|
||||||
|
*is_default = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!post)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*frame = *post->frame;
|
||||||
|
*start_frame_value = *post->start_frame_rate;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ksys::res
|
} // namespace ksys::res
|
||||||
|
|
|
@ -26,6 +26,8 @@ public:
|
||||||
KSYS_CHECK_SIZE_NX150(ASDefine, 0x88);
|
KSYS_CHECK_SIZE_NX150(ASDefine, 0x88);
|
||||||
|
|
||||||
struct CFPost {
|
struct CFPost {
|
||||||
|
static int compare(const CFPost& o, const sead::SafeString& n);
|
||||||
|
|
||||||
agl::utl::Parameter<sead::SafeString> name;
|
agl::utl::Parameter<sead::SafeString> name;
|
||||||
agl::utl::Parameter<float> frame;
|
agl::utl::Parameter<float> frame;
|
||||||
agl::utl::Parameter<float> start_frame_rate;
|
agl::utl::Parameter<float> start_frame_rate;
|
||||||
|
@ -34,6 +36,8 @@ public:
|
||||||
KSYS_CHECK_SIZE_NX150(CFPost, 0x98);
|
KSYS_CHECK_SIZE_NX150(CFPost, 0x98);
|
||||||
|
|
||||||
struct CFExcept {
|
struct CFExcept {
|
||||||
|
static int compare(const CFExcept& o, const sead::SafeString& n);
|
||||||
|
|
||||||
agl::utl::Parameter<sead::SafeString> name;
|
agl::utl::Parameter<sead::SafeString> name;
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(CFExcept, 0x28);
|
KSYS_CHECK_SIZE_NX150(CFExcept, 0x28);
|
||||||
|
@ -77,6 +81,12 @@ public:
|
||||||
|
|
||||||
void addAS_(s32 index, AS* as);
|
void addAS_(s32 index, AS* as);
|
||||||
|
|
||||||
|
const char* getASFileName(const sead::SafeString& name) const;
|
||||||
|
int findASDefine(const sead::SafeString& name) const;
|
||||||
|
int findCFDefine(const sead::SafeString& name) const;
|
||||||
|
bool getCFDefineInfo(float* frame, float* key, const sead::SafeString& name,
|
||||||
|
const sead::SafeString& post_name, bool* is_default) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool finishParsing_() override;
|
bool finishParsing_() override;
|
||||||
bool m7_() override;
|
bool m7_() override;
|
||||||
|
|
Loading…
Reference in New Issue