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