diff --git a/worlds/factorio/Mod.py b/worlds/factorio/Mod.py index 6fae00e4..07c8b6ea 100644 --- a/worlds/factorio/Mod.py +++ b/worlds/factorio/Mod.py @@ -113,6 +113,8 @@ def generate_mod(world, output_directory: str): "goal": multiworld.goal[player].value} for factorio_option in Options.factorio_options: + if factorio_option == "free_sample_blacklist": + continue template_data[factorio_option] = getattr(multiworld, factorio_option)[player].value if getattr(multiworld, "silo")[player].value == Options.Silo.option_randomize_recipe: @@ -121,6 +123,8 @@ def generate_mod(world, output_directory: str): if getattr(multiworld, "satellite")[player].value == Options.Satellite.option_randomize_recipe: template_data["free_sample_blacklist"]["satellite"] = 1 + template_data["free_sample_blacklist"].update(multiworld.free_sample_blacklist[player].value) + control_code = control_template.render(**template_data) data_template_code = data_template.render(**template_data) data_final_fixes_code = data_final_template.render(**template_data) diff --git a/worlds/factorio/Options.py b/worlds/factorio/Options.py index 66d7a0be..a13c0e60 100644 --- a/worlds/factorio/Options.py +++ b/worlds/factorio/Options.py @@ -154,6 +154,18 @@ class FactorioStartItems(ItemDict): default = {"burner-mining-drill": 19, "stone-furnace": 19} +class FactorioFreeSampleBlacklist(OptionDict): + """any non-zero value means that item is blacklisted from free samples. zero overrides the built-in blacklist""" + displayname = "Free Sample Blacklist" + + def __init__(self, value: typing.Dict[str, int]): + self.value = value or {} + if any(type(value) not in [int, bool] for value in self.value.values()): + raise Exception("Cannot have non-number blacklist options") + for key in self.value.keys(): + self.value[key] = 1 if self.value[key] else 0 + + class TrapCount(Range): range_end = 4 @@ -322,6 +334,7 @@ factorio_options: typing.Dict[str, type(Option)] = { "free_samples": FreeSamples, "tech_tree_information": TechTreeInformation, "starting_items": FactorioStartItems, + "free_sample_blacklist": FactorioFreeSampleBlacklist, "recipe_time": RecipeTime, "recipe_ingredients": RecipeIngredients, "imported_blueprints": ImportedBlueprint,