From dc73fa0f33dfb5dfacd806913dc5c505fd49157d Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 1 Apr 2021 11:40:58 +0200 Subject: [PATCH] Factorio integration --- .gitignore | 1 + BaseClasses.py | 7 +- CommonClient.py | 429 ++++++++++++++ FactorioClient.py | 187 ++++++ Adjuster.py => LttPAdjuster.py | 0 MultiClient.py => LttPClient.py | 550 +++--------------- Main.py | 28 +- ModuleUpdate.py | 3 +- MultiMystery.py | 2 +- MultiServer.py | 30 +- Mystery.py | 2 + NetUtils.py | 2 +- Patch.py | 2 +- Utils.py | 11 +- WebHostLib/requirements.txt | 4 +- WebUI.py | 6 +- data/factorio/mod/LICENSE.md | 22 + data/factorio/mod/control.lua | 108 ++++ data/factorio/mod/data.lua | 0 data/factorio/mod/graphics/icons/ap.png | Bin 0 -> 269901 bytes data/factorio/mod/info.json | 9 + .../mod_template/data-final-fixes.lua | 34 ++ .../mod_template/locale/en/locale.cfg | 8 + data/factorio/recipes.json | 1 + data/factorio/techs.json | 1 + host.yaml | 20 +- inno_setup_38.iss | 2 +- inno_setup_39.iss | 2 +- playerSettings.yaml | 47 +- requirements.txt | 3 +- setup.py | 4 +- worlds/__init__.py | 12 +- worlds/factorio/Mod.py | 58 ++ worlds/factorio/Technologies.py | 46 ++ worlds/factorio/__init__.py | 59 ++ worlds/hk/__init__.py | 5 +- 36 files changed, 1154 insertions(+), 551 deletions(-) create mode 100644 CommonClient.py create mode 100644 FactorioClient.py rename Adjuster.py => LttPAdjuster.py (100%) mode change 100755 => 100644 rename MultiClient.py => LttPClient.py (70%) create mode 100644 data/factorio/mod/LICENSE.md create mode 100644 data/factorio/mod/control.lua create mode 100644 data/factorio/mod/data.lua create mode 100644 data/factorio/mod/graphics/icons/ap.png create mode 100644 data/factorio/mod/info.json create mode 100644 data/factorio/mod_template/data-final-fixes.lua create mode 100644 data/factorio/mod_template/locale/en/locale.cfg create mode 100644 data/factorio/recipes.json create mode 100644 data/factorio/techs.json create mode 100644 worlds/factorio/Mod.py create mode 100644 worlds/factorio/Technologies.py create mode 100644 worlds/factorio/__init__.py diff --git a/.gitignore b/.gitignore index 166c110e..6271479c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ mystery_result_*.yaml success.txt output/ Output Logs/ +/factorio/ \ No newline at end of file diff --git a/BaseClasses.py b/BaseClasses.py index f7fe7bf2..b07eef62 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -158,6 +158,10 @@ class MultiWorld(): def hk_player_ids(self): yield from (player for player in range(1, self.players + 1) if self.game[player] == "Hollow Knight") + @property + def factorio_player_ids(self): + yield from (player for player in range(1, self.players + 1) if self.game[player] == "Factorio") + def get_name_string_for_object(self, obj) -> str: return obj.name if self.players == 1 else f'{obj.name} ({self.get_player_names(obj.player)})' @@ -1302,9 +1306,6 @@ class Spoiler(object): self.bosses[str(player)]["Ganons Tower"] = "Agahnim 2" self.bosses[str(player)]["Ganon"] = "Ganon" - if self.world.players == 1: - self.bosses = self.bosses["1"] - from Utils import __version__ as APVersion self.metadata = {'version': APVersion, 'logic': self.world.logic, diff --git a/CommonClient.py b/CommonClient.py new file mode 100644 index 00000000..c6f58c48 --- /dev/null +++ b/CommonClient.py @@ -0,0 +1,429 @@ +from __future__ import annotations +import logging +import typing +import asyncio +import urllib.parse + +import prompt_toolkit +import websockets +from prompt_toolkit.patch_stdout import patch_stdout + +import Utils +from MultiServer import CommandProcessor + +from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, color, ClientStatus +from Utils import Version + +# logging note: +# logging.* gets send to only the text console, logger.* gets send to the WebUI as well, if it's initialized. +from worlds import network_data_package +from worlds.alttp import Items, Regions + +logger = logging.getLogger("Client") + +class ClientCommandProcessor(CommandProcessor): + def __init__(self, ctx: CommonContext): + self.ctx = ctx + + def output(self, text: str): + logger.info(text) + + def _cmd_exit(self) -> bool: + """Close connections and client""" + self.ctx.exit_event.set() + return True + + def _cmd_connect(self, address: str = "") -> bool: + """Connect to a MultiWorld Server""" + self.ctx.server_address = None + asyncio.create_task(self.ctx.connect(address if address else None)) + return True + + def _cmd_disconnect(self) -> bool: + """Disconnect from a MultiWorld Server""" + self.ctx.server_address = None + asyncio.create_task(self.ctx.disconnect()) + return True + + def _cmd_received(self) -> bool: + """List all received items""" + logger.info('Received items:') + for index, item in enumerate(self.ctx.items_received, 1): + self.ctx.ui_node.notify_item_received(self.ctx.player_names[item.player], self.ctx.item_name_getter(item.item), + self.ctx.location_name_getter(item.location), index, + len(self.ctx.items_received), + self.ctx.item_name_getter(item.item) in Items.progression_items) + logging.info('%s from %s (%s) (%d/%d in list)' % ( + color(self.ctx.item_name_getter(item.item), 'red', 'bold'), + color(self.ctx.player_names[item.player], 'yellow'), + self.ctx.location_name_getter(item.location), index, len(self.ctx.items_received))) + return True + + def _cmd_missing(self) -> bool: + """List all missing location checks, from your local game state""" + count = 0 + checked_count = 0 + for location, location_id in Regions.lookup_name_to_id.items(): + if location_id < 0: + continue + if location_id not in self.ctx.locations_checked: + if location_id in self.ctx.missing_locations: + self.output('Missing: ' + location) + count += 1 + elif location_id in self.ctx.checked_locations: + self.output('Checked: ' + location) + count += 1 + checked_count += 1 + + if count: + self.output( + f"Found {count} missing location checks{f'. {checked_count} location checks previously visited.' if checked_count else ''}") + else: + self.output("No missing location checks found.") + return True + + + + def _cmd_ready(self): + self.ctx.ready = not self.ctx.ready + if self.ctx.ready: + state = ClientStatus.CLIENT_READY + self.output("Readied up.") + else: + state = ClientStatus.CLIENT_CONNECTED + self.output("Unreadied.") + asyncio.create_task(self.ctx.send_msgs([{"cmd": "StatusUpdate", "status": state}])) + + def default(self, raw: str): + asyncio.create_task(self.ctx.send_msgs([{"cmd": "Say", "text": raw}])) + +class CommonContext(): + starting_reconnect_delay = 5 + current_reconnect_delay = starting_reconnect_delay + command_processor = ClientCommandProcessor + def __init__(self, server_address, password, found_items: bool): + # server state + self.server_address = server_address + self.password = password + self.server_task = None + self.server: typing.Optional[Endpoint] = None + self.server_version = Version(0, 0, 0) + + # own state + self.finished_game = False + self.ready = False + self.found_items = found_items + self.team = None + self.slot = None + self.auth = None + self.ui_node = None + + self.locations_checked: typing.Set[int] = set() + self.locations_scouted: typing.Set[int] = set() + self.items_received = [] + self.missing_locations: typing.List[int] = [] + self.checked_locations: typing.List[int] = [] + self.locations_info = {} + + self.input_queue = asyncio.Queue() + self.input_requests = 0 + + # game state + self.player_names: typing.Dict[int: str] = {} + self.exit_event = asyncio.Event() + self.watcher_event = asyncio.Event() + + self.slow_mode = False + self.jsontotextparser = JSONtoTextParser(self) + self.set_getters(network_data_package) + + async def connection_closed(self): + self.auth = None + self.items_received = [] + self.locations_info = {} + self.server_version = Version(0, 0, 0) + if self.server and self.server.socket is not None: + await self.server.socket.close() + self.server = None + self.server_task = None + + def set_getters(self, data_package: dict, network=False): + if not network: # local data; check if newer data was already downloaded + local_package = Utils.persistent_load().get("datapackage", {}).get("latest", {}) + if local_package and local_package["version"] > network_data_package["version"]: + data_package: dict = local_package + elif network: # check if data from server is newer + for key, value in data_package.items(): + if type(value) == dict: # convert to int keys + data_package[key] = \ + {int(subkey) if subkey.isdigit() else subkey: subvalue for subkey, subvalue in value.items()} + + if data_package["version"] > network_data_package["version"]: + Utils.persistent_store("datapackage", "latest", network_data_package) + + item_lookup: dict = data_package["lookup_any_item_id_to_name"] + locations_lookup: dict = data_package["lookup_any_location_id_to_name"] + + def get_item_name_from_id(code: int): + return item_lookup.get(code, f'Unknown item (ID:{code})') + + self.item_name_getter = get_item_name_from_id + + def get_location_name_from_address(address: int): + return locations_lookup.get(address, f'Unknown location (ID:{address})') + + self.location_name_getter = get_location_name_from_address + + @property + def endpoints(self): + if self.server: + return [self.server] + else: + return [] + + async def disconnect(self): + if self.server and not self.server.socket.closed: + await self.server.socket.close() + self.ui_node.send_connection_status(self) + if self.server_task is not None: + await self.server_task + + async def send_msgs(self, msgs): + if not self.server or not self.server.socket.open or self.server.socket.closed: + return + await self.server.socket.send(encode(msgs)) + + def consume_players_package(self, package: typing.List[tuple]): + self.player_names = {slot: name for team, slot, name, orig_name in package if self.team == team} + + def event_invalid_slot(self): + raise Exception('Invalid Slot; please verify that you have connected to the correct world.') + + async def server_auth(self, password_requested): + if password_requested and not self.password: + logger.info('Enter the password required to join this game:') + self.password = await self.console_input() + return self.password + + async def console_input(self): + self.input_requests += 1 + return await self.input_queue.get() + + async def connect(self, address= None): + await self.disconnect() + self.server_task = asyncio.create_task(server_loop(self, address)) + + +async def server_loop(ctx: CommonContext, address=None): + ui_node = getattr(ctx, "ui_node", None) + if ui_node: + ui_node.send_connection_status(ctx) + cached_address = None + if ctx.server and ctx.server.socket: + logger.error('Already connected') + return + + if address is None: # set through CLI or APBP + address = ctx.server_address + + # Wait for the user to provide a multiworld server address + if not address: + logger.info('Please connect to an Archipelago server.') + if ui_node: + ui_node.poll_for_server_ip() + return + + address = f"ws://{address}" if "://" not in address else address + port = urllib.parse.urlparse(address).port or 38281 + + logger.info(f'Connecting to Archipelago server at {address}') + try: + socket = await websockets.connect(address, port=port, ping_timeout=None, ping_interval=None) + ctx.server = Endpoint(socket) + logger.info('Connected') + ctx.server_address = address + if ui_node: + ui_node.send_connection_status(ctx) + ctx.current_reconnect_delay = ctx.starting_reconnect_delay + async for data in ctx.server.socket: + for msg in decode(data): + await process_server_cmd(ctx, msg) + logger.warning('Disconnected from multiworld server, type /connect to reconnect') + except ConnectionRefusedError: + if cached_address: + logger.error('Unable to connect to multiworld server at cached address. ' + 'Please use the connect button above.') + else: + logger.error('Connection refused by the multiworld server') + except (OSError, websockets.InvalidURI): + logger.error('Failed to connect to the multiworld server') + except Exception as e: + logger.error('Lost connection to the multiworld server, type /connect to reconnect') + if not isinstance(e, websockets.WebSocketException): + logger.exception(e) + finally: + await ctx.connection_closed() + if ctx.server_address: + logger.info(f"... reconnecting in {ctx.current_reconnect_delay}s") + if ui_node: + ui_node.send_connection_status(ctx) + asyncio.create_task(server_autoreconnect(ctx)) + ctx.current_reconnect_delay *= 2 + + +async def server_autoreconnect(ctx: CommonContext): + await asyncio.sleep(ctx.current_reconnect_delay) + if ctx.server_address and ctx.server_task is None: + ctx.server_task = asyncio.create_task(server_loop(ctx)) + + +async def process_server_cmd(ctx: CommonContext, args: dict): + try: + cmd = args["cmd"] + except: + logger.exception(f"Could not get command from {args}") + raise + if cmd == 'RoomInfo': + logger.info('--------------------------------') + logger.info('Room Information:') + logger.info('--------------------------------') + version = args["version"] + ctx.server_version = tuple(version) + version = ".".join(str(item) for item in version) + + logger.info(f'Server protocol version: {version}') + logger.info("Server protocol tags: " + ", ".join(args["tags"])) + if args['password']: + logger.info('Password required') + logger.info(f"Forfeit setting: {args['forfeit_mode']}") + logger.info(f"Remaining setting: {args['remaining_mode']}") + logger.info(f"A !hint costs {args['hint_cost']} points and you get {args['location_check_points']}" + f" for each location checked.") + ctx.hint_cost = int(args['hint_cost']) + ctx.check_points = int(args['location_check_points']) + ctx.forfeit_mode = args['forfeit_mode'] + ctx.remaining_mode = args['remaining_mode'] + if ctx.ui_node: + ctx.ui_node.send_game_info(ctx) + if len(args['players']) < 1: + logger.info('No player connected') + else: + args['players'].sort() + current_team = -1 + logger.info('Players:') + for team, slot, name in args['players']: + if team != current_team: + logger.info(f' Team #{team + 1}') + current_team = team + logger.info(' %s (Player %d)' % (name, slot)) + if args["datapackage_version"] > network_data_package["version"]: + await ctx.send_msgs([{"cmd": "GetDataPackage"}]) + await ctx.server_auth(args['password']) + + elif cmd == 'DataPackage': + logger.info("Got new ID/Name Datapackage") + ctx.set_getters(args['data'], network=True) + + elif cmd == 'ConnectionRefused': + errors = args["errors"] + if 'InvalidSlot' in errors: + ctx.event_invalid_slot() + + elif 'SlotAlreadyTaken' in errors: + raise Exception('Player slot already in use for that team') + elif 'IncompatibleVersion' in errors: + raise Exception('Server reported your client version as incompatible') + # last to check, recoverable problem + elif 'InvalidPassword' in errors: + logger.error('Invalid password') + ctx.password = None + await ctx.server_auth(True) + else: + raise Exception("Unknown connection errors: " + str(errors)) + raise Exception('Connection refused by the multiworld host, no reason provided') + + elif cmd == 'Connected': + ctx.team = args["team"] + ctx.slot = args["slot"] + ctx.consume_players_package(args["players"]) + msgs = [] + if ctx.locations_checked: + msgs.append({"cmd": "LocationChecks", + "locations": list(ctx.locations_checked)}) + if ctx.locations_scouted: + msgs.append({"cmd": "LocationScouts", + "locations": list(ctx.locations_scouted)}) + if msgs: + await ctx.send_msgs(msgs) + if ctx.finished_game: + await ctx.send_msgs([{"cmd": "StatusUpdate", "status": CLientStatus.CLIENT_GOAL}]) + + # Get the server side view of missing as of time of connecting. + # This list is used to only send to the server what is reported as ACTUALLY Missing. + # This also serves to allow an easy visual of what locations were already checked previously + # when /missing is used for the client side view of what is missing. + ctx.missing_locations = args["missing_locations"] + ctx.checked_locations = args["checked_locations"] + + elif cmd == 'ReceivedItems': + start_index = args["index"] + + if start_index == 0: + ctx.items_received = [] + elif start_index != len(ctx.items_received): + sync_msg = [{'cmd': 'Sync'}] + if ctx.locations_checked: + sync_msg.append({"cmd": "LocationChecks", + "locations": list(ctx.locations_checked)}) + await ctx.send_msgs(sync_msg) + if start_index == len(ctx.items_received): + for item in args['items']: + ctx.items_received.append(NetworkItem(*item)) + ctx.watcher_event.set() + + elif cmd == 'LocationInfo': + for item, location, player in args['locations']: + if location not in ctx.locations_info: + ctx.locations_info[location] = (item, player) + ctx.watcher_event.set() + + elif cmd == "RoomUpdate": + if "players" in args: + ctx.consume_players_package(args["players"]) + if "hint_points" in args: + ctx.hint_points = args['hint_points'] + + elif cmd == 'Print': + logger.info(args["text"]) + + elif cmd == 'PrintJSON': + if not ctx.found_items and args.get("type", None) == "ItemSend" and args["receiving"] == args["sending"]: + pass # don't want info on other player's local pickups. + logger.info(ctx.jsontotextparser(args["data"])) + + elif cmd == 'InvalidArguments': + logger.warning(f"Invalid Arguments: {args['text']}") + + else: + logger.debug(f"unknown command {cmd}") + + +async def console_loop(ctx: CommonContext): + import sys + commandprocessor = ctx.command_processor(ctx) + while not ctx.exit_event.is_set(): + try: + input_text = await asyncio.get_event_loop().run_in_executor( + None, sys.stdin.readline + ) + input_text = input_text.strip() + + if ctx.input_requests > 0: + ctx.input_requests -= 1 + ctx.input_queue.put_nowait(input_text) + continue + + if input_text: + commandprocessor(input_text) + except Exception as e: + logging.exception(e) diff --git a/FactorioClient.py b/FactorioClient.py new file mode 100644 index 00000000..232d7002 --- /dev/null +++ b/FactorioClient.py @@ -0,0 +1,187 @@ +import os +import logging +import json +import string +from concurrent.futures import ThreadPoolExecutor + +import colorama +import asyncio +from queue import Queue, Empty +from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor +from MultiServer import mark_raw + +import Utils +import random + +from worlds.factorio.Technologies import lookup_id_to_name + +rcon_port = 24242 +rcon_password = ''.join(random.choice(string.ascii_letters) for x in range(32)) +save_name = "Archipelago" + +server_args = (save_name, "--rcon-port", rcon_port, "--rcon-password", rcon_password) + +logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO) +options = Utils.get_options() +executable = options["factorio_options"]["executable"] +bin_dir = os.path.dirname(executable) +if not os.path.isdir(bin_dir): + raise FileNotFoundError(bin_dir) +if not os.path.exists(executable): + if os.path.exists(executable + ".exe"): + executable = executable + ".exe" + else: + raise FileNotFoundError(executable) + +script_folder = options["factorio_options"]["script-output"] + +threadpool = ThreadPoolExecutor(10) + +class FactorioCommandProcessor(ClientCommandProcessor): + @mark_raw + def _cmd_factorio(self, text: str) -> bool: + """Send the following command to the bound Factorio Server.""" + if self.ctx.rcon_client: + result = self.ctx.rcon_client.send_command(text) + if result: + self.output(result) + return True + return False + + +class FactorioContext(CommonContext): + command_processor = FactorioCommandProcessor + + def __init__(self, *args, **kwargs): + super(FactorioContext, self).__init__(*args, **kwargs) + self.send_index = 0 + self.rcon_client = None + + async def server_auth(self, password_requested): + if password_requested and not self.password: + await super(FactorioContext, self).server_auth(password_requested) + if self.auth is None: + logging.info('Enter the name of your slot to join this game:') + self.auth = await self.console_input() + + await self.send_msgs([{"cmd": 'Connect', + 'password': self.password, 'name': self.auth, 'version': Utils._version_tuple, + 'tags': ['AP'], + 'uuid': Utils.get_unique_identifier(), 'game': "Factorio" + }]) + + +async def game_watcher(ctx: FactorioContext): + research_logger = logging.getLogger("FactorioWatcher") + researches_done_file = os.path.join(script_folder, "research_done.json") + if os.path.exists(researches_done_file): + os.remove(researches_done_file) + from worlds.factorio.Technologies import lookup_id_to_name, tech_table + try: + while 1: + if os.path.exists(researches_done_file): + research_logger.info("Found Factorio Bridge file.") + while 1: + with open(researches_done_file) as f: + data = json.load(f) + research_data = {int(tech_name.split("-")[1]) for tech_name in data if tech_name.startswith("ap-")} + if ctx.locations_checked != research_data: + research_logger.info(f"New researches done: " + f"{[lookup_id_to_name[rid] for rid in research_data - ctx.locations_checked]}") + ctx.locations_checked = research_data + await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": tuple(research_data)}]) + await asyncio.sleep(1) + else: + research_logger.info("Did not find Factorio Bridge file.") + await asyncio.sleep(5) + except Exception as e: + logging.exception(e) + logging.error("Aborted Factorio Server Bridge") + +def stream_factorio_output(pipe, queue): + def queuer(): + while 1: + text = pipe.readline().strip() + if text: + queue.put_nowait(text) + + from threading import Thread + + thread = Thread(target=queuer, name="Factorio Output Queue", daemon=True) + thread.start() + + +async def factorio_server_watcher(ctx: FactorioContext): + import subprocess + import factorio_rcon + factorio_server_logger = logging.getLogger("FactorioServer") + factorio_process = subprocess.Popen((executable, "--start-server", *(str(elem) for elem in server_args)), + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + stdin=subprocess.DEVNULL, + encoding="utf-8") + factorio_server_logger.info("Started Factorio Server") + factorio_queue = Queue() + stream_factorio_output(factorio_process.stdout, factorio_queue) + stream_factorio_output(factorio_process.stderr, factorio_queue) + try: + while 1: + while not factorio_queue.empty(): + msg = factorio_queue.get() + factorio_server_logger.info(msg) + if not ctx.rcon_client and "Hosting game at IP ADDR:" in msg: + ctx.rcon_client = factorio_rcon.RCONClient("localhost", rcon_port, rcon_password) + # trigger lua interface confirmation + ctx.rcon_client.send_command("/sc game.print('Starting Archipelago Bridge')") + ctx.rcon_client.send_command("/sc game.print('Starting Archipelago Bridge')") + if ctx.rcon_client: + while ctx.send_index < len(ctx.items_received): + item_id = ctx.items_received[ctx.send_index].item + item_name = lookup_id_to_name[item_id] + factorio_server_logger.info(f"Sending {item_name} to Nauvis.") + response = ctx.rcon_client.send_command(f'/ap-get-technology {item_name}') + if response: + factorio_server_logger.info(response) + ctx.send_index += 1 + + await asyncio.sleep(1) + except Exception as e: + logging.exception(e) + logging.error("Aborted Factorio Server Bridge") + + +async def main(): + ctx = FactorioContext(None, None, True) + ctx.server_address = "localhost" + ctx.auth = "Berserker" + if ctx.server_task is None: + ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") + await asyncio.sleep(3) + watcher_task = asyncio.create_task(game_watcher(ctx), name="FactorioProgressionWatcher") + input_task = asyncio.create_task(console_loop(ctx), name="Input") + factorio_server_task = asyncio.create_task(factorio_server_watcher(ctx), name="FactorioServer") + await ctx.exit_event.wait() + ctx.server_address = None + ctx.snes_reconnect_address = None + + await asyncio.gather(watcher_task, input_task, factorio_server_task) + + if ctx.server is not None and not ctx.server.socket.closed: + await ctx.server.socket.close() + if ctx.server_task is not None: + await ctx.server_task + await factorio_server_task + + while ctx.input_requests > 0: + ctx.input_queue.put_nowait(None) + ctx.input_requests -= 1 + + await input_task + + +if __name__ == '__main__': + colorama.init() + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() + colorama.deinit() diff --git a/Adjuster.py b/LttPAdjuster.py old mode 100755 new mode 100644 similarity index 100% rename from Adjuster.py rename to LttPAdjuster.py diff --git a/MultiClient.py b/LttPClient.py similarity index 70% rename from MultiClient.py rename to LttPClient.py index f6603c99..f2b8117c 100644 --- a/MultiClient.py +++ b/LttPClient.py @@ -1,5 +1,4 @@ import argparse -import urllib.parse import atexit import time import functools @@ -23,52 +22,70 @@ import ModuleUpdate ModuleUpdate.update() import colorama -import prompt_toolkit -from prompt_toolkit.patch_stdout import patch_stdout from NetUtils import * import WebUI from worlds.alttp import Regions, Shops from worlds.alttp import Items -from worlds import network_data_package import Utils - -# logging note: -# logging.* gets send to only the text console, logger.* gets send to the WebUI as well, if it's initialized. -logger = logging.getLogger("Client") +from CommonClient import CommonContext, server_loop, logger, console_loop, ClientCommandProcessor -def create_named_task(coro, *args, name=None): - if not name: - name = coro.__name__ - return asyncio.create_task(coro, *args, name=name) +from MultiServer import mark_raw -class Context(): +class LttPCommandProcessor(ClientCommandProcessor): + def _cmd_slow_mode(self, toggle: str = ""): + """Toggle slow mode, which limits how fast you send / receive items.""" + if toggle: + self.ctx.slow_mode = toggle.lower() in {"1", "true", "on"} + else: + self.ctx.slow_mode = not self.ctx.slow_mode + + self.output(f"Setting slow mode to {self.ctx.slow_mode}") + + def _cmd_web(self): + if self.ctx.webui_socket_port: + webbrowser.open(f'http://localhost:5050?port={self.ctx.webui_socket_port}') + else: + self.output("Web UI was never started.") + + @mark_raw + def _cmd_snes(self, snes_address: str = "") -> bool: + """Connect to a snes. Optionally include network address of a snes to connect to, otherwise show available devices""" + self.ctx.snes_reconnect_address = None + asyncio.create_task(snes_connect(self.ctx, snes_address if snes_address else self.ctx.snes_address)) + return True + + def _cmd_snes_close(self) -> bool: + """Close connection to a currently connected snes""" + self.ctx.snes_reconnect_address = None + if self.ctx.snes_socket is not None and not self.ctx.snes_socket.closed: + asyncio.create_task(self.ctx.snes_socket.close()) + return True + else: + return False + +class Context(CommonContext): + command_processor = LttPCommandProcessor def __init__(self, snes_address, server_address, password, found_items, port: int): - self.snes_address = snes_address - self.server_address = server_address + super(Context, self).__init__(server_address, password, found_items) # WebUI Stuff self.ui_node = WebUI.WebUiClient() logger.addHandler(self.ui_node) - self.ready = False - self.custom_address = None + self.webui_socket_port: typing.Optional[int] = port self.hint_cost = 0 self.check_points = 0 self.forfeit_mode = '' self.remaining_mode = '' self.hint_points = 0 - # End WebUI Stuff - - self.exit_event = asyncio.Event() - self.watcher_event = asyncio.Event() - - self.input_queue = asyncio.Queue() - self.input_requests = 0 + # End of WebUI Stuff + # snes stuff + self.snes_address = snes_address self.snes_socket = None self.snes_state = SNESState.SNES_DISCONNECTED self.snes_attached_device = None @@ -78,79 +95,36 @@ class Context(): self.is_sd2snes = False self.snes_write_buffer = [] - self.server_task = None - self.server: typing.Optional[Endpoint] = None - self.password = password - self.server_version = Version(0, 0, 0) - - self.team = None - self.slot = None - self.player_names: typing.Dict[int: str] = {} - self.locations_recognized = set() - - self.locations_checked:typing.Set[int] = set() - self.locations_scouted:typing.Set[int] = set() - self.items_received = [] - self.missing_locations: typing.List[int] = [] - self.checked_locations: typing.List[int] = [] - self.locations_info = {} self.awaiting_rom = False self.rom = None self.prev_rom = None - self.auth = None - self.found_items = found_items - self.finished_game = False - self.slow_mode = False - self.jsontotextparser = JSONtoTextParser(self) - self.set_getters(network_data_package) - def set_getters(self, data_package: dict, network=False): - if not network: # local data; check if newer data was already downloaded - local_package = Utils.persistent_load().get("datapackage", {}).get("latest", {}) - if local_package and local_package["version"] > network_data_package["version"]: - data_package: dict = local_package - elif network: # check if data from server is newer - for key, value in data_package.items(): - if type(value) == dict: # convert to int keys - data_package[key] = \ - {int(subkey) if subkey.isdigit() else subkey: subvalue for subkey, subvalue in value.items()} + async def connection_closed(self): + await super(Context, self).connection_closed() + self.awaiting_rom = False - if data_package["version"] > network_data_package["version"]: - Utils.persistent_store("datapackage", "latest", network_data_package) + def event_invalid_slot(self): + if self.snes_socket is not None and not self.snes_socket.closed: + asyncio.create_task(self.snes_socket.close()) + raise Exception('Invalid ROM detected, ' + 'please verify that you have loaded the correct rom and reconnect your snes (/snes)') - item_lookup: dict = data_package["lookup_any_item_id_to_name"] - locations_lookup: dict = data_package["lookup_any_location_id_to_name"] - - def get_item_name_from_id(code: int): - return item_lookup.get(code, f'Unknown item (ID:{code})') - self.item_name_getter = get_item_name_from_id - - def get_location_name_from_address(address: int): - return locations_lookup.get(address, f'Unknown location (ID:{address})') - self.location_name_getter = get_location_name_from_address - - - @property - def endpoints(self): - if self.server: - return [self.server] - else: - return [] - - async def disconnect(self): - if self.server and not self.server.socket.closed: - await self.server.socket.close() - self.ui_node.send_connection_status(self) - if self.server_task is not None: - await self.server_task - - async def send_msgs(self, msgs): - if not self.server or not self.server.socket.open or self.server.socket.closed: + async def server_auth(self, password_requested): + if password_requested and not self.password: + await super(Context, self).server_auth(password_requested) + if self.rom is None: + self.awaiting_rom = True + logger.info( + 'No ROM detected, awaiting snes connection to authenticate to the multiworld server (/snes)') return - await self.server.socket.send(encode(msgs)) - - def consume_players_package(self, package: typing.List[tuple]): - self.player_names = {slot: name for team, slot, name, orig_name in package if self.team == team} + self.awaiting_rom = False + self.auth = self.rom + auth = base64.b64encode(self.rom).decode() + await self.send_msgs([{"cmd": 'Connect', + 'password': self.password, 'name': auth, 'version': Utils._version_tuple, + 'tags': get_tags(self), + 'uuid': Utils.get_unique_identifier(), 'game': "A Link to the Past" + }]) def color_item(item_id: int, green: bool = False) -> str: @@ -161,9 +135,7 @@ def color_item(item_id: int, green: bool = False) -> str: return color(item_name, *item_colors) -START_RECONNECT_DELAY = 5 SNES_RECONNECT_DELAY = 5 -SERVER_RECONNECT_DELAY = 5 ROM_START = 0x000000 WRAM_START = 0xF50000 @@ -463,7 +435,7 @@ class SNESState(enum.IntEnum): def launch_qusb2snes(ctx: Context): - qusb2snes_path = Utils.get_options()["general_options"]["qusb2snes"] + qusb2snes_path = Utils.get_options()["lttp_options"]["qusb2snes"] if not os.path.isfile(qusb2snes_path): qusb2snes_path = Utils.local_path(qusb2snes_path) @@ -580,7 +552,7 @@ async def snes_connect(ctx: Context, address): ctx.snes_reconnect_address = address recv_task = asyncio.create_task(snes_recv_loop(ctx)) - SNES_RECONNECT_DELAY = START_RECONNECT_DELAY + SNES_RECONNECT_DELAY = ctx.starting_reconnect_delay except Exception as e: if recv_task is not None: @@ -754,385 +726,14 @@ async def snes_flush_writes(ctx: Context): await snes_write(ctx, writes) -async def server_loop(ctx: Context, address=None): - global SERVER_RECONNECT_DELAY - ctx.ui_node.send_connection_status(ctx) - cached_address = None - if ctx.server and ctx.server.socket: - logger.error('Already connected') - return - - if address is None: # set through CLI or APBP - address = ctx.server_address - if address is None: # see if this is an old connection - await asyncio.sleep(0.5) # wait for snes connection to succeed if possible. - rom = ctx.rom if ctx.rom else None - if rom: - servers = Utils.persistent_load()["servers"] - if rom in servers: - address = servers[rom] - cached_address = True - - # Wait for the user to provide a multiworld server address - if not address: - logger.info('Please connect to a multiworld server.') - ctx.ui_node.poll_for_server_ip() - return - - address = f"ws://{address}" if "://" not in address else address - port = urllib.parse.urlparse(address).port or 38281 - - logger.info('Connecting to multiworld server at %s' % address) - try: - socket = await websockets.connect(address, port=port, ping_timeout=None, ping_interval=None) - ctx.server = Endpoint(socket) - logger.info('Connected') - ctx.server_address = address - ctx.ui_node.send_connection_status(ctx) - SERVER_RECONNECT_DELAY = START_RECONNECT_DELAY - async for data in ctx.server.socket: - for msg in decode(data): - await process_server_cmd(ctx, msg) - logger.warning('Disconnected from multiworld server, type /connect to reconnect') - except WebUI.WaitingForUiException: - pass - except ConnectionRefusedError: - if cached_address: - logger.error('Unable to connect to multiworld server at cached address. ' - 'Please use the connect button above.') - else: - logger.error('Connection refused by the multiworld server') - except (OSError, websockets.InvalidURI): - logger.error('Failed to connect to the multiworld server') - except Exception as e: - logger.error('Lost connection to the multiworld server, type /connect to reconnect') - if not isinstance(e, websockets.WebSocketException): - logger.exception(e) - finally: - ctx.awaiting_rom = False - ctx.auth = None - ctx.items_received = [] - ctx.locations_info = {} - ctx.server_version = Version(0, 0, 0) - if ctx.server and ctx.server.socket is not None: - await ctx.server.socket.close() - ctx.server = None - ctx.server_task = None - if ctx.server_address: - logger.info(f"... reconnecting in {SERVER_RECONNECT_DELAY}s") - ctx.ui_node.send_connection_status(ctx) - asyncio.create_task(server_autoreconnect(ctx)) - SERVER_RECONNECT_DELAY *= 2 - - -async def server_autoreconnect(ctx: Context): - # unfortunately currently broken. See: https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1033 - # with prompt_toolkit.shortcuts.ProgressBar() as pb: - # for _ in pb(range(100)): - # await asyncio.sleep(RECONNECT_DELAY/100) - await asyncio.sleep(SERVER_RECONNECT_DELAY) - if ctx.server_address and ctx.server_task is None: - ctx.server_task = asyncio.create_task(server_loop(ctx)) - - - -async def process_server_cmd(ctx: Context, args: dict): - try: - cmd = args["cmd"] - except: - logger.exception(f"Could not get command from {args}") - raise - if cmd == 'RoomInfo': - logger.info('--------------------------------') - logger.info('Room Information:') - logger.info('--------------------------------') - version = args["version"] - ctx.server_version = tuple(version) - version = ".".join(str(item) for item in version) - - logger.info(f'Server protocol version: {version}') - logger.info("Server protocol tags: " + ", ".join(args["tags"])) - if args['password']: - logger.info('Password required') - logging.info(f"Forfeit setting: {args['forfeit_mode']}") - logging.info(f"Remaining setting: {args['remaining_mode']}") - logging.info(f"A !hint costs {args['hint_cost']} points and you get {args['location_check_points']}" - f" for each location checked.") - ctx.hint_cost = int(args['hint_cost']) - ctx.check_points = int(args['location_check_points']) - ctx.forfeit_mode = args['forfeit_mode'] - ctx.remaining_mode = args['remaining_mode'] - ctx.ui_node.send_game_info(ctx) - if len(args['players']) < 1: - logger.info('No player connected') - else: - args['players'].sort() - current_team = -1 - logger.info('Players:') - for team, slot, name in args['players']: - if team != current_team: - logger.info(f' Team #{team + 1}') - current_team = team - logger.info(' %s (Player %d)' % (name, slot)) - if args["datapackage_version"] > network_data_package["version"]: - await ctx.send_msgs([{"cmd": "GetDataPackage"}]) - await server_auth(ctx, args['password']) - - elif cmd == 'DataPackage': - ctx.set_getters(args['data'], network=True) - - elif cmd == 'ConnectionRefused': - errors = args["errors"] - if 'InvalidSlot' in errors: - if ctx.snes_socket is not None and not ctx.snes_socket.closed: - asyncio.create_task(ctx.snes_socket.close()) - raise Exception('Invalid ROM detected, ' - 'please verify that you have loaded the correct rom and reconnect your snes (/snes)') - elif 'SlotAlreadyTaken' in errors: - Utils.persistent_store("servers", ctx.rom, ctx.server_address) - raise Exception('Player slot already in use for that team') - elif 'IncompatibleVersion' in errors: - raise Exception('Server reported your client version as incompatible') - # last to check, recoverable problem - elif 'InvalidPassword' in errors: - logger.error('Invalid password') - ctx.password = None - await server_auth(ctx, True) - else: - raise Exception("Unknown connection errors: " + str(errors)) - raise Exception('Connection refused by the multiworld host, no reason provided') - - elif cmd == 'Connected': - Utils.persistent_store("servers", ctx.rom, ctx.server_address) - ctx.team = args["team"] - ctx.slot = args["slot"] - ctx.consume_players_package(args["players"]) - msgs = [] - if ctx.locations_checked: - msgs.append({"cmd": "LocationChecks", - "locations": list(ctx.locations_checked)}) - if ctx.locations_scouted: - msgs.append({"cmd": "LocationScouts", - "locations": list(ctx.locations_scouted)}) - if msgs: - await ctx.send_msgs(msgs) - if ctx.finished_game: - await send_finished_game(ctx) - - # Get the server side view of missing as of time of connecting. - # This list is used to only send to the server what is reported as ACTUALLY Missing. - # This also serves to allow an easy visual of what locations were already checked previously - # when /missing is used for the client side view of what is missing. - ctx.missing_locations = args["missing_locations"] - ctx.checked_locations = args["checked_locations"] - - elif cmd == 'ReceivedItems': - start_index = args["index"] - - if start_index == 0: - ctx.items_received = [] - elif start_index != len(ctx.items_received): - sync_msg = [{'cmd': 'Sync'}] - if ctx.locations_checked: - sync_msg.append({"cmd": "LocationChecks", - "locations": list(ctx.locations_checked)}) - await ctx.send_msgs(sync_msg) - if start_index == len(ctx.items_received): - for item in args['items']: - ctx.items_received.append(NetworkItem(*item)) - ctx.watcher_event.set() - - elif cmd == 'LocationInfo': - for item, location, player in args['locations']: - if location not in ctx.locations_info: - ctx.locations_info[location] = (item, player) - ctx.watcher_event.set() - - elif cmd == "RoomUpdate": - if "players" in args: - ctx.consume_players_package(args["players"]) - if "hint_points" in args: - ctx.hint_points = args['hint_points'] - - elif cmd == 'Print': - logger.info(args["text"]) - - elif cmd == 'PrintJSON': - if not ctx.found_items and args.get("type", None) == "ItemSend" and args["receiving"] == args["sending"]: - pass # don't want info on other player's local pickups. - logger.info(ctx.jsontotextparser(args["data"])) - - elif cmd == 'InvalidArguments': - logger.warning(f"Invalid Arguments: {args['text']}") - - else: - logger.debug(f"unknown command {cmd}") - - # kept as function for easier wrapping by plugins def get_tags(ctx: Context): tags = ['AP'] return tags -async def server_auth(ctx: Context, password_requested): - if password_requested and not ctx.password: - logger.info('Enter the password required to join this game:') - ctx.password = await console_input(ctx) - if ctx.rom is None: - ctx.awaiting_rom = True - logger.info( - 'No ROM detected, awaiting snes connection to authenticate to the multiworld server (/snes)') - return - ctx.awaiting_rom = False - ctx.auth = ctx.rom - auth = base64.b64encode(ctx.rom).decode() - await ctx.send_msgs([{"cmd": 'Connect', - 'password': ctx.password, 'name': auth, 'version': Utils._version_tuple, - 'tags': get_tags(ctx), - 'uuid': Utils.get_unique_identifier(), 'game': "A Link to the Past" - }]) -async def console_input(ctx: Context): - ctx.input_requests += 1 - return await ctx.input_queue.get() - - -async def connect(ctx: Context, address=None): - await ctx.disconnect() - ctx.server_task = asyncio.create_task(server_loop(ctx, address)) - - -from MultiServer import CommandProcessor, mark_raw - - -class ClientCommandProcessor(CommandProcessor): - def __init__(self, ctx: Context): - self.ctx = ctx - - def output(self, text: str): - logger.info(text) - - def _cmd_exit(self) -> bool: - """Close connections and client""" - self.ctx.exit_event.set() - return True - - @mark_raw - def _cmd_snes(self, snes_address: str = "") -> bool: - """Connect to a snes. Optionally include network address of a snes to connect to, otherwise show available devices""" - self.ctx.snes_reconnect_address = None - asyncio.create_task(snes_connect(self.ctx, snes_address if snes_address else self.ctx.snes_address)) - return True - - def _cmd_snes_close(self) -> bool: - """Close connection to a currently connected snes""" - self.ctx.snes_reconnect_address = None - if self.ctx.snes_socket is not None and not self.ctx.snes_socket.closed: - asyncio.create_task(self.ctx.snes_socket.close()) - return True - else: - return False - - def _cmd_connect(self, address: str = "") -> bool: - """Connect to a MultiWorld Server""" - self.ctx.server_address = None - asyncio.create_task(connect(self.ctx, address if address else None)) - return True - - def _cmd_disconnect(self) -> bool: - """Disconnect from a MultiWorld Server""" - self.ctx.server_address = None - asyncio.create_task(self.ctx.disconnect()) - return True - - def _cmd_received(self) -> bool: - """List all received items""" - logger.info('Received items:') - for index, item in enumerate(self.ctx.items_received, 1): - self.ctx.ui_node.notify_item_received(self.ctx.player_names[item.player], self.ctx.item_name_getter(item.item), - self.ctx.location_name_getter(item.location), index, - len(self.ctx.items_received), - self.ctx.item_name_getter(item.item) in Items.progression_items) - logging.info('%s from %s (%s) (%d/%d in list)' % ( - color(self.ctx.item_name_getter(item.item), 'red', 'bold'), - color(self.ctx.player_names[item.player], 'yellow'), - self.ctx.location_name_getter(item.location), index, len(self.ctx.items_received))) - return True - - def _cmd_missing(self) -> bool: - """List all missing location checks, from your local game state""" - count = 0 - checked_count = 0 - for location, location_id in Regions.lookup_name_to_id.items(): - if location_id < 0: - continue - if location_id not in self.ctx.locations_checked: - if location_id in self.ctx.missing_locations: - self.output('Missing: ' + location) - count += 1 - elif location_id in self.ctx.checked_locations: - self.output('Checked: ' + location) - count += 1 - checked_count += 1 - - if count: - self.output( - f"Found {count} missing location checks{f'. {checked_count} locations checks previously visited.' if checked_count else ''}") - else: - self.output("No missing location checks found.") - return True - - def _cmd_slow_mode(self, toggle: str = ""): - """Toggle slow mode, which limits how fast you send / receive items.""" - if toggle: - self.ctx.slow_mode = toggle.lower() in {"1", "true", "on"} - else: - self.ctx.slow_mode = not self.ctx.slow_mode - - self.output(f"Setting slow mode to {self.ctx.slow_mode}") - - def _cmd_web(self): - if self.ctx.webui_socket_port: - webbrowser.open(f'http://localhost:5050?port={self.ctx.webui_socket_port}') - else: - self.output("Web UI was never started.") - - def _cmd_ready(self): - self.ctx.ready = not self.ctx.ready - if self.ctx.ready: - state = CLientStatus.CLIENT_READY - self.output("Readied up.") - else: - state = CLientStatus.CLIENT_CONNECTED - self.output("Unreadied.") - asyncio.create_task(self.ctx.send_msgs([{"cmd": "StatusUpdate", "status": state}])) - - def default(self, raw: str): - asyncio.create_task(self.ctx.send_msgs([{"cmd": "Say", "text": raw}])) - - -async def console_loop(ctx: Context): - session = prompt_toolkit.PromptSession() - commandprocessor = ClientCommandProcessor(ctx) - while not ctx.exit_event.is_set(): - try: - with patch_stdout(): - input_text = await session.prompt_async() - - if ctx.input_requests > 0: - ctx.input_requests -= 1 - ctx.input_queue.put_nowait(input_text) - continue - - if not input_text: - continue - commandprocessor(input_text) - except Exception as e: - logging.exception(e) - await snes_flush_writes(ctx) - async def track_locations(ctx: Context, roomid, roomdata): new_locations = [] @@ -1218,9 +819,6 @@ async def track_locations(ctx: Context, roomid, roomdata): await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": new_locations}]) -async def send_finished_game(ctx: Context): - await ctx.send_msgs([{"cmd": "StatusUpdate", "status": CLientStatus.CLIENT_GOAL}]) - async def game_watcher(ctx: Context): prev_game_timer = 0 perf_counter = time.perf_counter() @@ -1244,7 +842,7 @@ async def game_watcher(ctx: Context): ctx.prev_rom = ctx.rom if ctx.awaiting_rom: - await server_auth(ctx, False) + await ctx.server_auth(False) if ctx.auth and ctx.auth != ctx.rom: logger.warning("ROM change detected, please reconnect to the multiworld server") @@ -1260,7 +858,7 @@ async def game_watcher(ctx: Context): delay = 7 if ctx.slow_mode else 2 if gameend[0]: if not ctx.finished_game: - await send_finished_game(ctx) + await ctx.send_msgs([{"cmd": "StatusUpdate", "status": ClientStatus.CLIENT_GOAL}]) ctx.finished_game = True if time.perf_counter() - perf_counter < delay: @@ -1314,7 +912,7 @@ async def game_watcher(ctx: Context): async def run_game(romfile): - auto_start = Utils.get_options()["general_options"].get("rom_start", True) + auto_start = Utils.get_options()["lttp_options"].get("rom_start", True) if auto_start is True: import webbrowser webbrowser.open(romfile) @@ -1326,7 +924,7 @@ async def run_game(romfile): async def websocket_server(websocket: websockets.WebSocketServerProtocol, path, ctx: Context): endpoint = Endpoint(websocket) ctx.ui_node.endpoints.append(endpoint) - process_command = ClientCommandProcessor(ctx) + process_command = LttPCommandProcessor(ctx) try: async for incoming_data in websocket: data = loads(incoming_data) @@ -1347,7 +945,7 @@ async def websocket_server(websocket: websockets.WebSocketServerProtocol, path, elif data['type'] == 'webConfig': if 'serverAddress' in data['content']: ctx.server_address = data['content']['serverAddress'] - await connect(ctx, data['content']['serverAddress']) + await ctx.connect(data['content']['serverAddress']) elif 'deviceId' in data['content']: # Allow a SNES disconnect via UI sending -1 as new device if data['content']['deviceId'] == "-1": @@ -1416,16 +1014,16 @@ async def main(): port, on_start=threading.Timer(1, webbrowser.open, (f'http://localhost:5050?port={port}',)).start) ctx = Context(args.snes, args.connect, args.password, args.founditems, port) - input_task = create_named_task(console_loop(ctx), name="Input") + input_task = asyncio.create_task(console_loop(ctx), name="Input") if not args.disable_web_ui: ui_socket = websockets.serve(functools.partial(websocket_server, ctx=ctx), 'localhost', port, ping_timeout=None, ping_interval=None) await ui_socket if ctx.server_task is None: - ctx.server_task = create_named_task(server_loop(ctx), name="ServerLoop") + ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") - watcher_task = create_named_task(game_watcher(ctx), name="GameWatcher") + watcher_task = asyncio.create_task(game_watcher(ctx), name="GameWatcher") await ctx.exit_event.wait() ctx.server_address = None diff --git a/Main.py b/Main.py index 91ae32e9..abdc2d7d 100644 --- a/Main.py +++ b/Main.py @@ -25,6 +25,8 @@ from worlds.alttp.ItemPool import generate_itempool, difficulties, fill_prizes from Utils import output_path, parse_player_names, get_options, __version__, _version_tuple from worlds.hk import gen_hollow, set_rules as set_hk_rules from worlds.hk import create_regions as hk_create_regions +from worlds.factorio import gen_factorio, factorio_create_regions +from worlds.factorio.Mod import generate_mod from worlds.generic.Rules import locality_rules from worlds import Games import Patch @@ -74,6 +76,7 @@ def main(args, seed=None): world.timer = args.timer.copy() world.progressive = args.progressive.copy() world.goal = args.goal.copy() + world.local_items = args.local_items.copy() if hasattr(args, "algorithm"): # current GUI options world.algorithm = args.algorithm world.shuffleganon = args.shuffleganon @@ -202,6 +205,9 @@ def main(args, seed=None): for player in world.hk_player_ids: hk_create_regions(world, player) + for player in world.factorio_player_ids: + factorio_create_regions(world, player) + for player in world.alttp_player_ids: if world.open_pyramid[player] == 'goal': world.open_pyramid[player] = world.goal[player] in {'crystals', 'ganontriforcehunt', 'localganontriforcehunt', 'ganonpedestal'} @@ -251,14 +257,16 @@ def main(args, seed=None): if world.players > 1: for player in world.player_ids: locality_rules(world, player) + for player in world.alttp_player_ids: set_rules(world, player) - logger.info("Doing Hollow Knight things") - for player in world.hk_player_ids: gen_hollow(world, player) + for player in world.factorio_player_ids: + gen_factorio(world, player) + logger.info("Running Item Plando") for item in world.itempool: @@ -405,10 +413,12 @@ def main(args, seed=None): if not args.suppress_rom: rom_futures = [] - + mod_futures = [] for team in range(world.teams): for player in world.alttp_player_ids: rom_futures.append(pool.submit(_gen_rom, team, player)) + for player in world.factorio_player_ids: + mod_futures.append(pool.submit(generate_mod, world, player)) def get_entrance_to_region(region: Region): for entrance in region.entrances: @@ -440,7 +450,7 @@ def main(args, seed=None): for location in [loc for loc in world.get_filled_locations() if type(loc.address) is int]: main_entrance = get_entrance_to_region(location.parent_region) - if location.game == Games.HK: + if location.game != Games.LTTP: checks_in_area[location.player]["Light World"].append(location.address) elif location.parent_region.dungeon: dungeonname = {'Inverted Agahnims Tower': 'Agahnims Tower', @@ -477,7 +487,7 @@ def main(args, seed=None): FillDisabledShopSlots(world) - def write_multidata(roms): + def write_multidata(roms, mods): import base64 for future in roms: rom_name = future.result() @@ -488,13 +498,13 @@ def main(args, seed=None): for i, team in enumerate(parsed_names): for player, name in enumerate(team, 1): - if player in world.hk_player_ids: + if player not in world.alttp_player_ids: connect_names[name] = (i, player) multidata = zlib.compress(pickle.dumps({"names": parsed_names, "connect_names": connect_names, "remote_items": {player for player in range(1, world.players + 1) if world.remote_items[player] or - world.game[player] == "Hollow Knight"}, + world.game[player] != "Hollow Knight"}, "locations": { (location.address, location.player): (location.item.code, location.item.player) @@ -512,8 +522,10 @@ def main(args, seed=None): with open(output_path('%s.archipelago' % outfilebase), 'wb') as f: f.write(bytes([1])) # version of format f.write(multidata) + for future in mods: + future.result() # collect errors if they occured - multidata_task = pool.submit(write_multidata, rom_futures) + multidata_task = pool.submit(write_multidata, rom_futures, mod_futures) if not check_accessibility_task.result(): if not world.can_beat_game(): raise Exception("Game appears as unbeatable. Aborting.") diff --git a/ModuleUpdate.py b/ModuleUpdate.py index e8f9846a..cb618053 100644 --- a/ModuleUpdate.py +++ b/ModuleUpdate.py @@ -15,7 +15,8 @@ def update_command(): naming_specialties = {"PyYAML": "yaml", # PyYAML is imported as the name yaml - "maseya-z3pr": "maseya"} + "maseya-z3pr": "maseya", + "factorio-rcon-py": "factorio_rcon"} def update(): diff --git a/MultiMystery.py b/MultiMystery.py index 9c32b92b..3376653c 100644 --- a/MultiMystery.py +++ b/MultiMystery.py @@ -48,7 +48,7 @@ if __name__ == "__main__": weights_file_path = multi_mystery_options["weights_file_path"] pre_roll = multi_mystery_options["pre_roll"] teams = multi_mystery_options["teams"] - rom_file = options["general_options"]["rom_file"] + rom_file = options["lttp_options"]["rom_file"] host = options["server_options"]["host"] port = options["server_options"]["port"] diff --git a/MultiServer.py b/MultiServer.py index 10bfa052..51fb74dd 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -31,7 +31,7 @@ from worlds import network_data_package, lookup_any_item_id_to_name, lookup_any_ import Utils from Utils import get_item_name_from_id, get_location_name_from_address, \ _version_tuple, restricted_loads, Version -from NetUtils import Node, Endpoint, CLientStatus, NetworkItem, decode +from NetUtils import Node, Endpoint, ClientStatus, NetworkItem, decode colorama.init() lttp_console_names = frozenset(set(Items.item_table) | set(Items.item_name_groups) | set(Regions.lookup_name_to_id)) @@ -370,7 +370,7 @@ async def on_client_disconnected(ctx: Context, client: Client): async def on_client_joined(ctx: Context, client: Client): - update_client_status(ctx, client, CLientStatus.CLIENT_CONNECTED) + update_client_status(ctx, client, ClientStatus.CLIENT_CONNECTED) version_str = '.'.join(str(x) for x in client.version) ctx.notify_all( f"{ctx.get_aliased_name(client.team, client.slot)} (Team #{client.team + 1}) has joined the game. " @@ -379,7 +379,7 @@ async def on_client_joined(ctx: Context, client: Client): ctx.client_connection_timers[client.team, client.slot] = datetime.datetime.now(datetime.timezone.utc) async def on_client_left(ctx: Context, client: Client): - update_client_status(ctx, client, CLientStatus.CLIENT_UNKNOWN) + update_client_status(ctx, client, ClientStatus.CLIENT_UNKNOWN) ctx.notify_all("%s (Team #%d) has left the game" % (ctx.get_aliased_name(client.team, client.slot), client.team + 1)) ctx.client_connection_timers[client.team, client.slot] = datetime.datetime.now(datetime.timezone.utc) @@ -486,7 +486,7 @@ def notify_team(ctx: Context, team: int, text: str): def collect_hints(ctx: Context, team: int, slot: int, item: str) -> typing.List[NetUtils.Hint]: hints = [] - seeked_item_id = Items.item_table[item][2] + seeked_item_id = lookup_any_item_name_to_id[item] for check, result in ctx.locations.items(): item_id, receiving_player = result if receiving_player == slot and item_id == seeked_item_id: @@ -514,7 +514,7 @@ def collect_hints_location(ctx: Context, team: int, slot: int, location: str) -> def format_hint(ctx: Context, team: int, hint: NetUtils.Hint) -> str: text = f"[Hint]: {ctx.player_names[team, hint.receiving_player]}'s " \ - f"{Items.lookup_id_to_name[hint.item]} is " \ + f"{lookup_any_item_id_to_name[hint.item]} is " \ f"at {get_location_name_from_address(hint.location)} " \ f"in {ctx.player_names[team, hint.finding_player]}'s World" @@ -750,7 +750,7 @@ class ClientMessageProcessor(CommonCommandProcessor): "Sorry, client forfeiting has been disabled on this server. You can ask the server admin for a /forfeit") return False else: # is auto or goal - if self.ctx.client_game_state[self.client.team, self.client.slot] == CLientStatus.CLIENT_GOAL: + if self.ctx.client_game_state[self.client.team, self.client.slot] == ClientStatus.CLIENT_GOAL: forfeit_player(self.ctx, self.client.team, self.client.slot) return True else: @@ -774,7 +774,7 @@ class ClientMessageProcessor(CommonCommandProcessor): "Sorry, !remaining has been disabled on this server.") return False else: # is goal - if self.ctx.client_game_state[self.client.team, self.client.slot] == CLientStatus.CLIENT_GOAL: + if self.ctx.client_game_state[self.client.team, self.client.slot] == ClientStatus.CLIENT_GOAL: remaining_item_ids = get_remaining(self.ctx, self.client.team, self.client.slot) if remaining_item_ids: self.output("Remaining items: " + ", ".join(Items.lookup_id_to_name.get(item_id, "unknown item") @@ -859,7 +859,7 @@ class ClientMessageProcessor(CommonCommandProcessor): hints = [] for item in Items.item_name_groups[item_name]: hints.extend(collect_hints(self.ctx, self.client.team, self.client.slot, item)) - elif item_name in Items.item_table: # item name + elif item_name in lookup_any_item_name_to_id: # item name hints = collect_hints(self.ctx, self.client.team, self.client.slot, item_name) else: # location name hints = collect_hints_location(self.ctx, self.client.team, self.client.slot, item_name) @@ -1056,10 +1056,10 @@ async def process_client_cmd(ctx: Context, client: Client, args: dict): client.messageprocessor(args["text"]) -def update_client_status(ctx: Context, client: Client, new_status: CLientStatus): +def update_client_status(ctx: Context, client: Client, new_status: ClientStatus): current = ctx.client_game_state[client.team, client.slot] - if current != CLientStatus.CLIENT_GOAL: # can't undo goal completion - if new_status == CLientStatus.CLIENT_GOAL: + if current != ClientStatus.CLIENT_GOAL: # can't undo goal completion + if new_status == ClientStatus.CLIENT_GOAL: finished_msg = f'{ctx.get_aliased_name(client.team, client.slot)} (Team #{client.team + 1}) has completed their goal.' ctx.notify_all(finished_msg) if "auto" in ctx.forfeit_mode: @@ -1219,7 +1219,10 @@ class ServerCommandProcessor(CommonCommandProcessor): hints = collect_hints(self.ctx, team, slot, item) else: # location name hints = collect_hints_location(self.ctx, team, slot, item) - notify_hints(self.ctx, team, hints) + if hints: + notify_hints(self.ctx, team, hints) + else: + self.output("No hints found.") return True else: self.output(response) @@ -1336,7 +1339,8 @@ async def auto_shutdown(ctx, to_cancel=None): async def main(args: argparse.Namespace): - logging.basicConfig(format='[%(asctime)s] %(message)s', level=getattr(logging, args.loglevel.upper(), logging.INFO)) + logging.basicConfig(force = True, + format='[%(asctime)s] %(message)s', level=getattr(logging, args.loglevel.upper(), logging.INFO)) ctx = Context(args.host, args.port, args.server_password, args.password, args.location_check_points, args.hint_cost, not args.disable_item_cheat, args.forfeit_mode, args.remaining_mode, diff --git a/Mystery.py b/Mystery.py index 9c0c2a86..b64c2f52 100644 --- a/Mystery.py +++ b/Mystery.py @@ -473,6 +473,8 @@ def roll_settings(weights: dict, plando_options: typing.Set[str] = frozenset(("b elif ret.game == "Hollow Knight": for option_name, option in Options.hollow_knight_options.items(): setattr(ret, option_name, option.from_any(get_choice(option_name, weights, True))) + elif ret.game == "Factorio": + pass else: raise Exception(f"Unsupported game {ret.game}") return ret diff --git a/NetUtils.py b/NetUtils.py index 4a82fa73..63764681 100644 --- a/NetUtils.py +++ b/NetUtils.py @@ -19,7 +19,7 @@ class JSONMessagePart(typing.TypedDict, total=False): -class CLientStatus(enum.IntEnum): +class ClientStatus(enum.IntEnum): CLIENT_UNKNOWN = 0 CLIENT_CONNECTED = 5 CLIENT_READY = 10 diff --git a/Patch.py b/Patch.py index 2a2a7e73..0c0f08dd 100644 --- a/Patch.py +++ b/Patch.py @@ -18,7 +18,7 @@ current_patch_version = 1 def get_base_rom_path(file_name: str = "") -> str: options = Utils.get_options() if not file_name: - file_name = options["general_options"]["rom_file"] + file_name = options["lttp_options"]["rom_file"] if not os.path.exists(file_name): file_name = Utils.local_path(file_name) return file_name diff --git a/Utils.py b/Utils.py index 93d647ba..be75e3e8 100644 --- a/Utils.py +++ b/Utils.py @@ -12,7 +12,7 @@ class Version(typing.NamedTuple): minor: int build: int -__version__ = "0.0.1" +__version__ = "0.0.2" _version_tuple = tuplize_version(__version__) import builtins @@ -162,10 +162,17 @@ def get_default_options() -> dict: # Refer to host.yaml for comments as to what all these options mean. options = { "general_options": { + "output_path": "output", + }, + "factorio_options": { + "executable": "factorio\\bin\\x64\\factorio", + "script-output": "factorio\\script-output", + }, + "lttp_options": { "rom_file": "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc", "qusb2snes": "QUsb2Snes\\QUsb2Snes.exe", "rom_start": True, - "output_path": "output", + }, "server_options": { "host": None, diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index 22dda00c..243f7603 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -1,7 +1,7 @@ flask>=1.1.2 pony>=0.7.14 -waitress>=1.4.4 -flask-caching>=1.9.0 +waitress>=2.0.0 +flask-caching>=1.10.1 Flask-Autoversion>=0.2.0 Flask-Compress>=1.9.0 Flask-Limiter>=1.4 diff --git a/WebUI.py b/WebUI.py index 36770812..e634d6d6 100644 --- a/WebUI.py +++ b/WebUI.py @@ -10,7 +10,7 @@ import asyncio from functools import partial from NetUtils import Node -from MultiClient import Context +from LttPClient import Context import Utils @@ -116,10 +116,6 @@ class WebUiClient(Node, logging.Handler): })) -class WaitingForUiException(Exception): - pass - - web_thread = None PORT = 5050 diff --git a/data/factorio/mod/LICENSE.md b/data/factorio/mod/LICENSE.md new file mode 100644 index 00000000..2efbca63 --- /dev/null +++ b/data/factorio/mod/LICENSE.md @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2021 Berserker55 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/data/factorio/mod/control.lua b/data/factorio/mod/control.lua new file mode 100644 index 00000000..e43c3bad --- /dev/null +++ b/data/factorio/mod/control.lua @@ -0,0 +1,108 @@ +-- for testing +script.on_event(defines.events.on_tick, function(event) + if event.tick%600 == 0 then + dumpTech() + end +end) + +-- hook into researches done +script.on_event(defines.events.on_research_finished, function(event) + game.print("Research done") + dumpTech() +end) + +function dumpTech() + + local force = game.forces["player"] + local data_collection = {} + for tech_name, tech in pairs(force.technologies) do + if tech.researched and string.find(tech_name, "ap-") == 1 then + data_collection[tech_name] = tech.researched + end + end + game.write_file("research_done.json", game.table_to_json(data_collection), false) + -- game.write_file("research_done.json", game.table_to_json(data_collection), false, 0) + -- game.print("Sent progress to Archipelago.") +end + +function dumpGameInfo() + -- dump Game Information that the Archipelago Randomizer needs. + local data_collection = {} + local force = game.forces["player"] + for tech_name, tech in pairs(force.technologies) do + if tech.enabled then + local tech_data = {} + local unlocks = {} + tech_data["unlocks"] = unlocks + local requires = {} + tech_data["requires"] = requires + local ingredients = {} + tech_data["ingredients"] = ingredients + for tech_requirement, _ in pairs(tech.prerequisites) do + table.insert(requires, tech_requirement) + end + for _, modifier in pairs(tech.effects) do + if modifier.type == "unlock-recipe" then + table.insert(unlocks, modifier.recipe) + end + end + for _, ingredient in pairs(tech.research_unit_ingredients) do + table.insert(ingredients, ingredient.name) + end + data_collection[tech_name] = tech_data + + end + game.write_file("techs.json", game.table_to_json(data_collection), false) + game.print("Exported Tech Data") + end + data_collection = {} + for recipe_name, recipe in pairs(force.recipes) do + local recipe_data = {} + recipe_data["ingredients"] = {} + recipe_data["products"] = {} + recipe_data["category"] = recipe.category + for _, ingredient in pairs(recipe.ingredients) do + table.insert(recipe_data["ingredients"], ingredient.name) + end + for _, product in pairs(recipe.products) do + table.insert(recipe_data["products"], product.name) + end + data_collection[recipe_name] = recipe_data + end + game.write_file("recipes.json", game.table_to_json(data_collection), false) + game.print("Exported Recipe Data") + -- data.raw can't be accessed from control.lua, need to find a better method + -- data_collection = {} + -- for machine_name, machine in pairs(data.raw["assembling_machine"]) do + -- local machine_data = {} + -- machine_data["categories"] = table.deepcopy(machine.crafting_categories) + -- data_collection[machine.name] = machine_data + -- end + -- game.write_file("machines.json", game.table_to_json(data_collection), false) + -- game.print("Exported Machine Data") +end + +-- add / commands + +commands.add_command("ap-get-info-dump", "Dump Game Info, used by Archipelago.", function(call) + dumpGameInfo() +end) + +commands.add_command("ap-sync", "Run manual Research Sync with Archipelago.", function(call) + dumpTech() +end) + +commands.add_command("ap-get-technology", "Grant a technology, used by the Archipelago Client.", function(call) + local force = game.forces["player"] + local tech_name = call.parameter + local tech = force.technologies[tech_name] + if tech ~= nil then + if tech.researched ~= true then + tech.researched = true + game.print({"", "Received ", tech.localised_name, " from Archipelago"}) + game.play_sound({path="utility/research_completed"}) + end + else + game.print("Unknown Technology " .. tech_name) + end +end) \ No newline at end of file diff --git a/data/factorio/mod/data.lua b/data/factorio/mod/data.lua new file mode 100644 index 00000000..e69de29b diff --git a/data/factorio/mod/graphics/icons/ap.png b/data/factorio/mod/graphics/icons/ap.png new file mode 100644 index 0000000000000000000000000000000000000000..5532aaecf437415f3e2bac80391fcbfbd116fcdd GIT binary patch literal 269901 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 Mf38259V93H4^Im~zW@LL literal 0 HcmV?d00001 diff --git a/data/factorio/mod/info.json b/data/factorio/mod/info.json new file mode 100644 index 00000000..2223a57f --- /dev/null +++ b/data/factorio/mod/info.json @@ -0,0 +1,9 @@ +{ + "name": "archipelago-client", + "version": "0.0.1", + "title": "Archipelago", + "author": "Berserker", + "homepage": "https://archipelago.gg", + "description": "Integration client for the Archipelago Randomizer", + "factorio_version": "1.1" +} diff --git a/data/factorio/mod_template/data-final-fixes.lua b/data/factorio/mod_template/data-final-fixes.lua new file mode 100644 index 00000000..cd847a18 --- /dev/null +++ b/data/factorio/mod_template/data-final-fixes.lua @@ -0,0 +1,34 @@ +-- this file gets written automatically by the Archipelago Randomizer and is in its raw form a Jinja2 Template +local technologies = data.raw["technology"] +local original_tech +local new_tree_copy +local template_tech = table.deepcopy(technologies["automation"]) +{#- ensure the copy unlocks nothing #} +template_tech.unlocks = {} +template_tech.upgrade = false +template_tech.effects = {} +{# each randomized tech gets set to be invisible, with new nodes added that trigger those #} +{%- for original_tech_name, item_name, receiving_player in locations %} +original_tech = technologies["{{original_tech_name}}"] +{#- the tech researched by the local player #} +new_tree_copy = table.deepcopy(template_tech) +new_tree_copy.name = "ap-{{ tech_table[original_tech_name] }}-"{# use AP ID #} +{#- hide and disable original tech; which will be shown, unlocked and enabled by AP Client #} +original_tech.enabled = false +{#- copy original tech costs #} +new_tree_copy.unit = table.deepcopy(original_tech.unit) +{% if item_name in tech_table %} +{#- copy Factorio Technology Icon #} +new_tree_copy.icon = table.deepcopy(technologies["{{ item_name }}"].icon) +new_tree_copy.icons = table.deepcopy(technologies["{{ item_name }}"].icons) +new_tree_copy.icon_size = table.deepcopy(technologies["{{ item_name }}"].icon_size) +{% else %} +{#- use default AP icon if no Factorio graphics exist #} +new_tree_copy.icon = "__{{ mod_name }}__/graphics/icons/ap.png" +new_tree_copy.icons = nil +new_tree_copy.icon_size = 512 +{% endif %} +{#- add new technology to game #} +data:extend{new_tree_copy} + +{% endfor %} \ No newline at end of file diff --git a/data/factorio/mod_template/locale/en/locale.cfg b/data/factorio/mod_template/locale/en/locale.cfg new file mode 100644 index 00000000..c0178906 --- /dev/null +++ b/data/factorio/mod_template/locale/en/locale.cfg @@ -0,0 +1,8 @@ +[technology-name] +{% for original_tech_name, item_name, receiving_player in locations %} +ap-{{ tech_table[original_tech_name] }}-={{ player_names[receiving_player] }}'s {{ item_name }} +{% endfor %} +[technology-description] +{% for original_tech_name, item_name, receiving_player in locations %} +"ap-{{ tech_table[original_tech_name] }}-=Researching this technology sends {{ item_name }} to {{ player_names[receiving_player] }}. +{% endfor %} \ No newline at end of file diff --git a/data/factorio/recipes.json b/data/factorio/recipes.json new file mode 100644 index 00000000..cf4865e2 --- /dev/null +++ b/data/factorio/recipes.json @@ -0,0 +1 @@ +{"accumulator":{"ingredients":["iron-plate","battery"],"products":["accumulator"],"category":"crafting"},"advanced-circuit":{"ingredients":["plastic-bar","copper-cable","electronic-circuit"],"products":["advanced-circuit"],"category":"crafting"},"arithmetic-combinator":{"ingredients":["copper-cable","electronic-circuit"],"products":["arithmetic-combinator"],"category":"crafting"},"artillery-shell":{"ingredients":["explosives","explosive-cannon-shell","radar"],"products":["artillery-shell"],"category":"crafting"},"artillery-targeting-remote":{"ingredients":["processing-unit","radar"],"products":["artillery-targeting-remote"],"category":"crafting"},"artillery-turret":{"ingredients":["steel-plate","iron-gear-wheel","advanced-circuit","concrete"],"products":["artillery-turret"],"category":"crafting"},"artillery-wagon":{"ingredients":["steel-plate","iron-gear-wheel","advanced-circuit","engine-unit","pipe"],"products":["artillery-wagon"],"category":"crafting"},"assembling-machine-1":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit"],"products":["assembling-machine-1"],"category":"crafting"},"assembling-machine-2":{"ingredients":["steel-plate","iron-gear-wheel","electronic-circuit","assembling-machine-1"],"products":["assembling-machine-2"],"category":"crafting"},"assembling-machine-3":{"ingredients":["assembling-machine-2","speed-module"],"products":["assembling-machine-3"],"category":"crafting"},"atomic-bomb":{"ingredients":["explosives","rocket-control-unit","uranium-235"],"products":["atomic-bomb"],"category":"crafting"},"automation-science-pack":{"ingredients":["copper-plate","iron-gear-wheel"],"products":["automation-science-pack"],"category":"crafting"},"battery":{"ingredients":["iron-plate","copper-plate","sulfuric-acid"],"products":["battery"],"category":"chemistry"},"battery-equipment":{"ingredients":["steel-plate","battery"],"products":["battery-equipment"],"category":"crafting"},"battery-mk2-equipment":{"ingredients":["processing-unit","low-density-structure","battery-equipment"],"products":["battery-mk2-equipment"],"category":"crafting"},"beacon":{"ingredients":["steel-plate","copper-cable","electronic-circuit","advanced-circuit"],"products":["beacon"],"category":"crafting"},"belt-immunity-equipment":{"ingredients":["steel-plate","advanced-circuit"],"products":["belt-immunity-equipment"],"category":"crafting"},"big-electric-pole":{"ingredients":["copper-plate","steel-plate","iron-stick"],"products":["big-electric-pole"],"category":"crafting"},"boiler":{"ingredients":["pipe","stone-furnace"],"products":["boiler"],"category":"crafting"},"burner-inserter":{"ingredients":["iron-plate","iron-gear-wheel"],"products":["burner-inserter"],"category":"crafting"},"burner-mining-drill":{"ingredients":["iron-plate","iron-gear-wheel","stone-furnace"],"products":["burner-mining-drill"],"category":"crafting"},"cannon-shell":{"ingredients":["steel-plate","plastic-bar","explosives"],"products":["cannon-shell"],"category":"crafting"},"car":{"ingredients":["iron-plate","steel-plate","engine-unit"],"products":["car"],"category":"crafting"},"cargo-wagon":{"ingredients":["iron-plate","steel-plate","iron-gear-wheel"],"products":["cargo-wagon"],"category":"crafting"},"centrifuge":{"ingredients":["steel-plate","iron-gear-wheel","advanced-circuit","concrete"],"products":["centrifuge"],"category":"crafting"},"chemical-plant":{"ingredients":["steel-plate","iron-gear-wheel","electronic-circuit","pipe"],"products":["chemical-plant"],"category":"crafting"},"chemical-science-pack":{"ingredients":["sulfur","advanced-circuit","engine-unit"],"products":["chemical-science-pack"],"category":"crafting"},"cliff-explosives":{"ingredients":["explosives","empty-barrel","grenade"],"products":["cliff-explosives"],"category":"crafting"},"cluster-grenade":{"ingredients":["steel-plate","explosives","grenade"],"products":["cluster-grenade"],"category":"crafting"},"combat-shotgun":{"ingredients":["wood","copper-plate","steel-plate","iron-gear-wheel"],"products":["combat-shotgun"],"category":"crafting"},"concrete":{"ingredients":["iron-ore","stone-brick","water"],"products":["concrete"],"category":"crafting-with-fluid"},"constant-combinator":{"ingredients":["copper-cable","electronic-circuit"],"products":["constant-combinator"],"category":"crafting"},"construction-robot":{"ingredients":["electronic-circuit","flying-robot-frame"],"products":["construction-robot"],"category":"crafting"},"copper-cable":{"ingredients":["copper-plate"],"products":["copper-cable"],"category":"crafting"},"copper-plate":{"ingredients":["copper-ore"],"products":["copper-plate"],"category":"smelting"},"decider-combinator":{"ingredients":["copper-cable","electronic-circuit"],"products":["decider-combinator"],"category":"crafting"},"defender-capsule":{"ingredients":["iron-gear-wheel","electronic-circuit","piercing-rounds-magazine"],"products":["defender-capsule"],"category":"crafting"},"destroyer-capsule":{"ingredients":["speed-module","distractor-capsule"],"products":["destroyer-capsule"],"category":"crafting"},"discharge-defense-equipment":{"ingredients":["steel-plate","processing-unit","laser-turret"],"products":["discharge-defense-equipment"],"category":"crafting"},"discharge-defense-remote":{"ingredients":["electronic-circuit"],"products":["discharge-defense-remote"],"category":"crafting"},"distractor-capsule":{"ingredients":["advanced-circuit","defender-capsule"],"products":["distractor-capsule"],"category":"crafting"},"effectivity-module":{"ingredients":["electronic-circuit","advanced-circuit"],"products":["effectivity-module"],"category":"crafting"},"effectivity-module-2":{"ingredients":["advanced-circuit","processing-unit","effectivity-module"],"products":["effectivity-module-2"],"category":"crafting"},"effectivity-module-3":{"ingredients":["advanced-circuit","processing-unit","effectivity-module-2"],"products":["effectivity-module-3"],"category":"crafting"},"electric-energy-interface":{"ingredients":["iron-plate","electronic-circuit"],"products":["electric-energy-interface"],"category":"crafting"},"electric-engine-unit":{"ingredients":["electronic-circuit","engine-unit","lubricant"],"products":["electric-engine-unit"],"category":"crafting-with-fluid"},"electric-furnace":{"ingredients":["steel-plate","advanced-circuit","stone-brick"],"products":["electric-furnace"],"category":"crafting"},"electric-mining-drill":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit"],"products":["electric-mining-drill"],"category":"crafting"},"electronic-circuit":{"ingredients":["iron-plate","copper-cable"],"products":["electronic-circuit"],"category":"crafting"},"empty-barrel":{"ingredients":["steel-plate"],"products":["empty-barrel"],"category":"crafting"},"energy-shield-equipment":{"ingredients":["steel-plate","advanced-circuit"],"products":["energy-shield-equipment"],"category":"crafting"},"energy-shield-mk2-equipment":{"ingredients":["processing-unit","low-density-structure","energy-shield-equipment"],"products":["energy-shield-mk2-equipment"],"category":"crafting"},"engine-unit":{"ingredients":["steel-plate","iron-gear-wheel","pipe"],"products":["engine-unit"],"category":"advanced-crafting"},"exoskeleton-equipment":{"ingredients":["steel-plate","processing-unit","electric-engine-unit"],"products":["exoskeleton-equipment"],"category":"crafting"},"explosive-cannon-shell":{"ingredients":["steel-plate","plastic-bar","explosives"],"products":["explosive-cannon-shell"],"category":"crafting"},"explosive-rocket":{"ingredients":["explosives","rocket"],"products":["explosive-rocket"],"category":"crafting"},"explosive-uranium-cannon-shell":{"ingredients":["uranium-238","explosive-cannon-shell"],"products":["explosive-uranium-cannon-shell"],"category":"crafting"},"explosives":{"ingredients":["coal","sulfur","water"],"products":["explosives"],"category":"chemistry"},"express-loader":{"ingredients":["express-transport-belt","fast-loader"],"products":["express-loader"],"category":"crafting"},"express-splitter":{"ingredients":["iron-gear-wheel","advanced-circuit","fast-splitter","lubricant"],"products":["express-splitter"],"category":"crafting-with-fluid"},"express-transport-belt":{"ingredients":["iron-gear-wheel","fast-transport-belt","lubricant"],"products":["express-transport-belt"],"category":"crafting-with-fluid"},"express-underground-belt":{"ingredients":["iron-gear-wheel","fast-underground-belt","lubricant"],"products":["express-underground-belt"],"category":"crafting-with-fluid"},"fast-inserter":{"ingredients":["iron-plate","electronic-circuit","inserter"],"products":["fast-inserter"],"category":"crafting"},"fast-loader":{"ingredients":["fast-transport-belt","loader"],"products":["fast-loader"],"category":"crafting"},"fast-splitter":{"ingredients":["iron-gear-wheel","electronic-circuit","splitter"],"products":["fast-splitter"],"category":"crafting"},"fast-transport-belt":{"ingredients":["iron-gear-wheel","transport-belt"],"products":["fast-transport-belt"],"category":"crafting"},"fast-underground-belt":{"ingredients":["iron-gear-wheel","underground-belt"],"products":["fast-underground-belt"],"category":"crafting"},"filter-inserter":{"ingredients":["electronic-circuit","fast-inserter"],"products":["filter-inserter"],"category":"crafting"},"firearm-magazine":{"ingredients":["iron-plate"],"products":["firearm-magazine"],"category":"crafting"},"flamethrower":{"ingredients":["steel-plate","iron-gear-wheel"],"products":["flamethrower"],"category":"crafting"},"flamethrower-ammo":{"ingredients":["steel-plate","crude-oil"],"products":["flamethrower-ammo"],"category":"chemistry"},"flamethrower-turret":{"ingredients":["steel-plate","iron-gear-wheel","engine-unit","pipe"],"products":["flamethrower-turret"],"category":"crafting"},"fluid-wagon":{"ingredients":["steel-plate","iron-gear-wheel","storage-tank","pipe"],"products":["fluid-wagon"],"category":"crafting"},"flying-robot-frame":{"ingredients":["steel-plate","battery","electronic-circuit","electric-engine-unit"],"products":["flying-robot-frame"],"category":"crafting"},"fusion-reactor-equipment":{"ingredients":["processing-unit","low-density-structure"],"products":["fusion-reactor-equipment"],"category":"crafting"},"gate":{"ingredients":["steel-plate","electronic-circuit","stone-wall"],"products":["gate"],"category":"crafting"},"green-wire":{"ingredients":["copper-cable","electronic-circuit"],"products":["green-wire"],"category":"crafting"},"grenade":{"ingredients":["coal","iron-plate"],"products":["grenade"],"category":"crafting"},"gun-turret":{"ingredients":["iron-plate","copper-plate","iron-gear-wheel"],"products":["gun-turret"],"category":"crafting"},"hazard-concrete":{"ingredients":["concrete"],"products":["hazard-concrete"],"category":"crafting"},"heat-exchanger":{"ingredients":["copper-plate","steel-plate","pipe"],"products":["heat-exchanger"],"category":"crafting"},"heat-pipe":{"ingredients":["copper-plate","steel-plate"],"products":["heat-pipe"],"category":"crafting"},"heavy-armor":{"ingredients":["copper-plate","steel-plate"],"products":["heavy-armor"],"category":"crafting"},"inserter":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit"],"products":["inserter"],"category":"crafting"},"iron-chest":{"ingredients":["iron-plate"],"products":["iron-chest"],"category":"crafting"},"iron-gear-wheel":{"ingredients":["iron-plate"],"products":["iron-gear-wheel"],"category":"crafting"},"iron-plate":{"ingredients":["iron-ore"],"products":["iron-plate"],"category":"smelting"},"iron-stick":{"ingredients":["iron-plate"],"products":["iron-stick"],"category":"crafting"},"lab":{"ingredients":["iron-gear-wheel","electronic-circuit","transport-belt"],"products":["lab"],"category":"crafting"},"land-mine":{"ingredients":["steel-plate","explosives"],"products":["land-mine"],"category":"crafting"},"landfill":{"ingredients":["stone"],"products":["landfill"],"category":"crafting"},"laser-turret":{"ingredients":["steel-plate","battery","electronic-circuit"],"products":["laser-turret"],"category":"crafting"},"light-armor":{"ingredients":["iron-plate"],"products":["light-armor"],"category":"crafting"},"loader":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit","transport-belt","inserter"],"products":["loader"],"category":"crafting"},"locomotive":{"ingredients":["steel-plate","electronic-circuit","engine-unit"],"products":["locomotive"],"category":"crafting"},"logistic-chest-active-provider":{"ingredients":["electronic-circuit","advanced-circuit","steel-chest"],"products":["logistic-chest-active-provider"],"category":"crafting"},"logistic-chest-buffer":{"ingredients":["electronic-circuit","advanced-circuit","steel-chest"],"products":["logistic-chest-buffer"],"category":"crafting"},"logistic-chest-passive-provider":{"ingredients":["electronic-circuit","advanced-circuit","steel-chest"],"products":["logistic-chest-passive-provider"],"category":"crafting"},"logistic-chest-requester":{"ingredients":["electronic-circuit","advanced-circuit","steel-chest"],"products":["logistic-chest-requester"],"category":"crafting"},"logistic-chest-storage":{"ingredients":["electronic-circuit","advanced-circuit","steel-chest"],"products":["logistic-chest-storage"],"category":"crafting"},"logistic-robot":{"ingredients":["advanced-circuit","flying-robot-frame"],"products":["logistic-robot"],"category":"crafting"},"logistic-science-pack":{"ingredients":["transport-belt","inserter"],"products":["logistic-science-pack"],"category":"crafting"},"long-handed-inserter":{"ingredients":["iron-plate","iron-gear-wheel","inserter"],"products":["long-handed-inserter"],"category":"crafting"},"low-density-structure":{"ingredients":["copper-plate","steel-plate","plastic-bar"],"products":["low-density-structure"],"category":"crafting"},"lubricant":{"ingredients":["heavy-oil"],"products":["lubricant"],"category":"chemistry"},"medium-electric-pole":{"ingredients":["copper-plate","steel-plate","iron-stick"],"products":["medium-electric-pole"],"category":"crafting"},"military-science-pack":{"ingredients":["piercing-rounds-magazine","grenade","stone-wall"],"products":["military-science-pack"],"category":"crafting"},"modular-armor":{"ingredients":["steel-plate","advanced-circuit"],"products":["modular-armor"],"category":"crafting"},"night-vision-equipment":{"ingredients":["steel-plate","advanced-circuit"],"products":["night-vision-equipment"],"category":"crafting"},"nuclear-fuel":{"ingredients":["rocket-fuel","uranium-235"],"products":["nuclear-fuel"],"category":"centrifuging"},"nuclear-reactor":{"ingredients":["copper-plate","steel-plate","advanced-circuit","concrete"],"products":["nuclear-reactor"],"category":"crafting"},"offshore-pump":{"ingredients":["iron-gear-wheel","electronic-circuit","pipe"],"products":["offshore-pump"],"category":"crafting"},"oil-refinery":{"ingredients":["steel-plate","iron-gear-wheel","electronic-circuit","pipe","stone-brick"],"products":["oil-refinery"],"category":"crafting"},"personal-laser-defense-equipment":{"ingredients":["processing-unit","low-density-structure","laser-turret"],"products":["personal-laser-defense-equipment"],"category":"crafting"},"personal-roboport-equipment":{"ingredients":["steel-plate","battery","iron-gear-wheel","advanced-circuit"],"products":["personal-roboport-equipment"],"category":"crafting"},"personal-roboport-mk2-equipment":{"ingredients":["processing-unit","low-density-structure","personal-roboport-equipment"],"products":["personal-roboport-mk2-equipment"],"category":"crafting"},"piercing-rounds-magazine":{"ingredients":["copper-plate","steel-plate","firearm-magazine"],"products":["piercing-rounds-magazine"],"category":"crafting"},"piercing-shotgun-shell":{"ingredients":["copper-plate","steel-plate","shotgun-shell"],"products":["piercing-shotgun-shell"],"category":"crafting"},"pipe":{"ingredients":["iron-plate"],"products":["pipe"],"category":"crafting"},"pipe-to-ground":{"ingredients":["iron-plate","pipe"],"products":["pipe-to-ground"],"category":"crafting"},"pistol":{"ingredients":["iron-plate","copper-plate"],"products":["pistol"],"category":"crafting"},"plastic-bar":{"ingredients":["coal","petroleum-gas"],"products":["plastic-bar"],"category":"chemistry"},"poison-capsule":{"ingredients":["coal","steel-plate","electronic-circuit"],"products":["poison-capsule"],"category":"crafting"},"power-armor":{"ingredients":["steel-plate","processing-unit","electric-engine-unit"],"products":["power-armor"],"category":"crafting"},"power-armor-mk2":{"ingredients":["processing-unit","electric-engine-unit","low-density-structure","speed-module-2","effectivity-module-2"],"products":["power-armor-mk2"],"category":"crafting"},"power-switch":{"ingredients":["iron-plate","copper-cable","electronic-circuit"],"products":["power-switch"],"category":"crafting"},"processing-unit":{"ingredients":["electronic-circuit","advanced-circuit","sulfuric-acid"],"products":["processing-unit"],"category":"crafting-with-fluid"},"production-science-pack":{"ingredients":["rail","electric-furnace","productivity-module"],"products":["production-science-pack"],"category":"crafting"},"productivity-module":{"ingredients":["electronic-circuit","advanced-circuit"],"products":["productivity-module"],"category":"crafting"},"productivity-module-2":{"ingredients":["advanced-circuit","processing-unit","productivity-module"],"products":["productivity-module-2"],"category":"crafting"},"productivity-module-3":{"ingredients":["advanced-circuit","processing-unit","productivity-module-2"],"products":["productivity-module-3"],"category":"crafting"},"programmable-speaker":{"ingredients":["iron-plate","copper-cable","iron-stick","electronic-circuit"],"products":["programmable-speaker"],"category":"crafting"},"pump":{"ingredients":["steel-plate","engine-unit","pipe"],"products":["pump"],"category":"crafting"},"pumpjack":{"ingredients":["steel-plate","iron-gear-wheel","electronic-circuit","pipe"],"products":["pumpjack"],"category":"crafting"},"radar":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit"],"products":["radar"],"category":"crafting"},"rail":{"ingredients":["stone","steel-plate","iron-stick"],"products":["rail"],"category":"crafting"},"rail-chain-signal":{"ingredients":["iron-plate","electronic-circuit"],"products":["rail-chain-signal"],"category":"crafting"},"rail-signal":{"ingredients":["iron-plate","electronic-circuit"],"products":["rail-signal"],"category":"crafting"},"red-wire":{"ingredients":["copper-cable","electronic-circuit"],"products":["red-wire"],"category":"crafting"},"refined-concrete":{"ingredients":["steel-plate","iron-stick","concrete","water"],"products":["refined-concrete"],"category":"crafting-with-fluid"},"refined-hazard-concrete":{"ingredients":["refined-concrete"],"products":["refined-hazard-concrete"],"category":"crafting"},"repair-pack":{"ingredients":["iron-gear-wheel","electronic-circuit"],"products":["repair-pack"],"category":"crafting"},"roboport":{"ingredients":["steel-plate","iron-gear-wheel","advanced-circuit"],"products":["roboport"],"category":"crafting"},"rocket":{"ingredients":["iron-plate","explosives","electronic-circuit"],"products":["rocket"],"category":"crafting"},"rocket-control-unit":{"ingredients":["processing-unit","speed-module"],"products":["rocket-control-unit"],"category":"crafting"},"rocket-fuel":{"ingredients":["solid-fuel","light-oil"],"products":["rocket-fuel"],"category":"crafting-with-fluid"},"rocket-launcher":{"ingredients":["iron-plate","iron-gear-wheel","electronic-circuit"],"products":["rocket-launcher"],"category":"crafting"},"rocket-part":{"ingredients":["rocket-control-unit","low-density-structure","rocket-fuel"],"products":["rocket-part"],"category":"rocket-building"},"rocket-silo":{"ingredients":["steel-plate","processing-unit","electric-engine-unit","pipe","concrete"],"products":["rocket-silo"],"category":"crafting"},"satellite":{"ingredients":["processing-unit","low-density-structure","rocket-fuel","solar-panel","accumulator","radar"],"products":["satellite"],"category":"crafting"},"shotgun":{"ingredients":["wood","iron-plate","copper-plate","iron-gear-wheel"],"products":["shotgun"],"category":"crafting"},"shotgun-shell":{"ingredients":["iron-plate","copper-plate"],"products":["shotgun-shell"],"category":"crafting"},"slowdown-capsule":{"ingredients":["coal","steel-plate","electronic-circuit"],"products":["slowdown-capsule"],"category":"crafting"},"small-electric-pole":{"ingredients":["wood","copper-cable"],"products":["small-electric-pole"],"category":"crafting"},"small-lamp":{"ingredients":["iron-plate","copper-cable","electronic-circuit"],"products":["small-lamp"],"category":"crafting"},"solar-panel":{"ingredients":["copper-plate","steel-plate","electronic-circuit"],"products":["solar-panel"],"category":"crafting"},"solar-panel-equipment":{"ingredients":["steel-plate","advanced-circuit","solar-panel"],"products":["solar-panel-equipment"],"category":"crafting"},"speed-module":{"ingredients":["electronic-circuit","advanced-circuit"],"products":["speed-module"],"category":"crafting"},"speed-module-2":{"ingredients":["advanced-circuit","processing-unit","speed-module"],"products":["speed-module-2"],"category":"crafting"},"speed-module-3":{"ingredients":["advanced-circuit","processing-unit","speed-module-2"],"products":["speed-module-3"],"category":"crafting"},"spidertron":{"ingredients":["raw-fish","rocket-control-unit","low-density-structure","effectivity-module-3","rocket-launcher","fusion-reactor-equipment","exoskeleton-equipment","radar"],"products":["spidertron"],"category":"crafting"},"spidertron-remote":{"ingredients":["rocket-control-unit","radar"],"products":["spidertron-remote"],"category":"crafting"},"splitter":{"ingredients":["iron-plate","electronic-circuit","transport-belt"],"products":["splitter"],"category":"crafting"},"stack-filter-inserter":{"ingredients":["electronic-circuit","stack-inserter"],"products":["stack-filter-inserter"],"category":"crafting"},"stack-inserter":{"ingredients":["iron-gear-wheel","electronic-circuit","advanced-circuit","fast-inserter"],"products":["stack-inserter"],"category":"crafting"},"steam-engine":{"ingredients":["iron-plate","iron-gear-wheel","pipe"],"products":["steam-engine"],"category":"crafting"},"steam-turbine":{"ingredients":["copper-plate","iron-gear-wheel","pipe"],"products":["steam-turbine"],"category":"crafting"},"steel-chest":{"ingredients":["steel-plate"],"products":["steel-chest"],"category":"crafting"},"steel-furnace":{"ingredients":["steel-plate","stone-brick"],"products":["steel-furnace"],"category":"crafting"},"steel-plate":{"ingredients":["iron-plate"],"products":["steel-plate"],"category":"smelting"},"stone-brick":{"ingredients":["stone"],"products":["stone-brick"],"category":"smelting"},"stone-furnace":{"ingredients":["stone"],"products":["stone-furnace"],"category":"crafting"},"stone-wall":{"ingredients":["stone-brick"],"products":["stone-wall"],"category":"crafting"},"storage-tank":{"ingredients":["iron-plate","steel-plate"],"products":["storage-tank"],"category":"crafting"},"submachine-gun":{"ingredients":["iron-plate","copper-plate","iron-gear-wheel"],"products":["submachine-gun"],"category":"crafting"},"substation":{"ingredients":["copper-plate","steel-plate","advanced-circuit"],"products":["substation"],"category":"crafting"},"sulfur":{"ingredients":["water","petroleum-gas"],"products":["sulfur"],"category":"chemistry"},"sulfuric-acid":{"ingredients":["iron-plate","sulfur","water"],"products":["sulfuric-acid"],"category":"chemistry"},"tank":{"ingredients":["steel-plate","iron-gear-wheel","advanced-circuit","engine-unit"],"products":["tank"],"category":"crafting"},"train-stop":{"ingredients":["iron-plate","steel-plate","iron-stick","electronic-circuit"],"products":["train-stop"],"category":"crafting"},"transport-belt":{"ingredients":["iron-plate","iron-gear-wheel"],"products":["transport-belt"],"category":"crafting"},"underground-belt":{"ingredients":["iron-plate","transport-belt"],"products":["underground-belt"],"category":"crafting"},"uranium-cannon-shell":{"ingredients":["uranium-238","cannon-shell"],"products":["uranium-cannon-shell"],"category":"crafting"},"uranium-fuel-cell":{"ingredients":["iron-plate","uranium-235","uranium-238"],"products":["uranium-fuel-cell"],"category":"crafting"},"uranium-rounds-magazine":{"ingredients":["uranium-238","piercing-rounds-magazine"],"products":["uranium-rounds-magazine"],"category":"crafting"},"utility-science-pack":{"ingredients":["processing-unit","flying-robot-frame","low-density-structure"],"products":["utility-science-pack"],"category":"crafting"},"wooden-chest":{"ingredients":["wood"],"products":["wooden-chest"],"category":"crafting"},"basic-oil-processing":{"ingredients":["crude-oil"],"products":["petroleum-gas"],"category":"oil-processing"},"advanced-oil-processing":{"ingredients":["water","crude-oil"],"products":["heavy-oil","light-oil","petroleum-gas"],"category":"oil-processing"},"coal-liquefaction":{"ingredients":["coal","heavy-oil","steam"],"products":["heavy-oil","light-oil","petroleum-gas"],"category":"oil-processing"},"fill-crude-oil-barrel":{"ingredients":["empty-barrel","crude-oil"],"products":["crude-oil-barrel"],"category":"crafting-with-fluid"},"fill-heavy-oil-barrel":{"ingredients":["empty-barrel","heavy-oil"],"products":["heavy-oil-barrel"],"category":"crafting-with-fluid"},"fill-light-oil-barrel":{"ingredients":["empty-barrel","light-oil"],"products":["light-oil-barrel"],"category":"crafting-with-fluid"},"fill-lubricant-barrel":{"ingredients":["empty-barrel","lubricant"],"products":["lubricant-barrel"],"category":"crafting-with-fluid"},"fill-petroleum-gas-barrel":{"ingredients":["empty-barrel","petroleum-gas"],"products":["petroleum-gas-barrel"],"category":"crafting-with-fluid"},"fill-sulfuric-acid-barrel":{"ingredients":["empty-barrel","sulfuric-acid"],"products":["sulfuric-acid-barrel"],"category":"crafting-with-fluid"},"fill-water-barrel":{"ingredients":["empty-barrel","water"],"products":["water-barrel"],"category":"crafting-with-fluid"},"heavy-oil-cracking":{"ingredients":["water","heavy-oil"],"products":["light-oil"],"category":"chemistry"},"light-oil-cracking":{"ingredients":["water","light-oil"],"products":["petroleum-gas"],"category":"chemistry"},"solid-fuel-from-light-oil":{"ingredients":["light-oil"],"products":["solid-fuel"],"category":"chemistry"},"solid-fuel-from-petroleum-gas":{"ingredients":["petroleum-gas"],"products":["solid-fuel"],"category":"chemistry"},"solid-fuel-from-heavy-oil":{"ingredients":["heavy-oil"],"products":["solid-fuel"],"category":"chemistry"},"empty-crude-oil-barrel":{"ingredients":["crude-oil-barrel"],"products":["empty-barrel","crude-oil"],"category":"crafting-with-fluid"},"empty-heavy-oil-barrel":{"ingredients":["heavy-oil-barrel"],"products":["empty-barrel","heavy-oil"],"category":"crafting-with-fluid"},"empty-light-oil-barrel":{"ingredients":["light-oil-barrel"],"products":["empty-barrel","light-oil"],"category":"crafting-with-fluid"},"empty-lubricant-barrel":{"ingredients":["lubricant-barrel"],"products":["empty-barrel","lubricant"],"category":"crafting-with-fluid"},"empty-petroleum-gas-barrel":{"ingredients":["petroleum-gas-barrel"],"products":["empty-barrel","petroleum-gas"],"category":"crafting-with-fluid"},"empty-sulfuric-acid-barrel":{"ingredients":["sulfuric-acid-barrel"],"products":["empty-barrel","sulfuric-acid"],"category":"crafting-with-fluid"},"empty-water-barrel":{"ingredients":["water-barrel"],"products":["empty-barrel","water"],"category":"crafting-with-fluid"},"uranium-processing":{"ingredients":["uranium-ore"],"products":["uranium-235","uranium-238"],"category":"centrifuging"},"nuclear-fuel-reprocessing":{"ingredients":["used-up-uranium-fuel-cell"],"products":["uranium-238"],"category":"centrifuging"},"kovarex-enrichment-process":{"ingredients":["uranium-235","uranium-238"],"products":["uranium-235","uranium-238"],"category":"centrifuging"}} \ No newline at end of file diff --git a/data/factorio/techs.json b/data/factorio/techs.json new file mode 100644 index 00000000..9110b732 --- /dev/null +++ b/data/factorio/techs.json @@ -0,0 +1 @@ +{"automation":{"unlocks":["assembling-machine-1","long-handed-inserter"],"requires":{},"ingredients":["automation-science-pack"]},"automation-2":{"unlocks":["assembling-machine-2"],"requires":["electronics","steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"automation-3":{"unlocks":["assembling-machine-3"],"requires":["speed-module","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"electronics":{"unlocks":{},"requires":["automation"],"ingredients":["automation-science-pack"]},"fast-inserter":{"unlocks":["fast-inserter","filter-inserter"],"requires":["electronics"],"ingredients":["automation-science-pack"]},"advanced-electronics":{"unlocks":["advanced-circuit"],"requires":["plastics"],"ingredients":["automation-science-pack","logistic-science-pack"]},"advanced-electronics-2":{"unlocks":["processing-unit"],"requires":["chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"circuit-network":{"unlocks":["red-wire","green-wire","arithmetic-combinator","decider-combinator","constant-combinator","power-switch","programmable-speaker"],"requires":["electronics","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"explosives":{"unlocks":["explosives"],"requires":["sulfur-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"logistics":{"unlocks":["underground-belt","splitter"],"requires":{},"ingredients":["automation-science-pack"]},"logistics-2":{"unlocks":["fast-transport-belt","fast-underground-belt","fast-splitter"],"requires":["logistics","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"logistics-3":{"unlocks":["express-transport-belt","express-underground-belt","express-splitter"],"requires":["production-science-pack","lubricant"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"optics":{"unlocks":["small-lamp"],"requires":{},"ingredients":["automation-science-pack"]},"laser":{"unlocks":{},"requires":["optics","battery","chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"solar-energy":{"unlocks":["solar-panel"],"requires":["optics","electronics","steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"gun-turret":{"unlocks":["gun-turret"],"requires":{},"ingredients":["automation-science-pack"]},"laser-turret":{"unlocks":["laser-turret"],"requires":["laser","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"stone-wall":{"unlocks":["stone-wall"],"requires":{},"ingredients":["automation-science-pack"]},"gate":{"unlocks":["gate"],"requires":["stone-wall","military-2"],"ingredients":["automation-science-pack","logistic-science-pack"]},"engine":{"unlocks":["engine-unit"],"requires":["steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"electric-engine":{"unlocks":["electric-engine-unit"],"requires":["lubricant"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"lubricant":{"unlocks":["lubricant"],"requires":["advanced-oil-processing"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"battery":{"unlocks":["battery"],"requires":["sulfur-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"landfill":{"unlocks":["landfill"],"requires":["logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"braking-force-1":{"unlocks":{},"requires":["railway","chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"braking-force-2":{"unlocks":{},"requires":["braking-force-1"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"braking-force-3":{"unlocks":{},"requires":["braking-force-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"braking-force-4":{"unlocks":{},"requires":["braking-force-3"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"braking-force-5":{"unlocks":{},"requires":["braking-force-4"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"braking-force-6":{"unlocks":{},"requires":["braking-force-5"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"braking-force-7":{"unlocks":{},"requires":["braking-force-6"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"chemical-science-pack":{"unlocks":["chemical-science-pack"],"requires":["advanced-electronics","sulfur-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"logistic-science-pack":{"unlocks":["logistic-science-pack"],"requires":{},"ingredients":["automation-science-pack"]},"military-science-pack":{"unlocks":["military-science-pack"],"requires":["military-2","stone-wall"],"ingredients":["automation-science-pack","logistic-science-pack"]},"production-science-pack":{"unlocks":["production-science-pack"],"requires":["productivity-module","advanced-material-processing-2","railway"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"space-science-pack":{"unlocks":["satellite"],"requires":["rocket-silo","electric-energy-accumulators","solar-energy"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"steel-processing":{"unlocks":["steel-plate","steel-chest"],"requires":{},"ingredients":["automation-science-pack"]},"utility-science-pack":{"unlocks":["utility-science-pack"],"requires":["robotics","advanced-electronics-2","low-density-structure"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"advanced-material-processing":{"unlocks":["steel-furnace"],"requires":["steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"steel-axe":{"unlocks":{},"requires":["steel-processing"],"ingredients":["automation-science-pack"]},"advanced-material-processing-2":{"unlocks":["electric-furnace"],"requires":["advanced-material-processing","chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"concrete":{"unlocks":["concrete","hazard-concrete","refined-concrete","refined-hazard-concrete"],"requires":["advanced-material-processing","automation-2"],"ingredients":["automation-science-pack","logistic-science-pack"]},"electric-energy-accumulators":{"unlocks":["accumulator"],"requires":["electric-energy-distribution-1","battery"],"ingredients":["automation-science-pack","logistic-science-pack"]},"electric-energy-distribution-1":{"unlocks":["medium-electric-pole","big-electric-pole"],"requires":["electronics","steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"electric-energy-distribution-2":{"unlocks":["substation"],"requires":["electric-energy-distribution-1","chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"railway":{"unlocks":["rail","locomotive","cargo-wagon"],"requires":["logistics-2","engine"],"ingredients":["automation-science-pack","logistic-science-pack"]},"fluid-wagon":{"unlocks":["fluid-wagon"],"requires":["railway","fluid-handling"],"ingredients":["automation-science-pack","logistic-science-pack"]},"automated-rail-transportation":{"unlocks":["train-stop"],"requires":["railway"],"ingredients":["automation-science-pack","logistic-science-pack"]},"rail-signals":{"unlocks":["rail-signal","rail-chain-signal"],"requires":["automated-rail-transportation"],"ingredients":["automation-science-pack","logistic-science-pack"]},"robotics":{"unlocks":["flying-robot-frame"],"requires":["electric-engine","battery"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"construction-robotics":{"unlocks":["roboport","logistic-chest-passive-provider","logistic-chest-storage","construction-robot"],"requires":["robotics"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"logistic-robotics":{"unlocks":["roboport","logistic-chest-passive-provider","logistic-chest-storage","logistic-robot"],"requires":["robotics"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"logistic-system":{"unlocks":["logistic-chest-active-provider","logistic-chest-requester","logistic-chest-buffer"],"requires":["utility-science-pack","logistic-robotics"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","utility-science-pack"]},"personal-roboport-equipment":{"unlocks":["personal-roboport-equipment"],"requires":["construction-robotics","solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"personal-roboport-mk2-equipment":{"unlocks":["personal-roboport-mk2-equipment"],"requires":["personal-roboport-equipment","utility-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","utility-science-pack"]},"worker-robots-speed-1":{"unlocks":{},"requires":["robotics"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"worker-robots-speed-2":{"unlocks":{},"requires":["worker-robots-speed-1"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"worker-robots-speed-3":{"unlocks":{},"requires":["worker-robots-speed-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","utility-science-pack"]},"worker-robots-speed-4":{"unlocks":{},"requires":["worker-robots-speed-3"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","utility-science-pack"]},"mining-productivity-1":{"unlocks":{},"requires":["advanced-electronics"],"ingredients":["automation-science-pack","logistic-science-pack"]},"mining-productivity-2":{"unlocks":{},"requires":["mining-productivity-1"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"mining-productivity-3":{"unlocks":{},"requires":["mining-productivity-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"mining-productivity-4":{"unlocks":{},"requires":["mining-productivity-3","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack","space-science-pack"]},"worker-robots-speed-5":{"unlocks":{},"requires":["worker-robots-speed-4"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"worker-robots-speed-6":{"unlocks":{},"requires":["worker-robots-speed-5","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack","space-science-pack"]},"worker-robots-storage-1":{"unlocks":{},"requires":["robotics"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"worker-robots-storage-2":{"unlocks":{},"requires":["worker-robots-storage-1"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"worker-robots-storage-3":{"unlocks":{},"requires":["worker-robots-storage-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"toolbelt":{"unlocks":{},"requires":["logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"research-speed-1":{"unlocks":{},"requires":["automation-2"],"ingredients":["automation-science-pack","logistic-science-pack"]},"research-speed-2":{"unlocks":{},"requires":["research-speed-1"],"ingredients":["automation-science-pack","logistic-science-pack"]},"research-speed-3":{"unlocks":{},"requires":["research-speed-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"research-speed-4":{"unlocks":{},"requires":["research-speed-3"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"research-speed-5":{"unlocks":{},"requires":["research-speed-4"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"research-speed-6":{"unlocks":{},"requires":["research-speed-5"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"stack-inserter":{"unlocks":["stack-inserter","stack-filter-inserter"],"requires":["fast-inserter","logistics-2","advanced-electronics"],"ingredients":["automation-science-pack","logistic-science-pack"]},"inserter-capacity-bonus-1":{"unlocks":{},"requires":["stack-inserter"],"ingredients":["automation-science-pack","logistic-science-pack"]},"inserter-capacity-bonus-2":{"unlocks":{},"requires":["inserter-capacity-bonus-1"],"ingredients":["automation-science-pack","logistic-science-pack"]},"inserter-capacity-bonus-3":{"unlocks":{},"requires":["inserter-capacity-bonus-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"inserter-capacity-bonus-4":{"unlocks":{},"requires":["inserter-capacity-bonus-3"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"inserter-capacity-bonus-5":{"unlocks":{},"requires":["inserter-capacity-bonus-4"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"inserter-capacity-bonus-6":{"unlocks":{},"requires":["inserter-capacity-bonus-5"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"inserter-capacity-bonus-7":{"unlocks":{},"requires":["inserter-capacity-bonus-6"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"oil-processing":{"unlocks":["pumpjack","oil-refinery","chemical-plant","basic-oil-processing","solid-fuel-from-petroleum-gas"],"requires":["fluid-handling"],"ingredients":["automation-science-pack","logistic-science-pack"]},"fluid-handling":{"unlocks":["storage-tank","pump","empty-barrel","fill-water-barrel","empty-water-barrel","fill-sulfuric-acid-barrel","empty-sulfuric-acid-barrel","fill-crude-oil-barrel","empty-crude-oil-barrel","fill-heavy-oil-barrel","empty-heavy-oil-barrel","fill-light-oil-barrel","empty-light-oil-barrel","fill-petroleum-gas-barrel","empty-petroleum-gas-barrel","fill-lubricant-barrel","empty-lubricant-barrel"],"requires":["automation-2","engine"],"ingredients":["automation-science-pack","logistic-science-pack"]},"advanced-oil-processing":{"unlocks":["advanced-oil-processing","heavy-oil-cracking","light-oil-cracking","solid-fuel-from-heavy-oil","solid-fuel-from-light-oil"],"requires":["chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"coal-liquefaction":{"unlocks":["coal-liquefaction"],"requires":["advanced-oil-processing","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"sulfur-processing":{"unlocks":["sulfuric-acid","sulfur"],"requires":["oil-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"plastics":{"unlocks":["plastic-bar"],"requires":["oil-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"artillery":{"unlocks":["artillery-wagon","artillery-turret","artillery-shell","artillery-targeting-remote"],"requires":["military-4","tank"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"spidertron":{"unlocks":["spidertron","spidertron-remote"],"requires":["military-4","exoskeleton-equipment","fusion-reactor-equipment","rocketry","rocket-control-unit","effectivity-module-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"military":{"unlocks":["submachine-gun","shotgun","shotgun-shell"],"requires":{},"ingredients":["automation-science-pack"]},"atomic-bomb":{"unlocks":["atomic-bomb"],"requires":["military-4","kovarex-enrichment-process","rocket-control-unit","rocketry"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"military-2":{"unlocks":["piercing-rounds-magazine","grenade"],"requires":["military","steel-processing","logistic-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack"]},"uranium-ammo":{"unlocks":["uranium-rounds-magazine","uranium-cannon-shell","explosive-uranium-cannon-shell"],"requires":["uranium-processing","military-4","tank"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"military-3":{"unlocks":["poison-capsule","slowdown-capsule","combat-shotgun"],"requires":["chemical-science-pack","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"military-4":{"unlocks":["piercing-shotgun-shell","cluster-grenade"],"requires":["military-3","utility-science-pack","explosives"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"automobilism":{"unlocks":["car"],"requires":["logistics-2","engine"],"ingredients":["automation-science-pack","logistic-science-pack"]},"flammables":{"unlocks":{},"requires":["oil-processing"],"ingredients":["automation-science-pack","logistic-science-pack"]},"flamethrower":{"unlocks":["flamethrower","flamethrower-ammo","flamethrower-turret"],"requires":["flammables","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"tank":{"unlocks":["tank","cannon-shell","explosive-cannon-shell"],"requires":["automobilism","military-3","explosives"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"land-mine":{"unlocks":["land-mine"],"requires":["explosives","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"rocketry":{"unlocks":["rocket-launcher","rocket"],"requires":["explosives","flammables","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"explosive-rocketry":{"unlocks":["explosive-rocket"],"requires":["rocketry","military-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"energy-weapons-damage-1":{"unlocks":{},"requires":["laser","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"refined-flammables-1":{"unlocks":{},"requires":["flamethrower"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"stronger-explosives-1":{"unlocks":{},"requires":["military-2"],"ingredients":["automation-science-pack","logistic-science-pack"]},"weapon-shooting-speed-1":{"unlocks":{},"requires":["military"],"ingredients":["automation-science-pack"]},"artillery-shell-range-1":{"unlocks":{},"requires":["artillery","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"artillery-shell-speed-1":{"unlocks":{},"requires":["artillery","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"physical-projectile-damage-1":{"unlocks":{},"requires":["military"],"ingredients":["automation-science-pack"]},"energy-weapons-damage-2":{"unlocks":{},"requires":["energy-weapons-damage-1"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"physical-projectile-damage-2":{"unlocks":{},"requires":["physical-projectile-damage-1"],"ingredients":["automation-science-pack","logistic-science-pack"]},"refined-flammables-2":{"unlocks":{},"requires":["refined-flammables-1"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"stronger-explosives-2":{"unlocks":{},"requires":["stronger-explosives-1"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"weapon-shooting-speed-2":{"unlocks":{},"requires":["weapon-shooting-speed-1"],"ingredients":["automation-science-pack","logistic-science-pack"]},"energy-weapons-damage-3":{"unlocks":{},"requires":["energy-weapons-damage-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"physical-projectile-damage-3":{"unlocks":{},"requires":["physical-projectile-damage-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"refined-flammables-3":{"unlocks":{},"requires":["refined-flammables-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"stronger-explosives-3":{"unlocks":{},"requires":["stronger-explosives-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"weapon-shooting-speed-3":{"unlocks":{},"requires":["weapon-shooting-speed-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"energy-weapons-damage-4":{"unlocks":{},"requires":["energy-weapons-damage-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"physical-projectile-damage-4":{"unlocks":{},"requires":["physical-projectile-damage-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"refined-flammables-4":{"unlocks":{},"requires":["refined-flammables-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"stronger-explosives-4":{"unlocks":{},"requires":["stronger-explosives-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"weapon-shooting-speed-4":{"unlocks":{},"requires":["weapon-shooting-speed-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"energy-weapons-damage-5":{"unlocks":{},"requires":["energy-weapons-damage-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"physical-projectile-damage-5":{"unlocks":{},"requires":["physical-projectile-damage-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"refined-flammables-5":{"unlocks":{},"requires":["refined-flammables-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"stronger-explosives-5":{"unlocks":{},"requires":["stronger-explosives-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"weapon-shooting-speed-5":{"unlocks":{},"requires":["weapon-shooting-speed-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"energy-weapons-damage-6":{"unlocks":{},"requires":["energy-weapons-damage-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"energy-weapons-damage-7":{"unlocks":{},"requires":["energy-weapons-damage-6","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"physical-projectile-damage-6":{"unlocks":{},"requires":["physical-projectile-damage-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"physical-projectile-damage-7":{"unlocks":{},"requires":["physical-projectile-damage-6","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"refined-flammables-6":{"unlocks":{},"requires":["refined-flammables-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"refined-flammables-7":{"unlocks":{},"requires":["refined-flammables-6","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"stronger-explosives-6":{"unlocks":{},"requires":["stronger-explosives-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"stronger-explosives-7":{"unlocks":{},"requires":["stronger-explosives-6","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack","space-science-pack"]},"weapon-shooting-speed-6":{"unlocks":{},"requires":["weapon-shooting-speed-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"laser-shooting-speed-1":{"unlocks":{},"requires":["laser","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"laser-shooting-speed-2":{"unlocks":{},"requires":["laser-shooting-speed-1"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"laser-shooting-speed-3":{"unlocks":{},"requires":["laser-shooting-speed-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"laser-shooting-speed-4":{"unlocks":{},"requires":["laser-shooting-speed-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"laser-shooting-speed-5":{"unlocks":{},"requires":["laser-shooting-speed-4"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"laser-shooting-speed-6":{"unlocks":{},"requires":["laser-shooting-speed-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"laser-shooting-speed-7":{"unlocks":{},"requires":["laser-shooting-speed-6"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"defender":{"unlocks":["defender-capsule"],"requires":["military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"distractor":{"unlocks":["distractor-capsule"],"requires":["defender","military-3","laser"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"destroyer":{"unlocks":["destroyer-capsule"],"requires":["military-4","distractor","speed-module"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"follower-robot-count-1":{"unlocks":{},"requires":["defender"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"follower-robot-count-2":{"unlocks":{},"requires":["follower-robot-count-1"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"follower-robot-count-3":{"unlocks":{},"requires":["follower-robot-count-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"follower-robot-count-4":{"unlocks":{},"requires":["follower-robot-count-3"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"follower-robot-count-5":{"unlocks":{},"requires":["follower-robot-count-4","destroyer"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"follower-robot-count-6":{"unlocks":{},"requires":["follower-robot-count-5"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"follower-robot-count-7":{"unlocks":{},"requires":["follower-robot-count-6","space-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","production-science-pack","utility-science-pack","space-science-pack"]},"kovarex-enrichment-process":{"unlocks":["kovarex-enrichment-process","nuclear-fuel"],"requires":["production-science-pack","uranium-processing","rocket-fuel"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"nuclear-fuel-reprocessing":{"unlocks":["nuclear-fuel-reprocessing"],"requires":["nuclear-power","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"nuclear-power":{"unlocks":["nuclear-reactor","heat-exchanger","heat-pipe","steam-turbine"],"requires":["uranium-processing"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"uranium-processing":{"unlocks":["centrifuge","uranium-processing","uranium-fuel-cell"],"requires":["chemical-science-pack","concrete"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"heavy-armor":{"unlocks":["heavy-armor"],"requires":["military","steel-processing"],"ingredients":["automation-science-pack"]},"modular-armor":{"unlocks":["modular-armor"],"requires":["heavy-armor","advanced-electronics"],"ingredients":["automation-science-pack","logistic-science-pack"]},"power-armor":{"unlocks":["power-armor"],"requires":["modular-armor","electric-engine","advanced-electronics-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"power-armor-mk2":{"unlocks":["power-armor-mk2"],"requires":["power-armor","military-4","speed-module-2","effectivity-module-2"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"energy-shield-equipment":{"unlocks":["energy-shield-equipment"],"requires":["solar-panel-equipment","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack"]},"energy-shield-mk2-equipment":{"unlocks":["energy-shield-mk2-equipment"],"requires":["energy-shield-equipment","military-3","low-density-structure","power-armor"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"night-vision-equipment":{"unlocks":["night-vision-equipment"],"requires":["solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack"]},"belt-immunity-equipment":{"unlocks":["belt-immunity-equipment"],"requires":["solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack"]},"exoskeleton-equipment":{"unlocks":["exoskeleton-equipment"],"requires":["advanced-electronics-2","electric-engine","solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"battery-equipment":{"unlocks":["battery-equipment"],"requires":["battery","solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack"]},"battery-mk2-equipment":{"unlocks":["battery-mk2-equipment"],"requires":["battery-equipment","low-density-structure","power-armor"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"solar-panel-equipment":{"unlocks":["solar-panel-equipment"],"requires":["modular-armor","solar-energy"],"ingredients":["automation-science-pack","logistic-science-pack"]},"fusion-reactor-equipment":{"unlocks":["fusion-reactor-equipment"],"requires":["utility-science-pack","power-armor","military-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack","utility-science-pack"]},"personal-laser-defense-equipment":{"unlocks":["personal-laser-defense-equipment"],"requires":["laser-turret","military-3","low-density-structure","power-armor","solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"discharge-defense-equipment":{"unlocks":["discharge-defense-equipment","discharge-defense-remote"],"requires":["laser-turret","military-3","power-armor","solar-panel-equipment"],"ingredients":["automation-science-pack","logistic-science-pack","military-science-pack","chemical-science-pack"]},"modules":{"unlocks":{},"requires":["advanced-electronics"],"ingredients":["automation-science-pack","logistic-science-pack"]},"speed-module":{"unlocks":["speed-module"],"requires":["modules"],"ingredients":["automation-science-pack","logistic-science-pack"]},"speed-module-2":{"unlocks":["speed-module-2"],"requires":["speed-module","advanced-electronics-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"speed-module-3":{"unlocks":["speed-module-3"],"requires":["speed-module-2","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"productivity-module":{"unlocks":["productivity-module"],"requires":["modules"],"ingredients":["automation-science-pack","logistic-science-pack"]},"productivity-module-2":{"unlocks":["productivity-module-2"],"requires":["productivity-module","advanced-electronics-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"productivity-module-3":{"unlocks":["productivity-module-3"],"requires":["productivity-module-2","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"effectivity-module":{"unlocks":["effectivity-module"],"requires":["modules"],"ingredients":["automation-science-pack","logistic-science-pack"]},"effectivity-module-2":{"unlocks":["effectivity-module-2"],"requires":["effectivity-module","advanced-electronics-2"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"effectivity-module-3":{"unlocks":["effectivity-module-3"],"requires":["effectivity-module-2","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"effect-transmission":{"unlocks":["beacon"],"requires":["advanced-electronics-2","production-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack"]},"low-density-structure":{"unlocks":["low-density-structure"],"requires":["advanced-material-processing","chemical-science-pack"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"rocket-control-unit":{"unlocks":["rocket-control-unit"],"requires":["utility-science-pack","speed-module"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","utility-science-pack"]},"rocket-fuel":{"unlocks":["rocket-fuel"],"requires":["flammables","advanced-oil-processing"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack"]},"rocket-silo":{"unlocks":["rocket-silo","rocket-part"],"requires":["concrete","speed-module-3","productivity-module-3","rocket-fuel","rocket-control-unit"],"ingredients":["automation-science-pack","logistic-science-pack","chemical-science-pack","production-science-pack","utility-science-pack"]},"cliff-explosives":{"unlocks":["cliff-explosives"],"requires":["explosives","military-2"],"ingredients":["automation-science-pack","logistic-science-pack"]}} \ No newline at end of file diff --git a/host.yaml b/host.yaml index a635876d..eedcef02 100644 --- a/host.yaml +++ b/host.yaml @@ -1,12 +1,4 @@ general_options: - # File name of the v1.0 J rom - rom_file: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" - # Set this to your (Q)Usb2Snes location if you want the MultiClient to attempt an auto start, does nothing if not found - qusb2snes: "QUsb2Snes\\QUsb2Snes.exe" - # Set this to false to never autostart a rom (such as after patching) - # True for operating system default program - # Alternatively, a path to a program to open the .sfc file with - rom_start: true # Where to place output files output_path: "output" # Options for MultiServer @@ -104,3 +96,15 @@ multi_mystery_options: # List of options that can be plando'd. Can be combined, for example "bosses, items" # Available options: bosses, items, texts, connections plando_options: "bosses" +lttp_options: + # File name of the v1.0 J rom + rom_file: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" + # Set this to your (Q)Usb2Snes location if you want the MultiClient to attempt an auto start, does nothing if not found + qusb2snes: "QUsb2Snes\\QUsb2Snes.exe" + # Set this to false to never autostart a rom (such as after patching) + # True for operating system default program + # Alternatively, a path to a program to open the .sfc file with + rom_start: true +factorio_options: + executable: "factorio\\bin\\x64\\factorio" + script-output: "factorio\\script-output" \ No newline at end of file diff --git a/inno_setup_38.iss b/inno_setup_38.iss index 39dd7223..604d392e 100644 --- a/inno_setup_38.iss +++ b/inno_setup_38.iss @@ -6,7 +6,7 @@ [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. -AppId={{6D826EE0-49BE-4B36-BACE-09C6971CD85C}} +AppId={{918BA46A-FAB8-460C-9DFF-AE691E1C865B}} AppName={#MyAppName} AppVerName={#MyAppName} DefaultDirName={commonappdata}\{#MyAppName} diff --git a/inno_setup_39.iss b/inno_setup_39.iss index 200a9601..b6a680f6 100644 --- a/inno_setup_39.iss +++ b/inno_setup_39.iss @@ -6,7 +6,7 @@ [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. -AppId={{6D826EE0-49BE-4B36-BACE-09C6971CD85C}} +AppId={{918BA46A-FAB8-460C-9DFF-AE691E1C865B}} AppName={#MyAppName} AppVerName={#MyAppName} DefaultDirName={commonappdata}\{#MyAppName} diff --git a/playerSettings.yaml b/playerSettings.yaml index caf3a08b..456e24f2 100644 --- a/playerSettings.yaml +++ b/playerSettings.yaml @@ -21,6 +21,19 @@ description: Template Name # Used to describe your yaml. Useful if you have mult name: YourName{number} # Your name in-game. Spaces will be replaced with underscores and there is a 16 character limit #{player} will be replaced with the player's slot number. #{number} will be replaced with the counter value of the name. +game: + A Link to the Past: 1 + Hollow Knight: 1 + Factorio: 1 +# Shared Options supported by all games: +accessibility: + items: 0 # Guarantees you will be able to acquire all items, but you may not be able to access all locations + locations: 50 # Guarantees you will be able to access all locations, and therefore all items + none: 0 # Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items +progression_balancing: + on: 50 # A system to reduce BK, as in times during which you can't do anything by moving your items into an earlier access sphere to make it likely you have stuff to do + off: 0 # Turn this off if you don't mind a longer multiworld, or can glitch/sequence break around missing items. +# A Link to the Past options: ### Logic Section ### # Warning: overworld_glitches is not available and minor_glitches is only partially implemented on the door-rando version glitches_required: # Determine the logic required to complete the seed @@ -37,13 +50,6 @@ restrict_dungeon_item_on_boss: # aka ambrosia boss items on: 0 # prevents unshuffled compasses, maps and keys to be boss drops, they can still drop keysanity and other players' items off: 50 ### End of Logic Section ### -meta_ignore: # Nullify options specified in the meta.yaml file. Adding an option here guarantees it will not occur in your seed, even if the .yaml file specifies it - mode: - - inverted # Never play inverted seeds - retro: - - on # Never play retro seeds - weapons: - - swordless # Never play a swordless seed map_shuffle: # Shuffle dungeon maps into the world and other dungeons, including other players' worlds on: 0 off: 50 @@ -72,10 +78,6 @@ dungeon_counters: pickup: 50 # Show when compass is picked up default: 0 # Show when compass is picked up if the compass itself is shuffled off: 0 # Never show item count in dungeons -accessibility: - items: 0 # Guarantees you will be able to acquire all items, but you may not be able to access all locations - locations: 50 # Guarantees you will be able to access all locations, and therefore all items - none: 0 # Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items progressive: # Enable or disable progressive items (swords, shields, bow) on: 50 # All items are progressive off: 0 # No items are progressive @@ -95,8 +97,8 @@ entrance_shuffle: crossed-group-myfriends: 0 # using this method, everyone with "group-myfriends" will share the same seed goals: ganon: 50 # Climb GT, defeat Agahnim 2, and then kill Ganon - fast_ganon: 0 # Only killing Ganon is required. However, items may still be placed in GT - dungeons: 0 # Defeat the boss of all dungeons, including Agahnim's tower and GT (Aga 2) + crystals: 0 # Only killing Ganon is required. However, items may still be placed in GT + bosses: 0 # Defeat the boss of all dungeons, including Agahnim's tower and GT (Aga 2) pedestal: 0 # Pull the Triforce from the Master Sword pedestal ganon_pedestal: 0 # Pull the Master Sword pedestal, then kill Ganon triforce_hunt: 0 # Collect 20 of 30 Triforce pieces spread throughout the worlds, then turn them in to Murahadala in front of Hyrule Castle @@ -183,9 +185,6 @@ item_functionality: normal: 50 # Vanilla item functionality hard: 0 # Reduced helpfulness of items (potions less effective, can't catch faeries, cape uses double magic, byrna does not grant invulnerability, boomerangs do not stun, silvers disabled outside ganon) expert: 0 # Vastly reduces the helpfulness of items (potions barely effective, can't catch faeries, cape uses double magic, byrna does not grant invulnerability, boomerangs and hookshot do not stun, silvers disabled outside ganon) -progression_balancing: - on: 50 # A system to reduce BK, as in times during which you can't do anything by moving your items into an earlier access sphere to make it likely you have stuff to do - off: 0 # Turn this off if you don't mind a longer multiworld, or can glitch around missing items. tile_shuffle: # Randomize the tile layouts in flying tile rooms on: 0 off: 50 @@ -202,9 +201,9 @@ turtle_rock_medallion: # required medallion to open Turtle Rock front entrance ### Enemizer Section ### boss_shuffle: none: 50 # Vanilla bosses - simple: 0 # Existing bosses except Ganon and Agahnim are shuffled throughout dungeons - full: 0 # 3 bosses can occur twice - random: 0 # Any boss can appear any amount of times + basic: 0 # Existing bosses except Ganon and Agahnim are shuffled throughout dungeons + random: 0 # 3 bosses can occur twice + chaos: 0 # Any boss can appear any amount of times singularity: 0 # Picks a boss, tries to put it everywhere that works, if there's spaces remaining it picks a boss to fill those enemy_shuffle: # Randomize enemy placement on: 0 @@ -294,6 +293,14 @@ green_clock_time: # For all timer modes, the amount of time in minutes to gain o glitch_boots: on: 50 # Start with Pegasus Boots in any glitched logic mode that makes use of them off: 0 +# meta_ignore, linked_options and triggers work for any game +meta_ignore: # Nullify options specified in the meta.yaml file. Adding an option here guarantees it will not occur in your seed, even if the .yaml file specifies it + mode: + - inverted # Never play inverted seeds + retro: + - on # Never play retro seeds + weapons: + - swordless # Never play a swordless seed linked_options: - name: crosskeys options: # These overwrite earlier options if the percentage chance triggers @@ -336,7 +343,7 @@ triggers: percentage: 0 # AND has a 0 percent chance (meaning this is default disabled, just to show how it works) options: # then inserts these options swords: assured -### door rando only options ### +### door rando only options (not supported at all yet on this branch) ### door_shuffle: # Only available if the host uses the doors branch, it is ignored otherwise vanilla: 50 # Everything should be like in vanilla basic: 0 # Dungeons are shuffled within themselves diff --git a/requirements.txt b/requirements.txt index 4b8f6ca5..94f702c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,8 @@ websockets>=8.1 PyYAML>=5.4.1 fuzzywuzzy>=0.18.0 bsdiff4>=1.2.0 -prompt_toolkit>=3.0.16 +prompt_toolkit>=3.0.18 appdirs>=1.4.4 maseya-z3pr>=1.0.0rc1 xxtea>=2.0.0.post0 +factorio-rcon-py>=1.2.1 \ No newline at end of file diff --git a/setup.py b/setup.py index 4e64f703..ca4b14fc 100644 --- a/setup.py +++ b/setup.py @@ -54,12 +54,12 @@ def manifest_creation(): print("Created Manifest") -scripts = {"MultiClient.py": "ArchipelagoLttPClient", +scripts = {"LttPClient.py": "ArchipelagoLttPClient", "MultiMystery.py": "ArchipelagoMultiMystery", "MultiServer.py": "ArchipelagoServer", "gui.py": "ArchipelagoLttPCreator", "Mystery.py": "ArchipelagoMystery", - "Adjuster.py": "ArchipelagoLttPAdjuster"} + "LttPAdjuster.py": "ArchipelagoLttPAdjuster"} exes = [] diff --git a/worlds/__init__.py b/worlds/__init__.py index ec8b33ab..39080fec 100644 --- a/worlds/__init__.py +++ b/worlds/__init__.py @@ -7,20 +7,26 @@ __all__ = {"lookup_any_item_id_to_name", from .alttp.Items import lookup_id_to_name as alttp from .hk.Items import lookup_id_to_name as hk -lookup_any_item_id_to_name = {**alttp, **hk} +from .factorio import Technologies +lookup_any_item_id_to_name = {**alttp, **hk, **Technologies.lookup_id_to_name} lookup_any_item_name_to_id = {name: id for id, name in lookup_any_item_id_to_name.items()} from .alttp import Regions from .hk import Locations -lookup_any_location_id_to_name = {**Regions.lookup_id_to_name, **Locations.lookup_id_to_name} +lookup_any_location_id_to_name = {**Regions.lookup_id_to_name, **Locations.lookup_id_to_name, + **Technologies.lookup_id_to_name} lookup_any_location_name_to_id = {name: id for id, name in lookup_any_location_id_to_name.items()} + + + 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": 1} + "version": 2} @enum.unique class Games(str, enum.Enum): HK = "Hollow Knight" LTTP = "A Link to the Past" + Factorio = "Factorio" diff --git a/worlds/factorio/Mod.py b/worlds/factorio/Mod.py new file mode 100644 index 00000000..ea0f7860 --- /dev/null +++ b/worlds/factorio/Mod.py @@ -0,0 +1,58 @@ +"""Outputs a Factorio Mod to facilitate integration with Archipelago""" + +import os +from typing import Optional +import threading +import json + +import jinja2 +import Utils +import shutil +from BaseClasses import MultiWorld +from .Technologies import tech_table + +template: Optional[jinja2.Template] = None +locale_template: Optional[jinja2.Template] = None + +template_load_lock = threading.Lock() + +base_info = { + "version": Utils.__version__, + "title": "Archipelago", + "author": "Berserker", + "homepage": "https://archipelago.gg", + "description": "Integration client for the Archipelago Randomizer", + "factorio_version": "1.1" +} + +def generate_mod(world: MultiWorld, player: int): + global template, locale_template + with template_load_lock: + if not template: + template = jinja2.Template(open(Utils.local_path("data", "factorio", "mod_template", "data-final-fixes.lua")).read()) + locale_template = jinja2.Template(open(Utils.local_path("data", "factorio", "mod_template", "locale", "en", "locale.cfg")).read()) + # get data for templates + player_names = {x: world.player_names[x][0] for x in world.player_ids} + locations = [] + for location in world.get_filled_locations(player): + if not location.name.startswith("recipe-"): # introduce this a new location property? + locations.append((location.name, location.item.name, location.item.player)) + mod_name = f"archipelago-client-{world.seed}-{player}" + template_data = {"locations": locations, "player_names" : player_names, "tech_table": tech_table, + "mod_name": mod_name} + + mod_code = template.render(**template_data) + + mod_dir = Utils.output_path(mod_name) + en_locale_dir = os.path.join(mod_dir, "locale", "en") + os.makedirs(en_locale_dir, exist_ok=True) + shutil.copytree(Utils.local_path("data", "factorio", "mod"), mod_dir, dirs_exist_ok=True) + with open(os.path.join(mod_dir, "data-final-fixes.lua"), "wt") as f: + f.write(mod_code) + locale_content = locale_template.render(**template_data) + with open(os.path.join(en_locale_dir, "locale.cfg"), "wt") as f: + f.write(locale_content) + info = base_info.copy() + info["name"] = mod_name + with open(os.path.join(mod_dir, "info.json"), "wt") as f: + json.dump(info, f, indent=4) diff --git a/worlds/factorio/Technologies.py b/worlds/factorio/Technologies.py new file mode 100644 index 00000000..21d56a1a --- /dev/null +++ b/worlds/factorio/Technologies.py @@ -0,0 +1,46 @@ +# Factorio technologies are imported from a .json document in /data +from typing import Dict +import os +import json + +import Utils + +factorio_id = 2**17 + +source_file = Utils.local_path("data", "factorio", "techs.json") + +with open(source_file) as f: + raw = json.load(f) +tech_table = {} + +requirements = {} +ingredients = {} +all_ingredients = set() + +# TODO: export this dynamically, or filter it during export +starting_ingredient_recipes = {"automation-science-pack"} + +# recipes and technologies can share names in Factorio +for technology in sorted(raw): + data = raw[technology] + tech_table[technology] = factorio_id + factorio_id += 1 + if data["requires"]: + requirements[technology] = set(data["requires"]) + current_ingredients = set(data["ingredients"])-starting_ingredient_recipes + if current_ingredients: + + all_ingredients |= current_ingredients + current_ingredients = {"recipe-"+ingredient for ingredient in current_ingredients} + ingredients[technology] = current_ingredients + +recipe_sources = {} + +for technology, data in raw.items(): + recipe_source = all_ingredients & set(data["unlocks"]) + for recipe in recipe_source: + recipe_sources["recipe-"+recipe] = technology + +all_ingredients = {"recipe-"+ingredient for ingredient in all_ingredients} +del(raw) +lookup_id_to_name: Dict[int, str] = {item_id: item_name for item_name, item_id in tech_table.items()} \ No newline at end of file diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py new file mode 100644 index 00000000..e8382288 --- /dev/null +++ b/worlds/factorio/__init__.py @@ -0,0 +1,59 @@ +import logging + +from BaseClasses import Region, Entrance, Location, MultiWorld, Item + +from .Technologies import tech_table, requirements, ingredients, all_ingredients, recipe_sources + +static_nodes = {"automation", "logistics"} + + +def gen_factorio(world: MultiWorld, player: int): + for tech_name, tech_id in tech_table.items(): + tech_item = Item(tech_name, True, tech_id, player) + tech_item.game = "Factorio" + if tech_name in static_nodes: + loc = world.get_location(tech_name, player) + loc.item = tech_item + loc.locked = loc.event = True + else: + world.itempool.append(tech_item) + set_rules(world, player) + + +def factorio_create_regions(world: MultiWorld, player: int): + menu = Region("Menu", None, "Menu", player) + crash = Entrance(player, "Crash Land", menu) + menu.exits.append(crash) + nauvis = Region("Nauvis", None, "Nauvis", player) + nauvis.world = menu.world = world + for tech_name, tech_id in tech_table.items(): + tech = Location(player, tech_name, tech_id, nauvis) + nauvis.locations.append(tech) + tech.game = "Factorio" + for ingredient in all_ingredients: # register science packs as events + ingredient_location = Location(player, ingredient, 0, nauvis) + ingredient_location.item = Item(ingredient, True, 0, player) + ingredient_location.event = ingredient_location.locked = True + menu.locations.append(ingredient_location) + crash.connect(nauvis) + world.regions += [menu, nauvis] + + +def set_rules(world: MultiWorld, player: int): + if world.logic[player] != 'nologic': + from worlds.generic import Rules + for tech_name in tech_table: + # vanilla layout, to be implemented + # rules = requirements.get(tech_name, set()) | ingredients.get(tech_name, set()) + # loose nodes + rules = ingredients.get(tech_name, set()) + if rules: + location = world.get_location(tech_name, player) + Rules.set_rule(location, lambda state, rules=rules: all(state.has(rule, player) for rule in rules)) + + for recipe, technology in recipe_sources.items(): + Rules.set_rule(world.get_location(recipe, player), lambda state, tech=technology: state.has(tech, player)) + + + world.completion_condition[player] = lambda state: all(state.has(ingredient, player) + for ingredient in all_ingredients) diff --git a/worlds/hk/__init__.py b/worlds/hk/__init__.py index 3f76be63..a9c26125 100644 --- a/worlds/hk/__init__.py +++ b/worlds/hk/__init__.py @@ -24,12 +24,14 @@ def create_region(world: MultiWorld, player: int, name: str, locations=None, exi return ret + class HKLocation(Location): game: str = "Hollow Knight" def __init__(self, player: int, name: str, address=None, parent=None): super(HKLocation, self).__init__(player, name, address, parent) + class HKItem(Item): game = "Hollow Knight" @@ -44,11 +46,10 @@ def gen_hollow(world: MultiWorld, player: int): set_rules(world, player) - - def link_regions(world: MultiWorld, player: int): world.get_entrance('Hollow Nest S&Q', player).connect(world.get_region('Hollow Nest', player)) + not_shufflable_types = {"Essence_Boss"} option_to_type_lookup = {