#include "KingSystem/Resource/resResourceGParamList.h" #include #include #include "KingSystem/ActorSystem/actActorParamMgr.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObject.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectAnimalFollowOffset.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectArmor.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectArmorEffect.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectArmorHead.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectArmorUpper.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectArrow.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttack.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttackInterval.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectBindBone.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectBow.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectBullet.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectCamera.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectCookSpice.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectCureItem.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemy.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyLevel.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyRace.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyShown.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectExtendedEntity.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGeneral.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGrab.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGuardianMiniWeapon.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectItem.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectLargeSword.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectLiftable.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectLumberjackTree.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectMasterSword.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectNpc.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectNpcEquipment.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectPlayer.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectPrey.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectRod.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectRupee.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSandworm.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSeriesArmor.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectShiekerStone.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectShield.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSmallSword.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSpear.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSystem.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectTraveler.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectWeaponCommon.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectWeaponOption.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectWeaponThrow.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectZora.h" #include "KingSystem/Resource/GeneralParamList/resGParamListTraits.h" namespace ksys::res { void GParamList::doCreate_(u8*, u32, sead::Heap*) {} template KSYS_ALWAYS_INLINE void GParamList::add(const agl::utl::ResParameterList& list, const sead::SafeString& name, sead::Heap* heap, GParamList* dummy_list) { const auto pobj = agl::utl::getResParameterObj(list, name); if (pobj.ptr()) { using T = typename GParamListObjTypeTraits::type; auto* obj = new (heap) T; if (obj) addObj(&obj->getObj(), obj->getName()); mObjects[s32(Type)] = obj; } else { mObjects[s32(Type)] = dummy_list ? dummy_list->mObjects[s32(Type)] : nullptr; } } bool GParamList::parse_(u8* data, size_t, sead::Heap* heap) { GParamList* dummy_list = nullptr; if (!sead::IsDerivedFrom(this) && act::ActorParamMgr::instance()) dummy_list = act::ActorParamMgr::instance()->getDummyGParamList(); mObjects.allocBufferAssert(NumGParamListObjTypes, heap); const agl::utl::ResParameterArchive archive{data}; add(archive.getRootList(), "System", heap, dummy_list); add(archive.getRootList(), "General", heap, dummy_list); add(archive.getRootList(), "Enemy", heap, dummy_list); add(archive.getRootList(), "EnemyLevel", heap, dummy_list); add(archive.getRootList(), "EnemyRace", heap, dummy_list); add(archive.getRootList(), "AttackInterval", heap, dummy_list); add(archive.getRootList(), "EnemyShown", heap, dummy_list); add(archive.getRootList(), "BindBone", heap, dummy_list); add(archive.getRootList(), "Attack", heap, dummy_list); add(archive.getRootList(), "WeaponCommon", heap, dummy_list); add(archive.getRootList(), "WeaponThrow", heap, dummy_list); add(archive.getRootList(), "Sandworm", heap, dummy_list); add(archive.getRootList(), "SmallSword", heap, dummy_list); add(archive.getRootList(), "Rod", heap, dummy_list); add(archive.getRootList(), "LargeSword", heap, dummy_list); add(archive.getRootList(), "Spear", heap, dummy_list); add(archive.getRootList(), "Shield", heap, dummy_list); add(archive.getRootList(), "Bow", heap, dummy_list); add(archive.getRootList(), "WeaponOption", heap, dummy_list); add(archive.getRootList(), "MasterSword", heap, dummy_list); add(archive.getRootList(), "GuardianMiniWeapon", heap, dummy_list); add(archive.getRootList(), "Player", heap, dummy_list); add(archive.getRootList(), "Camera", heap, dummy_list); add(archive.getRootList(), "Grab", heap, dummy_list); add(archive.getRootList(), "Armor", heap, dummy_list); add(archive.getRootList(), "ArmorEffect", heap, dummy_list); add(archive.getRootList(), "ArmorHead", heap, dummy_list); add(archive.getRootList(), "ArmorUpper", heap, dummy_list); add(archive.getRootList(), "ShiekerStone", heap, dummy_list); add(archive.getRootList(), "SeriesArmor", heap, dummy_list); add(archive.getRootList(), "Liftable", heap, dummy_list); add(archive.getRootList(), "Item", heap, dummy_list); add(archive.getRootList(), "Rupee", heap, dummy_list); add(archive.getRootList(), "Arrow", heap, dummy_list); add(archive.getRootList(), "Bullet", heap, dummy_list); add(archive.getRootList(), "CureItem", heap, dummy_list); add(archive.getRootList(), "CookSpice", heap, dummy_list); add(archive.getRootList(), "LumberjackTree", heap, dummy_list); add(archive.getRootList(), "Npc", heap, dummy_list); add(archive.getRootList(), "NpcEquipment", heap, dummy_list); add(archive.getRootList(), "Zora", heap, dummy_list); add(archive.getRootList(), "Traveler", heap, dummy_list); add(archive.getRootList(), "Prey", heap, dummy_list); add(archive.getRootList(), "AnimalFollowOffset", heap, dummy_list); add(archive.getRootList(), "ExtendedEntity", heap, dummy_list); // TODO: the rest if (data) applyResParameterArchive(archive); return true; } void GParamList::finalize_() {} void DummyGParamList::doCreate_(u8*, u32, sead::Heap*) {} bool DummyGParamList::parse_(u8* data, size_t size, sead::Heap* heap) { GParamList::parse_(data, size, heap); return true; } } // namespace ksys::res