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()} |