Updated CVar to reflect CVar rework values.

Added `IsCheckShuffled` as preliminary function for checking *only* if a check is shuffled, not necessarily if it is just visible on the tracker. This accounts for the difference between tokensanity and "Always Show GS On Tracker", where you don't want to obfuscate the latter.
This commit is contained in:
Malkierian 2024-02-16 22:54:36 -07:00
parent 710a1535ad
commit 751f02fcd1
14 changed files with 42 additions and 29 deletions

View File

@ -5404,7 +5404,7 @@ CustomMessage Randomizer::GetMerchantMessage(RandomizerInf randomizerInf, u16 te
RandomizerCheck rc = GetCheckFromRandomizerInf(randomizerInf);
RandomizerGet shopItemGet = this->itemLocations[rc].rgID;
std::array<std::string, LANGUAGE_MAX> shopItemName;
if (mysterious || CVarGetInteger("gMysteriousShuffle", 0)) {
if (mysterious || CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0)) {
if (randomizerInf >= RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1 && randomizerInf <= RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8) {
shopItemName = {
"Mysterious Item",

View File

@ -1160,7 +1160,7 @@ void LoadSettings() {
}
}
bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
bool IsCheckShuffled(RandomizerCheckObject rcObj) {
if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LOGIC_RULES) != RO_LOGIC_VANILLA) {
return
(rcObj.rcArea != RCAREA_INVALID) && // don't show Invalid locations
@ -1173,7 +1173,7 @@ bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
rcObj.vOrMQ == RCVORMQ_MQ && OTRGlobals::Instance->gRandomizer->masterQuestDungeons.contains(rcObj.sceneId) ||
rcObj.vOrMQ == RCVORMQ_VANILLA && !OTRGlobals::Instance->gRandomizer->masterQuestDungeons.contains(rcObj.sceneId)
) &&
(rcObj.rcType != RCTYPE_SHOP || (showShops && (!hideShopRightChecks || hideShopRightChecks && rcObj.actorParams > 0x03))) &&
(rcObj.rcType != RCTYPE_SHOP || (showShops && rcObj.actorParams > 0x03)) &&
(rcObj.rcType != RCTYPE_SCRUB ||
showScrubs ||
rcObj.rc == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || // The 3 scrubs that are always randomized
@ -1182,7 +1182,7 @@ bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
) &&
(rcObj.rcType != RCTYPE_MERCHANT || showMerchants) &&
(rcObj.rcType != RCTYPE_OCARINA || showOcarinas) &&
(rcObj.rcType != RCTYPE_SKULL_TOKEN || alwaysShowGS ||
(rcObj.rcType != RCTYPE_SKULL_TOKEN ||
(showOverworldTokens && RandomizerCheckObjects::AreaIsOverworld(rcObj.rcArea)) ||
(showDungeonTokens && RandomizerCheckObjects::AreaIsDungeon(rcObj.rcArea))
) &&
@ -1202,6 +1202,7 @@ bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
(rcObj.rcType != RCTYPE_BOSS_KEY || showBossKeysanity) &&
(rcObj.rcType != RCTYPE_GANON_BOSS_KEY || showGanonBossKey) &&
(rcObj.rc != RC_KAK_100_GOLD_SKULLTULA_REWARD || show100SkullReward) &&
(rcObj.rc != RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS) &&
(rcObj.rcType != RCTYPE_GF_KEY && rcObj.rc != RC_GF_GERUDO_MEMBERSHIP_CARD ||
(showGerudoCard && rcObj.rc == RC_GF_GERUDO_MEMBERSHIP_CARD) ||
(fortressNormal && showGerudoFortressKeys && rcObj.rcType == RCTYPE_GF_KEY) ||
@ -1217,6 +1218,10 @@ bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
return false;
}
bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj) {
return IsCheckShuffled(rcObj) || (rcObj.rcType == RCTYPE_SKULL_TOKEN && alwaysShowGS) || (rcObj.rcType == RCTYPE_SHOP && (showShops && (!hideShopRightChecks)));
}
void UpdateInventoryChecks() {
//For all the areas with compasses, if you have one, spoil the area
for (auto [scene, area] : DungeonRCAreasBySceneID) {
@ -1384,7 +1389,7 @@ void DrawLocation(RandomizerCheckObject rcObj) {
//Draw the extra info
txt = "";
bool mystery = CVarGetInteger("gMysteriousShuffle", 0) && OTRGlobals::Instance->gRandomizer->merchantPrices.contains(rcObj.rc);
bool mystery = CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && OTRGlobals::Instance->gRandomizer->merchantPrices.contains(rcObj.rc);
if (checkData.hintItem != 0) {
// TODO hints

View File

@ -49,6 +49,7 @@ void DefaultCheckData(RandomizerCheck rc);
void Teardown();
void UpdateAllOrdering();
bool IsVisibleInCheckTracker(RandomizerCheckObject rcObj);
bool IsCheckShuffled(RandomizerCheckObject check);
void InitTrackerData(bool isDebug);
RandomizerCheckArea GetCheckArea();
void UpdateCheck(uint32_t, RandomizerCheckTrackerData);

View File

@ -138,7 +138,7 @@ Color_RGB8 kokiriColor = { 0x1E, 0x69, 0x1B };
Color_RGB8 goronColor = { 0x64, 0x14, 0x00 };
Color_RGB8 zoraColor = { 0x00, 0xEC, 0x64 };
static GetItemEntry GetItemMystery = { ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, NULL, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem };
extern "C" GetItemEntry GetItemMystery = { ITEM_NONE_FE, 0, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, NULL, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem };
float previousImGuiScale;
@ -2426,6 +2426,10 @@ extern "C" bool Randomizer_IsVisibleInCheckTracker(RandomizerCheck check) {
return CheckTracker::IsVisibleInCheckTracker(RandomizerCheckObjects::GetAllRCObjects().find(check)->second);
}
extern "C" bool Randomizer_IsCheckShuffled(RandomizerCheck randomizerCheck) {
return CheckTracker::IsCheckShuffled(RandomizerCheckObjects::GetAllRCObjects().find(randomizerCheck)->second);
}
CustomMessage Randomizer_GetCustomGetItemMessage(Player* player) {
s16 giid;
if (player->getItemEntry.objectId != OBJECT_INVALID) {

View File

@ -65,9 +65,8 @@ private:
uint32_t IsGameMasterQuest();
#endif
static GetItemEntry GetItemMystery;
#ifndef __cplusplus
GetItemEntry GetItemMystery;
void InitOTR(void);
void DeinitOTR(void);
void VanillaItemTable_Init();
@ -168,6 +167,7 @@ GetItemEntry Randomizer_GetItemFromActorWithoutObtainabilityCheck(s16 actorId, s
GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
GetItemEntry Randomizer_GetItemFromKnownCheckWithoutObtainabilityCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
bool Randomizer_IsVisibleInCheckTracker(RandomizerCheck check);
bool Randomizer_IsCheckShuffled(RandomizerCheck check);
ItemObtainability Randomizer_GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck);
int CustomMessage_RetrieveIfExists(PlayState* play);
void Overlay_DisplayText(float duration, const char* text);

View File

@ -1971,7 +1971,7 @@ void DrawRandomizerMenu() {
"Play unique fanfares when obtaining quest items "
"(medallions/stones/songs). Note that these fanfares are longer than usual."
);
UIWidgets::PaddedEnhancementCheckbox("Mysterious Shuffled Items", "gMysteriousShuffle", true, false);
UIWidgets::PaddedEnhancementCheckbox("Mysterious Shuffled Items", "gRandoEnhancements.MysteriousShuffle", true, false);
UIWidgets::Tooltip(
"Displays a \"Mystery Item\" model in place of any freestanding/GS/shop items that were shuffled, "
"and replaces item names for them and scrubs and merchants, regardless of hint settings, "

View File

@ -1367,7 +1367,8 @@ void EnItem00_DrawCollectible(EnItem00* this, PlayState* play) {
Randomizer_GetCheckFromActor(this->actor.id, play->sceneNum, this->ogParams);
if (randoCheck != RC_UNKNOWN_CHECK) {
this->randoGiEntry = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(randoCheck, GI_NONE);
this->randoGiEntry = CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(randoCheck)
? GetItemMystery : Randomizer_GetItemFromKnownCheck(randoCheck, GI_NONE);
this->randoGiEntry.getItemFrom = ITEM_FROM_FREESTANDING;
}
@ -1460,7 +1461,8 @@ void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play) {
Randomizer_GetCheckFromActor(this->actor.id, play->sceneNum, this->ogParams);
if (randoCheck != RC_UNKNOWN_CHECK) {
this->randoGiEntry = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(randoCheck, GI_NONE);
this->randoGiEntry = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(randoCheck))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(randoCheck, GI_NONE);
this->randoGiEntry.getItemFrom = ITEM_FROM_FREESTANDING;
}

View File

@ -2088,7 +2088,8 @@ void DemoEffect_DrawGetItem(Actor* thisx, PlayState* play) {
return;
}
if (IS_RANDO && play->sceneNum == SCENE_JABU_JABU) {
GetItemEntry getItemEntry = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_BARINADE, RG_ZORA_SAPPHIRE);
GetItemEntry getItemEntry = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_BARINADE))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_BARINADE, RG_ZORA_SAPPHIRE);
this->getItem.drawId = getItemEntry.gid;
func_8002EBCC(thisx, play, 0);
func_8002ED80(thisx, play, 0);

View File

@ -515,14 +515,17 @@ void EnExItem_DrawItems(EnExItem* this, PlayState* play) {
switch (this->type) {
case EXITEM_BOMB_BAG_BOWLING:
case EXITEM_BOMB_BAG_COUNTER:
randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20);
randoGetItem = (CVarGetInteger("gEnhancement.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20);
break;
case EXITEM_BOMBCHUS_BOWLING:
case EXITEM_BOMBCHUS_COUNTER:
randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10);
randoGetItem = (CVarGetInteger("gEnhancement.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10);
break;
case EXITEM_BULLET_BAG:
randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
randoGetItem = (CVarGetInteger("gEnhancement.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_LW_TARGET_IN_WOODS))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
break;
}
@ -540,8 +543,8 @@ void EnExItem_DrawHeartPiece(EnExItem* this, PlayState* play) {
func_8002ED80(&this->actor, play, 0);
if (IS_RANDO) {
GetItemEntry randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery :
Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, GI_HEART_PIECE);
GetItemEntry randoGetItem = (CVarGetInteger("gEnhancement.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE))
? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, GI_HEART_PIECE);
EnItem00_CustomItemsParticles(&this->actor, play, randoGetItem);
GetItemEntry_Draw(play, randoGetItem);
} else {

View File

@ -1287,7 +1287,7 @@ void EnGirlA_InitializeItemAction(EnGirlA* this, PlayState* play) {
this->giDrawId = getItemEntry.gid;
// Correct the rotation for spiritual stones, but only if mysterious shuffle isn't on, else it's obvious what's there in shops
if (!CVarGetInteger("gMysteriousShuffle", 0) && (getItemEntry.getItemId >= RG_KOKIRI_EMERALD && getItemEntry.getItemId <= RG_ZORA_SAPPHIRE)) {
if (!CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && (getItemEntry.getItemId >= RG_KOKIRI_EMERALD && getItemEntry.getItemId <= RG_ZORA_SAPPHIRE)) {
this->actor.shape.rot.y = this->actor.shape.rot.y + 20000;
}
}
@ -1332,11 +1332,11 @@ void EnGirlA_Draw(Actor* thisx, PlayState* play) {
if (this->actor.params == SI_RANDOMIZED_ITEM) {
ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->randoSlotIndex);
GetItemEntry getItemEntry = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery :
GetItemEntry getItemEntry = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && this->actor.params == SI_RANDOMIZED_ITEM) ? GetItemMystery :
Randomizer_GetItemFromKnownCheckWithoutObtainabilityCheck(shopItemIdentity.randomizerCheck, shopItemIdentity.ogItemId);
EnItem00_CustomItemsParticles(&this->actor, play, getItemEntry);
GetItemEntry_Draw(play, getItemEntry, shopItemIdentity.randomizerCheck);
GetItemEntry_Draw(play, getItemEntry);
return;
}

View File

@ -214,7 +214,7 @@ void EnSi_Draw(Actor* thisx, PlayState* play) {
GetItem_Draw(play, GID_SKULL_TOKEN_2);
} else {
RandomizerCheck check = Randomizer_GetCheckFromActor(this->actor.id, play->sceneNum, this->actor.params);
getItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(check, GI_SKULL_TOKEN);
getItem = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(check)) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(check, GI_SKULL_TOKEN);
EnItem00_CustomItemsParticles(&this->actor, play, getItem);
if (getItem.itemId != ITEM_SKULL_TOKEN) {
f32 mtxScale = 1.5f;

View File

@ -100,7 +100,7 @@ void ItemBHeart_Draw(Actor* thisx, PlayState* play) {
if (IS_RANDO) {
RandomizerCheck check = Randomizer_GetCheckFromActor(this->actor.id, play->sceneNum, this->actor.params);
GetItemEntry_Draw(play, CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(check, GI_HEART_CONTAINER_2), check);
GetItemEntry_Draw(play, (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(check)) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(check, GI_HEART_CONTAINER_2), check);
} else {
if (flag) {
Gfx_SetupDL_25Xlu(play->state.gfxCtx);

View File

@ -231,7 +231,7 @@ void ItemEtcetera_DrawThroughLens(Actor* thisx, PlayState* play) {
if(IS_RANDO && play->sceneNum == SCENE_TREASURE_BOX_SHOP) {
RandomizerCheck check = RC_MAX;
GetItemEntry randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : GetChestGameRandoGetItem(this->actor.room, this->giDrawId, play);
GetItemEntry randoGetItem = GetChestGameRandoGetItem(this->actor.room, this->giDrawId, play); //TODO Rando: add mysterious shuffle when chest minigame keys get shuffled
EnItem00_CustomItemsParticles(&this->actor, play, randoGetItem);
if (randoGetItem.itemId != ITEM_NONE) {
GetItemEntry_Draw(play, randoGetItem);
@ -249,13 +249,10 @@ void ItemEtcetera_Draw(Actor* thisx, PlayState* play) {
if (IS_RANDO) {
GetItemEntry randoGetItem = (GetItemEntry)GET_ITEM_NONE;
RandomizerCheck check = RC_MAX;
if (type == ITEM_ETC_ARROW_FIRE) {
check = RC_LH_SUN;
randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LH_SUN, GI_ARROW_FIRE);
randoGetItem = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_LH_SUN)) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LH_SUN, GI_ARROW_FIRE);
} else if (type == ITEM_ETC_LETTER) {
check = RC_LH_UNDERWATER_ITEM;
randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LH_UNDERWATER_ITEM, GI_LETTER_RUTO);
randoGetItem = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_LH_UNDERWATER_ITEM)) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_LH_UNDERWATER_ITEM, GI_LETTER_RUTO);
}
EnItem00_CustomItemsParticles(&this->actor, play, randoGetItem);

View File

@ -215,7 +215,7 @@ void ItemOcarina_Draw(Actor* thisx, PlayState* play) {
func_8002ED80(thisx, play, 0);
if (IS_RANDO) {
GetItemEntry randoGetItem = CVarGetInteger("gEnhancement.MysteriousShuffle", 0) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_HF_OCARINA_OF_TIME_ITEM, GI_OCARINA_OOT);
GetItemEntry randoGetItem = (CVarGetInteger("gRandoEnhancements.MysteriousShuffle", 0) && Randomizer_IsCheckShuffled(RC_HF_OCARINA_OF_TIME_ITEM)) ? GetItemMystery : Randomizer_GetItemFromKnownCheck(RC_HF_OCARINA_OF_TIME_ITEM, GI_OCARINA_OOT);
EnItem00_CustomItemsParticles(&this->actor, play, randoGetItem);
GetItemEntry_Draw(play, randoGetItem);
return;