Multiple: Followed a rabbit hole of moving LttP Rom generation to AutoWorld

Generator: Re-allow names with spaces (and see what breaks)
Generator: Removed teams (Note that teams are intended to move from a generation step feature to a server runtime feature, allowing dynamic creation of an already generated MW)
LttP: All Rom Options are now on the new system
LttP: palette option "random" is now called "good"
LttP: Roms are now created as part of the general output file creation step
LttP: disable Music is now Music, removing potential double negatives
LttP & Factorio: Progressive option random is now grouped_random
LttP: Enemy damage option random is now Enemy damage: chaos
This commit is contained in:
Fabian Dill
2021-08-09 09:15:41 +02:00
parent 01d88c362a
commit ba3bb201cd
23 changed files with 328 additions and 279 deletions

View File

@@ -11,9 +11,11 @@ class AssembleOptions(type):
for base in bases:
if hasattr(base, "options"):
options.update(base.options)
name_lookup.update(name_lookup)
name_lookup.update(base.name_lookup)
new_options = {name[7:].lower(): option_id for name, option_id in attrs.items() if
name.startswith("option_")}
if "random" in new_options:
raise Exception("Choice option 'random' cannot be manually assigned.")
attrs["name_lookup"].update({option_id: name for name, option_id in new_options.items()})
options.update(new_options)
@@ -47,7 +49,12 @@ class Option(metaclass=AssembleOptions):
def __hash__(self):
return hash(self.value)
@property
def current_key(self) -> str:
return self.name_lookup[self.value]
def get_current_option_name(self) -> str:
"""For display purposes."""
return self.get_option_name(self.value)
def get_option_name(self, value: typing.Any) -> str:
@@ -122,8 +129,13 @@ class Choice(Option):
@classmethod
def from_text(cls, text: str) -> Choice:
text = text.lower()
# TODO: turn on after most people have adjusted their yamls to no longer have suboptions with "random" in them
# maybe in 0.2?
# if text == "random":
# return cls(random.choice(list(cls.options.values())))
for optionname, value in cls.options.items():
if optionname == text.lower():
if optionname == text:
return cls(value)
raise KeyError(
f'Could not find option "{text}" for "{cls.__name__}", '