mirror of https://github.com/zeldaret/botw.git
Merge pull request #6 from notyourav/pr
decompile resResourceLifeCondition
This commit is contained in:
commit
5ea758b40a
|
@ -85850,9 +85850,9 @@
|
|||
0x0000007101099918,sub_7101099918,116,_ZThn664_N4ksys3res4DropD0Ev
|
||||
0x0000007101099b00,nullsub_4471,4,
|
||||
0x0000007101099b04,nullsub_4472,4,
|
||||
0x0000007101099b08,Blifecondition::parse,1296,
|
||||
0x000000710109a018,Blifecondition::parseArray,448,
|
||||
0x000000710109a1d8,ResourceBlifecondition::parse,28,
|
||||
0x0000007101099b08,Blifecondition::parse,1296,_ZN4ksys3res13LifeCondition6parse_EPhmPN4sead4HeapE?
|
||||
0x000000710109a018,Blifecondition::parseArray,448,_ZN4ksys3res13LifeCondition10parseArrayEPKN3agl3utl15ResParameterObjEPNS3_13IParameterObjEPN4sead6BufferINS3_9ParameterINS9_14SafeStringBaseIcEEEEEERKSD_SI_PNS9_4HeapE
|
||||
0x000000710109a1d8,ResourceBlifecondition::parse,28,_ZThn632_N4ksys3res13LifeCondition6parse_EPhmPN4sead4HeapE
|
||||
0x000000710109a1f4,_ZNK3aal8ShapeMgr20isTemplateRegisteredERKN4sead14SafeStringBaseIcEE,280,
|
||||
0x000000710109a30c,sub_710109A30C,156,
|
||||
0x000000710109a3a8,sub_710109A3A8,144,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -122,6 +122,8 @@ target_sources(uking PRIVATE
|
|||
resResourceDrop.h
|
||||
resResourceGParamList.cpp
|
||||
resResourceGParamList.h
|
||||
resResourceLifeCondition.cpp
|
||||
resResourceLifeCondition.h
|
||||
resResourceLod.cpp
|
||||
resResourceLod.h
|
||||
resResourceRecipe.cpp
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
#include "KingSystem/Resource/resResourceLifeCondition.h"
|
||||
#include <codec/seadHashCRC32.h>
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
// NON_MATCHING: two instructions swapped
|
||||
bool LifeCondition::parse_(u8* data, size_t, sead::Heap* heap) {
|
||||
if (!data)
|
||||
return true;
|
||||
|
||||
applyResParameterArchive(agl::utl::ResParameterArchive{data});
|
||||
const agl::utl::ResParameterArchive archive{data};
|
||||
const auto root = archive.getRootList();
|
||||
|
||||
const auto invalid_weathers_obj = agl::utl::getResParameterObj(root, "InvalidWeathers");
|
||||
if (invalid_weathers_obj.ptr())
|
||||
LifeCondition::parseArray(&invalid_weathers_obj, &mInvalidWeathersObj,
|
||||
&mInvalidWeathersBuffer, "InvalidWeathers", "天候", heap);
|
||||
|
||||
const auto invalid_times_obj = agl::utl::getResParameterObj(root, "InvalidTimes");
|
||||
if (invalid_times_obj.ptr())
|
||||
LifeCondition::parseArray(&invalid_times_obj, &mInvalidTimesObj, &mInvalidTimesBuffer,
|
||||
"InvalidTimes", "時間", heap);
|
||||
|
||||
const auto display_distance_obj = agl::utl::getResParameterObj(root, "DisplayDistance");
|
||||
if (display_distance_obj.ptr()) {
|
||||
mDisplayDistance.init(0.0, "Item", "表示距離", &mDisplayDistanceObj);
|
||||
addObj(&mDisplayDistanceObj, "DisplayDistance");
|
||||
mDisplayDistanceObj.applyResParameterObj(display_distance_obj, nullptr);
|
||||
}
|
||||
|
||||
const auto auto_display_distance_algorithm_obj =
|
||||
agl::utl::getResParameterObj(root, "AutoDisplayDistanceAlgorithm");
|
||||
if (auto_display_distance_algorithm_obj.ptr()) {
|
||||
mBoundingY.init("Bouding.Y", "Item", "自動距離算出アルゴリズム", &mBoundingYObj);
|
||||
addObj(&mBoundingYObj, "AutoDisplayDistanceAlgorithm");
|
||||
mBoundingYObj.applyResParameterObj(auto_display_distance_algorithm_obj, nullptr);
|
||||
}
|
||||
|
||||
const auto y_limit_algorithm_obj = agl::utl::getResParameterObj(root, "YLimitAlgorithm");
|
||||
if (y_limit_algorithm_obj.ptr()) {
|
||||
mYLimitAlgorithm.init("NoLimit", "Item", "Y制限アルゴリズム", &mYLimitAlgorithmObj);
|
||||
addObj(&mYLimitAlgorithmObj, "YLimitAlgorithm");
|
||||
mYLimitAlgorithmObj.applyResParameterObj(y_limit_algorithm_obj, nullptr);
|
||||
}
|
||||
|
||||
const auto delete_weathers_obj = agl::utl::getResParameterObj(root, "DeleteWeathers");
|
||||
if (delete_weathers_obj.ptr())
|
||||
LifeCondition::parseArray(&delete_weathers_obj, &mDeleteWeathersObj, &mDeleteWeathersBuffer,
|
||||
"DeleteWeathers", "天候", heap);
|
||||
|
||||
const auto delete_times_obj = agl::utl::getResParameterObj(root, "DeleteTimes");
|
||||
if (delete_times_obj.ptr())
|
||||
LifeCondition::parseArray(&delete_times_obj, &mDeleteTimesObj, &mDeleteTimesBuffer,
|
||||
"DeleteTimes", "時間", heap);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LifeCondition::parseArray(const agl::utl::ResParameterObj* data, agl::utl::IParameterObj* obj,
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>>* buffer,
|
||||
const sead::SafeString& key, const sead::SafeString& desc,
|
||||
sead::Heap* heap) {
|
||||
addObj(obj, key);
|
||||
obj->applyResParameterObj(*data, nullptr);
|
||||
|
||||
auto count = data->mPtr->getNumParameters();
|
||||
if (count == 0)
|
||||
return;
|
||||
|
||||
buffer->allocBufferAssert(count, heap);
|
||||
|
||||
for (int i = 0; i != count; ++i) {
|
||||
sead::FormatFixedSafeString<64> s;
|
||||
s.format("Item%03d", (i + 1));
|
||||
|
||||
(*buffer)[i].init("", s, desc, obj);
|
||||
}
|
||||
|
||||
obj->applyResParameterObj(*data, nullptr);
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
|
@ -0,0 +1,33 @@
|
|||
#include <agl/Utils/aglParameter.h>
|
||||
#include <agl/Utils/aglParameterObj.h>
|
||||
#include <container/seadBuffer.h>
|
||||
#include "KingSystem/Resource/resResource.h"
|
||||
#include "KingSystem/Utils/ParamIO.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
class LifeCondition : public ParamIO, public Resource {
|
||||
void parseArray(const agl::utl::ResParameterObj* data, agl::utl::IParameterObj* obj,
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>>* buffer,
|
||||
const sead::SafeString& key, const sead::SafeString& desc, sead::Heap* heap);
|
||||
|
||||
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
|
||||
|
||||
agl::utl::IParameterObj mInvalidWeathersObj;
|
||||
agl::utl::IParameterObj mInvalidTimesObj;
|
||||
agl::utl::IParameterObj mDisplayDistanceObj;
|
||||
agl::utl::IParameterObj mDeleteWeathersObj;
|
||||
agl::utl::IParameterObj mDeleteTimesObj;
|
||||
agl::utl::IParameterObj mBoundingYObj;
|
||||
agl::utl::IParameterObj mYLimitAlgorithmObj;
|
||||
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>> mInvalidWeathersBuffer;
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>> mInvalidTimesBuffer;
|
||||
agl::utl::Parameter<f32> mDisplayDistance;
|
||||
agl::utl::Parameter<sead::SafeString> mBoundingY;
|
||||
agl::utl::Parameter<sead::SafeString> mYLimitAlgorithm;
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>> mDeleteWeathersBuffer;
|
||||
sead::Buffer<agl::utl::Parameter<sead::SafeString>> mDeleteTimesBuffer;
|
||||
};
|
||||
|
||||
} // namespace ksys::res
|
Loading…
Reference in New Issue