234 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			234 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import typing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from BaseClasses import Location
							 | 
						||
| 
								 | 
							
								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,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bowser_location_table = {
							 | 
						||
| 
								 | 
							
								    LocationName.bowser: 0xBC0200,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								yoshi_house_location_table = {
							 | 
						||
| 
								 | 
							
								    LocationName.yoshis_house: 0xBC0201,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								all_locations = {
							 | 
						||
| 
								 | 
							
								    **level_location_table,
							 | 
						||
| 
								 | 
							
								    **dragon_coin_location_table,
							 | 
						||
| 
								 | 
							
								    **bowser_location_table,
							 | 
						||
| 
								 | 
							
								    **yoshi_house_location_table,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								location_table = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def setup_locations(world, player: int):
							 | 
						||
| 
								 | 
							
								    location_table = {**level_location_table}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Dragon Coins here
							 | 
						||
| 
								 | 
							
								    if world.dragon_coin_checks[player].value:
							 | 
						||
| 
								 | 
							
								        location_table.update({**dragon_coin_location_table})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if world.goal[player] == "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()}
							 |