From 2d8a6e84c167d04ebde38879fcbd3321014cf1b6 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Mon, 2 Aug 2021 19:12:42 +0200 Subject: [PATCH] Factorio: generalize merging of progressive technologies use it for: train network + braking force flamethrower + refined flammables inserters + inserter capacity --- worlds/factorio/Technologies.py | 34 +++++++++++++++++++++++++++------ worlds/factorio/__init__.py | 2 +- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/worlds/factorio/Technologies.py b/worlds/factorio/Technologies.py index 82dbea86..19a2f759 100644 --- a/worlds/factorio/Technologies.py +++ b/worlds/factorio/Technologies.py @@ -355,24 +355,45 @@ progressive_rows["progressive-processing"] = ( progressive_rows["progressive-rocketry"] = ("rocketry", "explosive-rocketry", "atomic-bomb") progressive_rows["progressive-vehicle"] = ("automobilism", "tank", "spidertron") progressive_rows["progressive-train-network"] = ("railway", "fluid-wagon", - "automated-rail-transportation", "rail-signals") + progressive_rows["progressive-braking-force"] -del(progressive_rows["progressive-braking-force"]) + "automated-rail-transportation", "rail-signals") progressive_rows["progressive-engine"] = ("engine", "electric-engine") progressive_rows["progressive-armor"] = ("heavy-armor", "modular-armor", "power-armor", "power-armor-mk2") progressive_rows["progressive-personal-battery"] = ("battery-equipment", "battery-mk2-equipment") progressive_rows["progressive-energy-shield"] = ("energy-shield-equipment", "energy-shield-mk2-equipment") progressive_rows["progressive-wall"] = ("stone-wall", "gate") -progressive_rows["progressive-turret"] = ("gun-turret", "laser-turret") progressive_rows["progressive-follower"] = ("defender", "distractor", "destroyer") progressive_rows["progressive-inserter"] = ("fast-inserter", "stack-inserter") +sorted_rows = sorted(progressive_rows) +# to keep ID mappings the same. +# If there's a breaking change at some point, then this should be moved in with the sorted ordering +progressive_rows["progressive-turret"] = ("gun-turret", "laser-turret") +sorted_rows.append("progressive-turret") +progressive_rows["progressive-flamethrower"] = ("flamethrower",) # leaving out flammables, as they do nothing +sorted_rows.append("progressive-flamethrower") + +# integrate into +source_target_mapping = { + "progressive-braking-force" : "progressive-train-network", + "progressive-inserter-capacity-bonus": "progressive-inserter", + "progressive-flamethrower": "progressive-refined-flammables" +} + +for source, target in source_target_mapping.items(): + progressive_rows[target] += progressive_rows[source] + + + + + + base_tech_table = tech_table.copy() # without progressive techs base_technology_table = technology_table.copy() progressive_tech_table: Dict[str, int] = {} progressive_technology_table: Dict[str, Technology] = {} -for root in sorted(progressive_rows): +for root in sorted_rows: progressive = progressive_rows[root] assert all(tech in tech_table for tech in progressive) factorio_id += 1 @@ -385,8 +406,9 @@ for root in sorted(progressive_rows): tech_to_progressive_lookup: Dict[str, str] = {} for technology in progressive_technology_table.values(): - for progressive in technology.progressive: - tech_to_progressive_lookup[progressive] = technology.name + if technology.name not in source_target_mapping: + for progressive in technology.progressive: + tech_to_progressive_lookup[progressive] = technology.name tech_table.update(progressive_tech_table) technology_table.update(progressive_technology_table) diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index 49b57da6..5d00161c 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -25,7 +25,7 @@ class Factorio(World): item_name_to_id = tech_table location_name_to_id = base_tech_table - data_version = 2 + data_version = 3 def generate_basic(self): skip_silo = self.world.silo[self.player].value == Silo.option_spawn