Merge branch 'OriginOverworldShuffle' into GwaaKiwi
This commit is contained in:
@@ -75,6 +75,8 @@ def add_moldorm_to_list(sprite_list, room_id):
|
||||
|
||||
|
||||
def add_helmasaur_king_to_list(sprite_list, room_id):
|
||||
if room_id == 0x29: # preserves helma-copter behavior in skull woods
|
||||
sprite_list.clear()
|
||||
sprite_list.insert(0, create_sprite(room_id, EnemySprite.HelmasaurKing, 0x00, 0, 0x07, 0x06))
|
||||
|
||||
|
||||
@@ -146,8 +148,6 @@ def boss_writes(world, player, rom):
|
||||
rom.write_byte(snes_to_pc(0x368102), eye_number) # enemizer flag
|
||||
rom.write_byte(snes_to_pc(0x1DDBB3), eye_number) # loop variable
|
||||
data_tables = world.data_tables[player]
|
||||
arrghus_can_swim = True
|
||||
water_tiles_on = True
|
||||
for dungeon in world.get_dungeons(player):
|
||||
for level, boss in dungeon.bosses.items():
|
||||
if not boss or boss.name in ['Agahnim', 'Agahnim2']:
|
||||
@@ -157,10 +157,6 @@ def boss_writes(world, player, rom):
|
||||
# room changes
|
||||
if boss.name == 'Arrghus' and (dungeon.name != 'Swamp Palace' or level is not None):
|
||||
rom.write_byte(snes_to_pc(0x0DB6BE), 0) # arrghus can stand on ground
|
||||
arrghus_can_swim = False
|
||||
if boss.name != 'Arrghus' and dungeon.name == 'Swamp Palace' and level is None:
|
||||
remove_water_tiles(data_tables)
|
||||
water_tiles_on = False
|
||||
if boss.name == 'Trinexx' and (dungeon.name != 'Turtle Rock' or level is not None):
|
||||
add_shell_to_boss_room(data_tables, dungeon.name, level, 0xFF2)
|
||||
data_tables.room_headers[room_id].byte_0 = 0x60
|
||||
@@ -181,8 +177,6 @@ def boss_writes(world, player, rom):
|
||||
if not world.shuffle_followers[player]:
|
||||
# maiden is deleted
|
||||
del data_tables.uw_enemy_table.room_map[0x45][0]
|
||||
if not arrghus_can_swim and water_tiles_on:
|
||||
remove_water_tiles(data_tables)
|
||||
|
||||
|
||||
boss_defaults = {
|
||||
|
||||
@@ -372,7 +372,7 @@ def init_sprite_requirements():
|
||||
SpriteRequirement(EnemySprite.DiggingGameNPC).affix().sub_group(1, 0x2a),
|
||||
SpriteRequirement(EnemySprite.Ganon).exalt().sub_group(0, 0x21).sub_group(1, 0x41)
|
||||
.sub_group(2, 0x45).sub_group(3, 0x33),
|
||||
SpriteRequirement(EnemySprite.Faerie).immune(),
|
||||
SpriteRequirement(EnemySprite.Faerie).ow_skip().immune(),
|
||||
SpriteRequirement(EnemySprite.FakeMasterSword).immune().sub_group(3, 0x11),
|
||||
SpriteRequirement(EnemySprite.MagicShopAssistant).affix().sub_group(0, 0x4b).sub_group(3, 0x5a),
|
||||
SpriteRequirement(EnemySprite.SomariaPlatform).affix().sub_group(2, 0x27),
|
||||
|
||||
@@ -114,7 +114,7 @@ def create_item_pool_config(world):
|
||||
single_arrow_placement.append('Red Shield Shop - Right')
|
||||
config.static_placement[player]['Single Arrow'] = single_arrow_placement
|
||||
config.location_groups[player] = [
|
||||
LocationGroup('Major').locs(mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers']),
|
||||
LocationGroup('Major').locs(mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers'] + mode_grouping['Prizes']),
|
||||
LocationGroup('bkhp').locs(mode_grouping['Heart Pieces']),
|
||||
LocationGroup('bktrash').locs(mode_grouping['Overworld Trash'] + mode_grouping['Dungeon Trash']),
|
||||
LocationGroup('bkgt').locs(mode_grouping['GT Trash'])]
|
||||
@@ -129,11 +129,9 @@ def create_item_pool_config(world):
|
||||
LocationGroup('Backup')
|
||||
]
|
||||
config.item_pool = {}
|
||||
init_set = mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers']
|
||||
init_set = mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers'] + mode_grouping['Prizes']
|
||||
for player in range(1, world.players + 1):
|
||||
groups = LocationGroup('Major').locs(init_set)
|
||||
if world.prizeshuffle[player] != 'none':
|
||||
groups.locations.extend(mode_grouping['Prizes'])
|
||||
if world.bigkeyshuffle[player] != 'none':
|
||||
groups.locations.extend(mode_grouping['Big Keys'])
|
||||
if world.dropshuffle[player] != 'none':
|
||||
@@ -167,7 +165,7 @@ def create_item_pool_config(world):
|
||||
dungeon_set = (mode_grouping['Big Chests'] + mode_grouping['Dungeon Trash'] + mode_grouping['Big Keys'] +
|
||||
mode_grouping['Heart Containers'] + mode_grouping['GT Trash'] + mode_grouping['Small Keys'] +
|
||||
mode_grouping['Compasses'] + mode_grouping['Maps'] + mode_grouping['Key Drops'] +
|
||||
mode_grouping['Pot Keys'] + mode_grouping['Big Key Drops'])
|
||||
mode_grouping['Pot Keys'] + mode_grouping['Big Key Drops'] + mode_grouping['Prizes'])
|
||||
dungeon_set = set(dungeon_set)
|
||||
for loc in world.get_locations():
|
||||
if loc.parent_region.dungeon and loc.type in [LocationType.Pot, LocationType.Drop]:
|
||||
@@ -859,7 +857,7 @@ major_items = {'Bombos', 'Book of Mudora', 'Cane of Somaria', 'Ether', 'Fire Rod
|
||||
'Sanctuary Heart Container', 'Boss Heart Container', 'Progressive Shield', 'Ocarina (Activated)',
|
||||
'Mirror Shield', 'Progressive Armor', 'Blue Mail', 'Red Mail', 'Progressive Sword', 'Fighter Sword',
|
||||
'Master Sword', 'Tempered Sword', 'Golden Sword', 'Bow', 'Silver Arrows', 'Triforce Piece', 'Moon Pearl',
|
||||
'Progressive Bow', 'Progressive Bow (Alt)'}
|
||||
'Progressive Bow', 'Progressive Bow (Alt)', 'Triforce'}
|
||||
|
||||
vanilla_swords = {"Link's Uncle", 'Master Sword Pedestal', 'Blacksmith', 'Pyramid Fairy - Left'}
|
||||
|
||||
|
||||
@@ -11,9 +11,8 @@ def check_requirements(console=False):
|
||||
'pyyaml': 'yaml'}
|
||||
missing = []
|
||||
for package, import_name in check_packages.items():
|
||||
try:
|
||||
__import__(import_name)
|
||||
except ImportError:
|
||||
spec = importlib.util.find_spec(import_name)
|
||||
if spec is None:
|
||||
missing.append(package)
|
||||
if len(missing) > 0:
|
||||
packages = ','.join(missing)
|
||||
|
||||
Reference in New Issue
Block a user