mirror of
https://github.com/zeldaret/ss
synced 2026-05-26 15:45:19 -04:00
1290 lines
50 KiB
C++
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;
|
|
}
|