import typing

from BaseClasses import Location
from .Names import LocationName, RegionName, ItemName


class KH2Location(Location):
    game: str = "Kingdom Hearts 2"


class LocationData(typing.NamedTuple):
    code: typing.Optional[int]
    locid: int
    yml: str
    charName: str = "Sora"
    charNumber: int = 1


# data's addrcheck sys3 addr obtained roomid bit index is eventid
LoD_Checks = {
    LocationName.BambooGroveDarkShard:        LocationData(0x130000, 245, "Chest"),
    LocationName.BambooGroveEther:            LocationData(0x130001, 497, "Chest"),
    LocationName.BambooGroveMythrilShard:     LocationData(0x130002, 498, "Chest"),
    LocationName.EncampmentAreaMap:           LocationData(0x130003, 350, "Chest"),
    LocationName.Mission3:                    LocationData(0x130004, 417, "Chest"),
    LocationName.CheckpointHiPotion:          LocationData(0x130005, 21, "Chest"),
    LocationName.CheckpointMythrilShard:      LocationData(0x130006, 121, "Chest"),
    LocationName.MountainTrailLightningShard: LocationData(0x130007, 22, "Chest"),
    LocationName.MountainTrailRecoveryRecipe: LocationData(0x130008, 23, "Chest"),
    LocationName.MountainTrailEther:          LocationData(0x130009, 122, "Chest"),
    LocationName.MountainTrailMythrilShard:   LocationData(0x13000A, 123, "Chest"),
    LocationName.VillageCaveAreaMap:          LocationData(0x13000B, 495, "Chest"),
    LocationName.VillageCaveDarkShard:        LocationData(0x13000C, 125, "Chest"),
    LocationName.VillageCaveAPBoost:          LocationData(0x13000D, 124, "Chest"),
    LocationName.VillageCaveBonus:            LocationData(0x13000E, 43, "Get Bonus"),
    LocationName.RidgeFrostShard:             LocationData(0x13000F, 24, "Chest"),
    LocationName.RidgeAPBoost:                LocationData(0x130010, 126, "Chest"),
    LocationName.ShanYu:                      LocationData(0x130011, 9, "Double Get Bonus"),
    LocationName.ShanYuGetBonus:              LocationData(0x130012, 9, "Second Get Bonus"),
    LocationName.HiddenDragon:                LocationData(0x130013, 257, "Chest"),

}
LoD2_Checks = {
    LocationName.ThroneRoomTornPages:      LocationData(0x130014, 25, "Chest"),
    LocationName.ThroneRoomPalaceMap:      LocationData(0x130015, 127, "Chest"),
    LocationName.ThroneRoomAPBoost:        LocationData(0x130016, 26, "Chest"),
    LocationName.ThroneRoomQueenRecipe:    LocationData(0x130017, 27, "Chest"),
    LocationName.ThroneRoomAPBoost2:       LocationData(0x130018, 128, "Chest"),
    LocationName.ThroneRoomOgreShield:     LocationData(0x130019, 129, "Chest"),
    LocationName.ThroneRoomMythrilCrystal: LocationData(0x13001A, 130, "Chest"),
    LocationName.ThroneRoomOrichalcum:     LocationData(0x13001B, 131, "Chest"),
    LocationName.StormRider:               LocationData(0x13001C, 10, "Get Bonus"),
    LocationName.XigbarDataDefenseBoost:   LocationData(0x13001D, 555, "Chest"),

}
AG_Checks = {
    LocationName.AgrabahMap:                        LocationData(0x13001E, 353, "Chest"),
    LocationName.AgrabahDarkShard:                  LocationData(0x13001F, 28, "Chest"),
    LocationName.AgrabahMythrilShard:               LocationData(0x130020, 29, "Chest"),
    LocationName.AgrabahHiPotion:                   LocationData(0x130021, 30, "Chest"),
    LocationName.AgrabahAPBoost:                    LocationData(0x130022, 132, "Chest"),
    LocationName.AgrabahMythrilStone:               LocationData(0x130023, 133, "Chest"),
    LocationName.AgrabahMythrilShard2:              LocationData(0x130024, 249, "Chest"),
    LocationName.AgrabahSerenityShard:              LocationData(0x130025, 501, "Chest"),
    LocationName.BazaarMythrilGem:                  LocationData(0x130026, 31, "Chest"),
    LocationName.BazaarPowerShard:                  LocationData(0x130027, 32, "Chest"),
    LocationName.BazaarHiPotion:                    LocationData(0x130028, 33, "Chest"),
    LocationName.BazaarAPBoost:                     LocationData(0x130029, 134, "Chest"),
    LocationName.BazaarMythrilShard:                LocationData(0x13002A, 135, "Chest"),
    LocationName.PalaceWallsSkillRing:              LocationData(0x13002B, 136, "Chest"),
    LocationName.PalaceWallsMythrilStone:           LocationData(0x13002C, 520, "Chest"),
    LocationName.CaveEntrancePowerStone:            LocationData(0x13002D, 250, "Chest"),
    LocationName.CaveEntranceMythrilShard:          LocationData(0x13002E, 251, "Chest"),
    LocationName.ValleyofStoneMythrilStone:         LocationData(0x13002F, 35, "Chest"),
    LocationName.ValleyofStoneAPBoost:              LocationData(0x130030, 36, "Chest"),
    LocationName.ValleyofStoneMythrilShard:         LocationData(0x130031, 137, "Chest"),
    LocationName.ValleyofStoneHiPotion:             LocationData(0x130032, 138, "Chest"),
    LocationName.AbuEscort:                         LocationData(0x130033, 42, "Get Bonus"),
    LocationName.ChasmofChallengesCaveofWondersMap: LocationData(0x130034, 487, "Chest"),
    LocationName.ChasmofChallengesAPBoost:          LocationData(0x130035, 37, "Chest"),
    LocationName.TreasureRoom:                      LocationData(0x130036, 46, "Get Bonus"),
    LocationName.TreasureRoomAPBoost:               LocationData(0x130037, 502, "Chest"),
    LocationName.TreasureRoomSerenityGem:           LocationData(0x130038, 503, "Chest"),
    LocationName.ElementalLords:                    LocationData(0x130039, 37, "Get Bonus"),
    LocationName.LampCharm:                         LocationData(0x13003A, 300, "Chest"),

}
AG2_Checks = {
    LocationName.RuinedChamberTornPages:          LocationData(0x13003B, 34, "Chest"),
    LocationName.RuinedChamberRuinsMap:           LocationData(0x13003C, 486, "Chest"),
    LocationName.GenieJafar:                      LocationData(0x13003D, 15, "Get Bonus"),
    LocationName.WishingLamp:                     LocationData(0x13003E, 303, "Chest"),
    LocationName.LexaeusBonus:                    LocationData(0x13003F, 65, "Get Bonus"),
    LocationName.LexaeusASStrengthBeyondStrength: LocationData(0x130040, 545, "Chest"),
    LocationName.LexaeusDataLostIllusion:         LocationData(0x130041, 550, "Chest"),
}
DC_Checks = {
    LocationName.DCCourtyardMythrilShard:  LocationData(0x130042, 16, "Chest"),
    LocationName.DCCourtyardStarRecipe:    LocationData(0x130043, 17, "Chest"),
    LocationName.DCCourtyardAPBoost:       LocationData(0x130044, 18, "Chest"),
    LocationName.DCCourtyardMythrilStone:  LocationData(0x130045, 92, "Chest"),
    LocationName.DCCourtyardBlazingStone:  LocationData(0x130046, 93, "Chest"),
    LocationName.DCCourtyardBlazingShard:  LocationData(0x130047, 247, "Chest"),
    LocationName.DCCourtyardMythrilShard2: LocationData(0x130048, 248, "Chest"),
    LocationName.LibraryTornPages:         LocationData(0x130049, 91, "Chest"),
    LocationName.DisneyCastleMap:          LocationData(0x13004A, 332, "Chest"),
    LocationName.MinnieEscort:             LocationData(0x13004B, 38, "Double Get Bonus"),
    LocationName.MinnieEscortGetBonus:     LocationData(0x13004C, 38, "Second Get Bonus"),

}
TR_Checks = {
    LocationName.CornerstoneHillMap:             LocationData(0x13004D, 79, "Chest"),
    LocationName.CornerstoneHillFrostShard:      LocationData(0x13004E, 12, "Chest"),
    LocationName.PierMythrilShard:               LocationData(0x13004F, 81, "Chest"),
    LocationName.PierHiPotion:                   LocationData(0x130050, 82, "Chest"),
    LocationName.WaterwayMythrilStone:           LocationData(0x130051, 83, "Chest"),
    LocationName.WaterwayAPBoost:                LocationData(0x130052, 84, "Chest"),
    LocationName.WaterwayFrostStone:             LocationData(0x130053, 85, "Chest"),
    LocationName.WindowofTimeMap:                LocationData(0x130054, 368, "Chest"),
    LocationName.BoatPete:                       LocationData(0x130055, 16, "Get Bonus"),
    LocationName.FuturePete:                     LocationData(0x130056, 17, "Double Get Bonus"),
    LocationName.FuturePeteGetBonus:             LocationData(0x130057, 17, "Second Get Bonus"),
    LocationName.Monochrome:                     LocationData(0x130058, 261, "Chest"),
    LocationName.WisdomForm:                     LocationData(0x130059, 262, "Chest"),
    LocationName.MarluxiaGetBonus:               LocationData(0x13005A, 67, "Get Bonus"),
    LocationName.MarluxiaASEternalBlossom:       LocationData(0x13005B, 548, "Chest"),
    LocationName.MarluxiaDataLostIllusion:       LocationData(0x13005C, 553, "Chest"),
    LocationName.LingeringWillBonus:             LocationData(0x13005D, 70, "Get Bonus"),
    LocationName.LingeringWillProofofConnection: LocationData(0x13005E, 587, "Chest"),
    LocationName.LingeringWillManifestIllusion:  LocationData(0x13005F, 591, "Chest"),

}
# the mismatch might be here
HundredAcre1_Checks = {
    LocationName.PoohsHouse100AcreWoodMap: LocationData(0x130060, 313, "Chest"),
    LocationName.PoohsHouseAPBoost:        LocationData(0x130061, 97, "Chest"),
    LocationName.PoohsHouseMythrilStone:   LocationData(0x130062, 98, "Chest"),
}
HundredAcre2_Checks = {
    LocationName.PigletsHouseDefenseBoost: LocationData(0x130063, 105, "Chest"),
    LocationName.PigletsHouseAPBoost:      LocationData(0x130064, 103, "Chest"),
    LocationName.PigletsHouseMythrilGem:   LocationData(0x130065, 104, "Chest"),
}
HundredAcre3_Checks = {
    LocationName.RabbitsHouseDrawRing:       LocationData(0x130066, 314, "Chest"),
    LocationName.RabbitsHouseMythrilCrystal: LocationData(0x130067, 100, "Chest"),
    LocationName.RabbitsHouseAPBoost:        LocationData(0x130068, 101, "Chest"),
}
HundredAcre4_Checks = {
    LocationName.KangasHouseMagicBoost: LocationData(0x130069, 108, "Chest"),
    LocationName.KangasHouseAPBoost:    LocationData(0x13006A, 106, "Chest"),
    LocationName.KangasHouseOrichalcum: LocationData(0x13006B, 107, "Chest"),
}
HundredAcre5_Checks = {
    LocationName.SpookyCaveMythrilGem:     LocationData(0x13006C, 110, "Chest"),
    LocationName.SpookyCaveAPBoost:        LocationData(0x13006D, 111, "Chest"),
    LocationName.SpookyCaveOrichalcum:     LocationData(0x13006E, 112, "Chest"),
    LocationName.SpookyCaveGuardRecipe:    LocationData(0x13006F, 113, "Chest"),
    LocationName.SpookyCaveMythrilCrystal: LocationData(0x130070, 115, "Chest"),
    LocationName.SpookyCaveAPBoost2:       LocationData(0x130071, 116, "Chest"),
    LocationName.SweetMemories:            LocationData(0x130072, 284, "Chest"),
    LocationName.SpookyCaveMap:            LocationData(0x130073, 485, "Chest"),
}
HundredAcre6_Checks = {
    LocationName.StarryHillCosmicRing:     LocationData(0x130074, 312, "Chest"),
    LocationName.StarryHillStyleRecipe:    LocationData(0x130075, 94, "Chest"),
    LocationName.StarryHillCureElement:    LocationData(0x130076, 285, "Chest"),
    LocationName.StarryHillOrichalcumPlus: LocationData(0x130077, 539, "Chest"),
}
Oc_Checks = {
    LocationName.PassageMythrilShard:          LocationData(0x130078, 7, "Chest"),
    LocationName.PassageMythrilStone:          LocationData(0x130079, 8, "Chest"),
    LocationName.PassageEther:                 LocationData(0x13007A, 144, "Chest"),
    LocationName.PassageAPBoost:               LocationData(0x13007B, 145, "Chest"),
    LocationName.PassageHiPotion:              LocationData(0x13007C, 146, "Chest"),
    LocationName.InnerChamberUnderworldMap:    LocationData(0x13007D, 2, "Chest"),
    LocationName.InnerChamberMythrilShard:     LocationData(0x13007E, 243, "Chest"),
    LocationName.Cerberus:                     LocationData(0x13007F, 5, "Get Bonus"),
    LocationName.ColiseumMap:                  LocationData(0x130080, 338, "Chest"),
    LocationName.Urns:                         LocationData(0x130081, 57, "Get Bonus"),
    LocationName.UnderworldEntrancePowerBoost: LocationData(0x130082, 242, "Chest"),
    LocationName.CavernsEntranceLucidShard:    LocationData(0x130083, 3, "Chest"),
    LocationName.CavernsEntranceAPBoost:       LocationData(0x130084, 11, "Chest"),
    LocationName.CavernsEntranceMythrilShard:  LocationData(0x130085, 504, "Chest"),
    LocationName.TheLostRoadBrightShard:       LocationData(0x130086, 9, "Chest"),
    LocationName.TheLostRoadEther:             LocationData(0x130087, 10, "Chest"),
    LocationName.TheLostRoadMythrilShard:      LocationData(0x130088, 148, "Chest"),
    LocationName.TheLostRoadMythrilStone:      LocationData(0x130089, 149, "Chest"),
    LocationName.AtriumLucidStone:             LocationData(0x13008A, 150, "Chest"),
    LocationName.AtriumAPBoost:                LocationData(0x13008B, 151, "Chest"),
    LocationName.DemyxOC:                      LocationData(0x13008C, 58, "Get Bonus"),
    LocationName.SecretAnsemReport5:           LocationData(0x13008D, 529, "Chest"),
    LocationName.OlympusStone:                 LocationData(0x13008E, 293, "Chest"),
    LocationName.TheLockCavernsMap:            LocationData(0x13008F, 244, "Chest"),
    LocationName.TheLockMythrilShard:          LocationData(0x130090, 5, "Chest"),
    LocationName.TheLockAPBoost:               LocationData(0x130091, 142, "Chest"),
    LocationName.PeteOC:                       LocationData(0x130092, 6, "Get Bonus"),
    LocationName.Hydra:                        LocationData(0x130093, 7, "Double Get Bonus"),
    LocationName.HydraGetBonus:                LocationData(0x130094, 7, "Second Get Bonus"),
    LocationName.HerosCrest:                   LocationData(0x130095, 260, "Chest"),

}
Oc2_Checks = {
    LocationName.AuronsStatue:           LocationData(0x130096, 295, "Chest"),
    LocationName.Hades:                  LocationData(0x130097, 8, "Double Get Bonus"),
    LocationName.HadesGetBonus:          LocationData(0x130098, 8, "Second Get Bonus"),
    LocationName.GuardianSoul:           LocationData(0x130099, 272, "Chest"),
    LocationName.ZexionBonus:            LocationData(0x13009A, 66, "Get Bonus"),
    LocationName.ZexionASBookofShadows:  LocationData(0x13009B, 546, "Chest"),
    LocationName.ZexionDataLostIllusion: LocationData(0x13009C, 551, "Chest"),
}
Oc2Cups = {
    LocationName.ProtectBeltPainandPanicCup:     LocationData(0x13009D, 513, "Chest"),
    LocationName.SerenityGemPainandPanicCup:     LocationData(0x13009E, 540, "Chest"),
    LocationName.RisingDragonCerberusCup:        LocationData(0x13009F, 515, "Chest"),
    LocationName.SerenityCrystalCerberusCup:     LocationData(0x1300A0, 542, "Chest"),
    LocationName.GenjiShieldTitanCup:            LocationData(0x1300A1, 514, "Chest"),
    LocationName.SkillfulRingTitanCup:           LocationData(0x1300A2, 541, "Chest"),
    LocationName.FatalCrestGoddessofFateCup:     LocationData(0x1300A3, 516, "Chest"),
    LocationName.OrichalcumPlusGoddessofFateCup: LocationData(0x1300A4, 517, "Chest"),
    LocationName.HadesCupTrophyParadoxCups:      LocationData(0x1300A5, 518, "Chest"),
}

BC_Checks = {
    LocationName.BCCourtyardAPBoost:            LocationData(0x1300A6, 39, "Chest"),
    LocationName.BCCourtyardHiPotion:           LocationData(0x1300A7, 40, "Chest"),
    LocationName.BCCourtyardMythrilShard:       LocationData(0x1300A8, 505, "Chest"),
    LocationName.BellesRoomCastleMap:           LocationData(0x1300A9, 46, "Chest"),
    LocationName.BellesRoomMegaRecipe:          LocationData(0x1300AA, 240, "Chest"),
    LocationName.TheEastWingMythrilShard:       LocationData(0x1300AB, 63, "Chest"),
    LocationName.TheEastWingTent:               LocationData(0x1300AC, 155, "Chest"),
    LocationName.TheWestHallHiPotion:           LocationData(0x1300AD, 41, "Chest"),
    LocationName.TheWestHallPowerShard:         LocationData(0x1300AE, 207, "Chest"),
    LocationName.TheWestHallAPBoostPostDungeon: LocationData(0x1300AF, 158, "Chest"),
    LocationName.TheWestHallBrightStone:        LocationData(0x1300B0, 159, "Chest"),
    LocationName.TheWestHallMythrilShard:       LocationData(0x1300B1, 206, "Chest"),
    LocationName.Thresholder:                   LocationData(0x1300B2, 2, "Get Bonus"),
    LocationName.DungeonBasementMap:            LocationData(0x1300B3, 239, "Chest"),
    LocationName.DungeonAPBoost:                LocationData(0x1300B4, 43, "Chest"),
    LocationName.SecretPassageMythrilShard:     LocationData(0x1300B5, 44, "Chest"),
    LocationName.SecretPassageHiPotion:         LocationData(0x1300B6, 168, "Chest"),
    LocationName.SecretPassageLucidShard:       LocationData(0x1300B7, 45, "Chest"),
    LocationName.TheWestHallMythrilShard2:      LocationData(0x1300B8, 208, "Chest"),
    LocationName.TheWestWingMythrilShard:       LocationData(0x1300B9, 42, "Chest"),
    LocationName.TheWestWingTent:               LocationData(0x1300BA, 164, "Chest"),
    LocationName.Beast:                         LocationData(0x1300BB, 12, "Get Bonus"),
    LocationName.TheBeastsRoomBlazingShard:     LocationData(0x1300BC, 241, "Chest"),
    LocationName.DarkThorn:                     LocationData(0x1300BD, 3, "Double Get Bonus"),
    LocationName.DarkThornGetBonus:             LocationData(0x1300BE, 3, "Second Get Bonus"),
    LocationName.DarkThornCureElement:          LocationData(0x1300BF, 299, "Chest"),

}
BC2_Checks = {
    LocationName.RumblingRose:           LocationData(0x1300C0, 270, "Chest"),
    LocationName.CastleWallsMap:         LocationData(0x1300C1, 325, "Chest"),
    LocationName.Xaldin:                 LocationData(0x1300C2, 4, "Double Get Bonus"),
    LocationName.XaldinGetBonus:         LocationData(0x1300C3, 4, "Second Get Bonus"),
    LocationName.SecretAnsemReport4:     LocationData(0x1300C4, 528, "Chest"),
    LocationName.XaldinDataDefenseBoost: LocationData(0x1300C5, 559, "Chest"),
}
SP_Checks = {
    LocationName.PitCellAreaMap:               LocationData(0x1300C6, 316, "Chest"),
    LocationName.PitCellMythrilCrystal:        LocationData(0x1300C7, 64, "Chest"),
    LocationName.CanyonDarkCrystal:            LocationData(0x1300C8, 65, "Chest"),
    LocationName.CanyonMythrilStone:           LocationData(0x1300C9, 171, "Chest"),
    LocationName.CanyonMythrilGem:             LocationData(0x1300CA, 253, "Chest"),
    LocationName.CanyonFrostCrystal:           LocationData(0x1300CB, 521, "Chest"),
    LocationName.Screens:                      LocationData(0x1300CC, 45, "Get Bonus"),
    LocationName.HallwayPowerCrystal:          LocationData(0x1300CD, 49, "Chest"),
    LocationName.HallwayAPBoost:               LocationData(0x1300CE, 50, "Chest"),
    LocationName.CommunicationsRoomIOTowerMap: LocationData(0x1300CF, 255, "Chest"),
    LocationName.CommunicationsRoomGaiaBelt:   LocationData(0x1300D0, 499, "Chest"),
    LocationName.HostileProgram:               LocationData(0x1300D1, 31, "Double Get Bonus"),
    LocationName.HostileProgramGetBonus:       LocationData(0x1300D2, 31, "Second Get Bonus"),
    LocationName.PhotonDebugger:               LocationData(0x1300D3, 267, "Chest"),

}
SP2_Checks = {
    LocationName.SolarSailer:                       LocationData(0x1300D4, 61, "Get Bonus"),
    LocationName.CentralComputerCoreAPBoost:        LocationData(0x1300D5, 177, "Chest"),
    LocationName.CentralComputerCoreOrichalcumPlus: LocationData(0x1300D6, 178, "Chest"),
    LocationName.CentralComputerCoreCosmicArts:     LocationData(0x1300D7, 51, "Chest"),
    LocationName.CentralComputerCoreMap:            LocationData(0x1300D8, 488, "Chest"),
    LocationName.MCP:                               LocationData(0x1300D9, 32, "Double Get Bonus"),
    LocationName.MCPGetBonus:                       LocationData(0x1300DA, 32, "Second Get Bonus"),
    LocationName.LarxeneBonus:                      LocationData(0x1300DB, 68, "Get Bonus"),
    LocationName.LarxeneASCloakedThunder:           LocationData(0x1300DC, 547, "Chest"),
    LocationName.LarxeneDataLostIllusion:           LocationData(0x1300DD, 552, "Chest"),
}
HT_Checks = {
    LocationName.GraveyardMythrilShard:           LocationData(0x1300DE, 53, "Chest"),
    LocationName.GraveyardSerenityGem:            LocationData(0x1300DF, 212, "Chest"),
    LocationName.FinklesteinsLabHalloweenTownMap: LocationData(0x1300E0, 211, "Chest"),
    LocationName.TownSquareMythrilStone:          LocationData(0x1300E1, 209, "Chest"),
    LocationName.TownSquareEnergyShard:           LocationData(0x1300E2, 210, "Chest"),
    LocationName.HinterlandsLightningShard:       LocationData(0x1300E3, 54, "Chest"),
    LocationName.HinterlandsMythrilStone:         LocationData(0x1300E4, 213, "Chest"),
    LocationName.HinterlandsAPBoost:              LocationData(0x1300E5, 214, "Chest"),
    LocationName.CandyCaneLaneMegaPotion:         LocationData(0x1300E6, 55, "Chest"),
    LocationName.CandyCaneLaneMythrilGem:         LocationData(0x1300E7, 56, "Chest"),
    LocationName.CandyCaneLaneLightningStone:     LocationData(0x1300E8, 216, "Chest"),
    LocationName.CandyCaneLaneMythrilStone:       LocationData(0x1300E9, 217, "Chest"),
    LocationName.SantasHouseChristmasTownMap:     LocationData(0x1300EA, 57, "Chest"),
    LocationName.SantasHouseAPBoost:              LocationData(0x1300EB, 58, "Chest"),
    LocationName.PrisonKeeper:                    LocationData(0x1300EC, 18, "Get Bonus"),
    LocationName.OogieBoogie:                     LocationData(0x1300ED, 19, "Get Bonus"),
    LocationName.OogieBoogieMagnetElement:        LocationData(0x1300EE, 301, "Chest"),
}
HT2_Checks = {
    LocationName.Lock:                   LocationData(0x1300EF, 40, "Get Bonus"),
    LocationName.Present:                LocationData(0x1300F0, 297, "Chest"),
    LocationName.DecoyPresents:          LocationData(0x1300F1, 298, "Chest"),
    LocationName.Experiment:             LocationData(0x1300F2, 20, "Get Bonus"),
    LocationName.DecisivePumpkin:        LocationData(0x1300F3, 275, "Chest"),
    LocationName.VexenBonus:             LocationData(0x1300F4, 64, "Get Bonus"),
    LocationName.VexenASRoadtoDiscovery: LocationData(0x1300F5, 544, "Chest"),
    LocationName.VexenDataLostIllusion:  LocationData(0x1300F6, 549, "Chest"),
}
PR_Checks = {
    LocationName.RampartNavalMap:           LocationData(0x1300F7, 70, "Chest"),
    LocationName.RampartMythrilStone:       LocationData(0x1300F8, 219, "Chest"),
    LocationName.RampartDarkShard:          LocationData(0x1300F9, 220, "Chest"),
    LocationName.TownDarkStone:             LocationData(0x1300FA, 71, "Chest"),
    LocationName.TownAPBoost:               LocationData(0x1300FB, 72, "Chest"),
    LocationName.TownMythrilShard:          LocationData(0x1300FC, 73, "Chest"),
    LocationName.TownMythrilGem:            LocationData(0x1300FD, 221, "Chest"),
    LocationName.CaveMouthBrightShard:      LocationData(0x1300FE, 74, "Chest"),
    LocationName.CaveMouthMythrilShard:     LocationData(0x1300FF, 223, "Chest"),
    LocationName.IsladeMuertaMap:           LocationData(0x130100, 329, "Chest"),
    LocationName.BoatFight:                 LocationData(0x130101, 62, "Get Bonus"),
    LocationName.InterceptorBarrels:        LocationData(0x130102, 39, "Get Bonus"),
    LocationName.PowderStoreAPBoost1:       LocationData(0x130103, 369, "Chest"),
    LocationName.PowderStoreAPBoost2:       LocationData(0x130104, 370, "Chest"),
    LocationName.MoonlightNookMythrilShard: LocationData(0x130105, 75, "Chest"),
    LocationName.MoonlightNookSerenityGem:  LocationData(0x130106, 224, "Chest"),
    LocationName.MoonlightNookPowerStone:   LocationData(0x130107, 371, "Chest"),
    LocationName.Barbossa:                  LocationData(0x130108, 21, "Double Get Bonus"),
    LocationName.BarbossaGetBonus:          LocationData(0x130109, 21, "Second Get Bonus"),
    LocationName.FollowtheWind:             LocationData(0x13010A, 263, "Chest"),

}
PR2_Checks = {
    LocationName.GrimReaper1:                  LocationData(0x13010B, 59, "Get Bonus"),
    LocationName.InterceptorsHoldFeatherCharm: LocationData(0x13010C, 252, "Chest"),
    LocationName.SeadriftKeepAPBoost:          LocationData(0x13010D, 76, "Chest"),
    LocationName.SeadriftKeepOrichalcum:       LocationData(0x13010E, 225, "Chest"),
    LocationName.SeadriftKeepMeteorStaff:      LocationData(0x13010F, 372, "Chest"),
    LocationName.SeadriftRowSerenityGem:       LocationData(0x130110, 77, "Chest"),
    LocationName.SeadriftRowKingRecipe:        LocationData(0x130111, 78, "Chest"),
    LocationName.SeadriftRowMythrilCrystal:    LocationData(0x130112, 373, "Chest"),
    LocationName.SeadriftRowCursedMedallion:   LocationData(0x130113, 296, "Chest"),
    LocationName.SeadriftRowShipGraveyardMap:  LocationData(0x130114, 331, "Chest"),
    LocationName.GrimReaper2:                  LocationData(0x130115, 22, "Get Bonus"),
    LocationName.SecretAnsemReport6:           LocationData(0x130116, 530, "Chest"),
    LocationName.LuxordDataAPBoost:            LocationData(0x130117, 557, "Chest"),
}
HB_Checks = {
    LocationName.MarketplaceMap:              LocationData(0x130118, 362, "Chest"),
    LocationName.BoroughDriveRecovery:        LocationData(0x130119, 194, "Chest"),
    LocationName.BoroughAPBoost:              LocationData(0x13011A, 195, "Chest"),
    LocationName.BoroughHiPotion:             LocationData(0x13011B, 196, "Chest"),
    LocationName.BoroughMythrilShard:         LocationData(0x13011C, 305, "Chest"),
    LocationName.BoroughDarkShard:            LocationData(0x13011D, 506, "Chest"),
    LocationName.MerlinsHouseMembershipCard:  LocationData(0x13011E, 256, "Chest"),
    LocationName.MerlinsHouseBlizzardElement: LocationData(0x13011F, 292, "Chest"),
    LocationName.Bailey:                      LocationData(0x130120, 47, "Get Bonus"),
    LocationName.BaileySecretAnsemReport7:    LocationData(0x130121, 531, "Chest"),
    LocationName.BaseballCharm:               LocationData(0x130122, 258, "Chest"),
}
HB2_Checks = {
    LocationName.PosternCastlePerimeterMap:                    LocationData(0x130123, 310, "Chest"),
    LocationName.PosternMythrilGem:                            LocationData(0x130124, 189, "Chest"),
    LocationName.PosternAPBoost:                               LocationData(0x130125, 190, "Chest"),
    LocationName.CorridorsMythrilStone:                        LocationData(0x130126, 200, "Chest"),
    LocationName.CorridorsMythrilCrystal:                      LocationData(0x130127, 201, "Chest"),
    LocationName.CorridorsDarkCrystal:                         LocationData(0x130128, 202, "Chest"),
    LocationName.CorridorsAPBoost:                             LocationData(0x130129, 307, "Chest"),
    LocationName.AnsemsStudyMasterForm:                        LocationData(0x13012A, 276, "Chest"),
    LocationName.AnsemsStudySleepingLion:                      LocationData(0x13012B, 266, "Chest"),
    LocationName.AnsemsStudySkillRecipe:                       LocationData(0x13012C, 184, "Chest"),
    LocationName.AnsemsStudyUkuleleCharm:                      LocationData(0x13012D, 183, "Chest"),
    LocationName.RestorationSiteMoonRecipe:                    LocationData(0x13012E, 309, "Chest"),
    LocationName.RestorationSiteAPBoost:                       LocationData(0x13012F, 507, "Chest"),
    LocationName.DemyxHB:                                      LocationData(0x130130, 28, "Double Get Bonus"),
    LocationName.DemyxHBGetBonus:                              LocationData(0x130131, 28, "Second Get Bonus"),
    LocationName.FFFightsCureElement:                          LocationData(0x130132, 361, "Chest"),
    LocationName.CrystalFissureTornPages:                      LocationData(0x130133, 179, "Chest"),
    LocationName.CrystalFissureTheGreatMawMap:                 LocationData(0x130134, 489, "Chest"),
    LocationName.CrystalFissureEnergyCrystal:                  LocationData(0x130135, 180, "Chest"),
    LocationName.CrystalFissureAPBoost:                        LocationData(0x130136, 181, "Chest"),
    LocationName.ThousandHeartless:                            LocationData(0x130137, 60, "Get Bonus"),
    LocationName.ThousandHeartlessSecretAnsemReport1:          LocationData(0x130138, 525, "Chest"),
    LocationName.ThousandHeartlessIceCream:                    LocationData(0x130139, 269, "Chest"),
    LocationName.ThousandHeartlessPicture:                     LocationData(0x13013A, 511, "Chest"),
    LocationName.PosternGullWing:                              LocationData(0x13013B, 491, "Chest"),
    LocationName.HeartlessManufactoryCosmicChain:              LocationData(0x13013C, 311, "Chest"),
    LocationName.SephirothBonus:                               LocationData(0x13013D, 35, "Get Bonus"),
    LocationName.SephirothFenrir:                              LocationData(0x13013E, 282, "Chest"),
    LocationName.WinnersProof:                                 LocationData(0x13013F, 588, "Chest"),
    LocationName.ProofofPeace:                                 LocationData(0x130140, 589, "Chest"),
    LocationName.DemyxDataAPBoost:                             LocationData(0x130141, 560, "Chest"),
    LocationName.CoRDepthsAPBoost:                             LocationData(0x130142, 562, "Chest"),
    LocationName.CoRDepthsPowerCrystal:                        LocationData(0x130143, 563, "Chest"),
    LocationName.CoRDepthsFrostCrystal:                        LocationData(0x130144, 564, "Chest"),
    LocationName.CoRDepthsManifestIllusion:                    LocationData(0x130145, 565, "Chest"),
    LocationName.CoRDepthsAPBoost2:                            LocationData(0x130146, 566, "Chest"),
    LocationName.CoRMineshaftLowerLevelDepthsofRemembranceMap: LocationData(0x130147, 580, "Chest"),
    LocationName.CoRMineshaftLowerLevelAPBoost:                LocationData(0x130148, 578, "Chest"),

}
CoR_Checks = {
    LocationName.CoRDepthsUpperLevelRemembranceGem:  LocationData(0x130149, 567, "Chest"),
    LocationName.CoRMiningAreaSerenityGem:           LocationData(0x13014A, 568, "Chest"),
    LocationName.CoRMiningAreaAPBoost:               LocationData(0x13014B, 569, "Chest"),
    LocationName.CoRMiningAreaSerenityCrystal:       LocationData(0x13014C, 570, "Chest"),
    LocationName.CoRMiningAreaManifestIllusion:      LocationData(0x13014D, 571, "Chest"),
    LocationName.CoRMiningAreaSerenityGem2:          LocationData(0x13014E, 572, "Chest"),
    LocationName.CoRMiningAreaDarkRemembranceMap:    LocationData(0x13014F, 573, "Chest"),
    LocationName.CoRMineshaftMidLevelPowerBoost:     LocationData(0x130150, 581, "Chest"),
    LocationName.CoREngineChamberSerenityCrystal:    LocationData(0x130151, 574, "Chest"),
    LocationName.CoREngineChamberRemembranceCrystal: LocationData(0x130152, 575, "Chest"),
    LocationName.CoREngineChamberAPBoost:            LocationData(0x130153, 576, "Chest"),
    LocationName.CoREngineChamberManifestIllusion:   LocationData(0x130154, 577, "Chest"),
    LocationName.CoRMineshaftUpperLevelMagicBoost:   LocationData(0x130155, 582, "Chest"),
    LocationName.CoRMineshaftUpperLevelAPBoost:      LocationData(0x130156, 579, "Chest"),
    LocationName.TransporttoRemembrance:             LocationData(0x130157, 72, "Get Bonus"),
}
PL_Checks = {
    LocationName.GorgeSavannahMap:              LocationData(0x130158, 492, "Chest"),
    LocationName.GorgeDarkGem:                  LocationData(0x130159, 404, "Chest"),
    LocationName.GorgeMythrilStone:             LocationData(0x13015A, 405, "Chest"),
    LocationName.ElephantGraveyardFrostGem:     LocationData(0x13015B, 401, "Chest"),
    LocationName.ElephantGraveyardMythrilStone: LocationData(0x13015C, 402, "Chest"),
    LocationName.ElephantGraveyardBrightStone:  LocationData(0x13015D, 403, "Chest"),
    LocationName.ElephantGraveyardAPBoost:      LocationData(0x13015E, 508, "Chest"),
    LocationName.ElephantGraveyardMythrilShard: LocationData(0x13015F, 509, "Chest"),
    LocationName.PrideRockMap:                  LocationData(0x130160, 418, "Chest"),
    LocationName.PrideRockMythrilStone:         LocationData(0x130161, 392, "Chest"),
    LocationName.PrideRockSerenityCrystal:      LocationData(0x130162, 393, "Chest"),
    LocationName.WildebeestValleyEnergyStone:   LocationData(0x130163, 396, "Chest"),
    LocationName.WildebeestValleyAPBoost:       LocationData(0x130164, 397, "Chest"),
    LocationName.WildebeestValleyMythrilGem:    LocationData(0x130165, 398, "Chest"),
    LocationName.WildebeestValleyMythrilStone:  LocationData(0x130166, 399, "Chest"),
    LocationName.WildebeestValleyLucidGem:      LocationData(0x130167, 400, "Chest"),
    LocationName.WastelandsMythrilShard:        LocationData(0x130168, 406, "Chest"),
    LocationName.WastelandsSerenityGem:         LocationData(0x130169, 407, "Chest"),
    LocationName.WastelandsMythrilStone:        LocationData(0x13016A, 408, "Chest"),
    LocationName.JungleSerenityGem:             LocationData(0x13016B, 409, "Chest"),
    LocationName.JungleMythrilStone:            LocationData(0x13016C, 410, "Chest"),
    LocationName.JungleSerenityCrystal:         LocationData(0x13016D, 411, "Chest"),
    LocationName.OasisMap:                      LocationData(0x13016E, 412, "Chest"),
    LocationName.OasisTornPages:                LocationData(0x13016F, 493, "Chest"),
    LocationName.OasisAPBoost:                  LocationData(0x130170, 413, "Chest"),
    LocationName.CircleofLife:                  LocationData(0x130171, 264, "Chest"),
    LocationName.Hyenas1:                       LocationData(0x130172, 49, "Get Bonus"),
    LocationName.Scar:                          LocationData(0x130173, 29, "Get Bonus"),
    LocationName.ScarFireElement:               LocationData(0x130174, 302, "Chest"),

}
PL2_Checks = {
    LocationName.Hyenas2:              LocationData(0x130175, 50, "Get Bonus"),
    LocationName.Groundshaker:         LocationData(0x130176, 30, "Double Get Bonus"),
    LocationName.GroundshakerGetBonus: LocationData(0x130177, 30, "Second Get Bonus"),
    LocationName.SaixDataDefenseBoost: LocationData(0x130178, 556, "Chest"),
}
STT_Checks = {
    LocationName.TwilightTownMap:                 LocationData(0x130179, 319, "Chest"),
    LocationName.MunnyPouchOlette:                LocationData(0x13017A, 288, "Chest"),
    LocationName.StationDusks:                    LocationData(0x13017B, 54, "Get Bonus", "Roxas", 14),
    LocationName.StationofSerenityPotion:         LocationData(0x13017C, 315, "Chest"),
    LocationName.StationofCallingPotion:          LocationData(0x13017D, 472, "Chest"),
    LocationName.TwilightThorn:                   LocationData(0x13017E, 33, "Get Bonus", "Roxas", 14),
    LocationName.Axel1:                           LocationData(0x13017F, 73, "Get Bonus", "Roxas", 14),
    LocationName.JunkChampionBelt:                LocationData(0x130180, 389, "Chest"),
    LocationName.JunkMedal:                       LocationData(0x130181, 390, "Chest"),
    LocationName.TheStruggleTrophy:               LocationData(0x130182, 519, "Chest"),
    LocationName.CentralStationPotion1:           LocationData(0x130183, 428, "Chest"),
    LocationName.STTCentralStationHiPotion:       LocationData(0x130184, 429, "Chest"),
    LocationName.CentralStationPotion2:           LocationData(0x130185, 430, "Chest"),
    LocationName.SunsetTerraceAbilityRing:        LocationData(0x130186, 434, "Chest"),
    LocationName.SunsetTerraceHiPotion:           LocationData(0x130187, 435, "Chest"),
    LocationName.SunsetTerracePotion1:            LocationData(0x130188, 436, "Chest"),
    LocationName.SunsetTerracePotion2:            LocationData(0x130189, 437, "Chest"),
    LocationName.MansionFoyerHiPotion:            LocationData(0x13018A, 449, "Chest"),
    LocationName.MansionFoyerPotion1:             LocationData(0x13018B, 450, "Chest"),
    LocationName.MansionFoyerPotion2:             LocationData(0x13018C, 451, "Chest"),
    LocationName.MansionDiningRoomElvenBandanna:  LocationData(0x13018D, 455, "Chest"),
    LocationName.MansionDiningRoomPotion:         LocationData(0x13018E, 456, "Chest"),
    LocationName.NaminesSketches:                 LocationData(0x13018F, 289, "Chest"),
    LocationName.MansionMap:                      LocationData(0x130190, 483, "Chest"),
    LocationName.MansionLibraryHiPotion:          LocationData(0x130191, 459, "Chest"),
    LocationName.Axel2:                           LocationData(0x130192, 34, "Get Bonus", "Roxas", 14),
    LocationName.MansionBasementCorridorHiPotion: LocationData(0x130193, 463, "Chest"),
    LocationName.RoxasDataMagicBoost:             LocationData(0x130194, 558, "Chest"),

}
TT_Checks = {
    LocationName.OldMansionPotion:               LocationData(0x130195, 447, "Chest"),
    LocationName.OldMansionMythrilShard:         LocationData(0x130196, 448, "Chest"),
    LocationName.TheWoodsPotion:                 LocationData(0x130197, 442, "Chest"),
    LocationName.TheWoodsMythrilShard:           LocationData(0x130198, 443, "Chest"),
    LocationName.TheWoodsHiPotion:               LocationData(0x130199, 444, "Chest"),
    LocationName.TramCommonHiPotion:             LocationData(0x13019A, 420, "Chest"),
    LocationName.TramCommonAPBoost:              LocationData(0x13019B, 421, "Chest"),
    LocationName.TramCommonTent:                 LocationData(0x13019C, 422, "Chest"),
    LocationName.TramCommonMythrilShard1:        LocationData(0x13019D, 423, "Chest"),
    LocationName.TramCommonPotion1:              LocationData(0x13019E, 424, "Chest"),
    LocationName.TramCommonMythrilShard2:        LocationData(0x13019F, 425, "Chest"),
    LocationName.TramCommonPotion2:              LocationData(0x1301A0, 484, "Chest"),
    LocationName.StationPlazaSecretAnsemReport2: LocationData(0x1301A1, 526, "Chest"),
    LocationName.MunnyPouchMickey:               LocationData(0x1301A2, 290, "Chest"),
    LocationName.CrystalOrb:                     LocationData(0x1301A3, 291, "Chest"),
    LocationName.CentralStationTent:             LocationData(0x1301A4, 431, "Chest"),
    LocationName.TTCentralStationHiPotion:       LocationData(0x1301A5, 432, "Chest"),
    LocationName.CentralStationMythrilShard:     LocationData(0x1301A6, 433, "Chest"),
    LocationName.TheTowerPotion:                 LocationData(0x1301A7, 465, "Chest"),
    LocationName.TheTowerHiPotion:               LocationData(0x1301A8, 466, "Chest"),
    LocationName.TheTowerEther:                  LocationData(0x1301A9, 522, "Chest"),
    LocationName.TowerEntrywayEther:             LocationData(0x1301AA, 467, "Chest"),
    LocationName.TowerEntrywayMythrilShard:      LocationData(0x1301AB, 468, "Chest"),
    LocationName.SorcerersLoftTowerMap:          LocationData(0x1301AC, 469, "Chest"),
    LocationName.TowerWardrobeMythrilStone:      LocationData(0x1301AD, 470, "Chest"),
    LocationName.StarSeeker:                     LocationData(0x1301AE, 304, "Chest"),
    LocationName.ValorForm:                      LocationData(0x1301AF, 286, "Chest"),

}
TT2_Checks = {
    LocationName.SeifersTrophy: LocationData(0x1301B0, 294, "Chest"),
    LocationName.Oathkeeper:    LocationData(0x1301B1, 265, "Chest"),
    LocationName.LimitForm:     LocationData(0x1301B2, 543, "Chest"),
}
TT3_Checks = {
    LocationName.UndergroundConcourseMythrilGem:        LocationData(0x1301B3, 479, "Chest"),
    LocationName.UndergroundConcourseAPBoost:           LocationData(0x1301B4, 481, "Chest"),
    LocationName.UndergroundConcourseOrichalcum:        LocationData(0x1301B5, 480, "Chest"),
    LocationName.UndergroundConcourseMythrilCrystal:    LocationData(0x1301B6, 482, "Chest"),
    LocationName.TunnelwayOrichalcum:                   LocationData(0x1301B7, 477, "Chest"),
    LocationName.TunnelwayMythrilCrystal:               LocationData(0x1301B8, 478, "Chest"),
    LocationName.SunsetTerraceOrichalcumPlus:           LocationData(0x1301B9, 438, "Chest"),
    LocationName.SunsetTerraceMythrilShard:             LocationData(0x1301BA, 439, "Chest"),
    LocationName.SunsetTerraceMythrilCrystal:           LocationData(0x1301BB, 440, "Chest"),
    LocationName.SunsetTerraceAPBoost:                  LocationData(0x1301BC, 441, "Chest"),
    LocationName.MansionNobodies:                       LocationData(0x1301BD, 56, "Get Bonus"),
    LocationName.MansionFoyerMythrilCrystal:            LocationData(0x1301BE, 452, "Chest"),
    LocationName.MansionFoyerMythrilStone:              LocationData(0x1301BF, 453, "Chest"),
    LocationName.MansionFoyerSerenityCrystal:           LocationData(0x1301C0, 454, "Chest"),
    LocationName.MansionDiningRoomMythrilCrystal:       LocationData(0x1301C1, 457, "Chest"),
    LocationName.MansionDiningRoomMythrilStone:         LocationData(0x1301C2, 458, "Chest"),
    LocationName.MansionLibraryOrichalcum:              LocationData(0x1301C3, 460, "Chest"),
    LocationName.BeamSecretAnsemReport10:               LocationData(0x1301C4, 534, "Chest"),
    LocationName.MansionBasementCorridorUltimateRecipe: LocationData(0x1301C5, 464, "Chest"),
    LocationName.BetwixtandBetween:                     LocationData(0x1301C6, 63, "Get Bonus"),
    LocationName.BetwixtandBetweenBondofFlame:          LocationData(0x1301C7, 317, "Chest"),
    LocationName.AxelDataMagicBoost:                    LocationData(0x1301C8, 561, "Chest"),
}
TWTNW_Checks = {
    LocationName.FragmentCrossingMythrilStone:    LocationData(0x1301C9, 374, "Chest"),
    LocationName.FragmentCrossingMythrilCrystal:  LocationData(0x1301CA, 375, "Chest"),
    LocationName.FragmentCrossingAPBoost:         LocationData(0x1301CB, 376, "Chest"),
    LocationName.FragmentCrossingOrichalcum:      LocationData(0x1301CC, 377, "Chest"),
    LocationName.Roxas:                           LocationData(0x1301CD, 69, "Double Get Bonus"),
    LocationName.RoxasGetBonus:                   LocationData(0x1301CE, 69, "Second Get Bonus"),
    LocationName.RoxasSecretAnsemReport8:         LocationData(0x1301CF, 532, "Chest"),
    LocationName.TwoBecomeOne:                    LocationData(0x1301D0, 277, "Chest"),
    LocationName.MemorysSkyscaperMythrilCrystal:  LocationData(0x1301D1, 391, "Chest"),
    LocationName.MemorysSkyscaperAPBoost:         LocationData(0x1301D2, 523, "Chest"),
    LocationName.MemorysSkyscaperMythrilStone:    LocationData(0x1301D3, 524, "Chest"),
    LocationName.TheBrinkofDespairDarkCityMap:    LocationData(0x1301D4, 335, "Chest"),
    LocationName.TheBrinkofDespairOrichalcumPlus: LocationData(0x1301D5, 500, "Chest"),
    LocationName.NothingsCallMythrilGem:          LocationData(0x1301D6, 378, "Chest"),
    LocationName.NothingsCallOrichalcum:          LocationData(0x1301D7, 379, "Chest"),
    LocationName.TwilightsViewCosmicBelt:         LocationData(0x1301D8, 336, "Chest"),
}
TWTNW2_Checks = {
    LocationName.XigbarBonus:                           LocationData(0x1301D9, 23, "Get Bonus"),
    LocationName.XigbarSecretAnsemReport3:              LocationData(0x1301DA, 527, "Chest"),
    LocationName.NaughtsSkywayMythrilGem:               LocationData(0x1301DB, 380, "Chest"),
    LocationName.NaughtsSkywayOrichalcum:               LocationData(0x1301DC, 381, "Chest"),
    LocationName.NaughtsSkywayMythrilCrystal:           LocationData(0x1301DD, 382, "Chest"),
    LocationName.Oblivion:                              LocationData(0x1301DE, 278, "Chest"),
    LocationName.CastleThatNeverWasMap:                 LocationData(0x1301DF, 496, "Chest"),
    LocationName.Luxord:                                LocationData(0x1301E0, 24, "Double Get Bonus"),
    LocationName.LuxordGetBonus:                        LocationData(0x1301E1, 24, "Second Get Bonus"),
    LocationName.LuxordSecretAnsemReport9:              LocationData(0x1301E2, 533, "Chest"),
    LocationName.SaixBonus:                             LocationData(0x1301E3, 25, "Get Bonus"),
    LocationName.SaixSecretAnsemReport12:               LocationData(0x1301E4, 536, "Chest"),
    LocationName.PreXemnas1SecretAnsemReport11:         LocationData(0x1301E5, 535, "Chest"),
    LocationName.RuinandCreationsPassageMythrilStone:   LocationData(0x1301E6, 385, "Chest"),
    LocationName.RuinandCreationsPassageAPBoost:        LocationData(0x1301E7, 386, "Chest"),
    LocationName.RuinandCreationsPassageMythrilCrystal: LocationData(0x1301E8, 387, "Chest"),
    LocationName.RuinandCreationsPassageOrichalcum:     LocationData(0x1301E9, 388, "Chest"),
    LocationName.Xemnas1:                               LocationData(0x1301EA, 26, "Double Get Bonus"),
    LocationName.Xemnas1GetBonus:                       LocationData(0x1301EB, 26, "Second Get Bonus"),
    LocationName.Xemnas1SecretAnsemReport13:            LocationData(0x1301EC, 537, "Chest"),
    LocationName.FinalXemnas:                           LocationData(0x1301ED, 71, "Get Bonus"),
    LocationName.XemnasDataPowerBoost:                  LocationData(0x1301EE, 554, "Chest"),
}

SoraLevels = {
    LocationName.Lvl1:  LocationData(0x1301EF, 1, "Levels"),
    LocationName.Lvl2:  LocationData(0x1301F0, 2, "Levels"),
    LocationName.Lvl3:  LocationData(0x1301F1, 3, "Levels"),
    LocationName.Lvl4:  LocationData(0x1301F2, 4, "Levels"),
    LocationName.Lvl5:  LocationData(0x1301F3, 5, "Levels"),
    LocationName.Lvl6:  LocationData(0x1301F4, 6, "Levels"),
    LocationName.Lvl7:  LocationData(0x1301F5, 7, "Levels"),
    LocationName.Lvl8:  LocationData(0x1301F6, 8, "Levels"),
    LocationName.Lvl9:  LocationData(0x1301F7, 9, "Levels"),
    LocationName.Lvl10: LocationData(0x1301F8, 10, "Levels"),
    LocationName.Lvl11: LocationData(0x1301F9, 11, "Levels"),
    LocationName.Lvl12: LocationData(0x1301FA, 12, "Levels"),
    LocationName.Lvl13: LocationData(0x1301FB, 13, "Levels"),
    LocationName.Lvl14: LocationData(0x1301FC, 14, "Levels"),
    LocationName.Lvl15: LocationData(0x1301FD, 15, "Levels"),
    LocationName.Lvl16: LocationData(0x1301FE, 16, "Levels"),
    LocationName.Lvl17: LocationData(0x1301FF, 17, "Levels"),
    LocationName.Lvl18: LocationData(0x130200, 18, "Levels"),
    LocationName.Lvl19: LocationData(0x130201, 19, "Levels"),
    LocationName.Lvl20: LocationData(0x130202, 20, "Levels"),
    LocationName.Lvl21: LocationData(0x130203, 21, "Levels"),
    LocationName.Lvl22: LocationData(0x130204, 22, "Levels"),
    LocationName.Lvl23: LocationData(0x130205, 23, "Levels"),
    LocationName.Lvl24: LocationData(0x130206, 24, "Levels"),
    LocationName.Lvl25: LocationData(0x130207, 25, "Levels"),
    LocationName.Lvl26: LocationData(0x130208, 26, "Levels"),
    LocationName.Lvl27: LocationData(0x130209, 27, "Levels"),
    LocationName.Lvl28: LocationData(0x13020A, 28, "Levels"),
    LocationName.Lvl29: LocationData(0x13020B, 29, "Levels"),
    LocationName.Lvl30: LocationData(0x13020C, 30, "Levels"),
    LocationName.Lvl31: LocationData(0x13020D, 31, "Levels"),
    LocationName.Lvl32: LocationData(0x13020E, 32, "Levels"),
    LocationName.Lvl33: LocationData(0x13020F, 33, "Levels"),
    LocationName.Lvl34: LocationData(0x130210, 34, "Levels"),
    LocationName.Lvl35: LocationData(0x130211, 35, "Levels"),
    LocationName.Lvl36: LocationData(0x130212, 36, "Levels"),
    LocationName.Lvl37: LocationData(0x130213, 37, "Levels"),
    LocationName.Lvl38: LocationData(0x130214, 38, "Levels"),
    LocationName.Lvl39: LocationData(0x130215, 39, "Levels"),
    LocationName.Lvl40: LocationData(0x130216, 40, "Levels"),
    LocationName.Lvl41: LocationData(0x130217, 41, "Levels"),
    LocationName.Lvl42: LocationData(0x130218, 42, "Levels"),
    LocationName.Lvl43: LocationData(0x130219, 43, "Levels"),
    LocationName.Lvl44: LocationData(0x13021A, 44, "Levels"),
    LocationName.Lvl45: LocationData(0x13021B, 45, "Levels"),
    LocationName.Lvl46: LocationData(0x13021C, 46, "Levels"),
    LocationName.Lvl47: LocationData(0x13021D, 47, "Levels"),
    LocationName.Lvl48: LocationData(0x13021E, 48, "Levels"),
    LocationName.Lvl49: LocationData(0x13021F, 49, "Levels"),
    LocationName.Lvl50: LocationData(0x130220, 50, "Levels"),
    LocationName.Lvl51: LocationData(0x130221, 51, "Levels"),
    LocationName.Lvl52: LocationData(0x130222, 52, "Levels"),
    LocationName.Lvl53: LocationData(0x130223, 53, "Levels"),
    LocationName.Lvl54: LocationData(0x130224, 54, "Levels"),
    LocationName.Lvl55: LocationData(0x130225, 55, "Levels"),
    LocationName.Lvl56: LocationData(0x130226, 56, "Levels"),
    LocationName.Lvl57: LocationData(0x130227, 57, "Levels"),
    LocationName.Lvl58: LocationData(0x130228, 58, "Levels"),
    LocationName.Lvl59: LocationData(0x130229, 59, "Levels"),
    LocationName.Lvl60: LocationData(0x13022A, 60, "Levels"),
    LocationName.Lvl61: LocationData(0x13022B, 61, "Levels"),
    LocationName.Lvl62: LocationData(0x13022C, 62, "Levels"),
    LocationName.Lvl63: LocationData(0x13022D, 63, "Levels"),
    LocationName.Lvl64: LocationData(0x13022E, 64, "Levels"),
    LocationName.Lvl65: LocationData(0x13022F, 65, "Levels"),
    LocationName.Lvl66: LocationData(0x130230, 66, "Levels"),
    LocationName.Lvl67: LocationData(0x130231, 67, "Levels"),
    LocationName.Lvl68: LocationData(0x130232, 68, "Levels"),
    LocationName.Lvl69: LocationData(0x130233, 69, "Levels"),
    LocationName.Lvl70: LocationData(0x130234, 70, "Levels"),
    LocationName.Lvl71: LocationData(0x130235, 71, "Levels"),
    LocationName.Lvl72: LocationData(0x130236, 72, "Levels"),
    LocationName.Lvl73: LocationData(0x130237, 73, "Levels"),
    LocationName.Lvl74: LocationData(0x130238, 74, "Levels"),
    LocationName.Lvl75: LocationData(0x130239, 75, "Levels"),
    LocationName.Lvl76: LocationData(0x13023A, 76, "Levels"),
    LocationName.Lvl77: LocationData(0x13023B, 77, "Levels"),
    LocationName.Lvl78: LocationData(0x13023C, 78, "Levels"),
    LocationName.Lvl79: LocationData(0x13023D, 79, "Levels"),
    LocationName.Lvl80: LocationData(0x13023E, 80, "Levels"),
    LocationName.Lvl81: LocationData(0x13023F, 81, "Levels"),
    LocationName.Lvl82: LocationData(0x130240, 82, "Levels"),
    LocationName.Lvl83: LocationData(0x130241, 83, "Levels"),
    LocationName.Lvl84: LocationData(0x130242, 84, "Levels"),
    LocationName.Lvl85: LocationData(0x130243, 85, "Levels"),
    LocationName.Lvl86: LocationData(0x130244, 86, "Levels"),
    LocationName.Lvl87: LocationData(0x130245, 87, "Levels"),
    LocationName.Lvl88: LocationData(0x130246, 88, "Levels"),
    LocationName.Lvl89: LocationData(0x130247, 89, "Levels"),
    LocationName.Lvl90: LocationData(0x130248, 90, "Levels"),
    LocationName.Lvl91: LocationData(0x130249, 91, "Levels"),
    LocationName.Lvl92: LocationData(0x13024A, 92, "Levels"),
    LocationName.Lvl93: LocationData(0x13024B, 93, "Levels"),
    LocationName.Lvl94: LocationData(0x13024C, 94, "Levels"),
    LocationName.Lvl95: LocationData(0x13024D, 95, "Levels"),
    LocationName.Lvl96: LocationData(0x13024E, 96, "Levels"),
    LocationName.Lvl97: LocationData(0x13024F, 97, "Levels"),
    LocationName.Lvl98: LocationData(0x130250, 98, "Levels"),
    LocationName.Lvl99: LocationData(0x130251, 99, "Levels"),
}
Form_Checks = {
    LocationName.Valorlvl2:  LocationData(0x130253, 2, "Forms", 1),
    LocationName.Valorlvl3:  LocationData(0x130254, 3, "Forms", 1),
    LocationName.Valorlvl4:  LocationData(0x130255, 4, "Forms", 1),
    LocationName.Valorlvl5:  LocationData(0x130256, 5, "Forms", 1),
    LocationName.Valorlvl6:  LocationData(0x130257, 6, "Forms", 1),
    LocationName.Valorlvl7:  LocationData(0x130258, 7, "Forms", 1),

    LocationName.Wisdomlvl2: LocationData(0x13025A, 2, "Forms", 2),
    LocationName.Wisdomlvl3: LocationData(0x13025B, 3, "Forms", 2),
    LocationName.Wisdomlvl4: LocationData(0x13025C, 4, "Forms", 2),
    LocationName.Wisdomlvl5: LocationData(0x13025D, 5, "Forms", 2),
    LocationName.Wisdomlvl6: LocationData(0x13025E, 6, "Forms", 2),
    LocationName.Wisdomlvl7: LocationData(0x13025F, 7, "Forms", 2),

    LocationName.Limitlvl2:  LocationData(0x130261, 2, "Forms", 3),
    LocationName.Limitlvl3:  LocationData(0x130262, 3, "Forms", 3),
    LocationName.Limitlvl4:  LocationData(0x130263, 4, "Forms", 3),
    LocationName.Limitlvl5:  LocationData(0x130264, 5, "Forms", 3),
    LocationName.Limitlvl6:  LocationData(0x130265, 6, "Forms", 3),
    LocationName.Limitlvl7:  LocationData(0x130266, 7, "Forms", 3),

    LocationName.Masterlvl2: LocationData(0x130268, 2, "Forms", 4),
    LocationName.Masterlvl3: LocationData(0x130269, 3, "Forms", 4),
    LocationName.Masterlvl4: LocationData(0x13026A, 4, "Forms", 4),
    LocationName.Masterlvl5: LocationData(0x13026B, 5, "Forms", 4),
    LocationName.Masterlvl6: LocationData(0x13026C, 6, "Forms", 4),
    LocationName.Masterlvl7: LocationData(0x13026D, 7, "Forms", 4),

    LocationName.Finallvl2:  LocationData(0x13026F, 2, "Forms", 5),
    LocationName.Finallvl3:  LocationData(0x130270, 3, "Forms", 5),
    LocationName.Finallvl4:  LocationData(0x130271, 4, "Forms", 5),
    LocationName.Finallvl5:  LocationData(0x130272, 5, "Forms", 5),
    LocationName.Finallvl6:  LocationData(0x130273, 6, "Forms", 5),
    LocationName.Finallvl7:  LocationData(0x130274, 7, "Forms", 5),
}
GoA_Checks = {
    LocationName.GardenofAssemblageMap: LocationData(0x130275, 585, "Chest"),
    LocationName.GoALostIllusion:       LocationData(0x130276, 586, "Chest"),
    LocationName.ProofofNonexistence:   LocationData(0x130277, 590, "Chest"),
}
Keyblade_Slots = {
    LocationName.FAKESlot:            LocationData(0x130278, 116, "Keyblade"),
    LocationName.DetectionSaberSlot:  LocationData(0x130279, 83, "Keyblade"),
    LocationName.EdgeofUltimaSlot:    LocationData(0x13027A, 84, "Keyblade"),
    LocationName.KingdomKeySlot:      LocationData(0x13027B, 80, "Keyblade"),
    LocationName.OathkeeperSlot:      LocationData(0x13027C, 81, "Keyblade"),
    LocationName.OblivionSlot:        LocationData(0x13027D, 82, "Keyblade"),
    LocationName.StarSeekerSlot:      LocationData(0x13027E, 123, "Keyblade"),
    LocationName.HiddenDragonSlot:    LocationData(0x13027F, 124, "Keyblade"),
    LocationName.HerosCrestSlot:      LocationData(0x130280, 127, "Keyblade"),
    LocationName.MonochromeSlot:      LocationData(0x130281, 128, "Keyblade"),
    LocationName.FollowtheWindSlot:   LocationData(0x130282, 129, "Keyblade"),
    LocationName.CircleofLifeSlot:    LocationData(0x130283, 130, "Keyblade"),
    LocationName.PhotonDebuggerSlot:  LocationData(0x130284, 131, "Keyblade"),
    LocationName.GullWingSlot:        LocationData(0x130285, 132, "Keyblade"),
    LocationName.RumblingRoseSlot:    LocationData(0x130286, 133, "Keyblade"),
    LocationName.GuardianSoulSlot:    LocationData(0x130287, 134, "Keyblade"),
    LocationName.WishingLampSlot:     LocationData(0x130288, 135, "Keyblade"),
    LocationName.DecisivePumpkinSlot: LocationData(0x130289, 136, "Keyblade"),
    LocationName.SweetMemoriesSlot:   LocationData(0x13028A, 138, "Keyblade"),
    LocationName.MysteriousAbyssSlot: LocationData(0x13028B, 139, "Keyblade"),
    LocationName.SleepingLionSlot:    LocationData(0x13028C, 137, "Keyblade"),
    LocationName.BondofFlameSlot:     LocationData(0x13028D, 141, "Keyblade"),
    LocationName.TwoBecomeOneSlot:    LocationData(0x13028E, 148, "Keyblade"),
    LocationName.FatalCrestSlot:      LocationData(0x13028F, 140, "Keyblade"),
    LocationName.FenrirSlot:          LocationData(0x130290, 142, "Keyblade"),
    LocationName.UltimaWeaponSlot:    LocationData(0x130291, 143, "Keyblade"),
    LocationName.WinnersProofSlot:    LocationData(0x130292, 149, "Keyblade"),
    LocationName.PurebloodSlot:       LocationData(0x1302DB, 85, "Keyblade"),
}
#  checks are given when talking to the computer in the GoA
Critical_Checks = {
    LocationName.Crit_1: LocationData(0x130293, 1, "Critical"),
    LocationName.Crit_2: LocationData(0x130294, 1, "Critical"),
    LocationName.Crit_3: LocationData(0x130295, 1, "Critical"),
    LocationName.Crit_4: LocationData(0x130296, 1, "Critical"),
    LocationName.Crit_5: LocationData(0x130297, 1, "Critical"),
    LocationName.Crit_6: LocationData(0x130298, 1, "Critical"),
    LocationName.Crit_7: LocationData(0x130299, 1, "Critical"),
}

Donald_Checks = {
    LocationName.DonaldScreens:          LocationData(0x13029A, 45, "Get Bonus", "Donald", 2),
    LocationName.DonaldDemyxHBGetBonus:  LocationData(0x13029B, 28, "Get Bonus", "Donald", 2),
    LocationName.DonaldDemyxOC:          LocationData(0x13029C, 58, "Get Bonus", "Donald", 2),
    LocationName.DonaldBoatPete:         LocationData(0x13029D, 16, "Double Get Bonus", "Donald", 2),
    LocationName.DonaldBoatPeteGetBonus: LocationData(0x13029E, 16, "Second Get Bonus", "Donald", 2),
    LocationName.DonaldPrisonKeeper:     LocationData(0x13029F, 18, "Get Bonus", "Donald", 2),
    LocationName.DonaldScar:             LocationData(0x1302A0, 29, "Get Bonus", "Donald", 2),
    LocationName.DonaldSolarSailer:      LocationData(0x1302A1, 61, "Get Bonus", "Donald", 2),
    LocationName.DonaldExperiment:       LocationData(0x1302A2, 20, "Get Bonus", "Donald", 2),
    LocationName.DonaldBoatFight:        LocationData(0x1302A3, 62, "Get Bonus", "Donald", 2),
    LocationName.DonaldMansionNobodies:  LocationData(0x1302A4, 56, "Get Bonus", "Donald", 2),
    LocationName.DonaldThresholder:      LocationData(0x1302A5, 2, "Get Bonus", "Donald", 2),
    LocationName.DonaldXaldinGetBonus:   LocationData(0x1302A6, 4, "Get Bonus", "Donald", 2),
    LocationName.DonaladGrimReaper2:     LocationData(0x1302A7, 22, "Get Bonus", "Donald", 2),

    LocationName.CometStaff:             LocationData(0x1302A8, 90, "Keyblade", "Donald"),
    LocationName.HammerStaff:            LocationData(0x1302A9, 87, "Keyblade", "Donald"),
    LocationName.LordsBroom:             LocationData(0x1302AA, 91, "Keyblade", "Donald"),
    LocationName.MagesStaff:             LocationData(0x1302AB, 86, "Keyblade", "Donald"),
    LocationName.MeteorStaff:            LocationData(0x1302AC, 89, "Keyblade", "Donald"),
    LocationName.NobodyLance:            LocationData(0x1302AD, 94, "Keyblade", "Donald"),
    LocationName.PreciousMushroom:       LocationData(0x1302AE, 154, "Keyblade", "Donald"),
    LocationName.PreciousMushroom2:      LocationData(0x1302AF, 155, "Keyblade", "Donald"),
    LocationName.PremiumMushroom:        LocationData(0x1302B0, 156, "Keyblade", "Donald"),
    LocationName.RisingDragon:           LocationData(0x1302B1, 93, "Keyblade", "Donald"),
    LocationName.SaveTheQueen2:          LocationData(0x1302B2, 146, "Keyblade", "Donald"),
    LocationName.ShamansRelic:           LocationData(0x1302B3, 95, "Keyblade", "Donald"),
    LocationName.VictoryBell:            LocationData(0x1302B4, 88, "Keyblade", "Donald"),
    LocationName.WisdomWand:             LocationData(0x1302B5, 92, "Keyblade", "Donald"),
    LocationName.Centurion2:             LocationData(0x1302B6, 151, "Keyblade", "Donald"),
    LocationName.DonaldAbuEscort:        LocationData(0x1302B7, 42, "Get Bonus", "Donald", 2),
    LocationName.DonaldStarting1:        LocationData(0x1302B8, 2, "Critical", "Donald"),
    LocationName.DonaldStarting2:        LocationData(0x1302B9, 2, "Critical", "Donald"),
}

Goofy_Checks = {
    LocationName.GoofyBarbossa:           LocationData(0x1302BA, 21, "Double Get Bonus", "Goofy", 3),
    LocationName.GoofyBarbossaGetBonus:   LocationData(0x1302BB, 21, "Second Get Bonus", "Goofy", 3),
    LocationName.GoofyGrimReaper1:        LocationData(0x1302BC, 59, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHostileProgram:     LocationData(0x1302BD, 31, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHyenas1:            LocationData(0x1302BE, 49, "Get Bonus", "Goofy", 3),
    LocationName.GoofyHyenas2:            LocationData(0x1302BF, 50, "Get Bonus", "Goofy", 3),
    LocationName.GoofyLock:               LocationData(0x1302C0, 40, "Get Bonus", "Goofy", 3),
    LocationName.GoofyOogieBoogie:        LocationData(0x1302C1, 19, "Get Bonus", "Goofy", 3),
    LocationName.GoofyPeteOC:             LocationData(0x1302C2, 6, "Get Bonus", "Goofy", 3),
    LocationName.GoofyFuturePete:         LocationData(0x1302C3, 17, "Get Bonus", "Goofy", 3),
    LocationName.GoofyShanYu:             LocationData(0x1302C4, 9, "Get Bonus", "Goofy", 3),
    LocationName.GoofyStormRider:         LocationData(0x1302C5, 10, "Get Bonus", "Goofy", 3),
    LocationName.GoofyBeast:              LocationData(0x1302C6, 12, "Get Bonus", "Goofy", 3),
    LocationName.GoofyInterceptorBarrels: LocationData(0x1302C7, 39, "Get Bonus", "Goofy", 3),
    LocationName.GoofyTreasureRoom:       LocationData(0x1302C8, 46, "Get Bonus", "Goofy", 3),
    LocationName.GoofyZexion:             LocationData(0x1302C9, 66, "Get Bonus", "Goofy", 3),

    LocationName.AdamantShield:           LocationData(0x1302CA, 100, "Keyblade", "Goofy"),
    LocationName.AkashicRecord:           LocationData(0x1302CB, 107, "Keyblade", "Goofy"),
    LocationName.ChainGear:               LocationData(0x1302CC, 101, "Keyblade", "Goofy"),
    LocationName.DreamCloud:              LocationData(0x1302CD, 104, "Keyblade", "Goofy"),
    LocationName.FallingStar:             LocationData(0x1302CE, 103, "Keyblade", "Goofy"),
    LocationName.FrozenPride2:            LocationData(0x1302CF, 158, "Keyblade", "Goofy"),
    LocationName.GenjiShield:             LocationData(0x1302D0, 106, "Keyblade", "Goofy"),
    LocationName.KnightDefender:          LocationData(0x1302D1, 105, "Keyblade", "Goofy"),
    LocationName.KnightsShield:           LocationData(0x1302D2, 99, "Keyblade", "Goofy"),
    LocationName.MajesticMushroom:        LocationData(0x1302D3, 161, "Keyblade", "Goofy"),
    LocationName.MajesticMushroom2:       LocationData(0x1302D4, 162, "Keyblade", "Goofy"),
    LocationName.NobodyGuard:             LocationData(0x1302D5, 108, "Keyblade", "Goofy"),
    LocationName.OgreShield:              LocationData(0x1302D6, 102, "Keyblade", "Goofy"),
    LocationName.SaveTheKing2:            LocationData(0x1302D7, 147, "Keyblade", "Goofy"),
    LocationName.UltimateMushroom:        LocationData(0x1302D8, 163, "Keyblade", "Goofy"),
    LocationName.GoofyStarting1:          LocationData(0x1302D9, 3, "Critical", "Goofy"),
    LocationName.GoofyStarting2:          LocationData(0x1302DA, 3, "Critical", "Goofy"),
}
exclusion_table = {
    "Popups":        {
        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
    },
    "Datas":         {
        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,
    },
    "SuperBosses":   {
        LocationName.LingeringWillBonus,
        LocationName.LingeringWillProofofConnection,
        LocationName.LingeringWillManifestIllusion,
        LocationName.SephirothBonus,
        LocationName.SephirothFenrir,
    },

    # 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,
    },
    "Critical":      {
        LocationName.Crit_1,
        LocationName.Crit_2,
        LocationName.Crit_3,
        LocationName.Crit_4,
        LocationName.Crit_5,
        LocationName.Crit_6,
        LocationName.Crit_7,
    },
    "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.TransporttoRemembrance,
        LocationName.OrichalcumPlusGoddessofFateCup,
        LocationName.HadesCupTrophyParadoxCups,
    ],
    "Cups":          {
        LocationName.ProtectBeltPainandPanicCup,
        LocationName.SerenityGemPainandPanicCup,
        LocationName.RisingDragonCerberusCup,
        LocationName.SerenityCrystalCerberusCup,
        LocationName.GenjiShieldTitanCup,
        LocationName.SkillfulRingTitanCup,
        LocationName.FatalCrestGoddessofFateCup,
        LocationName.OrichalcumPlusGoddessofFateCup,
        LocationName.HadesCupTrophyParadoxCups,
    },
    "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":        {
        LocationName.BambooGroveDarkShard,
        LocationName.BambooGroveEther,
        LocationName.BambooGroveMythrilShard,
        LocationName.CheckpointHiPotion,
        LocationName.CheckpointMythrilShard,
        LocationName.MountainTrailLightningShard,
        LocationName.MountainTrailRecoveryRecipe,
        LocationName.MountainTrailEther,
        LocationName.MountainTrailMythrilShard,
        LocationName.VillageCaveAPBoost,
        LocationName.VillageCaveDarkShard,
        LocationName.RidgeFrostShard,
        LocationName.RidgeAPBoost,
        LocationName.ThroneRoomTornPages,
        LocationName.ThroneRoomPalaceMap,
        LocationName.ThroneRoomAPBoost,
        LocationName.ThroneRoomQueenRecipe,
        LocationName.ThroneRoomAPBoost2,
        LocationName.ThroneRoomOgreShield,
        LocationName.ThroneRoomMythrilCrystal,
        LocationName.ThroneRoomOrichalcum,
        LocationName.AgrabahDarkShard,
        LocationName.AgrabahMythrilShard,
        LocationName.AgrabahHiPotion,
        LocationName.AgrabahAPBoost,
        LocationName.AgrabahMythrilStone,
        LocationName.AgrabahMythrilShard2,
        LocationName.AgrabahSerenityShard,
        LocationName.BazaarMythrilGem,
        LocationName.BazaarPowerShard,
        LocationName.BazaarHiPotion,
        LocationName.BazaarAPBoost,
        LocationName.BazaarMythrilShard,
        LocationName.PalaceWallsSkillRing,
        LocationName.PalaceWallsMythrilStone,
        LocationName.CaveEntrancePowerStone,
        LocationName.CaveEntranceMythrilShard,
        LocationName.ValleyofStoneMythrilStone,
        LocationName.ValleyofStoneAPBoost,
        LocationName.ValleyofStoneMythrilShard,
        LocationName.ValleyofStoneHiPotion,
        LocationName.ChasmofChallengesCaveofWondersMap,
        LocationName.ChasmofChallengesAPBoost,
        LocationName.TreasureRoomAPBoost,
        LocationName.TreasureRoomSerenityGem,
        LocationName.RuinedChamberTornPages,
        LocationName.RuinedChamberRuinsMap,
        LocationName.DCCourtyardMythrilShard,
        LocationName.DCCourtyardStarRecipe,
        LocationName.DCCourtyardAPBoost,
        LocationName.DCCourtyardMythrilStone,
        LocationName.DCCourtyardBlazingStone,
        LocationName.DCCourtyardBlazingShard,
        LocationName.DCCourtyardMythrilShard2,
        LocationName.LibraryTornPages,
        LocationName.CornerstoneHillMap,
        LocationName.CornerstoneHillFrostShard,
        LocationName.PierMythrilShard,
        LocationName.PierHiPotion,
        LocationName.WaterwayMythrilStone,
        LocationName.WaterwayAPBoost,
        LocationName.WaterwayFrostStone,
        LocationName.PoohsHouse100AcreWoodMap,
        LocationName.PoohsHouseAPBoost,
        LocationName.PoohsHouseMythrilStone,
        LocationName.PigletsHouseDefenseBoost,
        LocationName.PigletsHouseAPBoost,
        LocationName.PigletsHouseMythrilGem,
        LocationName.RabbitsHouseDrawRing,
        LocationName.RabbitsHouseMythrilCrystal,
        LocationName.RabbitsHouseAPBoost,
        LocationName.KangasHouseMagicBoost,
        LocationName.KangasHouseAPBoost,
        LocationName.KangasHouseOrichalcum,
        LocationName.SpookyCaveMythrilGem,
        LocationName.SpookyCaveAPBoost,
        LocationName.SpookyCaveOrichalcum,
        LocationName.SpookyCaveGuardRecipe,
        LocationName.SpookyCaveMythrilCrystal,
        LocationName.SpookyCaveAPBoost2,
        LocationName.StarryHillCosmicRing,
        LocationName.StarryHillStyleRecipe,
        LocationName.RampartNavalMap,
        LocationName.RampartMythrilStone,
        LocationName.RampartDarkShard,
        LocationName.TownDarkStone,
        LocationName.TownAPBoost,
        LocationName.TownMythrilShard,
        LocationName.TownMythrilGem,
        LocationName.CaveMouthBrightShard,
        LocationName.CaveMouthMythrilShard,
        LocationName.PowderStoreAPBoost1,
        LocationName.PowderStoreAPBoost2,
        LocationName.MoonlightNookMythrilShard,
        LocationName.MoonlightNookSerenityGem,
        LocationName.MoonlightNookPowerStone,
        LocationName.InterceptorsHoldFeatherCharm,
        LocationName.SeadriftKeepAPBoost,
        LocationName.SeadriftKeepOrichalcum,
        LocationName.SeadriftKeepMeteorStaff,
        LocationName.SeadriftRowSerenityGem,
        LocationName.SeadriftRowKingRecipe,
        LocationName.SeadriftRowMythrilCrystal,
        LocationName.PassageMythrilShard,
        LocationName.PassageMythrilStone,
        LocationName.PassageEther,
        LocationName.PassageAPBoost,
        LocationName.PassageHiPotion,
        LocationName.InnerChamberUnderworldMap,
        LocationName.InnerChamberMythrilShard,
        LocationName.UnderworldEntrancePowerBoost,
        LocationName.CavernsEntranceLucidShard,
        LocationName.CavernsEntranceAPBoost,
        LocationName.CavernsEntranceMythrilShard,
        LocationName.TheLostRoadBrightShard,
        LocationName.TheLostRoadEther,
        LocationName.TheLostRoadMythrilShard,
        LocationName.TheLostRoadMythrilStone,
        LocationName.AtriumLucidStone,
        LocationName.AtriumAPBoost,
        LocationName.TheLockCavernsMap,
        LocationName.TheLockMythrilShard,
        LocationName.TheLockAPBoost,
        LocationName.BCCourtyardAPBoost,
        LocationName.BCCourtyardHiPotion,
        LocationName.BCCourtyardMythrilShard,
        LocationName.BellesRoomCastleMap,
        LocationName.BellesRoomMegaRecipe,
        LocationName.TheEastWingMythrilShard,
        LocationName.TheEastWingTent,
        LocationName.TheWestHallHiPotion,
        LocationName.TheWestHallPowerShard,
        LocationName.TheWestHallMythrilShard2,
        LocationName.TheWestHallBrightStone,
        LocationName.TheWestHallMythrilShard,
        LocationName.DungeonBasementMap,
        LocationName.DungeonAPBoost,
        LocationName.SecretPassageMythrilShard,
        LocationName.SecretPassageHiPotion,
        LocationName.SecretPassageLucidShard,
        LocationName.TheWestHallAPBoostPostDungeon,
        LocationName.TheWestWingMythrilShard,
        LocationName.TheWestWingTent,
        LocationName.TheBeastsRoomBlazingShard,
        LocationName.PitCellAreaMap,
        LocationName.PitCellMythrilCrystal,
        LocationName.CanyonDarkCrystal,
        LocationName.CanyonMythrilStone,
        LocationName.CanyonMythrilGem,
        LocationName.CanyonFrostCrystal,
        LocationName.HallwayPowerCrystal,
        LocationName.HallwayAPBoost,
        LocationName.CommunicationsRoomIOTowerMap,
        LocationName.CommunicationsRoomGaiaBelt,
        LocationName.CentralComputerCoreAPBoost,
        LocationName.CentralComputerCoreOrichalcumPlus,
        LocationName.CentralComputerCoreCosmicArts,
        LocationName.CentralComputerCoreMap,
        LocationName.GraveyardMythrilShard,
        LocationName.GraveyardSerenityGem,
        LocationName.FinklesteinsLabHalloweenTownMap,
        LocationName.TownSquareMythrilStone,
        LocationName.TownSquareEnergyShard,
        LocationName.HinterlandsLightningShard,
        LocationName.HinterlandsMythrilStone,
        LocationName.HinterlandsAPBoost,
        LocationName.CandyCaneLaneMegaPotion,
        LocationName.CandyCaneLaneMythrilGem,
        LocationName.CandyCaneLaneLightningStone,
        LocationName.CandyCaneLaneMythrilStone,
        LocationName.SantasHouseChristmasTownMap,
        LocationName.SantasHouseAPBoost,
        LocationName.BoroughDriveRecovery,
        LocationName.BoroughAPBoost,
        LocationName.BoroughHiPotion,
        LocationName.BoroughMythrilShard,
        LocationName.BoroughDarkShard,
        LocationName.PosternCastlePerimeterMap,
        LocationName.PosternMythrilGem,
        LocationName.PosternAPBoost,
        LocationName.CorridorsMythrilStone,
        LocationName.CorridorsMythrilCrystal,
        LocationName.CorridorsDarkCrystal,
        LocationName.CorridorsAPBoost,
        LocationName.AnsemsStudyUkuleleCharm,
        LocationName.RestorationSiteMoonRecipe,
        LocationName.RestorationSiteAPBoost,
        LocationName.CoRDepthsAPBoost,
        LocationName.CoRDepthsPowerCrystal,
        LocationName.CoRDepthsFrostCrystal,
        LocationName.CoRDepthsManifestIllusion,
        LocationName.CoRDepthsAPBoost2,
        LocationName.CoRMineshaftLowerLevelDepthsofRemembranceMap,
        LocationName.CoRMineshaftLowerLevelAPBoost,
        LocationName.CrystalFissureTornPages,
        LocationName.CrystalFissureTheGreatMawMap,
        LocationName.CrystalFissureEnergyCrystal,
        LocationName.CrystalFissureAPBoost,
        LocationName.PosternGullWing,
        LocationName.HeartlessManufactoryCosmicChain,
        LocationName.CoRDepthsUpperLevelRemembranceGem,
        LocationName.CoRMiningAreaSerenityGem,
        LocationName.CoRMiningAreaAPBoost,
        LocationName.CoRMiningAreaSerenityCrystal,
        LocationName.CoRMiningAreaManifestIllusion,
        LocationName.CoRMiningAreaSerenityGem2,
        LocationName.CoRMiningAreaDarkRemembranceMap,
        LocationName.CoRMineshaftMidLevelPowerBoost,
        LocationName.CoREngineChamberSerenityCrystal,
        LocationName.CoREngineChamberRemembranceCrystal,
        LocationName.CoREngineChamberAPBoost,
        LocationName.CoREngineChamberManifestIllusion,
        LocationName.CoRMineshaftUpperLevelMagicBoost,
        LocationName.CoRMineshaftUpperLevelAPBoost,
        LocationName.GorgeSavannahMap,
        LocationName.GorgeDarkGem,
        LocationName.GorgeMythrilStone,
        LocationName.ElephantGraveyardFrostGem,
        LocationName.ElephantGraveyardMythrilStone,
        LocationName.ElephantGraveyardBrightStone,
        LocationName.ElephantGraveyardAPBoost,
        LocationName.ElephantGraveyardMythrilShard,
        LocationName.PrideRockMap,
        LocationName.PrideRockMythrilStone,
        LocationName.PrideRockSerenityCrystal,
        LocationName.WildebeestValleyEnergyStone,
        LocationName.WildebeestValleyAPBoost,
        LocationName.WildebeestValleyMythrilGem,
        LocationName.WildebeestValleyMythrilStone,
        LocationName.WildebeestValleyLucidGem,
        LocationName.WastelandsMythrilShard,
        LocationName.WastelandsSerenityGem,
        LocationName.WastelandsMythrilStone,
        LocationName.JungleSerenityGem,
        LocationName.JungleMythrilStone,
        LocationName.JungleSerenityCrystal,
        LocationName.OasisMap,
        LocationName.OasisTornPages,
        LocationName.OasisAPBoost,
        LocationName.StationofCallingPotion,
        LocationName.CentralStationPotion1,
        LocationName.STTCentralStationHiPotion,
        LocationName.CentralStationPotion2,
        LocationName.SunsetTerraceAbilityRing,
        LocationName.SunsetTerraceHiPotion,
        LocationName.SunsetTerracePotion1,
        LocationName.SunsetTerracePotion2,
        LocationName.MansionFoyerHiPotion,
        LocationName.MansionFoyerPotion1,
        LocationName.MansionFoyerPotion2,
        LocationName.MansionDiningRoomElvenBandanna,
        LocationName.MansionDiningRoomPotion,
        LocationName.MansionLibraryHiPotion,
        LocationName.MansionBasementCorridorHiPotion,
        LocationName.OldMansionPotion,
        LocationName.OldMansionMythrilShard,
        LocationName.TheWoodsPotion,
        LocationName.TheWoodsMythrilShard,
        LocationName.TheWoodsHiPotion,
        LocationName.TramCommonHiPotion,
        LocationName.TramCommonAPBoost,
        LocationName.TramCommonTent,
        LocationName.TramCommonMythrilShard1,
        LocationName.TramCommonPotion1,
        LocationName.TramCommonMythrilShard2,
        LocationName.TramCommonPotion2,
        LocationName.CentralStationTent,
        LocationName.TTCentralStationHiPotion,
        LocationName.CentralStationMythrilShard,
        LocationName.TheTowerPotion,
        LocationName.TheTowerHiPotion,
        LocationName.TheTowerEther,
        LocationName.TowerEntrywayEther,
        LocationName.TowerEntrywayMythrilShard,
        LocationName.SorcerersLoftTowerMap,
        LocationName.TowerWardrobeMythrilStone,
        LocationName.UndergroundConcourseMythrilGem,
        LocationName.UndergroundConcourseAPBoost,
        LocationName.UndergroundConcourseMythrilCrystal,
        LocationName.UndergroundConcourseOrichalcum,
        LocationName.TunnelwayOrichalcum,
        LocationName.TunnelwayMythrilCrystal,
        LocationName.SunsetTerraceOrichalcumPlus,
        LocationName.SunsetTerraceMythrilShard,
        LocationName.SunsetTerraceMythrilCrystal,
        LocationName.SunsetTerraceAPBoost,
        LocationName.MansionFoyerMythrilCrystal,
        LocationName.MansionFoyerMythrilStone,
        LocationName.MansionFoyerSerenityCrystal,
        LocationName.MansionDiningRoomMythrilCrystal,
        LocationName.MansionDiningRoomMythrilStone,
        LocationName.MansionLibraryOrichalcum,
        LocationName.MansionBasementCorridorUltimateRecipe,
        LocationName.FragmentCrossingMythrilStone,
        LocationName.FragmentCrossingMythrilCrystal,
        LocationName.FragmentCrossingAPBoost,
        LocationName.FragmentCrossingOrichalcum,
        LocationName.MemorysSkyscaperMythrilCrystal,
        LocationName.MemorysSkyscaperAPBoost,
        LocationName.MemorysSkyscaperMythrilStone,
        LocationName.TheBrinkofDespairDarkCityMap,
        LocationName.TheBrinkofDespairOrichalcumPlus,
        LocationName.NothingsCallMythrilGem,
        LocationName.NothingsCallOrichalcum,
        LocationName.TwilightsViewCosmicBelt,
        LocationName.NaughtsSkywayMythrilGem,
        LocationName.NaughtsSkywayOrichalcum,
        LocationName.NaughtsSkywayMythrilCrystal,
        LocationName.RuinandCreationsPassageMythrilStone,
        LocationName.RuinandCreationsPassageAPBoost,
        LocationName.RuinandCreationsPassageMythrilCrystal,
        LocationName.RuinandCreationsPassageOrichalcum,
        LocationName.GardenofAssemblageMap,
        LocationName.GoALostIllusion,
        LocationName.ProofofNonexistence,
    }
}

AllWeaponSlot = {
    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, }
RegionTable = {
    "FirstVisits":  {
        RegionName.LoD_Region,
        RegionName.Ag_Region,
        RegionName.Dc_Region,
        RegionName.Pr_Region,
        RegionName.Oc_Region,
        RegionName.Bc_Region,
        RegionName.Sp_Region,
        RegionName.Ht_Region,
        RegionName.Hb_Region,
        RegionName.Pl_Region,
        RegionName.STT_Region,
        RegionName.TT_Region,
        RegionName.Twtnw_Region,
    },
    "SecondVisits": {
        RegionName.LoD2_Region,
        RegionName.Ag2_Region,
        RegionName.Tr_Region,
        RegionName.Pr2_Region,
        RegionName.Oc2_Region,
        RegionName.Bc2_Region,
        RegionName.Sp2_Region,
        RegionName.Ht2_Region,
        RegionName.Hb2_Region,
        RegionName.Pl2_Region,
        RegionName.STT_Region,
        RegionName.Twtnw2_Region,
    },
    "ValorRegion":  {
        RegionName.LoD_Region,
        RegionName.Ag_Region,
        RegionName.Dc_Region,
        RegionName.Pr_Region,
        RegionName.Oc_Region,
        RegionName.Bc_Region,
        RegionName.Sp_Region,
        RegionName.Ht_Region,
        RegionName.Hb_Region,
        RegionName.TT_Region,
        RegionName.Twtnw_Region,
    },
    "WisdomRegion": {
        RegionName.LoD_Region,
        RegionName.Ag_Region,
        RegionName.Dc_Region,
        RegionName.Pr_Region,
        RegionName.Oc_Region,
        RegionName.Bc_Region,
        RegionName.Sp_Region,
        RegionName.Ht_Region,
        RegionName.Hb_Region,
        RegionName.TT_Region,
        RegionName.Twtnw_Region,
    },
    "LimitRegion":  {
        RegionName.LoD_Region,
        RegionName.Ag_Region,
        RegionName.Dc_Region,
        RegionName.Pr_Region,
        RegionName.Oc_Region,
        RegionName.Bc_Region,
        RegionName.Sp_Region,
        RegionName.Ht_Region,
        RegionName.Hb_Region,
        RegionName.TT_Region,
        RegionName.Twtnw_Region,
        RegionName.STT_Region,
    },
    "MasterRegion": {
        RegionName.LoD_Region,
        RegionName.Ag_Region,
        RegionName.Dc_Region,
        RegionName.Pr_Region,
        RegionName.Oc_Region,
        RegionName.Bc_Region,
        RegionName.Sp_Region,
        RegionName.Ht_Region,
        RegionName.Hb_Region,
        RegionName.TT_Region,
        RegionName.Twtnw_Region,
    },  # could add lod2 and bc2 as an option since those spawns are rng
    "FinalRegion":  {
        RegionName.TT3_Region,
        RegionName.Twtnw_PostRoxas,
        RegionName.Twtnw2_Region,
    }
}

all_locations = {
    **TWTNW_Checks,
    **TWTNW2_Checks,
    **TT_Checks,
    **TT2_Checks,
    **TT3_Checks,
    **STT_Checks,
    **PL_Checks,
    **PL2_Checks,
    **CoR_Checks,
    **HB_Checks,
    **HB2_Checks,
    **HT_Checks,
    **HT2_Checks,
    **PR_Checks,
    **PR2_Checks,
    **PR_Checks,
    **PR2_Checks,
    **SP_Checks,
    **SP2_Checks,
    **BC_Checks,
    **BC2_Checks,
    **Oc_Checks,
    **Oc2_Checks,
    **Oc2Cups,
    **HundredAcre1_Checks,
    **HundredAcre2_Checks,
    **HundredAcre3_Checks,
    **HundredAcre4_Checks,
    **HundredAcre5_Checks,
    **HundredAcre6_Checks,
    **DC_Checks,
    **TR_Checks,
    **AG_Checks,
    **AG2_Checks,
    **LoD_Checks,
    **LoD2_Checks,
    **SoraLevels,
    **Form_Checks,
    **GoA_Checks,
    **Keyblade_Slots,
    **Critical_Checks,
    **Donald_Checks,
    **Goofy_Checks,
}

location_table = {}


def setup_locations():
    totallocation_table = {**TWTNW_Checks, **TWTNW2_Checks, **TT_Checks, **TT2_Checks, **TT3_Checks, **STT_Checks,
                           **PL_Checks, **PL2_Checks, **CoR_Checks, **HB_Checks, **HB2_Checks,
                           **PR_Checks, **PR2_Checks, **PR_Checks, **PR2_Checks, **SP_Checks, **SP2_Checks, **BC_Checks,
                           **BC2_Checks, **HT_Checks, **HT2_Checks,
                           **Oc_Checks, **Oc2_Checks, **Oc2Cups, **Critical_Checks, **Donald_Checks, **Goofy_Checks,
                           **HundredAcre1_Checks, **HundredAcre2_Checks, **HundredAcre3_Checks, **HundredAcre4_Checks,
                           **HundredAcre5_Checks, **HundredAcre6_Checks,
                           **DC_Checks, **TR_Checks, **AG_Checks, **AG2_Checks, **LoD_Checks, **LoD2_Checks,
                           **SoraLevels,
                           **Form_Checks, **GoA_Checks, **Keyblade_Slots}
    return totallocation_table


lookup_id_to_Location: typing.Dict[int, str] = {data.code: item_name for item_name, data in location_table.items() if
                                                data.code}