Factorio: generalize merging of progressive technologies

use it for:
train network + braking force
flamethrower + refined flammables
inserters + inserter capacity
This commit is contained in:
Fabian Dill 2021-08-02 19:12:42 +02:00
parent d2add54cd6
commit 2d8a6e84c1
2 changed files with 29 additions and 7 deletions

View File

@ -355,24 +355,45 @@ progressive_rows["progressive-processing"] = (
progressive_rows["progressive-rocketry"] = ("rocketry", "explosive-rocketry", "atomic-bomb") progressive_rows["progressive-rocketry"] = ("rocketry", "explosive-rocketry", "atomic-bomb")
progressive_rows["progressive-vehicle"] = ("automobilism", "tank", "spidertron") progressive_rows["progressive-vehicle"] = ("automobilism", "tank", "spidertron")
progressive_rows["progressive-train-network"] = ("railway", "fluid-wagon", progressive_rows["progressive-train-network"] = ("railway", "fluid-wagon",
"automated-rail-transportation", "rail-signals") + progressive_rows["progressive-braking-force"] "automated-rail-transportation", "rail-signals")
del(progressive_rows["progressive-braking-force"])
progressive_rows["progressive-engine"] = ("engine", "electric-engine") progressive_rows["progressive-engine"] = ("engine", "electric-engine")
progressive_rows["progressive-armor"] = ("heavy-armor", "modular-armor", "power-armor", "power-armor-mk2") 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-personal-battery"] = ("battery-equipment", "battery-mk2-equipment")
progressive_rows["progressive-energy-shield"] = ("energy-shield-equipment", "energy-shield-mk2-equipment") progressive_rows["progressive-energy-shield"] = ("energy-shield-equipment", "energy-shield-mk2-equipment")
progressive_rows["progressive-wall"] = ("stone-wall", "gate") 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-follower"] = ("defender", "distractor", "destroyer")
progressive_rows["progressive-inserter"] = ("fast-inserter", "stack-inserter") 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_tech_table = tech_table.copy() # without progressive techs
base_technology_table = technology_table.copy() base_technology_table = technology_table.copy()
progressive_tech_table: Dict[str, int] = {} progressive_tech_table: Dict[str, int] = {}
progressive_technology_table: Dict[str, Technology] = {} progressive_technology_table: Dict[str, Technology] = {}
for root in sorted(progressive_rows): for root in sorted_rows:
progressive = progressive_rows[root] progressive = progressive_rows[root]
assert all(tech in tech_table for tech in progressive) assert all(tech in tech_table for tech in progressive)
factorio_id += 1 factorio_id += 1
@ -385,6 +406,7 @@ for root in sorted(progressive_rows):
tech_to_progressive_lookup: Dict[str, str] = {} tech_to_progressive_lookup: Dict[str, str] = {}
for technology in progressive_technology_table.values(): for technology in progressive_technology_table.values():
if technology.name not in source_target_mapping:
for progressive in technology.progressive: for progressive in technology.progressive:
tech_to_progressive_lookup[progressive] = technology.name tech_to_progressive_lookup[progressive] = technology.name

View File

@ -25,7 +25,7 @@ class Factorio(World):
item_name_to_id = tech_table item_name_to_id = tech_table
location_name_to_id = base_tech_table location_name_to_id = base_tech_table
data_version = 2 data_version = 3
def generate_basic(self): def generate_basic(self):
skip_silo = self.world.silo[self.player].value == Silo.option_spawn skip_silo = self.world.silo[self.player].value == Silo.option_spawn