botw/src/KingSystem/Resource/resResourceGParamList.cpp

305 lines
15 KiB
C++

#include "KingSystem/Resource/resResourceGParamList.h"
#include <agl/Utils/aglParameter.h>
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/ActorSystem/actActorParamMgr.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObject.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectAirWall.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectAnimalFollowOffset.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectAnimalUnit.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/resGParamListObjectAutoGen.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectBeam.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectBindActor.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/resGParamListObjectChemicalType.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectClothReaction.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectCookSpice.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectCureItem.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectEatTarget.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/resGParamListObjectEvent.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectExtendedEntity.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectFish.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGelEnemy.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGeneral.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGiantArmor.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGiantArmorSlot.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGlobal.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGolem.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGolemIK.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGrab.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGuardian.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGuardianMini.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectGuardianMiniWeapon.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorse.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseCreator.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseObject.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseRider.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseTargetedInfo.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseUnit.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectInsect.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/resGParamListObjectMonsterShop.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectMotorcycle.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectNest.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectNpc.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectNpcEquipment.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectPictureBook.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectPlayer.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectPrey.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectRod.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectRope.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/resGParamListObjectStalEnemy.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectSwarm.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/resGParamListObjectWizzrobe.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectWolfLink.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectZora.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListTraits.h"
namespace ksys::res {
void GParamList::doCreate_(u8*, u32, sead::Heap*) {}
bool GParamList::parse_(u8* data, size_t, sead::Heap* heap) {
GParamList* dummy_list = nullptr;
if (!sead::IsDerivedFrom<DummyGParamList>(this) && act::ActorParamMgr::instance())
dummy_list = act::ActorParamMgr::instance()->getDummyGParamList();
mObjects.allocBufferAssert(NumGParamListObjTypes, heap);
const agl::utl::ResParameterArchive archive{data};
#define KSYS_GPARAM_ADD_(NAME) \
do { \
using Traits = GParamListObjTypeTraits<GParamListObjType::NAME>; \
const auto pobj = agl::utl::getResParameterObj(archive.getRootList(), #NAME); \
if (pobj.ptr()) { \
auto* obj = new (heap) Traits::type; \
if (obj) \
addObj(&obj->getObj(), obj->getName()); \
\
mObjects[Traits::index] = obj; \
\
} else { \
mObjects[Traits::index] = dummy_list ? dummy_list->mObjects[Traits::index] : nullptr; \
} \
} while (0)
KSYS_GPARAM_ADD_(System);
KSYS_GPARAM_ADD_(General);
KSYS_GPARAM_ADD_(Enemy);
KSYS_GPARAM_ADD_(EnemyLevel);
KSYS_GPARAM_ADD_(EnemyRace);
KSYS_GPARAM_ADD_(AttackInterval);
KSYS_GPARAM_ADD_(EnemyShown);
KSYS_GPARAM_ADD_(BindBone);
KSYS_GPARAM_ADD_(Attack);
KSYS_GPARAM_ADD_(WeaponCommon);
KSYS_GPARAM_ADD_(WeaponThrow);
KSYS_GPARAM_ADD_(Sandworm);
KSYS_GPARAM_ADD_(SmallSword);
KSYS_GPARAM_ADD_(Rod);
KSYS_GPARAM_ADD_(LargeSword);
KSYS_GPARAM_ADD_(Spear);
KSYS_GPARAM_ADD_(Shield);
KSYS_GPARAM_ADD_(Bow);
KSYS_GPARAM_ADD_(WeaponOption);
KSYS_GPARAM_ADD_(MasterSword);
KSYS_GPARAM_ADD_(GuardianMiniWeapon);
KSYS_GPARAM_ADD_(Player);
KSYS_GPARAM_ADD_(Camera);
KSYS_GPARAM_ADD_(Grab);
KSYS_GPARAM_ADD_(Armor);
KSYS_GPARAM_ADD_(ArmorEffect);
KSYS_GPARAM_ADD_(ArmorHead);
KSYS_GPARAM_ADD_(ArmorUpper);
KSYS_GPARAM_ADD_(ShiekerStone);
KSYS_GPARAM_ADD_(SeriesArmor);
KSYS_GPARAM_ADD_(Liftable);
KSYS_GPARAM_ADD_(Item);
KSYS_GPARAM_ADD_(Rupee);
KSYS_GPARAM_ADD_(Arrow);
KSYS_GPARAM_ADD_(Bullet);
KSYS_GPARAM_ADD_(CureItem);
KSYS_GPARAM_ADD_(CookSpice);
KSYS_GPARAM_ADD_(LumberjackTree);
KSYS_GPARAM_ADD_(Npc);
KSYS_GPARAM_ADD_(NpcEquipment);
KSYS_GPARAM_ADD_(Zora);
KSYS_GPARAM_ADD_(Traveler);
KSYS_GPARAM_ADD_(Prey);
KSYS_GPARAM_ADD_(AnimalFollowOffset);
KSYS_GPARAM_ADD_(ExtendedEntity);
KSYS_GPARAM_ADD_(BindActor);
KSYS_GPARAM_ADD_(EatTarget);
KSYS_GPARAM_ADD_(AnimalUnit);
KSYS_GPARAM_ADD_(Insect);
KSYS_GPARAM_ADD_(Fish);
KSYS_GPARAM_ADD_(Rope);
KSYS_GPARAM_ADD_(Horse);
KSYS_GPARAM_ADD_(HorseUnit);
KSYS_GPARAM_ADD_(HorseObject);
KSYS_GPARAM_ADD_(HorseRider);
KSYS_GPARAM_ADD_(HorseCreator);
KSYS_GPARAM_ADD_(GiantArmorSlot);
KSYS_GPARAM_ADD_(GiantArmor);
KSYS_GPARAM_ADD_(Guardian);
KSYS_GPARAM_ADD_(MonsterShop);
KSYS_GPARAM_ADD_(Swarm);
KSYS_GPARAM_ADD_(GelEnemy);
KSYS_GPARAM_ADD_(Nest);
KSYS_GPARAM_ADD_(Wizzrobe);
KSYS_GPARAM_ADD_(StalEnemy);
KSYS_GPARAM_ADD_(GuardianMini);
KSYS_GPARAM_ADD_(ClothReaction);
KSYS_GPARAM_ADD_(Global);
KSYS_GPARAM_ADD_(Beam);
KSYS_GPARAM_ADD_(AutoGen);
KSYS_GPARAM_ADD_(ChemicalType);
KSYS_GPARAM_ADD_(Golem);
KSYS_GPARAM_ADD_(HorseTargetedInfo);
KSYS_GPARAM_ADD_(WolfLink);
KSYS_GPARAM_ADD_(Event);
KSYS_GPARAM_ADD_(GolemIK);
KSYS_GPARAM_ADD_(PictureBook);
KSYS_GPARAM_ADD_(AirWall);
KSYS_GPARAM_ADD_(Motorcycle);
#undef KSYS_GPARAM_ADD_
if (data)
applyResParameterArchive(archive);
return true;
}
void GParamList::finalize_() {}
static constexpr size_t getResourceFactoryFallbackSizeConst() {
size_t size = 0;
size += sizeof(GParamListObjectSystem);
size += sizeof(GParamListObjectGeneral);
size += sizeof(GParamListObjectEnemy);
size += sizeof(GParamListObjectEnemyLevel);
size += sizeof(GParamListObjectEnemyRace);
size += sizeof(GParamListObjectAttackInterval);
size += sizeof(GParamListObjectEnemyShown);
size += sizeof(GParamListObjectBindBone);
size += sizeof(GParamListObjectAttack);
size += sizeof(GParamListObjectWeaponCommon);
size += sizeof(GParamListObjectWeaponThrow);
size += sizeof(GParamListObjectSandworm);
size += sizeof(GParamListObjectSmallSword);
size += sizeof(GParamListObjectRod);
size += sizeof(GParamListObjectLargeSword);
size += sizeof(GParamListObjectSpear);
size += sizeof(GParamListObjectShield);
size += sizeof(GParamListObjectBow);
size += sizeof(GParamListObjectWeaponOption);
size += sizeof(GParamListObjectMasterSword);
size += sizeof(GParamListObjectGuardianMiniWeapon);
size += sizeof(GParamListObjectPlayer);
size += sizeof(GParamListObjectCamera);
size += sizeof(GParamListObjectGrab);
size += sizeof(GParamListObjectArmor);
size += sizeof(GParamListObjectArmorEffect);
size += sizeof(GParamListObjectArmorHead);
size += sizeof(GParamListObjectArmorUpper);
size += sizeof(GParamListObjectShiekerStone);
size += sizeof(GParamListObjectSeriesArmor);
size += sizeof(GParamListObjectLiftable);
size += sizeof(GParamListObjectItem);
size += sizeof(GParamListObjectRupee);
size += sizeof(GParamListObjectArrow);
size += sizeof(GParamListObjectBullet);
size += sizeof(GParamListObjectCureItem);
size += sizeof(GParamListObjectCookSpice);
size += sizeof(GParamListObjectLumberjackTree);
size += sizeof(GParamListObjectNpc);
size += sizeof(GParamListObjectNpcEquipment);
size += sizeof(GParamListObjectZora);
size += sizeof(GParamListObjectTraveler);
size += sizeof(GParamListObjectPrey);
size += sizeof(GParamListObjectAnimalFollowOffset);
size += sizeof(GParamListObjectExtendedEntity);
size += sizeof(GParamListObjectBindActor);
size += sizeof(GParamListObjectEatTarget);
size += sizeof(GParamListObjectAnimalUnit);
size += sizeof(GParamListObjectInsect);
size += sizeof(GParamListObjectFish);
size += sizeof(GParamListObjectRope);
size += sizeof(GParamListObjectHorse);
size += sizeof(GParamListObjectHorseUnit);
size += sizeof(GParamListObjectHorseObject);
size += sizeof(GParamListObjectHorseRider);
size += sizeof(GParamListObjectHorseCreator);
size += sizeof(GParamListObjectGiantArmorSlot);
size += sizeof(GParamListObjectGiantArmor);
size += sizeof(GParamListObjectGuardian);
size += sizeof(GParamListObjectMonsterShop);
size += sizeof(GParamListObjectSwarm);
size += sizeof(GParamListObjectGelEnemy);
size += sizeof(GParamListObjectNest);
size += sizeof(GParamListObjectWizzrobe);
size += sizeof(GParamListObjectStalEnemy);
size += sizeof(GParamListObjectGuardianMini);
size += sizeof(GParamListObjectClothReaction);
size += sizeof(GParamListObjectGlobal);
size += sizeof(GParamListObjectBeam);
size += sizeof(GParamListObjectAutoGen);
size += sizeof(GParamListObjectChemicalType);
size += sizeof(GParamListObjectGolem);
size += sizeof(GParamListObjectHorseTargetedInfo);
size += sizeof(GParamListObjectWolfLink);
size += sizeof(GParamListObjectEvent);
size += sizeof(GParamListObjectGolemIK);
size += sizeof(GParamListObjectPictureBook);
size += sizeof(GParamListObjectAirWall);
size += sizeof(GParamListObjectMotorcycle);
size += sizeof(GParamList);
return size;
}
u32 GParamList::getResourceFactoryFallbackSize() {
constexpr size_t size = getResourceFactoryFallbackSizeConst();
static_assert(size == static_cast<u32>(size));
return static_cast<u32>(size);
}
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