import typing

from BaseClasses import Location
from worlds.AutoWorld import World
from .Names import LocationName

class SMWLocation(Location):
    game: str = "Super Mario World"

    def __init__(self, player: int, name: str = '', address: int = None, parent=None, prog_byte: int = None, prog_bit: int = None):
        super().__init__(player, name, address, parent)
        self.progress_byte = prog_byte
        self.progress_bit  = prog_bit


level_location_table = {
    LocationName.yoshis_island_1_exit_1:  0xBC0000,
    LocationName.yoshis_island_2_exit_1:  0xBC0001,
    LocationName.yoshis_island_3_exit_1:  0xBC0002,
    LocationName.yoshis_island_4_exit_1:  0xBC0003,
    LocationName.yoshis_island_castle:    0xBC0004,
    LocationName.yoshis_island_koopaling: 0xBC00A0,

    LocationName.yellow_switch_palace: 0xBC0005,

    LocationName.donut_plains_1_exit_1:     0xBC0006,
    LocationName.donut_plains_1_exit_2:     0xBC0007,
    LocationName.donut_plains_2_exit_1:     0xBC0008,
    LocationName.donut_plains_2_exit_2:     0xBC0009,
    LocationName.donut_plains_3_exit_1:     0xBC000A,
    LocationName.donut_plains_4_exit_1:     0xBC000B,
    LocationName.donut_secret_1_exit_1:     0xBC000C,
    LocationName.donut_secret_1_exit_2:     0xBC000D,
    LocationName.donut_secret_2_exit_1:     0xBC0063,
    LocationName.donut_ghost_house_exit_1:  0xBC000E,
    LocationName.donut_ghost_house_exit_2:  0xBC000F,
    LocationName.donut_secret_house_exit_1: 0xBC0010,
    LocationName.donut_secret_house_exit_2: 0xBC0011,
    LocationName.donut_plains_castle:       0xBC0012,
    LocationName.donut_plains_koopaling:    0xBC00A1,

    LocationName.green_switch_palace: 0xBC0013,

    LocationName.vanilla_dome_1_exit_1:      0xBC0014,
    LocationName.vanilla_dome_1_exit_2:      0xBC0015,
    LocationName.vanilla_dome_2_exit_1:      0xBC0016,
    LocationName.vanilla_dome_2_exit_2:      0xBC0017,
    LocationName.vanilla_dome_3_exit_1:      0xBC0018,
    LocationName.vanilla_dome_4_exit_1:      0xBC0019,
    LocationName.vanilla_secret_1_exit_1:    0xBC001A,
    LocationName.vanilla_secret_1_exit_2:    0xBC001B,
    LocationName.vanilla_secret_2_exit_1:    0xBC001C,
    LocationName.vanilla_secret_3_exit_1:    0xBC001D,
    LocationName.vanilla_ghost_house_exit_1: 0xBC001E,
    LocationName.vanilla_fortress:           0xBC0020,
    LocationName.vanilla_reznor:             0xBC00B0,
    LocationName.vanilla_dome_castle:        0xBC0021,
    LocationName.vanilla_dome_koopaling:     0xBC00A2,

    LocationName.red_switch_palace: 0xBC0022,

    LocationName.butter_bridge_1_exit_1: 0xBC0023,
    LocationName.butter_bridge_2_exit_1: 0xBC0024,
    LocationName.cheese_bridge_exit_1:   0xBC0025,
    LocationName.cheese_bridge_exit_2:   0xBC0026,
    LocationName.cookie_mountain_exit_1: 0xBC0027,
    LocationName.soda_lake_exit_1:       0xBC0028,
    LocationName.twin_bridges_castle:    0xBC0029,
    LocationName.twin_bridges_koopaling: 0xBC00A3,

    LocationName.forest_of_illusion_1_exit_1: 0xBC002A,
    LocationName.forest_of_illusion_1_exit_2: 0xBC002B,
    LocationName.forest_of_illusion_2_exit_1: 0xBC002C,
    LocationName.forest_of_illusion_2_exit_2: 0xBC002D,
    LocationName.forest_of_illusion_3_exit_1: 0xBC002E,
    LocationName.forest_of_illusion_3_exit_2: 0xBC002F,
    LocationName.forest_of_illusion_4_exit_1: 0xBC0030,
    LocationName.forest_of_illusion_4_exit_2: 0xBC0031,
    LocationName.forest_ghost_house_exit_1:   0xBC0032,
    LocationName.forest_ghost_house_exit_2:   0xBC0033,
    LocationName.forest_secret_exit_1:        0xBC0034,
    LocationName.forest_fortress:             0xBC0035,
    LocationName.forest_reznor:               0xBC00B1,
    LocationName.forest_castle:               0xBC0036,
    LocationName.forest_koopaling:            0xBC00A4,

    LocationName.blue_switch_palace:      0xBC0037,

    LocationName.chocolate_island_1_exit_1:    0xBC0038,
    LocationName.chocolate_island_2_exit_1:    0xBC0039,
    LocationName.chocolate_island_2_exit_2:    0xBC003A,
    LocationName.chocolate_island_3_exit_1:    0xBC003B,
    LocationName.chocolate_island_3_exit_2:    0xBC003C,
    LocationName.chocolate_island_4_exit_1:    0xBC003D,
    LocationName.chocolate_island_5_exit_1:    0xBC003E,
    LocationName.chocolate_ghost_house_exit_1: 0xBC003F,
    LocationName.chocolate_secret_exit_1:      0xBC0041,
    LocationName.chocolate_fortress:           0xBC0042,
    LocationName.chocolate_reznor:             0xBC00B2,
    LocationName.chocolate_castle:             0xBC0043,
    LocationName.chocolate_koopaling:          0xBC00A5,

    LocationName.sunken_ghost_ship:    0xBC0044,

    LocationName.valley_of_bowser_1_exit_1: 0xBC0045,
    LocationName.valley_of_bowser_2_exit_1: 0xBC0046,
    LocationName.valley_of_bowser_2_exit_2: 0xBC0047,
    LocationName.valley_of_bowser_3_exit_1: 0xBC0048,
    LocationName.valley_of_bowser_4_exit_1: 0xBC0049,
    LocationName.valley_of_bowser_4_exit_2: 0xBC004A,
    LocationName.valley_ghost_house_exit_1: 0xBC004B,
    LocationName.valley_ghost_house_exit_2: 0xBC004C,
    LocationName.valley_fortress:           0xBC004E,
    LocationName.valley_reznor:             0xBC00B3,
    LocationName.valley_castle:             0xBC004F,
    LocationName.valley_koopaling:          0xBC00A6,

    LocationName.star_road_1_exit_1: 0xBC0051,
    LocationName.star_road_1_exit_2: 0xBC0052,
    LocationName.star_road_2_exit_1: 0xBC0053,
    LocationName.star_road_2_exit_2: 0xBC0054,
    LocationName.star_road_3_exit_1: 0xBC0055,
    LocationName.star_road_3_exit_2: 0xBC0056,
    LocationName.star_road_4_exit_1: 0xBC0057,
    LocationName.star_road_4_exit_2: 0xBC0058,
    LocationName.star_road_5_exit_1: 0xBC0059,
    LocationName.star_road_5_exit_2: 0xBC005A,

    LocationName.special_zone_1_exit_1: 0xBC005B,
    LocationName.special_zone_2_exit_1: 0xBC005C,
    LocationName.special_zone_3_exit_1: 0xBC005D,
    LocationName.special_zone_4_exit_1: 0xBC005E,
    LocationName.special_zone_5_exit_1: 0xBC005F,
    LocationName.special_zone_6_exit_1: 0xBC0060,
    LocationName.special_zone_7_exit_1: 0xBC0061,
    LocationName.special_zone_8_exit_1: 0xBC0062,
}

dragon_coin_location_table = {
    LocationName.yoshis_island_1_dragon: 0xBC0100,
    LocationName.yoshis_island_2_dragon: 0xBC0101,
    LocationName.yoshis_island_3_dragon: 0xBC0102,
    LocationName.yoshis_island_4_dragon: 0xBC0103,

    LocationName.donut_plains_1_dragon: 0xBC0106,
    LocationName.donut_plains_2_dragon: 0xBC0108,
    LocationName.donut_plains_3_dragon: 0xBC010A,
    LocationName.donut_plains_4_dragon: 0xBC010B,
    LocationName.donut_secret_1_dragon: 0xBC010C,
    LocationName.donut_secret_2_dragon: 0xBC010D,

    LocationName.vanilla_dome_1_dragon:      0xBC0114,
    LocationName.vanilla_dome_2_dragon:      0xBC0116,
    LocationName.vanilla_dome_3_dragon:      0xBC0118,
    LocationName.vanilla_dome_4_dragon:      0xBC0119,
    LocationName.vanilla_secret_1_dragon:    0xBC011A,
    LocationName.vanilla_secret_2_dragon:    0xBC011C,
    LocationName.vanilla_secret_3_dragon:    0xBC011D,
    LocationName.vanilla_ghost_house_dragon: 0xBC011E,

    LocationName.butter_bridge_1_dragon: 0xBC0123,
    LocationName.butter_bridge_2_dragon: 0xBC0124,
    LocationName.cheese_bridge_dragon:   0xBC0125,
    LocationName.cookie_mountain_dragon: 0xBC0127,
    LocationName.soda_lake_dragon:       0xBC0128,

    LocationName.forest_of_illusion_2_dragon: 0xBC012C,
    LocationName.forest_of_illusion_3_dragon: 0xBC012E,
    LocationName.forest_of_illusion_4_dragon: 0xBC0130,
    LocationName.forest_ghost_house_dragon:   0xBC0132,
    LocationName.forest_secret_dragon:        0xBC0134,
    LocationName.forest_castle_dragon:        0xBC0136,

    LocationName.chocolate_island_1_dragon:    0xBC0138,
    LocationName.chocolate_island_2_dragon:    0xBC0139,
    LocationName.chocolate_island_3_dragon:    0xBC013B,
    LocationName.chocolate_island_4_dragon:    0xBC013D,
    LocationName.chocolate_island_5_dragon:    0xBC013E,

    LocationName.sunken_ghost_ship_dragon: 0xBC0144,

    LocationName.valley_of_bowser_1_dragon: 0xBC0145,
    LocationName.valley_of_bowser_2_dragon: 0xBC0146,
    LocationName.valley_of_bowser_3_dragon: 0xBC0148,
    LocationName.valley_ghost_house_dragon: 0xBC014B,
    LocationName.valley_castle_dragon:      0xBC014F,

    LocationName.star_road_1_dragon: 0xBC0151,

    LocationName.special_zone_1_dragon: 0xBC015B,
    LocationName.special_zone_2_dragon: 0xBC015C,
    LocationName.special_zone_3_dragon: 0xBC015D,
    LocationName.special_zone_4_dragon: 0xBC015E,
    LocationName.special_zone_5_dragon: 0xBC015F,
    LocationName.special_zone_6_dragon: 0xBC0160,
    LocationName.special_zone_7_dragon: 0xBC0161,
    LocationName.special_zone_8_dragon: 0xBC0162,
}

moon_location_table = {
    LocationName.yoshis_island_1_moon:    0xBC0300,
    LocationName.donut_plains_4_moon:     0xBC030B,
    LocationName.vanilla_dome_3_moon:     0xBC0318,
    LocationName.cheese_bridge_moon:      0xBC0325,
    LocationName.forest_ghost_house_moon: 0xBC0332,
    LocationName.chocolate_island_1_moon: 0xBC0338,
    LocationName.valley_of_bowser_1_moon: 0xBC0345
}

hidden_1ups_location_table = {
    LocationName.yoshis_island_4_hidden_1up:      0xBC0403,
    LocationName.donut_plains_1_hidden_1up:       0xBC0406,
    LocationName.donut_plains_4_hidden_1up:       0xBC040B,
    LocationName.donut_plains_castle_hidden_1up:  0xBC0412,
    LocationName.vanilla_dome_4_hidden_1up:       0xBC0419,
    LocationName.vanilla_ghost_house_hidden_1up:  0xBC041E,
    LocationName.vanilla_fortress_hidden_1up:     0xBC0420,
    LocationName.cookie_mountain_hidden_1up:      0xBC0427,
    LocationName.forest_of_illusion_3_hidden_1up: 0xBC042E,
    LocationName.chocolate_island_2_hidden_1up:    0xBC0439,
    LocationName.chocolate_castle_hidden_1up:     0xBC0443,
    LocationName.valley_of_bowser_2_hidden_1up:   0xBC0446,
    LocationName.valley_castle_hidden_1up:        0xBC044F,
    LocationName.special_zone_1_hidden_1up:       0xBC045B
}
bonus_block_location_table = {
    LocationName.yoshis_island_3_bonus_block:    0xBC0502,
    LocationName.donut_plains_3_bonus_block:     0xBC050A,
    LocationName.butter_bridge_1_bonus_block:    0xBC0523,
    LocationName.chocolate_island_3_bonus_block: 0xBC053B
}

blocksanity_location_table = {
    LocationName.vanilla_secret_2_yoshi_block_1: 0xBC0600,
    LocationName.vanilla_secret_2_green_block_1: 0xBC0601,
    LocationName.vanilla_secret_2_powerup_block_1: 0xBC0602,
    LocationName.vanilla_secret_2_powerup_block_2: 0xBC0603,
    LocationName.vanilla_secret_2_multi_coin_block_1: 0xBC0604,
    LocationName.vanilla_secret_2_gray_pow_block_1: 0xBC0605,
    LocationName.vanilla_secret_2_coin_block_1: 0xBC0606,
    LocationName.vanilla_secret_2_coin_block_2: 0xBC0607,
    LocationName.vanilla_secret_2_coin_block_3: 0xBC0608,
    LocationName.vanilla_secret_2_coin_block_4: 0xBC0609,
    LocationName.vanilla_secret_2_coin_block_5: 0xBC060A,
    LocationName.vanilla_secret_2_coin_block_6: 0xBC060B,
    LocationName.vanilla_secret_3_powerup_block_1: 0xBC060C,
    LocationName.vanilla_secret_3_powerup_block_2: 0xBC060D,
    LocationName.donut_ghost_house_vine_block_1: 0xBC060E,
    LocationName.donut_ghost_house_directional_coin_block_1: 0xBC060F,
    LocationName.donut_ghost_house_life_block_1: 0xBC0610,
    LocationName.donut_ghost_house_life_block_2: 0xBC0611,
    LocationName.donut_ghost_house_life_block_3: 0xBC0612,
    LocationName.donut_ghost_house_life_block_4: 0xBC0613,
    LocationName.donut_plains_3_green_block_1: 0xBC0614,
    LocationName.donut_plains_3_coin_block_1: 0xBC0615,
    LocationName.donut_plains_3_coin_block_2: 0xBC0616,
    LocationName.donut_plains_3_vine_block_1: 0xBC0617,
    LocationName.donut_plains_3_powerup_block_1: 0xBC0618,
    LocationName.donut_plains_3_bonus_block_1: 0xBC0619,
    LocationName.donut_plains_4_coin_block_1: 0xBC061A,
    LocationName.donut_plains_4_powerup_block_1: 0xBC061B,
    LocationName.donut_plains_4_coin_block_2: 0xBC061C,
    LocationName.donut_plains_4_yoshi_block_1: 0xBC061D,
    LocationName.donut_plains_castle_yellow_block_1: 0xBC061E,
    LocationName.donut_plains_castle_coin_block_1: 0xBC061F,
    LocationName.donut_plains_castle_powerup_block_1: 0xBC0620,
    LocationName.donut_plains_castle_coin_block_2: 0xBC0621,
    LocationName.donut_plains_castle_vine_block_1: 0xBC0622,
    LocationName.donut_plains_castle_invis_life_block_1: 0xBC0623,
    LocationName.donut_plains_castle_coin_block_3: 0xBC0624,
    LocationName.donut_plains_castle_coin_block_4: 0xBC0625,
    LocationName.donut_plains_castle_coin_block_5: 0xBC0626,
    LocationName.donut_plains_castle_green_block_1: 0xBC0627,
    LocationName.donut_plains_2_coin_block_1: 0xBC0628,
    LocationName.donut_plains_2_coin_block_2: 0xBC0629,
    LocationName.donut_plains_2_coin_block_3: 0xBC062A,
    LocationName.donut_plains_2_yellow_block_1: 0xBC062B,
    LocationName.donut_plains_2_powerup_block_1: 0xBC062C,
    LocationName.donut_plains_2_multi_coin_block_1: 0xBC062D,
    LocationName.donut_plains_2_flying_block_1: 0xBC062E,
    LocationName.donut_plains_2_green_block_1: 0xBC062F,
    LocationName.donut_plains_2_yellow_block_2: 0xBC0630,
    LocationName.donut_plains_2_vine_block_1: 0xBC0631,
    LocationName.donut_secret_1_coin_block_1: 0xBC0632,
    LocationName.donut_secret_1_coin_block_2: 0xBC0633,
    LocationName.donut_secret_1_powerup_block_1: 0xBC0634,
    LocationName.donut_secret_1_coin_block_3: 0xBC0635,
    LocationName.donut_secret_1_powerup_block_2: 0xBC0636,
    LocationName.donut_secret_1_powerup_block_3: 0xBC0637,
    LocationName.donut_secret_1_life_block_1: 0xBC0638,
    LocationName.donut_secret_1_powerup_block_4: 0xBC0639,
    LocationName.donut_secret_1_powerup_block_5: 0xBC063A,
    LocationName.donut_secret_1_key_block_1: 0xBC063B,
    LocationName.vanilla_fortress_powerup_block_1: 0xBC063C,
    LocationName.vanilla_fortress_powerup_block_2: 0xBC063D,
    LocationName.vanilla_fortress_yellow_block_1: 0xBC063E,
    LocationName.butter_bridge_1_powerup_block_1: 0xBC063F,
    LocationName.butter_bridge_1_multi_coin_block_1: 0xBC0640,
    LocationName.butter_bridge_1_multi_coin_block_2: 0xBC0641,
    LocationName.butter_bridge_1_multi_coin_block_3: 0xBC0642,
    LocationName.butter_bridge_1_life_block_1: 0xBC0643,
    LocationName.butter_bridge_1_bonus_block_1: 0xBC0644,
    LocationName.butter_bridge_2_powerup_block_1: 0xBC0645,
    LocationName.butter_bridge_2_green_block_1: 0xBC0646,
    LocationName.butter_bridge_2_yoshi_block_1: 0xBC0647,
    LocationName.twin_bridges_castle_powerup_block_1: 0xBC0648,
    LocationName.cheese_bridge_powerup_block_1: 0xBC0649,
    LocationName.cheese_bridge_powerup_block_2: 0xBC064A,
    LocationName.cheese_bridge_wings_block_1: 0xBC064B,
    LocationName.cheese_bridge_powerup_block_3: 0xBC064C,
    LocationName.cookie_mountain_coin_block_1: 0xBC064D,
    LocationName.cookie_mountain_coin_block_2: 0xBC064E,
    LocationName.cookie_mountain_coin_block_3: 0xBC064F,
    LocationName.cookie_mountain_coin_block_4: 0xBC0650,
    LocationName.cookie_mountain_coin_block_5: 0xBC0651,
    LocationName.cookie_mountain_coin_block_6: 0xBC0652,
    LocationName.cookie_mountain_coin_block_7: 0xBC0653,
    LocationName.cookie_mountain_coin_block_8: 0xBC0654,
    LocationName.cookie_mountain_coin_block_9: 0xBC0655,
    LocationName.cookie_mountain_powerup_block_1: 0xBC0656,
    LocationName.cookie_mountain_life_block_1: 0xBC0657,
    LocationName.cookie_mountain_vine_block_1: 0xBC0658,
    LocationName.cookie_mountain_yoshi_block_1: 0xBC0659,
    LocationName.cookie_mountain_coin_block_10: 0xBC065A,
    LocationName.cookie_mountain_coin_block_11: 0xBC065B,
    LocationName.cookie_mountain_powerup_block_2: 0xBC065C,
    LocationName.cookie_mountain_coin_block_12: 0xBC065D,
    LocationName.cookie_mountain_coin_block_13: 0xBC065E,
    LocationName.cookie_mountain_coin_block_14: 0xBC065F,
    LocationName.cookie_mountain_coin_block_15: 0xBC0660,
    LocationName.cookie_mountain_coin_block_16: 0xBC0661,
    LocationName.cookie_mountain_coin_block_17: 0xBC0662,
    LocationName.cookie_mountain_coin_block_18: 0xBC0663,
    LocationName.cookie_mountain_coin_block_19: 0xBC0664,
    LocationName.cookie_mountain_coin_block_20: 0xBC0665,
    LocationName.cookie_mountain_coin_block_21: 0xBC0666,
    LocationName.cookie_mountain_coin_block_22: 0xBC0667,
    LocationName.cookie_mountain_coin_block_23: 0xBC0668,
    LocationName.cookie_mountain_coin_block_24: 0xBC0669,
    LocationName.cookie_mountain_coin_block_25: 0xBC066A,
    LocationName.cookie_mountain_coin_block_26: 0xBC066B,
    LocationName.cookie_mountain_coin_block_27: 0xBC066C,
    LocationName.cookie_mountain_coin_block_28: 0xBC066D,
    LocationName.cookie_mountain_coin_block_29: 0xBC066E,
    LocationName.cookie_mountain_coin_block_30: 0xBC066F,
    LocationName.soda_lake_powerup_block_1: 0xBC0670,
    LocationName.donut_secret_house_powerup_block_1: 0xBC0671,
    LocationName.donut_secret_house_multi_coin_block_1: 0xBC0672,
    LocationName.donut_secret_house_life_block_1: 0xBC0673,
    LocationName.donut_secret_house_vine_block_1: 0xBC0674,
    LocationName.donut_secret_house_directional_coin_block_1: 0xBC0675,
    LocationName.donut_plains_1_coin_block_1: 0xBC0676,
    LocationName.donut_plains_1_coin_block_2: 0xBC0677,
    LocationName.donut_plains_1_yoshi_block_1: 0xBC0678,
    LocationName.donut_plains_1_vine_block_1: 0xBC0679,
    LocationName.donut_plains_1_green_block_1: 0xBC067A,
    LocationName.donut_plains_1_green_block_2: 0xBC067B,
    LocationName.donut_plains_1_green_block_3: 0xBC067C,
    LocationName.donut_plains_1_green_block_4: 0xBC067D,
    LocationName.donut_plains_1_green_block_5: 0xBC067E,
    LocationName.donut_plains_1_green_block_6: 0xBC067F,
    LocationName.donut_plains_1_green_block_7: 0xBC0680,
    LocationName.donut_plains_1_green_block_8: 0xBC0681,
    LocationName.donut_plains_1_green_block_9: 0xBC0682,
    LocationName.donut_plains_1_green_block_10: 0xBC0683,
    LocationName.donut_plains_1_green_block_11: 0xBC0684,
    LocationName.donut_plains_1_green_block_12: 0xBC0685,
    LocationName.donut_plains_1_green_block_13: 0xBC0686,
    LocationName.donut_plains_1_green_block_14: 0xBC0687,
    LocationName.donut_plains_1_green_block_15: 0xBC0688,
    LocationName.donut_plains_1_green_block_16: 0xBC0689,
    LocationName.donut_plains_1_yellow_block_1: 0xBC068A,
    LocationName.donut_plains_1_yellow_block_2: 0xBC068B,
    LocationName.donut_plains_1_yellow_block_3: 0xBC068C,
    LocationName.sunken_ghost_ship_powerup_block_1: 0xBC068D,
    LocationName.sunken_ghost_ship_star_block_1: 0xBC068E,
    LocationName.chocolate_castle_yellow_block_1: 0xBC068F,
    LocationName.chocolate_castle_yellow_block_2: 0xBC0690,
    LocationName.chocolate_castle_green_block_1: 0xBC0691,
    LocationName.chocolate_fortress_powerup_block_1: 0xBC0692,
    LocationName.chocolate_fortress_powerup_block_2: 0xBC0693,
    LocationName.chocolate_fortress_coin_block_1: 0xBC0694,
    LocationName.chocolate_fortress_coin_block_2: 0xBC0695,
    LocationName.chocolate_fortress_green_block_1: 0xBC0696,
    LocationName.chocolate_island_5_yoshi_block_1: 0xBC0697,
    LocationName.chocolate_island_5_powerup_block_1: 0xBC0698,
    LocationName.chocolate_island_5_life_block_1: 0xBC0699,
    LocationName.chocolate_island_5_yellow_block_1: 0xBC069A,
    LocationName.chocolate_island_4_yellow_block_1: 0xBC069B,
    LocationName.chocolate_island_4_blue_pow_block_1: 0xBC069C,
    LocationName.chocolate_island_4_powerup_block_1: 0xBC069D,
    LocationName.forest_fortress_yellow_block_1: 0xBC069E,
    LocationName.forest_fortress_powerup_block_1: 0xBC069F,
    LocationName.forest_fortress_life_block_1: 0xBC06A0,
    LocationName.forest_fortress_life_block_2: 0xBC06A1,
    LocationName.forest_fortress_life_block_3: 0xBC06A2,
    LocationName.forest_fortress_life_block_4: 0xBC06A3,
    LocationName.forest_fortress_life_block_5: 0xBC06A4,
    LocationName.forest_fortress_life_block_6: 0xBC06A5,
    LocationName.forest_fortress_life_block_7: 0xBC06A6,
    LocationName.forest_fortress_life_block_8: 0xBC06A7,
    LocationName.forest_fortress_life_block_9: 0xBC06A8,
    LocationName.forest_castle_green_block_1: 0xBC06A9,
    LocationName.chocolate_ghost_house_powerup_block_1: 0xBC06AA,
    LocationName.chocolate_ghost_house_powerup_block_2: 0xBC06AB,
    LocationName.chocolate_ghost_house_life_block_1: 0xBC06AC,
    LocationName.chocolate_island_1_flying_block_1: 0xBC06AD,
    LocationName.chocolate_island_1_flying_block_2: 0xBC06AE,
    LocationName.chocolate_island_1_yoshi_block_1: 0xBC06AF,
    LocationName.chocolate_island_1_green_block_1: 0xBC06B0,
    LocationName.chocolate_island_1_life_block_1: 0xBC06B1,
    LocationName.chocolate_island_3_powerup_block_1: 0xBC06B2,
    LocationName.chocolate_island_3_powerup_block_2: 0xBC06B3,
    LocationName.chocolate_island_3_powerup_block_3: 0xBC06B4,
    LocationName.chocolate_island_3_green_block_1: 0xBC06B5,
    LocationName.chocolate_island_3_bonus_block_1: 0xBC06B6,
    LocationName.chocolate_island_3_vine_block_1: 0xBC06B7,
    LocationName.chocolate_island_3_life_block_1: 0xBC06B8,
    LocationName.chocolate_island_3_life_block_2: 0xBC06B9,
    LocationName.chocolate_island_3_life_block_3: 0xBC06BA,
    LocationName.chocolate_island_2_multi_coin_block_1: 0xBC06BB,
    LocationName.chocolate_island_2_invis_coin_block_1: 0xBC06BC,
    LocationName.chocolate_island_2_yoshi_block_1: 0xBC06BD,
    LocationName.chocolate_island_2_coin_block_1: 0xBC06BE,
    LocationName.chocolate_island_2_coin_block_2: 0xBC06BF,
    LocationName.chocolate_island_2_multi_coin_block_2: 0xBC06C0,
    LocationName.chocolate_island_2_powerup_block_1: 0xBC06C1,
    LocationName.chocolate_island_2_blue_pow_block_1: 0xBC06C2,
    LocationName.chocolate_island_2_yellow_block_1: 0xBC06C3,
    LocationName.chocolate_island_2_yellow_block_2: 0xBC06C4,
    LocationName.chocolate_island_2_green_block_1: 0xBC06C5,
    LocationName.chocolate_island_2_green_block_2: 0xBC06C6,
    LocationName.chocolate_island_2_green_block_3: 0xBC06C7,
    LocationName.chocolate_island_2_green_block_4: 0xBC06C8,
    LocationName.chocolate_island_2_green_block_5: 0xBC06C9,
    LocationName.chocolate_island_2_green_block_6: 0xBC06CA,
    LocationName.yoshis_island_castle_coin_block_1: 0xBC06CB,
    LocationName.yoshis_island_castle_coin_block_2: 0xBC06CC,
    LocationName.yoshis_island_castle_powerup_block_1: 0xBC06CD,
    LocationName.yoshis_island_castle_coin_block_3: 0xBC06CE,
    LocationName.yoshis_island_castle_coin_block_4: 0xBC06CF,
    LocationName.yoshis_island_castle_flying_block_1: 0xBC06D0,
    LocationName.yoshis_island_4_yellow_block_1: 0xBC06D1,
    LocationName.yoshis_island_4_powerup_block_1: 0xBC06D2,
    LocationName.yoshis_island_4_multi_coin_block_1: 0xBC06D3,
    LocationName.yoshis_island_4_star_block_1: 0xBC06D4,
    LocationName.yoshis_island_3_yellow_block_1: 0xBC06D5,
    LocationName.yoshis_island_3_yellow_block_2: 0xBC06D6,
    LocationName.yoshis_island_3_yellow_block_3: 0xBC06D7,
    LocationName.yoshis_island_3_yellow_block_4: 0xBC06D8,
    LocationName.yoshis_island_3_yellow_block_5: 0xBC06D9,
    LocationName.yoshis_island_3_yellow_block_6: 0xBC06DA,
    LocationName.yoshis_island_3_yellow_block_7: 0xBC06DB,
    LocationName.yoshis_island_3_yellow_block_8: 0xBC06DC,
    LocationName.yoshis_island_3_yellow_block_9: 0xBC06DD,
    LocationName.yoshis_island_3_coin_block_1: 0xBC06DE,
    LocationName.yoshis_island_3_yoshi_block_1: 0xBC06DF,
    LocationName.yoshis_island_3_coin_block_2: 0xBC06E0,
    LocationName.yoshis_island_3_powerup_block_1: 0xBC06E1,
    LocationName.yoshis_island_3_yellow_block_10: 0xBC06E2,
    LocationName.yoshis_island_3_yellow_block_11: 0xBC06E3,
    LocationName.yoshis_island_3_yellow_block_12: 0xBC06E4,
    LocationName.yoshis_island_3_bonus_block_1: 0xBC06E5,
    LocationName.yoshis_island_1_flying_block_1: 0xBC06E6,
    LocationName.yoshis_island_1_yellow_block_1: 0xBC06E7,
    LocationName.yoshis_island_1_life_block_1: 0xBC06E8,
    LocationName.yoshis_island_1_powerup_block_1: 0xBC06E9,
    LocationName.yoshis_island_2_flying_block_1: 0xBC06EA,
    LocationName.yoshis_island_2_flying_block_2: 0xBC06EB,
    LocationName.yoshis_island_2_flying_block_3: 0xBC06EC,
    LocationName.yoshis_island_2_flying_block_4: 0xBC06ED,
    LocationName.yoshis_island_2_flying_block_5: 0xBC06EE,
    LocationName.yoshis_island_2_flying_block_6: 0xBC06EF,
    LocationName.yoshis_island_2_coin_block_1: 0xBC06F0,
    LocationName.yoshis_island_2_yellow_block_1: 0xBC06F1,
    LocationName.yoshis_island_2_coin_block_2: 0xBC06F2,
    LocationName.yoshis_island_2_coin_block_3: 0xBC06F3,
    LocationName.yoshis_island_2_yoshi_block_1: 0xBC06F4,
    LocationName.yoshis_island_2_coin_block_4: 0xBC06F5,
    LocationName.yoshis_island_2_yoshi_block_2: 0xBC06F6,
    LocationName.yoshis_island_2_coin_block_5: 0xBC06F7,
    LocationName.yoshis_island_2_vine_block_1: 0xBC06F8,
    LocationName.yoshis_island_2_yellow_block_2: 0xBC06F9,
    LocationName.vanilla_ghost_house_powerup_block_1: 0xBC06FA,
    LocationName.vanilla_ghost_house_vine_block_1: 0xBC06FB,
    LocationName.vanilla_ghost_house_powerup_block_2: 0xBC06FC,
    LocationName.vanilla_ghost_house_multi_coin_block_1: 0xBC06FD,
    LocationName.vanilla_ghost_house_blue_pow_block_1: 0xBC06FE,
    LocationName.vanilla_secret_1_coin_block_1: 0xBC06FF,
    LocationName.vanilla_secret_1_powerup_block_1: 0xBC0700,
    LocationName.vanilla_secret_1_multi_coin_block_1: 0xBC0701,
    LocationName.vanilla_secret_1_vine_block_1: 0xBC0702,
    LocationName.vanilla_secret_1_vine_block_2: 0xBC0703,
    LocationName.vanilla_secret_1_coin_block_2: 0xBC0704,
    LocationName.vanilla_secret_1_coin_block_3: 0xBC0705,
    LocationName.vanilla_secret_1_powerup_block_2: 0xBC0706,
    LocationName.vanilla_dome_3_coin_block_1: 0xBC0707,
    LocationName.vanilla_dome_3_flying_block_1: 0xBC0708,
    LocationName.vanilla_dome_3_flying_block_2: 0xBC0709,
    LocationName.vanilla_dome_3_powerup_block_1: 0xBC070A,
    LocationName.vanilla_dome_3_flying_block_3: 0xBC070B,
    LocationName.vanilla_dome_3_invis_coin_block_1: 0xBC070C,
    LocationName.vanilla_dome_3_powerup_block_2: 0xBC070D,
    LocationName.vanilla_dome_3_multi_coin_block_1: 0xBC070E,
    LocationName.vanilla_dome_3_powerup_block_3: 0xBC070F,
    LocationName.vanilla_dome_3_yoshi_block_1: 0xBC0710,
    LocationName.vanilla_dome_3_powerup_block_4: 0xBC0711,
    LocationName.vanilla_dome_3_pswitch_coin_block_1: 0xBC0712,
    LocationName.vanilla_dome_3_pswitch_coin_block_2: 0xBC0713,
    LocationName.vanilla_dome_3_pswitch_coin_block_3: 0xBC0714,
    LocationName.vanilla_dome_3_pswitch_coin_block_4: 0xBC0715,
    LocationName.vanilla_dome_3_pswitch_coin_block_5: 0xBC0716,
    LocationName.vanilla_dome_3_pswitch_coin_block_6: 0xBC0717,
    LocationName.donut_secret_2_directional_coin_block_1: 0xBC0718,
    LocationName.donut_secret_2_vine_block_1: 0xBC0719,
    LocationName.donut_secret_2_star_block_1: 0xBC071A,
    LocationName.donut_secret_2_powerup_block_1: 0xBC071B,
    LocationName.donut_secret_2_star_block_2: 0xBC071C,
    LocationName.valley_of_bowser_4_yellow_block_1: 0xBC071D,
    LocationName.valley_of_bowser_4_powerup_block_1: 0xBC071E,
    LocationName.valley_of_bowser_4_vine_block_1: 0xBC071F,
    LocationName.valley_of_bowser_4_yoshi_block_1: 0xBC0720,
    LocationName.valley_of_bowser_4_life_block_1: 0xBC0721,
    LocationName.valley_of_bowser_4_powerup_block_2: 0xBC0722,
    LocationName.valley_castle_yellow_block_1: 0xBC0723,
    LocationName.valley_castle_yellow_block_2: 0xBC0724,
    LocationName.valley_castle_green_block_1: 0xBC0725,
    LocationName.valley_fortress_green_block_1: 0xBC0726,
    LocationName.valley_fortress_yellow_block_1: 0xBC0727,
    LocationName.valley_of_bowser_3_powerup_block_1: 0xBC0728,
    LocationName.valley_of_bowser_3_powerup_block_2: 0xBC0729,
    LocationName.valley_ghost_house_pswitch_coin_block_1: 0xBC072A,
    LocationName.valley_ghost_house_multi_coin_block_1: 0xBC072B,
    LocationName.valley_ghost_house_powerup_block_1: 0xBC072C,
    LocationName.valley_ghost_house_directional_coin_block_1: 0xBC072D,
    LocationName.valley_of_bowser_2_powerup_block_1: 0xBC072E,
    LocationName.valley_of_bowser_2_yellow_block_1: 0xBC072F,
    LocationName.valley_of_bowser_2_powerup_block_2: 0xBC0730,
    LocationName.valley_of_bowser_2_wings_block_1: 0xBC0731,
    LocationName.valley_of_bowser_1_green_block_1: 0xBC0732,
    LocationName.valley_of_bowser_1_invis_coin_block_1: 0xBC0733,
    LocationName.valley_of_bowser_1_invis_coin_block_2: 0xBC0734,
    LocationName.valley_of_bowser_1_invis_coin_block_3: 0xBC0735,
    LocationName.valley_of_bowser_1_yellow_block_1: 0xBC0736,
    LocationName.valley_of_bowser_1_yellow_block_2: 0xBC0737,
    LocationName.valley_of_bowser_1_yellow_block_3: 0xBC0738,
    LocationName.valley_of_bowser_1_yellow_block_4: 0xBC0739,
    LocationName.valley_of_bowser_1_vine_block_1: 0xBC073A,
    LocationName.chocolate_secret_powerup_block_1: 0xBC073B,
    LocationName.chocolate_secret_powerup_block_2: 0xBC073C,
    LocationName.vanilla_dome_2_coin_block_1: 0xBC073D,
    LocationName.vanilla_dome_2_powerup_block_1: 0xBC073E,
    LocationName.vanilla_dome_2_coin_block_2: 0xBC073F,
    LocationName.vanilla_dome_2_coin_block_3: 0xBC0740,
    LocationName.vanilla_dome_2_vine_block_1: 0xBC0741,
    LocationName.vanilla_dome_2_invis_life_block_1: 0xBC0742,
    LocationName.vanilla_dome_2_coin_block_4: 0xBC0743,
    LocationName.vanilla_dome_2_coin_block_5: 0xBC0744,
    LocationName.vanilla_dome_2_powerup_block_2: 0xBC0745,
    LocationName.vanilla_dome_2_powerup_block_3: 0xBC0746,
    LocationName.vanilla_dome_2_powerup_block_4: 0xBC0747,
    LocationName.vanilla_dome_2_powerup_block_5: 0xBC0748,
    LocationName.vanilla_dome_2_multi_coin_block_1: 0xBC0749,
    LocationName.vanilla_dome_2_multi_coin_block_2: 0xBC074A,
    LocationName.vanilla_dome_4_powerup_block_1: 0xBC074B,
    LocationName.vanilla_dome_4_powerup_block_2: 0xBC074C,
    LocationName.vanilla_dome_4_coin_block_1: 0xBC074D,
    LocationName.vanilla_dome_4_coin_block_2: 0xBC074E,
    LocationName.vanilla_dome_4_coin_block_3: 0xBC074F,
    LocationName.vanilla_dome_4_life_block_1: 0xBC0750,
    LocationName.vanilla_dome_4_coin_block_4: 0xBC0751,
    LocationName.vanilla_dome_4_coin_block_5: 0xBC0752,
    LocationName.vanilla_dome_4_coin_block_6: 0xBC0753,
    LocationName.vanilla_dome_4_coin_block_7: 0xBC0754,
    LocationName.vanilla_dome_4_coin_block_8: 0xBC0755,
    LocationName.vanilla_dome_1_flying_block_1: 0xBC0756,
    LocationName.vanilla_dome_1_powerup_block_1: 0xBC0757,
    LocationName.vanilla_dome_1_powerup_block_2: 0xBC0758,
    LocationName.vanilla_dome_1_coin_block_1: 0xBC0759,
    LocationName.vanilla_dome_1_life_block_1: 0xBC075A,
    LocationName.vanilla_dome_1_powerup_block_3: 0xBC075B,
    LocationName.vanilla_dome_1_vine_block_1: 0xBC075C,
    LocationName.vanilla_dome_1_star_block_1: 0xBC075D,
    LocationName.vanilla_dome_1_powerup_block_4: 0xBC075E,
    LocationName.vanilla_dome_1_coin_block_2: 0xBC075F,
    LocationName.vanilla_dome_castle_life_block_1: 0xBC0760,
    LocationName.vanilla_dome_castle_life_block_2: 0xBC0761,
    LocationName.vanilla_dome_castle_powerup_block_1: 0xBC0762,
    LocationName.vanilla_dome_castle_life_block_3: 0xBC0763,
    LocationName.vanilla_dome_castle_green_block_1: 0xBC0764,
    LocationName.forest_ghost_house_coin_block_1: 0xBC0765,
    LocationName.forest_ghost_house_powerup_block_1: 0xBC0766,
    LocationName.forest_ghost_house_flying_block_1: 0xBC0767,
    LocationName.forest_ghost_house_powerup_block_2: 0xBC0768,
    LocationName.forest_ghost_house_life_block_1: 0xBC0769,
    LocationName.forest_of_illusion_1_powerup_block_1: 0xBC076A,
    LocationName.forest_of_illusion_1_yoshi_block_1: 0xBC076B,
    LocationName.forest_of_illusion_1_powerup_block_2: 0xBC076C,
    LocationName.forest_of_illusion_1_key_block_1: 0xBC076D,
    LocationName.forest_of_illusion_1_life_block_1: 0xBC076E,
    LocationName.forest_of_illusion_4_multi_coin_block_1: 0xBC076F,
    LocationName.forest_of_illusion_4_coin_block_1: 0xBC0770,
    LocationName.forest_of_illusion_4_coin_block_2: 0xBC0771,
    LocationName.forest_of_illusion_4_coin_block_3: 0xBC0772,
    LocationName.forest_of_illusion_4_coin_block_4: 0xBC0773,
    LocationName.forest_of_illusion_4_powerup_block_1: 0xBC0774,
    LocationName.forest_of_illusion_4_coin_block_5: 0xBC0775,
    LocationName.forest_of_illusion_4_coin_block_6: 0xBC0776,
    LocationName.forest_of_illusion_4_coin_block_7: 0xBC0777,
    LocationName.forest_of_illusion_4_powerup_block_2: 0xBC0778,
    LocationName.forest_of_illusion_4_coin_block_8: 0xBC0779,
    LocationName.forest_of_illusion_4_coin_block_9: 0xBC077A,
    LocationName.forest_of_illusion_4_coin_block_10: 0xBC077B,
    LocationName.forest_of_illusion_2_green_block_1: 0xBC077C,
    LocationName.forest_of_illusion_2_powerup_block_1: 0xBC077D,
    LocationName.forest_of_illusion_2_invis_coin_block_1: 0xBC077E,
    LocationName.forest_of_illusion_2_invis_coin_block_2: 0xBC077F,
    LocationName.forest_of_illusion_2_invis_life_block_1: 0xBC0780,
    LocationName.forest_of_illusion_2_invis_coin_block_3: 0xBC0781,
    LocationName.forest_of_illusion_2_yellow_block_1: 0xBC0782,
    LocationName.forest_secret_powerup_block_1: 0xBC0783,
    LocationName.forest_secret_powerup_block_2: 0xBC0784,
    LocationName.forest_secret_life_block_1: 0xBC0785,
    LocationName.forest_of_illusion_3_yoshi_block_1: 0xBC0786,
    LocationName.forest_of_illusion_3_coin_block_1: 0xBC0787,
    LocationName.forest_of_illusion_3_multi_coin_block_1: 0xBC0788,
    LocationName.forest_of_illusion_3_coin_block_2: 0xBC0789,
    LocationName.forest_of_illusion_3_multi_coin_block_2: 0xBC078A,
    LocationName.forest_of_illusion_3_coin_block_3: 0xBC078B,
    LocationName.forest_of_illusion_3_coin_block_4: 0xBC078C,
    LocationName.forest_of_illusion_3_coin_block_5: 0xBC078D,
    LocationName.forest_of_illusion_3_coin_block_6: 0xBC078E,
    LocationName.forest_of_illusion_3_coin_block_7: 0xBC078F,
    LocationName.forest_of_illusion_3_coin_block_8: 0xBC0790,
    LocationName.forest_of_illusion_3_coin_block_9: 0xBC0791,
    LocationName.forest_of_illusion_3_coin_block_10: 0xBC0792,
    LocationName.forest_of_illusion_3_coin_block_11: 0xBC0793,
    LocationName.forest_of_illusion_3_coin_block_12: 0xBC0794,
    LocationName.forest_of_illusion_3_coin_block_13: 0xBC0795,
    LocationName.forest_of_illusion_3_coin_block_14: 0xBC0796,
    LocationName.forest_of_illusion_3_coin_block_15: 0xBC0797,
    LocationName.forest_of_illusion_3_coin_block_16: 0xBC0798,
    LocationName.forest_of_illusion_3_coin_block_17: 0xBC0799,
    LocationName.forest_of_illusion_3_coin_block_18: 0xBC079A,
    LocationName.forest_of_illusion_3_coin_block_19: 0xBC079B,
    LocationName.forest_of_illusion_3_coin_block_20: 0xBC079C,
    LocationName.forest_of_illusion_3_coin_block_21: 0xBC079D,
    LocationName.forest_of_illusion_3_coin_block_22: 0xBC079E,
    LocationName.forest_of_illusion_3_coin_block_23: 0xBC079F,
    LocationName.forest_of_illusion_3_coin_block_24: 0xBC07A0,
    LocationName.special_zone_8_yoshi_block_1: 0xBC07A1,
    LocationName.special_zone_8_coin_block_1: 0xBC07A2,
    LocationName.special_zone_8_coin_block_2: 0xBC07A3,
    LocationName.special_zone_8_coin_block_3: 0xBC07A4,
    LocationName.special_zone_8_coin_block_4: 0xBC07A5,
    LocationName.special_zone_8_coin_block_5: 0xBC07A6,
    LocationName.special_zone_8_blue_pow_block_1: 0xBC07A7,
    LocationName.special_zone_8_powerup_block_1: 0xBC07A8,
    LocationName.special_zone_8_star_block_1: 0xBC07A9,
    LocationName.special_zone_8_coin_block_6: 0xBC07AA,
    LocationName.special_zone_8_coin_block_7: 0xBC07AB,
    LocationName.special_zone_8_coin_block_8: 0xBC07AC,
    LocationName.special_zone_8_coin_block_9: 0xBC07AD,
    LocationName.special_zone_8_coin_block_10: 0xBC07AE,
    LocationName.special_zone_8_coin_block_11: 0xBC07AF,
    LocationName.special_zone_8_coin_block_12: 0xBC07B0,
    LocationName.special_zone_8_coin_block_13: 0xBC07B1,
    LocationName.special_zone_8_coin_block_14: 0xBC07B2,
    LocationName.special_zone_8_coin_block_15: 0xBC07B3,
    LocationName.special_zone_8_coin_block_16: 0xBC07B4,
    LocationName.special_zone_8_coin_block_17: 0xBC07B5,
    LocationName.special_zone_8_coin_block_18: 0xBC07B6,
    LocationName.special_zone_8_multi_coin_block_1: 0xBC07B7,
    LocationName.special_zone_8_coin_block_19: 0xBC07B8,
    LocationName.special_zone_8_coin_block_20: 0xBC07B9,
    LocationName.special_zone_8_coin_block_21: 0xBC07BA,
    LocationName.special_zone_8_coin_block_22: 0xBC07BB,
    LocationName.special_zone_8_coin_block_23: 0xBC07BC,
    LocationName.special_zone_8_powerup_block_2: 0xBC07BD,
    LocationName.special_zone_8_flying_block_1: 0xBC07BE,
    LocationName.special_zone_7_powerup_block_1: 0xBC07BF,
    LocationName.special_zone_7_yoshi_block_1: 0xBC07C0,
    LocationName.special_zone_7_coin_block_1: 0xBC07C1,
    LocationName.special_zone_7_powerup_block_2: 0xBC07C2,
    LocationName.special_zone_7_coin_block_2: 0xBC07C3,
    LocationName.special_zone_6_powerup_block_1: 0xBC07C4,
    LocationName.special_zone_6_coin_block_1: 0xBC07C5,
    LocationName.special_zone_6_coin_block_2: 0xBC07C6,
    LocationName.special_zone_6_yoshi_block_1: 0xBC07C7,
    LocationName.special_zone_6_life_block_1: 0xBC07C8,
    LocationName.special_zone_6_multi_coin_block_1: 0xBC07C9,
    LocationName.special_zone_6_coin_block_3: 0xBC07CA,
    LocationName.special_zone_6_coin_block_4: 0xBC07CB,
    LocationName.special_zone_6_coin_block_5: 0xBC07CC,
    LocationName.special_zone_6_coin_block_6: 0xBC07CD,
    LocationName.special_zone_6_coin_block_7: 0xBC07CE,
    LocationName.special_zone_6_coin_block_8: 0xBC07CF,
    LocationName.special_zone_6_coin_block_9: 0xBC07D0,
    LocationName.special_zone_6_coin_block_10: 0xBC07D1,
    LocationName.special_zone_6_coin_block_11: 0xBC07D2,
    LocationName.special_zone_6_coin_block_12: 0xBC07D3,
    LocationName.special_zone_6_coin_block_13: 0xBC07D4,
    LocationName.special_zone_6_coin_block_14: 0xBC07D5,
    LocationName.special_zone_6_coin_block_15: 0xBC07D6,
    LocationName.special_zone_6_coin_block_16: 0xBC07D7,
    LocationName.special_zone_6_coin_block_17: 0xBC07D8,
    LocationName.special_zone_6_coin_block_18: 0xBC07D9,
    LocationName.special_zone_6_coin_block_19: 0xBC07DA,
    LocationName.special_zone_6_coin_block_20: 0xBC07DB,
    LocationName.special_zone_6_coin_block_21: 0xBC07DC,
    LocationName.special_zone_6_coin_block_22: 0xBC07DD,
    LocationName.special_zone_6_coin_block_23: 0xBC07DE,
    LocationName.special_zone_6_coin_block_24: 0xBC07DF,
    LocationName.special_zone_6_coin_block_25: 0xBC07E0,
    LocationName.special_zone_6_coin_block_26: 0xBC07E1,
    LocationName.special_zone_6_coin_block_27: 0xBC07E2,
    LocationName.special_zone_6_coin_block_28: 0xBC07E3,
    LocationName.special_zone_6_powerup_block_2: 0xBC07E4,
    LocationName.special_zone_6_coin_block_29: 0xBC07E5,
    LocationName.special_zone_6_coin_block_30: 0xBC07E6,
    LocationName.special_zone_6_coin_block_31: 0xBC07E7,
    LocationName.special_zone_6_coin_block_32: 0xBC07E8,
    LocationName.special_zone_6_coin_block_33: 0xBC07E9,
    LocationName.special_zone_5_yoshi_block_1: 0xBC07EA,
    LocationName.special_zone_1_vine_block_1: 0xBC07EB,
    LocationName.special_zone_1_vine_block_2: 0xBC07EC,
    LocationName.special_zone_1_vine_block_3: 0xBC07ED,
    LocationName.special_zone_1_vine_block_4: 0xBC07EE,
    LocationName.special_zone_1_life_block_1: 0xBC07EF,
    LocationName.special_zone_1_vine_block_5: 0xBC07F0,
    LocationName.special_zone_1_blue_pow_block_1: 0xBC07F1,
    LocationName.special_zone_1_vine_block_6: 0xBC07F2,
    LocationName.special_zone_1_powerup_block_1: 0xBC07F3,
    LocationName.special_zone_1_pswitch_coin_block_1: 0xBC07F4,
    LocationName.special_zone_1_pswitch_coin_block_2: 0xBC07F5,
    LocationName.special_zone_1_pswitch_coin_block_3: 0xBC07F6,
    LocationName.special_zone_1_pswitch_coin_block_4: 0xBC07F7,
    LocationName.special_zone_1_pswitch_coin_block_5: 0xBC07F8,
    LocationName.special_zone_1_pswitch_coin_block_6: 0xBC07F9,
    LocationName.special_zone_1_pswitch_coin_block_7: 0xBC07FA,
    LocationName.special_zone_1_pswitch_coin_block_8: 0xBC07FB,
    LocationName.special_zone_1_pswitch_coin_block_9: 0xBC07FC,
    LocationName.special_zone_1_pswitch_coin_block_10: 0xBC07FD,
    LocationName.special_zone_1_pswitch_coin_block_11: 0xBC07FE,
    LocationName.special_zone_1_pswitch_coin_block_12: 0xBC07FF,
    LocationName.special_zone_1_pswitch_coin_block_13: 0xBC0800,
    LocationName.special_zone_2_powerup_block_1: 0xBC0801,
    LocationName.special_zone_2_coin_block_1: 0xBC0802,
    LocationName.special_zone_2_coin_block_2: 0xBC0803,
    LocationName.special_zone_2_powerup_block_2: 0xBC0804,
    LocationName.special_zone_2_coin_block_3: 0xBC0805,
    LocationName.special_zone_2_coin_block_4: 0xBC0806,
    LocationName.special_zone_2_powerup_block_3: 0xBC0807,
    LocationName.special_zone_2_multi_coin_block_1: 0xBC0808,
    LocationName.special_zone_2_coin_block_5: 0xBC0809,
    LocationName.special_zone_2_coin_block_6: 0xBC080A,
    LocationName.special_zone_3_powerup_block_1: 0xBC080B,
    LocationName.special_zone_3_yoshi_block_1: 0xBC080C,
    LocationName.special_zone_3_wings_block_1: 0xBC080D,
    LocationName.special_zone_4_powerup_block_1: 0xBC080E,
    LocationName.special_zone_4_star_block_1: 0xBC080F,
    LocationName.star_road_2_star_block_1: 0xBC0810,
    LocationName.star_road_3_key_block_1: 0xBC0811,
    LocationName.star_road_4_powerup_block_1: 0xBC0812,
    LocationName.star_road_4_green_block_1: 0xBC0813,
    LocationName.star_road_4_green_block_2: 0xBC0814,
    LocationName.star_road_4_green_block_3: 0xBC0815,
    LocationName.star_road_4_green_block_4: 0xBC0816,
    LocationName.star_road_4_green_block_5: 0xBC0817,
    LocationName.star_road_4_green_block_6: 0xBC0818,
    LocationName.star_road_4_green_block_7: 0xBC0819,
    LocationName.star_road_4_key_block_1: 0xBC081A,
    LocationName.star_road_5_directional_coin_block_1: 0xBC081B,
    LocationName.star_road_5_life_block_1: 0xBC081C,
    LocationName.star_road_5_vine_block_1: 0xBC081D,
    LocationName.star_road_5_yellow_block_1: 0xBC081E,
    LocationName.star_road_5_yellow_block_2: 0xBC081F,
    LocationName.star_road_5_yellow_block_3: 0xBC0820,
    LocationName.star_road_5_yellow_block_4: 0xBC0821,
    LocationName.star_road_5_yellow_block_5: 0xBC0822,
    LocationName.star_road_5_yellow_block_6: 0xBC0823,
    LocationName.star_road_5_yellow_block_7: 0xBC0824,
    LocationName.star_road_5_yellow_block_8: 0xBC0825,
    LocationName.star_road_5_yellow_block_9: 0xBC0826,
    LocationName.star_road_5_yellow_block_10: 0xBC0827,
    LocationName.star_road_5_yellow_block_11: 0xBC0828,
    LocationName.star_road_5_yellow_block_12: 0xBC0829,
    LocationName.star_road_5_yellow_block_13: 0xBC082A,
    LocationName.star_road_5_yellow_block_14: 0xBC082B,
    LocationName.star_road_5_yellow_block_15: 0xBC082C,
    LocationName.star_road_5_yellow_block_16: 0xBC082D,
    LocationName.star_road_5_yellow_block_17: 0xBC082E,
    LocationName.star_road_5_yellow_block_18: 0xBC082F,
    LocationName.star_road_5_yellow_block_19: 0xBC0830,
    LocationName.star_road_5_yellow_block_20: 0xBC0831,
    LocationName.star_road_5_green_block_1: 0xBC0832,
    LocationName.star_road_5_green_block_2: 0xBC0833,
    LocationName.star_road_5_green_block_3: 0xBC0834,
    LocationName.star_road_5_green_block_4: 0xBC0835,
    LocationName.star_road_5_green_block_5: 0xBC0836,
    LocationName.star_road_5_green_block_6: 0xBC0837,
    LocationName.star_road_5_green_block_7: 0xBC0838,
    LocationName.star_road_5_green_block_8: 0xBC0839,
    LocationName.star_road_5_green_block_9: 0xBC083A,
    LocationName.star_road_5_green_block_10: 0xBC083B,
    LocationName.star_road_5_green_block_11: 0xBC083C,
    LocationName.star_road_5_green_block_12: 0xBC083D,
    LocationName.star_road_5_green_block_13: 0xBC083E,
    LocationName.star_road_5_green_block_14: 0xBC083F,
    LocationName.star_road_5_green_block_15: 0xBC0840,
    LocationName.star_road_5_green_block_16: 0xBC0841,
    LocationName.star_road_5_green_block_17: 0xBC0842,
    LocationName.star_road_5_green_block_18: 0xBC0843,
    LocationName.star_road_5_green_block_19: 0xBC0844,
    LocationName.star_road_5_green_block_20: 0xBC0845
}

bowser_location_table = {
    LocationName.bowser: 0xBC0200,
}

yoshi_house_location_table = {
    LocationName.yoshis_house: 0xBC0201,
}

all_locations = {
    **level_location_table,
    **dragon_coin_location_table,
    **moon_location_table,
    **hidden_1ups_location_table,
    **bonus_block_location_table,
    **blocksanity_location_table,
    **bowser_location_table,
    **yoshi_house_location_table,
}

special_zone_level_names = [
    LocationName.special_zone_1_exit_1,
    LocationName.special_zone_2_exit_1,
    LocationName.special_zone_3_exit_1,
    LocationName.special_zone_4_exit_1,
    LocationName.special_zone_5_exit_1,
    LocationName.special_zone_6_exit_1,
    LocationName.special_zone_7_exit_1,
    LocationName.special_zone_8_exit_1,
]

special_zone_dragon_coin_names = [
    LocationName.special_zone_1_dragon,
    LocationName.special_zone_2_dragon,
    LocationName.special_zone_3_dragon,
    LocationName.special_zone_4_dragon,
    LocationName.special_zone_5_dragon,
    LocationName.special_zone_6_dragon,
    LocationName.special_zone_7_dragon,
    LocationName.special_zone_8_dragon,
]

special_zone_hidden_1up_names = [
    LocationName.special_zone_1_hidden_1up
]

special_zone_blocksanity_names = [
    LocationName.special_zone_8_yoshi_block_1,
    LocationName.special_zone_8_coin_block_1,
    LocationName.special_zone_8_coin_block_2,
    LocationName.special_zone_8_coin_block_3,
    LocationName.special_zone_8_coin_block_4,
    LocationName.special_zone_8_coin_block_5,
    LocationName.special_zone_8_blue_pow_block_1,
    LocationName.special_zone_8_powerup_block_1,
    LocationName.special_zone_8_star_block_1,
    LocationName.special_zone_8_coin_block_6,
    LocationName.special_zone_8_coin_block_7,
    LocationName.special_zone_8_coin_block_8,
    LocationName.special_zone_8_coin_block_9,
    LocationName.special_zone_8_coin_block_10,
    LocationName.special_zone_8_coin_block_11,
    LocationName.special_zone_8_coin_block_12,
    LocationName.special_zone_8_coin_block_13,
    LocationName.special_zone_8_coin_block_14,
    LocationName.special_zone_8_coin_block_15,
    LocationName.special_zone_8_coin_block_16,
    LocationName.special_zone_8_coin_block_17,
    LocationName.special_zone_8_coin_block_18,
    LocationName.special_zone_8_multi_coin_block_1,
    LocationName.special_zone_8_coin_block_19,
    LocationName.special_zone_8_coin_block_20,
    LocationName.special_zone_8_coin_block_21,
    LocationName.special_zone_8_coin_block_22,
    LocationName.special_zone_8_coin_block_23,
    LocationName.special_zone_8_powerup_block_2,
    LocationName.special_zone_8_flying_block_1,
    LocationName.special_zone_7_powerup_block_1,
    LocationName.special_zone_7_yoshi_block_1,
    LocationName.special_zone_7_coin_block_1,
    LocationName.special_zone_7_powerup_block_2,
    LocationName.special_zone_7_coin_block_2,
    LocationName.special_zone_6_powerup_block_1,
    LocationName.special_zone_6_coin_block_1,
    LocationName.special_zone_6_coin_block_2,
    LocationName.special_zone_6_yoshi_block_1,
    LocationName.special_zone_6_life_block_1,
    LocationName.special_zone_6_multi_coin_block_1,
    LocationName.special_zone_6_coin_block_3,
    LocationName.special_zone_6_coin_block_4,
    LocationName.special_zone_6_coin_block_5,
    LocationName.special_zone_6_coin_block_6,
    LocationName.special_zone_6_coin_block_7,
    LocationName.special_zone_6_coin_block_8,
    LocationName.special_zone_6_coin_block_9,
    LocationName.special_zone_6_coin_block_10,
    LocationName.special_zone_6_coin_block_11,
    LocationName.special_zone_6_coin_block_12,
    LocationName.special_zone_6_coin_block_13,
    LocationName.special_zone_6_coin_block_14,
    LocationName.special_zone_6_coin_block_15,
    LocationName.special_zone_6_coin_block_16,
    LocationName.special_zone_6_coin_block_17,
    LocationName.special_zone_6_coin_block_18,
    LocationName.special_zone_6_coin_block_19,
    LocationName.special_zone_6_coin_block_20,
    LocationName.special_zone_6_coin_block_21,
    LocationName.special_zone_6_coin_block_22,
    LocationName.special_zone_6_coin_block_23,
    LocationName.special_zone_6_coin_block_24,
    LocationName.special_zone_6_coin_block_25,
    LocationName.special_zone_6_coin_block_26,
    LocationName.special_zone_6_coin_block_27,
    LocationName.special_zone_6_coin_block_28,
    LocationName.special_zone_6_powerup_block_2,
    LocationName.special_zone_6_coin_block_29,
    LocationName.special_zone_6_coin_block_30,
    LocationName.special_zone_6_coin_block_31,
    LocationName.special_zone_6_coin_block_32,
    LocationName.special_zone_6_coin_block_33,
    LocationName.special_zone_5_yoshi_block_1,
    LocationName.special_zone_1_vine_block_1,
    LocationName.special_zone_1_vine_block_2,
    LocationName.special_zone_1_vine_block_3,
    LocationName.special_zone_1_vine_block_4,
    LocationName.special_zone_1_life_block_1,
    LocationName.special_zone_1_vine_block_5,
    LocationName.special_zone_1_blue_pow_block_1,
    LocationName.special_zone_1_vine_block_6,
    LocationName.special_zone_1_powerup_block_1,
    LocationName.special_zone_1_pswitch_coin_block_1,
    LocationName.special_zone_1_pswitch_coin_block_2,
    LocationName.special_zone_1_pswitch_coin_block_3,
    LocationName.special_zone_1_pswitch_coin_block_4,
    LocationName.special_zone_1_pswitch_coin_block_5,
    LocationName.special_zone_1_pswitch_coin_block_6,
    LocationName.special_zone_1_pswitch_coin_block_7,
    LocationName.special_zone_1_pswitch_coin_block_8,
    LocationName.special_zone_1_pswitch_coin_block_9,
    LocationName.special_zone_1_pswitch_coin_block_10,
    LocationName.special_zone_1_pswitch_coin_block_11,
    LocationName.special_zone_1_pswitch_coin_block_12,
    LocationName.special_zone_1_pswitch_coin_block_13,
    LocationName.special_zone_2_powerup_block_1,
    LocationName.special_zone_2_coin_block_1,
    LocationName.special_zone_2_coin_block_2,
    LocationName.special_zone_2_powerup_block_2,
    LocationName.special_zone_2_coin_block_3,
    LocationName.special_zone_2_coin_block_4,
    LocationName.special_zone_2_powerup_block_3,
    LocationName.special_zone_2_multi_coin_block_1,
    LocationName.special_zone_2_coin_block_5,
    LocationName.special_zone_2_coin_block_6,
    LocationName.special_zone_3_powerup_block_1,
    LocationName.special_zone_3_yoshi_block_1,
    LocationName.special_zone_3_wings_block_1,
    LocationName.special_zone_4_powerup_block_1,
    LocationName.special_zone_4_star_block_1
]

location_table = {}


def setup_locations(world: World):
    location_table = {**level_location_table}

    if world.options.dragon_coin_checks:
        location_table.update(dragon_coin_location_table)

    if world.options.moon_checks:
        location_table.update(moon_location_table)

    if world.options.hidden_1up_checks:
        location_table.update(hidden_1ups_location_table)

    if world.options.bonus_block_checks:
        location_table.update(bonus_block_location_table)

    if world.options.blocksanity:
        location_table.update(blocksanity_location_table)

    if world.options.goal == "yoshi_egg_hunt":
        location_table.update(yoshi_house_location_table)
    else:
        location_table.update(bowser_location_table)

    return location_table


lookup_id_to_name: typing.Dict[int, str] = {id: name for name, _ in all_locations.items()}