import typing

from BaseClasses import Location
from .Names import LocationName, ItemName, RegionName
from .Subclasses import LocationData
from .Regions import KH2REGIONS

# data's addrcheck sys3 addr obtained roomid bit index is eventid
LoD_Checks = {
    LocationName.BambooGroveDarkShard:        LocationData(245, "Chest"),
    LocationName.BambooGroveEther:            LocationData(497, "Chest"),
    LocationName.BambooGroveMythrilShard:     LocationData(498, "Chest"),
    LocationName.EncampmentAreaMap:           LocationData(350, "Chest"),
    LocationName.Mission3:                    LocationData(417, "Chest"),
    LocationName.CheckpointHiPotion:          LocationData(21, "Chest"),
    LocationName.CheckpointMythrilShard:      LocationData(121, "Chest"),
    LocationName.MountainTrailLightningShard: LocationData(22, "Chest"),
    LocationName.MountainTrailRecoveryRecipe: LocationData(23, "Chest"),
    LocationName.MountainTrailEther:          LocationData(122, "Chest"),
    LocationName.MountainTrailMythrilShard:   LocationData(123, "Chest"),
    LocationName.VillageCaveAreaMap:          LocationData(495, "Chest"),
    LocationName.VillageCaveDarkShard:        LocationData(125, "Chest"),
    LocationName.VillageCaveAPBoost:          LocationData(124, "Chest"),
    LocationName.VillageCaveBonus:            LocationData(43, "Get Bonus"),
    LocationName.RidgeFrostShard:             LocationData(24, "Chest"),
    LocationName.RidgeAPBoost:                LocationData(126, "Chest"),
    LocationName.ShanYu:                      LocationData(9, "Double Get Bonus"),
    LocationName.ShanYuGetBonus:              LocationData(9, "Second Get Bonus"),
    LocationName.HiddenDragon:                LocationData(257, "Chest"),
    LocationName.ThroneRoomTornPages:         LocationData(25, "Chest"),
    LocationName.ThroneRoomPalaceMap:         LocationData(127, "Chest"),
    LocationName.ThroneRoomAPBoost:           LocationData(26, "Chest"),
    LocationName.ThroneRoomQueenRecipe:       LocationData(27, "Chest"),
    LocationName.ThroneRoomAPBoost2:          LocationData(128, "Chest"),
    LocationName.ThroneRoomOgreShield:        LocationData(129, "Chest"),
    LocationName.ThroneRoomMythrilCrystal:    LocationData(130, "Chest"),
    LocationName.ThroneRoomOrichalcum:        LocationData(131, "Chest"),
    LocationName.StormRider:                  LocationData(10, "Get Bonus"),
    LocationName.XigbarDataDefenseBoost:      LocationData(555, "Chest"),

}
AG_Checks = {
    LocationName.AgrabahMap:                        LocationData(353, "Chest"),
    LocationName.AgrabahDarkShard:                  LocationData(28, "Chest"),
    LocationName.AgrabahMythrilShard:               LocationData(29, "Chest"),
    LocationName.AgrabahHiPotion:                   LocationData(30, "Chest"),
    LocationName.AgrabahAPBoost:                    LocationData(132, "Chest"),
    LocationName.AgrabahMythrilStone:               LocationData(133, "Chest"),
    LocationName.AgrabahMythrilShard2:              LocationData(249, "Chest"),
    LocationName.AgrabahSerenityShard:              LocationData(501, "Chest"),
    LocationName.BazaarMythrilGem:                  LocationData(31, "Chest"),
    LocationName.BazaarPowerShard:                  LocationData(32, "Chest"),
    LocationName.BazaarHiPotion:                    LocationData(33, "Chest"),
    LocationName.BazaarAPBoost:                     LocationData(134, "Chest"),
    LocationName.BazaarMythrilShard:                LocationData(135, "Chest"),
    LocationName.PalaceWallsSkillRing:              LocationData(136, "Chest"),
    LocationName.PalaceWallsMythrilStone:           LocationData(520, "Chest"),
    LocationName.CaveEntrancePowerStone:            LocationData(250, "Chest"),
    LocationName.CaveEntranceMythrilShard:          LocationData(251, "Chest"),
    LocationName.ValleyofStoneMythrilStone:         LocationData(35, "Chest"),
    LocationName.ValleyofStoneAPBoost:              LocationData(36, "Chest"),
    LocationName.ValleyofStoneMythrilShard:         LocationData(137, "Chest"),
    LocationName.ValleyofStoneHiPotion:             LocationData(138, "Chest"),
    LocationName.AbuEscort:                         LocationData(42, "Get Bonus"),
    LocationName.ChasmofChallengesCaveofWondersMap: LocationData(487, "Chest"),
    LocationName.ChasmofChallengesAPBoost:          LocationData(37, "Chest"),
    LocationName.TreasureRoom:                      LocationData(46, "Get Bonus"),
    LocationName.TreasureRoomAPBoost:               LocationData(502, "Chest"),
    LocationName.TreasureRoomSerenityGem:           LocationData(503, "Chest"),
    LocationName.ElementalLords:                    LocationData(37, "Get Bonus"),
    LocationName.LampCharm:                         LocationData(300, "Chest"),
    LocationName.RuinedChamberTornPages:            LocationData(34, "Chest"),
    LocationName.RuinedChamberRuinsMap:             LocationData(486, "Chest"),
    LocationName.GenieJafar:                        LocationData(15, "Get Bonus"),
    LocationName.WishingLamp:                       LocationData(303, "Chest"),
    LocationName.LexaeusBonus:                      LocationData(65, "Get Bonus"),
    LocationName.LexaeusASStrengthBeyondStrength:   LocationData(545, "Chest"),
    LocationName.LexaeusDataLostIllusion:           LocationData(550, "Chest"),
}
DC_Checks = {
    LocationName.DCCourtyardMythrilShard:        LocationData(16, "Chest"),
    LocationName.DCCourtyardStarRecipe:          LocationData(17, "Chest"),
    LocationName.DCCourtyardAPBoost:             LocationData(18, "Chest"),
    LocationName.DCCourtyardMythrilStone:        LocationData(92, "Chest"),
    LocationName.DCCourtyardBlazingStone:        LocationData(93, "Chest"),
    LocationName.DCCourtyardBlazingShard:        LocationData(247, "Chest"),
    LocationName.DCCourtyardMythrilShard2:       LocationData(248, "Chest"),
    LocationName.LibraryTornPages:               LocationData(91, "Chest"),
    LocationName.DisneyCastleMap:                LocationData(332, "Chest"),
    LocationName.MinnieEscort:                   LocationData(38, "Double Get Bonus"),
    LocationName.MinnieEscortGetBonus:           LocationData(38, "Second Get Bonus"),
    LocationName.CornerstoneHillMap:             LocationData(79, "Chest"),
    LocationName.CornerstoneHillFrostShard:      LocationData(12, "Chest"),
    LocationName.PierMythrilShard:               LocationData(81, "Chest"),
    LocationName.PierHiPotion:                   LocationData(82, "Chest"),
    LocationName.WaterwayMythrilStone:           LocationData(83, "Chest"),
    LocationName.WaterwayAPBoost:                LocationData(84, "Chest"),
    LocationName.WaterwayFrostStone:             LocationData(85, "Chest"),
    LocationName.WindowofTimeMap:                LocationData(368, "Chest"),
    LocationName.BoatPete:                       LocationData(16, "Get Bonus"),
    LocationName.FuturePete:                     LocationData(17, "Double Get Bonus"),
    LocationName.FuturePeteGetBonus:             LocationData(17, "Second Get Bonus"),
    LocationName.Monochrome:                     LocationData(261, "Chest"),
    LocationName.WisdomForm:                     LocationData(262, "Chest"),
    LocationName.MarluxiaGetBonus:               LocationData(67, "Get Bonus"),
    LocationName.MarluxiaASEternalBlossom:       LocationData(548, "Chest"),
    LocationName.MarluxiaDataLostIllusion:       LocationData(553, "Chest"),
    LocationName.LingeringWillBonus:             LocationData(70, "Get Bonus"),
    LocationName.LingeringWillProofofConnection: LocationData(587, "Chest"),
    LocationName.LingeringWillManifestIllusion:  LocationData(591, "Chest"),

}

HundredAcre_Checks = {
    LocationName.PoohsHouse100AcreWoodMap:   LocationData(313, "Chest"),
    LocationName.PoohsHouseAPBoost:          LocationData(97, "Chest"),
    LocationName.PoohsHouseMythrilStone:     LocationData(98, "Chest"),
    LocationName.PigletsHouseDefenseBoost:   LocationData(105, "Chest"),
    LocationName.PigletsHouseAPBoost:        LocationData(103, "Chest"),
    LocationName.PigletsHouseMythrilGem:     LocationData(104, "Chest"),
    LocationName.RabbitsHouseDrawRing:       LocationData(314, "Chest"),
    LocationName.RabbitsHouseMythrilCrystal: LocationData(100, "Chest"),
    LocationName.RabbitsHouseAPBoost:        LocationData(101, "Chest"),
    LocationName.KangasHouseMagicBoost:      LocationData(108, "Chest"),
    LocationName.KangasHouseAPBoost:         LocationData(106, "Chest"),
    LocationName.KangasHouseOrichalcum:      LocationData(107, "Chest"),
    LocationName.SpookyCaveMythrilGem:       LocationData(110, "Chest"),
    LocationName.SpookyCaveAPBoost:          LocationData(111, "Chest"),
    LocationName.SpookyCaveOrichalcum:       LocationData(112, "Chest"),
    LocationName.SpookyCaveGuardRecipe:      LocationData(113, "Chest"),
    LocationName.SpookyCaveMythrilCrystal:   LocationData(115, "Chest"),
    LocationName.SpookyCaveAPBoost2:         LocationData(116, "Chest"),
    LocationName.SweetMemories:              LocationData(284, "Chest"),
    LocationName.SpookyCaveMap:              LocationData(485, "Chest"),
    LocationName.StarryHillCosmicRing:       LocationData(312, "Chest"),
    LocationName.StarryHillStyleRecipe:      LocationData(94, "Chest"),
    LocationName.StarryHillCureElement:      LocationData(285, "Chest"),
    LocationName.StarryHillOrichalcumPlus:   LocationData(539, "Chest"),
}
Oc_Checks = {
    LocationName.PassageMythrilShard:            LocationData(7, "Chest"),
    LocationName.PassageMythrilStone:            LocationData(8, "Chest"),
    LocationName.PassageEther:                   LocationData(144, "Chest"),
    LocationName.PassageAPBoost:                 LocationData(145, "Chest"),
    LocationName.PassageHiPotion:                LocationData(146, "Chest"),
    LocationName.InnerChamberUnderworldMap:      LocationData(2, "Chest"),
    LocationName.InnerChamberMythrilShard:       LocationData(243, "Chest"),
    LocationName.Cerberus:                       LocationData(5, "Get Bonus"),
    LocationName.ColiseumMap:                    LocationData(338, "Chest"),
    LocationName.Urns:                           LocationData(57, "Get Bonus"),
    LocationName.UnderworldEntrancePowerBoost:   LocationData(242, "Chest"),
    LocationName.CavernsEntranceLucidShard:      LocationData(3, "Chest"),
    LocationName.CavernsEntranceAPBoost:         LocationData(11, "Chest"),
    LocationName.CavernsEntranceMythrilShard:    LocationData(504, "Chest"),
    LocationName.TheLostRoadBrightShard:         LocationData(9, "Chest"),
    LocationName.TheLostRoadEther:               LocationData(10, "Chest"),
    LocationName.TheLostRoadMythrilShard:        LocationData(148, "Chest"),
    LocationName.TheLostRoadMythrilStone:        LocationData(149, "Chest"),
    LocationName.AtriumLucidStone:               LocationData(150, "Chest"),
    LocationName.AtriumAPBoost:                  LocationData(151, "Chest"),
    LocationName.DemyxOC:                        LocationData(58, "Get Bonus"),
    LocationName.SecretAnsemReport5:             LocationData(529, "Chest"),
    LocationName.OlympusStone:                   LocationData(293, "Chest"),
    LocationName.TheLockCavernsMap:              LocationData(244, "Chest"),
    LocationName.TheLockMythrilShard:            LocationData(5, "Chest"),
    LocationName.TheLockAPBoost:                 LocationData(142, "Chest"),
    LocationName.PeteOC:                         LocationData(6, "Get Bonus"),
    LocationName.Hydra:                          LocationData(7, "Double Get Bonus"),
    LocationName.HydraGetBonus:                  LocationData(7, "Second Get Bonus"),
    LocationName.HerosCrest:                     LocationData(260, "Chest"),
    LocationName.AuronsStatue:                   LocationData(295, "Chest"),
    LocationName.Hades:                          LocationData(8, "Double Get Bonus"),
    LocationName.HadesGetBonus:                  LocationData(8, "Second Get Bonus"),
    LocationName.GuardianSoul:                   LocationData(272, "Chest"),
    LocationName.ZexionBonus:                    LocationData(66, "Get Bonus"),
    LocationName.ZexionASBookofShadows:          LocationData(546, "Chest"),
    LocationName.ZexionDataLostIllusion:         LocationData(551, "Chest"),
    LocationName.ProtectBeltPainandPanicCup:     LocationData(513, "Chest"),
    LocationName.SerenityGemPainandPanicCup:     LocationData(540, "Chest"),
    LocationName.RisingDragonCerberusCup:        LocationData(515, "Chest"),
    LocationName.SerenityCrystalCerberusCup:     LocationData(542, "Chest"),
    LocationName.GenjiShieldTitanCup:            LocationData(514, "Chest"),
    LocationName.SkillfulRingTitanCup:           LocationData(541, "Chest"),
    LocationName.FatalCrestGoddessofFateCup:     LocationData(516, "Chest"),
    LocationName.OrichalcumPlusGoddessofFateCup: LocationData(517, "Chest"),
    LocationName.HadesCupTrophyParadoxCups:      LocationData(518, "Chest"),
}

BC_Checks = {
    LocationName.BCCourtyardAPBoost:            LocationData(39, "Chest"),
    LocationName.BCCourtyardHiPotion:           LocationData(40, "Chest"),
    LocationName.BCCourtyardMythrilShard:       LocationData(505, "Chest"),
    LocationName.BellesRoomCastleMap:           LocationData(46, "Chest"),
    LocationName.BellesRoomMegaRecipe:          LocationData(240, "Chest"),
    LocationName.TheEastWingMythrilShard:       LocationData(63, "Chest"),
    LocationName.TheEastWingTent:               LocationData(155, "Chest"),
    LocationName.TheWestHallHiPotion:           LocationData(41, "Chest"),
    LocationName.TheWestHallPowerShard:         LocationData(207, "Chest"),
    LocationName.TheWestHallAPBoostPostDungeon: LocationData(158, "Chest"),
    LocationName.TheWestHallBrightStone:        LocationData(159, "Chest"),
    LocationName.TheWestHallMythrilShard:       LocationData(206, "Chest"),
    LocationName.Thresholder:                   LocationData(2, "Get Bonus"),
    LocationName.DungeonBasementMap:            LocationData(239, "Chest"),
    LocationName.DungeonAPBoost:                LocationData(43, "Chest"),
    LocationName.SecretPassageMythrilShard:     LocationData(44, "Chest"),
    LocationName.SecretPassageHiPotion:         LocationData(168, "Chest"),
    LocationName.SecretPassageLucidShard:       LocationData(45, "Chest"),
    LocationName.TheWestHallMythrilShard2:      LocationData(208, "Chest"),
    LocationName.TheWestWingMythrilShard:       LocationData(42, "Chest"),
    LocationName.TheWestWingTent:               LocationData(164, "Chest"),
    LocationName.Beast:                         LocationData(12, "Get Bonus"),
    LocationName.TheBeastsRoomBlazingShard:     LocationData(241, "Chest"),
    LocationName.DarkThorn:                     LocationData(3, "Double Get Bonus"),
    LocationName.DarkThornGetBonus:             LocationData(3, "Second Get Bonus"),
    LocationName.DarkThornCureElement:          LocationData(299, "Chest"),
    LocationName.RumblingRose:                  LocationData(270, "Chest"),
    LocationName.CastleWallsMap:                LocationData(325, "Chest"),
    LocationName.Xaldin:                        LocationData(4, "Double Get Bonus"),
    LocationName.XaldinGetBonus:                LocationData(4, "Second Get Bonus"),
    LocationName.SecretAnsemReport4:            LocationData(528, "Chest"),
    LocationName.XaldinDataDefenseBoost:        LocationData(559, "Chest"),
}
SP_Checks = {
    LocationName.PitCellAreaMap:                    LocationData(316, "Chest"),
    LocationName.PitCellMythrilCrystal:             LocationData(64, "Chest"),
    LocationName.CanyonDarkCrystal:                 LocationData(65, "Chest"),
    LocationName.CanyonMythrilStone:                LocationData(171, "Chest"),
    LocationName.CanyonMythrilGem:                  LocationData(253, "Chest"),
    LocationName.CanyonFrostCrystal:                LocationData(521, "Chest"),
    LocationName.Screens:                           LocationData(45, "Get Bonus"),
    LocationName.HallwayPowerCrystal:               LocationData(49, "Chest"),
    LocationName.HallwayAPBoost:                    LocationData(50, "Chest"),
    LocationName.CommunicationsRoomIOTowerMap:      LocationData(255, "Chest"),
    LocationName.CommunicationsRoomGaiaBelt:        LocationData(499, "Chest"),
    LocationName.HostileProgram:                    LocationData(31, "Double Get Bonus"),
    LocationName.HostileProgramGetBonus:            LocationData(31, "Second Get Bonus"),
    LocationName.PhotonDebugger:                    LocationData(267, "Chest"),
    LocationName.SolarSailer:                       LocationData(61, "Get Bonus"),
    LocationName.CentralComputerCoreAPBoost:        LocationData(177, "Chest"),
    LocationName.CentralComputerCoreOrichalcumPlus: LocationData(178, "Chest"),
    LocationName.CentralComputerCoreCosmicArts:     LocationData(51, "Chest"),
    LocationName.CentralComputerCoreMap:            LocationData(488, "Chest"),
    LocationName.MCP:                               LocationData(32, "Double Get Bonus"),
    LocationName.MCPGetBonus:                       LocationData(32, "Second Get Bonus"),
    LocationName.LarxeneBonus:                      LocationData(68, "Get Bonus"),
    LocationName.LarxeneASCloakedThunder:           LocationData(547, "Chest"),
    LocationName.LarxeneDataLostIllusion:           LocationData(552, "Chest"),
}
HT_Checks = {
    LocationName.GraveyardMythrilShard:           LocationData(53, "Chest"),
    LocationName.GraveyardSerenityGem:            LocationData(212, "Chest"),
    LocationName.FinklesteinsLabHalloweenTownMap: LocationData(211, "Chest"),
    LocationName.TownSquareMythrilStone:          LocationData(209, "Chest"),
    LocationName.TownSquareEnergyShard:           LocationData(210, "Chest"),
    LocationName.HinterlandsLightningShard:       LocationData(54, "Chest"),
    LocationName.HinterlandsMythrilStone:         LocationData(213, "Chest"),
    LocationName.HinterlandsAPBoost:              LocationData(214, "Chest"),
    LocationName.CandyCaneLaneMegaPotion:         LocationData(55, "Chest"),
    LocationName.CandyCaneLaneMythrilGem:         LocationData(56, "Chest"),
    LocationName.CandyCaneLaneLightningStone:     LocationData(216, "Chest"),
    LocationName.CandyCaneLaneMythrilStone:       LocationData(217, "Chest"),
    LocationName.SantasHouseChristmasTownMap:     LocationData(57, "Chest"),
    LocationName.SantasHouseAPBoost:              LocationData(58, "Chest"),
    LocationName.PrisonKeeper:                    LocationData(18, "Get Bonus"),
    LocationName.OogieBoogie:                     LocationData(19, "Get Bonus"),
    LocationName.OogieBoogieMagnetElement:        LocationData(301, "Chest"),
    LocationName.Lock:                            LocationData(40, "Get Bonus"),
    LocationName.Present:                         LocationData(297, "Chest"),
    LocationName.DecoyPresents:                   LocationData(298, "Chest"),
    LocationName.Experiment:                      LocationData(20, "Get Bonus"),
    LocationName.DecisivePumpkin:                 LocationData(275, "Chest"),
    LocationName.VexenBonus:                      LocationData(64, "Get Bonus"),
    LocationName.VexenASRoadtoDiscovery:          LocationData(544, "Chest"),
    LocationName.VexenDataLostIllusion:           LocationData(549, "Chest"),
}
PR_Checks = {
    LocationName.RampartNavalMap:              LocationData(70, "Chest"),
    LocationName.RampartMythrilStone:          LocationData(219, "Chest"),
    LocationName.RampartDarkShard:             LocationData(220, "Chest"),
    LocationName.TownDarkStone:                LocationData(71, "Chest"),
    LocationName.TownAPBoost:                  LocationData(72, "Chest"),
    LocationName.TownMythrilShard:             LocationData(73, "Chest"),
    LocationName.TownMythrilGem:               LocationData(221, "Chest"),
    LocationName.CaveMouthBrightShard:         LocationData(74, "Chest"),
    LocationName.CaveMouthMythrilShard:        LocationData(223, "Chest"),
    LocationName.IsladeMuertaMap:              LocationData(329, "Chest"),
    LocationName.BoatFight:                    LocationData(62, "Get Bonus"),
    LocationName.InterceptorBarrels:           LocationData(39, "Get Bonus"),
    LocationName.PowderStoreAPBoost1:          LocationData(369, "Chest"),
    LocationName.PowderStoreAPBoost2:          LocationData(370, "Chest"),
    LocationName.MoonlightNookMythrilShard:    LocationData(75, "Chest"),
    LocationName.MoonlightNookSerenityGem:     LocationData(224, "Chest"),
    LocationName.MoonlightNookPowerStone:      LocationData(371, "Chest"),
    LocationName.Barbossa:                     LocationData(21, "Double Get Bonus"),
    LocationName.BarbossaGetBonus:             LocationData(21, "Second Get Bonus"),
    LocationName.FollowtheWind:                LocationData(263, "Chest"),
    LocationName.GrimReaper1:                  LocationData(59, "Get Bonus"),
    LocationName.InterceptorsHoldFeatherCharm: LocationData(252, "Chest"),
    LocationName.SeadriftKeepAPBoost:          LocationData(76, "Chest"),
    LocationName.SeadriftKeepOrichalcum:       LocationData(225, "Chest"),
    LocationName.SeadriftKeepMeteorStaff:      LocationData(372, "Chest"),
    LocationName.SeadriftRowSerenityGem:       LocationData(77, "Chest"),
    LocationName.SeadriftRowKingRecipe:        LocationData(78, "Chest"),
    LocationName.SeadriftRowMythrilCrystal:    LocationData(373, "Chest"),
    LocationName.SeadriftRowCursedMedallion:   LocationData(296, "Chest"),
    LocationName.SeadriftRowShipGraveyardMap:  LocationData(331, "Chest"),
    LocationName.GrimReaper2:                  LocationData(22, "Get Bonus"),
    LocationName.SecretAnsemReport6:           LocationData(530, "Chest"),
    LocationName.LuxordDataAPBoost:            LocationData(557, "Chest"),
}
HB_Checks = {
    LocationName.MarketplaceMap:                               LocationData(362, "Chest"),
    LocationName.BoroughDriveRecovery:                         LocationData(194, "Chest"),
    LocationName.BoroughAPBoost:                               LocationData(195, "Chest"),
    LocationName.BoroughHiPotion:                              LocationData(196, "Chest"),
    LocationName.BoroughMythrilShard:                          LocationData(305, "Chest"),
    LocationName.BoroughDarkShard:                             LocationData(506, "Chest"),
    LocationName.MerlinsHouseMembershipCard:                   LocationData(256, "Chest"),
    LocationName.MerlinsHouseBlizzardElement:                  LocationData(292, "Chest"),
    LocationName.Bailey:                                       LocationData(47, "Get Bonus"),
    LocationName.BaileySecretAnsemReport7:                     LocationData(531, "Chest"),
    LocationName.BaseballCharm:                                LocationData(258, "Chest"),
    LocationName.PosternCastlePerimeterMap:                    LocationData(310, "Chest"),
    LocationName.PosternMythrilGem:                            LocationData(189, "Chest"),
    LocationName.PosternAPBoost:                               LocationData(190, "Chest"),
    LocationName.CorridorsMythrilStone:                        LocationData(200, "Chest"),
    LocationName.CorridorsMythrilCrystal:                      LocationData(201, "Chest"),
    LocationName.CorridorsDarkCrystal:                         LocationData(202, "Chest"),
    LocationName.CorridorsAPBoost:                             LocationData(307, "Chest"),
    LocationName.AnsemsStudyMasterForm:                        LocationData(276, "Chest"),
    LocationName.AnsemsStudySleepingLion:                      LocationData(266, "Chest"),
    LocationName.AnsemsStudySkillRecipe:                       LocationData(184, "Chest"),
    LocationName.AnsemsStudyUkuleleCharm:                      LocationData(183, "Chest"),
    LocationName.RestorationSiteMoonRecipe:                    LocationData(309, "Chest"),
    LocationName.RestorationSiteAPBoost:                       LocationData(507, "Chest"),
    LocationName.DemyxHB:                                      LocationData(28, "Double Get Bonus"),
    LocationName.DemyxHBGetBonus:                              LocationData(28, "Second Get Bonus"),
    LocationName.FFFightsCureElement:                          LocationData(361, "Chest"),
    LocationName.CrystalFissureTornPages:                      LocationData(179, "Chest"),
    LocationName.CrystalFissureTheGreatMawMap:                 LocationData(489, "Chest"),
    LocationName.CrystalFissureEnergyCrystal:                  LocationData(180, "Chest"),
    LocationName.CrystalFissureAPBoost:                        LocationData(181, "Chest"),
    LocationName.ThousandHeartless:                            LocationData(60, "Get Bonus"),
    LocationName.ThousandHeartlessSecretAnsemReport1:          LocationData(525, "Chest"),
    LocationName.ThousandHeartlessIceCream:                    LocationData(269, "Chest"),
    LocationName.ThousandHeartlessPicture:                     LocationData(511, "Chest"),
    LocationName.PosternGullWing:                              LocationData(491, "Chest"),
    LocationName.HeartlessManufactoryCosmicChain:              LocationData(311, "Chest"),
    LocationName.SephirothBonus:                               LocationData(35, "Get Bonus"),
    LocationName.SephirothFenrir:                              LocationData(282, "Chest"),
    LocationName.WinnersProof:                                 LocationData(588, "Chest"),
    LocationName.ProofofPeace:                                 LocationData(589, "Chest"),
    LocationName.DemyxDataAPBoost:                             LocationData(560, "Chest"),
    LocationName.CoRDepthsAPBoost:                             LocationData(562, "Chest"),
    LocationName.CoRDepthsPowerCrystal:                        LocationData(563, "Chest"),
    LocationName.CoRDepthsFrostCrystal:                        LocationData(564, "Chest"),
    LocationName.CoRDepthsManifestIllusion:                    LocationData(565, "Chest"),
    LocationName.CoRDepthsAPBoost2:                            LocationData(566, "Chest"),
    LocationName.CoRMineshaftLowerLevelDepthsofRemembranceMap: LocationData(580, "Chest"),
    LocationName.CoRMineshaftLowerLevelAPBoost:                LocationData(578, "Chest"),
    LocationName.CoRDepthsUpperLevelRemembranceGem:            LocationData(567, "Chest"),
    LocationName.CoRMiningAreaSerenityGem:                     LocationData(568, "Chest"),
    LocationName.CoRMiningAreaAPBoost:                         LocationData(569, "Chest"),
    LocationName.CoRMiningAreaSerenityCrystal:                 LocationData(570, "Chest"),
    LocationName.CoRMiningAreaManifestIllusion:                LocationData(571, "Chest"),
    LocationName.CoRMiningAreaSerenityGem2:                    LocationData(572, "Chest"),
    LocationName.CoRMiningAreaDarkRemembranceMap:              LocationData(573, "Chest"),
    LocationName.CoRMineshaftMidLevelPowerBoost:               LocationData(581, "Chest"),
    LocationName.CoREngineChamberSerenityCrystal:              LocationData(574, "Chest"),
    LocationName.CoREngineChamberRemembranceCrystal:           LocationData(575, "Chest"),
    LocationName.CoREngineChamberAPBoost:                      LocationData(576, "Chest"),
    LocationName.CoREngineChamberManifestIllusion:             LocationData(577, "Chest"),
    LocationName.CoRMineshaftUpperLevelMagicBoost:             LocationData(582, "Chest"),
    LocationName.CoRMineshaftUpperLevelAPBoost:                LocationData(579, "Chest"),
    LocationName.TransporttoRemembrance:                       LocationData(72, "Get Bonus"),
}
PL_Checks = {
    LocationName.GorgeSavannahMap:              LocationData(492, "Chest"),
    LocationName.GorgeDarkGem:                  LocationData(404, "Chest"),
    LocationName.GorgeMythrilStone:             LocationData(405, "Chest"),
    LocationName.ElephantGraveyardFrostGem:     LocationData(401, "Chest"),
    LocationName.ElephantGraveyardMythrilStone: LocationData(402, "Chest"),
    LocationName.ElephantGraveyardBrightStone:  LocationData(403, "Chest"),
    LocationName.ElephantGraveyardAPBoost:      LocationData(508, "Chest"),
    LocationName.ElephantGraveyardMythrilShard: LocationData(509, "Chest"),
    LocationName.PrideRockMap:                  LocationData(418, "Chest"),
    LocationName.PrideRockMythrilStone:         LocationData(392, "Chest"),
    LocationName.PrideRockSerenityCrystal:      LocationData(393, "Chest"),
    LocationName.WildebeestValleyEnergyStone:   LocationData(396, "Chest"),
    LocationName.WildebeestValleyAPBoost:       LocationData(397, "Chest"),
    LocationName.WildebeestValleyMythrilGem:    LocationData(398, "Chest"),
    LocationName.WildebeestValleyMythrilStone:  LocationData(399, "Chest"),
    LocationName.WildebeestValleyLucidGem:      LocationData(400, "Chest"),
    LocationName.WastelandsMythrilShard:        LocationData(406, "Chest"),
    LocationName.WastelandsSerenityGem:         LocationData(407, "Chest"),
    LocationName.WastelandsMythrilStone:        LocationData(408, "Chest"),
    LocationName.JungleSerenityGem:             LocationData(409, "Chest"),
    LocationName.JungleMythrilStone:            LocationData(410, "Chest"),
    LocationName.JungleSerenityCrystal:         LocationData(411, "Chest"),
    LocationName.OasisMap:                      LocationData(412, "Chest"),
    LocationName.OasisTornPages:                LocationData(493, "Chest"),
    LocationName.OasisAPBoost:                  LocationData(413, "Chest"),
    LocationName.CircleofLife:                  LocationData(264, "Chest"),
    LocationName.Hyenas1:                       LocationData(49, "Get Bonus"),
    LocationName.Scar:                          LocationData(29, "Get Bonus"),
    LocationName.ScarFireElement:               LocationData(302, "Chest"),
    LocationName.Hyenas2:                       LocationData(50, "Get Bonus"),
    LocationName.Groundshaker:                  LocationData(30, "Double Get Bonus"),
    LocationName.GroundshakerGetBonus:          LocationData(30, "Second Get Bonus"),
    LocationName.SaixDataDefenseBoost:          LocationData(556, "Chest"),
}
STT_Checks = {
    LocationName.TwilightTownMap:                 LocationData(319, "Chest"),
    LocationName.MunnyPouchOlette:                LocationData(288, "Chest"),
    LocationName.StationDusks:                    LocationData(54, "Get Bonus", "Roxas", 14),
    LocationName.StationofSerenityPotion:         LocationData(315, "Chest"),
    LocationName.StationofCallingPotion:          LocationData(472, "Chest"),
    LocationName.TwilightThorn:                   LocationData(33, "Get Bonus", "Roxas", 14),
    LocationName.Axel1:                           LocationData(73, "Get Bonus", "Roxas", 14),
    LocationName.JunkChampionBelt:                LocationData(389, "Chest"),
    LocationName.JunkMedal:                       LocationData(390, "Chest"),
    LocationName.TheStruggleTrophy:               LocationData(519, "Chest"),
    LocationName.CentralStationPotion1:           LocationData(428, "Chest"),
    LocationName.STTCentralStationHiPotion:       LocationData(429, "Chest"),
    LocationName.CentralStationPotion2:           LocationData(430, "Chest"),
    LocationName.SunsetTerraceAbilityRing:        LocationData(434, "Chest"),
    LocationName.SunsetTerraceHiPotion:           LocationData(435, "Chest"),
    LocationName.SunsetTerracePotion1:            LocationData(436, "Chest"),
    LocationName.SunsetTerracePotion2:            LocationData(437, "Chest"),
    LocationName.MansionFoyerHiPotion:            LocationData(449, "Chest"),
    LocationName.MansionFoyerPotion1:             LocationData(450, "Chest"),
    LocationName.MansionFoyerPotion2:             LocationData(451, "Chest"),
    LocationName.MansionDiningRoomElvenBandanna:  LocationData(455, "Chest"),
    LocationName.MansionDiningRoomPotion:         LocationData(456, "Chest"),
    LocationName.NaminesSketches:                 LocationData(289, "Chest"),
    LocationName.MansionMap:                      LocationData(483, "Chest"),
    LocationName.MansionLibraryHiPotion:          LocationData(459, "Chest"),
    LocationName.Axel2:                           LocationData(34, "Get Bonus", "Roxas", 14),
    LocationName.MansionBasementCorridorHiPotion: LocationData(463, "Chest"),
    LocationName.RoxasDataMagicBoost:             LocationData(558, "Chest"),

}
TT_Checks = {
    LocationName.OldMansionPotion:                      LocationData(447, "Chest"),
    LocationName.OldMansionMythrilShard:                LocationData(448, "Chest"),
    LocationName.TheWoodsPotion:                        LocationData(442, "Chest"),
    LocationName.TheWoodsMythrilShard:                  LocationData(443, "Chest"),
    LocationName.TheWoodsHiPotion:                      LocationData(444, "Chest"),
    LocationName.TramCommonHiPotion:                    LocationData(420, "Chest"),
    LocationName.TramCommonAPBoost:                     LocationData(421, "Chest"),
    LocationName.TramCommonTent:                        LocationData(422, "Chest"),
    LocationName.TramCommonMythrilShard1:               LocationData(423, "Chest"),
    LocationName.TramCommonPotion1:                     LocationData(424, "Chest"),
    LocationName.TramCommonMythrilShard2:               LocationData(425, "Chest"),
    LocationName.TramCommonPotion2:                     LocationData(484, "Chest"),
    LocationName.StationPlazaSecretAnsemReport2:        LocationData(526, "Chest"),
    LocationName.MunnyPouchMickey:                      LocationData(290, "Chest"),
    LocationName.CrystalOrb:                            LocationData(291, "Chest"),
    LocationName.CentralStationTent:                    LocationData(431, "Chest"),
    LocationName.TTCentralStationHiPotion:              LocationData(432, "Chest"),
    LocationName.CentralStationMythrilShard:            LocationData(433, "Chest"),
    LocationName.TheTowerPotion:                        LocationData(465, "Chest"),
    LocationName.TheTowerHiPotion:                      LocationData(466, "Chest"),
    LocationName.TheTowerEther:                         LocationData(522, "Chest"),
    LocationName.TowerEntrywayEther:                    LocationData(467, "Chest"),
    LocationName.TowerEntrywayMythrilShard:             LocationData(468, "Chest"),
    LocationName.SorcerersLoftTowerMap:                 LocationData(469, "Chest"),
    LocationName.TowerWardrobeMythrilStone:             LocationData(470, "Chest"),
    LocationName.StarSeeker:                            LocationData(304, "Chest"),
    LocationName.ValorForm:                             LocationData(286, "Chest"),
    LocationName.SeifersTrophy:                         LocationData(294, "Chest"),
    LocationName.Oathkeeper:                            LocationData(265, "Chest"),
    LocationName.LimitForm:                             LocationData(543, "Chest"),
    LocationName.UndergroundConcourseMythrilGem:        LocationData(479, "Chest"),
    LocationName.UndergroundConcourseAPBoost:           LocationData(481, "Chest"),
    LocationName.UndergroundConcourseOrichalcum:        LocationData(480, "Chest"),
    LocationName.UndergroundConcourseMythrilCrystal:    LocationData(482, "Chest"),
    LocationName.TunnelwayOrichalcum:                   LocationData(477, "Chest"),
    LocationName.TunnelwayMythrilCrystal:               LocationData(478, "Chest"),
    LocationName.SunsetTerraceOrichalcumPlus:           LocationData(438, "Chest"),
    LocationName.SunsetTerraceMythrilShard:             LocationData(439, "Chest"),
    LocationName.SunsetTerraceMythrilCrystal:           LocationData(440, "Chest"),
    LocationName.SunsetTerraceAPBoost:                  LocationData(441, "Chest"),
    LocationName.MansionNobodies:                       LocationData(56, "Get Bonus"),
    LocationName.MansionFoyerMythrilCrystal:            LocationData(452, "Chest"),
    LocationName.MansionFoyerMythrilStone:              LocationData(453, "Chest"),
    LocationName.MansionFoyerSerenityCrystal:           LocationData(454, "Chest"),
    LocationName.MansionDiningRoomMythrilCrystal:       LocationData(457, "Chest"),
    LocationName.MansionDiningRoomMythrilStone:         LocationData(458, "Chest"),
    LocationName.MansionLibraryOrichalcum:              LocationData(460, "Chest"),
    LocationName.BeamSecretAnsemReport10:               LocationData(534, "Chest"),
    LocationName.MansionBasementCorridorUltimateRecipe: LocationData(464, "Chest"),
    LocationName.BetwixtandBetween:                     LocationData(63, "Get Bonus"),
    LocationName.BetwixtandBetweenBondofFlame:          LocationData(317, "Chest"),
    LocationName.AxelDataMagicBoost:                    LocationData(561, "Chest"),
}
TWTNW_Checks = {
    LocationName.FragmentCrossingMythrilStone:          LocationData(374, "Chest"),
    LocationName.FragmentCrossingMythrilCrystal:        LocationData(375, "Chest"),
    LocationName.FragmentCrossingAPBoost:               LocationData(376, "Chest"),
    LocationName.FragmentCrossingOrichalcum:            LocationData(377, "Chest"),
    LocationName.Roxas:                                 LocationData(69, "Double Get Bonus"),
    LocationName.RoxasGetBonus:                         LocationData(69, "Second Get Bonus"),
    LocationName.RoxasSecretAnsemReport8:               LocationData(532, "Chest"),
    LocationName.TwoBecomeOne:                          LocationData(277, "Chest"),
    LocationName.MemorysSkyscaperMythrilCrystal:        LocationData(391, "Chest"),
    LocationName.MemorysSkyscaperAPBoost:               LocationData(523, "Chest"),
    LocationName.MemorysSkyscaperMythrilStone:          LocationData(524, "Chest"),
    LocationName.TheBrinkofDespairDarkCityMap:          LocationData(335, "Chest"),
    LocationName.TheBrinkofDespairOrichalcumPlus:       LocationData(500, "Chest"),
    LocationName.NothingsCallMythrilGem:                LocationData(378, "Chest"),
    LocationName.NothingsCallOrichalcum:                LocationData(379, "Chest"),
    LocationName.TwilightsViewCosmicBelt:               LocationData(336, "Chest"),
    LocationName.XigbarBonus:                           LocationData(23, "Get Bonus"),
    LocationName.XigbarSecretAnsemReport3:              LocationData(527, "Chest"),
    LocationName.NaughtsSkywayMythrilGem:               LocationData(380, "Chest"),
    LocationName.NaughtsSkywayOrichalcum:               LocationData(381, "Chest"),
    LocationName.NaughtsSkywayMythrilCrystal:           LocationData(382, "Chest"),
    LocationName.Oblivion:                              LocationData(278, "Chest"),
    LocationName.CastleThatNeverWasMap:                 LocationData(496, "Chest"),
    LocationName.Luxord:                                LocationData(24, "Double Get Bonus"),
    LocationName.LuxordGetBonus:                        LocationData(24, "Second Get Bonus"),
    LocationName.LuxordSecretAnsemReport9:              LocationData(533, "Chest"),
    LocationName.SaixBonus:                             LocationData(25, "Get Bonus"),
    LocationName.SaixSecretAnsemReport12:               LocationData(536, "Chest"),
    LocationName.PreXemnas1SecretAnsemReport11:         LocationData(535, "Chest"),
    LocationName.RuinandCreationsPassageMythrilStone:   LocationData(385, "Chest"),
    LocationName.RuinandCreationsPassageAPBoost:        LocationData(386, "Chest"),
    LocationName.RuinandCreationsPassageMythrilCrystal: LocationData(387, "Chest"),
    LocationName.RuinandCreationsPassageOrichalcum:     LocationData(388, "Chest"),
    LocationName.Xemnas1:                               LocationData(26, "Double Get Bonus"),
    LocationName.Xemnas1GetBonus:                       LocationData(26, "Second Get Bonus"),
    LocationName.Xemnas1SecretAnsemReport13:            LocationData(537, "Chest"),
    # LocationName.FinalXemnas:                           LocationData(71, "Get Bonus"),
    LocationName.XemnasDataPowerBoost:                  LocationData(554, "Chest"),
}

SoraLevels = {
    LocationName.Lvl2:  LocationData(2, "Levels"),
    LocationName.Lvl3:  LocationData(3, "Levels"),
    LocationName.Lvl4:  LocationData(4, "Levels"),
    LocationName.Lvl5:  LocationData(5, "Levels"),
    LocationName.Lvl6:  LocationData(6, "Levels"),
    LocationName.Lvl7:  LocationData(7, "Levels"),
    LocationName.Lvl8:  LocationData(8, "Levels"),
    LocationName.Lvl9:  LocationData(9, "Levels"),
    LocationName.Lvl10: LocationData(10, "Levels"),
    LocationName.Lvl11: LocationData(11, "Levels"),
    LocationName.Lvl12: LocationData(12, "Levels"),
    LocationName.Lvl13: LocationData(13, "Levels"),
    LocationName.Lvl14: LocationData(14, "Levels"),
    LocationName.Lvl15: LocationData(15, "Levels"),
    LocationName.Lvl16: LocationData(16, "Levels"),
    LocationName.Lvl17: LocationData(17, "Levels"),
    LocationName.Lvl18: LocationData(18, "Levels"),
    LocationName.Lvl19: LocationData(19, "Levels"),
    LocationName.Lvl20: LocationData(20, "Levels"),
    LocationName.Lvl21: LocationData(21, "Levels"),
    LocationName.Lvl22: LocationData(22, "Levels"),
    LocationName.Lvl23: LocationData(23, "Levels"),
    LocationName.Lvl24: LocationData(24, "Levels"),
    LocationName.Lvl25: LocationData(25, "Levels"),
    LocationName.Lvl26: LocationData(26, "Levels"),
    LocationName.Lvl27: LocationData(27, "Levels"),
    LocationName.Lvl28: LocationData(28, "Levels"),
    LocationName.Lvl29: LocationData(29, "Levels"),
    LocationName.Lvl30: LocationData(30, "Levels"),
    LocationName.Lvl31: LocationData(31, "Levels"),
    LocationName.Lvl32: LocationData(32, "Levels"),
    LocationName.Lvl33: LocationData(33, "Levels"),
    LocationName.Lvl34: LocationData(34, "Levels"),
    LocationName.Lvl35: LocationData(35, "Levels"),
    LocationName.Lvl36: LocationData(36, "Levels"),
    LocationName.Lvl37: LocationData(37, "Levels"),
    LocationName.Lvl38: LocationData(38, "Levels"),
    LocationName.Lvl39: LocationData(39, "Levels"),
    LocationName.Lvl40: LocationData(40, "Levels"),
    LocationName.Lvl41: LocationData(41, "Levels"),
    LocationName.Lvl42: LocationData(42, "Levels"),
    LocationName.Lvl43: LocationData(43, "Levels"),
    LocationName.Lvl44: LocationData(44, "Levels"),
    LocationName.Lvl45: LocationData(45, "Levels"),
    LocationName.Lvl46: LocationData(46, "Levels"),
    LocationName.Lvl47: LocationData(47, "Levels"),
    LocationName.Lvl48: LocationData(48, "Levels"),
    LocationName.Lvl49: LocationData(49, "Levels"),
    LocationName.Lvl50: LocationData(50, "Levels"),
    LocationName.Lvl51: LocationData(51, "Levels"),
    LocationName.Lvl52: LocationData(52, "Levels"),
    LocationName.Lvl53: LocationData(53, "Levels"),
    LocationName.Lvl54: LocationData(54, "Levels"),
    LocationName.Lvl55: LocationData(55, "Levels"),
    LocationName.Lvl56: LocationData(56, "Levels"),
    LocationName.Lvl57: LocationData(57, "Levels"),
    LocationName.Lvl58: LocationData(58, "Levels"),
    LocationName.Lvl59: LocationData(59, "Levels"),
    LocationName.Lvl60: LocationData(60, "Levels"),
    LocationName.Lvl61: LocationData(61, "Levels"),
    LocationName.Lvl62: LocationData(62, "Levels"),
    LocationName.Lvl63: LocationData(63, "Levels"),
    LocationName.Lvl64: LocationData(64, "Levels"),
    LocationName.Lvl65: LocationData(65, "Levels"),
    LocationName.Lvl66: LocationData(66, "Levels"),
    LocationName.Lvl67: LocationData(67, "Levels"),
    LocationName.Lvl68: LocationData(68, "Levels"),
    LocationName.Lvl69: LocationData(69, "Levels"),
    LocationName.Lvl70: LocationData(70, "Levels"),
    LocationName.Lvl71: LocationData(71, "Levels"),
    LocationName.Lvl72: LocationData(72, "Levels"),
    LocationName.Lvl73: LocationData(73, "Levels"),
    LocationName.Lvl74: LocationData(74, "Levels"),
    LocationName.Lvl75: LocationData(75, "Levels"),
    LocationName.Lvl76: LocationData(76, "Levels"),
    LocationName.Lvl77: LocationData(77, "Levels"),
    LocationName.Lvl78: LocationData(78, "Levels"),
    LocationName.Lvl79: LocationData(79, "Levels"),
    LocationName.Lvl80: LocationData(80, "Levels"),
    LocationName.Lvl81: LocationData(81, "Levels"),
    LocationName.Lvl82: LocationData(82, "Levels"),
    LocationName.Lvl83: LocationData(83, "Levels"),
    LocationName.Lvl84: LocationData(84, "Levels"),
    LocationName.Lvl85: LocationData(85, "Levels"),
    LocationName.Lvl86: LocationData(86, "Levels"),
    LocationName.Lvl87: LocationData(87, "Levels"),
    LocationName.Lvl88: LocationData(88, "Levels"),
    LocationName.Lvl89: LocationData(89, "Levels"),
    LocationName.Lvl90: LocationData(90, "Levels"),
    LocationName.Lvl91: LocationData(91, "Levels"),
    LocationName.Lvl92: LocationData(92, "Levels"),
    LocationName.Lvl93: LocationData(93, "Levels"),
    LocationName.Lvl94: LocationData(94, "Levels"),
    LocationName.Lvl95: LocationData(95, "Levels"),
    LocationName.Lvl96: LocationData(96, "Levels"),
    LocationName.Lvl97: LocationData(97, "Levels"),
    LocationName.Lvl98: LocationData(98, "Levels"),
    LocationName.Lvl99: LocationData(99, "Levels"),
}
Form_Checks = {
    LocationName.Valorlvl2:  LocationData(2, "Forms", 1),
    LocationName.Valorlvl3:  LocationData(3, "Forms", 1),
    LocationName.Valorlvl4:  LocationData(4, "Forms", 1),
    LocationName.Valorlvl5:  LocationData(5, "Forms", 1),
    LocationName.Valorlvl6:  LocationData(6, "Forms", 1),
    LocationName.Valorlvl7:  LocationData(7, "Forms", 1),

    LocationName.Wisdomlvl2: LocationData(2, "Forms", 2),
    LocationName.Wisdomlvl3: LocationData(3, "Forms", 2),
    LocationName.Wisdomlvl4: LocationData(4, "Forms", 2),
    LocationName.Wisdomlvl5: LocationData(5, "Forms", 2),
    LocationName.Wisdomlvl6: LocationData(6, "Forms", 2),
    LocationName.Wisdomlvl7: LocationData(7, "Forms", 2),

    LocationName.Limitlvl2:  LocationData(2, "Forms", 3),
    LocationName.Limitlvl3:  LocationData(3, "Forms", 3),
    LocationName.Limitlvl4:  LocationData(4, "Forms", 3),
    LocationName.Limitlvl5:  LocationData(5, "Forms", 3),
    LocationName.Limitlvl6:  LocationData(6, "Forms", 3),
    LocationName.Limitlvl7:  LocationData(7, "Forms", 3),

    LocationName.Masterlvl2: LocationData(2, "Forms", 4),
    LocationName.Masterlvl3: LocationData(3, "Forms", 4),
    LocationName.Masterlvl4: LocationData(4, "Forms", 4),
    LocationName.Masterlvl5: LocationData(5, "Forms", 4),
    LocationName.Masterlvl6: LocationData(6, "Forms", 4),
    LocationName.Masterlvl7: LocationData(7, "Forms", 4),

    LocationName.Finallvl2:  LocationData(2, "Forms", 5),
    LocationName.Finallvl3:  LocationData(3, "Forms", 5),
    LocationName.Finallvl4:  LocationData(4, "Forms", 5),
    LocationName.Finallvl5:  LocationData(5, "Forms", 5),
    LocationName.Finallvl6:  LocationData(6, "Forms", 5),
    LocationName.Finallvl7:  LocationData(7, "Forms", 5),
}
Summon_Checks = {
    LocationName.Summonlvl2: LocationData(2, "Summons"),
    LocationName.Summonlvl3: LocationData(3, "Summons"),
    LocationName.Summonlvl4: LocationData(4, "Summons"),
    LocationName.Summonlvl5: LocationData(5, "Summons"),
    LocationName.Summonlvl6: LocationData(6, "Summons"),
    LocationName.Summonlvl7: LocationData(7, "Summons"),
}
GoA_Checks = {
    LocationName.GardenofAssemblageMap: LocationData(585, "Chest"),
    LocationName.GoALostIllusion:       LocationData(586, "Chest"),
    LocationName.ProofofNonexistence:   LocationData(590, "Chest"),
}
Keyblade_Slots = {
    LocationName.FAKESlot:            LocationData(116, "Keyblade"),
    LocationName.DetectionSaberSlot:  LocationData(83, "Keyblade"),
    LocationName.EdgeofUltimaSlot:    LocationData(84, "Keyblade"),
    LocationName.KingdomKeySlot:      LocationData(80, "Keyblade"),
    LocationName.OathkeeperSlot:      LocationData(81, "Keyblade"),
    LocationName.OblivionSlot:        LocationData(82, "Keyblade"),
    LocationName.StarSeekerSlot:      LocationData(123, "Keyblade"),
    LocationName.HiddenDragonSlot:    LocationData(124, "Keyblade"),
    LocationName.HerosCrestSlot:      LocationData(127, "Keyblade"),
    LocationName.MonochromeSlot:      LocationData(128, "Keyblade"),
    LocationName.FollowtheWindSlot:   LocationData(129, "Keyblade"),
    LocationName.CircleofLifeSlot:    LocationData(130, "Keyblade"),
    LocationName.PhotonDebuggerSlot:  LocationData(131, "Keyblade"),
    LocationName.GullWingSlot:        LocationData(132, "Keyblade"),
    LocationName.RumblingRoseSlot:    LocationData(133, "Keyblade"),
    LocationName.GuardianSoulSlot:    LocationData(134, "Keyblade"),
    LocationName.WishingLampSlot:     LocationData(135, "Keyblade"),
    LocationName.DecisivePumpkinSlot: LocationData(136, "Keyblade"),
    LocationName.SweetMemoriesSlot:   LocationData(138, "Keyblade"),
    LocationName.MysteriousAbyssSlot: LocationData(139, "Keyblade"),
    LocationName.SleepingLionSlot:    LocationData(137, "Keyblade"),
    LocationName.BondofFlameSlot:     LocationData(141, "Keyblade"),
    LocationName.TwoBecomeOneSlot:    LocationData(148, "Keyblade"),
    LocationName.FatalCrestSlot:      LocationData(140, "Keyblade"),
    LocationName.FenrirSlot:          LocationData(142, "Keyblade"),
    LocationName.UltimaWeaponSlot:    LocationData(143, "Keyblade"),
    LocationName.WinnersProofSlot:    LocationData(149, "Keyblade"),
    LocationName.PurebloodSlot:       LocationData(85, "Keyblade"),
}

Donald_Checks = {
    LocationName.DonaldScreens:          LocationData(45, "Get Bonus", "Donald", 2),
    LocationName.DonaldDemyxHBGetBonus:  LocationData(28, "Get Bonus", "Donald", 2),
    LocationName.DonaldDemyxOC:          LocationData(58, "Get Bonus", "Donald", 2),
    LocationName.DonaldBoatPete:         LocationData(16, "Double Get Bonus", "Donald", 2),
    LocationName.DonaldBoatPeteGetBonus: LocationData(16, "Second Get Bonus", "Donald", 2),
    LocationName.DonaldPrisonKeeper:     LocationData(18, "Get Bonus", "Donald", 2),
    LocationName.DonaldScar:             LocationData(29, "Get Bonus", "Donald", 2),
    LocationName.DonaldSolarSailer:      LocationData(61, "Get Bonus", "Donald", 2),
    LocationName.DonaldExperiment:       LocationData(20, "Get Bonus", "Donald", 2),
    LocationName.DonaldBoatFight:        LocationData(62, "Get Bonus", "Donald", 2),
    LocationName.DonaldMansionNobodies:  LocationData(56, "Get Bonus", "Donald", 2),
    LocationName.DonaldThresholder:      LocationData(2, "Get Bonus", "Donald", 2),
    LocationName.DonaldXaldinGetBonus:   LocationData(4, "Get Bonus", "Donald", 2),
    LocationName.DonaladGrimReaper2:     LocationData(22, "Get Bonus", "Donald", 2),

    LocationName.CometStaff:             LocationData(90, "Keyblade", "Donald"),
    LocationName.HammerStaff:            LocationData(87, "Keyblade", "Donald"),
    LocationName.LordsBroom:             LocationData(91, "Keyblade", "Donald"),
    LocationName.MagesStaff:             LocationData(86, "Keyblade", "Donald"),
    LocationName.MeteorStaff:            LocationData(89, "Keyblade", "Donald"),
    LocationName.NobodyLance:            LocationData(94, "Keyblade", "Donald"),
    LocationName.PreciousMushroom:       LocationData(154, "Keyblade", "Donald"),
    LocationName.PreciousMushroom2:      LocationData(155, "Keyblade", "Donald"),
    LocationName.PremiumMushroom:        LocationData(156, "Keyblade", "Donald"),
    LocationName.RisingDragon:           LocationData(93, "Keyblade", "Donald"),
    LocationName.SaveTheQueen2:          LocationData(146, "Keyblade", "Donald"),
    LocationName.ShamansRelic:           LocationData(95, "Keyblade", "Donald"),
    LocationName.VictoryBell:            LocationData(88, "Keyblade", "Donald"),
    LocationName.WisdomWand:             LocationData(92, "Keyblade", "Donald"),
    LocationName.Centurion2:             LocationData(151, "Keyblade", "Donald"),
    LocationName.DonaldAbuEscort:        LocationData(42, "Get Bonus", "Donald", 2),
    # LocationName.DonaldStarting1:        LocationData(2, "Critical", "Donald"),
    # LocationName.DonaldStarting2:        LocationData(2, "Critical", "Donald"),
}

Goofy_Checks = {
    LocationName.GoofyBarbossa:           LocationData(21, "Double Get Bonus", "Goofy", 3),
    LocationName.GoofyBarbossaGetBonus:   LocationData(21, "Second Get Bonus", "Goofy", 3),
    LocationName.GoofyGrimReaper1:        LocationData(59, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHostileProgram:     LocationData(31, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHyenas1:            LocationData(49, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHyenas2:            LocationData(50, "Get Bonus", "Goofy", 3),
    LocationName.GoofyLock:               LocationData(40, "Get Bonus", "Goofy", 3),
    LocationName.GoofyOogieBoogie:        LocationData(19, "Get Bonus", "Goofy", 3),
    LocationName.GoofyPeteOC:             LocationData(6, "Get Bonus", "Goofy", 3),
    LocationName.GoofyFuturePete:         LocationData(17, "Get Bonus", "Goofy", 3),
    LocationName.GoofyShanYu:             LocationData(9, "Get Bonus", "Goofy", 3),
    LocationName.GoofyStormRider:         LocationData(10, "Get Bonus", "Goofy", 3),
    LocationName.GoofyBeast:              LocationData(12, "Get Bonus", "Goofy", 3),
    LocationName.GoofyInterceptorBarrels: LocationData(39, "Get Bonus", "Goofy", 3),
    LocationName.GoofyTreasureRoom:       LocationData(46, "Get Bonus", "Goofy", 3),
    LocationName.GoofyZexion:             LocationData(66, "Get Bonus", "Goofy", 3),

    LocationName.AdamantShield:           LocationData(100, "Keyblade", "Goofy"),
    LocationName.AkashicRecord:           LocationData(107, "Keyblade", "Goofy"),
    LocationName.ChainGear:               LocationData(101, "Keyblade", "Goofy"),
    LocationName.DreamCloud:              LocationData(104, "Keyblade", "Goofy"),
    LocationName.FallingStar:             LocationData(103, "Keyblade", "Goofy"),
    LocationName.FrozenPride2:            LocationData(158, "Keyblade", "Goofy"),
    LocationName.GenjiShield:             LocationData(106, "Keyblade", "Goofy"),
    LocationName.KnightDefender:          LocationData(105, "Keyblade", "Goofy"),
    LocationName.KnightsShield:           LocationData(99, "Keyblade", "Goofy"),
    LocationName.MajesticMushroom:        LocationData(161, "Keyblade", "Goofy"),
    LocationName.MajesticMushroom2:       LocationData(162, "Keyblade", "Goofy"),
    LocationName.NobodyGuard:             LocationData(108, "Keyblade", "Goofy"),
    LocationName.OgreShield:              LocationData(102, "Keyblade", "Goofy"),
    LocationName.SaveTheKing2:            LocationData(147, "Keyblade", "Goofy"),
    LocationName.UltimateMushroom:        LocationData(163, "Keyblade", "Goofy"),
    # LocationName.GoofyStarting1:          LocationData(3, "Critical", "Goofy"),
    # LocationName.GoofyStarting2:          LocationData(3, "Critical", "Goofy"),
}

Atlantica_Checks = {
    LocationName.UnderseaKingdomMap:     LocationData(367, "Chest"),
    LocationName.MysteriousAbyss:        LocationData(287, "Chest"),  # needs 2 magnets
    LocationName.MusicalBlizzardElement: LocationData(279, "Chest"),  # 2 magnets all thunders
    LocationName.MusicalOrichalcumPlus:  LocationData(538, "Chest"),  # 2 magnets all thunders
}

event_location_to_item = {
    LocationName.HostileProgramEventLocation:    ItemName.HostileProgramEvent,
    LocationName.McpEventLocation:               ItemName.McpEvent,
    # LocationName.ASLarxeneEventLocation:             ItemName.ASLarxeneEvent,
    LocationName.DataLarxeneEventLocation:       ItemName.DataLarxeneEvent,
    LocationName.BarbosaEventLocation:           ItemName.BarbosaEvent,
    LocationName.GrimReaper1EventLocation:       ItemName.GrimReaper1Event,
    LocationName.GrimReaper2EventLocation:       ItemName.GrimReaper2Event,
    LocationName.DataLuxordEventLocation:        ItemName.DataLuxordEvent,
    LocationName.DataAxelEventLocation:          ItemName.DataAxelEvent,
    LocationName.CerberusEventLocation:          ItemName.CerberusEvent,
    LocationName.OlympusPeteEventLocation:       ItemName.OlympusPeteEvent,
    LocationName.HydraEventLocation:             ItemName.HydraEvent,
    LocationName.OcPainAndPanicCupEventLocation: ItemName.OcPainAndPanicCupEvent,
    LocationName.OcCerberusCupEventLocation:     ItemName.OcCerberusCupEvent,
    LocationName.HadesEventLocation:             ItemName.HadesEvent,
    # LocationName.ASZexionEventLocation:              ItemName.ASZexionEvent,
    LocationName.DataZexionEventLocation:        ItemName.DataZexionEvent,
    LocationName.Oc2TitanCupEventLocation:       ItemName.Oc2TitanCupEvent,
    LocationName.Oc2GofCupEventLocation:         ItemName.Oc2GofCupEvent,
    # LocationName.Oc2CupsEventLocation:               ItemName.Oc2CupsEventLocation,
    LocationName.HadesCupEventLocations:         ItemName.HadesCupEvents,
    LocationName.PrisonKeeperEventLocation:      ItemName.PrisonKeeperEvent,
    LocationName.OogieBoogieEventLocation:       ItemName.OogieBoogieEvent,
    LocationName.ExperimentEventLocation:        ItemName.ExperimentEvent,
    # LocationName.ASVexenEventLocation:               ItemName.ASVexenEvent,
    LocationName.DataVexenEventLocation:         ItemName.DataVexenEvent,
    LocationName.ShanYuEventLocation:            ItemName.ShanYuEvent,
    LocationName.AnsemRikuEventLocation:         ItemName.AnsemRikuEvent,
    LocationName.StormRiderEventLocation:        ItemName.StormRiderEvent,
    LocationName.DataXigbarEventLocation:        ItemName.DataXigbarEvent,
    LocationName.RoxasEventLocation:             ItemName.RoxasEvent,
    LocationName.XigbarEventLocation:            ItemName.XigbarEvent,
    LocationName.LuxordEventLocation:            ItemName.LuxordEvent,
    LocationName.SaixEventLocation:              ItemName.SaixEvent,
    LocationName.XemnasEventLocation:            ItemName.XemnasEvent,
    LocationName.ArmoredXemnasEventLocation:     ItemName.ArmoredXemnasEvent,
    LocationName.ArmoredXemnas2EventLocation:    ItemName.ArmoredXemnas2Event,
    # LocationName.FinalXemnasEventLocation:           ItemName.FinalXemnasEvent,
    LocationName.DataXemnasEventLocation:        ItemName.DataXemnasEvent,
    LocationName.ThresholderEventLocation:       ItemName.ThresholderEvent,
    LocationName.BeastEventLocation:             ItemName.BeastEvent,
    LocationName.DarkThornEventLocation:         ItemName.DarkThornEvent,
    LocationName.XaldinEventLocation:            ItemName.XaldinEvent,
    LocationName.DataXaldinEventLocation:        ItemName.DataXaldinEvent,
    LocationName.TwinLordsEventLocation:         ItemName.TwinLordsEvent,
    LocationName.GenieJafarEventLocation:        ItemName.GenieJafarEvent,
    # LocationName.ASLexaeusEventLocation:             ItemName.ASLexaeusEvent,
    LocationName.DataLexaeusEventLocation:       ItemName.DataLexaeusEvent,
    LocationName.ScarEventLocation:              ItemName.ScarEvent,
    LocationName.GroundShakerEventLocation:      ItemName.GroundShakerEvent,
    LocationName.DataSaixEventLocation:          ItemName.DataSaixEvent,
    LocationName.HBDemyxEventLocation:           ItemName.HBDemyxEvent,
    LocationName.ThousandHeartlessEventLocation: ItemName.ThousandHeartlessEvent,
    LocationName.Mushroom13EventLocation:        ItemName.Mushroom13Event,
    LocationName.SephiEventLocation:             ItemName.SephiEvent,
    LocationName.DataDemyxEventLocation:         ItemName.DataDemyxEvent,
    LocationName.CorFirstFightEventLocation:     ItemName.CorFirstFightEvent,
    LocationName.CorSecondFightEventLocation:    ItemName.CorSecondFightEvent,
    LocationName.TransportEventLocation:         ItemName.TransportEvent,
    LocationName.OldPeteEventLocation:           ItemName.OldPeteEvent,
    LocationName.FuturePeteEventLocation:        ItemName.FuturePeteEvent,
    # LocationName.ASMarluxiaEventLocation:            ItemName.ASMarluxiaEvent,
    LocationName.DataMarluxiaEventLocation:      ItemName.DataMarluxiaEvent,
    LocationName.TerraEventLocation:             ItemName.TerraEvent,
    LocationName.TwilightThornEventLocation:     ItemName.TwilightThornEvent,
    LocationName.Axel1EventLocation:             ItemName.Axel1Event,
    LocationName.Axel2EventLocation:             ItemName.Axel2Event,
    LocationName.DataRoxasEventLocation:         ItemName.DataRoxasEvent,
    LocationName.FinalXemnasEventLocation:       ItemName.Victory,
}
all_weapon_slot = {
    LocationName.FAKESlot,
    LocationName.DetectionSaberSlot,
    LocationName.EdgeofUltimaSlot,
    LocationName.KingdomKeySlot,
    LocationName.OathkeeperSlot,
    LocationName.OblivionSlot,
    LocationName.StarSeekerSlot,
    LocationName.HiddenDragonSlot,
    LocationName.HerosCrestSlot,
    LocationName.MonochromeSlot,
    LocationName.FollowtheWindSlot,
    LocationName.CircleofLifeSlot,
    LocationName.PhotonDebuggerSlot,
    LocationName.GullWingSlot,
    LocationName.RumblingRoseSlot,
    LocationName.GuardianSoulSlot,
    LocationName.WishingLampSlot,
    LocationName.DecisivePumpkinSlot,
    LocationName.SweetMemoriesSlot,
    LocationName.MysteriousAbyssSlot,
    LocationName.SleepingLionSlot,
    LocationName.BondofFlameSlot,
    LocationName.TwoBecomeOneSlot,
    LocationName.FatalCrestSlot,
    LocationName.FenrirSlot,
    LocationName.UltimaWeaponSlot,
    LocationName.WinnersProofSlot,
    LocationName.PurebloodSlot,

    LocationName.Centurion2,
    LocationName.CometStaff,
    LocationName.HammerStaff,
    LocationName.LordsBroom,
    LocationName.MagesStaff,
    LocationName.MeteorStaff,
    LocationName.NobodyLance,
    LocationName.PreciousMushroom,
    LocationName.PreciousMushroom2,
    LocationName.PremiumMushroom,
    LocationName.RisingDragon,
    LocationName.SaveTheQueen2,
    LocationName.ShamansRelic,
    LocationName.VictoryBell,
    LocationName.WisdomWand,

    LocationName.AdamantShield,
    LocationName.AkashicRecord,
    LocationName.ChainGear,
    LocationName.DreamCloud,
    LocationName.FallingStar,
    LocationName.FrozenPride2,
    LocationName.GenjiShield,
    LocationName.KnightDefender,
    LocationName.KnightsShield,
    LocationName.MajesticMushroom,
    LocationName.MajesticMushroom2,
    LocationName.NobodyGuard,
    LocationName.OgreShield,
    LocationName.SaveTheKing2,
    LocationName.UltimateMushroom, }

all_locations = {
    **TWTNW_Checks,
    **TT_Checks,
    **STT_Checks,
    **PL_Checks,
    **HB_Checks,
    **HT_Checks,
    **PR_Checks,
    **PR_Checks,
    **SP_Checks,
    **BC_Checks,
    **Oc_Checks,
    **HundredAcre_Checks,
    **DC_Checks,
    **AG_Checks,
    **LoD_Checks,
    **SoraLevels,
    **Form_Checks,
    **GoA_Checks,
    **Keyblade_Slots,
    **Donald_Checks,
    **Goofy_Checks,
    **Atlantica_Checks,
    **Summon_Checks,
}

popups_set = {
    LocationName.SweetMemories,
    LocationName.SpookyCaveMap,
    LocationName.StarryHillCureElement,
    LocationName.StarryHillOrichalcumPlus,
    LocationName.AgrabahMap,
    LocationName.LampCharm,
    LocationName.WishingLamp,
    LocationName.DarkThornCureElement,
    LocationName.RumblingRose,
    LocationName.CastleWallsMap,
    LocationName.SecretAnsemReport4,
    LocationName.DisneyCastleMap,
    LocationName.WindowofTimeMap,
    LocationName.Monochrome,
    LocationName.WisdomForm,
    LocationName.LingeringWillProofofConnection,
    LocationName.LingeringWillManifestIllusion,
    LocationName.OogieBoogieMagnetElement,
    LocationName.Present,
    LocationName.DecoyPresents,
    LocationName.DecisivePumpkin,
    LocationName.MarketplaceMap,
    LocationName.MerlinsHouseMembershipCard,
    LocationName.MerlinsHouseBlizzardElement,
    LocationName.BaileySecretAnsemReport7,
    LocationName.BaseballCharm,
    LocationName.AnsemsStudyMasterForm,
    LocationName.AnsemsStudySkillRecipe,
    LocationName.AnsemsStudySleepingLion,
    LocationName.FFFightsCureElement,
    LocationName.ThousandHeartlessSecretAnsemReport1,
    LocationName.ThousandHeartlessIceCream,
    LocationName.ThousandHeartlessPicture,
    LocationName.WinnersProof,
    LocationName.ProofofPeace,
    LocationName.SephirothFenrir,
    LocationName.EncampmentAreaMap,
    LocationName.Mission3,
    LocationName.VillageCaveAreaMap,
    LocationName.HiddenDragon,
    LocationName.ColiseumMap,
    LocationName.SecretAnsemReport6,
    LocationName.OlympusStone,
    LocationName.HerosCrest,
    LocationName.AuronsStatue,
    LocationName.GuardianSoul,
    LocationName.ProtectBeltPainandPanicCup,
    LocationName.SerenityGemPainandPanicCup,
    LocationName.RisingDragonCerberusCup,
    LocationName.SerenityCrystalCerberusCup,
    LocationName.GenjiShieldTitanCup,
    LocationName.SkillfulRingTitanCup,
    LocationName.FatalCrestGoddessofFateCup,
    LocationName.OrichalcumPlusGoddessofFateCup,
    LocationName.HadesCupTrophyParadoxCups,
    LocationName.IsladeMuertaMap,
    LocationName.FollowtheWind,
    LocationName.SeadriftRowCursedMedallion,
    LocationName.SeadriftRowShipGraveyardMap,
    LocationName.SecretAnsemReport5,
    LocationName.CircleofLife,
    LocationName.ScarFireElement,
    LocationName.TwilightTownMap,
    LocationName.MunnyPouchOlette,
    LocationName.JunkChampionBelt,
    LocationName.JunkMedal,
    LocationName.TheStruggleTrophy,
    LocationName.NaminesSketches,
    LocationName.MansionMap,
    LocationName.PhotonDebugger,
    LocationName.StationPlazaSecretAnsemReport2,
    LocationName.MunnyPouchMickey,
    LocationName.CrystalOrb,
    LocationName.StarSeeker,
    LocationName.ValorForm,
    LocationName.SeifersTrophy,
    LocationName.Oathkeeper,
    LocationName.LimitForm,
    LocationName.BeamSecretAnsemReport10,
    LocationName.BetwixtandBetweenBondofFlame,
    LocationName.TwoBecomeOne,
    LocationName.RoxasSecretAnsemReport8,
    LocationName.XigbarSecretAnsemReport3,
    LocationName.Oblivion,
    LocationName.CastleThatNeverWasMap,
    LocationName.LuxordSecretAnsemReport9,
    LocationName.SaixSecretAnsemReport12,
    LocationName.PreXemnas1SecretAnsemReport11,
    LocationName.Xemnas1SecretAnsemReport13,
    LocationName.XemnasDataPowerBoost,
    LocationName.AxelDataMagicBoost,
    LocationName.RoxasDataMagicBoost,
    LocationName.SaixDataDefenseBoost,
    LocationName.DemyxDataAPBoost,
    LocationName.LuxordDataAPBoost,
    LocationName.VexenDataLostIllusion,
    LocationName.LarxeneDataLostIllusion,
    LocationName.XaldinDataDefenseBoost,
    LocationName.MarluxiaDataLostIllusion,
    LocationName.LexaeusDataLostIllusion,
    LocationName.XigbarDataDefenseBoost,
    LocationName.VexenASRoadtoDiscovery,
    LocationName.LarxeneASCloakedThunder,
    LocationName.ZexionASBookofShadows,
    LocationName.ZexionDataLostIllusion,
    LocationName.LexaeusASStrengthBeyondStrength,
    LocationName.MarluxiaASEternalBlossom,
    LocationName.UnderseaKingdomMap,
    LocationName.MysteriousAbyss,
    LocationName.MusicalBlizzardElement,
    LocationName.MusicalOrichalcumPlus,
}
exclusion_table = {
    "SuperBosses":   {
        LocationName.LingeringWillBonus,
        LocationName.LingeringWillProofofConnection,
        LocationName.LingeringWillManifestIllusion,
        LocationName.SephirothBonus,
        LocationName.SephirothFenrir,
        LocationName.XemnasDataPowerBoost,
        LocationName.AxelDataMagicBoost,
        LocationName.RoxasDataMagicBoost,
        LocationName.SaixDataDefenseBoost,
        LocationName.DemyxDataAPBoost,
        LocationName.LuxordDataAPBoost,
        LocationName.VexenDataLostIllusion,
        LocationName.VexenBonus,
        LocationName.VexenASRoadtoDiscovery,
        LocationName.LarxeneDataLostIllusion,
        LocationName.LarxeneBonus,
        LocationName.LarxeneASCloakedThunder,
        LocationName.XaldinDataDefenseBoost,
        LocationName.MarluxiaDataLostIllusion,
        LocationName.MarluxiaASEternalBlossom,
        LocationName.MarluxiaGetBonus,
        LocationName.LexaeusDataLostIllusion,
        LocationName.LexaeusBonus,
        LocationName.LexaeusASStrengthBeyondStrength,
        LocationName.XigbarDataDefenseBoost,
        LocationName.ZexionDataLostIllusion,
        LocationName.ZexionBonus,
        LocationName.ZexionASBookofShadows,
        LocationName.GoofyZexion,
    },

    # 23 checks spread through 50 levels
    "Level50":       {
        LocationName.Lvl2,
        LocationName.Lvl4,
        LocationName.Lvl7,
        LocationName.Lvl9,
        LocationName.Lvl10,
        LocationName.Lvl12,
        LocationName.Lvl14,
        LocationName.Lvl15,
        LocationName.Lvl17,
        LocationName.Lvl20,
        LocationName.Lvl23,
        LocationName.Lvl25,
        LocationName.Lvl28,
        LocationName.Lvl30,
        LocationName.Lvl32,
        LocationName.Lvl34,
        LocationName.Lvl36,
        LocationName.Lvl39,
        LocationName.Lvl41,
        LocationName.Lvl44,
        LocationName.Lvl46,
        LocationName.Lvl48,
        LocationName.Lvl50,
    },
    # 23 checks spread through 99 levels
    "Level99":       {
        LocationName.Lvl7,
        LocationName.Lvl9,
        LocationName.Lvl12,
        LocationName.Lvl15,
        LocationName.Lvl17,
        LocationName.Lvl20,
        LocationName.Lvl23,
        LocationName.Lvl25,
        LocationName.Lvl28,
        LocationName.Lvl31,
        LocationName.Lvl33,
        LocationName.Lvl36,
        LocationName.Lvl39,
        LocationName.Lvl41,
        LocationName.Lvl44,
        LocationName.Lvl47,
        LocationName.Lvl49,
        LocationName.Lvl53,
        LocationName.Lvl59,
        LocationName.Lvl65,
        LocationName.Lvl73,
        LocationName.Lvl85,
        LocationName.Lvl99,
    },
    "Level50Sanity": {
        LocationName.Lvl2,
        LocationName.Lvl3,
        LocationName.Lvl4,
        LocationName.Lvl5,
        LocationName.Lvl6,
        LocationName.Lvl7,
        LocationName.Lvl8,
        LocationName.Lvl9,
        LocationName.Lvl10,
        LocationName.Lvl11,
        LocationName.Lvl12,
        LocationName.Lvl13,
        LocationName.Lvl14,
        LocationName.Lvl15,
        LocationName.Lvl16,
        LocationName.Lvl17,
        LocationName.Lvl18,
        LocationName.Lvl19,
        LocationName.Lvl20,
        LocationName.Lvl21,
        LocationName.Lvl22,
        LocationName.Lvl23,
        LocationName.Lvl24,
        LocationName.Lvl25,
        LocationName.Lvl26,
        LocationName.Lvl27,
        LocationName.Lvl28,
        LocationName.Lvl29,
        LocationName.Lvl30,
        LocationName.Lvl31,
        LocationName.Lvl32,
        LocationName.Lvl33,
        LocationName.Lvl34,
        LocationName.Lvl35,
        LocationName.Lvl36,
        LocationName.Lvl37,
        LocationName.Lvl38,
        LocationName.Lvl39,
        LocationName.Lvl40,
        LocationName.Lvl41,
        LocationName.Lvl42,
        LocationName.Lvl43,
        LocationName.Lvl44,
        LocationName.Lvl45,
        LocationName.Lvl46,
        LocationName.Lvl47,
        LocationName.Lvl48,
        LocationName.Lvl49,
        LocationName.Lvl50,
    },
    "Level99Sanity": {
        LocationName.Lvl51,
        LocationName.Lvl52,
        LocationName.Lvl53,
        LocationName.Lvl54,
        LocationName.Lvl55,
        LocationName.Lvl56,
        LocationName.Lvl57,
        LocationName.Lvl58,
        LocationName.Lvl59,
        LocationName.Lvl60,
        LocationName.Lvl61,
        LocationName.Lvl62,
        LocationName.Lvl63,
        LocationName.Lvl64,
        LocationName.Lvl65,
        LocationName.Lvl66,
        LocationName.Lvl67,
        LocationName.Lvl68,
        LocationName.Lvl69,
        LocationName.Lvl70,
        LocationName.Lvl71,
        LocationName.Lvl72,
        LocationName.Lvl73,
        LocationName.Lvl74,
        LocationName.Lvl75,
        LocationName.Lvl76,
        LocationName.Lvl77,
        LocationName.Lvl78,
        LocationName.Lvl79,
        LocationName.Lvl80,
        LocationName.Lvl81,
        LocationName.Lvl82,
        LocationName.Lvl83,
        LocationName.Lvl84,
        LocationName.Lvl85,
        LocationName.Lvl86,
        LocationName.Lvl87,
        LocationName.Lvl88,
        LocationName.Lvl89,
        LocationName.Lvl90,
        LocationName.Lvl91,
        LocationName.Lvl92,
        LocationName.Lvl93,
        LocationName.Lvl94,
        LocationName.Lvl95,
        LocationName.Lvl96,
        LocationName.Lvl97,
        LocationName.Lvl98,
        LocationName.Lvl99,
    },
    "Hitlist":       [
        LocationName.XemnasDataPowerBoost,
        LocationName.AxelDataMagicBoost,
        LocationName.RoxasDataMagicBoost,
        LocationName.SaixDataDefenseBoost,
        LocationName.DemyxDataAPBoost,
        LocationName.LuxordDataAPBoost,
        LocationName.VexenDataLostIllusion,
        LocationName.LarxeneDataLostIllusion,
        LocationName.XaldinDataDefenseBoost,
        LocationName.MarluxiaDataLostIllusion,
        LocationName.LexaeusDataLostIllusion,
        LocationName.XigbarDataDefenseBoost,
        LocationName.ZexionDataLostIllusion,
        LocationName.SephirothFenrir,
        LocationName.LingeringWillProofofConnection,
        LocationName.StarryHillOrichalcumPlus,
        LocationName.Valorlvl7,
        LocationName.Wisdomlvl7,
        LocationName.Limitlvl7,
        LocationName.Masterlvl7,
        LocationName.Finallvl7,
        LocationName.Summonlvl7,
        LocationName.TransporttoRemembrance,
        LocationName.OrichalcumPlusGoddessofFateCup,
        LocationName.HadesCupTrophyParadoxCups,
        LocationName.MusicalOrichalcumPlus,
    ],
    "Cups":          {
        LocationName.ProtectBeltPainandPanicCup,
        LocationName.SerenityGemPainandPanicCup,
        LocationName.RisingDragonCerberusCup,
        LocationName.SerenityCrystalCerberusCup,
        LocationName.GenjiShieldTitanCup,
        LocationName.SkillfulRingTitanCup,
        LocationName.FatalCrestGoddessofFateCup,
        LocationName.OrichalcumPlusGoddessofFateCup,
        LocationName.HadesCupTrophyParadoxCups,
    },
    "Atlantica":     {
        LocationName.MysteriousAbyss,
        LocationName.MusicalOrichalcumPlus,
        LocationName.MusicalBlizzardElement,
        LocationName.UnderseaKingdomMap,
    },
    "WeaponSlots":   {
        LocationName.FAKESlot:            ItemName.ValorForm,
        LocationName.DetectionSaberSlot:  ItemName.MasterForm,
        LocationName.EdgeofUltimaSlot:    ItemName.FinalForm,
        LocationName.OathkeeperSlot:      ItemName.Oathkeeper,
        LocationName.OblivionSlot:        ItemName.Oblivion,
        LocationName.StarSeekerSlot:      ItemName.StarSeeker,
        LocationName.HiddenDragonSlot:    ItemName.HiddenDragon,
        LocationName.HerosCrestSlot:      ItemName.HerosCrest,
        LocationName.MonochromeSlot:      ItemName.Monochrome,
        LocationName.FollowtheWindSlot:   ItemName.FollowtheWind,
        LocationName.CircleofLifeSlot:    ItemName.CircleofLife,
        LocationName.PhotonDebuggerSlot:  ItemName.PhotonDebugger,
        LocationName.GullWingSlot:        ItemName.GullWing,
        LocationName.RumblingRoseSlot:    ItemName.RumblingRose,
        LocationName.GuardianSoulSlot:    ItemName.GuardianSoul,
        LocationName.WishingLampSlot:     ItemName.WishingLamp,
        LocationName.DecisivePumpkinSlot: ItemName.DecisivePumpkin,
        LocationName.SweetMemoriesSlot:   ItemName.SweetMemories,
        LocationName.MysteriousAbyssSlot: ItemName.MysteriousAbyss,
        LocationName.SleepingLionSlot:    ItemName.SleepingLion,
        LocationName.BondofFlameSlot:     ItemName.BondofFlame,
        LocationName.TwoBecomeOneSlot:    ItemName.TwoBecomeOne,
        LocationName.FatalCrestSlot:      ItemName.FatalCrest,
        LocationName.FenrirSlot:          ItemName.Fenrir,
        LocationName.UltimaWeaponSlot:    ItemName.UltimaWeapon,
        LocationName.WinnersProofSlot:    ItemName.WinnersProof,
        LocationName.PurebloodSlot:       ItemName.Pureblood,
        # goofy
        LocationName.AkashicRecord:       ItemName.AkashicRecord,
        LocationName.FrozenPride2:        ItemName.FrozenPride2,
        LocationName.GenjiShield:         ItemName.GenjiShield,
        LocationName.MajesticMushroom:    ItemName.MajesticMushroom,
        LocationName.MajesticMushroom2:   ItemName.MajesticMushroom2,
        LocationName.NobodyGuard:         ItemName.NobodyGuard,
        LocationName.OgreShield:          ItemName.OgreShield,
        LocationName.SaveTheKing2:        ItemName.SaveTheKing2,
        LocationName.UltimateMushroom:    ItemName.UltimateMushroom,
        # donald
        LocationName.MeteorStaff:         ItemName.MeteorStaff,
        LocationName.NobodyLance:         ItemName.NobodyLance,
        LocationName.PreciousMushroom:    ItemName.PreciousMushroom,
        LocationName.PreciousMushroom2:   ItemName.PreciousMushroom2,
        LocationName.PremiumMushroom:     ItemName.PremiumMushroom,
        LocationName.RisingDragon:        ItemName.RisingDragon,
        LocationName.SaveTheQueen2:       ItemName.SaveTheQueen2,
        LocationName.ShamansRelic:        ItemName.ShamansRelic,
        LocationName.Centurion2:          ItemName.Centurion2,
    },
    "Chests":        {
        location for location, data in all_locations.items() if location not in event_location_to_item.keys() and location not in popups_set and location != LocationName.StationofSerenityPotion and data.yml == "Chest"
    }
}

location_groups: typing.Dict[str, list]
location_groups = {
    Region_Name: [loc for loc in Region_Locs if "Event" not in loc]
    for Region_Name, Region_Locs in KH2REGIONS.items() if Region_Locs and "Event" not in Region_Locs[0]
}
