local Material = require "Material" local Quantity = require "Quantity" local function inputs (amount, opt, ...) local acc local function _in (head, ...) if head ~= nil then table.insert(acc, Quantity{amount, head}) return _in(...) end return acc end if type(amount) == "table" then acc = amount amount = opt return _in(...) end acc = {} return _in(opt, ...) end local metatable = { __tostring = function (self) return ("Recipe[%q]"):format(self.output.material) end } local function recipe (input, output, duration) return setmetatable({input=input, output=output, duration=duration}, metatable) end local function p1 (basic, resource) return recipe( {Quantity{3000, resource}}, Quantity{20, basic}, 1800) end local function p2 (refined, first, second) return recipe( {Quantity{40, first}, Quantity{40, second}}, Quantity{5, refined}, 3600) end local function p3 (specialized, ...) return recipe( inputs(10, ...), Quantity{3, specialized}, 3600) end local function p4_a (advanced, ...) return recipe( inputs(6, ...), Quantity{1, advanced}, 3600) end local function p4_b (advanced, first, ...) return recipe( inputs({Quantity{40, first}}, 6, ...), Quantity{1, advanced}, 3600) end local recipes = { -- P1 p1(Material.Water, Material.AqueousLiquids), p1(Material.IndustrialFibers, Material.Autotrophs), p1(Material.ReactiveMetals, Material.BaseMetals), p1(Material.Biofuels, Material.CarbonCompounds), p1(Material.Proteins, Material.ComplexOrganisms), p1(Material.Silicon, Material.FelsicMagma), p1(Material.ToxicMetals, Material.HeavyMetals), p1(Material.Electrolytes, Material.IonicSolutions), p1(Material.Bacteria, Material.MicroOrganisms), p1(Material.Oxygen, Material.NobleGas), p1(Material.PreciousMetals, Material.NobleMetals), p1(Material.ChiralStructures, Material.NonCSCrystals), p1(Material.Biomass, Material.PlankticColonies), p1(Material.OxidizingCompound, Material.ReactiveGas), p1(Material.Plasmoids, Material.SuspendedPlasma), -- P2 p2(Material.Biocells, Material.Biofuels, Material.PreciousMetals), p2(Material.ConstructionBlocks, Material.ReactiveMetals, Material.ToxicMetals), p2(Material.ConsumerElectronics, Material.ToxicMetals, Material.ChiralStructures), p2(Material.Coolant, Material.Water, Material.Electrolytes), p2(Material.EnrichedUranium, Material.ToxicMetals, Material.PreciousMetals), p2(Material.Fertilizer, Material.Proteins, Material.Bacteria), p2(Material.GenEnhancedLivestock, Material.Proteins, Material.Biomass), p2(Material.Livestock, Material.Biofuels, Material.Proteins), p2(Material.MechanicalParts, Material.ReactiveMetals, Material.PreciousMetals), p2(Material.MicrofiberShielding, Material.IndustrialFibers, Material.Silicon), p2(Material.MiniatureElectronics, Material.Silicon, Material.ChiralStructures), p2(Material.Nanites, Material.ReactiveMetals, Material.Bacteria), p2(Material.Oxides, Material.Oxygen, Material.OxidizingCompound), p2(Material.Polyaramids, Material.IndustrialFibers, Material.OxidizingCompound), p2(Material.Polytextiles, Material.IndustrialFibers, Material.Biofuels), p2(Material.RocketFuel, Material.Electrolytes, Material.Plasmoids), p2(Material.SilicateGlass, Material.Silicon, Material.OxidizingCompound), p2(Material.Superconductors, Material.Water, Material.Plasmoids), p2(Material.SupertensilePlastics, Material.Oxygen, Material.Biomass), p2(Material.SyntheticOil, Material.Electrolytes, Material.Oxygen), p2(Material.TestCultures, Material.Water, Material.Bacteria), p2(Material.Transmitter, Material.ChiralStructures, Material.Plasmoids), p2(Material.ViralAgent, Material.Bacteria, Material.Biomass), p2(Material.WaterCooledCPU, Material.Water, Material.ReactiveMetals), -- P3 p3(Material.BiotechResearchReports, Material.ConstructionBlocks, Material.Livestock, Material.Nanites), p3(Material.CameraDrones, Material.RocketFuel, Material.SilicateGlass), p3(Material.Condensates, Material.Coolant, Material.Oxides), p3(Material.CryoprotectantSolution, Material.Fertilizer, Material.SyntheticOil, Material.TestCultures), p3(Material.DataChips, Material.MicrofiberShielding, Material.SupertensilePlastics), p3(Material.GelMatrixBiopaste, Material.Biocells, Material.Oxides, Material.Superconductors), p3(Material.GuidanceSystems, Material.Transmitter, Material.WaterCooledCPU), p3(Material.HazmatDetectionSystems, Material.Polytextiles, Material.Transmitter, Material.ViralAgent), p3(Material.HermeticMembranes, Material.GenEnhancedLivestock, Material.Polyaramids), p3(Material.HighTechTransmitters, Material.Polyaramids, Material.Transmitter), p3(Material.IndustrialExplosives, Material.Fertilizer, Material.Polytextiles), p3(Material.Neocoms, Material.Biocells, Material.SilicateGlass), p3(Material.NuclearReactors, Material.EnrichedUranium, Material.MicrofiberShielding), p3( Material.PlanetaryVehicles, Material.MechanicalParts, Material.MiniatureElectronics, Material.SupertensilePlastics), p3(Material.Robotics, Material.ConsumerElectronics, Material.MechanicalParts), p3(Material.SmartfabUnits, Material.ConstructionBlocks, Material.MiniatureElectronics), p3(Material.Supercomputers, Material.ConsumerElectronics, Material.Coolant, Material.WaterCooledCPU), p3(Material.SyntheticSynapses, Material.SupertensilePlastics, Material.TestCultures), p3(Material.TranscranialMicrocontrollers, Material.Biocells, Material.Nanites), p3(Material.UkomiSuperConductors, Material.Superconductors, Material.SyntheticOil), p3(Material.Vaccines, Material.Livestock, Material.ViralAgent), -- P4 p4_a(Material.BroadcastNode, Material.DataChips, Material.HighTechTransmitters, Material.Neocoms), p4_a( Material.IntegrityResponseDrones, Material.GelMatrixBiopaste, Material.HazmatDetectionSystems, Material.PlanetaryVehicles), p4_a( Material.RecursiveComputingModule, Material.GuidanceSystems, Material.SyntheticSynapses, Material.TranscranialMicrocontrollers), p4_a( Material.SelfHarmonizingPowerCore, Material.CameraDrones, Material.HermeticMembranes, Material.NuclearReactors), p4_a( Material.WetwareMainframe, Material.BiotechResearchReports, Material.CryoprotectantSolution, Material.Supercomputers), p4_b(Material.NanoFactory, Material.ReactiveMetals, Material.IndustrialExplosives, Material.UkomiSuperConductors), p4_b(Material.OrganicMortarApplicators, Material.Bacteria, Material.Condensates, Material.Robotics), p4_b(Material.SterileConduits, Material.Water, Material.SmartfabUnits, Material.Vaccines), } local lookup = {} for _, recipe in pairs(recipes) do lookup[recipe.output.material] = recipe end return lookup