summaryrefslogtreecommitdiff
path: root/mm/2s2h/Rando/ConvertItem.cpp
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2024-12-31 01:40:24 -0600
committerGarrett Cox <garrettjcox@gmail.com>2024-12-31 01:40:39 -0600
commit516b99e34f7add7bd51a5cfe046685a1d719faaa (patch)
treea7dfbdaf9397f51cb35e7c35dfeea4b769ea179f /mm/2s2h/Rando/ConvertItem.cpp
parentc5dd25582b0108deb8fadebc6c3c7ff196d804ba (diff)
Add CSMC for pots, fix some seed generation issues
Diffstat (limited to 'mm/2s2h/Rando/ConvertItem.cpp')
-rw-r--r--mm/2s2h/Rando/ConvertItem.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/mm/2s2h/Rando/ConvertItem.cpp b/mm/2s2h/Rando/ConvertItem.cpp
index da5ad23c5..656a79ef3 100644
--- a/mm/2s2h/Rando/ConvertItem.cpp
+++ b/mm/2s2h/Rando/ConvertItem.cpp
@@ -20,6 +20,8 @@ extern "C" {
extern GetItemEntry sGetItemTable[GI_MAX - 1];
}
+#define CAN_OWL_WARP(owlId) ((gSaveContext.save.saveInfo.playerData.owlActivationFlags >> owlId) & 1)
+
// ALRIGHT BUCKLE UP. This file is for converting items to their "obtainable" form. This is used for various reasons,
// and you don't always want to convert items, depending on the context. For example, if you're rendering ammo in a shop
// for an item you don't have yet, you don't want to convert it, because you want to show the player what they're
@@ -341,6 +343,26 @@ bool Rando::IsItemObtainable(RandoItemId randoItemId, RandoCheckId randoCheckId)
return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, DUNGEON_INDEX_STONE_TOWER_TEMPLE);
case RI_STONE_TOWER_MAP:
return !CHECK_DUNGEON_ITEM(DUNGEON_MAP, DUNGEON_INDEX_STONE_TOWER_TEMPLE);
+ case RI_OWL_CLOCK_TOWN_SOUTH:
+ return !CAN_OWL_WARP(OWL_WARP_CLOCK_TOWN);
+ case RI_OWL_GREAT_BAY_COAST:
+ return !CAN_OWL_WARP(OWL_WARP_GREAT_BAY_COAST);
+ case RI_OWL_IKANA_CANYON:
+ return !CAN_OWL_WARP(OWL_WARP_IKANA_CANYON);
+ case RI_OWL_MILK_ROAD:
+ return !CAN_OWL_WARP(OWL_WARP_MILK_ROAD);
+ case RI_OWL_MOUNTAIN_VILLAGE:
+ return !CAN_OWL_WARP(OWL_WARP_MOUNTAIN_VILLAGE);
+ case RI_OWL_SNOWHEAD:
+ return !CAN_OWL_WARP(OWL_WARP_SNOWHEAD);
+ case RI_OWL_SOUTHERN_SWAMP:
+ return !CAN_OWL_WARP(OWL_WARP_SOUTHERN_SWAMP);
+ case RI_OWL_STONE_TOWER:
+ return !CAN_OWL_WARP(OWL_WARP_STONE_TOWER);
+ case RI_OWL_WOODFALL:
+ return !CAN_OWL_WARP(OWL_WARP_WOODFALL);
+ case RI_OWL_ZORA_CAPE:
+ return !CAN_OWL_WARP(OWL_WARP_ZORA_CAPE);
// These items are technically fine to receive again because they don't do anything, but we'll convert them to
// ensure it's clear to the player something didn't go wrong.
// Quest Items
@@ -388,14 +410,20 @@ bool Rando::IsItemObtainable(RandoItemId randoItemId, RandoCheckId randoCheckId)
case RI_MASK_CAPTAIN:
case RI_MASK_COUPLE:
case RI_MASK_DEKU:
+ case RI_MASK_DON_GERO:
+ case RI_MASK_FIERCE_DEITY:
case RI_MASK_GARO:
case RI_MASK_GIANT:
+ case RI_MASK_GIBDO:
case RI_MASK_GORON:
case RI_MASK_GREAT_FAIRY:
case RI_MASK_KAFEIS_MASK:
case RI_MASK_KAMARO:
+ case RI_MASK_POSTMAN:
case RI_MASK_ROMANI:
+ case RI_MASK_SCENTS:
case RI_MASK_STONE:
+ case RI_MASK_TRUTH:
case RI_MASK_ZORA: {
ItemId itemId = StaticData::Items[randoItemId].itemId;
return INV_CONTENT(itemId) != itemId;