@@ -80,10 +80,12 @@ bool Logic::HasItem(RandomizerGet itemName) {
8080 case RG_HYLIAN_SHIELD:
8181 case RG_MIRROR_SHIELD:
8282 case RG_MASTER_SWORD:
83- case RG_BIGGORON_SWORD :
83+ case RG_GIANTS_KNIFE :
8484 case RG_IRON_BOOTS:
8585 case RG_HOVER_BOOTS:
8686 return CheckEquipment (RandoGetToEquipFlag.at (itemName));
87+ case RG_BIGGORON_SWORD:
88+ return CheckEquipment (RandoGetToEquipFlag.at (itemName)) && mSaveContext ->bgsFlag ;
8789 case RG_GORONS_BRACELET:
8890 return CurrentUpgrade (UPG_STRENGTH);
8991 case RG_SILVER_GAUNTLETS:
@@ -298,6 +300,7 @@ bool Logic::CanUse(RandomizerGet itemName) {
298300 return IsAdult; // || MirrorShieldAsChild;
299301 case RG_MASTER_SWORD:
300302 return IsAdult; // || MasterSwordAsChild;
303+ case RG_GIANTS_KNIFE:
301304 case RG_BIGGORON_SWORD:
302305 return IsAdult; // || BiggoronSwordAsChild;
303306 case RG_SILVER_GAUNTLETS:
@@ -1083,15 +1086,15 @@ bool Logic::CanJumpslash() {
10831086}
10841087
10851088bool Logic::CanClearStalagmite () {
1086- return CanJumpslash () || HasExplosives ();
1089+ return CanJumpslash () || HasExplosives () || CanUse (RG_GIANTS_KNIFE) ;
10871090}
10881091
10891092bool Logic::CanHitSwitch (EnemyDistance distance, bool inWater) {
10901093 bool hit = false ;
10911094 switch (distance) {
10921095 case ED_CLOSE:
10931096 case ED_SHORT_JUMPSLASH:
1094- hit = CanUse (RG_KOKIRI_SWORD) || CanUse (RG_MEGATON_HAMMER);
1097+ hit = CanUse (RG_KOKIRI_SWORD) || CanUse (RG_MEGATON_HAMMER) || CanUse (RG_GIANTS_KNIFE) ;
10951098 [[fallthrough]];
10961099 case ED_MASTER_SWORD_JUMPSLASH:
10971100 hit = hit || CanUse (RG_MASTER_SWORD);
@@ -1185,7 +1188,8 @@ bool Logic::CanReflectNuts() {
11851188
11861189bool Logic::CanCutShrubs () {
11871190 return CanUse (RG_KOKIRI_SWORD) || CanUse (RG_BOOMERANG) || HasExplosives () || CanUse (RG_MASTER_SWORD) ||
1188- CanUse (RG_MEGATON_HAMMER) || CanUse (RG_BIGGORON_SWORD) || HasItem (RG_GORONS_BRACELET);
1191+ CanUse (RG_MEGATON_HAMMER) || CanUse (RG_BIGGORON_SWORD) || CanUse (RG_GIANTS_KNIFE) ||
1192+ HasItem (RG_GORONS_BRACELET);
11891193}
11901194
11911195bool Logic::CanStunDeku () {
@@ -1391,13 +1395,14 @@ bool Logic::SmallKeys(s16 scene, uint8_t requiredAmount) {
13911395}
13921396
13931397std::map<RandomizerGet, uint32_t > Logic::RandoGetToEquipFlag = {
1394- { RG_KOKIRI_SWORD, EQUIP_FLAG_SWORD_KOKIRI }, { RG_MASTER_SWORD, EQUIP_FLAG_SWORD_MASTER },
1395- { RG_BIGGORON_SWORD, EQUIP_FLAG_SWORD_BGS }, { RG_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU },
1396- { RG_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, { RG_MIRROR_SHIELD, EQUIP_FLAG_SHIELD_MIRROR },
1397- { RG_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, { RG_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA },
1398- { RG_BUY_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, { RG_BUY_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN },
1399- { RG_BUY_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, { RG_BUY_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA },
1400- { RG_IRON_BOOTS, EQUIP_FLAG_BOOTS_IRON }, { RG_HOVER_BOOTS, EQUIP_FLAG_BOOTS_HOVER }
1398+ { RG_KOKIRI_SWORD, EQUIP_FLAG_SWORD_KOKIRI }, { RG_MASTER_SWORD, EQUIP_FLAG_SWORD_MASTER },
1399+ { RG_GIANTS_KNIFE, EQUIP_FLAG_SWORD_BGS }, { RG_BIGGORON_SWORD, EQUIP_FLAG_SWORD_BGS },
1400+ { RG_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, { RG_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN },
1401+ { RG_MIRROR_SHIELD, EQUIP_FLAG_SHIELD_MIRROR }, { RG_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON },
1402+ { RG_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, { RG_BUY_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU },
1403+ { RG_BUY_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, { RG_BUY_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON },
1404+ { RG_BUY_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, { RG_IRON_BOOTS, EQUIP_FLAG_BOOTS_IRON },
1405+ { RG_HOVER_BOOTS, EQUIP_FLAG_BOOTS_HOVER }
14011406};
14021407
14031408std::map<RandomizerGet, uint32_t > Logic::RandoGetToRandInf = {
@@ -1826,18 +1831,18 @@ void Logic::ApplyItemEffect(Item& item, bool state) {
18261831 } break ;
18271832 case ITEMTYPE_EQUIP: {
18281833 RandomizerGet itemRG = item.GetRandomizerGet ();
1829- if (itemRG == RG_GIANTS_KNIFE || itemRG == RG_DEKU_SHIELD || itemRG == RG_HYLIAN_SHIELD) {
1834+ if (itemRG == RG_DEKU_SHIELD || itemRG == RG_HYLIAN_SHIELD) {
18301835 return ;
18311836 }
18321837 uint32_t equipId = RandoGetToEquipFlag.find (itemRG)->second ;
18331838 if (!state) {
18341839 mSaveContext ->inventory .equipment &= ~equipId;
1835- if (equipId == EQUIP_FLAG_SWORD_BGS) {
1840+ if (equipId == EQUIP_FLAG_SWORD_BGS && itemRG != RG_GIANTS_KNIFE ) {
18361841 mSaveContext ->bgsFlag = false ;
18371842 }
18381843 } else {
18391844 mSaveContext ->inventory .equipment |= equipId;
1840- if (equipId == EQUIP_FLAG_SWORD_BGS) {
1845+ if (equipId == EQUIP_FLAG_SWORD_BGS && itemRG != RG_GIANTS_KNIFE ) {
18411846 mSaveContext ->bgsFlag = true ;
18421847 }
18431848 }
0 commit comments