diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index b1e695a2..1ed69b2a 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -3,7 +3,7 @@ import typing from ..AutoWorld import World -from BaseClasses import Region, Entrance, Location, Item +from BaseClasses import Region, Entrance, Location, Item, RegionType from .Technologies import base_tech_table, recipe_sources, base_technology_table, \ all_ingredient_names, all_product_sources, required_technologies, get_rocket_requirements, rocket_recipes, \ progressive_technology_table, common_tech_table, tech_to_progressive_lookup, progressive_tech_table, \ @@ -33,7 +33,7 @@ class Factorio(World): """ game: str = "Factorio" static_nodes = {"automation", "logistics", "rocket-silo"} - custom_recipes = {} + custom_recipes: typing.Dict[str, Recipe] advancement_technologies: typing.Set[str] item_name_to_id = all_items @@ -46,6 +46,7 @@ class Factorio(World): def __init__(self, world, player: int): super(Factorio, self).__init__(world, player) self.advancement_technologies = set() + self.custom_recipes = {} def generate_basic(self): player = self.player @@ -80,10 +81,10 @@ class Factorio(World): def create_regions(self): player = self.player - menu = Region("Menu", None, "Menu", player, self.world) + menu = Region("Menu", RegionType.Generic, "Menu", player, self.world) crash = Entrance(player, "Crash Land", menu) menu.exits.append(crash) - nauvis = Region("Nauvis", None, "Nauvis", player, self.world) + nauvis = Region("Nauvis", RegionType.Generic, "Nauvis", player, self.world) skip_silo = self.world.silo[self.player].value == Silo.option_spawn for tech_name, tech_id in base_tech_table.items(): @@ -213,7 +214,7 @@ class Factorio(World): Recipe: """Generate a recipe from pool with time and cost similar to original * factor""" new_ingredients = {} - self.world.random.shuffle(pool) + pool = sorted(pool, key=lambda x: self.world.random.random()) target_raw = int(sum((count for ingredient, count in original.base_cost.items())) * factor) target_energy = original.total_energy * factor target_num_ingredients = len(original.ingredients) @@ -332,7 +333,7 @@ class Factorio(World): valid_pool += sorted(science_pack_pools[pack]) if self.world.silo[self.player].value == Silo.option_randomize_recipe: - new_recipe = self.make_balanced_recipe(recipes["rocket-silo"], valid_pool.copy(), + new_recipe = self.make_balanced_recipe(recipes["rocket-silo"], valid_pool, factor=(self.world.max_science_pack[self.player].value + 1) / 7) self.custom_recipes["rocket-silo"] = new_recipe @@ -340,6 +341,14 @@ class Factorio(World): new_recipe = self.make_balanced_recipe(recipes["satellite"], valid_pool, factor=(self.world.max_science_pack[self.player].value + 1) / 7) self.custom_recipes["satellite"] = new_recipe + bridge = "ap-energy-bridge" + new_recipe = self.make_quick_recipe( + Recipe(bridge, "crafting", {"replace_1": 1, "replace_2": 1, "replace_3": 1}, + {bridge: 1}, 10), + sorted(science_pack_pools[self.world.max_science_pack[self.player].get_ordered_science_packs()[0]])) + for ingredient_name in new_recipe.ingredients: + new_recipe.ingredients[ingredient_name] = self.world.random.randint(3, 10) + self.custom_recipes[bridge] = new_recipe needed_recipes = self.world.max_science_pack[self.player].get_allowed_packs() | {"rocket-part"} if self.world.silo[self.player] != Silo.option_spawn: diff --git a/worlds/factorio/data/mod_template/data.lua b/worlds/factorio/data/mod_template/data.lua index c5cb8988..c5f2745b 100644 --- a/worlds/factorio/data/mod_template/data.lua +++ b/worlds/factorio/data/mod_template/data.lua @@ -18,7 +18,6 @@ local energy_bridge_recipe = table.deepcopy(data.raw["recipe"]["accumulator"]) energy_bridge_recipe.name = "ap-energy-bridge" energy_bridge_recipe.result = energy_bridge_item.name energy_bridge_recipe.energy_required = 1 -energy_bridge_recipe.ingredients = { {# {type="item", name="iron-plate", amount=1} TODO: randomized recipe #} } energy_bridge_recipe.enabled = {{ energy_link }} energy_bridge_recipe.localised_name = "Archipelago EnergyLink Bridge" data.raw["recipe"]["ap-energy-bridge"] = energy_bridge_recipe