summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/Actor/resResourceGParamList.cpp
blob: a7e68de3268d202a4fb4bd2e1649b129d73dcbd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include "KingSystem/Resource/Actor/resResourceGParamList.h"
#include <prim/seadRuntimeTypeInfo.h>
#include <utility/aglParameter.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