(for now) only collect ER hint info for LttP
Optimize Entrance
This commit is contained in:
parent
3460c9f714
commit
20b173453d
|
@ -934,7 +934,6 @@ class Region(object):
|
|||
self.is_dark_world = False
|
||||
self.spot_type = 'Region'
|
||||
self.hint_text = hint
|
||||
self.recursion_count = 0
|
||||
self.player = player
|
||||
|
||||
def can_reach(self, state: CollectionState):
|
||||
|
@ -966,6 +965,7 @@ class Region(object):
|
|||
|
||||
|
||||
class Entrance(object):
|
||||
spot_type = 'Entrance'
|
||||
|
||||
def __init__(self, player: int, name: str = '', parent=None):
|
||||
self.name = name
|
||||
|
@ -973,9 +973,6 @@ class Entrance(object):
|
|||
self.connected_region = None
|
||||
self.target = None
|
||||
self.addresses = None
|
||||
self.spot_type = 'Entrance'
|
||||
self.recursion_count = 0
|
||||
self.vanilla = None
|
||||
self.access_rule = lambda state: True
|
||||
self.player = player
|
||||
self.hide_path = False
|
||||
|
@ -988,11 +985,10 @@ class Entrance(object):
|
|||
|
||||
return False
|
||||
|
||||
def connect(self, region, addresses=None, target=None, vanilla=None):
|
||||
def connect(self, region, addresses=None, target=None):
|
||||
self.connected_region = region
|
||||
self.target = target
|
||||
self.addresses = addresses
|
||||
self.vanilla = vanilla
|
||||
region.entrances.append(self)
|
||||
|
||||
def __repr__(self):
|
||||
|
|
4
Main.py
4
Main.py
|
@ -410,13 +410,13 @@ def main(args, seed=None):
|
|||
|
||||
def get_entrance_to_region(region: Region):
|
||||
for entrance in region.entrances:
|
||||
if entrance.parent_region.type in (RegionType.DarkWorld, RegionType.LightWorld):
|
||||
if entrance.parent_region.type in (RegionType.DarkWorld, RegionType.LightWorld, RegionType.Generic):
|
||||
return entrance
|
||||
for entrance in region.entrances: # BFS might be better here, trying DFS for now.
|
||||
return get_entrance_to_region(entrance.parent_region)
|
||||
|
||||
# collect ER hint info
|
||||
er_hint_data = {player: {} for player in range(1, world.players + 1) if
|
||||
er_hint_data = {player: {} for player in world.alttp_player_ids if
|
||||
world.shuffle[player] != "vanilla" or world.retro[player]}
|
||||
from worlds.alttp.Regions import RegionType
|
||||
for region in world.regions:
|
||||
|
|
|
@ -24,11 +24,11 @@ class AutoWorldRegister(type):
|
|||
class AutoLogicRegister(type):
|
||||
def __new__(cls, name, bases, dct):
|
||||
new_class = super().__new__(cls, name, bases, dct)
|
||||
for function_name, function in dct.items():
|
||||
if hasattr(function, "__call__"): # callable
|
||||
if hasattr(CollectionState, function_name):
|
||||
raise Exception(f"Name conflict on Logic Mixin {name} trying to overwrite {function_name}")
|
||||
setattr(CollectionState, function_name, function)
|
||||
for item_name, function in dct.items():
|
||||
if not item_name.startswith("__"):
|
||||
if hasattr(CollectionState, item_name):
|
||||
raise Exception(f"Name conflict on Logic Mixin {name} trying to overwrite {item_name}")
|
||||
setattr(CollectionState, item_name, function)
|
||||
return new_class
|
||||
|
||||
def call_single(world: MultiWorld, method_name: str, player: int):
|
||||
|
@ -115,7 +115,8 @@ class World(metaclass=AutoWorldRegister):
|
|||
Warning: this may be called with self.world = None, for example by MultiServer"""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# any methods attached to this can be used as part of CollectionState,
|
||||
# please use a prefix as all of them get clobbered together
|
||||
class LogicMixin(metaclass=AutoLogicRegister):
|
||||
pass
|
||||
pass
|
||||
|
|
|
@ -23,7 +23,6 @@ class MinecraftWorld(World):
|
|||
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
||||
location_name_to_id = {name: data.id for name, data in advancement_table.items()}
|
||||
|
||||
|
||||
def _get_mc_data(self):
|
||||
exits = ["Overworld Structure 1", "Overworld Structure 2", "Nether Structure 1", "Nether Structure 2",
|
||||
"The End Structure"]
|
||||
|
@ -37,7 +36,6 @@ class MinecraftWorld(World):
|
|||
'structures': {exit: self.world.get_entrance(exit, self.player).connected_region.name for exit in exits}
|
||||
}
|
||||
|
||||
|
||||
def generate_basic(self):
|
||||
|
||||
# Generate item pool
|
||||
|
@ -61,21 +59,17 @@ class MinecraftWorld(World):
|
|||
completion = self.create_item("Victory")
|
||||
self.world.get_location("Ender Dragon", self.player).place_locked_item(completion)
|
||||
itempool.remove(completion)
|
||||
|
||||
self.world.itempool += itempool
|
||||
|
||||
|
||||
def set_rules(self):
|
||||
set_rules(self.world, self.player)
|
||||
|
||||
|
||||
def create_regions(self):
|
||||
def MCRegion(region_name: str, exits=[]):
|
||||
ret = Region(region_name, None, region_name, self.player)
|
||||
ret.world = self.world
|
||||
ret.locations = [ MinecraftAdvancement(self.player, loc_name, loc_data.id, ret)
|
||||
ret = Region(region_name, None, region_name, self.player, self.world)
|
||||
ret.locations = [MinecraftAdvancement(self.player, loc_name, loc_data.id, ret)
|
||||
for loc_name, loc_data in advancement_table.items()
|
||||
if loc_data.region == region_name ]
|
||||
if loc_data.region == region_name]
|
||||
for exit in exits:
|
||||
ret.exits.append(Entrance(self.player, exit, ret))
|
||||
return ret
|
||||
|
@ -83,7 +77,6 @@ class MinecraftWorld(World):
|
|||
self.world.regions += [MCRegion(*r) for r in mc_regions]
|
||||
link_minecraft_structures(self.world, self.player)
|
||||
|
||||
|
||||
def generate_output(self):
|
||||
import json
|
||||
from base64 import b64encode
|
||||
|
@ -94,7 +87,6 @@ class MinecraftWorld(World):
|
|||
with open(output_path(filename), 'wb') as f:
|
||||
f.write(b64encode(bytes(json.dumps(data), 'utf-8')))
|
||||
|
||||
|
||||
def fill_slot_data(self):
|
||||
slot_data = self._get_mc_data()
|
||||
for option_name in minecraft_options:
|
||||
|
@ -102,7 +94,6 @@ class MinecraftWorld(World):
|
|||
slot_data[option_name] = int(option.value)
|
||||
return slot_data
|
||||
|
||||
|
||||
def create_item(self, name: str) -> Item:
|
||||
item_data = item_table[name]
|
||||
return MinecraftItem(name, item_data.progression, item_data.code, self.player)
|
||||
|
|
Loading…
Reference in New Issue