mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-27 08:47:30 -04:00
Fix item tracker fishing pole & roc's feather (#7103)
ITEM_ cases should not be mixed into RG_ cases
This commit is contained in:
@@ -1958,6 +1958,7 @@ std::map<RandomizerGet, uint32_t> StaticData::RandoGetToRandInf = {
|
||||
{ RG_SPEAK_KOKIRI, RAND_INF_CAN_SPEAK_KOKIRI },
|
||||
{ RG_SPEAK_ZORA, RAND_INF_CAN_SPEAK_ZORA },
|
||||
{ RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND },
|
||||
{ RG_ROCS_FEATHER, RAND_INF_OBTAINED_ROCS_FEATHER },
|
||||
{ RG_GUARD_HOUSE_KEY, RAND_INF_GUARD_HOUSE_KEY_OBTAINED },
|
||||
{ RG_MARKET_BAZAAR_KEY, RAND_INF_MARKET_BAZAAR_KEY_OBTAINED },
|
||||
{ RG_MARKET_POTION_SHOP_KEY, RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED },
|
||||
|
||||
@@ -436,8 +436,6 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
|
||||
} else {
|
||||
return Flags_GetRandomizerInf(RAND_INF_OBTAINED_NAYRUS_LOVE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN;
|
||||
}
|
||||
case RG_ROCS_FEATHER:
|
||||
return Flags_GetRandomizerInf(RAND_INF_OBTAINED_ROCS_FEATHER) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN;
|
||||
|
||||
// Bottles
|
||||
case RG_EMPTY_BOTTLE:
|
||||
@@ -1166,7 +1164,6 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
if (Rando::StaticData::RandoGetToRandInf.find(item) != Rando::StaticData::RandoGetToRandInf.end()) {
|
||||
Flags_SetRandomizerInf((RandomizerInf)Rando::StaticData::RandoGetToRandInf.find(item)->second);
|
||||
if (item == RG_SKELETON_KEY) {
|
||||
Flags_SetRandomizerInf(RAND_INF_HAS_SKELETON_KEY);
|
||||
// This isn't technically necessary, because keys will no longer be consumed,
|
||||
// but for the player's sanity we display that they _have_ keys.
|
||||
for (Rando::DungeonInfo* dungeon : Rando::Context::GetInstance()->GetDungeons()->GetDungeonList()) {
|
||||
@@ -1191,6 +1188,10 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
if (!ChildTradeSlotOccupied()) {
|
||||
INV_CONTENT(ITEM_TRADE_CHILD) = ITEM_LETTER_ZELDA;
|
||||
}
|
||||
} else if (item == RG_ROCS_FEATHER) {
|
||||
if (INV_CONTENT(ITEM_NAYRUS_LOVE) == ITEM_NONE) {
|
||||
INV_CONTENT(ITEM_NAYRUS_LOVE) = ITEM_ROCS_FEATHER;
|
||||
}
|
||||
} else if (item == RG_CHILD_WALLET &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
Rupees_ChangeBy(99);
|
||||
@@ -1421,12 +1422,6 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
INV_CONTENT(ITEM_NUT) = ITEM_NUT;
|
||||
AMMO(ITEM_NUT) = static_cast<int8_t>(CUR_CAPACITY(UPG_NUTS));
|
||||
break;
|
||||
case RG_ROCS_FEATHER:
|
||||
Flags_SetRandomizerInf(RAND_INF_OBTAINED_ROCS_FEATHER);
|
||||
if (INV_CONTENT(ITEM_NAYRUS_LOVE) == ITEM_NONE) {
|
||||
INV_CONTENT(ITEM_NAYRUS_LOVE) = ITEM_ROCS_FEATHER;
|
||||
}
|
||||
break;
|
||||
case RG_SHADOW_SILVER_BLADES:
|
||||
case RG_SHADOW_SILVER_PIT:
|
||||
case RG_SHADOW_SILVER_SPIKES:
|
||||
|
||||
@@ -887,7 +887,9 @@ bool HasBossSoul(RandomizerInf bossSoul) {
|
||||
void DrawItem(ItemTrackerItem item) {
|
||||
auto gui = std::dynamic_pointer_cast<Fast::Fast3dGui>(Ship::Context::GetRawInstance()->GetWindow()->GetGui());
|
||||
uint32_t actualItemId =
|
||||
GameInteractor::IsSaveLoaded() && item.kind == ITEM_KIND_ITEM ? INV_CONTENT(item.id) : (uint8_t)ITEM_NONE;
|
||||
GameInteractor::IsSaveLoaded() && item.kind == ITEM_KIND_ITEM && item.id < ARRAY_COUNT(gItemSlots)
|
||||
? INV_CONTENT(item.id)
|
||||
: (uint8_t)ITEM_NONE;
|
||||
float iconSize = static_cast<float>(CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36));
|
||||
bool hasItem = actualItemId != ITEM_NONE;
|
||||
bool hideMax = false;
|
||||
@@ -931,6 +933,17 @@ void DrawItem(ItemTrackerItem item) {
|
||||
actualItemId = item.id;
|
||||
hasItem = Flags_GetRandomizerInf(RAND_INF_GREG_FOUND);
|
||||
break;
|
||||
case ITEM_NAYRUS_LOVE:
|
||||
// Roc's Feather shares this slot, so the slot being filled isn't enough
|
||||
hasItem = IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_ROCS_FEATHER)
|
||||
? Flags_GetRandomizerInf(RAND_INF_OBTAINED_NAYRUS_LOVE)
|
||||
: actualItemId == ITEM_NAYRUS_LOVE;
|
||||
break;
|
||||
case ITEM_FISHING_POLE:
|
||||
actualItemId = item.id;
|
||||
hasItem = IS_RANDO && Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND);
|
||||
itemName = "Fishing Pole";
|
||||
break;
|
||||
case ITEM_NONE: // spacer, don't render
|
||||
return;
|
||||
}
|
||||
@@ -947,19 +960,6 @@ void DrawItem(ItemTrackerItem item) {
|
||||
(OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_TOTAL) > 0);
|
||||
itemName = "Triforce Piece";
|
||||
break;
|
||||
case ITEM_NAYRUS_LOVE:
|
||||
if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_ROCS_FEATHER)) {
|
||||
hasItem = Flags_GetRandomizerInf(RAND_INF_OBTAINED_NAYRUS_LOVE);
|
||||
} else if (!IS_RANDO) {
|
||||
// In non-rando, check if player has Roc's Feather in inventory
|
||||
for (int i = 0; i < 24; i++) {
|
||||
if (gSaveContext.inventory.items[i] == ITEM_ROCS_FEATHER) {
|
||||
hasItem = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RG_ROCS_FEATHER:
|
||||
itemName = "Roc's Feather";
|
||||
break;
|
||||
@@ -1064,10 +1064,6 @@ void DrawItem(ItemTrackerItem item) {
|
||||
case RG_OCARINA_C_RIGHT_BUTTON:
|
||||
itemName = "Ocarina C Right Button";
|
||||
break;
|
||||
case ITEM_FISHING_POLE:
|
||||
hasItem = IS_RANDO && Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND);
|
||||
itemName = "Fishing Pole";
|
||||
break;
|
||||
|
||||
case RG_GUARD_HOUSE_KEY:
|
||||
itemName = "Guard House Key";
|
||||
|
||||
Reference in New Issue
Block a user