summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2026-04-26 20:55:47 +0200
committerrobojumper <robojumper@gmail.com>2026-05-10 20:05:46 +0200
commitb80ede8f48197b69ecfe3e3945f45e09a4342792 (patch)
tree8f3bf7db74a0f5dc83514a82ddb1537e750ff409 /src
parentf7b4c029fd5176e817e3de7209727480c445a3d2 (diff)
item_mdl_misc OK
Diffstat (limited to 'src')
-rw-r--r--src/toBeSorted/item_mdl_misc.cpp1289
-rw-r--r--src/toBeSorted/item_mdl_name.cpp528
-rw-r--r--src/toBeSorted/mdl_base.cpp4
3 files changed, 1821 insertions, 0 deletions
diff --git a/src/toBeSorted/item_mdl_misc.cpp b/src/toBeSorted/item_mdl_misc.cpp
new file mode 100644
index 00000000..d45bc536
--- /dev/null
+++ b/src/toBeSorted/item_mdl_misc.cpp
@@ -0,0 +1,1289 @@
+#include "toBeSorted/item_mdl_misc.h"
+
+#include "common.h"
+#include "d/a/d_a_item.h"
+#include "m/m3d/m_fanm.h"
+#include "nw4r/g3d/res/g3d_resanmchr.h"
+#include "nw4r/g3d/res/g3d_resanmclr.h"
+#include "nw4r/g3d/res/g3d_resanmtexpat.h"
+#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
+#include "nw4r/g3d/res/g3d_resfile.h"
+#include "nw4r/g3d/res/g3d_resmdl.h"
+#include "toBeSorted/arc_managers/oarc_manager.h"
+#include "toBeSorted/item_mdl_name.h"
+
+const u8 dItemMdlPut_c::sMdlIdx[] = {
+ MDL_PUT_KEY_SMALL, /* ITEMMDL_SMALL_KEY */
+ MDL_PUT_MAX, /* ITEMMDL_GREEN_RUPEE */
+ MDL_PUT_MAX, /* ITEMMDL_BLUE_RUPEE */
+ MDL_PUT_MAX, /* ITEMMDL_RED_RUPEE */
+ MDL_PUT_MAX, /* ITEMMDL_COMPLETE_TRIFORCE */
+ MDL_PUT_HEART, /* ITEMMDL_HEART */
+ MDL_PUT_ARROW, /* ITEMMDL_SINGLE_ARROW */
+ MDL_PUT_ARROW_BUNDLE, /* ITEMMDL_BUNDLE_ARROWS */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_WHITESWORD */
+ MDL_PUT_MAX, /* ITEMMDL_PRACTICE_SWORD */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_SWORD */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_LONGSWORD */
+ MDL_PUT_MAX, /* ITEMMDL_MASTER_SWORD */
+ MDL_PUT_MAX, /* ITEMMDL_TRUE_MASTER_SWORD */
+ MDL_PUT_MAX, /* ITEMMDL_SAILCLOTH */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_HARP */
+ MDL_PUT_MAX, /* ITEMMDL_SPIRIT_VESSEL */
+ MDL_PUT_MAX, /* ITEMMDL_BOW */
+ MDL_PUT_MAX, /* ITEMMDL_CLAWSHOWS */
+ MDL_PUT_MAX, /* ITEMMDL_BIRD_STATUETTE */
+ MDL_PUT_MAX, /* ITEMMDL_AC_BK */
+ MDL_PUT_MAX, /* ITEMMDL_FS_BK */
+ MDL_PUT_MAX, /* ITEMMDL_SSH_BK */
+ MDL_PUT_MAX, /* ITEMMDL_KEY_PIECE */
+ MDL_PUT_MAX, /* ITEMMDL_SV_BK */
+ MDL_PUT_MAX, /* ITEMMDL_ET_BK */
+ MDL_PUT_MAX, /* ITEMMDL_LMF_BK */
+ MDL_PUT_MAX, /* ITEMMDL_SILVER_RUPEE */
+ MDL_PUT_MAX, /* ITEMMDL_GOLD_RUPEE */
+ MDL_PUT_MAX, /* ITEMMDL_RUPOOR */
+ MDL_PUT_MAX, /* ITEMMDL_5_CRYSTALS */
+ MDL_PUT_MAX, /* ITEMMDL_GLITTERING_SPORES */
+ MDL_PUT_MAX, /* ITEMMDL_5_BOMBS */
+ MDL_PUT_BOMB_SET, /* ITEMMDL_10_BOMBS */
+ MDL_PUT_MAX, /* ITEMMDL_STAMINA_FRUIT */
+ MDL_PUT_MAX, /* ITEMMDL_FARORE_TEAR */
+ MDL_PUT_MAX, /* ITEMMDL_DIN_TEAR */
+ MDL_PUT_MAX, /* ITEMMDL_NAYRU_TEAR */
+ MDL_PUT_MAX, /* ITEMMDL_SACRED_TEAR */
+ MDL_PUT_MAX, /* ITEMMDL_LIGHT_FRUIT */
+ MDL_PUT_MAX, /* ITEMMDL_1_CRYSTAL */
+ MDL_PUT_MAX, /* ITEMMDL_GUST_BELLOWS */
+ MDL_PUT_MAX, /* ITEMMDL_DUNGEON_MAP_FI */
+ MDL_PUT_MAX, /* ITEMMDL_DUNGEON_MAP */
+ MDL_PUT_MAX, /* ITEMMDL_SLINGSHOT */
+ MDL_PUT_MAX, /* ITEMMDL_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_WATER */
+ MDL_PUT_MAX, /* ITEMMDL_MUSHROOM_SPORES */
+ MDL_PUT_MAX, /* ITEMMDL_DIGGING_MITTS */
+ MDL_PUT_SEED, /* ITEMMDL_5_DEKU_SEEDS */
+ MDL_PUT_MAX, /* ITEMMDL_10_DEKU_SEEDS */
+ MDL_PUT_MAX, /* ITEMMDL_GUARDIAN_POTION */
+ MDL_PUT_MAX, /* ITEMMDL_GUARDIAN_POTION_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_WATER_SCALE */
+ MDL_PUT_MAX, /* ITEMMDL_BUG_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_BUG_NET */
+ MDL_PUT_MAX, /* ITEMMDL_FAIRY */
+ MDL_PUT_MAX, /* ITEMMDL_SACRED_WATER */
+ MDL_PUT_MAX, /* ITEMMDL_HOOK_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_QUICK_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_TOUGH_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_HEART_POTION */
+ MDL_PUT_MAX, /* ITEMMDL_HEART_POTION_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_HEART_POTION_ALSO_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_STAMINA_POTION */
+ MDL_PUT_MAX, /* ITEMMDL_STAMINA_POTION_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_AIR_POTION */
+ MDL_PUT_MAX, /* ITEMMDL_AIR_POTION_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_BOTTLED_FAIRY */
+ MDL_PUT_MAX, /* ITEMMDL_IRON_BOW */
+ MDL_PUT_MAX, /* ITEMMDL_SACRED_BOW */
+ MDL_PUT_MAX, /* ITEMMDL_BOMB_BAG */
+ MDL_PUT_HEART_UTUWA, /* ITEMMDL_HEART_CONTAINER */
+ MDL_PUT_HEART_KAKERA, /* ITEMMDL_HEART_PIECE */
+ MDL_PUT_TRI_FORCE, /* ITEMMDL_TRI_COURAGE */
+ MDL_PUT_TRI_FORCE, /* ITEMMDL_TRI_POWER */
+ MDL_PUT_TRI_FORCE, /* ITEMMDL_TRI_WISDOWM */
+ MDL_PUT_MAX, /* ITEMMDL_SEA_CHART */
+ MDL_PUT_MAX, /* ITEMMDL_MOGMA_MITTS */
+ MDL_PUT_MAX, /* ITEMMDL_HEART_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_RUPEE_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_TREASURE_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_POTION_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_CURSED_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_MIGHTY_SCATTERSHOT */
+ MDL_PUT_MAX, /* ITEMMDL_85 */
+ MDL_PUT_MAX, /* ITEMMDL_MEDIUM_WALLET */
+ MDL_PUT_MAX, /* ITEMMDL_BIG_WALLET */
+ MDL_PUT_MAX, /* ITEMMDL_GIANT_WALLET */
+ MDL_PUT_MAX, /* ITEMMDL_TYCOON_WALLET */
+ MDL_PUT_MAX, /* ITEMMDL_ADVENTURE_POUCH */
+ MDL_PUT_MAX, /* ITEMMDL_POUCH_EXPANSION */
+ MDL_PUT_MAX, /* ITEMMDL_LIFE_MEDAL */
+ MDL_PUT_MAX, /* ITEMMDL_WOODEN_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_BANDED_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_BRACED_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_IRON_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_REINFORCED_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_FORTIFIED_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_SACRED_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_DIVINE_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_HYLIAN_SHIELD */
+ MDL_PUT_MAX, /* ITEMMDL_REVITALIZING_POTION */
+ MDL_PUT_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_SMALL_SEED_SATCHEL */
+ MDL_PUT_MAX, /* ITEMMDL_MEDIUM_SEED_SATCHEL */
+ MDL_PUT_MAX, /* ITEMMDL_LARGE_SEED_SATCHEL */
+ MDL_PUT_MAX, /* ITEMMDL_SMALL_QUIVER */
+ MDL_PUT_MAX, /* ITEMMDL_MEDIUM_QUIVER */
+ MDL_PUT_MAX, /* ITEMMDL_LARGE_QUIVER */
+ MDL_PUT_MAX, /* ITEMMDL_SMALL_BOMB_BAG */
+ MDL_PUT_MAX, /* ITEMMDL_MEDIUM_BOMB_BAG */
+ MDL_PUT_MAX, /* ITEMMDL_LARGE_BOMB_BAG */
+ MDL_PUT_MAX, /* ITEMMDL_WHIP */
+ MDL_PUT_MAX, /* ITEMMDL_FIRESHIELD_EARRINGS */
+ MDL_PUT_MAX, /* ITEMMDL_BIG_BUG_NET */
+ MDL_PUT_MAX, /* ITEMMDL_FARON_GRASSHOPPER */
+ MDL_PUT_MAX, /* ITEMMDL_WOODLAND_RHINO_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_DEKU_HORNET */
+ MDL_PUT_MAX, /* ITEMMDL_SKYLOFT_MANTIS */
+ MDL_PUT_MAX, /* ITEMMDL_VOLCANIC_LADYBUG */
+ MDL_PUT_MAX, /* ITEMMDL_BLESSED_BUTTERFLY */
+ MDL_PUT_MAX, /* ITEMMDL_LANAYRU_ANT */
+ MDL_PUT_MAX, /* ITEMMDL_SAND_CICADA */
+ MDL_PUT_MAX, /* ITEMMDL_GERUDO_DRAGONFLY */
+ MDL_PUT_MAX, /* ITEMMDL_ELDIN_ROLLER */
+ MDL_PUT_MAX, /* ITEMMDL_SKY_STAG_BEETLE */
+ MDL_PUT_MAX, /* ITEMMDL_STARRY_FIREFLY */
+ MDL_PUT_MAX, /* ITEMMDL_BOTTLE */
+ MDL_PUT_MAX, /* ITEMMDL_CAWLIN_LETTER */
+ MDL_PUT_MAX, /* ITEMMDL_BEEDLE_INSECT_CAGE */
+ MDL_PUT_GARAGARA, /* ITEMMDL_RATTLE */
+ MDL_PUT_MAX, /* ITEMMDL_HORNET_LARVAE */
+ MDL_PUT_MAX, /* ITEMMDL_BIRD_FEATHER */
+ MDL_PUT_MAX, /* ITEMMDL_TUMBLE_WEED */
+ MDL_PUT_MAX, /* ITEMMDL_LIZARD_TAIL */
+ MDL_PUT_MAX, /* ITEMMDL_ELDIN_ORE */
+ MDL_PUT_MAX, /* ITEMMDL_ANCIENT_FLOWER */
+ MDL_PUT_MAX, /* ITEMMDL_AMBER_RELIC */
+ MDL_PUT_MAX, /* ITEMMDL_DUSK_RELIC */
+ MDL_PUT_MAX, /* ITEMMDL_JELLY_BLOB */
+ MDL_PUT_MAX, /* ITEMMDL_MONSTER_CLAW */
+ MDL_PUT_MAX, /* ITEMMDL_MONSTER_HORN */
+ MDL_PUT_MAX, /* ITEMMDL_ORNAMENTAL_SKULL */
+ MDL_PUT_MAX, /* ITEMMDL_EVIL_CRYSTAL */
+ MDL_PUT_MAX, /* ITEMMDL_BLUE_BIRD_FEATHER */
+ MDL_PUT_MAX, /* ITEMMDL_GOLDEN_SKULL */
+ MDL_PUT_MAX, /* ITEMMDL_GODDESS_PLUME */
+ MDL_PUT_MAX, /* ITEMMDL_EMERALD_TABLET */
+ MDL_PUT_MAX, /* ITEMMDL_RUBY_TABLET */
+ MDL_PUT_MAX, /* ITEMMDL_AMBER_TABLET */
+ MDL_PUT_MAX, /* ITEMMDL_STONE_OF_TRIALS */
+ MDL_PUT_MAX, /* ITEMMDL_BALLAD_OF_THE_GODDESS */
+ MDL_PUT_MAX, /* ITEMMDL_FARORES_COURAGE */
+ MDL_PUT_MAX, /* ITEMMDL_NAYRUS_WISDOM */
+ MDL_PUT_MAX, /* ITEMMDL_DINS_POWER */
+ MDL_PUT_MAX, /* ITEMMDL_FARON_SOTH */
+ MDL_PUT_MAX, /* ITEMMDL_ELDIN_SOTH */
+ MDL_PUT_MAX, /* ITEMMDL_LANAYRU_SOTH */
+ MDL_PUT_MAX, /* ITEMMDL_ITEM_SOTH */
+ MDL_PUT_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS_PLUS */
+ MDL_PUT_MAX, /* ITEMMDL_HOT_SOUP */
+ MDL_PUT_MAX, /* ITEMMDL_COLD_SOUP */
+ MDL_PUT_MAX, /* ITEMMDL_LIFE_TREE_SEED */
+ MDL_PUT_MAX, /* ITEMMDL_LIFE_TREE_FRUIT */
+ MDL_PUT_MAX, /* ITEMMDL_EXTRA_WALLET */
+};
+
+const dItemMdlPut_c::MdlConfig dItemMdlPut_c::sMdlConfig[] = {
+ { "PutArrow", "PutArrow", "GetArrow", "GetArrow"},
+ { "PutArrow", "PutArrowBundle", "GetArrow", "GetArrowBundle"},
+ { "PutHeart", "PutHeart", "GetHeart", "GetHeart"},
+ { "PutKeySmall", "PutKeySmallNormal", "GetKeySmall", "GetKeySmallNormal"},
+ { "PutBombSet", "PutBombSet", "GetBombSet", "GetBombSet"},
+ { "PutSeed", "PutSeed", "GetSeed", "GetSeed"},
+ { "PutHeartUtuwa", "PutHeartUtuwa", "GetHeartUtuwa", "GetHeartUtuwa"},
+ { "PutHeartKakera", "PutHeartKakera", "GetHeartKakera", "GetHeartKakera"},
+ {"PutTriForceSingle", "PutTriForceSingle", "GetTriForceSingle", "GetTriForceSingle"},
+ { "PutGaragara", "PutGaragara", "GetGaragara", "GetGaragara"},
+};
+
+bool dItemMdlPut_c::isMdlForItemId(u16 itemId) {
+ if (hasItemMdl(itemId) == false) {
+ return false;
+ } else {
+ return sMdlIdx[getItemMdlIdx(itemId)] <= MDL_PUT_MAX - 1;
+ }
+}
+
+bool dItemMdlPut_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ s32 mdlIdx = getItemMdlIdx(itemId);
+ u8 mdlConfigIdx = sMdlIdx[mdlIdx];
+
+ const MdlConfig *fileAndMdl = &sMdlConfig[mdlConfigIdx];
+
+ void *resData0 = OarcManager::GetInstance()->getMdlFromArc2(fileAndMdl->putResFile);
+ if (resData0 == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res0(resData0);
+ if (!res0.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl0(res0.GetResMdl(fileAndMdl->putResMdl));
+ if (!mdl0.IsValid()) {
+ return false;
+ }
+
+ if (!mGetMdl.create(mdl0, allocator, 0x120)) {
+ return false;
+ }
+
+ bool isPickupArrow = item->isSingleArrow() && item->getParams2Lower_shift1_0x7() == 0;
+ void *resData1 = OarcManager::GetInstance()->getMdlFromArc2(fileAndMdl->getResFile);
+ if (resData1 == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res1(resData1);
+ if (!res1.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl1(res1.GetResMdl(isPickupArrow ? "GetArrowEnemy" : fileAndMdl->getResMdl));
+ if (!mdl1.IsValid()) {
+ return false;
+ }
+
+ if (!mPutMdl.create(mdl1, allocator, 0x120)) {
+ return false;
+ }
+
+ mpItem = item;
+ return true;
+}
+
+void dItemMdlPut_c::vt_0x10(u8 arg) {
+ if (arg == ITEM_MDL_UNK0x14_3) {
+ field_0x14 = ITEM_MDL_UNK0x14_1;
+ } else {
+ field_0x14 = arg;
+ }
+}
+
+void dItemMdlPut_c::setScale(const mVec3_c &scale) {
+ mGetMdl.setScale(scale);
+ mPutMdl.setScale(scale);
+}
+
+void dItemMdlPut_c::setLocalMtx(const mMtx_c &mtx) {
+ mGetMdl.setLocalMtx(mtx);
+ mPutMdl.setLocalMtx(mtx);
+}
+
+void dItemMdlPut_c::draw() {
+ switch (field_0x14) {
+ case ITEM_MDL_UNK0x14_1: mpItem->fn_8002ECD0(&mGetMdl, 7); break;
+ case ITEM_MDL_UNK0x14_2: mpItem->fn_8002ECD0(&mPutMdl, 6); break;
+ }
+}
+
+void dItemMdlPut_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlPut_c::setPriorityDraw() {
+ mGetMdl.setPriorityDraw(0x82, 0x7F);
+ mPutMdl.setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlPut_c::unsetPriorityDraw() {
+ mGetMdl.setPriorityDraw(0x7F, 0x7F);
+ mPutMdl.setPriorityDraw(0x7F, 0x7F);
+}
+
+const u8 dItemMdlShield_c::sMdlIdx[] = {
+ MDL_SHIELD_MAX, /* ITEMMDL_SMALL_KEY */
+ MDL_SHIELD_MAX, /* ITEMMDL_GREEN_RUPEE */
+ MDL_SHIELD_MAX, /* ITEMMDL_BLUE_RUPEE */
+ MDL_SHIELD_MAX, /* ITEMMDL_RED_RUPEE */
+ MDL_SHIELD_MAX, /* ITEMMDL_COMPLETE_TRIFORCE */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART */
+ MDL_SHIELD_MAX, /* ITEMMDL_SINGLE_ARROW */
+ MDL_SHIELD_MAX, /* ITEMMDL_BUNDLE_ARROWS */
+ MDL_SHIELD_MAX, /* ITEMMDL_GODDESS_WHITESWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_PRACTICE_SWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_GODDESS_SWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_GODDESS_LONGSWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_MASTER_SWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_TRUE_MASTER_SWORD */
+ MDL_SHIELD_MAX, /* ITEMMDL_SAILCLOTH */
+ MDL_SHIELD_MAX, /* ITEMMDL_GODDESS_HARP */
+ MDL_SHIELD_MAX, /* ITEMMDL_SPIRIT_VESSEL */
+ MDL_SHIELD_MAX, /* ITEMMDL_BOW */
+ MDL_SHIELD_MAX, /* ITEMMDL_CLAWSHOWS */
+ MDL_SHIELD_MAX, /* ITEMMDL_BIRD_STATUETTE */
+ MDL_SHIELD_MAX, /* ITEMMDL_AC_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_FS_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_SSH_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_KEY_PIECE */
+ MDL_SHIELD_MAX, /* ITEMMDL_SV_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_ET_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_LMF_BK */
+ MDL_SHIELD_MAX, /* ITEMMDL_SILVER_RUPEE */
+ MDL_SHIELD_MAX, /* ITEMMDL_GOLD_RUPEE */
+ MDL_SHIELD_MAX, /* ITEMMDL_RUPOOR */
+ MDL_SHIELD_MAX, /* ITEMMDL_5_CRYSTALS */
+ MDL_SHIELD_MAX, /* ITEMMDL_GLITTERING_SPORES */
+ MDL_SHIELD_MAX, /* ITEMMDL_5_BOMBS */
+ MDL_SHIELD_MAX, /* ITEMMDL_10_BOMBS */
+ MDL_SHIELD_MAX, /* ITEMMDL_STAMINA_FRUIT */
+ MDL_SHIELD_MAX, /* ITEMMDL_FARORE_TEAR */
+ MDL_SHIELD_MAX, /* ITEMMDL_DIN_TEAR */
+ MDL_SHIELD_MAX, /* ITEMMDL_NAYRU_TEAR */
+ MDL_SHIELD_MAX, /* ITEMMDL_SACRED_TEAR */
+ MDL_SHIELD_MAX, /* ITEMMDL_LIGHT_FRUIT */
+ MDL_SHIELD_MAX, /* ITEMMDL_1_CRYSTAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_GUST_BELLOWS */
+ MDL_SHIELD_MAX, /* ITEMMDL_DUNGEON_MAP_FI */
+ MDL_SHIELD_MAX, /* ITEMMDL_DUNGEON_MAP */
+ MDL_SHIELD_MAX, /* ITEMMDL_SLINGSHOT */
+ MDL_SHIELD_MAX, /* ITEMMDL_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_WATER */
+ MDL_SHIELD_MAX, /* ITEMMDL_MUSHROOM_SPORES */
+ MDL_SHIELD_MAX, /* ITEMMDL_DIGGING_MITTS */
+ MDL_SHIELD_MAX, /* ITEMMDL_5_DEKU_SEEDS */
+ MDL_SHIELD_MAX, /* ITEMMDL_10_DEKU_SEEDS */
+ MDL_SHIELD_MAX, /* ITEMMDL_GUARDIAN_POTION */
+ MDL_SHIELD_MAX, /* ITEMMDL_GUARDIAN_POTION_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_WATER_SCALE */
+ MDL_SHIELD_MAX, /* ITEMMDL_BUG_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_BUG_NET */
+ MDL_SHIELD_MAX, /* ITEMMDL_FAIRY */
+ MDL_SHIELD_MAX, /* ITEMMDL_SACRED_WATER */
+ MDL_SHIELD_MAX, /* ITEMMDL_HOOK_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_QUICK_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_TOUGH_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_POTION */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_POTION_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_POTION_ALSO_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_STAMINA_POTION */
+ MDL_SHIELD_MAX, /* ITEMMDL_STAMINA_POTION_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_AIR_POTION */
+ MDL_SHIELD_MAX, /* ITEMMDL_AIR_POTION_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_BOTTLED_FAIRY */
+ MDL_SHIELD_MAX, /* ITEMMDL_IRON_BOW */
+ MDL_SHIELD_MAX, /* ITEMMDL_SACRED_BOW */
+ MDL_SHIELD_MAX, /* ITEMMDL_BOMB_BAG */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_CONTAINER */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_PIECE */
+ MDL_SHIELD_MAX, /* ITEMMDL_TRI_COURAGE */
+ MDL_SHIELD_MAX, /* ITEMMDL_TRI_POWER */
+ MDL_SHIELD_MAX, /* ITEMMDL_TRI_WISDOWM */
+ MDL_SHIELD_MAX, /* ITEMMDL_SEA_CHART */
+ MDL_SHIELD_MAX, /* ITEMMDL_MOGMA_MITTS */
+ MDL_SHIELD_MAX, /* ITEMMDL_HEART_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_RUPEE_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_TREASURE_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_POTION_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_CURSED_MEDAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_MIGHTY_SCATTERSHOT */
+ MDL_SHIELD_MAX, /* ITEMMDL_85 */
+ MDL_SHIELD_MAX, /* ITEMMDL_MEDIUM_WALLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_BIG_WALLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_GIANT_WALLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_TYCOON_WALLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_ADVENTURE_POUCH */
+ MDL_SHIELD_MAX, /* ITEMMDL_POUCH_EXPANSION */
+ MDL_SHIELD_MAX, /* ITEMMDL_LIFE_MEDAL */
+ MDL_SHIELD_WOOD_0, /* ITEMMDL_WOODEN_SHIELD */
+ MDL_SHIELD_WOOD_1, /* ITEMMDL_BANDED_SHIELD */
+ MDL_SHIELD_WOOD_2, /* ITEMMDL_BRACED_SHIELD */
+ MDL_SHIELD_IRON_0, /* ITEMMDL_IRON_SHIELD */
+ MDL_SHIELD_IRON_1, /* ITEMMDL_REINFORCED_SHIELD */
+ MDL_SHIELD_IRON_2, /* ITEMMDL_FORTIFIED_SHIELD */
+ MDL_SHIELD_HOLY_0, /* ITEMMDL_SACRED_SHIELD */
+ MDL_SHIELD_HOLY_1, /* ITEMMDL_DIVINE_SHIELD */
+ MDL_SHIELD_HOLY_2, /* ITEMMDL_GODDESS_SHIELD */
+ MDL_SHIELD_MAX, /* ITEMMDL_HYLIAN_SHIELD */
+ MDL_SHIELD_MAX, /* ITEMMDL_REVITALIZING_POTION */
+ MDL_SHIELD_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_SMALL_SEED_SATCHEL */
+ MDL_SHIELD_MAX, /* ITEMMDL_MEDIUM_SEED_SATCHEL */
+ MDL_SHIELD_MAX, /* ITEMMDL_LARGE_SEED_SATCHEL */
+ MDL_SHIELD_MAX, /* ITEMMDL_SMALL_QUIVER */
+ MDL_SHIELD_MAX, /* ITEMMDL_MEDIUM_QUIVER */
+ MDL_SHIELD_MAX, /* ITEMMDL_LARGE_QUIVER */
+ MDL_SHIELD_MAX, /* ITEMMDL_SMALL_BOMB_BAG */
+ MDL_SHIELD_MAX, /* ITEMMDL_MEDIUM_BOMB_BAG */
+ MDL_SHIELD_MAX, /* ITEMMDL_LARGE_BOMB_BAG */
+ MDL_SHIELD_MAX, /* ITEMMDL_WHIP */
+ MDL_SHIELD_MAX, /* ITEMMDL_FIRESHIELD_EARRINGS */
+ MDL_SHIELD_MAX, /* ITEMMDL_BIG_BUG_NET */
+ MDL_SHIELD_MAX, /* ITEMMDL_FARON_GRASSHOPPER */
+ MDL_SHIELD_MAX, /* ITEMMDL_WOODLAND_RHINO_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_DEKU_HORNET */
+ MDL_SHIELD_MAX, /* ITEMMDL_SKYLOFT_MANTIS */
+ MDL_SHIELD_MAX, /* ITEMMDL_VOLCANIC_LADYBUG */
+ MDL_SHIELD_MAX, /* ITEMMDL_BLESSED_BUTTERFLY */
+ MDL_SHIELD_MAX, /* ITEMMDL_LANAYRU_ANT */
+ MDL_SHIELD_MAX, /* ITEMMDL_SAND_CICADA */
+ MDL_SHIELD_MAX, /* ITEMMDL_GERUDO_DRAGONFLY */
+ MDL_SHIELD_MAX, /* ITEMMDL_ELDIN_ROLLER */
+ MDL_SHIELD_MAX, /* ITEMMDL_SKY_STAG_BEETLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_STARRY_FIREFLY */
+ MDL_SHIELD_MAX, /* ITEMMDL_BOTTLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_CAWLIN_LETTER */
+ MDL_SHIELD_MAX, /* ITEMMDL_BEEDLE_INSECT_CAGE */
+ MDL_SHIELD_MAX, /* ITEMMDL_RATTLE */
+ MDL_SHIELD_MAX, /* ITEMMDL_HORNET_LARVAE */
+ MDL_SHIELD_MAX, /* ITEMMDL_BIRD_FEATHER */
+ MDL_SHIELD_MAX, /* ITEMMDL_TUMBLE_WEED */
+ MDL_SHIELD_MAX, /* ITEMMDL_LIZARD_TAIL */
+ MDL_SHIELD_MAX, /* ITEMMDL_ELDIN_ORE */
+ MDL_SHIELD_MAX, /* ITEMMDL_ANCIENT_FLOWER */
+ MDL_SHIELD_MAX, /* ITEMMDL_AMBER_RELIC */
+ MDL_SHIELD_MAX, /* ITEMMDL_DUSK_RELIC */
+ MDL_SHIELD_MAX, /* ITEMMDL_JELLY_BLOB */
+ MDL_SHIELD_MAX, /* ITEMMDL_MONSTER_CLAW */
+ MDL_SHIELD_MAX, /* ITEMMDL_MONSTER_HORN */
+ MDL_SHIELD_MAX, /* ITEMMDL_ORNAMENTAL_SKULL */
+ MDL_SHIELD_MAX, /* ITEMMDL_EVIL_CRYSTAL */
+ MDL_SHIELD_MAX, /* ITEMMDL_BLUE_BIRD_FEATHER */
+ MDL_SHIELD_MAX, /* ITEMMDL_GOLDEN_SKULL */
+ MDL_SHIELD_MAX, /* ITEMMDL_GODDESS_PLUME */
+ MDL_SHIELD_MAX, /* ITEMMDL_EMERALD_TABLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_RUBY_TABLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_AMBER_TABLET */
+ MDL_SHIELD_MAX, /* ITEMMDL_STONE_OF_TRIALS */
+ MDL_SHIELD_MAX, /* ITEMMDL_BALLAD_OF_THE_GODDESS */
+ MDL_SHIELD_MAX, /* ITEMMDL_FARORES_COURAGE */
+ MDL_SHIELD_MAX, /* ITEMMDL_NAYRUS_WISDOM */
+ MDL_SHIELD_MAX, /* ITEMMDL_DINS_POWER */
+ MDL_SHIELD_MAX, /* ITEMMDL_FARON_SOTH */
+ MDL_SHIELD_MAX, /* ITEMMDL_ELDIN_SOTH */
+ MDL_SHIELD_MAX, /* ITEMMDL_LANAYRU_SOTH */
+ MDL_SHIELD_MAX, /* ITEMMDL_ITEM_SOTH */
+ MDL_SHIELD_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS_PLUS */
+ MDL_SHIELD_MAX, /* ITEMMDL_HOT_SOUP */
+ MDL_SHIELD_MAX, /* ITEMMDL_COLD_SOUP */
+ MDL_SHIELD_MAX, /* ITEMMDL_LIFE_TREE_SEED */
+ MDL_SHIELD_MAX, /* ITEMMDL_LIFE_TREE_FRUIT */
+ MDL_SHIELD_MAX, /* ITEMMDL_EXTRA_WALLET */
+};
+
+const dItemMdlShield_c::MdlConfig dItemMdlShield_c::sMdlConfig[] = {
+ {0.0f, "GetShieldWood", "GetShieldWood", "EquipShieldWood"},
+ {1.0f, "GetShieldWood", "GetShieldWood", "EquipShieldWood"},
+ {2.0f, "GetShieldWood", "GetShieldWood", "EquipShieldWood"},
+ {0.0f, "GetShieldIron", "GetShieldIron", "EquipShieldIron"},
+ {1.0f, "GetShieldIron", "GetShieldIron", "EquipShieldIron"},
+ {2.0f, "GetShieldIron", "GetShieldIron", "EquipShieldIron"},
+ {0.0f, "GetShieldHoly", "GetShieldHoly", "EquipShieldHoly"},
+ {1.0f, "GetShieldHoly", "GetShieldHoly", "EquipShieldHoly"},
+ {2.0f, "GetShieldHoly", "GetShieldHoly", "EquipShieldHoly"},
+};
+
+bool dItemMdlShield_c::isMdlForItemId(u16 itemId) {
+ if (hasItemMdl(itemId) == false) {
+ return false;
+ } else {
+ return sMdlIdx[getItemMdlIdx(itemId)] <= MDL_SHIELD_MAX - 1;
+ }
+}
+
+bool dItemMdlShield_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ s32 mdlIdx = getItemMdlIdx(itemId);
+ u8 mdlConfigIdx = sMdlIdx[mdlIdx];
+
+ const MdlConfig *fileAndMdl = &sMdlConfig[mdlConfigIdx];
+
+ void *resData0 = OarcManager::GetInstance()->getMdlFromArc2(fileAndMdl->resFile);
+ if (resData0 == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res0(resData0);
+ if (!res0.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl0(res0.GetResMdl(fileAndMdl->mdlName));
+ if (!mdl0.IsValid()) {
+ return false;
+ }
+
+ if (!mMdl.create(mdl0, allocator, 0x123)) {
+ return false;
+ }
+
+ nw4r::g3d::ResAnmTexPat pat0(res0.GetResAnmTexPat(fileAndMdl->anmName));
+ if (!pat0.IsValid()) {
+ return false;
+ }
+
+ if (!mAnmTexPat.create(mdl0, pat0, allocator, NULL, 1)) {
+ return false;
+ }
+
+ mMdl.setAnm(mAnmTexPat);
+ mAnmTexPat.setFrame(fileAndMdl->frame, 0);
+
+ mpItem = item;
+ return true;
+}
+
+void dItemMdlShield_c::vt_0x10(u8 arg) {
+ field_0x14 = arg;
+}
+
+void dItemMdlShield_c::setScale(const mVec3_c &scale) {
+ mMdl.setScale(scale);
+}
+
+void dItemMdlShield_c::setLocalMtx(const mMtx_c &mtx) {
+ mMdl.setLocalMtx(mtx);
+}
+
+void dItemMdlShield_c::draw() {
+ if (field_0x14 == ITEM_MDL_UNK0x14_2) {
+ mpItem->fn_8002ECD0(&mMdl, 6);
+ } else {
+ mpItem->fn_8002ECD0(&mMdl, 7);
+ }
+}
+
+void dItemMdlShield_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlShield_c::setPriorityDraw() {
+ mMdl.setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlShield_c::unsetPriorityDraw() {
+ mMdl.setPriorityDraw(0x7F, 0x7F);
+}
+
+const u8 dItemMdlBottle_c::sMdlIdx[] = {
+ MDL_BOTTLE_MAX, /* ITEMMDL_SMALL_KEY */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GREEN_RUPEE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BLUE_RUPEE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_RED_RUPEE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_COMPLETE_TRIFORCE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HEART */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SINGLE_ARROW */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BUNDLE_ARROWS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_WHITESWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_PRACTICE_SWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_SWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_LONGSWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MASTER_SWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TRUE_MASTER_SWORD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SAILCLOTH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_HARP */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SPIRIT_VESSEL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BOW */
+ MDL_BOTTLE_MAX, /* ITEMMDL_CLAWSHOWS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BIRD_STATUETTE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_AC_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FS_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SSH_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_KEY_PIECE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SV_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ET_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LMF_BK */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SILVER_RUPEE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GOLD_RUPEE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_RUPOOR */
+ MDL_BOTTLE_MAX, /* ITEMMDL_5_CRYSTALS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GLITTERING_SPORES */
+ MDL_BOTTLE_MAX, /* ITEMMDL_5_BOMBS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_10_BOMBS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_STAMINA_FRUIT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FARORE_TEAR */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DIN_TEAR */
+ MDL_BOTTLE_MAX, /* ITEMMDL_NAYRU_TEAR */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SACRED_TEAR */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LIGHT_FRUIT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_1_CRYSTAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GUST_BELLOWS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DUNGEON_MAP_FI */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DUNGEON_MAP */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SLINGSHOT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BEETLE */
+ MDL_BOTTLE_WATER, /* ITEMMDL_WATER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MUSHROOM_SPORES */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DIGGING_MITTS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_5_DEKU_SEEDS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_10_DEKU_SEEDS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GUARDIAN_POTION */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GUARDIAN_POTION_PLUS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_WATER_SCALE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BUG_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BUG_NET */
+ MDL_BOTTLE_FAIRY, /* ITEMMDL_FAIRY */
+ MDL_BOTTLE_HOLY, /* ITEMMDL_SACRED_WATER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HOOK_BEETLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_QUICK_BEETLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TOUGH_BEETLE */
+ MDL_BOTTLE_KUSURI, /* ITEMMDL_HEART_POTION */
+ MDL_BOTTLE_KUSURI, /* ITEMMDL_HEART_POTION_PLUS */
+ MDL_BOTTLE_KUSURI_S, /* ITEMMDL_HEART_POTION_ALSO_PLUS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_STAMINA_POTION */
+ MDL_BOTTLE_MAX, /* ITEMMDL_STAMINA_POTION_PLUS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_AIR_POTION */
+ MDL_BOTTLE_MAX, /* ITEMMDL_AIR_POTION_PLUS */
+ MDL_BOTTLE_B_FAIRY, /* ITEMMDL_BOTTLED_FAIRY */
+ MDL_BOTTLE_MAX, /* ITEMMDL_IRON_BOW */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SACRED_BOW */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BOMB_BAG */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HEART_CONTAINER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HEART_PIECE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TRI_COURAGE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TRI_POWER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TRI_WISDOWM */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SEA_CHART */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MOGMA_MITTS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HEART_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_RUPEE_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TREASURE_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_POTION_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_CURSED_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MIGHTY_SCATTERSHOT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_85 */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MEDIUM_WALLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BIG_WALLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GIANT_WALLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TYCOON_WALLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ADVENTURE_POUCH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_POUCH_EXPANSION */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LIFE_MEDAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_WOODEN_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BANDED_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BRACED_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_IRON_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_REINFORCED_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FORTIFIED_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SACRED_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DIVINE_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HYLIAN_SHIELD */
+ MDL_BOTTLE_MAX, /* ITEMMDL_REVITALIZING_POTION */
+ MDL_BOTTLE_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SMALL_SEED_SATCHEL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MEDIUM_SEED_SATCHEL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LARGE_SEED_SATCHEL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SMALL_QUIVER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MEDIUM_QUIVER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LARGE_QUIVER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SMALL_BOMB_BAG */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MEDIUM_BOMB_BAG */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LARGE_BOMB_BAG */
+ MDL_BOTTLE_MAX, /* ITEMMDL_WHIP */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FIRESHIELD_EARRINGS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BIG_BUG_NET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FARON_GRASSHOPPER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_WOODLAND_RHINO_BEETLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DEKU_HORNET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SKYLOFT_MANTIS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_VOLCANIC_LADYBUG */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BLESSED_BUTTERFLY */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LANAYRU_ANT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SAND_CICADA */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GERUDO_DRAGONFLY */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ELDIN_ROLLER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_SKY_STAG_BEETLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_STARRY_FIREFLY */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BOTTLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_CAWLIN_LETTER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BEEDLE_INSECT_CAGE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_RATTLE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_HORNET_LARVAE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BIRD_FEATHER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_TUMBLE_WEED */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LIZARD_TAIL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ELDIN_ORE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ANCIENT_FLOWER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_AMBER_RELIC */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DUSK_RELIC */
+ MDL_BOTTLE_SOZAI_I, /* ITEMMDL_JELLY_BLOB */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MONSTER_CLAW */
+ MDL_BOTTLE_MAX, /* ITEMMDL_MONSTER_HORN */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ORNAMENTAL_SKULL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_EVIL_CRYSTAL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BLUE_BIRD_FEATHER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GOLDEN_SKULL */
+ MDL_BOTTLE_MAX, /* ITEMMDL_GODDESS_PLUME */
+ MDL_BOTTLE_MAX, /* ITEMMDL_EMERALD_TABLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_RUBY_TABLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_AMBER_TABLET */
+ MDL_BOTTLE_MAX, /* ITEMMDL_STONE_OF_TRIALS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_BALLAD_OF_THE_GODDESS */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FARORES_COURAGE */
+ MDL_BOTTLE_MAX, /* ITEMMDL_NAYRUS_WISDOM */
+ MDL_BOTTLE_MAX, /* ITEMMDL_DINS_POWER */
+ MDL_BOTTLE_MAX, /* ITEMMDL_FARON_SOTH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ELDIN_SOTH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LANAYRU_SOTH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_ITEM_SOTH */
+ MDL_BOTTLE_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS_PLUS */
+ MDL_BOTTLE_PUMPKIN, /* ITEMMDL_HOT_SOUP */
+ MDL_BOTTLE_PUMPKIN, /* ITEMMDL_COLD_SOUP */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LIFE_TREE_SEED */
+ MDL_BOTTLE_MAX, /* ITEMMDL_LIFE_TREE_FRUIT */
+ MDL_BOTTLE_MAX, /* ITEMMDL_EXTRA_WALLET */
+};
+
+const dItemMdlBottle_c::MdlConfig dItemMdlBottle_c::sMdlConfig[] = {
+ { "GetBottleWater", "GetBottleWater", "GetBottleWater"},
+ { "GetFairy", "GetFairy", "GetFairy"},
+ { "GetBottleHoly", "GetBottleHoly", "GetBottleHoly"},
+ { "GetBottleKusuri", "GetBottleKusuri", "GetBottleKusuri"},
+ {"GetBottleKusuriS", "GetBottleKusuriS", "GetBottleKusuriS"},
+ { "GetBottleFairy", "GetBottleFairy", "GetBottleFairy"},
+ { "GetSozaiI", "GetSozaiI", "GetSozaiI"},
+ {"GetBottlePumpkin", "GetBottlePumpkin", "GetBottlePumpkin"},
+};
+
+bool dItemMdlBottle_c::isMdlForItemId(u16 itemId) {
+ if (hasItemMdl(itemId) == false) {
+ return false;
+ } else {
+ return sMdlIdx[getItemMdlIdx(itemId)] <= MDL_BOTTLE_MAX - 1;
+ }
+}
+
+bool dItemMdlBottle_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ s32 mdlIdx = getItemMdlIdx(itemId);
+ u8 mdlConfigIdx = sMdlIdx[mdlIdx];
+
+ const MdlConfig *fileAndMdl = &sMdlConfig[mdlConfigIdx];
+
+ void *resData0 = OarcManager::GetInstance()->getMdlFromArc2(fileAndMdl->resFile);
+ if (resData0 == nullptr) {
+ return false;
+ }
+
+ if (!mMdl.create(resData0, fileAndMdl->mdlName, fileAndMdl->anmName, allocator, 0x120)) {
+ return false;
+ }
+
+ if (!mMdl.setAnm(fileAndMdl->anmName, m3d::PLAY_MODE_4)) {
+ return false;
+ }
+
+ mpItem = item;
+ if (dAcItem_c::isJellyBlob((ITEM_ID)itemId)) {
+ mFlags |= 0x1;
+ }
+
+ return true;
+}
+
+void dItemMdlBottle_c::vt_0x10(u8 arg) {
+ field_0x14 = arg;
+}
+
+void dItemMdlBottle_c::setScale(const mVec3_c &scale) {
+ mMdl.getModel().setScale(scale);
+}
+
+void dItemMdlBottle_c::setLocalMtx(const mMtx_c &mtx) {
+ mMdl.getModel().setLocalMtx(mtx);
+}
+
+void dItemMdlBottle_c::draw() {
+ if (mpItem == nullptr) {
+ return;
+ }
+
+ if (field_0x14 != ITEM_MDL_UNK0x14_1 || (mFlags & 0x1) == 0) {
+ mMdl.play();
+ }
+
+ if (field_0x14 == ITEM_MDL_UNK0x14_2) {
+ mpItem->fn_8002ECD0(&mMdl.getModel(), 6);
+ } else {
+ mpItem->fn_8002ECD0(&mMdl.getModel(), 7);
+ }
+}
+
+void dItemMdlBottle_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlBottle_c::setPriorityDraw() {
+ mMdl.getModel().setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlBottle_c::unsetPriorityDraw() {
+ mMdl.getModel().setPriorityDraw(0x7F, 0x7F);
+}
+
+const dItemMdlTear_c::MdlConfig dItemMdlTear_c::sMdlConfig[] = {
+ {0.0f},
+ {1.0f},
+ {2.0f},
+ {3.0f},
+};
+
+bool dItemMdlTear_c::isMdlForItemId(u16 itemId) {
+ return dAcItem_c::isTear((ITEM_ID)itemId);
+}
+
+bool dItemMdlTear_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ // TODO - why is TRY_CREATE used so inconsistently here?
+
+ dAcItem_c::Tear_e tear = dAcItem_c::getTearSubtype((ITEM_ID)itemId);
+ if (tear == dAcItem_c::TEAR_MAX) {
+ return false;
+ }
+
+ const MdlConfig *fileAndMdl = &sMdlConfig[tear];
+ f32 frame = fileAndMdl->frame;
+
+ {
+ void *resData1 = OarcManager::GetInstance()->getMdlFromArc2("PutSizuku");
+ if (resData1 == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res1(resData1);
+ if (!res1.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl1 = res1.GetResMdl("PutShizuku");
+ if (!mdl1.IsValid()) {
+ return false;
+ }
+ if (!mMdl1.create(mdl1, allocator, 0x327)) {
+ return false;
+ }
+
+ nw4r::g3d::ResAnmTexSrt anmTexSrt1 = res1.GetResAnmTexSrt("Shizuku");
+ if (!anmTexSrt1.IsValid()) {
+ return false;
+ }
+ TRY_CREATE(mAnmTexSrt1.create(mdl1, anmTexSrt1, allocator, nullptr, 1));
+ TRY_CREATE(mMdl1.setAnm(mAnmTexSrt1));
+
+ nw4r::g3d::ResAnmTexPat anmTexPat1 = res1.GetResAnmTexPat("Shizuku");
+ if (!anmTexPat1.IsValid()) {
+ return false;
+ }
+ if (!mAnmTexPat1.create(mdl1, anmTexPat1, allocator, nullptr, 1)) {
+ return false;
+ }
+ TRY_CREATE(mMdl1.setAnm(mAnmTexPat1));
+ mAnmTexPat1.setFrame(frame, 0);
+ }
+
+ {
+ void *resData2 = OarcManager::GetInstance()->getMdlFromArc2("GetSizuku");
+ if (resData2 == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res2(resData2);
+ if (!res2.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl2 = res2.GetResMdl("GetShizuku");
+ if (!mdl2.IsValid()) {
+ return false;
+ }
+ if (!mMdl2.create(mdl2, allocator, 0x327)) {
+ return false;
+ }
+
+ nw4r::g3d::ResAnmTexSrt anmTexSrt2 = res2.GetResAnmTexSrt("Shizuku");
+ if (!anmTexSrt2.IsValid()) {
+ return false;
+ }
+ TRY_CREATE(mAnmTexSrt2.create(mdl2, anmTexSrt2, allocator, nullptr, 1));
+ TRY_CREATE(mMdl2.setAnm(mAnmTexSrt2));
+
+ nw4r::g3d::ResAnmTexPat anmTexPat2 = res2.GetResAnmTexPat("Shizuku");
+ if (!anmTexPat2.IsValid()) {
+ return false;
+ }
+ if (!mAnmTexPat2.create(mdl2, anmTexPat2, allocator, nullptr, 1)) {
+ return false;
+ }
+ TRY_CREATE(mMdl2.setAnm(mAnmTexPat2));
+ mAnmTexPat2.setFrame(frame, 0);
+ }
+
+ mpItem = item;
+
+ return true;
+}
+
+void dItemMdlTear_c::vt_0x10(u8 arg) {
+ if (arg == ITEM_MDL_UNK0x14_3) {
+ field_0x14 = ITEM_MDL_UNK0x14_1;
+ } else {
+ field_0x14 = arg;
+ }
+}
+
+void dItemMdlTear_c::setScale(const mVec3_c &scale) {
+ mMdl1.setScale(scale);
+ mMdl2.setScale(scale);
+}
+
+void dItemMdlTear_c::setLocalMtx(const mMtx_c &mtx) {
+ mMdl1.setLocalMtx(mtx);
+ mMdl2.setLocalMtx(mtx);
+}
+
+void dItemMdlTear_c::draw() {
+ switch (field_0x14) {
+ case ITEM_MDL_UNK0x14_1:
+ mAnmTexSrt1.play();
+ mpItem->fn_8002ECD0(&mMdl1, 7);
+ break;
+ case ITEM_MDL_UNK0x14_2:
+ mAnmTexSrt2.play();
+ mpItem->fn_8002ECD0(&mMdl2, 6);
+ break;
+ }
+}
+
+void dItemMdlTear_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlTear_c::setPriorityDraw() {
+ mMdl1.setPriorityDraw(0x82, 0x7F);
+ mMdl2.setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlTear_c::unsetPriorityDraw() {
+ mMdl1.setPriorityDraw(0x7F, 0x7F);
+ mMdl2.setPriorityDraw(0x7F, 0x7F);
+}
+
+bool dItemMdlFirefly_c::isMdlForItemId(u16 itemId) {
+ return dAcItem_c::isStarryFirefly((ITEM_ID)itemId);
+}
+
+bool dItemMdlFirefly_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ void *resData = OarcManager::GetInstance()->getMdlFromArc2("GetInsectFirefly");
+ if (resData == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile res(resData);
+ if (!res.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl = res.GetResMdl("GetInsectFirefly");
+ if (!mdl.IsValid()) {
+ return false;
+ }
+ if (!mMdl.create(mdl, allocator, 0x128)) {
+ return false;
+ }
+
+ nw4r::g3d::ResAnmClr anmClr = res.GetResAnmClr("GetInsectFirefly");
+ if (!anmClr.IsValid()) {
+ return false;
+ }
+ TRY_CREATE(mAnmMatClr.create(mdl, anmClr, allocator, nullptr, 1));
+ mAnmMatClr.setFrameOnly(0.0f);
+ TRY_CREATE(mMdl.setAnm(mAnmMatClr));
+
+ mpItem = item;
+ return true;
+}
+
+void dItemMdlFirefly_c::vt_0x10(u8 arg) {
+ field_0x14 = arg;
+}
+
+void dItemMdlFirefly_c::setScale(const mVec3_c &scale) {
+ mMdl.setScale(scale);
+}
+
+void dItemMdlFirefly_c::setLocalMtx(const mMtx_c &mtx) {
+ mMdl.setLocalMtx(mtx);
+}
+
+void dItemMdlFirefly_c::draw() {
+ switch (field_0x14) {
+ case ITEM_MDL_UNK0x14_1: mpItem->fn_8002ECD0(&mMdl, 7); break;
+ case ITEM_MDL_UNK0x14_2: mpItem->fn_8002ECD0(&mMdl, 6); break;
+ }
+ mAnmMatClr.play();
+}
+
+void dItemMdlFirefly_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlFirefly_c::setPriorityDraw() {
+ mMdl.setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlFirefly_c::unsetPriorityDraw() {
+ mMdl.setPriorityDraw(0x7F, 0x7F);
+}
+
+m3d::smdl_c *dItemMdlFirefly_c::getMdl() {
+ return &mMdl;
+}
+
+const u8 dItemMdlPotion_c::sMdlIdx[] = {
+ MDL_POTION_MAX, /* ITEMMDL_SMALL_KEY */
+ MDL_POTION_MAX, /* ITEMMDL_GREEN_RUPEE */
+ MDL_POTION_MAX, /* ITEMMDL_BLUE_RUPEE */
+ MDL_POTION_MAX, /* ITEMMDL_RED_RUPEE */
+ MDL_POTION_MAX, /* ITEMMDL_COMPLETE_TRIFORCE */
+ MDL_POTION_MAX, /* ITEMMDL_HEART */
+ MDL_POTION_MAX, /* ITEMMDL_SINGLE_ARROW */
+ MDL_POTION_MAX, /* ITEMMDL_BUNDLE_ARROWS */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_WHITESWORD */
+ MDL_POTION_MAX, /* ITEMMDL_PRACTICE_SWORD */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_SWORD */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_LONGSWORD */
+ MDL_POTION_MAX, /* ITEMMDL_MASTER_SWORD */
+ MDL_POTION_MAX, /* ITEMMDL_TRUE_MASTER_SWORD */
+ MDL_POTION_MAX, /* ITEMMDL_SAILCLOTH */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_HARP */
+ MDL_POTION_MAX, /* ITEMMDL_SPIRIT_VESSEL */
+ MDL_POTION_MAX, /* ITEMMDL_BOW */
+ MDL_POTION_MAX, /* ITEMMDL_CLAWSHOWS */
+ MDL_POTION_MAX, /* ITEMMDL_BIRD_STATUETTE */
+ MDL_POTION_MAX, /* ITEMMDL_AC_BK */
+ MDL_POTION_MAX, /* ITEMMDL_FS_BK */
+ MDL_POTION_MAX, /* ITEMMDL_SSH_BK */
+ MDL_POTION_MAX, /* ITEMMDL_KEY_PIECE */
+ MDL_POTION_MAX, /* ITEMMDL_SV_BK */
+ MDL_POTION_MAX, /* ITEMMDL_ET_BK */
+ MDL_POTION_MAX, /* ITEMMDL_LMF_BK */
+ MDL_POTION_MAX, /* ITEMMDL_SILVER_RUPEE */
+ MDL_POTION_MAX, /* ITEMMDL_GOLD_RUPEE */
+ MDL_POTION_MAX, /* ITEMMDL_RUPOOR */
+ MDL_POTION_GENKI, /* ITEMMDL_5_CRYSTALS */
+ MDL_POTION_MAX, /* ITEMMDL_GLITTERING_SPORES */
+ MDL_POTION_MAX, /* ITEMMDL_5_BOMBS */
+ MDL_POTION_MAX, /* ITEMMDL_10_BOMBS */
+ MDL_POTION_MAX, /* ITEMMDL_STAMINA_FRUIT */
+ MDL_POTION_MAX, /* ITEMMDL_FARORE_TEAR */
+ MDL_POTION_MAX, /* ITEMMDL_DIN_TEAR */
+ MDL_POTION_MAX, /* ITEMMDL_NAYRU_TEAR */
+ MDL_POTION_MAX, /* ITEMMDL_SACRED_TEAR */
+ MDL_POTION_MAX, /* ITEMMDL_LIGHT_FRUIT */
+ MDL_POTION_GENKI, /* ITEMMDL_1_CRYSTAL */
+ MDL_POTION_MAX, /* ITEMMDL_GUST_BELLOWS */
+ MDL_POTION_MAX, /* ITEMMDL_DUNGEON_MAP_FI */
+ MDL_POTION_MAX, /* ITEMMDL_DUNGEON_MAP */
+ MDL_POTION_MAX, /* ITEMMDL_SLINGSHOT */
+ MDL_POTION_MAX, /* ITEMMDL_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_WATER */
+ MDL_POTION_MAX, /* ITEMMDL_MUSHROOM_SPORES */
+ MDL_POTION_MAX, /* ITEMMDL_DIGGING_MITTS */
+ MDL_POTION_MAX, /* ITEMMDL_5_DEKU_SEEDS */
+ MDL_POTION_MAX, /* ITEMMDL_10_DEKU_SEEDS */
+ MDL_POTION_MUTEKI, /* ITEMMDL_GUARDIAN_POTION */
+ MDL_POTION_MUTEKI, /* ITEMMDL_GUARDIAN_POTION_PLUS */
+ MDL_POTION_MAX, /* ITEMMDL_WATER_SCALE */
+ MDL_POTION_MAX, /* ITEMMDL_BUG_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_BUG_NET */
+ MDL_POTION_MAX, /* ITEMMDL_FAIRY */
+ MDL_POTION_MAX, /* ITEMMDL_SACRED_WATER */
+ MDL_POTION_MAX, /* ITEMMDL_HOOK_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_QUICK_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_TOUGH_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_POTION */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_POTION_PLUS */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_POTION_ALSO_PLUS */
+ MDL_POTION_GUTS, /* ITEMMDL_STAMINA_POTION */
+ MDL_POTION_GUTS, /* ITEMMDL_STAMINA_POTION_PLUS */
+ MDL_POTION_AIR, /* ITEMMDL_AIR_POTION */
+ MDL_POTION_AIR, /* ITEMMDL_AIR_POTION_PLUS */
+ MDL_POTION_MAX, /* ITEMMDL_BOTTLED_FAIRY */
+ MDL_POTION_MAX, /* ITEMMDL_IRON_BOW */
+ MDL_POTION_MAX, /* ITEMMDL_SACRED_BOW */
+ MDL_POTION_MAX, /* ITEMMDL_BOMB_BAG */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_CONTAINER */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_PIECE */
+ MDL_POTION_MAX, /* ITEMMDL_TRI_COURAGE */
+ MDL_POTION_MAX, /* ITEMMDL_TRI_POWER */
+ MDL_POTION_MAX, /* ITEMMDL_TRI_WISDOWM */
+ MDL_POTION_MAX, /* ITEMMDL_SEA_CHART */
+ MDL_POTION_MAX, /* ITEMMDL_MOGMA_MITTS */
+ MDL_POTION_MAX, /* ITEMMDL_HEART_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_RUPEE_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_TREASURE_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_POTION_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_CURSED_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_MIGHTY_SCATTERSHOT */
+ MDL_POTION_MAX, /* ITEMMDL_85 */
+ MDL_POTION_MAX, /* ITEMMDL_MEDIUM_WALLET */
+ MDL_POTION_MAX, /* ITEMMDL_BIG_WALLET */
+ MDL_POTION_MAX, /* ITEMMDL_GIANT_WALLET */
+ MDL_POTION_MAX, /* ITEMMDL_TYCOON_WALLET */
+ MDL_POTION_MAX, /* ITEMMDL_ADVENTURE_POUCH */
+ MDL_POTION_MAX, /* ITEMMDL_POUCH_EXPANSION */
+ MDL_POTION_MAX, /* ITEMMDL_LIFE_MEDAL */
+ MDL_POTION_MAX, /* ITEMMDL_WOODEN_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_BANDED_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_BRACED_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_IRON_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_REINFORCED_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_FORTIFIED_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_SACRED_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_DIVINE_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_HYLIAN_SHIELD */
+ MDL_POTION_MAX, /* ITEMMDL_REVITALIZING_POTION */
+ MDL_POTION_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS */
+ MDL_POTION_MAX, /* ITEMMDL_SMALL_SEED_SATCHEL */
+ MDL_POTION_MAX, /* ITEMMDL_MEDIUM_SEED_SATCHEL */
+ MDL_POTION_MAX, /* ITEMMDL_LARGE_SEED_SATCHEL */
+ MDL_POTION_MAX, /* ITEMMDL_SMALL_QUIVER */
+ MDL_POTION_MAX, /* ITEMMDL_MEDIUM_QUIVER */
+ MDL_POTION_MAX, /* ITEMMDL_LARGE_QUIVER */
+ MDL_POTION_MAX, /* ITEMMDL_SMALL_BOMB_BAG */
+ MDL_POTION_MAX, /* ITEMMDL_MEDIUM_BOMB_BAG */
+ MDL_POTION_MAX, /* ITEMMDL_LARGE_BOMB_BAG */
+ MDL_POTION_MAX, /* ITEMMDL_WHIP */
+ MDL_POTION_MAX, /* ITEMMDL_FIRESHIELD_EARRINGS */
+ MDL_POTION_MAX, /* ITEMMDL_BIG_BUG_NET */
+ MDL_POTION_MAX, /* ITEMMDL_FARON_GRASSHOPPER */
+ MDL_POTION_MAX, /* ITEMMDL_WOODLAND_RHINO_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_DEKU_HORNET */
+ MDL_POTION_MAX, /* ITEMMDL_SKYLOFT_MANTIS */
+ MDL_POTION_MAX, /* ITEMMDL_VOLCANIC_LADYBUG */
+ MDL_POTION_MAX, /* ITEMMDL_BLESSED_BUTTERFLY */
+ MDL_POTION_MAX, /* ITEMMDL_LANAYRU_ANT */
+ MDL_POTION_MAX, /* ITEMMDL_SAND_CICADA */
+ MDL_POTION_MAX, /* ITEMMDL_GERUDO_DRAGONFLY */
+ MDL_POTION_MAX, /* ITEMMDL_ELDIN_ROLLER */
+ MDL_POTION_MAX, /* ITEMMDL_SKY_STAG_BEETLE */
+ MDL_POTION_MAX, /* ITEMMDL_STARRY_FIREFLY */
+ MDL_POTION_MAX, /* ITEMMDL_BOTTLE */
+ MDL_POTION_MAX, /* ITEMMDL_CAWLIN_LETTER */
+ MDL_POTION_MAX, /* ITEMMDL_BEEDLE_INSECT_CAGE */
+ MDL_POTION_MAX, /* ITEMMDL_RATTLE */
+ MDL_POTION_MAX, /* ITEMMDL_HORNET_LARVAE */
+ MDL_POTION_MAX, /* ITEMMDL_BIRD_FEATHER */
+ MDL_POTION_MAX, /* ITEMMDL_TUMBLE_WEED */
+ MDL_POTION_MAX, /* ITEMMDL_LIZARD_TAIL */
+ MDL_POTION_MAX, /* ITEMMDL_ELDIN_ORE */
+ MDL_POTION_MAX, /* ITEMMDL_ANCIENT_FLOWER */
+ MDL_POTION_MAX, /* ITEMMDL_AMBER_RELIC */
+ MDL_POTION_MAX, /* ITEMMDL_DUSK_RELIC */
+ MDL_POTION_MAX, /* ITEMMDL_JELLY_BLOB */
+ MDL_POTION_MAX, /* ITEMMDL_MONSTER_CLAW */
+ MDL_POTION_MAX, /* ITEMMDL_MONSTER_HORN */
+ MDL_POTION_MAX, /* ITEMMDL_ORNAMENTAL_SKULL */
+ MDL_POTION_MAX, /* ITEMMDL_EVIL_CRYSTAL */
+ MDL_POTION_MAX, /* ITEMMDL_BLUE_BIRD_FEATHER */
+ MDL_POTION_MAX, /* ITEMMDL_GOLDEN_SKULL */
+ MDL_POTION_MAX, /* ITEMMDL_GODDESS_PLUME */
+ MDL_POTION_MAX, /* ITEMMDL_EMERALD_TABLET */
+ MDL_POTION_MAX, /* ITEMMDL_RUBY_TABLET */
+ MDL_POTION_MAX, /* ITEMMDL_AMBER_TABLET */
+ MDL_POTION_MAX, /* ITEMMDL_STONE_OF_TRIALS */
+ MDL_POTION_MAX, /* ITEMMDL_BALLAD_OF_THE_GODDESS */
+ MDL_POTION_MAX, /* ITEMMDL_FARORES_COURAGE */
+ MDL_POTION_MAX, /* ITEMMDL_NAYRUS_WISDOM */
+ MDL_POTION_MAX, /* ITEMMDL_DINS_POWER */
+ MDL_POTION_MAX, /* ITEMMDL_FARON_SOTH */
+ MDL_POTION_MAX, /* ITEMMDL_ELDIN_SOTH */
+ MDL_POTION_MAX, /* ITEMMDL_LANAYRU_SOTH */
+ MDL_POTION_MAX, /* ITEMMDL_ITEM_SOTH */
+ MDL_POTION_MAX, /* ITEMMDL_REVITALIZING_POTION_PLUS_PLUS */
+ MDL_POTION_MAX, /* ITEMMDL_HOT_SOUP */
+ MDL_POTION_MAX, /* ITEMMDL_COLD_SOUP */
+ MDL_POTION_MAX, /* ITEMMDL_LIFE_TREE_SEED */
+ MDL_POTION_MAX, /* ITEMMDL_LIFE_TREE_FRUIT */
+ MDL_POTION_MAX, /* ITEMMDL_EXTRA_WALLET */
+};
+
+const dItemMdlPotion_c::MdlConfig dItemMdlPotion_c::sMdlConfig[] = {
+ {"GetBottleMuteki", "GetBottleMuteki", "GetBottleMuteki", "GetBottleMuteki"},
+ { "GetBottleGuts", "GetBottleGuts", "GetBottleGuts", "GetBottleGuts"},
+ { "GetBottleAir", "GetBottleAir", "GetBottleAir", "GetBottleAir"},
+ { "GetGenki", "GetGenki", "GetGenki", "GetGenki"},
+};
+
+bool dItemMdlPotion_c::isMdlForItemId(u16 itemId) {
+ if (hasItemMdl(itemId) == false) {
+ return false;
+ } else {
+ return sMdlIdx[getItemMdlIdx(itemId)] <= MDL_POTION_MAX - 1;
+ }
+}
+
+bool dItemMdlPotion_c::init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) {
+ s32 mdlIdx = getItemMdlIdx(itemId);
+ u8 mdlConfigIdx = sMdlIdx[mdlIdx];
+
+ const MdlConfig *fileAndMdl = &sMdlConfig[mdlConfigIdx];
+
+ void *resData = OarcManager::GetInstance()->getMdlFromArc2(fileAndMdl->resFile);
+ if (resData == nullptr) {
+ return false;
+ }
+ nw4r::g3d::ResFile resFile(resData);
+ if (!resFile.IsValid()) {
+ return false;
+ }
+
+ nw4r::g3d::ResMdl mdl = resFile.GetResMdl(fileAndMdl->mdlName);
+ if (!mdl.IsValid()) {
+ return false;
+ }
+ // TODO - what? This makes the function return true if model creation
+ // succeeds but the anmChr is invalid.
+ bool result = mMdl.create(mdl, allocator, 0x324);
+ if (!result) {
+ return false;
+ }
+
+ nw4r::g3d::ResAnmChr anmChr = resFile.GetResAnmChr(fileAndMdl->anmChrName);
+ if (!anmChr.IsValid()) {
+ return result;
+ }
+ TRY_CREATE(mAnmChr.create2(mdl, anmChr, allocator));
+ mAnmChr.setAnm(mMdl, anmChr, m3d::PLAY_MODE_0);
+ mMdl.setAnm(mAnmChr);
+
+ nw4r::g3d::ResAnmTexSrt anmTexSrt = resFile.GetResAnmTexSrt(fileAndMdl->anmTexSrtName);
+ if (!anmTexSrt.IsValid()) {
+ return false;
+ }
+ TRY_CREATE(mAnmTexSrt.create(mdl, anmTexSrt, allocator, nullptr, 1));
+ TRY_CREATE(mMdl.setAnm(mAnmTexSrt));
+
+ mpItem = item;
+ return true;
+}
+
+void dItemMdlPotion_c::vt_0x10(u8 arg) {
+ field_0x14 = arg;
+}
+
+void dItemMdlPotion_c::setScale(const mVec3_c &scale) {
+ mMdl.setScale(scale);
+}
+
+void dItemMdlPotion_c::setLocalMtx(const mMtx_c &mtx) {
+ mMdl.setLocalMtx(mtx);
+}
+
+void dItemMdlPotion_c::draw() {
+ mAnmChr.play();
+ mAnmTexSrt.play();
+ switch (field_0x14) {
+ case ITEM_MDL_UNK0x14_1: mpItem->fn_8002ECD0(&mMdl, 7); break;
+ case ITEM_MDL_UNK0x14_2: mpItem->fn_8002ECD0(&mMdl, 6); break;
+ }
+}
+
+void dItemMdlPotion_c::vt_0x20() {
+ // no-op
+}
+
+void dItemMdlPotion_c::setPriorityDraw() {
+ mMdl.setPriorityDraw(0x82, 0x7F);
+}
+
+void dItemMdlPotion_c::unsetPriorityDraw() {
+ mMdl.setPriorityDraw(0x7F, 0x7F);
+}
+
+m3d::smdl_c *dItemMdlPotion_c::getMdl() {
+ return &mMdl;
+}
diff --git a/src/toBeSorted/item_mdl_name.cpp b/src/toBeSorted/item_mdl_name.cpp
new file mode 100644
index 00000000..a0b95f77
--- /dev/null
+++ b/src/toBeSorted/item_mdl_name.cpp
@@ -0,0 +1,528 @@
+#include "common.h"
+#include "toBeSorted/item_mdl_name.h"
+
+static const u16 ITEM_TO_MODEL_INDEX[512] = {
+ ITEMMDL_MAX, /* ITEM_NONE */
+ ITEMMDL_SMALL_KEY, /* ITEM_SMALL_KEY */
+ ITEMMDL_GREEN_RUPEE, /* ITEM_GREEN_RUPEE */
+ ITEMMDL_BLUE_RUPEE, /* ITEM_BLUE_RUPEE */
+ ITEMMDL_RED_RUPEE, /* ITEM_RED_RUPEE */
+ ITEMMDL_COMPLETE_TRIFORCE, /* ITEM_COMPLETE_TRIFORCE */
+ ITEMMDL_HEART, /* ITEM_HEART */
+ ITEMMDL_SINGLE_ARROW, /* ITEM_SINGLE_ARROW */
+ ITEMMDL_BUNDLE_ARROWS, /* ITEM_BUNDLE_ARROWS */
+ ITEMMDL_GODDESS_WHITESWORD, /* ITEM_GODDESS_WHITESWORD */
+ ITEMMDL_PRACTICE_SWORD, /* ITEM_PRACTICE_SWORD */
+ ITEMMDL_GODDESS_SWORD, /* ITEM_GODDESS_SWORD */
+ ITEMMDL_GODDESS_LONGSWORD, /* ITEM_GODDESS_LONGSWORD */
+ ITEMMDL_MASTER_SWORD, /* ITEM_MASTER_SWORD */
+ ITEMMDL_TRUE_MASTER_SWORD, /* ITEM_TRUE_MASTER_SWORD */
+ ITEMMDL_SAILCLOTH, /* ITEM_SAILCLOTH */
+ ITEMMDL_GODDESS_HARP, /* ITEM_GODDESS_HARP */
+ ITEMMDL_SPIRIT_VESSEL, /* ITEM_SPIRIT_VESSEL */
+ ITEMMDL_MAX, /* ITEM_UNK_18 */
+ ITEMMDL_BOW, /* ITEM_BOW */
+ ITEMMDL_CLAWSHOWS, /* ITEM_CLAWSHOTS */
+ ITEMMDL_BIRD_STATUETTE, /* ITEM_BIRD_STATUETTE */
+ ITEMMDL_MAX, /* ITEM_COMMON_BUG */
+ ITEMMDL_MAX, /* ITEM_UNCOMMON_BUG */
+ ITEMMDL_MAX, /* ITEM_RARE_BUG */
+ ITEMMDL_AC_BK, /* ITEM_AC_BK */
+ ITEMMDL_FS_BK, /* ITEM_FS_BK */
+ ITEMMDL_SSH_BK, /* ITEM_SSH_BK */
+ ITEMMDL_KEY_PIECE, /* ITEM_KEY_PIECE */
+ ITEMMDL_SV_BK, /* ITEM_SV_BK */
+ ITEMMDL_ET_BK, /* ITEM_ET_BK */
+ ITEMMDL_LMF_BK, /* ITEM_LMF_BK */
+ ITEMMDL_SILVER_RUPEE, /* ITEM_SILVER_RUPEE */
+ ITEMMDL_GOLD_RUPEE, /* ITEM_GOLD_RUPEE */
+ ITEMMDL_RUPOOR, /* ITEM_RUPOOR */
+ ITEMMDL_5_CRYSTALS, /* ITEM_5_CRYSTALS */
+ ITEMMDL_GLITTERING_SPORES, /* ITEM_GLITTERING_SPORES */
+ ITEMMDL_MAX, /* ITEM_UNK_37 */
+ ITEMMDL_MAX, /* ITEM_UNK_38 */
+ ITEMMDL_MAX, /* ITEM_UNK_39 */
+ ITEMMDL_5_BOMBS, /* ITEM_5_BOMBS */
+ ITEMMDL_10_BOMBS, /* ITEM_10_BOMBS */
+ ITEMMDL_STAMINA_FRUIT, /* ITEM_STAMINA_FRUIT */
+ ITEMMDL_FARORE_TEAR, /* ITEM_FARORE_TEAR */
+ ITEMMDL_DIN_TEAR, /* ITEM_DIN_TEAR */
+ ITEMMDL_NAYRU_TEAR, /* ITEM_NAYRU_TEAR */
+ ITEMMDL_SACRED_TEAR, /* ITEM_SACRED_TEAR */
+ ITEMMDL_LIGHT_FRUIT, /* ITEM_LIGHT_FRUIT */
+ ITEMMDL_1_CRYSTAL, /* ITEM_1_CRYSTAL */
+ ITEMMDL_GUST_BELLOWS, /* ITEM_GUST_BELLOWS */
+ ITEMMDL_DUNGEON_MAP_FI, /* ITEM_DUNGEON_MAP_FI */
+ ITEMMDL_DUNGEON_MAP, /* ITEM_DUNGEON_MAP */
+ ITEMMDL_SLINGSHOT, /* ITEM_SLINGSHOT */
+ ITEMMDL_BEETLE, /* ITEM_BEETLE */
+ ITEMMDL_WATER, /* ITEM_WATER */
+ ITEMMDL_MUSHROOM_SPORES, /* ITEM_MUSHROOM_SPORES */
+ ITEMMDL_DIGGING_MITTS, /* ITEM_DIGGING_MITTS */
+ ITEMMDL_5_DEKU_SEEDS, /* ITEM_5_DEKU_SEEDS */
+ ITEMMDL_MAX, /* ITEM_UNK_58 */
+ ITEMMDL_MAX, /* ITEM_UNK_59 */
+ ITEMMDL_10_DEKU_SEEDS, /* ITEM_10_DEKU_SEEDS */
+ ITEMMDL_MAX, /* ITEM_COMMON_TREASURE */
+ ITEMMDL_MAX, /* ITEM_COMMON_TREASURE2 */
+ ITEMMDL_MAX, /* ITEM_UNCOMMON_TREASURE */
+ ITEMMDL_MAX, /* ITEM_RARE_TREASURE */
+ ITEMMDL_GUARDIAN_POTION, /* ITEM_GUARDIAN_POTION */
+ ITEMMDL_GUARDIAN_POTION_PLUS, /* ITEM_GUARDIAN_POTION_PLUS */
+ ITEMMDL_MAX, /* ITEM_UNK_67 */
+ ITEMMDL_WATER_SCALE, /* ITEM_WATER_SCALE */
+ ITEMMDL_MAX, /* ITEM_UNK_69 */
+ ITEMMDL_BUG_MEDAL, /* ITEM_BUG_MEDAL */
+ ITEMMDL_BUG_NET, /* ITEM_BUG_NET */
+ ITEMMDL_FAIRY, /* ITEM_FAIRY */
+ ITEMMDL_MAX, /* ITEM_UNK_73 */
+ ITEMMDL_SACRED_WATER, /* ITEM_SACRED_WATER */
+ ITEMMDL_HOOK_BEETLE, /* ITEM_HOOK_BEETLE */
+ ITEMMDL_QUICK_BEETLE, /* ITEM_QUICK_BEETLE */
+ ITEMMDL_TOUGH_BEETLE, /* ITEM_TOUGH_BEETLE */
+ ITEMMDL_HEART_POTION, /* ITEM_HEART_POTION */
+ ITEMMDL_HEART_POTION_PLUS, /* ITEM_HEART_POTION_PLUS */
+ ITEMMDL_MAX, /* ITEM_HEART_POTION_ALSO */
+ ITEMMDL_HEART_POTION_ALSO_PLUS, /* ITEM_HEART_POTION_PLUS_PLUS */
+ ITEMMDL_MAX, /* ITEM_UNK_82 */
+ ITEMMDL_MAX, /* ITEM_GUARDIAN_POTION_NO_TBOX */
+ ITEMMDL_STAMINA_POTION, /* ITEM_STAMINA_POTION */
+ ITEMMDL_STAMINA_POTION_PLUS, /* ITEM_STAMINA_POTION_PLUS */
+ ITEMMDL_AIR_POTION, /* ITEM_AIR_POTION */
+ ITEMMDL_AIR_POTION_PLUS, /* ITEM_AIR_POTION_PLUS */
+ ITEMMDL_BOTTLED_FAIRY, /* ITEM_BOTTLED_FAIRY */
+ ITEMMDL_MAX, /* ITEM_UNK_89 */
+ ITEMMDL_IRON_BOW, /* ITEM_IRON_BOW */
+ ITEMMDL_SACRED_BOW, /* ITEM_SACRED_BOW */
+ ITEMMDL_BOMB_BAG, /* ITEM_BOMB_BAG */
+ ITEMMDL_HEART_CONTAINER, /* ITEM_HEART_CONTAINER */
+ ITEMMDL_HEART_PIECE, /* ITEM_HEART_PIECE */
+ ITEMMDL_TRI_COURAGE, /* ITEM_TRI_COURAGE */
+ ITEMMDL_TRI_POWER, /* ITEM_TRI_POWER */
+ ITEMMDL_TRI_WISDOWM, /* ITEM_TRI_WISDOM */
+ ITEMMDL_SEA_CHART, /* ITEM_SEA_CHART */
+ ITEMMDL_MOGMA_MITTS, /* ITEM_MOGMA_MITTS */
+ ITEMMDL_HEART_MEDAL, /* ITEM_HEART_MEDAL */
+ ITEMMDL_RUPEE_MEDAL, /* ITEM_RUPEE_MEDAL */
+ ITEMMDL_TREASURE_MEDAL, /* ITEM_TREASURE_MEDAL */
+ ITEMMDL_POTION_MEDAL, /* ITEM_POTION_MEDAL */
+ ITEMMDL_CURSED_MEDAL, /* ITEM_CURSED_MEDAL */
+ ITEMMDL_MIGHTY_SCATTERSHOT, /* ITEM_MIGHTY_SCATTERSHOT */
+ ITEMMDL_MAX, /* ITEM_UNK_106 */
+ ITEMMDL_85, /* ITEM_UNK_107 */
+ ITEMMDL_MEDIUM_WALLET, /* ITEM_MEDIUM_WALLET */
+ ITEMMDL_BIG_WALLET, /* ITEM_BIG_WALLET */
+ ITEMMDL_GIANT_WALLET, /* ITEM_GIANT_WALLET */
+ ITEMMDL_TYCOON_WALLET, /* ITEM_TYCOON_WALLET */
+ ITEMMDL_ADVENTURE_POUCH, /* ITEM_ADVENTURE_POUCH */
+ ITEMMDL_POUCH_EXPANSION, /* ITEM_POUCH_EXPANSION */
+ ITEMMDL_LIFE_MEDAL, /* ITEM_LIFE_MEDAL */
+ ITEMMDL_MAX, /* ITEM_UNK_115 */
+ ITEMMDL_WOODEN_SHIELD, /* ITEM_WOODEN_SHIELD */
+ ITEMMDL_BANDED_SHIELD, /* ITEM_BANDED_SHIELD */
+ ITEMMDL_BRACED_SHIELD, /* ITEM_BRACED_SHIELD */
+ ITEMMDL_IRON_SHIELD, /* ITEM_IRON_SHIELD */
+ ITEMMDL_REINFORCED_SHIELD, /* ITEM_REINFORCED_SHIELD */
+ ITEMMDL_FORTIFIED_SHIELD, /* ITEM_FORTIFIED_SHIELD */
+ ITEMMDL_SACRED_SHIELD, /* ITEM_SACRED_SHIELD */
+ ITEMMDL_DIVINE_SHIELD, /* ITEM_DIVINE_SHIELD */
+ ITEMMDL_GODDESS_SHIELD, /* ITEM_GODDESS_SHIELD */
+ ITEMMDL_HYLIAN_SHIELD, /* ITEM_HYLIAN_SHIELD */
+ ITEMMDL_REVITALIZING_POTION, /* ITEM_REVITALIZING_POTION */
+ ITEMMDL_REVITALIZING_POTION_PLUS, /* ITEM_REVITALIZING_POTION_PLUS */
+ ITEMMDL_SMALL_SEED_SATCHEL, /* ITEM_SMALL_SEED_SATCHEL */
+ ITEMMDL_MEDIUM_SEED_SATCHEL, /* ITEM_MEDIUM_SEED_SATCHEL */
+ ITEMMDL_LARGE_SEED_SATCHEL, /* ITEM_LARGE_SEED_SATCHEL */
+ ITEMMDL_SMALL_QUIVER, /* ITEM_SMALL_QUIVER */
+ ITEMMDL_MEDIUM_QUIVER, /* ITEM_MEDIUM_QUIVER */
+ ITEMMDL_LARGE_QUIVER, /* ITEM_LARGE_QUIVER */
+ ITEMMDL_SMALL_BOMB_BAG, /* ITEM_SMALL_BOMB_BAG */
+ ITEMMDL_MEDIUM_BOMB_BAG, /* ITEM_MEDIUM_BOMB_BAG */
+ ITEMMDL_LARGE_BOMB_BAG, /* ITEM_LARGE_BOMB_BAG */
+ ITEMMDL_WHIP, /* ITEM_WHIP */
+ ITEMMDL_FIRESHIELD_EARRINGS, /* ITEM_FIRESHIELD_EARRINGS */
+ ITEMMDL_MAX, /* ITEM_UNK_139 */
+ ITEMMDL_BIG_BUG_NET, /* ITEM_BIG_BUG_NET */
+ ITEMMDL_FARON_GRASSHOPPER, /* ITEM_FARON_GRASSHOPPER */
+ ITEMMDL_WOODLAND_RHINO_BEETLE, /* ITEM_WOODLAND_RHINO_BEETLE */
+ ITEMMDL_DEKU_HORNET, /* ITEM_DEKU_HORNET */
+ ITEMMDL_SKYLOFT_MANTIS, /* ITEM_SKYLOFT_MANTIS */
+ ITEMMDL_VOLCANIC_LADYBUG, /* ITEM_VOLCANIC_LADYBUG */
+ ITEMMDL_BLESSED_BUTTERFLY, /* ITEM_BLESSED_BUTTERFLY */
+ ITEMMDL_LANAYRU_ANT, /* ITEM_LANAYRU_ANT */
+ ITEMMDL_SAND_CICADA, /* ITEM_SAND_CICADA */
+ ITEMMDL_GERUDO_DRAGONFLY, /* ITEM_GERUDO_DRAGONFLY */
+ ITEMMDL_ELDIN_ROLLER, /* ITEM_ELDIN_ROLLER */
+ ITEMMDL_SKY_STAG_BEETLE, /* ITEM_SKY_STAG_BEETLE */
+ ITEMMDL_STARRY_FIREFLY, /* ITEM_STARRY_FIREFLY */
+ ITEMMDL_BOTTLE, /* ITEM_BOTTLE */
+ ITEMMDL_MAX, /* ITEM_RUPEE_MEDAL_ALSO */
+ ITEMMDL_MAX, /* ITEM_HEART_MEDAL_ALSO */
+ ITEMMDL_MAX, /* ITEM_UNK_156 */
+ ITEMMDL_MAX, /* ITEM_UNK_157 */
+ ITEMMDL_CAWLIN_LETTER, /* ITEM_CAWLIN_LETTER */
+ ITEMMDL_BEEDLE_INSECT_CAGE, /* ITEM_BEEDLE_INSECT_CAGE */
+ ITEMMDL_RATTLE, /* ITEM_RATTLE */
+ ITEMMDL_HORNET_LARVAE, /* ITEM_HORNET_LARVAE */
+ ITEMMDL_BIRD_FEATHER, /* ITEM_BIRD_FEATHER */
+ ITEMMDL_TUMBLE_WEED, /* ITEM_TUMBLE_WEED */
+ ITEMMDL_LIZARD_TAIL, /* ITEM_LIZARD_TAIL */
+ ITEMMDL_ELDIN_ORE, /* ITEM_ELDIN_ORE */
+ ITEMMDL_ANCIENT_FLOWER, /* ITEM_ANCIENT_FLOWER */
+ ITEMMDL_AMBER_RELIC, /* ITEM_AMBER_RELIC */
+ ITEMMDL_DUSK_RELIC, /* ITEM_DUSK_RELIC */
+ ITEMMDL_JELLY_BLOB, /* ITEM_JELLY_BLOB */
+ ITEMMDL_MONSTER_CLAW, /* ITEM_MONSTER_CLAW */
+ ITEMMDL_MONSTER_HORN, /* ITEM_MONSTER_HORN */
+ ITEMMDL_ORNAMENTAL_SKULL, /* ITEM_ORNAMENTAL_SKULL */
+ ITEMMDL_EVIL_CRYSTAL, /* ITEM_EVIL_CRYSTAL */
+ ITEMMDL_BLUE_BIRD_FEATHER, /* ITEM_BLUE_BIRD_FEATHER */
+ ITEMMDL_GOLDEN_SKULL, /* ITEM_GOLDEN_SKULL */
+ ITEMMDL_GODDESS_PLUME, /* ITEM_GODDESS_PLUME */
+ ITEMMDL_EMERALD_TABLET, /* ITEM_EMERALD_TABLET */
+ ITEMMDL_RUBY_TABLET, /* ITEM_RUBY_TABLET */
+ ITEMMDL_AMBER_TABLET, /* ITEM_AMBER_TABLET */
+ ITEMMDL_STONE_OF_TRIALS, /* ITEM_STONE_OF_TRIALS */
+ ITEMMDL_MAX, /* ITEM_UNK_181 */
+ ITEMMDL_MAX, /* ITEM_UNK_182 */
+ ITEMMDL_MAX, /* ITEM_UNK_183 */
+ ITEMMDL_MAX, /* ITEM_UNK_184 */
+ ITEMMDL_MAX, /* ITEM_UNK_185 */
+ ITEMMDL_BALLAD_OF_THE_GODDESS, /* ITEM_BALLAD_OF_THE_GODDESS */
+ ITEMMDL_FARORES_COURAGE, /* ITEM_FARORES_COURAGE */
+ ITEMMDL_NAYRUS_WISDOM, /* ITEM_NAYRUS_WISDOM */
+ ITEMMDL_DINS_POWER, /* ITEM_DINS_POWER */
+ ITEMMDL_FARON_SOTH, /* ITEM_FARON_SOTH */
+ ITEMMDL_ELDIN_SOTH, /* ITEM_ELDIN_SOTH */
+ ITEMMDL_LANAYRU_SOTH, /* ITEM_LANAYRU_SOTH */
+ ITEMMDL_ITEM_SOTH, /* ITEM_SOTH */
+ ITEMMDL_REVITALIZING_POTION_PLUS_PLUS, /* ITEM_REVITALIZING_POTION_PLUS_PLUS */
+ ITEMMDL_HOT_SOUP, /* ITEM_HOT_SOUP */
+ ITEMMDL_COLD_SOUP, /* ITEM_COLD_SOUP */
+ ITEMMDL_LIFE_TREE_SEED, /* ITEM_LIFE_TREE_SEED */
+ ITEMMDL_LIFE_TREE_FRUIT, /* ITEM_LIFE_TREE_FRUIT */
+ ITEMMDL_EXTRA_WALLET, /* ITEM_EXTRA_WALLET */
+ ITEMMDL_MAX, /* ITEM_UNK_200 */
+ ITEMMDL_MAX, /* ITEM_LIFE_MEDAL_AGAIN */
+ ITEMMDL_MAX, /* ITEM_POUCH_EXPANSION_GODDESS_CHEST */
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+ ITEMMDL_MAX,
+};
+
+bool hasItemMdl(u16 itemId) {
+ if (itemId >= ARRAY_LENGTH(ITEM_TO_MODEL_INDEX)) {
+ return false;
+ }
+ return ITEM_TO_MODEL_INDEX[itemId] <= ITEMMDL_MAX - 1;
+}
+
+u16 getItemMdlIdx(u16 itemId) {
+ return ITEM_TO_MODEL_INDEX[itemId];
+}
diff --git a/src/toBeSorted/mdl_base.cpp b/src/toBeSorted/mdl_base.cpp
new file mode 100644
index 00000000..2c5ba98b
--- /dev/null
+++ b/src/toBeSorted/mdl_base.cpp
@@ -0,0 +1,4 @@
+#include "toBeSorted/mdl_base.h"
+
+dMdl_c::dMdl_c() {}
+dMdl_c::~dMdl_c() {}