Factorio:
add visibility option fix tech_cost using the wrong variable name fix yaml defaults not init'ing the Option class LttP: fix potential pathing confusion in maseya palette shuffler Server: Minimum version per team made no sense, removed
This commit is contained in:
		| @@ -25,7 +25,7 @@ lookup_any_location_name_to_id = {name: id for id, name in lookup_any_location_i | ||||
|  | ||||
| network_data_package = {"lookup_any_location_id_to_name": lookup_any_location_id_to_name, | ||||
|                         "lookup_any_item_id_to_name": lookup_any_item_id_to_name, | ||||
|                         "version": 2} | ||||
|                         "version": 3} | ||||
|  | ||||
| @enum.unique | ||||
| class Games(str, enum.Enum): | ||||
|   | ||||
| @@ -1775,7 +1775,7 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr | ||||
|                 option_name: True | ||||
|             } | ||||
|  | ||||
|             data_dir = local_path("../../data") if is_bundled() else None | ||||
|             data_dir = local_path("data") if is_bundled() else None | ||||
|             offsets_array = build_offset_collections(options, data_dir) | ||||
|             restore_maseya_colors(rom, offsets_array) | ||||
|             if mode == 'default': | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import json | ||||
| import jinja2 | ||||
| import Utils | ||||
| import shutil | ||||
| import Options | ||||
| from BaseClasses import MultiWorld | ||||
| from .Technologies import tech_table | ||||
|  | ||||
| @@ -50,7 +51,9 @@ def generate_mod(world: MultiWorld, player: int): | ||||
|                  6: 10}[world.tech_cost[player].value] | ||||
|     template_data = {"locations": locations, "player_names" : player_names, "tech_table": tech_table, | ||||
|                      "mod_name": mod_name, "allowed_science_packs": world.max_science_pack[player].get_allowed_packs(), | ||||
|                      "tech_cost": tech_cost, "free_samples": world.free_samples[player].value} | ||||
|                      "tech_cost_scale": tech_cost} | ||||
|     for factorio_option in Options.factorio_options: | ||||
|         template_data[factorio_option] = getattr(world, factorio_option)[player].value | ||||
|     control_code = control_template.render(**template_data) | ||||
|     data_final_fixes_code = template.render(**template_data) | ||||
|  | ||||
|   | ||||
| @@ -6,12 +6,13 @@ import Utils | ||||
| factorio_id = 2 ** 17 | ||||
|  | ||||
| source_file = Utils.local_path("data", "factorio", "techs.json") | ||||
|  | ||||
| recipe_source_file = Utils.local_path("data", "factorio", "recipes.json") | ||||
| with open(source_file) as f: | ||||
|     raw = json.load(f) | ||||
| with open(recipe_source_file) as f: | ||||
|     raw_recipes = json.load(f) | ||||
| tech_table = {} | ||||
| technology_table = {} | ||||
| requirements = {}  # tech_name -> Set[required_technologies] | ||||
|  | ||||
|  | ||||
| class Technology():  # maybe make subclass of Location? | ||||
| @@ -25,13 +26,28 @@ class Technology():  # maybe make subclass of Location? | ||||
|     def get_required_technologies(self): | ||||
|         requirements = set() | ||||
|         for ingredient in self.ingredients: | ||||
|             if ingredient in recipe_sources: # no source likely means starting item | ||||
|                 requirements |= recipe_sources[ingredient] # technically any, not all, need to improve later | ||||
|             if ingredient in recipe_sources:  # no source likely means starting item | ||||
|                 requirements |= recipe_sources[ingredient]  # technically any, not all, need to improve later | ||||
|         return requirements | ||||
|  | ||||
|     def build_rule(self): | ||||
|         ingredient_rules = [] | ||||
|         for ingredient in self.ingredients: | ||||
|             if ingredient in recipe_sources: | ||||
|                 technologies = recipe_sources[ingredient]  # technologies that unlock the recipe | ||||
|                 ingredient_rules.append(lambda state, technologies=technologies: any(state.has(technology) for technology in technologies)) | ||||
|         ingredient_rules = frozenset(ingredient_rules) | ||||
|         return lambda state: all(rule(state) for rule in ingredient_rules) | ||||
|  | ||||
|     def __hash__(self): | ||||
|         return self.factorio_id | ||||
|  | ||||
| class Recipe(): | ||||
|     def __init__(self, name, category, ingredients, products): | ||||
|         self.name = name | ||||
|         self.category = category | ||||
|         self.products = ingredients | ||||
|         self.ingredients = products | ||||
|  | ||||
| # recipes and technologies can share names in Factorio | ||||
| for technology_name in sorted(raw): | ||||
| @@ -56,3 +72,10 @@ for technology, data in raw.items(): | ||||
|  | ||||
| del (raw) | ||||
| lookup_id_to_name: Dict[int, str] = {item_id: item_name for item_name, item_id in tech_table.items()} | ||||
|  | ||||
|  | ||||
| all_recipes = set() | ||||
| for recipe_name, recipe_data in raw_recipes.items(): | ||||
|     # example: | ||||
|     # "accumulator":{"ingredients":["iron-plate","battery"],"products":["accumulator"],"category":"crafting"} | ||||
|     all_recipes.add(Recipe(recipe_name, recipe_data["category"], set(recipe_data["ingredients"]), set(recipe_data["products"]))) | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import logging | ||||
|  | ||||
| from BaseClasses import Region, Entrance, Location, MultiWorld, Item | ||||
|  | ||||
| from .Technologies import tech_table, requirements, recipe_sources, technology_table | ||||
| from .Technologies import tech_table, recipe_sources, technology_table | ||||
|  | ||||
| static_nodes = {"automation", "logistics"} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fabian Dill
					Fabian Dill