Fixes for compatibility with compiling perf
Couple fixes for standard+ER
This commit is contained in:
@@ -1787,8 +1787,8 @@ class Spoiler(object):
|
||||
for player in range(1, self.world.players + 1):
|
||||
if self.world.boss_shuffle[player] != 'none':
|
||||
bossmap = self.bosses[player] if self.world.players > 1 else self.bosses
|
||||
outfile.write(f'\n\nBosses (Player {player}):\n\n')
|
||||
outfile.write('\n'.join([f'{x}: {y}' for x, y in bossmap.items()]))
|
||||
outfile.write(f'\n\nBosses ({self.world.get_player_names(player)}):\n\n')
|
||||
outfile.write('\n'.join([f'{x}: {y}' for x, y in bossmap.items() if y not in ['Agahnim', 'Agahnim 2', 'Ganon']]))
|
||||
|
||||
# locations: Change up location names; in the instance of a location with multiple sections, it'll try to translate the room name
|
||||
# items: Item names
|
||||
|
||||
@@ -8,7 +8,7 @@ from enum import unique, Flag
|
||||
from functools import reduce
|
||||
from BaseClasses import RegionType, Door, DoorType, Direction, Sector, CrystalBarrier
|
||||
from Regions import key_only_locations
|
||||
from Dungeons import dungeon_regions, region_starts, split_region_starts, flexible_starts
|
||||
from Dungeons import dungeon_regions, region_starts, standard_starts, split_region_starts, flexible_starts
|
||||
from Dungeons import dungeon_bigs, dungeon_keys, dungeon_hints
|
||||
from Items import ItemFactory
|
||||
from RoomData import DoorKind, PairedDoor
|
||||
@@ -148,9 +148,10 @@ def vanilla_key_logic(world, player):
|
||||
while len(sector_queue) > 0:
|
||||
builder = sector_queue.popleft()
|
||||
|
||||
split_dungeon = builder.name.startswith('Desert Palace') or builder.name.startswith('Skull Woods')
|
||||
origin_list = list(entrances_map[builder.name])
|
||||
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, builder.name)
|
||||
if len(origin_list) <= 0 or not pre_validate(builder, origin_list, world, player):
|
||||
if len(origin_list) <= 0 or not pre_validate(builder, origin_list, split_dungeon, world, player):
|
||||
if last_key == builder.name or loops > 1000:
|
||||
origin_name = world.get_region(origin_list[0], player).entrances[0].parent_region.name if len(origin_list) > 0 else 'no origin'
|
||||
raise Exception('Infinite loop detected for "%s" located at %s' % (builder.name, origin_name))
|
||||
@@ -394,6 +395,8 @@ def determine_entrance_list(world, player):
|
||||
connections = {}
|
||||
for key, r_names in region_starts.items():
|
||||
entrance_map[key] = []
|
||||
if world.mode[player] == 'standard' and key in standard_starts.keys():
|
||||
r_names = standard_starts[key]
|
||||
for region_name in r_names:
|
||||
region = world.get_region(region_name, player)
|
||||
for ent in region.entrances:
|
||||
@@ -1173,9 +1176,6 @@ def find_inaccessible_regions(world, player):
|
||||
if connect and connect.type is not RegionType.Dungeon and connect not in queue and connect not in visited_regions:
|
||||
queue.append(connect)
|
||||
world.inaccessible_regions[player].extend([r.name for r in all_regions.difference(visited_regions) if valid_inaccessible_region(r)])
|
||||
if world.mode[player] == 'standard':
|
||||
world.inaccessible_regions[player].append('Hyrule Castle Ledge')
|
||||
world.inaccessible_regions[player].append('Sewer Drop')
|
||||
logger = logging.getLogger('')
|
||||
logger.debug('Inaccessible Regions:')
|
||||
for r in world.inaccessible_regions[player]:
|
||||
|
||||
@@ -331,6 +331,10 @@ region_starts = {
|
||||
'Ganons Tower': ['GT Lobby']
|
||||
}
|
||||
|
||||
standard_starts = {
|
||||
'Hyrule Castle': ['Hyrule Castle Lobby']
|
||||
}
|
||||
|
||||
split_region_starts = {
|
||||
'Desert Palace': {
|
||||
'Back': ['Desert Back Lobby'],
|
||||
|
||||
@@ -3498,7 +3498,6 @@ inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Dese
|
||||
('Ice Palace Exit', 'Dark Lake Hylia')
|
||||
]
|
||||
|
||||
# format:
|
||||
indirect_connections = {
|
||||
'Turtle Rock (Top)': 'Turtle Rock',
|
||||
'East Dark World': 'Pyramid Fairy',
|
||||
@@ -3509,6 +3508,7 @@ indirect_connections = {
|
||||
'Light World': 'Pyramid Fairy',
|
||||
'Old Man Cave': 'Old Man S&Q'
|
||||
}
|
||||
# format:
|
||||
# Key=Name
|
||||
# addr = (door_index, exitdata) # multiexit
|
||||
# | ([addr], None) # holes
|
||||
|
||||
11
Main.py
11
Main.py
@@ -8,7 +8,7 @@ import random
|
||||
import time
|
||||
import zlib
|
||||
|
||||
from BaseClasses import World, CollectionState, Item, Region, Location, Shop
|
||||
from BaseClasses import World, CollectionState, Item, Region, Location, Shop, Entrance
|
||||
from Items import ItemFactory
|
||||
from KeyDoorShuffle import validate_key_placement
|
||||
from Regions import create_regions, create_shops, mark_light_world_regions, create_dungeon_regions
|
||||
@@ -24,7 +24,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute
|
||||
from ItemList import generate_itempool, difficulties, fill_prizes
|
||||
from Utils import output_path, parse_player_names
|
||||
|
||||
__version__ = '0.1.0.5-u'
|
||||
__version__ = '0.1.0.6-u'
|
||||
|
||||
class EnemizerError(RuntimeError):
|
||||
pass
|
||||
@@ -375,6 +375,13 @@ def copy_world(world):
|
||||
create_dungeons(ret, player)
|
||||
|
||||
copy_dynamic_regions_and_locations(world, ret)
|
||||
for player in range(1, world.players + 1):
|
||||
if world.mode[player] == 'standard':
|
||||
parent = ret.get_region('Menu', player)
|
||||
target = ret.get_region('Hyrule Castle Secret Entrance', player)
|
||||
connection = Entrance(player, 'Uncle S&Q', parent)
|
||||
parent.exits.append(connection)
|
||||
connection.connect(target)
|
||||
|
||||
# copy bosses
|
||||
for dungeon in world.dungeons:
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* Standard mode generation improvements
|
||||
* Spoiler lists bosses (multiworld compatible)
|
||||
* Bombs escape not valid for Crossed Dungeon
|
||||
* Graph algorithm speed improvement for placements and playthrough
|
||||
|
||||
### Experimental features
|
||||
|
||||
|
||||
2
Rules.py
2
Rules.py
@@ -204,8 +204,6 @@ def global_rules(world, player):
|
||||
set_rule(world.get_entrance('Swamp Drain WN', player), lambda state: state.has('Drained Swamp', player))
|
||||
set_rule(world.get_entrance('Swamp Flooded Room WS', player), lambda state: state.has('Drained Swamp', player))
|
||||
set_rule(world.get_entrance('Swamp Flooded Room Ladder', player), lambda state: state.has('Drained Swamp', player))
|
||||
set_rule(world.get_entrance('Swamp Flooded Spot Ladder', player), lambda state: state.has('Drained Swamp', player) or state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Swamp Drain Left Up Stairs', player), lambda state: state.has('Drained Swamp', player) or state.has('Flippers', player))
|
||||
set_rule(world.get_location('Swamp Palace - Flooded Room - Left', player), lambda state: state.has('Drained Swamp', player))
|
||||
set_rule(world.get_location('Swamp Palace - Flooded Room - Right', player), lambda state: state.has('Drained Swamp', player))
|
||||
set_rule(world.get_entrance('Swamp Flooded Spot Ladder', player), lambda state: state.has('Flippers', player) or state.has('Drained Swamp', player))
|
||||
|
||||
@@ -284,16 +284,16 @@
|
||||
"shufflebosses": {
|
||||
"choices": [
|
||||
"none",
|
||||
"basic",
|
||||
"normal",
|
||||
"chaos"
|
||||
"simple",
|
||||
"full",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"shuffleenemies": {
|
||||
"choices": [
|
||||
"none",
|
||||
"shuffled",
|
||||
"chaos"
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"enemy_health": {
|
||||
@@ -309,7 +309,7 @@
|
||||
"choices": [
|
||||
"default",
|
||||
"shuffled",
|
||||
"chaos"
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"shufflepots": {
|
||||
|
||||
Reference in New Issue
Block a user