SA2B: v2.2 Content Update (#1904)
* Ice Trap Support * Support Animalsanity * Add option for controlling number of emblems in pool * Support Slow Trap * Support Cutscene Traps * Support Voice Shuffle * Handle Boss Rush goals * Fix create item reference to self.multiworld * Support Ringlink * Reduce beep frequency to 20 * Add Boss Rush Chaos Emerald Hunt Goal * Fix Eternal Engine - Pipe 1 logic * Add Chao voice shuffle * Remove unused option * Adjust wording of Required Cannon's Core Missions * Fix incorrect region assignment * Fix incorrect animal logics * Fix Chao Race tooltip * Remove Green Hill Animal Location * Add Location Count info to tooltips * Don't allow M4 first if animalsanity is active * Add Iron Boots to Standard Logic Egg Quarters 5 * Make Vanilla Boss Rush actually Vanilla * Increment Mod Version * Increment Data Package Version --------- Co-authored-by: RaspberrySpaceJam <tyler.summers@gmail.com>
This commit is contained in:
parent
d51e0ec0ab
commit
1ced726d31
|
@ -29,6 +29,14 @@ gate_bosses_with_requirements_table = {
|
|||
king_boom_boo: 10,
|
||||
}
|
||||
|
||||
extra_boss_rush_bosses_table = {
|
||||
speed_characters_1: 11,
|
||||
speed_characters_2: 12,
|
||||
mech_characters_1: 13,
|
||||
mech_characters_2: 14,
|
||||
hunt_characters_1: 15,
|
||||
}
|
||||
|
||||
all_gate_bosses_table = {
|
||||
**gate_bosses_no_requirements_table,
|
||||
**gate_bosses_with_requirements_table,
|
||||
|
@ -42,6 +50,9 @@ def get_boss_name(boss: int):
|
|||
for key, value in gate_bosses_with_requirements_table.items():
|
||||
if value == boss:
|
||||
return key
|
||||
for key, value in extra_boss_rush_bosses_table.items():
|
||||
if value == boss:
|
||||
return key
|
||||
|
||||
|
||||
def boss_has_requirement(boss: int):
|
||||
|
@ -67,3 +78,34 @@ def get_gate_bosses(world, player: int):
|
|||
bosses: typing.Dict[int, int] = dict(zip(boss_gates, selected_bosses))
|
||||
|
||||
return bosses
|
||||
|
||||
|
||||
def get_boss_rush_bosses(multiworld, player: int):
|
||||
|
||||
if multiworld.boss_rush_shuffle[player] == 0:
|
||||
boss_list_o = list(range(0, 16))
|
||||
boss_list_s = [5, 2, 0, 10, 8, 4, 3, 1, 6, 13, 7, 11, 9, 15, 14, 12]
|
||||
|
||||
return dict(zip(boss_list_o, boss_list_s))
|
||||
elif multiworld.boss_rush_shuffle[player] == 1:
|
||||
boss_list_o = list(range(0, 16))
|
||||
boss_list_s = boss_list_o.copy()
|
||||
multiworld.random.shuffle(boss_list_s)
|
||||
|
||||
return dict(zip(boss_list_o, boss_list_s))
|
||||
elif multiworld.boss_rush_shuffle[player] == 2:
|
||||
boss_list_o = list(range(0, 16))
|
||||
boss_list_s = [multiworld.random.choice(boss_list_o) for i in range(0, 16)]
|
||||
if 10 not in boss_list_s:
|
||||
boss_list_s[multiworld.random.randint(0, 15)] = 10
|
||||
|
||||
return dict(zip(boss_list_o, boss_list_s))
|
||||
elif multiworld.boss_rush_shuffle[player] == 3:
|
||||
boss_list_o = list(range(0, 16))
|
||||
boss_list_s = [multiworld.random.choice(boss_list_o)] * len(boss_list_o)
|
||||
if 10 not in boss_list_s:
|
||||
boss_list_s[multiworld.random.randint(0, 15)] = 10
|
||||
|
||||
return dict(zip(boss_list_o, boss_list_s))
|
||||
else:
|
||||
return dict()
|
||||
|
|
|
@ -79,6 +79,9 @@ trap_table = {
|
|||
ItemName.gravity_trap: ItemData(0xFF0034, False, True),
|
||||
ItemName.exposition_trap: ItemData(0xFF0035, False, True),
|
||||
#ItemName.darkness_trap: ItemData(0xFF0036, False, True),
|
||||
ItemName.ice_trap: ItemData(0xFF0037, False, True),
|
||||
ItemName.slow_trap: ItemData(0xFF0038, False, True),
|
||||
ItemName.cutscene_trap: ItemData(0xFF0039, False, True),
|
||||
|
||||
ItemName.pong_trap: ItemData(0xFF0050, False, True),
|
||||
}
|
||||
|
|
|
@ -733,6 +733,487 @@ omochao_location_table = {
|
|||
LocationName.city_escape_omo_14: 0xFF09A0,
|
||||
}
|
||||
|
||||
animal_location_table = {
|
||||
LocationName.city_escape_animal_1: 0xFF0B00,
|
||||
LocationName.wild_canyon_animal_1: 0xFF0B01,
|
||||
LocationName.prison_lane_animal_1: 0xFF0B02,
|
||||
LocationName.metal_harbor_animal_1: 0xFF0B03,
|
||||
LocationName.green_forest_animal_1: 0xFF0B04,
|
||||
LocationName.pumpkin_hill_animal_1: 0xFF0B05,
|
||||
LocationName.mission_street_animal_1: 0xFF0B06,
|
||||
LocationName.aquatic_mine_animal_1: 0xFF0B07,
|
||||
LocationName.hidden_base_animal_1: 0xFF0B09,
|
||||
LocationName.pyramid_cave_animal_1: 0xFF0B0A,
|
||||
LocationName.death_chamber_animal_1: 0xFF0B0B,
|
||||
LocationName.eternal_engine_animal_1: 0xFF0B0C,
|
||||
LocationName.meteor_herd_animal_1: 0xFF0B0D,
|
||||
LocationName.crazy_gadget_animal_1: 0xFF0B0E,
|
||||
LocationName.final_rush_animal_1: 0xFF0B0F,
|
||||
|
||||
LocationName.iron_gate_animal_1: 0xFF0B10,
|
||||
LocationName.dry_lagoon_animal_1: 0xFF0B11,
|
||||
LocationName.sand_ocean_animal_1: 0xFF0B12,
|
||||
LocationName.radical_highway_animal_1: 0xFF0B13,
|
||||
LocationName.egg_quarters_animal_1: 0xFF0B14,
|
||||
LocationName.lost_colony_animal_1: 0xFF0B15,
|
||||
LocationName.weapons_bed_animal_1: 0xFF0B16,
|
||||
LocationName.security_hall_animal_1: 0xFF0B17,
|
||||
LocationName.white_jungle_animal_1: 0xFF0B18,
|
||||
LocationName.sky_rail_animal_1: 0xFF0B1A,
|
||||
LocationName.mad_space_animal_1: 0xFF0B1B,
|
||||
LocationName.cosmic_wall_animal_1: 0xFF0B1C,
|
||||
LocationName.final_chase_animal_1: 0xFF0B1D,
|
||||
|
||||
LocationName.cannon_core_animal_1: 0xFF0B1E,
|
||||
|
||||
LocationName.city_escape_animal_2: 0xFF0B20,
|
||||
LocationName.wild_canyon_animal_2: 0xFF0B21,
|
||||
LocationName.prison_lane_animal_2: 0xFF0B22,
|
||||
LocationName.metal_harbor_animal_2: 0xFF0B23,
|
||||
LocationName.green_forest_animal_2: 0xFF0B24,
|
||||
LocationName.pumpkin_hill_animal_2: 0xFF0B25,
|
||||
LocationName.mission_street_animal_2: 0xFF0B26,
|
||||
LocationName.aquatic_mine_animal_2: 0xFF0B27,
|
||||
LocationName.hidden_base_animal_2: 0xFF0B29,
|
||||
LocationName.pyramid_cave_animal_2: 0xFF0B2A,
|
||||
LocationName.death_chamber_animal_2: 0xFF0B2B,
|
||||
LocationName.eternal_engine_animal_2: 0xFF0B2C,
|
||||
LocationName.meteor_herd_animal_2: 0xFF0B2D,
|
||||
LocationName.crazy_gadget_animal_2: 0xFF0B2E,
|
||||
LocationName.final_rush_animal_2: 0xFF0B2F,
|
||||
|
||||
LocationName.iron_gate_animal_2: 0xFF0B30,
|
||||
LocationName.dry_lagoon_animal_2: 0xFF0B31,
|
||||
LocationName.sand_ocean_animal_2: 0xFF0B32,
|
||||
LocationName.radical_highway_animal_2: 0xFF0B33,
|
||||
LocationName.egg_quarters_animal_2: 0xFF0B34,
|
||||
LocationName.lost_colony_animal_2: 0xFF0B35,
|
||||
LocationName.weapons_bed_animal_2: 0xFF0B36,
|
||||
LocationName.security_hall_animal_2: 0xFF0B37,
|
||||
LocationName.white_jungle_animal_2: 0xFF0B38,
|
||||
LocationName.sky_rail_animal_2: 0xFF0B3A,
|
||||
LocationName.mad_space_animal_2: 0xFF0B3B,
|
||||
LocationName.cosmic_wall_animal_2: 0xFF0B3C,
|
||||
LocationName.final_chase_animal_2: 0xFF0B3D,
|
||||
|
||||
LocationName.cannon_core_animal_2: 0xFF0B3E,
|
||||
|
||||
LocationName.city_escape_animal_3: 0xFF0B40,
|
||||
LocationName.wild_canyon_animal_3: 0xFF0B41,
|
||||
LocationName.prison_lane_animal_3: 0xFF0B42,
|
||||
LocationName.metal_harbor_animal_3: 0xFF0B43,
|
||||
LocationName.green_forest_animal_3: 0xFF0B44,
|
||||
LocationName.pumpkin_hill_animal_3: 0xFF0B45,
|
||||
LocationName.mission_street_animal_3: 0xFF0B46,
|
||||
LocationName.aquatic_mine_animal_3: 0xFF0B47,
|
||||
LocationName.hidden_base_animal_3: 0xFF0B49,
|
||||
LocationName.pyramid_cave_animal_3: 0xFF0B4A,
|
||||
LocationName.death_chamber_animal_3: 0xFF0B4B,
|
||||
LocationName.eternal_engine_animal_3: 0xFF0B4C,
|
||||
LocationName.meteor_herd_animal_3: 0xFF0B4D,
|
||||
LocationName.crazy_gadget_animal_3: 0xFF0B4E,
|
||||
LocationName.final_rush_animal_3: 0xFF0B4F,
|
||||
|
||||
LocationName.iron_gate_animal_3: 0xFF0B50,
|
||||
LocationName.dry_lagoon_animal_3: 0xFF0B51,
|
||||
LocationName.sand_ocean_animal_3: 0xFF0B52,
|
||||
LocationName.radical_highway_animal_3: 0xFF0B53,
|
||||
LocationName.egg_quarters_animal_3: 0xFF0B54,
|
||||
LocationName.lost_colony_animal_3: 0xFF0B55,
|
||||
LocationName.weapons_bed_animal_3: 0xFF0B56,
|
||||
LocationName.security_hall_animal_3: 0xFF0B57,
|
||||
LocationName.white_jungle_animal_3: 0xFF0B58,
|
||||
LocationName.sky_rail_animal_3: 0xFF0B5A,
|
||||
LocationName.mad_space_animal_3: 0xFF0B5B,
|
||||
LocationName.cosmic_wall_animal_3: 0xFF0B5C,
|
||||
LocationName.final_chase_animal_3: 0xFF0B5D,
|
||||
|
||||
LocationName.cannon_core_animal_3: 0xFF0B5E,
|
||||
|
||||
LocationName.city_escape_animal_4: 0xFF0B60,
|
||||
LocationName.wild_canyon_animal_4: 0xFF0B61,
|
||||
LocationName.prison_lane_animal_4: 0xFF0B62,
|
||||
LocationName.metal_harbor_animal_4: 0xFF0B63,
|
||||
LocationName.green_forest_animal_4: 0xFF0B64,
|
||||
LocationName.pumpkin_hill_animal_4: 0xFF0B65,
|
||||
LocationName.mission_street_animal_4: 0xFF0B66,
|
||||
LocationName.aquatic_mine_animal_4: 0xFF0B67,
|
||||
LocationName.hidden_base_animal_4: 0xFF0B69,
|
||||
LocationName.pyramid_cave_animal_4: 0xFF0B6A,
|
||||
LocationName.death_chamber_animal_4: 0xFF0B6B,
|
||||
LocationName.eternal_engine_animal_4: 0xFF0B6C,
|
||||
LocationName.meteor_herd_animal_4: 0xFF0B6D,
|
||||
LocationName.crazy_gadget_animal_4: 0xFF0B6E,
|
||||
LocationName.final_rush_animal_4: 0xFF0B6F,
|
||||
|
||||
LocationName.iron_gate_animal_4: 0xFF0B70,
|
||||
LocationName.dry_lagoon_animal_4: 0xFF0B71,
|
||||
LocationName.sand_ocean_animal_4: 0xFF0B72,
|
||||
LocationName.radical_highway_animal_4: 0xFF0B73,
|
||||
LocationName.egg_quarters_animal_4: 0xFF0B74,
|
||||
LocationName.lost_colony_animal_4: 0xFF0B75,
|
||||
LocationName.weapons_bed_animal_4: 0xFF0B76,
|
||||
LocationName.security_hall_animal_4: 0xFF0B77,
|
||||
LocationName.white_jungle_animal_4: 0xFF0B78,
|
||||
LocationName.sky_rail_animal_4: 0xFF0B7A,
|
||||
LocationName.mad_space_animal_4: 0xFF0B7B,
|
||||
LocationName.cosmic_wall_animal_4: 0xFF0B7C,
|
||||
LocationName.final_chase_animal_4: 0xFF0B7D,
|
||||
|
||||
LocationName.cannon_core_animal_4: 0xFF0B7E,
|
||||
|
||||
LocationName.city_escape_animal_5: 0xFF0B80,
|
||||
LocationName.wild_canyon_animal_5: 0xFF0B81,
|
||||
LocationName.prison_lane_animal_5: 0xFF0B82,
|
||||
LocationName.metal_harbor_animal_5: 0xFF0B83,
|
||||
LocationName.green_forest_animal_5: 0xFF0B84,
|
||||
LocationName.pumpkin_hill_animal_5: 0xFF0B85,
|
||||
LocationName.mission_street_animal_5: 0xFF0B86,
|
||||
LocationName.aquatic_mine_animal_5: 0xFF0B87,
|
||||
LocationName.hidden_base_animal_5: 0xFF0B89,
|
||||
LocationName.pyramid_cave_animal_5: 0xFF0B8A,
|
||||
LocationName.death_chamber_animal_5: 0xFF0B8B,
|
||||
LocationName.eternal_engine_animal_5: 0xFF0B8C,
|
||||
LocationName.meteor_herd_animal_5: 0xFF0B8D,
|
||||
LocationName.crazy_gadget_animal_5: 0xFF0B8E,
|
||||
LocationName.final_rush_animal_5: 0xFF0B8F,
|
||||
|
||||
LocationName.iron_gate_animal_5: 0xFF0B90,
|
||||
LocationName.dry_lagoon_animal_5: 0xFF0B91,
|
||||
LocationName.sand_ocean_animal_5: 0xFF0B92,
|
||||
LocationName.radical_highway_animal_5: 0xFF0B93,
|
||||
LocationName.egg_quarters_animal_5: 0xFF0B94,
|
||||
LocationName.lost_colony_animal_5: 0xFF0B95,
|
||||
LocationName.weapons_bed_animal_5: 0xFF0B96,
|
||||
LocationName.security_hall_animal_5: 0xFF0B97,
|
||||
LocationName.white_jungle_animal_5: 0xFF0B98,
|
||||
LocationName.sky_rail_animal_5: 0xFF0B9A,
|
||||
LocationName.mad_space_animal_5: 0xFF0B9B,
|
||||
LocationName.cosmic_wall_animal_5: 0xFF0B9C,
|
||||
LocationName.final_chase_animal_5: 0xFF0B9D,
|
||||
|
||||
LocationName.cannon_core_animal_5: 0xFF0B9E,
|
||||
|
||||
LocationName.city_escape_animal_6: 0xFF0BA0,
|
||||
LocationName.wild_canyon_animal_6: 0xFF0BA1,
|
||||
LocationName.prison_lane_animal_6: 0xFF0BA2,
|
||||
LocationName.metal_harbor_animal_6: 0xFF0BA3,
|
||||
LocationName.green_forest_animal_6: 0xFF0BA4,
|
||||
LocationName.pumpkin_hill_animal_6: 0xFF0BA5,
|
||||
LocationName.mission_street_animal_6: 0xFF0BA6,
|
||||
LocationName.aquatic_mine_animal_6: 0xFF0BA7,
|
||||
LocationName.hidden_base_animal_6: 0xFF0BA9,
|
||||
LocationName.pyramid_cave_animal_6: 0xFF0BAA,
|
||||
LocationName.death_chamber_animal_6: 0xFF0BAB,
|
||||
LocationName.eternal_engine_animal_6: 0xFF0BAC,
|
||||
LocationName.meteor_herd_animal_6: 0xFF0BAD,
|
||||
LocationName.crazy_gadget_animal_6: 0xFF0BAE,
|
||||
LocationName.final_rush_animal_6: 0xFF0BAF,
|
||||
|
||||
LocationName.iron_gate_animal_6: 0xFF0BB0,
|
||||
LocationName.dry_lagoon_animal_6: 0xFF0BB1,
|
||||
LocationName.sand_ocean_animal_6: 0xFF0BB2,
|
||||
LocationName.radical_highway_animal_6: 0xFF0BB3,
|
||||
LocationName.egg_quarters_animal_6: 0xFF0BB4,
|
||||
LocationName.lost_colony_animal_6: 0xFF0BB5,
|
||||
LocationName.weapons_bed_animal_6: 0xFF0BB6,
|
||||
LocationName.security_hall_animal_6: 0xFF0BB7,
|
||||
LocationName.white_jungle_animal_6: 0xFF0BB8,
|
||||
LocationName.sky_rail_animal_6: 0xFF0BBA,
|
||||
LocationName.mad_space_animal_6: 0xFF0BBB,
|
||||
LocationName.cosmic_wall_animal_6: 0xFF0BBC,
|
||||
LocationName.final_chase_animal_6: 0xFF0BBD,
|
||||
|
||||
LocationName.cannon_core_animal_6: 0xFF0BBE,
|
||||
|
||||
LocationName.city_escape_animal_7: 0xFF0BC0,
|
||||
LocationName.wild_canyon_animal_7: 0xFF0BC1,
|
||||
LocationName.prison_lane_animal_7: 0xFF0BC2,
|
||||
LocationName.metal_harbor_animal_7: 0xFF0BC3,
|
||||
LocationName.green_forest_animal_7: 0xFF0BC4,
|
||||
LocationName.pumpkin_hill_animal_7: 0xFF0BC5,
|
||||
LocationName.mission_street_animal_7: 0xFF0BC6,
|
||||
LocationName.aquatic_mine_animal_7: 0xFF0BC7,
|
||||
LocationName.hidden_base_animal_7: 0xFF0BC9,
|
||||
LocationName.pyramid_cave_animal_7: 0xFF0BCA,
|
||||
LocationName.death_chamber_animal_7: 0xFF0BCB,
|
||||
LocationName.eternal_engine_animal_7: 0xFF0BCC,
|
||||
LocationName.meteor_herd_animal_7: 0xFF0BCD,
|
||||
LocationName.crazy_gadget_animal_7: 0xFF0BCE,
|
||||
LocationName.final_rush_animal_7: 0xFF0BCF,
|
||||
|
||||
LocationName.iron_gate_animal_7: 0xFF0BD0,
|
||||
LocationName.dry_lagoon_animal_7: 0xFF0BD1,
|
||||
LocationName.sand_ocean_animal_7: 0xFF0BD2,
|
||||
LocationName.radical_highway_animal_7: 0xFF0BD3,
|
||||
LocationName.egg_quarters_animal_7: 0xFF0BD4,
|
||||
LocationName.lost_colony_animal_7: 0xFF0BD5,
|
||||
LocationName.weapons_bed_animal_7: 0xFF0BD6,
|
||||
LocationName.security_hall_animal_7: 0xFF0BD7,
|
||||
LocationName.white_jungle_animal_7: 0xFF0BD8,
|
||||
LocationName.sky_rail_animal_7: 0xFF0BDA,
|
||||
LocationName.mad_space_animal_7: 0xFF0BDB,
|
||||
LocationName.cosmic_wall_animal_7: 0xFF0BDC,
|
||||
LocationName.final_chase_animal_7: 0xFF0BDD,
|
||||
|
||||
LocationName.cannon_core_animal_7: 0xFF0BDE,
|
||||
|
||||
LocationName.city_escape_animal_8: 0xFF0BE0,
|
||||
LocationName.wild_canyon_animal_8: 0xFF0BE1,
|
||||
LocationName.prison_lane_animal_8: 0xFF0BE2,
|
||||
LocationName.metal_harbor_animal_8: 0xFF0BE3,
|
||||
LocationName.green_forest_animal_8: 0xFF0BE4,
|
||||
LocationName.pumpkin_hill_animal_8: 0xFF0BE5,
|
||||
LocationName.mission_street_animal_8: 0xFF0BE6,
|
||||
LocationName.aquatic_mine_animal_8: 0xFF0BE7,
|
||||
LocationName.hidden_base_animal_8: 0xFF0BE9,
|
||||
LocationName.pyramid_cave_animal_8: 0xFF0BEA,
|
||||
LocationName.death_chamber_animal_8: 0xFF0BEB,
|
||||
LocationName.eternal_engine_animal_8: 0xFF0BEC,
|
||||
LocationName.meteor_herd_animal_8: 0xFF0BED,
|
||||
LocationName.crazy_gadget_animal_8: 0xFF0BEE,
|
||||
LocationName.final_rush_animal_8: 0xFF0BEF,
|
||||
|
||||
LocationName.iron_gate_animal_8: 0xFF0BF0,
|
||||
LocationName.dry_lagoon_animal_8: 0xFF0BF1,
|
||||
LocationName.sand_ocean_animal_8: 0xFF0BF2,
|
||||
LocationName.radical_highway_animal_8: 0xFF0BF3,
|
||||
LocationName.egg_quarters_animal_8: 0xFF0BF4,
|
||||
LocationName.lost_colony_animal_8: 0xFF0BF5,
|
||||
LocationName.weapons_bed_animal_8: 0xFF0BF6,
|
||||
LocationName.security_hall_animal_8: 0xFF0BF7,
|
||||
LocationName.white_jungle_animal_8: 0xFF0BF8,
|
||||
LocationName.sky_rail_animal_8: 0xFF0BFA,
|
||||
LocationName.mad_space_animal_8: 0xFF0BFB,
|
||||
LocationName.cosmic_wall_animal_8: 0xFF0BFC,
|
||||
LocationName.final_chase_animal_8: 0xFF0BFD,
|
||||
|
||||
LocationName.cannon_core_animal_8: 0xFF0BFE,
|
||||
|
||||
LocationName.city_escape_animal_9: 0xFF0C00,
|
||||
LocationName.wild_canyon_animal_9: 0xFF0C01,
|
||||
LocationName.prison_lane_animal_9: 0xFF0C02,
|
||||
LocationName.metal_harbor_animal_9: 0xFF0C03,
|
||||
LocationName.green_forest_animal_9: 0xFF0C04,
|
||||
LocationName.pumpkin_hill_animal_9: 0xFF0C05,
|
||||
LocationName.mission_street_animal_9: 0xFF0C06,
|
||||
LocationName.aquatic_mine_animal_9: 0xFF0C07,
|
||||
LocationName.hidden_base_animal_9: 0xFF0C09,
|
||||
LocationName.pyramid_cave_animal_9: 0xFF0C0A,
|
||||
LocationName.death_chamber_animal_9: 0xFF0C0B,
|
||||
LocationName.eternal_engine_animal_9: 0xFF0C0C,
|
||||
LocationName.meteor_herd_animal_9: 0xFF0C0D,
|
||||
LocationName.crazy_gadget_animal_9: 0xFF0C0E,
|
||||
LocationName.final_rush_animal_9: 0xFF0C0F,
|
||||
|
||||
LocationName.iron_gate_animal_9: 0xFF0C10,
|
||||
LocationName.dry_lagoon_animal_9: 0xFF0C11,
|
||||
LocationName.sand_ocean_animal_9: 0xFF0C12,
|
||||
LocationName.radical_highway_animal_9: 0xFF0C13,
|
||||
LocationName.egg_quarters_animal_9: 0xFF0C14,
|
||||
LocationName.lost_colony_animal_9: 0xFF0C15,
|
||||
LocationName.weapons_bed_animal_9: 0xFF0C16,
|
||||
LocationName.white_jungle_animal_9: 0xFF0C18,
|
||||
LocationName.sky_rail_animal_9: 0xFF0C1A,
|
||||
LocationName.mad_space_animal_9: 0xFF0C1B,
|
||||
LocationName.cosmic_wall_animal_9: 0xFF0C1C,
|
||||
LocationName.final_chase_animal_9: 0xFF0C1D,
|
||||
|
||||
LocationName.cannon_core_animal_9: 0xFF0C1E,
|
||||
|
||||
LocationName.city_escape_animal_10: 0xFF0C20,
|
||||
LocationName.wild_canyon_animal_10: 0xFF0C21,
|
||||
LocationName.prison_lane_animal_10: 0xFF0C22,
|
||||
LocationName.metal_harbor_animal_10: 0xFF0C23,
|
||||
LocationName.green_forest_animal_10: 0xFF0C24,
|
||||
LocationName.pumpkin_hill_animal_10: 0xFF0C25,
|
||||
LocationName.mission_street_animal_10: 0xFF0C26,
|
||||
LocationName.aquatic_mine_animal_10: 0xFF0C27,
|
||||
LocationName.hidden_base_animal_10: 0xFF0C29,
|
||||
LocationName.pyramid_cave_animal_10: 0xFF0C2A,
|
||||
LocationName.death_chamber_animal_10: 0xFF0C2B,
|
||||
LocationName.eternal_engine_animal_10: 0xFF0C2C,
|
||||
LocationName.meteor_herd_animal_10: 0xFF0C2D,
|
||||
LocationName.crazy_gadget_animal_10: 0xFF0C2E,
|
||||
LocationName.final_rush_animal_10: 0xFF0C2F,
|
||||
|
||||
LocationName.iron_gate_animal_10: 0xFF0C30,
|
||||
LocationName.dry_lagoon_animal_10: 0xFF0C31,
|
||||
LocationName.sand_ocean_animal_10: 0xFF0C32,
|
||||
LocationName.radical_highway_animal_10: 0xFF0C33,
|
||||
LocationName.egg_quarters_animal_10: 0xFF0C34,
|
||||
LocationName.lost_colony_animal_10: 0xFF0C35,
|
||||
LocationName.weapons_bed_animal_10: 0xFF0C36,
|
||||
LocationName.white_jungle_animal_10: 0xFF0C38,
|
||||
LocationName.sky_rail_animal_10: 0xFF0C3A,
|
||||
LocationName.mad_space_animal_10: 0xFF0C3B,
|
||||
LocationName.cosmic_wall_animal_10: 0xFF0C3C,
|
||||
LocationName.final_chase_animal_10: 0xFF0C3D,
|
||||
|
||||
LocationName.cannon_core_animal_10: 0xFF0C3E,
|
||||
|
||||
LocationName.city_escape_animal_11: 0xFF0C40,
|
||||
LocationName.prison_lane_animal_11: 0xFF0C42,
|
||||
LocationName.metal_harbor_animal_11: 0xFF0C43,
|
||||
LocationName.green_forest_animal_11: 0xFF0C44,
|
||||
LocationName.pumpkin_hill_animal_11: 0xFF0C45,
|
||||
LocationName.mission_street_animal_11: 0xFF0C46,
|
||||
LocationName.hidden_base_animal_11: 0xFF0C49,
|
||||
LocationName.pyramid_cave_animal_11: 0xFF0C4A,
|
||||
LocationName.eternal_engine_animal_11: 0xFF0C4C,
|
||||
LocationName.meteor_herd_animal_11: 0xFF0C4D,
|
||||
LocationName.crazy_gadget_animal_11: 0xFF0C4E,
|
||||
LocationName.final_rush_animal_11: 0xFF0C4F,
|
||||
|
||||
LocationName.iron_gate_animal_11: 0xFF0C50,
|
||||
LocationName.sand_ocean_animal_11: 0xFF0C52,
|
||||
LocationName.radical_highway_animal_11: 0xFF0C53,
|
||||
LocationName.lost_colony_animal_11: 0xFF0C55,
|
||||
LocationName.weapons_bed_animal_11: 0xFF0C56,
|
||||
LocationName.white_jungle_animal_11: 0xFF0C58,
|
||||
LocationName.sky_rail_animal_11: 0xFF0C5A,
|
||||
LocationName.cosmic_wall_animal_11: 0xFF0C5C,
|
||||
LocationName.final_chase_animal_11: 0xFF0C5D,
|
||||
|
||||
LocationName.cannon_core_animal_11: 0xFF0C5E,
|
||||
|
||||
LocationName.city_escape_animal_12: 0xFF0C60,
|
||||
LocationName.prison_lane_animal_12: 0xFF0C62,
|
||||
LocationName.metal_harbor_animal_12: 0xFF0C63,
|
||||
LocationName.green_forest_animal_12: 0xFF0C64,
|
||||
LocationName.mission_street_animal_12: 0xFF0C66,
|
||||
LocationName.hidden_base_animal_12: 0xFF0C69,
|
||||
LocationName.pyramid_cave_animal_12: 0xFF0C6A,
|
||||
LocationName.eternal_engine_animal_12: 0xFF0C6C,
|
||||
LocationName.crazy_gadget_animal_12: 0xFF0C6E,
|
||||
LocationName.final_rush_animal_12: 0xFF0C6F,
|
||||
|
||||
LocationName.iron_gate_animal_12: 0xFF0C70,
|
||||
LocationName.sand_ocean_animal_12: 0xFF0C72,
|
||||
LocationName.radical_highway_animal_12: 0xFF0C73,
|
||||
LocationName.lost_colony_animal_12: 0xFF0C75,
|
||||
LocationName.weapons_bed_animal_12: 0xFF0C76,
|
||||
LocationName.white_jungle_animal_12: 0xFF0C78,
|
||||
LocationName.sky_rail_animal_12: 0xFF0C7A,
|
||||
LocationName.cosmic_wall_animal_12: 0xFF0C7C,
|
||||
LocationName.final_chase_animal_12: 0xFF0C7D,
|
||||
|
||||
LocationName.cannon_core_animal_12: 0xFF0C7E,
|
||||
|
||||
LocationName.city_escape_animal_13: 0xFF0C80,
|
||||
LocationName.prison_lane_animal_13: 0xFF0C82,
|
||||
LocationName.metal_harbor_animal_13: 0xFF0C83,
|
||||
LocationName.green_forest_animal_13: 0xFF0C84,
|
||||
LocationName.mission_street_animal_13: 0xFF0C86,
|
||||
LocationName.hidden_base_animal_13: 0xFF0C89,
|
||||
LocationName.pyramid_cave_animal_13: 0xFF0C8A,
|
||||
LocationName.eternal_engine_animal_13: 0xFF0C8C,
|
||||
LocationName.crazy_gadget_animal_13: 0xFF0C8E,
|
||||
LocationName.final_rush_animal_13: 0xFF0C8F,
|
||||
|
||||
LocationName.iron_gate_animal_13: 0xFF0C90,
|
||||
LocationName.sand_ocean_animal_13: 0xFF0C92,
|
||||
LocationName.radical_highway_animal_13: 0xFF0C93,
|
||||
LocationName.lost_colony_animal_13: 0xFF0C95,
|
||||
LocationName.weapons_bed_animal_13: 0xFF0C96,
|
||||
LocationName.white_jungle_animal_13: 0xFF0C98,
|
||||
LocationName.sky_rail_animal_13: 0xFF0C9A,
|
||||
LocationName.cosmic_wall_animal_13: 0xFF0C9C,
|
||||
LocationName.final_chase_animal_13: 0xFF0C9D,
|
||||
|
||||
LocationName.cannon_core_animal_13: 0xFF0C9E,
|
||||
|
||||
LocationName.city_escape_animal_14: 0xFF0CA0,
|
||||
LocationName.prison_lane_animal_14: 0xFF0CA2,
|
||||
LocationName.metal_harbor_animal_14: 0xFF0CA3,
|
||||
LocationName.green_forest_animal_14: 0xFF0CA4,
|
||||
LocationName.mission_street_animal_14: 0xFF0CA6,
|
||||
LocationName.hidden_base_animal_14: 0xFF0CA9,
|
||||
LocationName.pyramid_cave_animal_14: 0xFF0CAA,
|
||||
LocationName.eternal_engine_animal_14: 0xFF0CAC,
|
||||
LocationName.crazy_gadget_animal_14: 0xFF0CAE,
|
||||
LocationName.final_rush_animal_14: 0xFF0CAF,
|
||||
|
||||
LocationName.iron_gate_animal_14: 0xFF0CB0,
|
||||
LocationName.sand_ocean_animal_14: 0xFF0CB2,
|
||||
LocationName.radical_highway_animal_14: 0xFF0CB3,
|
||||
LocationName.lost_colony_animal_14: 0xFF0CB5,
|
||||
LocationName.weapons_bed_animal_14: 0xFF0CB6,
|
||||
LocationName.white_jungle_animal_14: 0xFF0CB8,
|
||||
LocationName.sky_rail_animal_14: 0xFF0CBA,
|
||||
LocationName.cosmic_wall_animal_14: 0xFF0CBC,
|
||||
LocationName.final_chase_animal_14: 0xFF0CBD,
|
||||
|
||||
LocationName.cannon_core_animal_14: 0xFF0CBE,
|
||||
|
||||
LocationName.city_escape_animal_15: 0xFF0CC0,
|
||||
LocationName.prison_lane_animal_15: 0xFF0CC2,
|
||||
LocationName.green_forest_animal_15: 0xFF0CC4,
|
||||
LocationName.mission_street_animal_15: 0xFF0CC6,
|
||||
LocationName.hidden_base_animal_15: 0xFF0CC9,
|
||||
LocationName.pyramid_cave_animal_15: 0xFF0CCA,
|
||||
LocationName.eternal_engine_animal_15: 0xFF0CCC,
|
||||
LocationName.crazy_gadget_animal_15: 0xFF0CCE,
|
||||
LocationName.final_rush_animal_15: 0xFF0CCF,
|
||||
|
||||
LocationName.iron_gate_animal_15: 0xFF0CD0,
|
||||
LocationName.sand_ocean_animal_15: 0xFF0CD2,
|
||||
LocationName.radical_highway_animal_15: 0xFF0CD3,
|
||||
LocationName.weapons_bed_animal_15: 0xFF0CD6,
|
||||
LocationName.white_jungle_animal_15: 0xFF0CD8,
|
||||
LocationName.sky_rail_animal_15: 0xFF0CDA,
|
||||
LocationName.cosmic_wall_animal_15: 0xFF0CDC,
|
||||
LocationName.final_chase_animal_15: 0xFF0CDD,
|
||||
|
||||
LocationName.cannon_core_animal_15: 0xFF0CDE,
|
||||
|
||||
LocationName.city_escape_animal_16: 0xFF0CE0,
|
||||
LocationName.green_forest_animal_16: 0xFF0CE4,
|
||||
LocationName.mission_street_animal_16: 0xFF0CE6,
|
||||
LocationName.pyramid_cave_animal_16: 0xFF0CEA,
|
||||
LocationName.crazy_gadget_animal_16: 0xFF0CEE,
|
||||
LocationName.final_rush_animal_16: 0xFF0CEF,
|
||||
|
||||
LocationName.radical_highway_animal_16: 0xFF0CF3,
|
||||
LocationName.white_jungle_animal_16: 0xFF0CF8,
|
||||
LocationName.sky_rail_animal_16: 0xFF0CFA,
|
||||
LocationName.final_chase_animal_16: 0xFF0CFD,
|
||||
|
||||
LocationName.cannon_core_animal_16: 0xFF0CFE,
|
||||
|
||||
LocationName.city_escape_animal_17: 0xFF0D00,
|
||||
LocationName.green_forest_animal_17: 0xFF0D04,
|
||||
LocationName.pyramid_cave_animal_17: 0xFF0D0A,
|
||||
|
||||
LocationName.radical_highway_animal_17: 0xFF0D13,
|
||||
LocationName.sky_rail_animal_17: 0xFF0D1A,
|
||||
LocationName.final_chase_animal_17: 0xFF0D1D,
|
||||
|
||||
LocationName.cannon_core_animal_17: 0xFF0D1E,
|
||||
|
||||
LocationName.city_escape_animal_18: 0xFF0D20,
|
||||
LocationName.green_forest_animal_18: 0xFF0D24,
|
||||
LocationName.pyramid_cave_animal_18: 0xFF0D2A,
|
||||
|
||||
LocationName.radical_highway_animal_18: 0xFF0D33,
|
||||
LocationName.sky_rail_animal_18: 0xFF0D3A,
|
||||
|
||||
LocationName.cannon_core_animal_18: 0xFF0D3E,
|
||||
|
||||
LocationName.city_escape_animal_19: 0xFF0D40,
|
||||
LocationName.pyramid_cave_animal_19: 0xFF0D4A,
|
||||
|
||||
LocationName.radical_highway_animal_19: 0xFF0D53,
|
||||
LocationName.sky_rail_animal_19: 0xFF0D5A,
|
||||
|
||||
LocationName.cannon_core_animal_19: 0xFF0D5E,
|
||||
|
||||
LocationName.city_escape_animal_20: 0xFF0D60,
|
||||
|
||||
LocationName.radical_highway_animal_20: 0xFF0D73,
|
||||
LocationName.sky_rail_animal_20: 0xFF0D7A,
|
||||
}
|
||||
|
||||
boss_gate_location_table = {
|
||||
LocationName.gate_1_boss: 0xFF0100,
|
||||
LocationName.gate_2_boss: 0xFF0101,
|
||||
|
@ -741,6 +1222,25 @@ boss_gate_location_table = {
|
|||
LocationName.gate_5_boss: 0xFF0104,
|
||||
}
|
||||
|
||||
boss_rush_location_table = {
|
||||
LocationName.boss_rush_1: 0xFF0105,
|
||||
LocationName.boss_rush_2: 0xFF0106,
|
||||
LocationName.boss_rush_3: 0xFF0107,
|
||||
LocationName.boss_rush_4: 0xFF0108,
|
||||
LocationName.boss_rush_5: 0xFF0109,
|
||||
LocationName.boss_rush_6: 0xFF010A,
|
||||
LocationName.boss_rush_7: 0xFF010B,
|
||||
LocationName.boss_rush_8: 0xFF010C,
|
||||
LocationName.boss_rush_9: 0xFF010D,
|
||||
LocationName.boss_rush_10: 0xFF010E,
|
||||
LocationName.boss_rush_11: 0xFF010F,
|
||||
LocationName.boss_rush_12: 0xFF0110,
|
||||
LocationName.boss_rush_13: 0xFF0111,
|
||||
LocationName.boss_rush_14: 0xFF0112,
|
||||
LocationName.boss_rush_15: 0xFF0113,
|
||||
LocationName.boss_rush_16: 0xFF0114,
|
||||
}
|
||||
|
||||
chao_garden_beginner_location_table = {
|
||||
LocationName.chao_race_crab_pool_1: 0xFF0200,
|
||||
LocationName.chao_race_crab_pool_2: 0xFF0201,
|
||||
|
@ -862,6 +1362,10 @@ green_hill_chao_location_table = {
|
|||
LocationName.green_hill_chao_1: 0xFF041F,
|
||||
}
|
||||
|
||||
green_hill_animal_location_table = {
|
||||
#LocationName.green_hill_animal_1: 0xFF0B1F, # Disabled for technical reasons, may return
|
||||
}
|
||||
|
||||
final_boss_location_table = {
|
||||
# LocationName.biolizard: 0xFF003F,
|
||||
LocationName.finalhazard: 0xFF005F,
|
||||
|
@ -875,11 +1379,13 @@ all_locations = {
|
|||
**mission_location_table,
|
||||
**upgrade_location_table,
|
||||
**boss_gate_location_table,
|
||||
**boss_rush_location_table,
|
||||
**chao_key_location_table,
|
||||
**pipe_location_table,
|
||||
**hidden_whistle_location_table,
|
||||
**beetle_location_table,
|
||||
**omochao_location_table,
|
||||
**animal_location_table,
|
||||
**chao_garden_beginner_location_table,
|
||||
**chao_garden_intermediate_location_table,
|
||||
**chao_garden_expert_location_table,
|
||||
|
@ -889,6 +1395,7 @@ all_locations = {
|
|||
**kart_race_mini_location_table,
|
||||
**green_hill_location_table,
|
||||
**green_hill_chao_location_table,
|
||||
**green_hill_animal_location_table,
|
||||
**final_boss_location_table,
|
||||
**grand_prix_location_table,
|
||||
}
|
||||
|
@ -975,6 +1482,9 @@ def setup_locations(world: MultiWorld, player: int, mission_map: typing.Dict[int
|
|||
if world.omosanity[player]:
|
||||
location_table.update({**omochao_location_table})
|
||||
|
||||
if world.animalsanity[player]:
|
||||
location_table.update({**animal_location_table})
|
||||
|
||||
if world.kart_race_checks[player] == 2:
|
||||
location_table.update({**kart_race_beginner_location_table})
|
||||
location_table.update({**kart_race_standard_location_table})
|
||||
|
@ -982,15 +1492,21 @@ def setup_locations(world: MultiWorld, player: int, mission_map: typing.Dict[int
|
|||
elif world.kart_race_checks[player] == 1:
|
||||
location_table.update({**kart_race_mini_location_table})
|
||||
|
||||
if world.goal[player].value == 0 or world.goal[player].value == 2:
|
||||
if world.goal[player].value in [0, 2, 4, 5, 6]:
|
||||
location_table.update({**final_boss_location_table})
|
||||
|
||||
if world.goal[player].value == 1 or world.goal[player].value == 2:
|
||||
if world.goal[player].value in [1, 2]:
|
||||
location_table.update({**green_hill_location_table})
|
||||
|
||||
if world.keysanity[player]:
|
||||
location_table.update({**green_hill_chao_location_table})
|
||||
|
||||
if world.animalsanity[player]:
|
||||
location_table.update({**green_hill_animal_location_table})
|
||||
|
||||
if world.goal[player].value in [4, 5, 6]:
|
||||
location_table.update({**boss_rush_location_table})
|
||||
|
||||
if world.chao_garden_difficulty[player].value >= 1:
|
||||
chao_location_table.update({**chao_garden_beginner_location_table})
|
||||
if world.chao_garden_difficulty[player].value >= 2:
|
||||
|
|
|
@ -190,7 +190,7 @@ stage_name_prefixes: typing.List[str] = [
|
|||
"Mad Space - ",
|
||||
"Cosmic Wall - ",
|
||||
"Final Chase - ",
|
||||
"Cannon Core - ",
|
||||
"Cannon's Core - ",
|
||||
]
|
||||
|
||||
def get_mission_count_table(multiworld: MultiWorld, player: int):
|
||||
|
@ -290,9 +290,13 @@ def get_mission_table(multiworld: MultiWorld, player: int):
|
|||
|
||||
# The first mission must be M1, M2, M3, or M4
|
||||
first_mission = 1
|
||||
first_mission_options = [1, 2, 3]
|
||||
|
||||
if not multiworld.animalsanity[player]:
|
||||
first_mission_options.append(4)
|
||||
|
||||
if multiworld.mission_shuffle[player]:
|
||||
first_mission = multiworld.random.choice([mission for mission in level_active_missions if mission in [1, 2, 3, 4]])
|
||||
first_mission = multiworld.random.choice([mission for mission in level_active_missions if mission in first_mission_options])
|
||||
|
||||
level_active_missions.remove(first_mission)
|
||||
|
||||
|
|
|
@ -51,6 +51,10 @@ tiny_trap = "Tiny Trap"
|
|||
gravity_trap = "Gravity Trap"
|
||||
exposition_trap = "Exposition Trap"
|
||||
darkness_trap = "Darkness Trap"
|
||||
ice_trap = "Ice Trap"
|
||||
slow_trap = "Slow Trap"
|
||||
cutscene_trap = "Cutscene Trap"
|
||||
|
||||
pong_trap = "Pong Trap"
|
||||
|
||||
white_emerald = "White Chaos Emerald"
|
||||
|
|
|
@ -31,6 +31,26 @@ city_escape_omo_12 = "City Escape - Omochao 12"
|
|||
city_escape_omo_13 = "City Escape - Omochao 13"
|
||||
city_escape_omo_14 = "City Escape - Omochao 14"
|
||||
city_escape_beetle = "City Escape - Gold Beetle"
|
||||
city_escape_animal_1 = "City Escape - 1 Animal"
|
||||
city_escape_animal_2 = "City Escape - 2 Animals"
|
||||
city_escape_animal_3 = "City Escape - 3 Animals"
|
||||
city_escape_animal_4 = "City Escape - 4 Animals"
|
||||
city_escape_animal_5 = "City Escape - 5 Animals"
|
||||
city_escape_animal_6 = "City Escape - 6 Animals"
|
||||
city_escape_animal_7 = "City Escape - 7 Animals"
|
||||
city_escape_animal_8 = "City Escape - 8 Animals"
|
||||
city_escape_animal_9 = "City Escape - 9 Animals"
|
||||
city_escape_animal_10 = "City Escape - 10 Animals"
|
||||
city_escape_animal_11 = "City Escape - 11 Animals"
|
||||
city_escape_animal_12 = "City Escape - 12 Animals"
|
||||
city_escape_animal_13 = "City Escape - 13 Animals"
|
||||
city_escape_animal_14 = "City Escape - 14 Animals"
|
||||
city_escape_animal_15 = "City Escape - 15 Animals"
|
||||
city_escape_animal_16 = "City Escape - 16 Animals"
|
||||
city_escape_animal_17 = "City Escape - 17 Animals"
|
||||
city_escape_animal_18 = "City Escape - 18 Animals"
|
||||
city_escape_animal_19 = "City Escape - 19 Animals"
|
||||
city_escape_animal_20 = "City Escape - 20 Animals"
|
||||
city_escape_upgrade = "City Escape - Upgrade"
|
||||
metal_harbor_1 = "Metal Harbor - 1"
|
||||
metal_harbor_2 = "Metal Harbor - 2"
|
||||
|
@ -47,6 +67,20 @@ metal_harbor_omo_3 = "Metal Harbor - Omochao 3"
|
|||
metal_harbor_omo_4 = "Metal Harbor - Omochao 4"
|
||||
metal_harbor_omo_5 = "Metal Harbor - Omochao 5"
|
||||
metal_harbor_beetle = "Metal Harbor - Gold Beetle"
|
||||
metal_harbor_animal_1 = "Metal Harbor - 1 Animal"
|
||||
metal_harbor_animal_2 = "Metal Harbor - 2 Animals"
|
||||
metal_harbor_animal_3 = "Metal Harbor - 3 Animals"
|
||||
metal_harbor_animal_4 = "Metal Harbor - 4 Animals"
|
||||
metal_harbor_animal_5 = "Metal Harbor - 5 Animals"
|
||||
metal_harbor_animal_6 = "Metal Harbor - 6 Animals"
|
||||
metal_harbor_animal_7 = "Metal Harbor - 7 Animals"
|
||||
metal_harbor_animal_8 = "Metal Harbor - 8 Animals"
|
||||
metal_harbor_animal_9 = "Metal Harbor - 9 Animals"
|
||||
metal_harbor_animal_10 = "Metal Harbor - 10 Animals"
|
||||
metal_harbor_animal_11 = "Metal Harbor - 11 Animals"
|
||||
metal_harbor_animal_12 = "Metal Harbor - 12 Animals"
|
||||
metal_harbor_animal_13 = "Metal Harbor - 13 Animals"
|
||||
metal_harbor_animal_14 = "Metal Harbor - 14 Animals"
|
||||
metal_harbor_upgrade = "Metal Harbor - Upgrade"
|
||||
green_forest_1 = "Green Forest - 1"
|
||||
green_forest_2 = "Green Forest - 2"
|
||||
|
@ -63,6 +97,24 @@ green_forest_hidden_2 = "Green Forest - Hidden 2"
|
|||
green_forest_hidden_3 = "Green Forest - Hidden 3"
|
||||
green_forest_hidden_4 = "Green Forest - Hidden 4"
|
||||
green_forest_beetle = "Green Forest - Gold Beetle"
|
||||
green_forest_animal_1 = "Green Forest - 1 Animal"
|
||||
green_forest_animal_2 = "Green Forest - 2 Animals"
|
||||
green_forest_animal_3 = "Green Forest - 3 Animals"
|
||||
green_forest_animal_4 = "Green Forest - 4 Animals"
|
||||
green_forest_animal_5 = "Green Forest - 5 Animals"
|
||||
green_forest_animal_6 = "Green Forest - 6 Animals"
|
||||
green_forest_animal_7 = "Green Forest - 7 Animals"
|
||||
green_forest_animal_8 = "Green Forest - 8 Animals"
|
||||
green_forest_animal_9 = "Green Forest - 9 Animals"
|
||||
green_forest_animal_10 = "Green Forest - 10 Animals"
|
||||
green_forest_animal_11 = "Green Forest - 11 Animals"
|
||||
green_forest_animal_12 = "Green Forest - 12 Animals"
|
||||
green_forest_animal_13 = "Green Forest - 13 Animals"
|
||||
green_forest_animal_14 = "Green Forest - 14 Animals"
|
||||
green_forest_animal_15 = "Green Forest - 15 Animals"
|
||||
green_forest_animal_16 = "Green Forest - 16 Animals"
|
||||
green_forest_animal_17 = "Green Forest - 17 Animals"
|
||||
green_forest_animal_18 = "Green Forest - 18 Animals"
|
||||
green_forest_upgrade = "Green Forest - Upgrade"
|
||||
pyramid_cave_1 = "Pyramid Cave - 1"
|
||||
pyramid_cave_2 = "Pyramid Cave - 2"
|
||||
|
@ -81,6 +133,25 @@ pyramid_cave_omo_2 = "Pyramid Cave - Omochao 2"
|
|||
pyramid_cave_omo_3 = "Pyramid Cave - Omochao 3"
|
||||
pyramid_cave_omo_4 = "Pyramid Cave - Omochao 4"
|
||||
pyramid_cave_beetle = "Pyramid Cave - Gold Beetle"
|
||||
pyramid_cave_animal_1 = "Pyramid Cave - 1 Animal"
|
||||
pyramid_cave_animal_2 = "Pyramid Cave - 2 Animals"
|
||||
pyramid_cave_animal_3 = "Pyramid Cave - 3 Animals"
|
||||
pyramid_cave_animal_4 = "Pyramid Cave - 4 Animals"
|
||||
pyramid_cave_animal_5 = "Pyramid Cave - 5 Animals"
|
||||
pyramid_cave_animal_6 = "Pyramid Cave - 6 Animals"
|
||||
pyramid_cave_animal_7 = "Pyramid Cave - 7 Animals"
|
||||
pyramid_cave_animal_8 = "Pyramid Cave - 8 Animals"
|
||||
pyramid_cave_animal_9 = "Pyramid Cave - 9 Animals"
|
||||
pyramid_cave_animal_10 = "Pyramid Cave - 10 Animals"
|
||||
pyramid_cave_animal_11 = "Pyramid Cave - 11 Animals"
|
||||
pyramid_cave_animal_12 = "Pyramid Cave - 12 Animals"
|
||||
pyramid_cave_animal_13 = "Pyramid Cave - 13 Animals"
|
||||
pyramid_cave_animal_14 = "Pyramid Cave - 14 Animals"
|
||||
pyramid_cave_animal_15 = "Pyramid Cave - 15 Animals"
|
||||
pyramid_cave_animal_16 = "Pyramid Cave - 16 Animals"
|
||||
pyramid_cave_animal_17 = "Pyramid Cave - 17 Animals"
|
||||
pyramid_cave_animal_18 = "Pyramid Cave - 18 Animals"
|
||||
pyramid_cave_animal_19 = "Pyramid Cave - 19 Animals"
|
||||
pyramid_cave_upgrade = "Pyramid Cave - Upgrade"
|
||||
crazy_gadget_1 = "Crazy Gadget - 1"
|
||||
crazy_gadget_2 = "Crazy Gadget - 2"
|
||||
|
@ -109,6 +180,22 @@ crazy_gadget_omo_11 = "Crazy Gadget - Omochao 11"
|
|||
crazy_gadget_omo_12 = "Crazy Gadget - Omochao 12"
|
||||
crazy_gadget_omo_13 = "Crazy Gadget - Omochao 13"
|
||||
crazy_gadget_beetle = "Crazy Gadget - Gold Beetle"
|
||||
crazy_gadget_animal_1 = "Crazy Gadget - 1 Animal"
|
||||
crazy_gadget_animal_2 = "Crazy Gadget - 2 Animals"
|
||||
crazy_gadget_animal_3 = "Crazy Gadget - 3 Animals"
|
||||
crazy_gadget_animal_4 = "Crazy Gadget - 4 Animals"
|
||||
crazy_gadget_animal_5 = "Crazy Gadget - 5 Animals"
|
||||
crazy_gadget_animal_6 = "Crazy Gadget - 6 Animals"
|
||||
crazy_gadget_animal_7 = "Crazy Gadget - 7 Animals"
|
||||
crazy_gadget_animal_8 = "Crazy Gadget - 8 Animals"
|
||||
crazy_gadget_animal_9 = "Crazy Gadget - 9 Animals"
|
||||
crazy_gadget_animal_10 = "Crazy Gadget - 10 Animals"
|
||||
crazy_gadget_animal_11 = "Crazy Gadget - 11 Animals"
|
||||
crazy_gadget_animal_12 = "Crazy Gadget - 12 Animals"
|
||||
crazy_gadget_animal_13 = "Crazy Gadget - 13 Animals"
|
||||
crazy_gadget_animal_14 = "Crazy Gadget - 14 Animals"
|
||||
crazy_gadget_animal_15 = "Crazy Gadget - 15 Animals"
|
||||
crazy_gadget_animal_16 = "Crazy Gadget - 16 Animals"
|
||||
crazy_gadget_upgrade = "Crazy Gadget - Upgrade"
|
||||
final_rush_1 = "Final Rush - 1"
|
||||
final_rush_2 = "Final Rush - 2"
|
||||
|
@ -124,6 +211,22 @@ final_rush_omo_1 = "Final Rush - Omochao 1"
|
|||
final_rush_omo_2 = "Final Rush - Omochao 2"
|
||||
final_rush_omo_3 = "Final Rush - Omochao 3"
|
||||
final_rush_beetle = "Final Rush - Gold Beetle"
|
||||
final_rush_animal_1 = "Final Rush - 1 Animal"
|
||||
final_rush_animal_2 = "Final Rush - 2 Animals"
|
||||
final_rush_animal_3 = "Final Rush - 3 Animals"
|
||||
final_rush_animal_4 = "Final Rush - 4 Animals"
|
||||
final_rush_animal_5 = "Final Rush - 5 Animals"
|
||||
final_rush_animal_6 = "Final Rush - 6 Animals"
|
||||
final_rush_animal_7 = "Final Rush - 7 Animals"
|
||||
final_rush_animal_8 = "Final Rush - 8 Animals"
|
||||
final_rush_animal_9 = "Final Rush - 9 Animals"
|
||||
final_rush_animal_10 = "Final Rush - 10 Animals"
|
||||
final_rush_animal_11 = "Final Rush - 11 Animals"
|
||||
final_rush_animal_12 = "Final Rush - 12 Animals"
|
||||
final_rush_animal_13 = "Final Rush - 13 Animals"
|
||||
final_rush_animal_14 = "Final Rush - 14 Animals"
|
||||
final_rush_animal_15 = "Final Rush - 15 Animals"
|
||||
final_rush_animal_16 = "Final Rush - 16 Animals"
|
||||
final_rush_upgrade = "Final Rush - Upgrade"
|
||||
|
||||
# Tails Mission Definitions
|
||||
|
@ -152,6 +255,21 @@ prison_lane_omo_8 = "Prison Lane - Omochao 8"
|
|||
prison_lane_omo_9 = "Prison Lane - Omochao 9"
|
||||
prison_lane_omo_10 = "Prison Lane - Omochao 10"
|
||||
prison_lane_beetle = "Prison Lane - Gold Beetle"
|
||||
prison_lane_animal_1 = "Prison Lane - 1 Animal"
|
||||
prison_lane_animal_2 = "Prison Lane - 2 Animals"
|
||||
prison_lane_animal_3 = "Prison Lane - 3 Animals"
|
||||
prison_lane_animal_4 = "Prison Lane - 4 Animals"
|
||||
prison_lane_animal_5 = "Prison Lane - 5 Animals"
|
||||
prison_lane_animal_6 = "Prison Lane - 6 Animals"
|
||||
prison_lane_animal_7 = "Prison Lane - 7 Animals"
|
||||
prison_lane_animal_8 = "Prison Lane - 8 Animals"
|
||||
prison_lane_animal_9 = "Prison Lane - 9 Animals"
|
||||
prison_lane_animal_10 = "Prison Lane - 10 Animals"
|
||||
prison_lane_animal_11 = "Prison Lane - 11 Animals"
|
||||
prison_lane_animal_12 = "Prison Lane - 12 Animals"
|
||||
prison_lane_animal_13 = "Prison Lane - 13 Animals"
|
||||
prison_lane_animal_14 = "Prison Lane - 14 Animals"
|
||||
prison_lane_animal_15 = "Prison Lane - 15 Animals"
|
||||
prison_lane_upgrade = "Prison Lane - Upgrade"
|
||||
mission_street_1 = "Mission Street - 1"
|
||||
mission_street_2 = "Mission Street - 2"
|
||||
|
@ -177,6 +295,22 @@ mission_street_omo_6 = "Mission Street - Omochao 6"
|
|||
mission_street_omo_7 = "Mission Street - Omochao 7"
|
||||
mission_street_omo_8 = "Mission Street - Omochao 8"
|
||||
mission_street_beetle = "Mission Street - Gold Beetle"
|
||||
mission_street_animal_1 = "Mission Street - 1 Animal"
|
||||
mission_street_animal_2 = "Mission Street - 2 Animals"
|
||||
mission_street_animal_3 = "Mission Street - 3 Animals"
|
||||
mission_street_animal_4 = "Mission Street - 4 Animals"
|
||||
mission_street_animal_5 = "Mission Street - 5 Animals"
|
||||
mission_street_animal_6 = "Mission Street - 6 Animals"
|
||||
mission_street_animal_7 = "Mission Street - 7 Animals"
|
||||
mission_street_animal_8 = "Mission Street - 8 Animals"
|
||||
mission_street_animal_9 = "Mission Street - 9 Animals"
|
||||
mission_street_animal_10 = "Mission Street - 10 Animals"
|
||||
mission_street_animal_11 = "Mission Street - 11 Animals"
|
||||
mission_street_animal_12 = "Mission Street - 12 Animals"
|
||||
mission_street_animal_13 = "Mission Street - 13 Animals"
|
||||
mission_street_animal_14 = "Mission Street - 14 Animals"
|
||||
mission_street_animal_15 = "Mission Street - 15 Animals"
|
||||
mission_street_animal_16 = "Mission Street - 16 Animals"
|
||||
mission_street_upgrade = "Mission Street - Upgrade"
|
||||
route_101_1 = "Route 101 - 1"
|
||||
route_101_2 = "Route 101 - 2"
|
||||
|
@ -200,6 +334,21 @@ hidden_base_omo_2 = "Hidden Base - Omochao 2"
|
|||
hidden_base_omo_3 = "Hidden Base - Omochao 3"
|
||||
hidden_base_omo_4 = "Hidden Base - Omochao 4"
|
||||
hidden_base_beetle = "Hidden Base - Gold Beetle"
|
||||
hidden_base_animal_1 = "Hidden Base - 1 Animal"
|
||||
hidden_base_animal_2 = "Hidden Base - 2 Animals"
|
||||
hidden_base_animal_3 = "Hidden Base - 3 Animals"
|
||||
hidden_base_animal_4 = "Hidden Base - 4 Animals"
|
||||
hidden_base_animal_5 = "Hidden Base - 5 Animals"
|
||||
hidden_base_animal_6 = "Hidden Base - 6 Animals"
|
||||
hidden_base_animal_7 = "Hidden Base - 7 Animals"
|
||||
hidden_base_animal_8 = "Hidden Base - 8 Animals"
|
||||
hidden_base_animal_9 = "Hidden Base - 9 Animals"
|
||||
hidden_base_animal_10 = "Hidden Base - 10 Animals"
|
||||
hidden_base_animal_11 = "Hidden Base - 11 Animals"
|
||||
hidden_base_animal_12 = "Hidden Base - 12 Animals"
|
||||
hidden_base_animal_13 = "Hidden Base - 13 Animals"
|
||||
hidden_base_animal_14 = "Hidden Base - 14 Animals"
|
||||
hidden_base_animal_15 = "Hidden Base - 15 Animals"
|
||||
hidden_base_upgrade = "Hidden Base - Upgrade"
|
||||
eternal_engine_1 = "Eternal Engine - 1"
|
||||
eternal_engine_2 = "Eternal Engine - 2"
|
||||
|
@ -227,6 +376,21 @@ eternal_engine_omo_10 = "Eternal Engine - Omochao 10"
|
|||
eternal_engine_omo_11 = "Eternal Engine - Omochao 11"
|
||||
eternal_engine_omo_12 = "Eternal Engine - Omochao 12"
|
||||
eternal_engine_beetle = "Eternal Engine - Gold Beetle"
|
||||
eternal_engine_animal_1 = "Eternal Engine - 1 Animal"
|
||||
eternal_engine_animal_2 = "Eternal Engine - 2 Animals"
|
||||
eternal_engine_animal_3 = "Eternal Engine - 3 Animals"
|
||||
eternal_engine_animal_4 = "Eternal Engine - 4 Animals"
|
||||
eternal_engine_animal_5 = "Eternal Engine - 5 Animals"
|
||||
eternal_engine_animal_6 = "Eternal Engine - 6 Animals"
|
||||
eternal_engine_animal_7 = "Eternal Engine - 7 Animals"
|
||||
eternal_engine_animal_8 = "Eternal Engine - 8 Animals"
|
||||
eternal_engine_animal_9 = "Eternal Engine - 9 Animals"
|
||||
eternal_engine_animal_10 = "Eternal Engine - 10 Animals"
|
||||
eternal_engine_animal_11 = "Eternal Engine - 11 Animals"
|
||||
eternal_engine_animal_12 = "Eternal Engine - 12 Animals"
|
||||
eternal_engine_animal_13 = "Eternal Engine - 13 Animals"
|
||||
eternal_engine_animal_14 = "Eternal Engine - 14 Animals"
|
||||
eternal_engine_animal_15 = "Eternal Engine - 15 Animals"
|
||||
eternal_engine_upgrade = "Eternal Engine - Upgrade"
|
||||
|
||||
# Knuckles Mission Definitions
|
||||
|
@ -252,6 +416,16 @@ wild_canyon_omo_8 = "Wild Canyon - Omochao 8"
|
|||
wild_canyon_omo_9 = "Wild Canyon - Omochao 9"
|
||||
wild_canyon_omo_10 = "Wild Canyon - Omochao 10"
|
||||
wild_canyon_beetle = "Wild Canyon - Gold Beetle"
|
||||
wild_canyon_animal_1 = "Wild Canyon - 1 Animal"
|
||||
wild_canyon_animal_2 = "Wild Canyon - 2 Animals"
|
||||
wild_canyon_animal_3 = "Wild Canyon - 3 Animals"
|
||||
wild_canyon_animal_4 = "Wild Canyon - 4 Animals"
|
||||
wild_canyon_animal_5 = "Wild Canyon - 5 Animals"
|
||||
wild_canyon_animal_6 = "Wild Canyon - 6 Animals"
|
||||
wild_canyon_animal_7 = "Wild Canyon - 7 Animals"
|
||||
wild_canyon_animal_8 = "Wild Canyon - 8 Animals"
|
||||
wild_canyon_animal_9 = "Wild Canyon - 9 Animals"
|
||||
wild_canyon_animal_10 = "Wild Canyon - 10 Animals"
|
||||
wild_canyon_upgrade = "Wild Canyon - Upgrade"
|
||||
pumpkin_hill_1 = "Pumpkin Hill - 1"
|
||||
pumpkin_hill_2 = "Pumpkin Hill - 2"
|
||||
|
@ -274,6 +448,17 @@ pumpkin_hill_omo_8 = "Pumpkin Hill - Omochao 8"
|
|||
pumpkin_hill_omo_9 = "Pumpkin Hill - Omochao 9"
|
||||
pumpkin_hill_omo_10 = "Pumpkin Hill - Omochao 10"
|
||||
pumpkin_hill_omo_11 = "Pumpkin Hill - Omochao 11"
|
||||
pumpkin_hill_animal_1 = "Pumpkin Hill - 1 Animal"
|
||||
pumpkin_hill_animal_2 = "Pumpkin Hill - 2 Animals"
|
||||
pumpkin_hill_animal_3 = "Pumpkin Hill - 3 Animals"
|
||||
pumpkin_hill_animal_4 = "Pumpkin Hill - 4 Animals"
|
||||
pumpkin_hill_animal_5 = "Pumpkin Hill - 5 Animals"
|
||||
pumpkin_hill_animal_6 = "Pumpkin Hill - 6 Animals"
|
||||
pumpkin_hill_animal_7 = "Pumpkin Hill - 7 Animals"
|
||||
pumpkin_hill_animal_8 = "Pumpkin Hill - 8 Animals"
|
||||
pumpkin_hill_animal_9 = "Pumpkin Hill - 9 Animals"
|
||||
pumpkin_hill_animal_10 = "Pumpkin Hill - 10 Animals"
|
||||
pumpkin_hill_animal_11 = "Pumpkin Hill - 11 Animals"
|
||||
pumpkin_hill_upgrade = "Pumpkin Hill - Upgrade"
|
||||
aquatic_mine_1 = "Aquatic Mine - 1"
|
||||
aquatic_mine_2 = "Aquatic Mine - 2"
|
||||
|
@ -294,6 +479,16 @@ aquatic_mine_omo_5 = "Aquatic Mine - Omochao 5"
|
|||
aquatic_mine_omo_6 = "Aquatic Mine - Omochao 6"
|
||||
aquatic_mine_omo_7 = "Aquatic Mine - Omochao 7"
|
||||
aquatic_mine_beetle = "Aquatic Mine - Gold Beetle"
|
||||
aquatic_mine_animal_1 = "Aquatic Mine - 1 Animal"
|
||||
aquatic_mine_animal_2 = "Aquatic Mine - 2 Animals"
|
||||
aquatic_mine_animal_3 = "Aquatic Mine - 3 Animals"
|
||||
aquatic_mine_animal_4 = "Aquatic Mine - 4 Animals"
|
||||
aquatic_mine_animal_5 = "Aquatic Mine - 5 Animals"
|
||||
aquatic_mine_animal_6 = "Aquatic Mine - 6 Animals"
|
||||
aquatic_mine_animal_7 = "Aquatic Mine - 7 Animals"
|
||||
aquatic_mine_animal_8 = "Aquatic Mine - 8 Animals"
|
||||
aquatic_mine_animal_9 = "Aquatic Mine - 9 Animals"
|
||||
aquatic_mine_animal_10 = "Aquatic Mine - 10 Animals"
|
||||
aquatic_mine_upgrade = "Aquatic Mine - Upgrade"
|
||||
death_chamber_1 = "Death Chamber - 1"
|
||||
death_chamber_2 = "Death Chamber - 2"
|
||||
|
@ -318,6 +513,16 @@ death_chamber_omo_7 = "Death Chamber - Omochao 7"
|
|||
death_chamber_omo_8 = "Death Chamber - Omochao 8"
|
||||
death_chamber_omo_9 = "Death Chamber - Omochao 9"
|
||||
death_chamber_beetle = "Death Chamber - Gold Beetle"
|
||||
death_chamber_animal_1 = "Death Chamber - 1 Animal"
|
||||
death_chamber_animal_2 = "Death Chamber - 2 Animals"
|
||||
death_chamber_animal_3 = "Death Chamber - 3 Animals"
|
||||
death_chamber_animal_4 = "Death Chamber - 4 Animals"
|
||||
death_chamber_animal_5 = "Death Chamber - 5 Animals"
|
||||
death_chamber_animal_6 = "Death Chamber - 6 Animals"
|
||||
death_chamber_animal_7 = "Death Chamber - 7 Animals"
|
||||
death_chamber_animal_8 = "Death Chamber - 8 Animals"
|
||||
death_chamber_animal_9 = "Death Chamber - 9 Animals"
|
||||
death_chamber_animal_10 = "Death Chamber - 10 Animals"
|
||||
death_chamber_upgrade = "Death Chamber - Upgrade"
|
||||
meteor_herd_1 = "Meteor Herd - 1"
|
||||
meteor_herd_2 = "Meteor Herd - 2"
|
||||
|
@ -334,6 +539,17 @@ meteor_herd_omo_1 = "Meteor Herd - Omochao 1"
|
|||
meteor_herd_omo_2 = "Meteor Herd - Omochao 2"
|
||||
meteor_herd_omo_3 = "Meteor Herd - Omochao 3"
|
||||
meteor_herd_beetle = "Meteor Herd - Gold Beetle"
|
||||
meteor_herd_animal_1 = "Meteor Herd - 1 Animal"
|
||||
meteor_herd_animal_2 = "Meteor Herd - 2 Animals"
|
||||
meteor_herd_animal_3 = "Meteor Herd - 3 Animals"
|
||||
meteor_herd_animal_4 = "Meteor Herd - 4 Animals"
|
||||
meteor_herd_animal_5 = "Meteor Herd - 5 Animals"
|
||||
meteor_herd_animal_6 = "Meteor Herd - 6 Animals"
|
||||
meteor_herd_animal_7 = "Meteor Herd - 7 Animals"
|
||||
meteor_herd_animal_8 = "Meteor Herd - 8 Animals"
|
||||
meteor_herd_animal_9 = "Meteor Herd - 9 Animals"
|
||||
meteor_herd_animal_10 = "Meteor Herd - 10 Animals"
|
||||
meteor_herd_animal_11 = "Meteor Herd - 11 Animals"
|
||||
meteor_herd_upgrade = "Meteor Herd - Upgrade"
|
||||
|
||||
|
||||
|
@ -361,6 +577,26 @@ radical_highway_omo_6 = "Radical Highway - Omochao 6"
|
|||
radical_highway_omo_7 = "Radical Highway - Omochao 7"
|
||||
radical_highway_omo_8 = "Radical Highway - Omochao 8"
|
||||
radical_highway_beetle = "Radical Highway - Gold Beetle"
|
||||
radical_highway_animal_1 = "Radical Highway - 1 Animal"
|
||||
radical_highway_animal_2 = "Radical Highway - 2 Animals"
|
||||
radical_highway_animal_3 = "Radical Highway - 3 Animals"
|
||||
radical_highway_animal_4 = "Radical Highway - 4 Animals"
|
||||
radical_highway_animal_5 = "Radical Highway - 5 Animals"
|
||||
radical_highway_animal_6 = "Radical Highway - 6 Animals"
|
||||
radical_highway_animal_7 = "Radical Highway - 7 Animals"
|
||||
radical_highway_animal_8 = "Radical Highway - 8 Animals"
|
||||
radical_highway_animal_9 = "Radical Highway - 9 Animals"
|
||||
radical_highway_animal_10 = "Radical Highway - 10 Animals"
|
||||
radical_highway_animal_11 = "Radical Highway - 11 Animals"
|
||||
radical_highway_animal_12 = "Radical Highway - 12 Animals"
|
||||
radical_highway_animal_13 = "Radical Highway - 13 Animals"
|
||||
radical_highway_animal_14 = "Radical Highway - 14 Animals"
|
||||
radical_highway_animal_15 = "Radical Highway - 15 Animals"
|
||||
radical_highway_animal_16 = "Radical Highway - 16 Animals"
|
||||
radical_highway_animal_17 = "Radical Highway - 17 Animals"
|
||||
radical_highway_animal_18 = "Radical Highway - 18 Animals"
|
||||
radical_highway_animal_19 = "Radical Highway - 19 Animals"
|
||||
radical_highway_animal_20 = "Radical Highway - 20 Animals"
|
||||
radical_highway_upgrade = "Radical Highway - Upgrade"
|
||||
white_jungle_1 = "White Jungle - 1"
|
||||
white_jungle_2 = "White Jungle - 2"
|
||||
|
@ -383,6 +619,22 @@ white_jungle_omo_3 = "White Jungle - Omochao 3"
|
|||
white_jungle_omo_4 = "White Jungle - Omochao 4"
|
||||
white_jungle_omo_5 = "White Jungle - Omochao 5"
|
||||
white_jungle_beetle = "White Jungle - Gold Beetle"
|
||||
white_jungle_animal_1 = "White Jungle - 1 Animal"
|
||||
white_jungle_animal_2 = "White Jungle - 2 Animals"
|
||||
white_jungle_animal_3 = "White Jungle - 3 Animals"
|
||||
white_jungle_animal_4 = "White Jungle - 4 Animals"
|
||||
white_jungle_animal_5 = "White Jungle - 5 Animals"
|
||||
white_jungle_animal_6 = "White Jungle - 6 Animals"
|
||||
white_jungle_animal_7 = "White Jungle - 7 Animals"
|
||||
white_jungle_animal_8 = "White Jungle - 8 Animals"
|
||||
white_jungle_animal_9 = "White Jungle - 9 Animals"
|
||||
white_jungle_animal_10 = "White Jungle - 10 Animals"
|
||||
white_jungle_animal_11 = "White Jungle - 11 Animals"
|
||||
white_jungle_animal_12 = "White Jungle - 12 Animals"
|
||||
white_jungle_animal_13 = "White Jungle - 13 Animals"
|
||||
white_jungle_animal_14 = "White Jungle - 14 Animals"
|
||||
white_jungle_animal_15 = "White Jungle - 15 Animals"
|
||||
white_jungle_animal_16 = "White Jungle - 16 Animals"
|
||||
white_jungle_upgrade = "White Jungle - Upgrade"
|
||||
sky_rail_1 = "Sky Rail - 1"
|
||||
sky_rail_2 = "Sky Rail - 2"
|
||||
|
@ -399,6 +651,26 @@ sky_rail_pipe_4 = "Sky Rail - Pipe 4"
|
|||
sky_rail_pipe_5 = "Sky Rail - Pipe 5"
|
||||
sky_rail_pipe_6 = "Sky Rail - Pipe 6"
|
||||
sky_rail_beetle = "Sky Rail - Gold Beetle"
|
||||
sky_rail_animal_1 = "Sky Rail - 1 Animal"
|
||||
sky_rail_animal_2 = "Sky Rail - 2 Animals"
|
||||
sky_rail_animal_3 = "Sky Rail - 3 Animals"
|
||||
sky_rail_animal_4 = "Sky Rail - 4 Animals"
|
||||
sky_rail_animal_5 = "Sky Rail - 5 Animals"
|
||||
sky_rail_animal_6 = "Sky Rail - 6 Animals"
|
||||
sky_rail_animal_7 = "Sky Rail - 7 Animals"
|
||||
sky_rail_animal_8 = "Sky Rail - 8 Animals"
|
||||
sky_rail_animal_9 = "Sky Rail - 9 Animals"
|
||||
sky_rail_animal_10 = "Sky Rail - 10 Animals"
|
||||
sky_rail_animal_11 = "Sky Rail - 11 Animals"
|
||||
sky_rail_animal_12 = "Sky Rail - 12 Animals"
|
||||
sky_rail_animal_13 = "Sky Rail - 13 Animals"
|
||||
sky_rail_animal_14 = "Sky Rail - 14 Animals"
|
||||
sky_rail_animal_15 = "Sky Rail - 15 Animals"
|
||||
sky_rail_animal_16 = "Sky Rail - 16 Animals"
|
||||
sky_rail_animal_17 = "Sky Rail - 17 Animals"
|
||||
sky_rail_animal_18 = "Sky Rail - 18 Animals"
|
||||
sky_rail_animal_19 = "Sky Rail - 19 Animals"
|
||||
sky_rail_animal_20 = "Sky Rail - 20 Animals"
|
||||
sky_rail_upgrade = "Sky Rail - Upgrade"
|
||||
final_chase_1 = "Final Chase - 1"
|
||||
final_chase_2 = "Final Chase - 2"
|
||||
|
@ -413,6 +685,26 @@ final_chase_pipe_2 = "Final Chase - Pipe 2"
|
|||
final_chase_pipe_3 = "Final Chase - Pipe 3"
|
||||
final_chase_omo_1 = "Final Chase - Omochao 1"
|
||||
final_chase_beetle = "Final Chase - Gold Beetle"
|
||||
final_chase_animal_1 = "Final Chase - 1 Animal"
|
||||
final_chase_animal_2 = "Final Chase - 2 Animals"
|
||||
final_chase_animal_3 = "Final Chase - 3 Animals"
|
||||
final_chase_animal_4 = "Final Chase - 4 Animals"
|
||||
final_chase_animal_5 = "Final Chase - 5 Animals"
|
||||
final_chase_animal_6 = "Final Chase - 6 Animals"
|
||||
final_chase_animal_7 = "Final Chase - 7 Animals"
|
||||
final_chase_animal_8 = "Final Chase - 8 Animals"
|
||||
final_chase_animal_9 = "Final Chase - 9 Animals"
|
||||
final_chase_animal_10 = "Final Chase - 10 Animals"
|
||||
final_chase_animal_11 = "Final Chase - 11 Animals"
|
||||
final_chase_animal_12 = "Final Chase - 12 Animals"
|
||||
final_chase_animal_13 = "Final Chase - 13 Animals"
|
||||
final_chase_animal_14 = "Final Chase - 14 Animals"
|
||||
final_chase_animal_15 = "Final Chase - 15 Animals"
|
||||
final_chase_animal_16 = "Final Chase - 16 Animals"
|
||||
final_chase_animal_17 = "Final Chase - 17 Animals"
|
||||
final_chase_animal_18 = "Final Chase - 18 Animals"
|
||||
final_chase_animal_19 = "Final Chase - 19 Animals"
|
||||
final_chase_animal_20 = "Final Chase - 20 Animals"
|
||||
final_chase_upgrade = "Final Chase - Upgrade"
|
||||
|
||||
# Eggman Mission Definitions
|
||||
|
@ -436,6 +728,21 @@ iron_gate_omo_4 = "Iron Gate - Omochao 4"
|
|||
iron_gate_omo_5 = "Iron Gate - Omochao 5"
|
||||
iron_gate_omo_6 = "Iron Gate - Omochao 6"
|
||||
iron_gate_beetle = "Iron Gate - Gold Beetle"
|
||||
iron_gate_animal_1 = "Iron Gate - 1 Animal"
|
||||
iron_gate_animal_2 = "Iron Gate - 2 Animals"
|
||||
iron_gate_animal_3 = "Iron Gate - 3 Animals"
|
||||
iron_gate_animal_4 = "Iron Gate - 4 Animals"
|
||||
iron_gate_animal_5 = "Iron Gate - 5 Animals"
|
||||
iron_gate_animal_6 = "Iron Gate - 6 Animals"
|
||||
iron_gate_animal_7 = "Iron Gate - 7 Animals"
|
||||
iron_gate_animal_8 = "Iron Gate - 8 Animals"
|
||||
iron_gate_animal_9 = "Iron Gate - 9 Animals"
|
||||
iron_gate_animal_10 = "Iron Gate - 10 Animals"
|
||||
iron_gate_animal_11 = "Iron Gate - 11 Animals"
|
||||
iron_gate_animal_12 = "Iron Gate - 12 Animals"
|
||||
iron_gate_animal_13 = "Iron Gate - 13 Animals"
|
||||
iron_gate_animal_14 = "Iron Gate - 14 Animals"
|
||||
iron_gate_animal_15 = "Iron Gate - 15 Animals"
|
||||
iron_gate_upgrade = "Iron Gate - Upgrade"
|
||||
sand_ocean_1 = "Sand Ocean - 1"
|
||||
sand_ocean_2 = "Sand Ocean - 2"
|
||||
|
@ -453,6 +760,21 @@ sand_ocean_pipe_5 = "Sand Ocean - Pipe 5"
|
|||
sand_ocean_omo_1 = "Sand Ocean - Omochao 1"
|
||||
sand_ocean_omo_2 = "Sand Ocean - Omochao 2"
|
||||
sand_ocean_beetle = "Sand Ocean - Gold Beetle"
|
||||
sand_ocean_animal_1 = "Sand Ocean - 1 Animal"
|
||||
sand_ocean_animal_2 = "Sand Ocean - 2 Animals"
|
||||
sand_ocean_animal_3 = "Sand Ocean - 3 Animals"
|
||||
sand_ocean_animal_4 = "Sand Ocean - 4 Animals"
|
||||
sand_ocean_animal_5 = "Sand Ocean - 5 Animals"
|
||||
sand_ocean_animal_6 = "Sand Ocean - 6 Animals"
|
||||
sand_ocean_animal_7 = "Sand Ocean - 7 Animals"
|
||||
sand_ocean_animal_8 = "Sand Ocean - 8 Animals"
|
||||
sand_ocean_animal_9 = "Sand Ocean - 9 Animals"
|
||||
sand_ocean_animal_10 = "Sand Ocean - 10 Animals"
|
||||
sand_ocean_animal_11 = "Sand Ocean - 11 Animals"
|
||||
sand_ocean_animal_12 = "Sand Ocean - 12 Animals"
|
||||
sand_ocean_animal_13 = "Sand Ocean - 13 Animals"
|
||||
sand_ocean_animal_14 = "Sand Ocean - 14 Animals"
|
||||
sand_ocean_animal_15 = "Sand Ocean - 15 Animals"
|
||||
sand_ocean_upgrade = "Sand Ocean - Upgrade"
|
||||
lost_colony_1 = "Lost Colony - 1"
|
||||
lost_colony_2 = "Lost Colony - 2"
|
||||
|
@ -474,6 +796,20 @@ lost_colony_omo_6 = "Lost Colony - Omochao 6"
|
|||
lost_colony_omo_7 = "Lost Colony - Omochao 7"
|
||||
lost_colony_omo_8 = "Lost Colony - Omochao 8"
|
||||
lost_colony_beetle = "Lost Colony - Gold Beetle"
|
||||
lost_colony_animal_1 = "Lost Colony - 1 Animal"
|
||||
lost_colony_animal_2 = "Lost Colony - 2 Animals"
|
||||
lost_colony_animal_3 = "Lost Colony - 3 Animals"
|
||||
lost_colony_animal_4 = "Lost Colony - 4 Animals"
|
||||
lost_colony_animal_5 = "Lost Colony - 5 Animals"
|
||||
lost_colony_animal_6 = "Lost Colony - 6 Animals"
|
||||
lost_colony_animal_7 = "Lost Colony - 7 Animals"
|
||||
lost_colony_animal_8 = "Lost Colony - 8 Animals"
|
||||
lost_colony_animal_9 = "Lost Colony - 9 Animals"
|
||||
lost_colony_animal_10 = "Lost Colony - 10 Animals"
|
||||
lost_colony_animal_11 = "Lost Colony - 11 Animals"
|
||||
lost_colony_animal_12 = "Lost Colony - 12 Animals"
|
||||
lost_colony_animal_13 = "Lost Colony - 13 Animals"
|
||||
lost_colony_animal_14 = "Lost Colony - 14 Animals"
|
||||
lost_colony_upgrade = "Lost Colony - Upgrade"
|
||||
weapons_bed_1 = "Weapons Bed - 1"
|
||||
weapons_bed_2 = "Weapons Bed - 2"
|
||||
|
@ -491,6 +827,21 @@ weapons_bed_pipe_5 = "Weapons Bed - Pipe 5"
|
|||
weapons_bed_omo_1 = "Weapons Bed - Omochao 1"
|
||||
weapons_bed_omo_2 = "Weapons Bed - Omochao 2"
|
||||
weapons_bed_omo_3 = "Weapons Bed - Omochao 3"
|
||||
weapons_bed_animal_1 = "Weapons Bed - 1 Animal"
|
||||
weapons_bed_animal_2 = "Weapons Bed - 2 Animals"
|
||||
weapons_bed_animal_3 = "Weapons Bed - 3 Animals"
|
||||
weapons_bed_animal_4 = "Weapons Bed - 4 Animals"
|
||||
weapons_bed_animal_5 = "Weapons Bed - 5 Animals"
|
||||
weapons_bed_animal_6 = "Weapons Bed - 6 Animals"
|
||||
weapons_bed_animal_7 = "Weapons Bed - 7 Animals"
|
||||
weapons_bed_animal_8 = "Weapons Bed - 8 Animals"
|
||||
weapons_bed_animal_9 = "Weapons Bed - 9 Animals"
|
||||
weapons_bed_animal_10 = "Weapons Bed - 10 Animals"
|
||||
weapons_bed_animal_11 = "Weapons Bed - 11 Animals"
|
||||
weapons_bed_animal_12 = "Weapons Bed - 12 Animals"
|
||||
weapons_bed_animal_13 = "Weapons Bed - 13 Animals"
|
||||
weapons_bed_animal_14 = "Weapons Bed - 14 Animals"
|
||||
weapons_bed_animal_15 = "Weapons Bed - 15 Animals"
|
||||
weapons_bed_upgrade = "Weapons Bed - Upgrade"
|
||||
cosmic_wall_1 = "Cosmic Wall - 1"
|
||||
cosmic_wall_2 = "Cosmic Wall - 2"
|
||||
|
@ -507,6 +858,21 @@ cosmic_wall_pipe_4 = "Cosmic Wall - Pipe 4"
|
|||
cosmic_wall_pipe_5 = "Cosmic Wall - Pipe 5"
|
||||
cosmic_wall_omo_1 = "Cosmic Wall - Omochao 1"
|
||||
cosmic_wall_beetle = "Cosmic Wall - Gold Beetle"
|
||||
cosmic_wall_animal_1 = "Cosmic Wall - 1 Animal"
|
||||
cosmic_wall_animal_2 = "Cosmic Wall - 2 Animals"
|
||||
cosmic_wall_animal_3 = "Cosmic Wall - 3 Animals"
|
||||
cosmic_wall_animal_4 = "Cosmic Wall - 4 Animals"
|
||||
cosmic_wall_animal_5 = "Cosmic Wall - 5 Animals"
|
||||
cosmic_wall_animal_6 = "Cosmic Wall - 6 Animals"
|
||||
cosmic_wall_animal_7 = "Cosmic Wall - 7 Animals"
|
||||
cosmic_wall_animal_8 = "Cosmic Wall - 8 Animals"
|
||||
cosmic_wall_animal_9 = "Cosmic Wall - 9 Animals"
|
||||
cosmic_wall_animal_10 = "Cosmic Wall - 10 Animals"
|
||||
cosmic_wall_animal_11 = "Cosmic Wall - 11 Animals"
|
||||
cosmic_wall_animal_12 = "Cosmic Wall - 12 Animals"
|
||||
cosmic_wall_animal_13 = "Cosmic Wall - 13 Animals"
|
||||
cosmic_wall_animal_14 = "Cosmic Wall - 14 Animals"
|
||||
cosmic_wall_animal_15 = "Cosmic Wall - 15 Animals"
|
||||
cosmic_wall_upgrade = "Cosmic Wall - Upgrade"
|
||||
|
||||
# Rouge Mission Definitions
|
||||
|
@ -533,6 +899,16 @@ dry_lagoon_omo_10 = "Dry Lagoon - Omochao 10"
|
|||
dry_lagoon_omo_11 = "Dry Lagoon - Omochao 11"
|
||||
dry_lagoon_omo_12 = "Dry Lagoon - Omochao 12"
|
||||
dry_lagoon_beetle = "Dry Lagoon - Gold Beetle"
|
||||
dry_lagoon_animal_1 = "Dry Lagoon - 1 Animal"
|
||||
dry_lagoon_animal_2 = "Dry Lagoon - 2 Animals"
|
||||
dry_lagoon_animal_3 = "Dry Lagoon - 3 Animals"
|
||||
dry_lagoon_animal_4 = "Dry Lagoon - 4 Animals"
|
||||
dry_lagoon_animal_5 = "Dry Lagoon - 5 Animals"
|
||||
dry_lagoon_animal_6 = "Dry Lagoon - 6 Animals"
|
||||
dry_lagoon_animal_7 = "Dry Lagoon - 7 Animals"
|
||||
dry_lagoon_animal_8 = "Dry Lagoon - 8 Animals"
|
||||
dry_lagoon_animal_9 = "Dry Lagoon - 9 Animals"
|
||||
dry_lagoon_animal_10 = "Dry Lagoon - 10 Animals"
|
||||
dry_lagoon_upgrade = "Dry Lagoon - Upgrade"
|
||||
egg_quarters_1 = "Egg Quarters - 1"
|
||||
egg_quarters_2 = "Egg Quarters - 2"
|
||||
|
@ -554,6 +930,16 @@ egg_quarters_omo_5 = "Egg Quarters - Omochao 5"
|
|||
egg_quarters_omo_6 = "Egg Quarters - Omochao 6"
|
||||
egg_quarters_omo_7 = "Egg Quarters - Omochao 7"
|
||||
egg_quarters_beetle = "Egg Quarters - Gold Beetle"
|
||||
egg_quarters_animal_1 = "Egg Quarters - 1 Animal"
|
||||
egg_quarters_animal_2 = "Egg Quarters - 2 Animals"
|
||||
egg_quarters_animal_3 = "Egg Quarters - 3 Animals"
|
||||
egg_quarters_animal_4 = "Egg Quarters - 4 Animals"
|
||||
egg_quarters_animal_5 = "Egg Quarters - 5 Animals"
|
||||
egg_quarters_animal_6 = "Egg Quarters - 6 Animals"
|
||||
egg_quarters_animal_7 = "Egg Quarters - 7 Animals"
|
||||
egg_quarters_animal_8 = "Egg Quarters - 8 Animals"
|
||||
egg_quarters_animal_9 = "Egg Quarters - 9 Animals"
|
||||
egg_quarters_animal_10 = "Egg Quarters - 10 Animals"
|
||||
egg_quarters_upgrade = "Egg Quarters - Upgrade"
|
||||
security_hall_1 = "Security Hall - 1"
|
||||
security_hall_2 = "Security Hall - 2"
|
||||
|
@ -578,6 +964,14 @@ security_hall_omo_10 = "Security Hall - Omochao 10"
|
|||
security_hall_omo_11 = "Security Hall - Omochao 11"
|
||||
security_hall_omo_12 = "Security Hall - Omochao 12"
|
||||
security_hall_beetle = "Security Hall - Gold Beetle"
|
||||
security_hall_animal_1 = "Security Hall - 1 Animal"
|
||||
security_hall_animal_2 = "Security Hall - 2 Animals"
|
||||
security_hall_animal_3 = "Security Hall - 3 Animals"
|
||||
security_hall_animal_4 = "Security Hall - 4 Animals"
|
||||
security_hall_animal_5 = "Security Hall - 5 Animals"
|
||||
security_hall_animal_6 = "Security Hall - 6 Animals"
|
||||
security_hall_animal_7 = "Security Hall - 7 Animals"
|
||||
security_hall_animal_8 = "Security Hall - 8 Animals"
|
||||
security_hall_upgrade = "Security Hall - Upgrade"
|
||||
route_280_1 = "Route 280 - 1"
|
||||
route_280_2 = "Route 280 - 2"
|
||||
|
@ -602,33 +996,67 @@ mad_space_omo_3 = "Mad Space - Omochao 3"
|
|||
mad_space_omo_4 = "Mad Space - Omochao 4"
|
||||
mad_space_omo_5 = "Mad Space - Omochao 5"
|
||||
mad_space_beetle = "Mad Space - Gold Beetle"
|
||||
mad_space_animal_1 = "Mad Space - 1 Animal"
|
||||
mad_space_animal_2 = "Mad Space - 2 Animals"
|
||||
mad_space_animal_3 = "Mad Space - 3 Animals"
|
||||
mad_space_animal_4 = "Mad Space - 4 Animals"
|
||||
mad_space_animal_5 = "Mad Space - 5 Animals"
|
||||
mad_space_animal_6 = "Mad Space - 6 Animals"
|
||||
mad_space_animal_7 = "Mad Space - 7 Animals"
|
||||
mad_space_animal_8 = "Mad Space - 8 Animals"
|
||||
mad_space_animal_9 = "Mad Space - 9 Animals"
|
||||
mad_space_animal_10 = "Mad Space - 10 Animals"
|
||||
mad_space_upgrade = "Mad Space - Upgrade"
|
||||
|
||||
# Final Mission Definitions
|
||||
cannon_core_1 = "Cannon Core - 1"
|
||||
cannon_core_2 = "Cannon Core - 2"
|
||||
cannon_core_3 = "Cannon Core - 3"
|
||||
cannon_core_4 = "Cannon Core - 4"
|
||||
cannon_core_5 = "Cannon Core - 5"
|
||||
cannon_core_chao_1 = "Cannon Core - Chao Key 1"
|
||||
cannon_core_chao_2 = "Cannon Core - Chao Key 2"
|
||||
cannon_core_chao_3 = "Cannon Core - Chao Key 3"
|
||||
cannon_core_pipe_1 = "Cannon Core - Pipe 1"
|
||||
cannon_core_pipe_2 = "Cannon Core - Pipe 2"
|
||||
cannon_core_pipe_3 = "Cannon Core - Pipe 3"
|
||||
cannon_core_pipe_4 = "Cannon Core - Pipe 4"
|
||||
cannon_core_pipe_5 = "Cannon Core - Pipe 5"
|
||||
cannon_core_omo_1 = "Cannon Core - Omochao 1"
|
||||
cannon_core_omo_2 = "Cannon Core - Omochao 2"
|
||||
cannon_core_omo_3 = "Cannon Core - Omochao 3"
|
||||
cannon_core_omo_4 = "Cannon Core - Omochao 4"
|
||||
cannon_core_omo_5 = "Cannon Core - Omochao 5"
|
||||
cannon_core_omo_6 = "Cannon Core - Omochao 6"
|
||||
cannon_core_omo_7 = "Cannon Core - Omochao 7"
|
||||
cannon_core_omo_8 = "Cannon Core - Omochao 8"
|
||||
cannon_core_omo_9 = "Cannon Core - Omochao 9"
|
||||
cannon_core_hidden_1 = "Cannon Core - Hidden 1"
|
||||
cannon_core_beetle = "Cannon Core - Gold Beetle"
|
||||
cannon_core_1 = "Cannon's Core - 1"
|
||||
cannon_core_2 = "Cannon's Core - 2"
|
||||
cannon_core_3 = "Cannon's Core - 3"
|
||||
cannon_core_4 = "Cannon's Core - 4"
|
||||
cannon_core_5 = "Cannon's Core - 5"
|
||||
cannon_core_chao_1 = "Cannon's Core - Chao Key 1"
|
||||
cannon_core_chao_2 = "Cannon's Core - Chao Key 2"
|
||||
cannon_core_chao_3 = "Cannon's Core - Chao Key 3"
|
||||
cannon_core_pipe_1 = "Cannon's Core - Pipe 1"
|
||||
cannon_core_pipe_2 = "Cannon's Core - Pipe 2"
|
||||
cannon_core_pipe_3 = "Cannon's Core - Pipe 3"
|
||||
cannon_core_pipe_4 = "Cannon's Core - Pipe 4"
|
||||
cannon_core_pipe_5 = "Cannon's Core - Pipe 5"
|
||||
cannon_core_omo_1 = "Cannon's Core - Omochao 1"
|
||||
cannon_core_omo_2 = "Cannon's Core - Omochao 2"
|
||||
cannon_core_omo_3 = "Cannon's Core - Omochao 3"
|
||||
cannon_core_omo_4 = "Cannon's Core - Omochao 4"
|
||||
cannon_core_omo_5 = "Cannon's Core - Omochao 5"
|
||||
cannon_core_omo_6 = "Cannon's Core - Omochao 6"
|
||||
cannon_core_omo_7 = "Cannon's Core - Omochao 7"
|
||||
cannon_core_omo_8 = "Cannon's Core - Omochao 8"
|
||||
cannon_core_omo_9 = "Cannon's Core - Omochao 9"
|
||||
cannon_core_hidden_1 = "Cannon's Core - Hidden 1"
|
||||
cannon_core_beetle = "Cannon's Core - Gold Beetle"
|
||||
cannon_core_animal_1 = "Cannon's Core - 1 Animal"
|
||||
cannon_core_animal_2 = "Cannon's Core - 2 Animals"
|
||||
cannon_core_animal_3 = "Cannon's Core - 3 Animals"
|
||||
cannon_core_animal_4 = "Cannon's Core - 4 Animals"
|
||||
cannon_core_animal_5 = "Cannon's Core - 5 Animals"
|
||||
cannon_core_animal_6 = "Cannon's Core - 6 Animals"
|
||||
cannon_core_animal_7 = "Cannon's Core - 7 Animals"
|
||||
cannon_core_animal_8 = "Cannon's Core - 8 Animals"
|
||||
cannon_core_animal_9 = "Cannon's Core - 9 Animals"
|
||||
cannon_core_animal_10 = "Cannon's Core - 10 Animals"
|
||||
cannon_core_animal_11 = "Cannon's Core - 11 Animals"
|
||||
cannon_core_animal_12 = "Cannon's Core - 12 Animals"
|
||||
cannon_core_animal_13 = "Cannon's Core - 13 Animals"
|
||||
cannon_core_animal_14 = "Cannon's Core - 14 Animals"
|
||||
cannon_core_animal_15 = "Cannon's Core - 15 Animals"
|
||||
cannon_core_animal_16 = "Cannon's Core - 16 Animals"
|
||||
cannon_core_animal_17 = "Cannon's Core - 17 Animals"
|
||||
cannon_core_animal_18 = "Cannon's Core - 18 Animals"
|
||||
cannon_core_animal_19 = "Cannon's Core - 19 Animals"
|
||||
|
||||
# Green Hill Definitions
|
||||
green_hill = "Green Hill"
|
||||
green_hill_chao_1 = "Green Hill - Chao Key 1"
|
||||
green_hill_animal_1 = "Green Hill - 1 Animal"
|
||||
|
||||
# Boss Definitions
|
||||
gate_1_boss = "Gate 1 Boss"
|
||||
|
@ -637,6 +1065,23 @@ gate_3_boss = "Gate 3 Boss"
|
|||
gate_4_boss = "Gate 4 Boss"
|
||||
gate_5_boss = "Gate 5 Boss"
|
||||
|
||||
boss_rush_1 = "Boss Rush - 1"
|
||||
boss_rush_2 = "Boss Rush - 2"
|
||||
boss_rush_3 = "Boss Rush - 3"
|
||||
boss_rush_4 = "Boss Rush - 4"
|
||||
boss_rush_5 = "Boss Rush - 5"
|
||||
boss_rush_6 = "Boss Rush - 6"
|
||||
boss_rush_7 = "Boss Rush - 7"
|
||||
boss_rush_8 = "Boss Rush - 8"
|
||||
boss_rush_9 = "Boss Rush - 9"
|
||||
boss_rush_10 = "Boss Rush - 10"
|
||||
boss_rush_11 = "Boss Rush - 11"
|
||||
boss_rush_12 = "Boss Rush - 12"
|
||||
boss_rush_13 = "Boss Rush - 13"
|
||||
boss_rush_14 = "Boss Rush - 14"
|
||||
boss_rush_15 = "Boss Rush - 15"
|
||||
boss_rush_16 = "Boss Rush - 16"
|
||||
|
||||
# Chao Garden Definitions
|
||||
chao_race_crab_pool_1 = "Chao Race - Beginner - Crab Pool 1"
|
||||
chao_race_crab_pool_2 = "Chao Race - Beginner - Crab Pool 2"
|
||||
|
@ -735,8 +1180,6 @@ kart_race_standard = "Kart Race - Standard"
|
|||
kart_race_expert = "Kart Race - Expert"
|
||||
|
||||
# Other Definitions
|
||||
green_hill = "Green Hill"
|
||||
green_hill_chao_1 = "Green Hill - Chao Key 1"
|
||||
biolizard = "Biolizard"
|
||||
finalhazard = "Finalhazard"
|
||||
|
||||
|
@ -756,6 +1199,23 @@ gate_3_boss_region = "Gate 3 Boss"
|
|||
gate_4_boss_region = "Gate 4 Boss"
|
||||
gate_5_boss_region = "Gate 5 Boss"
|
||||
|
||||
boss_rush_1_region = "Boss Rush 1"
|
||||
boss_rush_2_region = "Boss Rush 2"
|
||||
boss_rush_3_region = "Boss Rush 3"
|
||||
boss_rush_4_region = "Boss Rush 4"
|
||||
boss_rush_5_region = "Boss Rush 5"
|
||||
boss_rush_6_region = "Boss Rush 6"
|
||||
boss_rush_7_region = "Boss Rush 7"
|
||||
boss_rush_8_region = "Boss Rush 8"
|
||||
boss_rush_9_region = "Boss Rush 9"
|
||||
boss_rush_10_region = "Boss Rush 10"
|
||||
boss_rush_11_region = "Boss Rush 11"
|
||||
boss_rush_12_region = "Boss Rush 12"
|
||||
boss_rush_13_region = "Boss Rush 13"
|
||||
boss_rush_14_region = "Boss Rush 14"
|
||||
boss_rush_15_region = "Boss Rush 15"
|
||||
boss_rush_16_region = "Boss Rush 16"
|
||||
|
||||
city_escape_region = "City Escape"
|
||||
metal_harbor_region = "Metal Harbor"
|
||||
green_forest_region = "Green Forest"
|
||||
|
@ -792,7 +1252,7 @@ security_hall_region = "Security Hall"
|
|||
route_280_region = "Route 280"
|
||||
mad_space_region = "Mad Space"
|
||||
|
||||
cannon_core_region = "Cannon Core"
|
||||
cannon_core_region = "Cannon's Core"
|
||||
|
||||
biolizard_region = "Biolizard"
|
||||
|
||||
|
|
|
@ -10,14 +10,29 @@ class Goal(Choice):
|
|||
Chaos Emerald Hunt: Find the Seven Chaos Emeralds and reach Green Hill Zone
|
||||
Finalhazard Chaos Emerald Hunt: Find the Seven Chaos Emeralds and reach Green Hill Zone, then defeat Finalhazard
|
||||
Grand Prix: Win every race in Kart Race Mode (all standard levels are disabled)
|
||||
Boss Rush: Beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
Cannon's Core Boss Rush: Beat Cannon's Core, then beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
Boss Rush Chaos Emerald Hunt: Find the Seven Chaos Emeralds, then beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
"""
|
||||
display_name = "Goal"
|
||||
option_biolizard = 0
|
||||
option_chaos_emerald_hunt = 1
|
||||
option_finalhazard_chaos_emerald_hunt = 2
|
||||
option_grand_prix = 3
|
||||
option_boss_rush = 4
|
||||
option_cannons_core_boss_rush = 5
|
||||
option_boss_rush_chaos_emerald_hunt = 6
|
||||
default = 0
|
||||
|
||||
@classmethod
|
||||
def get_option_name(cls, value) -> str:
|
||||
if cls.auto_display_name and value == 5:
|
||||
return "Cannon's Core Boss Rush"
|
||||
elif cls.auto_display_name:
|
||||
return cls.name_lookup[value].replace("_", " ").title()
|
||||
else:
|
||||
return cls.name_lookup[value]
|
||||
|
||||
|
||||
class MissionShuffle(Toggle):
|
||||
"""
|
||||
|
@ -26,6 +41,22 @@ class MissionShuffle(Toggle):
|
|||
display_name = "Mission Shuffle"
|
||||
|
||||
|
||||
class BossRushShuffle(Choice):
|
||||
"""
|
||||
Determines how bosses in Boss Rush Mode are shuffled
|
||||
Vanilla: Bosses appear in the Vanilla ordering
|
||||
Shuffled: The same bosses appear, but in a random order
|
||||
Chaos: Each boss is randomly chosen separately (one will always be King Boom Boo)
|
||||
Singularity: One boss is chosen and placed in every slot (one will always be replaced with King Boom Boo)
|
||||
"""
|
||||
display_name = "Boss Rush Shuffle"
|
||||
option_vanilla = 0
|
||||
option_shuffled = 1
|
||||
option_chaos = 2
|
||||
option_singularity = 3
|
||||
default = 0
|
||||
|
||||
|
||||
class BaseTrapWeight(Choice):
|
||||
"""
|
||||
Base Class for Trap Weights
|
||||
|
@ -86,6 +117,27 @@ class DarknessTrapWeight(BaseTrapWeight):
|
|||
display_name = "Darkness Trap Weight"
|
||||
|
||||
|
||||
class IceTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes the world slippery
|
||||
"""
|
||||
display_name = "Ice Trap Weight"
|
||||
|
||||
|
||||
class SlowTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes you gotta go slow
|
||||
"""
|
||||
display_name = "Slow Trap Weight"
|
||||
|
||||
|
||||
class CutsceneTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes you watch an unskippable cutscene
|
||||
"""
|
||||
display_name = "Cutscene Trap Weight"
|
||||
|
||||
|
||||
class PongTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of receiving a trap which forces you to play a Pong minigame
|
||||
|
@ -124,25 +176,10 @@ class TrapFillPercentage(Range):
|
|||
default = 0
|
||||
|
||||
|
||||
class IncludeMissions(Range):
|
||||
"""
|
||||
Allows logic to place items in a range of Missions for each level
|
||||
Each mission setting includes lower settings
|
||||
1: Base Story Missions
|
||||
2: 100 Ring Missions
|
||||
3: Lost Chao Missions
|
||||
4: Timer Missions
|
||||
5: Hard Mode Missions
|
||||
"""
|
||||
display_name = "Include Missions"
|
||||
range_start = 1
|
||||
range_end = 5
|
||||
default = 2
|
||||
|
||||
|
||||
class Keysanity(Toggle):
|
||||
"""
|
||||
Determines whether picking up Chao Keys grants checks
|
||||
(86 Locations)
|
||||
"""
|
||||
display_name = "Keysanity"
|
||||
|
||||
|
@ -151,9 +188,9 @@ class Whistlesanity(Choice):
|
|||
"""
|
||||
Determines whether whistling at various spots grants checks
|
||||
None: No Whistle Spots grant checks
|
||||
Pipes: Whistling at Pipes grants checks
|
||||
Hidden: Whistling at Hidden Whistle Spots grants checks
|
||||
Both: Whistling at both Pipes and Hidden Whistle Spots grants checks
|
||||
Pipes: Whistling at Pipes grants checks (97 Locations)
|
||||
Hidden: Whistling at Hidden Whistle Spots grants checks (32 Locations)
|
||||
Both: Whistling at both Pipes and Hidden Whistle Spots grants checks (129 Locations)
|
||||
"""
|
||||
display_name = "Whistlesanity"
|
||||
option_none = 0
|
||||
|
@ -166,6 +203,7 @@ class Whistlesanity(Choice):
|
|||
class Beetlesanity(Toggle):
|
||||
"""
|
||||
Determines whether destroying Gold Beetles grants checks
|
||||
(27 Locations)
|
||||
"""
|
||||
display_name = "Beetlesanity"
|
||||
|
||||
|
@ -173,10 +211,19 @@ class Beetlesanity(Toggle):
|
|||
class Omosanity(Toggle):
|
||||
"""
|
||||
Determines whether activating Omochao grants checks
|
||||
(192 Locations)
|
||||
"""
|
||||
display_name = "Omosanity"
|
||||
|
||||
|
||||
class Animalsanity(Toggle):
|
||||
"""
|
||||
Determines whether picking up counted small animals grants checks
|
||||
(420 Locations)
|
||||
"""
|
||||
display_name = "Animalsanity"
|
||||
|
||||
|
||||
class KartRaceChecks(Choice):
|
||||
"""
|
||||
Determines whether Kart Race Mode grants checks
|
||||
|
@ -236,6 +283,18 @@ class LevelGateCosts(Choice):
|
|||
default = 2
|
||||
|
||||
|
||||
class MaximumEmblemCap(Range):
|
||||
"""
|
||||
Determines the maximum number of emblems that can be in the item pool.
|
||||
If fewer available locations exist in the pool than this number, the number of available locations will be used instead.
|
||||
Gate and Cannon's Core costs will be calculated based off of that number.
|
||||
"""
|
||||
display_name = "Max Emblem Cap"
|
||||
range_start = 50
|
||||
range_end = 500
|
||||
default = 180
|
||||
|
||||
|
||||
class RequiredRank(Choice):
|
||||
"""
|
||||
Determines what minimum Rank is required to send a check for a mission
|
||||
|
@ -254,8 +313,8 @@ class ChaoGardenDifficulty(Choice):
|
|||
Determines the number of chao garden difficulty levels included. Easier difficulty settings means fewer chao garden checks
|
||||
None: No Chao Garden Activities have checks
|
||||
Beginner: Beginner Races
|
||||
Intermediate: Beginner and Jewel Races
|
||||
Expert: Beginner, Jewel, Challenge, Hero, and Dark Races
|
||||
Intermediate: Beginner, Challenge, Hero, and Dark Races
|
||||
Expert: Beginner, Challenge, Hero, Dark and Jewel Races
|
||||
"""
|
||||
display_name = "Chao Garden Difficulty"
|
||||
option_none = 0
|
||||
|
@ -287,7 +346,7 @@ class ChaoRaceChecks(Choice):
|
|||
|
||||
class RequiredCannonsCoreMissions(Choice):
|
||||
"""
|
||||
Determines how many Cannon's Core missions must be completed to unlock the Biolizard (for the "Biolizard" goal)
|
||||
Determines how many Cannon's Core missions must be completed (for Biolizard or Cannon's Core goals)
|
||||
First: Only the first mission must be completed
|
||||
All Active: All active Cannon's Core missions must be completed
|
||||
"""
|
||||
|
@ -502,6 +561,13 @@ class RingLoss(Choice):
|
|||
return cls.name_lookup[value]
|
||||
|
||||
|
||||
class RingLink(Toggle):
|
||||
"""
|
||||
Whether your in-level ring gain/loss is linked to other players
|
||||
"""
|
||||
display_name = "Ring Link"
|
||||
|
||||
|
||||
class SADXMusic(Choice):
|
||||
"""
|
||||
Whether the randomizer will include Sonic Adventure DX Music in the music pool
|
||||
|
@ -527,7 +593,7 @@ class SADXMusic(Choice):
|
|||
class MusicShuffle(Choice):
|
||||
"""
|
||||
What type of Music Shuffle is used
|
||||
Off: No music is shuffled.
|
||||
None: No music is shuffled.
|
||||
Levels: Level music is shuffled.
|
||||
Full: Level, Menu, and Additional music is shuffled.
|
||||
Singularity: Level, Menu, and Additional music is all replaced with a single random song.
|
||||
|
@ -540,6 +606,24 @@ class MusicShuffle(Choice):
|
|||
default = 0
|
||||
|
||||
|
||||
class VoiceShuffle(Choice):
|
||||
"""
|
||||
What type of Voice Shuffle is used
|
||||
None: No voices are shuffled.
|
||||
Shuffled: Voices are shuffled.
|
||||
Rude: Voices are shuffled, but some are replaced with rude words.
|
||||
Chao: All voices are replaced with chao sounds.
|
||||
Singularity: All voices are replaced with a single random voice.
|
||||
"""
|
||||
display_name = "Voice Shuffle Type"
|
||||
option_none = 0
|
||||
option_shuffled = 1
|
||||
option_rude = 2
|
||||
option_chao = 3
|
||||
option_singularity = 4
|
||||
default = 0
|
||||
|
||||
|
||||
class Narrator(Choice):
|
||||
"""
|
||||
Which menu narrator is used
|
||||
|
@ -574,10 +658,12 @@ class LogicDifficulty(Choice):
|
|||
sa2b_options: typing.Dict[str, type(Option)] = {
|
||||
"goal": Goal,
|
||||
"mission_shuffle": MissionShuffle,
|
||||
"boss_rush_shuffle": BossRushShuffle,
|
||||
"keysanity": Keysanity,
|
||||
"whistlesanity": Whistlesanity,
|
||||
"beetlesanity": Beetlesanity,
|
||||
"omosanity": Omosanity,
|
||||
"animalsanity": Animalsanity,
|
||||
"kart_race_checks": KartRaceChecks,
|
||||
"required_rank": RequiredRank,
|
||||
"emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore,
|
||||
|
@ -585,6 +671,7 @@ sa2b_options: typing.Dict[str, type(Option)] = {
|
|||
"number_of_level_gates": NumberOfLevelGates,
|
||||
"level_gate_distribution": LevelGateDistribution,
|
||||
"level_gate_costs": LevelGateCosts,
|
||||
"max_emblem_cap": MaximumEmblemCap,
|
||||
"chao_garden_difficulty": ChaoGardenDifficulty,
|
||||
"include_chao_karate": IncludeChaoKarate,
|
||||
"chao_race_checks": ChaoRaceChecks,
|
||||
|
@ -597,11 +684,16 @@ sa2b_options: typing.Dict[str, type(Option)] = {
|
|||
"gravity_trap_weight": GravityTrapWeight,
|
||||
"exposition_trap_weight": ExpositionTrapWeight,
|
||||
#"darkness_trap_weight": DarknessTrapWeight,
|
||||
"ice_trap_weight": IceTrapWeight,
|
||||
"slow_trap_weight": SlowTrapWeight,
|
||||
"cutscene_trap_weight": CutsceneTrapWeight,
|
||||
"pong_trap_weight": PongTrapWeight,
|
||||
"minigame_trap_difficulty": MinigameTrapDifficulty,
|
||||
"ring_loss": RingLoss,
|
||||
"ring_link": RingLink,
|
||||
"sadx_music": SADXMusic,
|
||||
"music_shuffle": MusicShuffle,
|
||||
"voice_shuffle": VoiceShuffle,
|
||||
"narrator": Narrator,
|
||||
"logic_difficulty": LogicDifficulty,
|
||||
"speed_mission_count": SpeedMissionCount,
|
||||
|
|
|
@ -149,6 +149,26 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.city_escape_omo_13,
|
||||
LocationName.city_escape_omo_14,
|
||||
LocationName.city_escape_beetle,
|
||||
LocationName.city_escape_animal_1,
|
||||
LocationName.city_escape_animal_2,
|
||||
LocationName.city_escape_animal_3,
|
||||
LocationName.city_escape_animal_4,
|
||||
LocationName.city_escape_animal_5,
|
||||
LocationName.city_escape_animal_6,
|
||||
LocationName.city_escape_animal_7,
|
||||
LocationName.city_escape_animal_8,
|
||||
LocationName.city_escape_animal_9,
|
||||
LocationName.city_escape_animal_10,
|
||||
LocationName.city_escape_animal_11,
|
||||
LocationName.city_escape_animal_12,
|
||||
LocationName.city_escape_animal_13,
|
||||
LocationName.city_escape_animal_14,
|
||||
LocationName.city_escape_animal_15,
|
||||
LocationName.city_escape_animal_16,
|
||||
LocationName.city_escape_animal_17,
|
||||
LocationName.city_escape_animal_18,
|
||||
LocationName.city_escape_animal_19,
|
||||
LocationName.city_escape_animal_20,
|
||||
LocationName.city_escape_upgrade,
|
||||
]
|
||||
city_escape_region = create_region(world, player, active_locations, LocationName.city_escape_region,
|
||||
|
@ -170,6 +190,20 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.metal_harbor_omo_4,
|
||||
LocationName.metal_harbor_omo_5,
|
||||
LocationName.metal_harbor_beetle,
|
||||
LocationName.metal_harbor_animal_1,
|
||||
LocationName.metal_harbor_animal_2,
|
||||
LocationName.metal_harbor_animal_3,
|
||||
LocationName.metal_harbor_animal_4,
|
||||
LocationName.metal_harbor_animal_5,
|
||||
LocationName.metal_harbor_animal_6,
|
||||
LocationName.metal_harbor_animal_7,
|
||||
LocationName.metal_harbor_animal_8,
|
||||
LocationName.metal_harbor_animal_9,
|
||||
LocationName.metal_harbor_animal_10,
|
||||
LocationName.metal_harbor_animal_11,
|
||||
LocationName.metal_harbor_animal_12,
|
||||
LocationName.metal_harbor_animal_13,
|
||||
LocationName.metal_harbor_animal_14,
|
||||
LocationName.metal_harbor_upgrade,
|
||||
]
|
||||
metal_harbor_region = create_region(world, player, active_locations, LocationName.metal_harbor_region,
|
||||
|
@ -191,6 +225,24 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.green_forest_hidden_3,
|
||||
LocationName.green_forest_hidden_4,
|
||||
LocationName.green_forest_beetle,
|
||||
LocationName.green_forest_animal_1,
|
||||
LocationName.green_forest_animal_2,
|
||||
LocationName.green_forest_animal_3,
|
||||
LocationName.green_forest_animal_4,
|
||||
LocationName.green_forest_animal_5,
|
||||
LocationName.green_forest_animal_6,
|
||||
LocationName.green_forest_animal_7,
|
||||
LocationName.green_forest_animal_8,
|
||||
LocationName.green_forest_animal_9,
|
||||
LocationName.green_forest_animal_10,
|
||||
LocationName.green_forest_animal_11,
|
||||
LocationName.green_forest_animal_12,
|
||||
LocationName.green_forest_animal_13,
|
||||
LocationName.green_forest_animal_14,
|
||||
LocationName.green_forest_animal_15,
|
||||
LocationName.green_forest_animal_16,
|
||||
LocationName.green_forest_animal_17,
|
||||
LocationName.green_forest_animal_18,
|
||||
LocationName.green_forest_upgrade,
|
||||
]
|
||||
green_forest_region = create_region(world, player, active_locations, LocationName.green_forest_region,
|
||||
|
@ -214,6 +266,25 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.pyramid_cave_omo_3,
|
||||
LocationName.pyramid_cave_omo_4,
|
||||
LocationName.pyramid_cave_beetle,
|
||||
LocationName.pyramid_cave_animal_1,
|
||||
LocationName.pyramid_cave_animal_2,
|
||||
LocationName.pyramid_cave_animal_3,
|
||||
LocationName.pyramid_cave_animal_4,
|
||||
LocationName.pyramid_cave_animal_5,
|
||||
LocationName.pyramid_cave_animal_6,
|
||||
LocationName.pyramid_cave_animal_7,
|
||||
LocationName.pyramid_cave_animal_8,
|
||||
LocationName.pyramid_cave_animal_9,
|
||||
LocationName.pyramid_cave_animal_10,
|
||||
LocationName.pyramid_cave_animal_11,
|
||||
LocationName.pyramid_cave_animal_12,
|
||||
LocationName.pyramid_cave_animal_13,
|
||||
LocationName.pyramid_cave_animal_14,
|
||||
LocationName.pyramid_cave_animal_15,
|
||||
LocationName.pyramid_cave_animal_16,
|
||||
LocationName.pyramid_cave_animal_17,
|
||||
LocationName.pyramid_cave_animal_18,
|
||||
LocationName.pyramid_cave_animal_19,
|
||||
LocationName.pyramid_cave_upgrade,
|
||||
]
|
||||
pyramid_cave_region = create_region(world, player, active_locations, LocationName.pyramid_cave_region,
|
||||
|
@ -247,6 +318,22 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.crazy_gadget_omo_12,
|
||||
LocationName.crazy_gadget_omo_13,
|
||||
LocationName.crazy_gadget_beetle,
|
||||
LocationName.crazy_gadget_animal_1,
|
||||
LocationName.crazy_gadget_animal_2,
|
||||
LocationName.crazy_gadget_animal_3,
|
||||
LocationName.crazy_gadget_animal_4,
|
||||
LocationName.crazy_gadget_animal_5,
|
||||
LocationName.crazy_gadget_animal_6,
|
||||
LocationName.crazy_gadget_animal_7,
|
||||
LocationName.crazy_gadget_animal_8,
|
||||
LocationName.crazy_gadget_animal_9,
|
||||
LocationName.crazy_gadget_animal_10,
|
||||
LocationName.crazy_gadget_animal_11,
|
||||
LocationName.crazy_gadget_animal_12,
|
||||
LocationName.crazy_gadget_animal_13,
|
||||
LocationName.crazy_gadget_animal_14,
|
||||
LocationName.crazy_gadget_animal_15,
|
||||
LocationName.crazy_gadget_animal_16,
|
||||
LocationName.crazy_gadget_upgrade,
|
||||
]
|
||||
crazy_gadget_region = create_region(world, player, active_locations, LocationName.crazy_gadget_region,
|
||||
|
@ -267,6 +354,22 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.final_rush_omo_2,
|
||||
LocationName.final_rush_omo_3,
|
||||
LocationName.final_rush_beetle,
|
||||
LocationName.final_rush_animal_1,
|
||||
LocationName.final_rush_animal_2,
|
||||
LocationName.final_rush_animal_3,
|
||||
LocationName.final_rush_animal_4,
|
||||
LocationName.final_rush_animal_5,
|
||||
LocationName.final_rush_animal_6,
|
||||
LocationName.final_rush_animal_7,
|
||||
LocationName.final_rush_animal_8,
|
||||
LocationName.final_rush_animal_9,
|
||||
LocationName.final_rush_animal_10,
|
||||
LocationName.final_rush_animal_11,
|
||||
LocationName.final_rush_animal_12,
|
||||
LocationName.final_rush_animal_13,
|
||||
LocationName.final_rush_animal_14,
|
||||
LocationName.final_rush_animal_15,
|
||||
LocationName.final_rush_animal_16,
|
||||
LocationName.final_rush_upgrade,
|
||||
]
|
||||
final_rush_region = create_region(world, player, active_locations, LocationName.final_rush_region,
|
||||
|
@ -298,6 +401,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.prison_lane_omo_9,
|
||||
LocationName.prison_lane_omo_10,
|
||||
LocationName.prison_lane_beetle,
|
||||
LocationName.prison_lane_animal_1,
|
||||
LocationName.prison_lane_animal_2,
|
||||
LocationName.prison_lane_animal_3,
|
||||
LocationName.prison_lane_animal_4,
|
||||
LocationName.prison_lane_animal_5,
|
||||
LocationName.prison_lane_animal_6,
|
||||
LocationName.prison_lane_animal_7,
|
||||
LocationName.prison_lane_animal_8,
|
||||
LocationName.prison_lane_animal_9,
|
||||
LocationName.prison_lane_animal_10,
|
||||
LocationName.prison_lane_animal_11,
|
||||
LocationName.prison_lane_animal_12,
|
||||
LocationName.prison_lane_animal_13,
|
||||
LocationName.prison_lane_animal_14,
|
||||
LocationName.prison_lane_animal_15,
|
||||
LocationName.prison_lane_upgrade,
|
||||
]
|
||||
prison_lane_region = create_region(world, player, active_locations, LocationName.prison_lane_region,
|
||||
|
@ -328,6 +446,22 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.mission_street_omo_7,
|
||||
LocationName.mission_street_omo_8,
|
||||
LocationName.mission_street_beetle,
|
||||
LocationName.mission_street_animal_1,
|
||||
LocationName.mission_street_animal_2,
|
||||
LocationName.mission_street_animal_3,
|
||||
LocationName.mission_street_animal_4,
|
||||
LocationName.mission_street_animal_5,
|
||||
LocationName.mission_street_animal_6,
|
||||
LocationName.mission_street_animal_7,
|
||||
LocationName.mission_street_animal_8,
|
||||
LocationName.mission_street_animal_9,
|
||||
LocationName.mission_street_animal_10,
|
||||
LocationName.mission_street_animal_11,
|
||||
LocationName.mission_street_animal_12,
|
||||
LocationName.mission_street_animal_13,
|
||||
LocationName.mission_street_animal_14,
|
||||
LocationName.mission_street_animal_15,
|
||||
LocationName.mission_street_animal_16,
|
||||
LocationName.mission_street_upgrade,
|
||||
]
|
||||
mission_street_region = create_region(world, player, active_locations, LocationName.mission_street_region,
|
||||
|
@ -361,6 +495,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.hidden_base_omo_3,
|
||||
LocationName.hidden_base_omo_4,
|
||||
LocationName.hidden_base_beetle,
|
||||
LocationName.hidden_base_animal_1,
|
||||
LocationName.hidden_base_animal_2,
|
||||
LocationName.hidden_base_animal_3,
|
||||
LocationName.hidden_base_animal_4,
|
||||
LocationName.hidden_base_animal_5,
|
||||
LocationName.hidden_base_animal_6,
|
||||
LocationName.hidden_base_animal_7,
|
||||
LocationName.hidden_base_animal_8,
|
||||
LocationName.hidden_base_animal_9,
|
||||
LocationName.hidden_base_animal_10,
|
||||
LocationName.hidden_base_animal_11,
|
||||
LocationName.hidden_base_animal_12,
|
||||
LocationName.hidden_base_animal_13,
|
||||
LocationName.hidden_base_animal_14,
|
||||
LocationName.hidden_base_animal_15,
|
||||
LocationName.hidden_base_upgrade,
|
||||
]
|
||||
hidden_base_region = create_region(world, player, active_locations, LocationName.hidden_base_region,
|
||||
|
@ -393,6 +542,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.eternal_engine_omo_11,
|
||||
LocationName.eternal_engine_omo_12,
|
||||
LocationName.eternal_engine_beetle,
|
||||
LocationName.eternal_engine_animal_1,
|
||||
LocationName.eternal_engine_animal_2,
|
||||
LocationName.eternal_engine_animal_3,
|
||||
LocationName.eternal_engine_animal_4,
|
||||
LocationName.eternal_engine_animal_5,
|
||||
LocationName.eternal_engine_animal_6,
|
||||
LocationName.eternal_engine_animal_7,
|
||||
LocationName.eternal_engine_animal_8,
|
||||
LocationName.eternal_engine_animal_9,
|
||||
LocationName.eternal_engine_animal_10,
|
||||
LocationName.eternal_engine_animal_11,
|
||||
LocationName.eternal_engine_animal_12,
|
||||
LocationName.eternal_engine_animal_13,
|
||||
LocationName.eternal_engine_animal_14,
|
||||
LocationName.eternal_engine_animal_15,
|
||||
LocationName.eternal_engine_upgrade,
|
||||
]
|
||||
eternal_engine_region = create_region(world, player, active_locations, LocationName.eternal_engine_region,
|
||||
|
@ -421,6 +585,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.wild_canyon_omo_9,
|
||||
LocationName.wild_canyon_omo_10,
|
||||
LocationName.wild_canyon_beetle,
|
||||
LocationName.wild_canyon_animal_1,
|
||||
LocationName.wild_canyon_animal_2,
|
||||
LocationName.wild_canyon_animal_3,
|
||||
LocationName.wild_canyon_animal_4,
|
||||
LocationName.wild_canyon_animal_5,
|
||||
LocationName.wild_canyon_animal_6,
|
||||
LocationName.wild_canyon_animal_7,
|
||||
LocationName.wild_canyon_animal_8,
|
||||
LocationName.wild_canyon_animal_9,
|
||||
LocationName.wild_canyon_animal_10,
|
||||
LocationName.wild_canyon_upgrade,
|
||||
]
|
||||
wild_canyon_region = create_region(world, player, active_locations, LocationName.wild_canyon_region,
|
||||
|
@ -448,6 +622,17 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.pumpkin_hill_omo_9,
|
||||
LocationName.pumpkin_hill_omo_10,
|
||||
LocationName.pumpkin_hill_omo_11,
|
||||
LocationName.pumpkin_hill_animal_1,
|
||||
LocationName.pumpkin_hill_animal_2,
|
||||
LocationName.pumpkin_hill_animal_3,
|
||||
LocationName.pumpkin_hill_animal_4,
|
||||
LocationName.pumpkin_hill_animal_5,
|
||||
LocationName.pumpkin_hill_animal_6,
|
||||
LocationName.pumpkin_hill_animal_7,
|
||||
LocationName.pumpkin_hill_animal_8,
|
||||
LocationName.pumpkin_hill_animal_9,
|
||||
LocationName.pumpkin_hill_animal_10,
|
||||
LocationName.pumpkin_hill_animal_11,
|
||||
LocationName.pumpkin_hill_upgrade,
|
||||
]
|
||||
pumpkin_hill_region = create_region(world, player, active_locations, LocationName.pumpkin_hill_region,
|
||||
|
@ -473,6 +658,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.aquatic_mine_omo_6,
|
||||
LocationName.aquatic_mine_omo_7,
|
||||
LocationName.aquatic_mine_beetle,
|
||||
LocationName.aquatic_mine_animal_1,
|
||||
LocationName.aquatic_mine_animal_2,
|
||||
LocationName.aquatic_mine_animal_3,
|
||||
LocationName.aquatic_mine_animal_4,
|
||||
LocationName.aquatic_mine_animal_5,
|
||||
LocationName.aquatic_mine_animal_6,
|
||||
LocationName.aquatic_mine_animal_7,
|
||||
LocationName.aquatic_mine_animal_8,
|
||||
LocationName.aquatic_mine_animal_9,
|
||||
LocationName.aquatic_mine_animal_10,
|
||||
LocationName.aquatic_mine_upgrade,
|
||||
]
|
||||
aquatic_mine_region = create_region(world, player, active_locations, LocationName.aquatic_mine_region,
|
||||
|
@ -502,6 +697,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.death_chamber_omo_8,
|
||||
LocationName.death_chamber_omo_9,
|
||||
LocationName.death_chamber_beetle,
|
||||
LocationName.death_chamber_animal_1,
|
||||
LocationName.death_chamber_animal_2,
|
||||
LocationName.death_chamber_animal_3,
|
||||
LocationName.death_chamber_animal_4,
|
||||
LocationName.death_chamber_animal_5,
|
||||
LocationName.death_chamber_animal_6,
|
||||
LocationName.death_chamber_animal_7,
|
||||
LocationName.death_chamber_animal_8,
|
||||
LocationName.death_chamber_animal_9,
|
||||
LocationName.death_chamber_animal_10,
|
||||
LocationName.death_chamber_upgrade,
|
||||
]
|
||||
death_chamber_region = create_region(world, player, active_locations, LocationName.death_chamber_region,
|
||||
|
@ -523,6 +728,17 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.meteor_herd_omo_2,
|
||||
LocationName.meteor_herd_omo_3,
|
||||
LocationName.meteor_herd_beetle,
|
||||
LocationName.meteor_herd_animal_1,
|
||||
LocationName.meteor_herd_animal_2,
|
||||
LocationName.meteor_herd_animal_3,
|
||||
LocationName.meteor_herd_animal_4,
|
||||
LocationName.meteor_herd_animal_5,
|
||||
LocationName.meteor_herd_animal_6,
|
||||
LocationName.meteor_herd_animal_7,
|
||||
LocationName.meteor_herd_animal_8,
|
||||
LocationName.meteor_herd_animal_9,
|
||||
LocationName.meteor_herd_animal_10,
|
||||
LocationName.meteor_herd_animal_11,
|
||||
LocationName.meteor_herd_upgrade,
|
||||
]
|
||||
meteor_herd_region = create_region(world, player, active_locations, LocationName.meteor_herd_region,
|
||||
|
@ -552,6 +768,26 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.radical_highway_omo_7,
|
||||
LocationName.radical_highway_omo_8,
|
||||
LocationName.radical_highway_beetle,
|
||||
LocationName.radical_highway_animal_1,
|
||||
LocationName.radical_highway_animal_2,
|
||||
LocationName.radical_highway_animal_3,
|
||||
LocationName.radical_highway_animal_4,
|
||||
LocationName.radical_highway_animal_5,
|
||||
LocationName.radical_highway_animal_6,
|
||||
LocationName.radical_highway_animal_7,
|
||||
LocationName.radical_highway_animal_8,
|
||||
LocationName.radical_highway_animal_9,
|
||||
LocationName.radical_highway_animal_10,
|
||||
LocationName.radical_highway_animal_11,
|
||||
LocationName.radical_highway_animal_12,
|
||||
LocationName.radical_highway_animal_13,
|
||||
LocationName.radical_highway_animal_14,
|
||||
LocationName.radical_highway_animal_15,
|
||||
LocationName.radical_highway_animal_16,
|
||||
LocationName.radical_highway_animal_17,
|
||||
LocationName.radical_highway_animal_18,
|
||||
LocationName.radical_highway_animal_19,
|
||||
LocationName.radical_highway_animal_20,
|
||||
LocationName.radical_highway_upgrade,
|
||||
]
|
||||
radical_highway_region = create_region(world, player, active_locations, LocationName.radical_highway_region,
|
||||
|
@ -579,6 +815,22 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.white_jungle_omo_4,
|
||||
LocationName.white_jungle_omo_5,
|
||||
LocationName.white_jungle_beetle,
|
||||
LocationName.white_jungle_animal_1,
|
||||
LocationName.white_jungle_animal_2,
|
||||
LocationName.white_jungle_animal_3,
|
||||
LocationName.white_jungle_animal_4,
|
||||
LocationName.white_jungle_animal_5,
|
||||
LocationName.white_jungle_animal_6,
|
||||
LocationName.white_jungle_animal_7,
|
||||
LocationName.white_jungle_animal_8,
|
||||
LocationName.white_jungle_animal_9,
|
||||
LocationName.white_jungle_animal_10,
|
||||
LocationName.white_jungle_animal_11,
|
||||
LocationName.white_jungle_animal_12,
|
||||
LocationName.white_jungle_animal_13,
|
||||
LocationName.white_jungle_animal_14,
|
||||
LocationName.white_jungle_animal_15,
|
||||
LocationName.white_jungle_animal_16,
|
||||
LocationName.white_jungle_upgrade,
|
||||
]
|
||||
white_jungle_region = create_region(world, player, active_locations, LocationName.white_jungle_region,
|
||||
|
@ -600,6 +852,26 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.sky_rail_pipe_5,
|
||||
LocationName.sky_rail_pipe_6,
|
||||
LocationName.sky_rail_beetle,
|
||||
LocationName.sky_rail_animal_1,
|
||||
LocationName.sky_rail_animal_2,
|
||||
LocationName.sky_rail_animal_3,
|
||||
LocationName.sky_rail_animal_4,
|
||||
LocationName.sky_rail_animal_5,
|
||||
LocationName.sky_rail_animal_6,
|
||||
LocationName.sky_rail_animal_7,
|
||||
LocationName.sky_rail_animal_8,
|
||||
LocationName.sky_rail_animal_9,
|
||||
LocationName.sky_rail_animal_10,
|
||||
LocationName.sky_rail_animal_11,
|
||||
LocationName.sky_rail_animal_12,
|
||||
LocationName.sky_rail_animal_13,
|
||||
LocationName.sky_rail_animal_14,
|
||||
LocationName.sky_rail_animal_15,
|
||||
LocationName.sky_rail_animal_16,
|
||||
LocationName.sky_rail_animal_17,
|
||||
LocationName.sky_rail_animal_18,
|
||||
LocationName.sky_rail_animal_19,
|
||||
LocationName.sky_rail_animal_20,
|
||||
LocationName.sky_rail_upgrade,
|
||||
]
|
||||
sky_rail_region = create_region(world, player, active_locations, LocationName.sky_rail_region,
|
||||
|
@ -619,6 +891,23 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.final_chase_pipe_3,
|
||||
LocationName.final_chase_omo_1,
|
||||
LocationName.final_chase_beetle,
|
||||
LocationName.final_chase_animal_1,
|
||||
LocationName.final_chase_animal_2,
|
||||
LocationName.final_chase_animal_3,
|
||||
LocationName.final_chase_animal_4,
|
||||
LocationName.final_chase_animal_5,
|
||||
LocationName.final_chase_animal_6,
|
||||
LocationName.final_chase_animal_7,
|
||||
LocationName.final_chase_animal_8,
|
||||
LocationName.final_chase_animal_9,
|
||||
LocationName.final_chase_animal_10,
|
||||
LocationName.final_chase_animal_11,
|
||||
LocationName.final_chase_animal_12,
|
||||
LocationName.final_chase_animal_13,
|
||||
LocationName.final_chase_animal_14,
|
||||
LocationName.final_chase_animal_15,
|
||||
LocationName.final_chase_animal_16,
|
||||
LocationName.final_chase_animal_17,
|
||||
LocationName.final_chase_upgrade,
|
||||
]
|
||||
final_chase_region = create_region(world, player, active_locations, LocationName.final_chase_region,
|
||||
|
@ -645,6 +934,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.iron_gate_omo_5,
|
||||
LocationName.iron_gate_omo_6,
|
||||
LocationName.iron_gate_beetle,
|
||||
LocationName.iron_gate_animal_1,
|
||||
LocationName.iron_gate_animal_2,
|
||||
LocationName.iron_gate_animal_3,
|
||||
LocationName.iron_gate_animal_4,
|
||||
LocationName.iron_gate_animal_5,
|
||||
LocationName.iron_gate_animal_6,
|
||||
LocationName.iron_gate_animal_7,
|
||||
LocationName.iron_gate_animal_8,
|
||||
LocationName.iron_gate_animal_9,
|
||||
LocationName.iron_gate_animal_10,
|
||||
LocationName.iron_gate_animal_11,
|
||||
LocationName.iron_gate_animal_12,
|
||||
LocationName.iron_gate_animal_13,
|
||||
LocationName.iron_gate_animal_14,
|
||||
LocationName.iron_gate_animal_15,
|
||||
LocationName.iron_gate_upgrade,
|
||||
]
|
||||
iron_gate_region = create_region(world, player, active_locations, LocationName.iron_gate_region,
|
||||
|
@ -667,6 +971,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.sand_ocean_omo_1,
|
||||
LocationName.sand_ocean_omo_2,
|
||||
LocationName.sand_ocean_beetle,
|
||||
LocationName.sand_ocean_animal_1,
|
||||
LocationName.sand_ocean_animal_2,
|
||||
LocationName.sand_ocean_animal_3,
|
||||
LocationName.sand_ocean_animal_4,
|
||||
LocationName.sand_ocean_animal_5,
|
||||
LocationName.sand_ocean_animal_6,
|
||||
LocationName.sand_ocean_animal_7,
|
||||
LocationName.sand_ocean_animal_8,
|
||||
LocationName.sand_ocean_animal_9,
|
||||
LocationName.sand_ocean_animal_10,
|
||||
LocationName.sand_ocean_animal_11,
|
||||
LocationName.sand_ocean_animal_12,
|
||||
LocationName.sand_ocean_animal_13,
|
||||
LocationName.sand_ocean_animal_14,
|
||||
LocationName.sand_ocean_animal_15,
|
||||
LocationName.sand_ocean_upgrade,
|
||||
]
|
||||
sand_ocean_region = create_region(world, player, active_locations, LocationName.sand_ocean_region,
|
||||
|
@ -693,6 +1012,20 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.lost_colony_omo_7,
|
||||
LocationName.lost_colony_omo_8,
|
||||
LocationName.lost_colony_beetle,
|
||||
LocationName.lost_colony_animal_1,
|
||||
LocationName.lost_colony_animal_2,
|
||||
LocationName.lost_colony_animal_3,
|
||||
LocationName.lost_colony_animal_4,
|
||||
LocationName.lost_colony_animal_5,
|
||||
LocationName.lost_colony_animal_6,
|
||||
LocationName.lost_colony_animal_7,
|
||||
LocationName.lost_colony_animal_8,
|
||||
LocationName.lost_colony_animal_9,
|
||||
LocationName.lost_colony_animal_10,
|
||||
LocationName.lost_colony_animal_11,
|
||||
LocationName.lost_colony_animal_12,
|
||||
LocationName.lost_colony_animal_13,
|
||||
LocationName.lost_colony_animal_14,
|
||||
LocationName.lost_colony_upgrade,
|
||||
]
|
||||
lost_colony_region = create_region(world, player, active_locations, LocationName.lost_colony_region,
|
||||
|
@ -715,6 +1048,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.weapons_bed_omo_1,
|
||||
LocationName.weapons_bed_omo_2,
|
||||
LocationName.weapons_bed_omo_3,
|
||||
LocationName.weapons_bed_animal_1,
|
||||
LocationName.weapons_bed_animal_2,
|
||||
LocationName.weapons_bed_animal_3,
|
||||
LocationName.weapons_bed_animal_4,
|
||||
LocationName.weapons_bed_animal_5,
|
||||
LocationName.weapons_bed_animal_6,
|
||||
LocationName.weapons_bed_animal_7,
|
||||
LocationName.weapons_bed_animal_8,
|
||||
LocationName.weapons_bed_animal_9,
|
||||
LocationName.weapons_bed_animal_10,
|
||||
LocationName.weapons_bed_animal_11,
|
||||
LocationName.weapons_bed_animal_12,
|
||||
LocationName.weapons_bed_animal_13,
|
||||
LocationName.weapons_bed_animal_14,
|
||||
LocationName.weapons_bed_animal_15,
|
||||
LocationName.weapons_bed_upgrade,
|
||||
]
|
||||
weapons_bed_region = create_region(world, player, active_locations, LocationName.weapons_bed_region,
|
||||
|
@ -736,6 +1084,21 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.cosmic_wall_pipe_5,
|
||||
LocationName.cosmic_wall_omo_1,
|
||||
LocationName.cosmic_wall_beetle,
|
||||
LocationName.cosmic_wall_animal_1,
|
||||
LocationName.cosmic_wall_animal_2,
|
||||
LocationName.cosmic_wall_animal_3,
|
||||
LocationName.cosmic_wall_animal_4,
|
||||
LocationName.cosmic_wall_animal_5,
|
||||
LocationName.cosmic_wall_animal_6,
|
||||
LocationName.cosmic_wall_animal_7,
|
||||
LocationName.cosmic_wall_animal_8,
|
||||
LocationName.cosmic_wall_animal_9,
|
||||
LocationName.cosmic_wall_animal_10,
|
||||
LocationName.cosmic_wall_animal_11,
|
||||
LocationName.cosmic_wall_animal_12,
|
||||
LocationName.cosmic_wall_animal_13,
|
||||
LocationName.cosmic_wall_animal_14,
|
||||
LocationName.cosmic_wall_animal_15,
|
||||
LocationName.cosmic_wall_upgrade,
|
||||
]
|
||||
cosmic_wall_region = create_region(world, player, active_locations, LocationName.cosmic_wall_region,
|
||||
|
@ -765,6 +1128,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.dry_lagoon_omo_11,
|
||||
LocationName.dry_lagoon_omo_12,
|
||||
LocationName.dry_lagoon_beetle,
|
||||
LocationName.dry_lagoon_animal_1,
|
||||
LocationName.dry_lagoon_animal_2,
|
||||
LocationName.dry_lagoon_animal_3,
|
||||
LocationName.dry_lagoon_animal_4,
|
||||
LocationName.dry_lagoon_animal_5,
|
||||
LocationName.dry_lagoon_animal_6,
|
||||
LocationName.dry_lagoon_animal_7,
|
||||
LocationName.dry_lagoon_animal_8,
|
||||
LocationName.dry_lagoon_animal_9,
|
||||
LocationName.dry_lagoon_animal_10,
|
||||
LocationName.dry_lagoon_upgrade,
|
||||
]
|
||||
dry_lagoon_region = create_region(world, player, active_locations, LocationName.dry_lagoon_region,
|
||||
|
@ -791,6 +1164,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.egg_quarters_omo_6,
|
||||
LocationName.egg_quarters_omo_7,
|
||||
LocationName.egg_quarters_beetle,
|
||||
LocationName.egg_quarters_animal_1,
|
||||
LocationName.egg_quarters_animal_2,
|
||||
LocationName.egg_quarters_animal_3,
|
||||
LocationName.egg_quarters_animal_4,
|
||||
LocationName.egg_quarters_animal_5,
|
||||
LocationName.egg_quarters_animal_6,
|
||||
LocationName.egg_quarters_animal_7,
|
||||
LocationName.egg_quarters_animal_8,
|
||||
LocationName.egg_quarters_animal_9,
|
||||
LocationName.egg_quarters_animal_10,
|
||||
LocationName.egg_quarters_upgrade,
|
||||
]
|
||||
egg_quarters_region = create_region(world, player, active_locations, LocationName.egg_quarters_region,
|
||||
|
@ -820,6 +1203,14 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.security_hall_omo_11,
|
||||
LocationName.security_hall_omo_12,
|
||||
LocationName.security_hall_beetle,
|
||||
LocationName.security_hall_animal_1,
|
||||
LocationName.security_hall_animal_2,
|
||||
LocationName.security_hall_animal_3,
|
||||
LocationName.security_hall_animal_4,
|
||||
LocationName.security_hall_animal_5,
|
||||
LocationName.security_hall_animal_6,
|
||||
LocationName.security_hall_animal_7,
|
||||
LocationName.security_hall_animal_8,
|
||||
LocationName.security_hall_upgrade,
|
||||
]
|
||||
security_hall_region = create_region(world, player, active_locations, LocationName.security_hall_region,
|
||||
|
@ -854,6 +1245,16 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.mad_space_omo_4,
|
||||
LocationName.mad_space_omo_5,
|
||||
LocationName.mad_space_beetle,
|
||||
LocationName.mad_space_animal_1,
|
||||
LocationName.mad_space_animal_2,
|
||||
LocationName.mad_space_animal_3,
|
||||
LocationName.mad_space_animal_4,
|
||||
LocationName.mad_space_animal_5,
|
||||
LocationName.mad_space_animal_6,
|
||||
LocationName.mad_space_animal_7,
|
||||
LocationName.mad_space_animal_8,
|
||||
LocationName.mad_space_animal_9,
|
||||
LocationName.mad_space_animal_10,
|
||||
LocationName.mad_space_upgrade,
|
||||
]
|
||||
mad_space_region = create_region(world, player, active_locations, LocationName.mad_space_region,
|
||||
|
@ -883,6 +1284,25 @@ def create_regions(world, player: int, active_locations):
|
|||
LocationName.cannon_core_omo_7,
|
||||
LocationName.cannon_core_omo_8,
|
||||
LocationName.cannon_core_omo_9,
|
||||
LocationName.cannon_core_animal_1,
|
||||
LocationName.cannon_core_animal_2,
|
||||
LocationName.cannon_core_animal_3,
|
||||
LocationName.cannon_core_animal_4,
|
||||
LocationName.cannon_core_animal_5,
|
||||
LocationName.cannon_core_animal_6,
|
||||
LocationName.cannon_core_animal_7,
|
||||
LocationName.cannon_core_animal_8,
|
||||
LocationName.cannon_core_animal_9,
|
||||
LocationName.cannon_core_animal_10,
|
||||
LocationName.cannon_core_animal_11,
|
||||
LocationName.cannon_core_animal_12,
|
||||
LocationName.cannon_core_animal_13,
|
||||
LocationName.cannon_core_animal_14,
|
||||
LocationName.cannon_core_animal_15,
|
||||
LocationName.cannon_core_animal_16,
|
||||
LocationName.cannon_core_animal_17,
|
||||
LocationName.cannon_core_animal_18,
|
||||
LocationName.cannon_core_animal_19,
|
||||
LocationName.cannon_core_beetle,
|
||||
]
|
||||
cannon_core_region = create_region(world, player, active_locations, LocationName.cannon_core_region,
|
||||
|
@ -1027,7 +1447,7 @@ def create_regions(world, player: int, active_locations):
|
|||
grand_prix_region_locations)
|
||||
world.regions += [grand_prix_region]
|
||||
|
||||
if world.goal[player] == 0 or world.goal[player] == 2:
|
||||
if world.goal[player] in [0, 2, 4, 5, 6]:
|
||||
biolizard_region_locations = [
|
||||
LocationName.finalhazard,
|
||||
]
|
||||
|
@ -1035,15 +1455,25 @@ def create_regions(world, player: int, active_locations):
|
|||
biolizard_region_locations)
|
||||
world.regions += [biolizard_region]
|
||||
|
||||
if world.goal[player] == 1 or world.goal[player] == 2:
|
||||
if world.goal[player] in [1, 2]:
|
||||
green_hill_region_locations = [
|
||||
LocationName.green_hill,
|
||||
LocationName.green_hill_chao_1,
|
||||
#LocationName.green_hill_animal_1,
|
||||
]
|
||||
green_hill_region = create_region(world, player, active_locations, LocationName.green_hill_region,
|
||||
green_hill_region_locations)
|
||||
world.regions += [green_hill_region]
|
||||
|
||||
if world.goal[player] in [4, 5, 6]:
|
||||
for i in range(16):
|
||||
boss_region_locations = [
|
||||
"Boss Rush - " + str(i + 1),
|
||||
]
|
||||
boss_region = create_region(world, player, active_locations, "Boss Rush " + str(i + 1),
|
||||
boss_region_locations)
|
||||
world.regions += [boss_region]
|
||||
|
||||
|
||||
# Set up the regions correctly.
|
||||
world.regions += [
|
||||
|
@ -1089,7 +1519,7 @@ def create_regions(world, player: int, active_locations):
|
|||
]
|
||||
|
||||
|
||||
def connect_regions(world, player, gates: typing.List[LevelGate], cannon_core_emblems, gate_bosses, first_cannons_core_mission: str, final_cannons_core_mission: str):
|
||||
def connect_regions(world, player, gates: typing.List[LevelGate], cannon_core_emblems, gate_bosses, boss_rush_bosses, first_cannons_core_mission: str, final_cannons_core_mission: str):
|
||||
names: typing.Dict[str, int] = {}
|
||||
|
||||
connect(world, player, names, 'Menu', LocationName.gate_0_region)
|
||||
|
@ -1104,7 +1534,7 @@ def connect_regions(world, player, gates: typing.List[LevelGate], cannon_core_em
|
|||
|
||||
connect(world, player, names, LocationName.cannon_core_region, LocationName.biolizard_region,
|
||||
lambda state: (state.can_reach(required_mission_name, "Location", player)))
|
||||
elif world.goal[player] == 1 or world.goal[player] == 2:
|
||||
elif world.goal[player] in [1, 2]:
|
||||
connect(world, player, names, 'Menu', LocationName.green_hill_region,
|
||||
lambda state: (state.has(ItemName.white_emerald, player) and
|
||||
state.has(ItemName.red_emerald, player) and
|
||||
|
@ -1117,6 +1547,35 @@ def connect_regions(world, player, gates: typing.List[LevelGate], cannon_core_em
|
|||
connect(world, player, names, LocationName.green_hill_region, LocationName.biolizard_region)
|
||||
elif world.goal[player] == 3:
|
||||
connect(world, player, names, LocationName.kart_race_expert_region, LocationName.grand_prix_region)
|
||||
elif world.goal[player] in [4, 5, 6]:
|
||||
if world.goal[player] == 4:
|
||||
connect(world, player, names, LocationName.gate_0_region, LocationName.boss_rush_1_region)
|
||||
elif world.goal[player] == 5:
|
||||
required_mission_name = first_cannons_core_mission
|
||||
|
||||
if world.required_cannons_core_missions[player].value == 1:
|
||||
required_mission_name = final_cannons_core_mission
|
||||
|
||||
connect(world, player, names, LocationName.cannon_core_region, LocationName.boss_rush_1_region,
|
||||
lambda state: (state.can_reach(required_mission_name, "Location", player)))
|
||||
elif world.goal[player] == 6:
|
||||
connect(world, player, names, LocationName.gate_0_region, LocationName.boss_rush_1_region,
|
||||
lambda state: (state.has(ItemName.white_emerald, player) and
|
||||
state.has(ItemName.red_emerald, player) and
|
||||
state.has(ItemName.cyan_emerald, player) and
|
||||
state.has(ItemName.purple_emerald, player) and
|
||||
state.has(ItemName.green_emerald, player) and
|
||||
state.has(ItemName.yellow_emerald, player) and
|
||||
state.has(ItemName.blue_emerald, player)))
|
||||
|
||||
for i in range(15):
|
||||
if boss_rush_bosses[i] == all_gate_bosses_table[king_boom_boo]:
|
||||
connect(world, player, names, "Boss Rush " + str(i + 1), "Boss Rush " + str(i + 2),
|
||||
lambda state: (state.has(ItemName.knuckles_shovel_claws, player)))
|
||||
else:
|
||||
connect(world, player, names, "Boss Rush " + str(i + 1), "Boss Rush " + str(i + 2))
|
||||
|
||||
connect(world, player, names, LocationName.boss_rush_16_region, LocationName.biolizard_region)
|
||||
|
||||
for i in range(len(gates[0].gate_levels)):
|
||||
connect(world, player, names, LocationName.gate_0_region, shuffleable_regions[gates[0].gate_levels[i]])
|
||||
|
|
|
@ -329,7 +329,8 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
|
|||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule_safe(world, LocationName.egg_quarters_5, player,
|
||||
lambda state: state.has(ItemName.rouge_pick_nails, player) and
|
||||
state.has(ItemName.rouge_treasure_scope, player))
|
||||
state.has(ItemName.rouge_treasure_scope, player) and
|
||||
state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule_safe(world, LocationName.lost_colony_5, player,
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
@ -495,8 +496,6 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
|
|||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_pipe_1, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_pipe_1, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.sand_ocean_pipe_1, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
@ -827,6 +826,507 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
|
|||
state.has(ItemName.knuckles_hammer_gloves, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player))
|
||||
|
||||
# Animal Upgrade Requirements
|
||||
if world.animalsanity[player]:
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_2, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_2, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_3, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_3, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_3, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_4, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_4, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_4, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_4, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_4, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_5, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_5, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_5, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_5, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_5, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
(state.has(ItemName.eggman_jet_engine, player) or
|
||||
state.has(ItemName.eggman_large_cannon, player)))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_6, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_6, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_6, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_6, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_6, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_6, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_6, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_7, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_7, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_7, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_7, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_7, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) or
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_7, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.security_hall_animal_7, player),
|
||||
lambda state: state.has(ItemName.rouge_pick_nails, player) or
|
||||
state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_7, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_7, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_8, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_8, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_8, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_8, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_8, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_8, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.security_hall_animal_8, player),
|
||||
lambda state: state.has(ItemName.rouge_pick_nails, player) and
|
||||
state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_8, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_8, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_9, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_9, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_9, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_9, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_9, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_9, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_9, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_9, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_9, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.wild_canyon_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_10, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.aquatic_mine_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_mystic_melody, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_10, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_10, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_10, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.egg_quarters_animal_10, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_10, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_11, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_11, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_11, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
(state.has(ItemName.sonic_flame_ring, player) or
|
||||
state.has(ItemName.sonic_mystic_melody, player)))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_11, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_11, player),
|
||||
lambda state: state.has(ItemName.shadow_air_shoes, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player) and
|
||||
(state.has(ItemName.sonic_light_shoes, player) or
|
||||
state.has(ItemName.sonic_mystic_melody, player)))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.sand_ocean_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_12, player),
|
||||
lambda state: state.has(ItemName.shadow_air_shoes, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) or
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.sand_ocean_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_13, player),
|
||||
lambda state: state.has(ItemName.shadow_air_shoes, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
(state.has(ItemName.knuckles_air_necklace, player) or
|
||||
state.has(ItemName.knuckles_hammer_gloves, player)))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.metal_harbor_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.sand_ocean_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_14, player),
|
||||
lambda state: state.has(ItemName.shadow_air_shoes, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_15, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_15, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_15, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.iron_gate_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.sand_ocean_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_15, player),
|
||||
lambda state: state.has(ItemName.shadow_air_shoes, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_mystic_melody, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_16, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_16, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
(state.has(ItemName.sonic_flame_ring, player) or
|
||||
(state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_16, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_16, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.white_jungle_animal_16, player),
|
||||
lambda state: state.has(ItemName.shadow_flame_ring, player) and
|
||||
state.has(ItemName.shadow_air_shoes, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_16, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_17, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.final_chase_animal_17, player),
|
||||
lambda state: state.has(ItemName.shadow_flame_ring, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_17, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player) and
|
||||
(state.has(ItemName.sonic_bounce_bracelet, player) or
|
||||
state.has(ItemName.sonic_flame_ring, player)))
|
||||
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_18, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_18, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_19, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_19, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_air_necklace, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player) and
|
||||
state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.radical_highway_animal_20, player),
|
||||
lambda state: state.has(ItemName.shadow_flame_ring, player))
|
||||
|
||||
def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
|
||||
# Mission 1 Upgrade Requirements
|
||||
add_rule_safe(world, LocationName.pumpkin_hill_1, player,
|
||||
|
@ -1123,8 +1623,6 @@ def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
|
|||
if world.whistlesanity[player].value == 1 or world.whistlesanity[player].value == 3:
|
||||
add_rule(world.get_location(LocationName.hidden_base_pipe_1, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_pipe_1, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_pipe_1, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
@ -1359,6 +1857,338 @@ def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
|
|||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
# Animal Upgrade Requirements
|
||||
if world.animalsanity[player]:
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_2, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_2, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_3, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_3, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_3, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_4, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_4, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_4, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_4, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_5, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_5, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_5, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_5, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_6, player),
|
||||
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_6, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_6, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_6, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_7, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_7, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.security_hall_animal_7, player),
|
||||
lambda state: state.has(ItemName.rouge_pick_nails, player) or
|
||||
state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_7, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_7, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_8, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_8, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.security_hall_animal_8, player),
|
||||
lambda state: state.has(ItemName.rouge_pick_nails, player) and
|
||||
state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_8, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_8, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_9, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_9, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_9, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_9, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_9, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.wild_canyon_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.aquatic_mine_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_mystic_melody, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.death_chamber_animal_10, player),
|
||||
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_10, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.egg_quarters_animal_10, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.mad_space_animal_10, player),
|
||||
lambda state: state.has(ItemName.rouge_iron_boots, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_10, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_10, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_11, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_11, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_11, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_12, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_12, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_12, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) or
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_13, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_13, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_13, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_14, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.lost_colony_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_14, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_14, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.prison_lane_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.hidden_base_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.eternal_engine_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_15, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_15, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.iron_gate_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
add_rule(world.get_location(LocationName.sand_ocean_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.weapons_bed_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player))
|
||||
add_rule(world.get_location(LocationName.cosmic_wall_animal_15, player),
|
||||
lambda state: state.has(ItemName.eggman_jet_engine, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_15, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.mission_street_animal_16, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.tails_bazooka, player))
|
||||
add_rule(world.get_location(LocationName.crazy_gadget_animal_16, player),
|
||||
lambda state: state.has(ItemName.sonic_light_shoes, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
add_rule(world.get_location(LocationName.final_rush_animal_16, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_16, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.final_chase_animal_17, player),
|
||||
lambda state: state.has(ItemName.shadow_flame_ring, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_17, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_18, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.pyramid_cave_animal_19, player),
|
||||
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
|
||||
state.has(ItemName.sonic_mystic_melody, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.cannon_core_animal_19, player),
|
||||
lambda state: state.has(ItemName.tails_booster, player) and
|
||||
state.has(ItemName.eggman_large_cannon, player) and
|
||||
state.has(ItemName.knuckles_hammer_gloves, player) and
|
||||
state.has(ItemName.sonic_flame_ring, player))
|
||||
|
||||
add_rule(world.get_location(LocationName.radical_highway_animal_20, player),
|
||||
lambda state: state.has(ItemName.shadow_flame_ring, player))
|
||||
|
||||
|
||||
def set_boss_gate_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int]):
|
||||
for x in range(len(gate_bosses)):
|
||||
|
@ -1367,7 +2197,7 @@ def set_boss_gate_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict
|
|||
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
|
||||
|
||||
|
||||
def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int], mission_map: typing.Dict[int, int], mission_count_map: typing.Dict[int, int]):
|
||||
def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int], boss_rush_map: typing.Dict[int, int], mission_map: typing.Dict[int, int], mission_count_map: typing.Dict[int, int]):
|
||||
# Mission Progression Rules (Mission 1 begets Mission 2, etc.)
|
||||
set_mission_progress_rules(world, player, mission_map, mission_count_map)
|
||||
|
||||
|
@ -1378,6 +2208,12 @@ def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int]
|
|||
elif world.logic_difficulty[player].value == 1:
|
||||
set_mission_upgrade_rules_hard(world, player)
|
||||
|
||||
if world.goal[player] in [4, 5, 6]:
|
||||
for i in range(16):
|
||||
if boss_rush_map[i] == 10:
|
||||
add_rule(world.get_location("Boss Rush - " + str(i + 1), player),
|
||||
lambda state: (state.has(ItemName.knuckles_shovel_claws, player)))
|
||||
|
||||
# Upgrade Requirements for each boss gate
|
||||
set_boss_gate_rules(world, player, gate_bosses)
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from .Regions import create_regions, shuffleable_regions, connect_regions, Level
|
|||
from .Rules import set_rules
|
||||
from .Names import ItemName, LocationName
|
||||
from worlds.AutoWorld import WebWorld, World
|
||||
from .GateBosses import get_gate_bosses, get_boss_name
|
||||
from .GateBosses import get_gate_bosses, get_boss_rush_bosses, get_boss_name
|
||||
from .Missions import get_mission_table, get_mission_count_table, get_first_and_last_cannons_core_missions
|
||||
import Patch
|
||||
|
||||
|
@ -52,7 +52,7 @@ class SA2BWorld(World):
|
|||
game: str = "Sonic Adventure 2 Battle"
|
||||
option_definitions = sa2b_options
|
||||
topology_present = False
|
||||
data_version = 5
|
||||
data_version = 6
|
||||
|
||||
item_name_groups = item_groups
|
||||
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
||||
|
@ -61,30 +61,35 @@ class SA2BWorld(World):
|
|||
location_table: typing.Dict[str, int]
|
||||
|
||||
music_map: typing.Dict[int, int]
|
||||
voice_map: typing.Dict[int, int]
|
||||
mission_map: typing.Dict[int, int]
|
||||
mission_count_map: typing.Dict[int, int]
|
||||
emblems_for_cannons_core: int
|
||||
region_emblem_map: typing.Dict[int, int]
|
||||
gate_costs: typing.Dict[int, int]
|
||||
gate_bosses: typing.Dict[int, int]
|
||||
boss_rush_map: typing.Dict[int, int]
|
||||
web = SA2BWeb()
|
||||
|
||||
def _get_slot_data(self):
|
||||
return {
|
||||
"ModVersion": 201,
|
||||
"ModVersion": 202,
|
||||
"Goal": self.multiworld.goal[self.player].value,
|
||||
"MusicMap": self.music_map,
|
||||
"VoiceMap": self.voice_map,
|
||||
"MissionMap": self.mission_map,
|
||||
"MissionCountMap": self.mission_count_map,
|
||||
"MusicShuffle": self.multiworld.music_shuffle[self.player].value,
|
||||
"Narrator": self.multiworld.narrator[self.player].value,
|
||||
"MinigameTrapDifficulty": self.multiworld.minigame_trap_difficulty[self.player].value,
|
||||
"RingLoss": self.multiworld.ring_loss[self.player].value,
|
||||
"RingLink": self.multiworld.ring_link[self.player].value,
|
||||
"RequiredRank": self.multiworld.required_rank[self.player].value,
|
||||
"ChaoKeys": self.multiworld.keysanity[self.player].value,
|
||||
"Whistlesanity": self.multiworld.whistlesanity[self.player].value,
|
||||
"GoldBeetles": self.multiworld.beetlesanity[self.player].value,
|
||||
"OmochaoChecks": self.multiworld.omosanity[self.player].value,
|
||||
"AnimalChecks": self.multiworld.animalsanity[self.player].value,
|
||||
"KartRaceChecks": self.multiworld.kart_race_checks[self.player].value,
|
||||
"ChaoRaceChecks": self.multiworld.chao_race_checks[self.player].value,
|
||||
"ChaoGardenDifficulty": self.multiworld.chao_garden_difficulty[self.player].value,
|
||||
|
@ -97,6 +102,7 @@ class SA2BWorld(World):
|
|||
"RegionEmblemMap": self.region_emblem_map,
|
||||
"GateCosts": self.gate_costs,
|
||||
"GateBosses": self.gate_bosses,
|
||||
"BossRushMap": self.boss_rush_map,
|
||||
}
|
||||
|
||||
def _create_items(self, name: str):
|
||||
|
@ -160,19 +166,26 @@ class SA2BWorld(World):
|
|||
self.multiworld.confusion_trap_weight[self.player].value = 0
|
||||
self.multiworld.tiny_trap_weight[self.player].value = 0
|
||||
self.multiworld.gravity_trap_weight[self.player].value = 0
|
||||
self.multiworld.ice_trap_weight[self.player].value = 0
|
||||
self.multiworld.slow_trap_weight[self.player].value = 0
|
||||
|
||||
valid_trap_weights = self.multiworld.exposition_trap_weight[self.player].value + self.multiworld.pong_trap_weight[self.player].value
|
||||
valid_trap_weights = self.multiworld.exposition_trap_weight[self.player].value + \
|
||||
self.multiworld.cutscene_trap_weight[self.player].value + \
|
||||
self.multiworld.pong_trap_weight[self.player].value
|
||||
|
||||
if valid_trap_weights == 0:
|
||||
self.multiworld.exposition_trap_weight[self.player].value = 4
|
||||
self.multiworld.cutscene_trap_weight[self.player].value = 4
|
||||
self.multiworld.pong_trap_weight[self.player].value = 4
|
||||
|
||||
if self.multiworld.kart_race_checks[self.player].value == 0:
|
||||
self.multiworld.kart_race_checks[self.player].value = 2
|
||||
|
||||
self.gate_bosses = {}
|
||||
self.boss_rush_map = {}
|
||||
else:
|
||||
self.gate_bosses = get_gate_bosses(self.multiworld, self.player)
|
||||
self.boss_rush_map = get_boss_rush_bosses(self.multiworld, self.player)
|
||||
|
||||
def create_regions(self):
|
||||
self.mission_map = get_mission_table(self.multiworld, self.player)
|
||||
|
@ -182,7 +195,7 @@ class SA2BWorld(World):
|
|||
create_regions(self.multiworld, self.player, self.location_table)
|
||||
|
||||
# Not Generate Basic
|
||||
if self.multiworld.goal[self.player].value == 0 or self.multiworld.goal[self.player].value == 2:
|
||||
if self.multiworld.goal[self.player].value in [0, 2, 4, 5, 6]:
|
||||
self.multiworld.get_location(LocationName.finalhazard, self.player).place_locked_item(self.create_item(ItemName.maria))
|
||||
elif self.multiworld.goal[self.player].value == 1:
|
||||
self.multiworld.get_location(LocationName.green_hill, self.player).place_locked_item(self.create_item(ItemName.maria))
|
||||
|
@ -198,16 +211,16 @@ class SA2BWorld(World):
|
|||
if self.multiworld.goal[self.player].value != 3:
|
||||
# Fill item pool with all required items
|
||||
for item in {**upgrades_table}:
|
||||
itempool += self._create_items(item)
|
||||
itempool += [self.create_item(item, False, self.multiworld.goal[self.player].value)]
|
||||
|
||||
if self.multiworld.goal[self.player].value == 1 or self.multiworld.goal[self.player].value == 2:
|
||||
if self.multiworld.goal[self.player].value in [1, 2, 6]:
|
||||
# Some flavor of Chaos Emerald Hunt
|
||||
for item in {**emeralds_table}:
|
||||
itempool += self._create_items(item)
|
||||
|
||||
# Cap at 250 Emblems
|
||||
# Cap at player-specified Emblem count
|
||||
raw_emblem_count = total_required_locations - len(itempool)
|
||||
total_emblem_count = min(raw_emblem_count, 250)
|
||||
total_emblem_count = min(raw_emblem_count, self.multiworld.max_emblem_cap[self.player].value)
|
||||
extra_junk_count = raw_emblem_count - total_emblem_count
|
||||
|
||||
self.emblems_for_cannons_core = math.floor(
|
||||
|
@ -253,7 +266,7 @@ class SA2BWorld(World):
|
|||
|
||||
first_cannons_core_mission, final_cannons_core_mission = get_first_and_last_cannons_core_missions(self.mission_map, self.mission_count_map)
|
||||
|
||||
connect_regions(self.multiworld, self.player, gates, self.emblems_for_cannons_core, self.gate_bosses, first_cannons_core_mission, final_cannons_core_mission)
|
||||
connect_regions(self.multiworld, self.player, gates, self.emblems_for_cannons_core, self.gate_bosses, self.boss_rush_map, first_cannons_core_mission, final_cannons_core_mission)
|
||||
|
||||
max_required_emblems = max(max(emblem_requirement_list), self.emblems_for_cannons_core)
|
||||
itempool += [self.create_item(ItemName.emblem) for _ in range(max_required_emblems)]
|
||||
|
@ -271,6 +284,9 @@ class SA2BWorld(World):
|
|||
trap_weights += ([ItemName.gravity_trap] * self.multiworld.gravity_trap_weight[self.player].value)
|
||||
trap_weights += ([ItemName.exposition_trap] * self.multiworld.exposition_trap_weight[self.player].value)
|
||||
#trap_weights += ([ItemName.darkness_trap] * self.multiworld.darkness_trap_weight[self.player].value)
|
||||
trap_weights += ([ItemName.ice_trap] * self.multiworld.ice_trap_weight[self.player].value)
|
||||
trap_weights += ([ItemName.slow_trap] * self.multiworld.slow_trap_weight[self.player].value)
|
||||
trap_weights += ([ItemName.cutscene_trap] * self.multiworld.cutscene_trap_weight[self.player].value)
|
||||
trap_weights += ([ItemName.pong_trap] * self.multiworld.pong_trap_weight[self.player].value)
|
||||
|
||||
junk_count += extra_junk_count
|
||||
|
@ -347,12 +363,52 @@ class SA2BWorld(World):
|
|||
|
||||
self.music_map = dict(zip(musiclist_o, musiclist_s))
|
||||
|
||||
def create_item(self, name: str, force_non_progression=False) -> Item:
|
||||
# Voice Shuffle
|
||||
if self.multiworld.voice_shuffle[self.player] == "shuffled":
|
||||
voicelist_o = list(range(0, 2623))
|
||||
voicelist_s = voicelist_o.copy()
|
||||
self.multiworld.random.shuffle(voicelist_s)
|
||||
|
||||
self.voice_map = dict(zip(voicelist_o, voicelist_s))
|
||||
elif self.multiworld.voice_shuffle[self.player] == "rude":
|
||||
voicelist_o = list(range(0, 2623))
|
||||
voicelist_s = voicelist_o.copy()
|
||||
self.multiworld.random.shuffle(voicelist_s)
|
||||
|
||||
for i in range(len(voicelist_s)):
|
||||
if self.multiworld.random.randint(1,100) > 80:
|
||||
voicelist_s[i] = 17
|
||||
|
||||
self.voice_map = dict(zip(voicelist_o, voicelist_s))
|
||||
elif self.multiworld.voice_shuffle[self.player] == "chao":
|
||||
voicelist_o = list(range(0, 2623))
|
||||
voicelist_s = voicelist_o.copy()
|
||||
self.multiworld.random.shuffle(voicelist_s)
|
||||
|
||||
for i in range(len(voicelist_s)):
|
||||
voicelist_s[i] = self.multiworld.random.choice(range(2586, 2608))
|
||||
|
||||
self.voice_map = dict(zip(voicelist_o, voicelist_s))
|
||||
elif self.multiworld.voice_shuffle[self.player] == "singularity":
|
||||
voicelist_o = list(range(0, 2623))
|
||||
voicelist_s = [self.multiworld.random.choice(voicelist_o)] * len(voicelist_o)
|
||||
|
||||
self.voice_map = dict(zip(voicelist_o, voicelist_s))
|
||||
else:
|
||||
voicelist_o = list(range(0, 2623))
|
||||
voicelist_s = voicelist_o.copy()
|
||||
|
||||
self.voice_map = dict(zip(voicelist_o, voicelist_s))
|
||||
|
||||
|
||||
def create_item(self, name: str, force_non_progression=False, goal=0) -> Item:
|
||||
data = item_table[name]
|
||||
|
||||
if force_non_progression:
|
||||
classification = ItemClassification.filler
|
||||
elif name == ItemName.emblem:
|
||||
elif name == ItemName.emblem or \
|
||||
name in emeralds_table.keys() or \
|
||||
(name == ItemName.knuckles_shovel_claws and goal in [4, 5]):
|
||||
classification = ItemClassification.progression_skip_balancing
|
||||
elif data.progression:
|
||||
classification = ItemClassification.progression
|
||||
|
@ -369,18 +425,28 @@ class SA2BWorld(World):
|
|||
self.multiworld.random.choice(junk_table.keys())
|
||||
|
||||
def set_rules(self):
|
||||
set_rules(self.multiworld, self.player, self.gate_bosses, self.mission_map, self.mission_count_map)
|
||||
set_rules(self.multiworld, self.player, self.gate_bosses, self.boss_rush_map, self.mission_map, self.mission_count_map)
|
||||
|
||||
def write_spoiler(self, spoiler_handle: typing.TextIO):
|
||||
if self.multiworld.number_of_level_gates[self.player].value > 0:
|
||||
if self.multiworld.number_of_level_gates[self.player].value > 0 or self.multiworld.goal[self.player].value in [4, 5, 6]:
|
||||
spoiler_handle.write("\n")
|
||||
header_text = "Sonic Adventure 2 Bosses for {}:\n"
|
||||
header_text = header_text.format(self.multiworld.player_name[self.player])
|
||||
spoiler_handle.write(header_text)
|
||||
|
||||
if self.multiworld.number_of_level_gates[self.player].value > 0:
|
||||
for x in range(len(self.gate_bosses.values())):
|
||||
text = "Gate {0} Boss: {1}\n"
|
||||
text = text.format((x + 1), get_boss_name(self.gate_bosses[x + 1]))
|
||||
spoiler_handle.writelines(text)
|
||||
spoiler_handle.write("\n")
|
||||
|
||||
if self.multiworld.goal[self.player].value in [4, 5, 6]:
|
||||
for x in range(len(self.boss_rush_map.values())):
|
||||
text = "Boss Rush Boss {0}: {1}\n"
|
||||
text = text.format((x + 1), get_boss_name(self.boss_rush_map[x]))
|
||||
spoiler_handle.writelines(text)
|
||||
spoiler_handle.write("\n")
|
||||
|
||||
def extend_hint_information(self, hint_data: typing.Dict[int, typing.Dict[int, str]]):
|
||||
gate_names = [
|
||||
|
|
Loading…
Reference in New Issue