d_a_item -> Layout and Enum (#92)

* mostly done

* Update d_t_tumble_weed.cpp

* remove cM::calcTimer

* just regswap on adjustSpeed

* checkpoint

* file setup

* fix incorrect symbol

* some tidbits i guess

* fixup merge

* fix merge 2.0

* Item Renames from Esme

* fix d_t_tumble_weed

* fixup merge
This commit is contained in:
Elijah Thomas
2024-11-09 11:53:22 -05:00
committed by GitHub
parent a3472ab02d
commit 126e1a9fd7
22 changed files with 1641 additions and 189 deletions
@@ -1,7 +1,7 @@
#include "d/a/obj/d_a_obj_toD3_stone_figure.h"
#include "d/a/d_a_item.h"
#include "d/col/cc/d_cc_s.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/event.h"
@@ -165,5 +165,5 @@ void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) {
}
bool dAcOtoD3StoneFigure_c::hasStoneOfTrials() const {
return dAcItem_c::checkFlag(0xB4);
return dAcItem_c::checkFlag(ITEM_STONE_OF_TRIALS);
}
+1 -1
View File
@@ -1,8 +1,8 @@
#include "d/a/obj/d_a_obj_tower_hand_D101.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w.h"
#include "d/flag/sceneflag_manager.h"
+2 -5
View File
@@ -2,23 +2,20 @@
#include "c/c_math.h"
#include "common.h"
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_s_gnd_chk.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "egg/math/eggMath.h"
#include "egg/math/eggQuat.h"
#include "f/f_base.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_quat.h"
#include "m/m_vec.h"
#include "nw4r/math/math_triangular.h"
#include "rvl/MTX/mtx.h"
#include "rvl/MTX/vec.h"
#include "s/s_Math.h"
#include "toBeSorted/dowsing_target.h"
@@ -118,7 +115,7 @@ int dAcOTumbleWeed_c::actorExecute() {
mObjAcch.CrrPos(*dBgS::GetInstance());
mField_0x974 += position.y - mOldPosition.y;
if (checkCollect()) {
dAcPy_c::LINK->bugNetCollectTreasure(0xA3 /* TODO(Item Id) ITEM_TUMBLEWEED */);
dAcPy_c::LINK->bugNetCollectTreasure(ITEM_TUMBLE_WEED);
FUN_8002dcd0();
return SUCCEEDED;
}
+10 -6
View File
@@ -1,9 +1,9 @@
#include "d/t/d_t_dowsing.h"
#include "d/a/d_a_item.h"
#include "d/flag/itemflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
SPECIAL_ACTOR_PROFILE(T_DOWSING, dTgDowsing_c, fProfile::T_DOWSING, 0x0293, 0, 0);
@@ -56,13 +56,17 @@ bool dTgDowsing_c::checkDowsing() const {
switch (mDowsingOption) {
case TRIAL_0:
return ItemflagManager::sInstance->getFlagDirect(187) && !StoryflagManager::sInstance->getCounterOrFlag(93);
return ItemflagManager::sInstance->getFlagDirect(ITEM_FARORES_COURAGE) &&
!StoryflagManager::sInstance->getCounterOrFlag(93); // TOOD (Counter ID)
case TRIAL_1:
return ItemflagManager::sInstance->getFlagDirect(188) && !StoryflagManager::sInstance->getCounterOrFlag(97);
return ItemflagManager::sInstance->getFlagDirect(ITEM_NAYRUS_WISDOM) &&
!StoryflagManager::sInstance->getCounterOrFlag(97); // TOOD (Counter ID)
case TRIAL_2:
return ItemflagManager::sInstance->getFlagDirect(189) && !StoryflagManager::sInstance->getCounterOrFlag(98);
return ItemflagManager::sInstance->getFlagDirect(ITEM_DINS_POWER) &&
!StoryflagManager::sInstance->getCounterOrFlag(98); // TOOD (Counter ID)
case TRIAL_3:
return ItemflagManager::sInstance->getFlagDirect(193) && !StoryflagManager::sInstance->getCounterOrFlag(99);
return ItemflagManager::sInstance->getFlagDirect(ITEM_SOTH) &&
!StoryflagManager::sInstance->getCounterOrFlag(99); // TOOD (Counter ID)
case PROPELLER: return DowsingTarget::hasPropellerDowsing();
case WATER_BASIN: return DowsingTarget::hasWaterBasinDowsing();
case CRYSTAL_BALL: return DowsingTarget::hasCrystalBallDowsing();
+12 -10
View File
@@ -2,11 +2,13 @@
#include "c/c_lib.h"
#include "c/c_math.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/flag/sceneflag_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_REACTION, dTgReaction_c, fProfile::TAG_REACTION, 0x0151, 0, 0);
STATE_DEFINE(dTgReaction_c, Wait);
@@ -64,7 +66,7 @@ int dTgReaction_c::create() {
}
if (field_0x4DE) {
u32 heartMedalCount = adventurePouchCountItem(/* HEART_MEDAL*/ 100);
u32 heartMedalCount = adventurePouchCountItem(ITEM_HEART_MEDAL);
if (heartMedalCount == 0) {
return FAILED;
} else if (heartMedalCount == 1 && cM::rnd() < 0.5f) {
@@ -176,11 +178,11 @@ void dTgReaction_c::checkForBonkItem() {
c.rotY(rotation.y);
c2 += c;
c2.y += field_0x4E4;
u32 newItemParms = dAcItem_c::createItemParams(/* HEART_PIECE */ 0x5E, 1, 0, getSceneFlag(), 1, 0xFF);
u32 newItemParms = dAcItem_c::createItemParams(ITEM_HEART_PIECE, 1, 0, getSceneFlag(), 1, 0xFF);
if (dAcObjBase_c::create(fProfile::ITEM, roomid, newItemParms, &c2, nullptr, nullptr, 0xFFFFFFFF)) {
field_0x4DD = 1;
onDelete();
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AD);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AD); // TODO (Sound ID)
}
}
} else {
@@ -202,7 +204,7 @@ void dTgReaction_c::checkForBonkItem() {
pos.y += field_0x4E4;
if (fn_578_DB0(pos, uVar3)) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE); // TODO (Sound ID)
}
SceneflagManager::sInstance->setFlag(roomid, getSceneFlag());
onDelete();
@@ -211,7 +213,7 @@ void dTgReaction_c::checkForBonkItem() {
}
void dTgReaction_c::checkForBubble() {
if (mCollision.ChkTgHit() && mCollision.ChkTgAtHitType(0x100000)) {
if (mCollision.ChkTgHit() && mCollision.ChkTgAtHitType(AT_TYPE_0x100000)) {
if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->checkFlags0x350(0x40)) {
mVec3_c spawnPos = position;
dAcObjBase_c::create(fProfile::OBJ_BUBBLE, roomid, 0x4, &spawnPos, nullptr, nullptr, 0xFFFFFFFF);
@@ -236,7 +238,7 @@ void dTgReaction_c::checkForSlingBellowsItem() {
mVec3_c spawnPos = position;
spawnPos.y += field_0x4E4;
if (fn_578_DB0(spawnPos, uVar3)) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE); // TODO (Sound ID)
}
SceneflagManager::sInstance->setFlag(roomid, getSceneFlag());
onDelete();
@@ -282,11 +284,11 @@ bool dTgReaction_c::spawnHearts(s32 params, const mVec3_c &pos, s32 arg, mAng an
mAng offset = cM::rndRange(-tmp2, tmp2);
ang.y = mAng(step) + offset;
if (arg == 5) {
dAcItem_c::spawnItem(/* HEART */ 0x6, roomid, pos, ang, 0xFFFFFFFF, 1);
dAcItem_c::spawnItem(ITEM_HEART, roomid, pos, ang, 0xFFFFFFFF, 1);
} else if (arg == 6) {
dAcItem_c::spawnItem(/* HEART */ 0x6, roomid, pos, ang, 0xFFFFFFFF, 0);
dAcItem_c::spawnItem(ITEM_HEART, roomid, pos, ang, 0xFFFFFFFF, 0);
} else {
dAcItem_c::spawnDrop(/* HEART */ 0x6, roomid, pos, ang);
dAcItem_c::spawnDrop(ITEM_HEART, roomid, pos, ang);
}
step = mAng(step) - stepSize;
}
-1
View File
@@ -3,7 +3,6 @@
#include "m/m_vec.h"
#include "s/s_Math.h"
SPECIAL_ACTOR_PROFILE(TUMBLE_WEED_TAG, dTgTumbleWeed_c, fProfile::TUMBLE_WEED_TAG, 0x0244, 0, 0);
STATE_DEFINE(dTgTumbleWeed_c, AreaOut);
+409
View File
@@ -0,0 +1,409 @@
#include "d/a/d_a_item.h"
#include "common.h"
#include "d/a/d_a_itembase.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/flag_index.h"
#include "f/f_list_mg.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/file_manager.h"
const ItemFlagStruct dAcItemBase_c::sDefaultFlagStruct = {0x28, 0x3C, 0x1E, 0xFF, 0x0000, 0x02, 0x01};
const ItemFlagStruct dAcItemBase_c::sItemFlagStructs[167] = {
{0x28, 0x3c, 0x1e, 0xff, 0x0001, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0002, 0x02, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0003, 0x02, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0004, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0005, 0x02, 0x00},
{0x32, 0x46, 0x1e, 0xff, 0x0006, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0007, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0008, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0009, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0010, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0011, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0013, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0014, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0015, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x001c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0020, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0021, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0022, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0023, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0024, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0028, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0029, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x002a, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x002b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0046, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0030, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0031, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0002, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0033, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0034, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0035, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0036, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0037, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0038, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0039, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x003c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0041, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0042, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0044, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0046, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0047, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0048, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004b, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004d, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0051, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0054, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0055, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0056, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0057, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0058, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005a, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005b, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005d, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x005e, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x005f, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0060, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0061, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0062, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0063, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0064, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0065, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0066, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0067, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0068, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0069, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0070, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0071, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0072, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0074, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0075, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0076, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0077, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0078, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0079, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0080, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0081, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0082, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0083, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0084, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0085, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0086, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0087, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0088, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0089, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x008a, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x008c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0x00, 0x008d, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x01, 0x008e, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x02, 0x007a, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x03, 0x0090, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x04, 0x0091, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x05, 0x0092, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x06, 0x0093, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x07, 0x0094, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x08, 0x0095, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x09, 0x0096, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0a, 0x0097, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0b, 0x0098, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0099, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x009e, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x009f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00a0, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0x0c, 0x02f1, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0d, 0x02f2, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0e, 0x02f3, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0f, 0x02f4, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x10, 0x02f5, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x11, 0x02f6, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x12, 0x02f7, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x13, 0x02f8, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x14, 0x02f9, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x15, 0x02fa, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x16, 0x02fb, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x17, 0x02fc, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x18, 0x02fd, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x19, 0x02fe, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x1a, 0x02ff, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x1b, 0x0300, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00b1, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b2, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b3, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b4, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00ba, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bb, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bc, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bd, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00be, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bf, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c0, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c1, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c2, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c3, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c4, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c5, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00c6, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00c7, 0x00, 0x00},
};
const u32 dAcItemBase_c::sItemTypeFlags[MAX_ITEM_ID - 1] = {
0x2000, 0x0, 0x3000, 0x3000, 0x0, 0x1000, 0x3000, 0x3000, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
0x1000, 0x1000, 0x1000, 0x0, 0x0, 0x1000, 0x1000, 0x1000, 0x3000, 0x3000, 0x3000, 0x1000, 0x1000, 0x1000,
0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x0, 0x2, 0x1000, 0x1000, 0x1000, 0x3000, 0x0,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x3000, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3002, 0x3002,
0x1000, 0x3000, 0x0, 0x0, 0x0, 0x3000, 0x3000, 0x3000, 0x0, 0x220, 0x220, 0x1000, 0x1000, 0x0,
0x10, 0x1000, 0x0, 0x0, 0x2, 0x1000, 0x1000, 0x1000, 0x10, 0x20, 0x0, 0x20, 0x0, 0x0,
0x111, 0x111, 0x11, 0x11, 0x120, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x0, 0x1000, 0x1000, 0x1000,
0x0, 0x1000, 0x121, 0x2, 0x2, 0x222, 0x4, 0x1000, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x1000,
0x1000, 0x0, 0x0, 0x3, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x1120,
0x110, 0x110, 0x101, 0x202, 0x203, 0x300, 0x400, 0x500, 0x201, 0x302, 0x303, 0x1000, 0x1000, 0x1000,
0x1000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x21,
0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000,
0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0, 0x0, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x110, 0x110,
0x110, 0x0, 0x1000, 0x4, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0,
0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF,
0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0,
};
bool dAcItemBase_c::isValidItemTypeIdx(int itemId) {
return itemId < ARRAY_LENGTH(sItemTypeFlags);
}
bool dAcItemBase_c::getItemTypeFromId(u16 itemID, u32 *pOutType) {
bool valid = isValidItemTypeIdx(itemID);
if (valid) {
*pOutType = sItemTypeFlags[itemID];
}
return valid;
}
bool dAcItemBase_c::getItemAnimType(u16 itemId, u32 *pOutType) {
u32 type;
bool valid = getItemTypeFromId(itemId, &type);
if (valid) {
*pOutType = type >> 12 & 0xF;
}
return valid;
}
int dAcItemBase_c::getHeartContainerHeartIncrease() {
return 1;
}
int dAcItemBase_c::getCompletedHeartPieceHeartIncrease() {
return 1;
}
u8 dAcItemBase_c::getTearIdx(int tearNum) {
return tearNum / 15;
}
bool dAcItemBase_c::getFlagIdxForTear(int tearNum, u32 *pOutFlag) {
u8 idx = getTearIdx(tearNum);
if (idx == 0) {
*pOutFlag = 0xd;
return true;
} else if (idx == 1) {
*pOutFlag = 0xe;
return true;
} else {
return false;
}
}
u16 dAcItemBase_c::getTearBit(int tearNum) {
return 1 << tearNum % 15;
}
bool dAcItemBase_c::setDungeonFlagForTear(int tearNum) {
u32 flag_idx;
if (!getFlagIdxForTear(tearNum, &flag_idx)) {
return false;
}
// idk
int idx = DungeonflagManager::sInstance->mStageIndex;
const u16 *pData = FileManager::sInstance->getDungeonFlagsConst() + ((idx & 0x1FFF) * 4);
u32 counterMask = DungeonflagManager::sInstance->mpFlagIndex->getCounterOrFlag(flag_idx, pData, 8);
u32 tearMask = getTearBit(tearNum);
DungeonflagManager::sInstance->setToValue(flag_idx, tearMask | counterMask);
return true;
}
u16 dAcItemBase_c::getItemId() {
return mId;
}
// TODO: Incorrect location
bool isItemThatHasStruct(u16 itemId) {
return itemId;
}
// TODO: Incorrect location
u16 getIndex(u16 itemId) {
return itemId;
}
// TODO: Incorrect location
// const ItemFlagStruct *getItemFlagStruct(u16 itemId) {
// if (isItemThatHasStruct(itemId)) {
// return &sItemFlagStructs[getIndex(itemId)];
// } else {
// return &sDefaultFlagStruct;
// }
// }
fLiMgBa_c dAcItem_c::sItemList;
SPECIAL_ACTOR_PROFILE(ITEM, dAcItem_c, fProfile::ITEM, 0x2B, 0, 2);
STATE_DEFINE(dAcItem_c, Wait);
STATE_DEFINE(dAcItem_c, Carry);
STATE_DEFINE(dAcItem_c, GetBeetle);
STATE_DEFINE(dAcItem_c, WaitGet);
STATE_DEFINE(dAcItem_c, Get);
STATE_DEFINE(dAcItem_c, WaitGetDemo);
STATE_DEFINE(dAcItem_c, WaitForcedGetDemo);
STATE_DEFINE(dAcItem_c, GetDemo);
STATE_DEFINE(dAcItem_c, WaitTBoxGetDemo);
STATE_DEFINE(dAcItem_c, ResurgeWait);
STATE_DEFINE(dAcItem_c, WaitTurnOff);
STATE_DEFINE(dAcItem_c, WaitSacredDewGetEffect);
dAcItem_c::dAcItem_c()
: mStateMgr(*this, sStateID::null), mEff_0x8F4(this), mEff_0x928(this), mEff_0x95C(this), mEff_0x990(this),
mEff_0x9C4(this), mEff_0x9F8(this), mEff_0xA2C(this), mEff_0xA60(this), mNode(this),
mEventRelated(*this, nullptr), mDowsingTarget(this, DowsingTarget::SLOT_NONE), mItemQueuePrev(nullptr),
mItemQueueNext(nullptr) {
mField_0xCD8 = 1.0f;
mBaseScale = 1.0f;
mCurrentScale = 1.0f;
mField_0xCE4 = 1.0f;
mField_0xCE8 = 1.0f;
mField_0xCEC = 1.0f;
mItemFlags = 0;
mField_0xD4C = 0;
mbNoDespawn = false;
mbNoGravity = false;
mField_0xD51 = 0;
mField_0xD56 = 0;
mbShowItemLighting = false;
mField_0xD62 = 0;
mField_0xD63 = 0;
mField_0xD65 = 0;
mField_0xD66 = 0;
sItemList.append(&mNode);
unkByteTargetFiRelated = 3;
}
dAcItem_c::~dAcItem_c() {
delete mField_0xB3C;
for (int i = 0; i < 2; i++) {
delete mField_0xB34[i];
}
mDowsingTarget.doUnregister();
}
void dAcItem_c::initializeState_Wait() {}
void dAcItem_c::executeState_Wait() {}
void dAcItem_c::finalizeState_Wait() {}
void dAcItem_c::initializeState_Carry() {}
void dAcItem_c::executeState_Carry() {}
void dAcItem_c::finalizeState_Carry() {}
void dAcItem_c::initializeState_GetBeetle() {}
void dAcItem_c::executeState_GetBeetle() {}
void dAcItem_c::finalizeState_GetBeetle() {}
void dAcItem_c::initializeState_WaitGet() {}
void dAcItem_c::executeState_WaitGet() {}
void dAcItem_c::finalizeState_WaitGet() {}
void dAcItem_c::initializeState_Get() {}
void dAcItem_c::executeState_Get() {}
void dAcItem_c::finalizeState_Get() {}
void dAcItem_c::initializeState_WaitGetDemo() {}
void dAcItem_c::executeState_WaitGetDemo() {}
void dAcItem_c::finalizeState_WaitGetDemo() {}
void dAcItem_c::initializeState_WaitForcedGetDemo() {}
void dAcItem_c::executeState_WaitForcedGetDemo() {}
void dAcItem_c::finalizeState_WaitForcedGetDemo() {}
void dAcItem_c::initializeState_GetDemo() {}
void dAcItem_c::executeState_GetDemo() {}
void dAcItem_c::finalizeState_GetDemo() {}
void dAcItem_c::initializeState_WaitTBoxGetDemo() {}
void dAcItem_c::executeState_WaitTBoxGetDemo() {}
void dAcItem_c::finalizeState_WaitTBoxGetDemo() {}
void dAcItem_c::initializeState_ResurgeWait() {}
void dAcItem_c::executeState_ResurgeWait() {}
void dAcItem_c::finalizeState_ResurgeWait() {}
void dAcItem_c::initializeState_WaitTurnOff() {}
void dAcItem_c::executeState_WaitTurnOff() {}
void dAcItem_c::finalizeState_WaitTurnOff() {}
void dAcItem_c::initializeState_WaitSacredDewGetEffect() {}
void dAcItem_c::executeState_WaitSacredDewGetEffect() {}
void dAcItem_c::finalizeState_WaitSacredDewGetEffect() {}
+7 -6
View File
@@ -1,5 +1,6 @@
#include "toBeSorted/counters/counter.h"
#include "d/a/d_a_item.h"
#include "d/flag/itemflag_manager.h"
#include "toBeSorted/counters/counter.h"
static u16 getBaseCapacity();
static u16 getExtraWalletCapacity();
@@ -21,10 +22,10 @@ struct WalletStruct {
/* 8016DE10 */ static u16 getBaseCapacity() {
int i = 0;
/* 804E91B0 */ WalletStruct wallet_definitions[4] = {
{0x6c, 500},
{0x6d, 1000},
{0x6e, 5000},
{0x6f, 9000},
{ITEM_MEDIUM_WALLET, 500},
{ ITEM_BIG_WALLET, 1000},
{ ITEM_GIANT_WALLET, 5000},
{ITEM_TYCOON_WALLET, 9000},
};
const WalletStruct *wallet = &wallet_definitions[3];
for (; i < 4; i++, wallet--) {
@@ -39,7 +40,7 @@ struct WalletStruct {
extern "C" u16 getCounterByIndex(u16);
/* 8016DEC0 */ static u16 getExtraWalletCapacity() {
return 300 * getCounterByIndex(0x27);
return 300 * getCounterByIndex(0x27); // Maybe 0x27 corresponds to item 27 -> small wallet?
}
/* 80575610 */ RupeeCounter RUPEE_COUNTER;
+10 -8
View File
@@ -1,19 +1,18 @@
#include "toBeSorted/dowsing_target.h"
#include "c/c_math.h"
#include "m/m_mtx.h"
#include "d/flag/itemflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "m/m_mtx.h"
#include "toBeSorted/tlist.h"
typedef TList<DowsingTarget, offsetof(DowsingTarget, mLink)> DowsingList;
DowsingList DOWSING_LISTS[8];
static const int DOWSING_TARGET_STORY_FLAGS[8] = {
100, 105, 100, 104, 108, 110, 109, 102,
};
}; // TODO (Story Flag ID)
DowsingTarget::~DowsingTarget() {
doUnregister();
@@ -56,6 +55,8 @@ void DowsingTarget::getPosition(mVec3_c &position) {
PSMTXMultVec(mtx.m, mOffset, position);
}
// TODO (Story Flag IDs)
bool DowsingTarget::hasZeldaDowsing() {
return StoryflagManager::sInstance->getCounterOrFlag(100);
}
@@ -73,14 +74,15 @@ bool DowsingTarget::hasDesertNodeDowsing() {
}
inline bool checkTrial(u16 itemflag, u16 storyflag) {
return (ItemflagManager::sInstance->getFlagDirect(itemflag) && !StoryflagManager::sInstance->getCounterOrFlag(storyflag)) ? true : false;
return (ItemflagManager::sInstance->getFlagDirect(itemflag) &&
!StoryflagManager::sInstance->getCounterOrFlag(storyflag)) ?
true :
false;
}
// TODO (Story Flag IDs) (you get the point lmao)
bool DowsingTarget::hasAnyTrialDowsing() {
return checkTrial(187, 93) ||
checkTrial(188, 97) ||
checkTrial(189, 98) ||
checkTrial(193, 99);
return checkTrial(187, 93) || checkTrial(188, 97) || checkTrial(189, 98) || checkTrial(193, 99);
}
bool DowsingTarget::hasSacredWaterDowsing() {
+8 -6
View File
@@ -6,6 +6,7 @@
// clang-format off
#include "sized_string.h"
#include "toBeSorted/dowsing_target.h"
// clang-format on
// This class here makes no sense and the name might
@@ -111,14 +112,15 @@ u16 *FileManager::getStoryFlagsMut() {
if (fileNum != 0) {
file = &mFileB;
}
file->new_file = 0;
file->health_capacity = 0x18;
file->unused_heart_related = 0x18;
file->current_health = 0x18;
file->health_capacity = 24; // 6 hearts * 4 quarters
file->unused_heart_related = 24;
file->current_health = 24;
file->shield_pouch_slot = 8;
file->equipped_b_item = 0xb;
file->selectedDowsingSlot = 0x8;
file->lastUsedPouchItemSlot = 0x8;
file->equipped_b_item = 0xb; // TODO (B Wheel Id)
file->selectedDowsingSlot = DowsingTarget::SLOT_NONE;
file->lastUsedPouchItemSlot = 8;
SizedString<32> buf;
buf = "F405";
+11 -35
View File
@@ -3,8 +3,9 @@
#include "c/c_lib.h"
#include "c/c_math.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
@@ -366,34 +367,11 @@ const LowHealthReplacement LOW_HEALTH_REPLACEMENTS[] = {
},
};
// TODO: Convert to enum once work on items has started
static const u16 SPECIAL_ITEM_ARRAY[] = {
0, // None
6, // Heart
6, // Heart
2, // Green Rupee
3, // Blue Rupee
4, // Red Rupee
0x2b, // Farore Tear
0x28, // 5 Bombs
0x29, // 10 Bombs
7, // Single Arrow
8, // Bundle Arrows
0x39, // 5 Deku Seeds
0, // None
0, // None
0x1c, // ET Key Piece
0xa5, // Eldin Ore
58, // ???
59, // ???
183, // ???
184, // ???
185, // ???
72, // Fairy
72, // Fairy
1, // Small Key
34, // Rupoor
};
int SPECIAL_ITEM_ARRAY[] = {ITEM_NONE, ITEM_HEART, ITEM_HEART, ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE,
ITEM_RED_RUPEE, ITEM_FARORE_TEAR, ITEM_5_BOMBS, ITEM_10_BOMBS, ITEM_SINGLE_ARROW,
ITEM_BUNDLE_ARROWS, ITEM_5_DEKU_SEEDS, ITEM_NONE, ITEM_NONE, ITEM_KEY_PIECE,
ITEM_ELDIN_ORE, ITEM_UNK_58, ITEM_UNK_59, ITEM_UNK_183, ITEM_UNK_184,
ITEM_UNK_185, ITEM_FAIRY, ITEM_FAIRY, ITEM_SMALL_KEY, ITEM_RUPOOR};
static const u32 sNumDropEntries = 0x36;
static const struct {
@@ -403,8 +381,7 @@ static const struct {
0x36,
sList,
};
static const u16 RAND_RUPEE_ARRAY[] = {2, 3, 4};
static const int RAND_RUPEE_ARRAY[3] = {ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE, ITEM_RED_RUPEE};
extern "C" int getCurrentBowType();
extern "C" int getCurrentSlingshotType();
@@ -435,7 +412,7 @@ int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) {
} else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && isHeroMode()) {
// Hearts generally don't drop on Hero Mode unless it's a special kind of heart (which?)
weight = 0;
} else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(/* Bomb Bag */ 92)) {
} else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(ITEM_BOMB_BAG)) {
// Bombs won't drop until you get the Bomb Bag
weight = 0;
}
@@ -487,15 +464,14 @@ int SpecialItemDropMgr::giveSpecialDropItem(
bool ret = spawnSpecialDropItem(specialItemId, roomid, pos, subtype, rot);
if (shouldTryExtraHearts(specialItemId)) {
for (u32 i = 0; i < adventurePouchCountItem(/* HEART_MEDAL */ 100); i++) {
for (u32 i = 0; i < adventurePouchCountItem(ITEM_HEART_MEDAL); i++) {
bool ok = spawnSpecialDropItem(0x27, roomid, pos, subtype, rot);
ret |= ok;
}
}
if (shouldTryExtraRupees(specialItemId)) {
for (u32 i = 0;
i < adventurePouchCountItem(/* RUPEE_MEDAL */ 101) + adventurePouchCountItem(/* CURSED_MEDAL */ 104);
for (u32 i = 0; i < adventurePouchCountItem(ITEM_RUPEE_MEDAL) + adventurePouchCountItem(ITEM_CURSED_MEDAL);
i++) {
bool ok = spawnSpecialDropItem(0x28, roomid, pos, subtype, rot);
ret |= ok;