+Logic.open = {
+ fallback: fromBool(alwaysAvailable),
+ aginah: fromBool(canBomb),
+ blacksmith: fromBool(canRescueSmith),
+ 'blinds-hut-top': fromBool(canBomb),
+ 'bombos-tablet': fromBool(and(southDarkWorld, hasMirror, canTablet)),
+ 'bonk-rocks': fromBool(canBonk),
+ brewery: fromBool(and(westDarkWorld, canBomb, hasMoonpearl)),
+ 'bumper-cave': fromBool(and(westDarkWorld, hasMoonpearl, canLift, hasCape)),
+ 'c-house': fromBool(and(westDarkWorld, hasMoonpearl)),
+ catfish: fromBool(and(eastDarkWorld, hasMoonpearl, canLift)),
+ 'cave-45': fromBool(and(southDarkWorld, hasMirror)),
+ checkerboard: fromBool(and(mireArea, hasMirror)),
+ 'chest-game': fromBool(and(westDarkWorld, hasMoonpearl)),
+ 'chicken-house': fromBool(canBomb),
+ 'desert-ledge': fromBool(canEnterDPFront),
+ 'digging-game': fromBool(and(southDarkWorld, hasMoonpearl)),
+ 'ether-tablet': fromBool(and(northDeathMountain, canTablet)),
+ 'floating-island': fromBool(
+ and(eastDarkDeathMountain, hasMoonpearl, canLift, canBomb, hasMirror),
+ ),
+ 'flute-spot': fromBool(hasShovel),
+ 'graveyard-ledge': fromBool(and(westDarkWorld, hasMoonpearl, hasMirror)),
+ 'hammer-pegs': fromBool(and(westDarkWorld, hasHammer, hasMoonpearl, canHeavyLift)),
+ hobo: fromBool(canSwim),
+ 'hookshot-cave-tl': fromBool(and(eastDarkDeathMountain, hasMoonpearl, canLift, hasHookshot)),
+ 'hookshot-cave-tr': fromBool(and(eastDarkDeathMountain, hasMoonpearl, canLift, hasHookshot)),
+ 'hookshot-cave-bl': fromBool(and(eastDarkDeathMountain, hasMoonpearl, canLift, hasHookshot)),
+ 'hookshot-cave-br': fromBool(
+ and(eastDarkDeathMountain, hasMoonpearl, canLift, or(hasHookshot, canBonk)),
+ ),
+ 'hype-cave-npc': fromBool(and(southDarkWorld, hasMoonpearl, canBomb)),
+ 'hype-cave-top': fromBool(and(southDarkWorld, hasMoonpearl, canBomb)),
+ 'hype-cave-right': fromBool(and(southDarkWorld, hasMoonpearl, canBomb)),
+ 'hype-cave-left': fromBool(and(southDarkWorld, hasMoonpearl, canBomb)),
+ 'hype-cave-bottom': fromBool(and(southDarkWorld, hasMoonpearl, canBomb)),
+ 'ice-rod-cave': fromBool(canBomb),
+ 'kak-well-top': fromBool(canBomb),
+ 'kings-tomb': fromBool(and(canBonk, or(canHeavyLift, and(westDarkWorld, hasMirror)))),
+ 'lake-hylia-island': fromBool(
+ and(canSwim, hasMirror, hasMoonpearl, or(eastDarkWorld, southDarkWorld)),
+ ),
+ library: fromBool(canBonk),
+ lumberjack: fromBool(and(canBonk, agaDead)),
+ 'magic-bat': fromBool(and(hasPowder,
+ or(hasHammer, and(westDarkWorld, hasMoonpearl, canHeavyLift, hasMirror)),
+ )),
+ 'mimic-cave': fromBool(and(canEnterTRFront, canBomb, hasSmall('tr', 2), hasMirror, hasHammer)),
+ 'mini-moldorm-left': fromBool(canBomb),
+ 'mini-moldorm-right': fromBool(canBomb),
+ 'mini-moldorm-far-left': fromBool(canBomb),
+ 'mini-moldorm-far-right': fromBool(canBomb),
+ 'mini-moldorm-npc': fromBool(canBomb),
+ 'mire-shed-left': fromBool(and(mireArea, hasMoonpearl)),
+ 'mire-shed-right': fromBool(and(mireArea, hasMoonpearl)),
+ 'old-man': fromBool(and(westDeathMountain, canDarkRoom)),
+ 'paradox-lower-far-left': fromBool(paradoxLower),
+ 'paradox-lower-left': fromBool(paradoxLower),
+ 'paradox-lower-right': fromBool(paradoxLower),
+ 'paradox-lower-far-right': fromBool(paradoxLower),
+ 'paradox-lower-mid': fromBool(paradoxLower),
+ 'paradox-upper-left': fromBool(and(eastDeathMountain, canBomb)),
+ 'paradox-upper-right': fromBool(and(eastDeathMountain, canBomb)),
+ pedestal: fromBool(hasPendants(3)),
+ 'potion-shop': fromBool(hasMushroom),
+ 'purple-chest': fromBool(and(canRescueSmith, hasMoonpearl, canHeavyLift)),
+ pyramid: fromBool(eastDarkWorld),
+ 'pyramid-fairy-left': fromBool(and(hasRedCrystals(2), southDarkWorld, canBridgeRedBomb)),
+ 'pyramid-fairy-right': fromBool(and(hasRedCrystals(2), southDarkWorld, canBridgeRedBomb)),
+ 'race-game': fromBool(or(canBomb, canBonk)),
+ saha: fromBool(hasGreenPendant),
+ 'saha-left': fromBool(or(canBomb, canBonk)),
+ 'saha-mid': fromBool(or(canBomb, canBonk)),
+ 'saha-right': fromBool(or(canBomb, canBonk)),
+ 'sick-kid': fromBool(hasBottle(1)),
+ 'spec-rock': fromBool(and(westDeathMountain, hasMirror)),
+ 'spec-rock-cave': fromBool(westDeathMountain),
+ 'spike-cave': fromBool(and(
+ westDarkDeathMountain,
+ hasMoonpearl,
+ hasHammer,
+ canLift,
+ or(hasByrna, and(hasCape, hasMagicBars(2))),
+ )),
+ 'spiral-cave': fromBool(eastDeathMountain),
+ stumpy: fromBool(and(southDarkWorld, hasMoonpearl)),
+ 'super-bunny-top': fromBool(and(eastDarkDeathMountain, hasMoonpearl)),
+ 'super-bunny-bottom': fromBool(and(eastDarkDeathMountain, hasMoonpearl)),
+ 'waterfall-fairy-left': fromBool(canSwim),
+ 'waterfall-fairy-right': fromBool(canSwim),
+ zora: fromBool(or(canLift, canSwim)),
+ 'zora-ledge': fromBool(canSwim),
+ ct: fromBool(canEnterCT),
+ gt: fromBool(canEnterGT),
+ dp: fromBool(or(canEnterDPFront, canEnterDPBack)),
+ th: fromBool(canEnterTH),
+ pd: fromBool(canEnterPD),
+ sp: fromBool(canEnterSP),
+ sw: fromBool(or(canEnterSWFront, canEnterSWMid, canEnterSWBack)),
+ tt: fromBool(canEnterTT),
+ ip: fromBool(canEnterIP),
+ mm: fromBool(canEnterMM),
+ tr: fromBool(or(canEnterTRFront, canEnterTRWest, canEnterTREast, canEnterTRBack)),
+ ...Logic.dungeonInterior,
+};
+
+Logic.inverted = {
+ fallback: fromBool(alwaysAvailable),
+ aginah: fromBool(and(southLightWorld, hasMoonpearl, canBomb)),
+ blacksmith: fromBool(and(or(canHeavyLift, hasMirror), westLightWorld)),
+ 'blinds-hut-top': fromBool(and(westLightWorld, hasMoonpearl, canBomb)),
+ 'blinds-hut-far-left': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'blinds-hut-left': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'blinds-hut-right': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'blinds-hut-far-right': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'bombos-tablet': fromBool(and(southLightWorld, canTablet)),
+ 'bonk-rocks': fromBool(and(westLightWorld, hasMoonpearl, canBonk)),
+ 'bottle-vendor': fromBool(westLightWorld),
+ brewery: fromBool(canBomb),
+ 'bumper-cave': fromBool(and(canLift, hasCape, hasMoonpearl, hasMirror, westLightWorld)),
+ catfish: fromBool(or(
+ and(eastDarkWorld, canLift),
+ and(hasMirror, southLightWorld, hasMoonpearl, canSwim),
+ )),
+ 'cave-45': fromBool(and(southLightWorld, hasMoonpearl)),
+ checkerboard: fromBool(and(southLightWorld, hasMoonpearl, canLift)),
+ 'chicken-house': fromBool(and(westLightWorld, hasMoonpearl, canBomb)),
+ 'desert-ledge': fromBool(and(hasMoonpearl, canEnterDPFront)),
+ 'ether-tablet': fromBool(and(northDeathMountain, canTablet)),
+ 'floating-island': fromBool(and(eastDeathMountain)),
+ 'flooded-chest': fromBool(and(southLightWorld, hasMoonpearl)),
+ 'flute-spot': fromBool(and(southLightWorld, hasMoonpearl, hasShovel)),
+ 'graveyard-ledge': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'hammer-pegs': fromBool(and(hasHammer, or(canHeavyLift, and(westLightWorld, hasMirror)))),
+ hobo: fromBool(and(southLightWorld, hasMoonpearl, canSwim)),
+ 'hookshot-cave-tl': fromBool(and(
+ eastDarkDeathMountain,
+ hasHookshot,
+ or(canLift, and(canBomb, hasMirror, eastDeathMountain)),
+ )),
+ 'hookshot-cave-tr': fromBool(and(
+ eastDarkDeathMountain,
+ hasHookshot,
+ or(canLift, and(canBomb, hasMirror, eastDeathMountain)),
+ )),
+ 'hookshot-cave-bl': fromBool(and(
+ eastDarkDeathMountain,
+ hasHookshot,
+ or(canLift, and(canBomb, hasMirror, eastDeathMountain)),
+ )),
+ 'hookshot-cave-br': fromBool(and(
+ eastDarkDeathMountain,
+ or(canBonk, hasHookshot),
+ or(canLift, and(canBomb, hasMirror, eastDeathMountain)),
+ )),
+ 'hype-cave-npc': fromBool(canBomb),
+ 'hype-cave-top': fromBool(canBomb),
+ 'hype-cave-right': fromBool(canBomb),
+ 'hype-cave-left': fromBool(canBomb),
+ 'hype-cave-bottom': fromBool(canBomb),
+ 'ice-rod-cave': fromBool(and(southLightWorld, hasMoonpearl, canBomb)),
+ 'kak-well-top': fromBool(and(westLightWorld, hasMoonpearl, canBomb)),
+ 'kak-well-left': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'kak-well-mid': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'kak-well-right': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'kak-well-bottom': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'kings-tomb': fromBool(and(westLightWorld, hasMoonpearl, canBonk, canHeavyLift)),
+ 'lake-hylia-island': fromBool(
+ and(southLightWorld, hasMoonpearl, canSwim),
+ ),
+ library: fromBool(and(southLightWorld, hasMoonpearl, canBonk)),
+ lumberjack: fromBool(and(westLightWorld, hasMoonpearl, canBonk, agaDead)),
+ 'lost-woods-hideout': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'magic-bat': fromBool(and(westLightWorld, hasMoonpearl, hasPowder, hasHammer)),
+ 'maze-race': fromBool(and(southLightWorld, hasMoonpearl, or(canBomb, canBonk))),
+ 'mimic-cave': fromBool(and(
+ eastDeathMountain,
+ hasMoonpearl,
+ hasHammer,
+ )),
+ 'mini-moldorm-far-left': fromBool(and(southLightWorld, hasMoonpearl, canBomb, canKill)),
+ 'mini-moldorm-left': fromBool(and(southLightWorld, hasMoonpearl, canBomb, canKill)),
+ 'mini-moldorm-right': fromBool(and(southLightWorld, hasMoonpearl, canBomb, canKill)),
+ 'mini-moldorm-far-right': fromBool(and(southLightWorld, hasMoonpearl, canBomb, canKill)),
+ 'mini-moldorm-npc': fromBool(and(southLightWorld, hasMoonpearl, canBomb, canKill)),
+ 'mire-shed-left': fromBool(mireArea),
+ 'mire-shed-right': fromBool(mireArea),
+ 'mushroom-spot': fromBool(and(westLightWorld, hasMoonpearl)),
+ 'old-man': fromBool(and(westDeathMountain, canDarkRoom)),
+ 'paradox-lower-far-left': fromBool(and(hasMoonpearl, paradoxLower)),
+ 'paradox-lower-left': fromBool(and(hasMoonpearl, paradoxLower)),
+ 'paradox-lower-mid': fromBool(and(hasMoonpearl, paradoxLower)),
+ 'paradox-lower-right': fromBool(and(hasMoonpearl, paradoxLower)),
+ 'paradox-lower-far-right': fromBool(and(hasMoonpearl, paradoxLower)),
+ 'paradox-upper-left': fromBool(and(eastDeathMountain, hasMoonpearl, canBomb)),
+ 'paradox-upper-right': fromBool(and(eastDeathMountain, hasMoonpearl, canBomb)),
+ pedestal: fromBool(and(westLightWorld, hasPendants(3))),
+ 'potion-shop': fromBool(and(eastLightWorld, hasMushroom, hasMoonpearl)),
+ 'purple-chest': fromBool(and(or(canHeavyLift, hasMirror), westLightWorld, southLightWorld)),
+ pyramid: fromBool(eastDarkWorld),
+ 'pyramid-fairy-left': fromBool(and(hasRedCrystals(2), hasMirror)),
+ 'pyramid-fairy-right': fromBool(and(hasRedCrystals(2), hasMirror)),
+ 'race-game': fromBool(and(westLightWorld, hasMoonpearl, or(canBomb, canBonk))),
+ saha: fromBool(and(eastLightWorld, hasGreenPendant)),
+ 'saha-left': fromBool(and(eastLightWorld, hasMoonpearl, or(canBomb, canBonk))),
+ 'saha-mid': fromBool(and(eastLightWorld, hasMoonpearl, or(canBomb, canBonk))),
+ 'saha-right': fromBool(and(eastLightWorld, or(canBomb, canBonk))),
+ 'secret-passage': fromBool(and(eastLightWorld, hasMoonpearl)),
+ 'sick-kid': fromBool(and(westLightWorld, hasBottle(1))),
+ 'spec-rock': fromBool(northDeathMountain),
+ 'spec-rock-cave': fromBool(westDeathMountain),
+ 'spike-cave': fromBool(and(
+ westDarkDeathMountain,
+ hasHammer,
+ canLift,
+ or(hasByrna, and(hasCape, hasMagicBars(2))),
+ )),
+ 'spiral-cave': fromBool(and(
+ eastDeathMountain,
+ hasMoonpearl,
+ )),
+ 'sunken-treasure': fromBool(and(southLightWorld, hasMoonpearl)),
+ 'super-bunny-top': fromBool(eastDarkDeathMountain),
+ 'super-bunny-bottom': fromBool(eastDarkDeathMountain),
+ tavern: fromBool(and(westLightWorld, hasMoonpearl)),
+ uncle: fromBool(and(eastLightWorld, hasMoonpearl)),
+ 'waterfall-fairy-left': fromBool(and(eastLightWorld, hasMoonpearl, canSwim)),
+ 'waterfall-fairy-right': fromBool(and(eastLightWorld, hasMoonpearl, canSwim)),
+ zora: fromBool(and(eastLightWorld, hasMoonpearl, or(canLift, canSwim))),
+ 'zora-ledge': fromBool(and(eastLightWorld, hasMoonpearl, canSwim)),
+ hc: fromBool(canEnterHC),
+ ct: fromBool(canEnterCT),
+ gt: fromBool(canEnterGT),
+ ep: fromBool(canEnterEP),
+ dp: fromBool(canEnterDPFront),
+ th: fromBool(canEnterTH),
+ pd: fromBool(canEnterPD),
+ sp: fromBool(canEnterSP),
+ sw: fromBool(or(canEnterSWFront, canEnterSWMid, canEnterSWBack)),
+ tt: fromBool(canEnterTT),
+ ip: fromBool(canEnterIP),
+ mm: fromBool(canEnterMM),
+ tr: fromBool(or(canEnterTRFront, canEnterTRWest, canEnterTREast, canEnterTRBack)),
+ ...Logic.dungeonInterior,
+};
+