Files
ss/src/toBeSorted/item_mdl_misc.cpp
T
2026-05-10 20:05:46 +02:00

1290 lines
50 KiB
C++

#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(u16 itemId) {
// 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(u16 itemId) {
// 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(u16 itemId) {
// 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(u16 itemId) {
// 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(u16 itemId) {
// 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(u16 itemId) {
// 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;
}