diff options
| author | robojumper <robojumper@gmail.com> | 2026-04-26 20:55:47 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2026-05-10 20:05:46 +0200 |
| commit | b80ede8f48197b69ecfe3e3945f45e09a4342792 (patch) | |
| tree | 8f3bf7db74a0f5dc83514a82ddb1537e750ff409 /src | |
| parent | f7b4c029fd5176e817e3de7209727480c445a3d2 (diff) | |
item_mdl_misc OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/toBeSorted/item_mdl_misc.cpp | 1289 | ||||
| -rw-r--r-- | src/toBeSorted/item_mdl_name.cpp | 528 | ||||
| -rw-r--r-- | src/toBeSorted/mdl_base.cpp | 4 |
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() {} |
