diff --git a/Foreman/Controls/EditRecipePanel.cs b/Foreman/Controls/EditRecipePanel.cs index a8f03c2f..6cb0c582 100644 --- a/Foreman/Controls/EditRecipePanel.cs +++ b/Foreman/Controls/EditRecipePanel.cs @@ -414,7 +414,7 @@ private void UpdateBeaconInfo() BeaconEnergyLabel.Text = nodeData.SelectedBeacon == null ? "0J" : GraphicsStuff.DoubleToEnergy(nodeData.GetBeaconEnergyConsumption(), "W"); BeaconModuleCountLabel.Text = nodeData.SelectedBeacon == null ? "0" : nodeData.SelectedBeacon.ModuleSlots.ToString(); - BeaconEfficiencyLabel.Text = nodeData.SelectedBeacon == null ? "0%" : nodeData.SelectedBeacon.BeaconEffectivity.ToString("P0"); + BeaconEfficiencyLabel.Text = nodeData.SelectedBeacon == null ? "0%" : nodeData.SelectedBeacon.GetBeaconEffectivity(nodeData.SelectedBeacon.Owner.DefaultQuality, nodeData.BeaconCount).ToString("P0"); //QUALITY UPDATE REQUIRED TotalBeaconsLabel.Text = nodeData.GetTotalBeacons().ToString(); TotalBeaconEnergyLabel.Text = nodeData.SelectedBeacon == null ? "0J" : GraphicsStuff.DoubleToEnergy(nodeData.GetTotalBeaconElectricalConsumption(), "W"); } diff --git a/Foreman/DataCache/DataCache.cs b/Foreman/DataCache/DataCache.cs index 5bad4ad2..5fbe208b 100644 --- a/Foreman/DataCache/DataCache.cs +++ b/Foreman/DataCache/DataCache.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using System.Drawing.Drawing2D; using System.IO; using System.Linq; using System.Text.RegularExpressions; @@ -17,6 +18,7 @@ public class DataCache public IEnumerable AvailableGroups { get { return groups.Values.Where(g => g.Available); } } public IEnumerable AvailableSubgroups { get { return subgroups.Values.Where(g => g.Available); } } + public IEnumerable AvailableQualities { get { return qualities.Values.Where(g => g.Available); } } public IEnumerable AvailableItems { get { return items.Values.Where(g => g.Available); } } public IEnumerable AvailableRecipes { get { return recipes.Values.Where(g => g.Available); } } @@ -27,6 +29,7 @@ public class DataCache public IReadOnlyDictionary Technologies { get { return technologies; } } public IReadOnlyDictionary Groups { get { return groups; } } public IReadOnlyDictionary Subgroups { get { return subgroups; } } + public IReadOnlyDictionary Qualities { get { return qualities; } } public IReadOnlyDictionary Items { get { return items; } } public IReadOnlyDictionary Recipes { get { return recipes; } } public IReadOnlyDictionary Assemblers { get { return assemblers; } } @@ -47,6 +50,9 @@ public class DataCache public IReadOnlyDictionary MissingBeacons { get { return missingBeacons; } } public IReadOnlyDictionary MissingRecipes { get { return missingRecipes; } } + public Quality DefaultQuality { get; private set; } + private Quality ErrorQuality; + public static Bitmap UnknownIcon { get { return IconCache.GetUnknownIcon(); } } private static Bitmap noBeaconIcon; public static Bitmap NoBeaconIcon { get { if (noBeaconIcon == null) noBeaconIcon = IconCache.GetIcon(Path.Combine("Graphics", "NoBeacon.png"), 64); return noBeaconIcon; } } @@ -56,6 +62,7 @@ public class DataCache private Dictionary technologies; private Dictionary groups; private Dictionary subgroups; + private Dictionary qualities; private Dictionary items; private Dictionary recipes; private Dictionary assemblers; @@ -108,6 +115,7 @@ public class DataCache technologies = new Dictionary(); groups = new Dictionary(); subgroups = new Dictionary(); + qualities = new Dictionary(); items = new Dictionary(); recipes = new Dictionary(); assemblers = new Dictionary(); @@ -158,6 +166,8 @@ private void GenerateHelperObjects() rocketLaunchSubgroup.myGroup = extraFormanGroup; extraFormanGroup.subgroups.Add(rocketLaunchSubgroup); + ErrorQuality = new QualityPrototype(this, "§§error_quality", "ERROR", "-"); + IconColorPair heatIcon = new IconColorPair(IconCache.GetIcon(Path.Combine("Graphics", "HeatIcon.png"), 64), Color.DarkRed); IconColorPair burnerGeneratorIcon = new IconColorPair(IconCache.GetIcon(Path.Combine("Graphics", "BurnerGeneratorIcon.png"), 64), Color.DarkRed); IconColorPair playerAssemblerIcon = new IconColorPair(IconCache.GetIcon(Path.Combine("Graphics", "PlayerAssembler.png"), 64), Color.Gray); @@ -177,15 +187,11 @@ private void GenerateHelperObjects() BurnerRecipe.Time = 1; playerAssember = new AssemblerPrototype(this, "§§a:player-assembler", "Player", EntityType.Assembler, EnergySource.Void); - playerAssember.EnergyConsumption = 0; - playerAssember.EnergyDrain = 0; - playerAssember.EnergyProduction = 0; + playerAssember.energyDrain = 0; playerAssember.SetIconAndColor(playerAssemblerIcon); rocketAssembler = new AssemblerPrototype(this, "§§a:rocket-assembler", "Rocket", EntityType.Rocket, EnergySource.Void); - rocketAssembler.EnergyConsumption = 0; - rocketAssembler.EnergyDrain = 0; - rocketAssembler.EnergyProduction = 0; + rocketAssembler.energyDrain = 0; rocketAssembler.SetIconAndColor(rocketAssemblerIcon); ElectricityIcon = IconCache.GetIcon(Path.Combine("Graphics", "ElectricityIcon.png"), 64); @@ -199,12 +205,18 @@ private void GenerateHelperObjects() public async Task LoadAllData(Preset preset, IProgress> progress, bool loadIcons = true) { Clear(); + //return; Dictionary> craftingCategories = new Dictionary>(); Dictionary> resourceCategories = new Dictionary>(); + resourceCategories.Add("<>", new List()); //the water resources Dictionary> fuelCategories = new Dictionary>(); fuelCategories.Add("§§fc:liquids", new List()); //the liquid fuels category Dictionary burnResults = new Dictionary(); + Dictionary plantResults = new Dictionary(); + Dictionary spoilResults = new Dictionary(); + Dictionary nextQualities = new Dictionary(); + List miningWithFluidRecipes = new List(); PresetName = preset.Name; JObject jsonData = PresetProcessor.PrepPreset(preset); @@ -220,34 +232,54 @@ await Task.Run(() => //process each section (order is rather important here) foreach (var objJToken in jsonData["mods"].ToList()) ProcessMod(objJToken); + foreach (var objJToken in jsonData["subgroups"].ToList()) ProcessSubgroup(objJToken); + foreach (var objJToken in jsonData["groups"].ToList()) ProcessGroup(objJToken, iconCache); + + foreach (var objToken in jsonData["qualities"].ToList()) + ProcessQuality(objToken, iconCache, nextQualities); + foreach (QualityPrototype quality in qualities.Values.Cast()) + ProcessQualityLink(quality, nextQualities); + ProcessDefaultQuality(); + foreach (var objJToken in jsonData["fluids"].ToList()) ProcessFluid(objJToken, iconCache, fuelCategories); + foreach (var objJToken in jsonData["items"].ToList()) - ProcessItem(objJToken, iconCache, fuelCategories, burnResults); //items after fluids to take care of duplicates (if name exists in fluid and in item set, then only the fluid is counted) - foreach (ItemPrototype item in items.Values) - ProcessBurnItem(item, fuelCategories, burnResults); //link up any items with burn remains - foreach (var objJToken in jsonData["recipes"].ToList()) - ProcessRecipe(objJToken, iconCache, craftingCategories); + ProcessItem(objJToken, iconCache, fuelCategories, burnResults, plantResults, spoilResults); //items after fluids to take care of duplicates (if name exists in fluid and in item set, then only the fluid is counted) + foreach (ItemPrototype item in items.Values.Cast()) + ProcessBurnItem(item, burnResults); //link up any items with burn remains + foreach (ItemPrototype item in items.Values.Cast()) + ProcessPlantItem(item, plantResults); //link up any items with plant results + foreach (ItemPrototype item in items.Values.Cast()) + ProcessSpoilItem(item, spoilResults); //link up any items with spoil remains foreach (var objJToken in jsonData["modules"].ToList()) ProcessModule(objJToken, iconCache); + + foreach (var objJToken in jsonData["recipes"].ToList()) + ProcessRecipe(objJToken, iconCache, craftingCategories); + foreach (var objJToken in jsonData["resources"].ToList()) - ProcessResource(objJToken, resourceCategories); + ProcessResource(objJToken, resourceCategories, miningWithFluidRecipes); + foreach (var objToken in jsonData["water_resources"].ToList()) + ProcessResource(objToken, resourceCategories, miningWithFluidRecipes); + foreach (var objJToken in jsonData["technologies"].ToList()) - ProcessTechnology(objJToken, iconCache); + ProcessTechnology(objJToken, iconCache, miningWithFluidRecipes); foreach (var objJToken in jsonData["technologies"].ToList()) ProcessTechnologyP2(objJToken); //required to properly link technology prerequisites + foreach (var objJToken in jsonData["entities"].ToList()) - ProcessEntity(objJToken, iconCache, craftingCategories, resourceCategories, fuelCategories); + ProcessEntity(objJToken, iconCache, craftingCategories, resourceCategories, fuelCategories, miningWithFluidRecipes); - //process launch products - foreach (var objJToken in jsonData["items"].Where(t => t["launch_products"] != null).ToList()) + //process launch products (empty now - depreciated) + foreach (var objJToken in jsonData["items"].Where(t => t["rocket_launch_products"] != null).ToList()) ProcessRocketLaunch(objJToken); - foreach (var objJToken in jsonData["fluids"].Where(t => t["launch_products"] != null).ToList()) + foreach (var objJToken in jsonData["fluids"].Where(t => t["rocket_launch_products"] != null).ToList()) ProcessRocketLaunch(objJToken); //process character @@ -261,11 +293,14 @@ await Task.Run(() => resourceCategories.Clear(); fuelCategories.Clear(); burnResults.Clear(); + plantResults.Clear(); + spoilResults.Clear(); + //sort - foreach (GroupPrototype g in groups.Values) + foreach (GroupPrototype g in groups.Values.Cast()) g.SortSubgroups(); - foreach (SubgroupPrototype sg in subgroups.Values) + foreach (SubgroupPrototype sg in subgroups.Values.Cast()) sg.SortIRs(); //The data read by the dataCache (json preset) includes everything. We need to now process it such that any items/recipes that cant be used dont appear. @@ -274,7 +309,7 @@ await Task.Run(() => //delete any recipe that has no assembler. This is the only type of deletion that we will do, as we MUST enforce the 'at least 1 assembler' per recipe. The only recipes with no assemblers linked are those added to 'missing' category, and those are handled separately. //note that even hand crafting has been handled: there is a player assembler that has been added. So the only recipes removed here are those that literally can not be crafted. - foreach (RecipePrototype recipe in recipes.Values.Where(r => r.Assemblers.Count == 0).ToList()) + foreach (RecipePrototype recipe in recipes.Values.Where(r => r.Assemblers.Count == 0).ToList().Cast()) { foreach (ItemPrototype ingredient in recipe.ingredientList) ingredient.consumptionRecipes.Remove(recipe); @@ -314,6 +349,8 @@ await Task.Run(() => public void Clear() { + DefaultQuality = ErrorQuality; + includedMods.Clear(); technologies.Clear(); groups.Clear(); @@ -345,8 +382,6 @@ public void Clear() recipes.Add(HeatRecipe.Name, HeatRecipe); recipes.Add(BurnerRecipe.Name, BurnerRecipe); technologies.Add(StartingTech.Name, startingTech); - - } //------------------------------------------------------Import processing @@ -498,6 +533,52 @@ private void ProcessGroup(JToken objJToken, Dictionary ic groups.Add(group.Name, group); } + private void ProcessQuality(JToken objJToken, Dictionary iconCache, Dictionary nextQualities) + { + QualityPrototype quality = new QualityPrototype( + this, + (string)objJToken["name"], + (string)objJToken["localised_name"], + (string)objJToken["order"]); + + if (iconCache.ContainsKey((string)objJToken["icon_name"])) + quality.SetIconAndColor(iconCache[(string)objJToken["icon_name"]]); + + quality.Enabled = false; //we will set the enabled qualities from default later + quality.Available = false; + + quality.Level = (int)objJToken["level"]; + quality.BeaconPowerMultiplier = (double)objJToken["beacon_power_multiplier"]; + quality.MiningDrillResourceDrainMultiplier = (double)objJToken["mining_drill_resource_drain_multiplier"]; + quality.NextProbability = (double)objJToken["next_probability"]; + + if (objJToken["next"] != null) + nextQualities.Add(quality, (string)objJToken["next"]); + + qualities.Add(quality.Name, quality); + } + + private void ProcessQualityLink(QualityPrototype quality, Dictionary nextQualities) + { + + if (nextQualities.ContainsKey(quality) && qualities.ContainsKey(nextQualities[quality])) + { + quality.NextQuality = qualities[nextQualities[quality]]; + ((QualityPrototype)qualities[nextQualities[quality]]).PrevQuality = quality; + } + } + + private void ProcessDefaultQuality() + { + DefaultQuality = qualities.ContainsKey("normal") ? qualities["normal"] : ErrorQuality; + Quality cQuality = DefaultQuality; + while(cQuality != null) + { + ((QualityPrototype)cQuality).Available = true; + cQuality =cQuality.NextQuality; + } + } + private void ProcessFluid(JToken objJToken, Dictionary iconCache, Dictionary> fuelCategories) { FluidPrototype item = new FluidPrototype( @@ -512,18 +593,20 @@ private void ProcessFluid(JToken objJToken, Dictionary ic item.DefaultTemperature = (double)objJToken["default_temperature"]; item.SpecificHeatCapacity = (double)objJToken["heat_capacity"]; + item.GasTemperature = (double)objJToken["gas_temperature"]; + item.MaxTemperature = (double)objJToken["max_temperature"]; - if (objJToken["fuel_value"] != null && (double)objJToken["fuel_value"] > 0) + if (objJToken["fuel_value"] != null && (double)objJToken["fuel_value"] > 0) { item.FuelValue = (double)objJToken["fuel_value"]; - item.PollutionMultiplier = (double)objJToken["pollution_multiplier"]; + item.PollutionMultiplier = (double)objJToken["emissions_multiplier"]; fuelCategories["§§fc:liquids"].Add(item); } items.Add(item.Name, item); } - private void ProcessItem(JToken objJToken, Dictionary iconCache, Dictionary> fuelCategories, Dictionary burnResults) + private void ProcessItem(JToken objJToken, Dictionary iconCache, Dictionary> fuelCategories, Dictionary burnResults, Dictionary plantResults, Dictionary spoilResults) { if (items.ContainsKey((string)objJToken["name"])) //special handling for fluids which appear in both items & fluid lists (ex: fluid-unknown) return; @@ -538,12 +621,14 @@ private void ProcessItem(JToken objJToken, Dictionary ico if (iconCache.ContainsKey((string)objJToken["icon_name"])) item.SetIconAndColor(iconCache[(string)objJToken["icon_name"]]); - item.StackSize = (int)objJToken["stack"]; + item.StackSize = (int)objJToken["stack_size"]; + item.Weight = (double)objJToken["weight"]; + item.IngredientToWeightCoefficient = (double)objJToken["ingredient_to_weight_coefficient"]; if (objJToken["fuel_category"] != null && (double)objJToken["fuel_value"] > 0) //factorio eliminates any 0fuel value fuel from the list (checked) { item.FuelValue = (double)objJToken["fuel_value"]; - item.PollutionMultiplier = (double)objJToken["pollution_multiplier"]; + item.PollutionMultiplier = (double)objJToken["fuel_emissions_multiplier"]; if (!fuelCategories.ContainsKey((string)objJToken["fuel_category"])) fuelCategories.Add((string)objJToken["fuel_category"], new List()); @@ -551,11 +636,15 @@ private void ProcessItem(JToken objJToken, Dictionary ico } if (objJToken["burnt_result"] != null) burnResults.Add(item, (string)objJToken["burnt_result"]); + if (objJToken["plant_result"] != null) + plantResults.Add(item, (string)objJToken["plant_result"]); + if (objJToken["spoil_result"] != null) + spoilResults.Add(item, (string)objJToken["spoil_result"]); - items.Add(item.Name, item); + items.Add(item.Name, item); } - private void ProcessBurnItem(ItemPrototype item, Dictionary> fuelCategories, Dictionary burnResults) + private void ProcessBurnItem(ItemPrototype item, Dictionary burnResults) { if (burnResults.ContainsKey(item)) { @@ -563,6 +652,46 @@ private void ProcessBurnItem(ItemPrototype item, Dictionary plantResults) + { + if (plantResults.ContainsKey(item)) + { + item.PlantResult = items[plantResults[item]]; + ((ItemPrototype)items[plantResults[item]]).PlantOrigin = item; + } + } + private void ProcessSpoilItem(ItemPrototype item, Dictionary spoilResults) + { + if (spoilResults.ContainsKey(item)) + { + item.SpoilResult = items[spoilResults[item]]; + ((ItemPrototype)items[spoilResults[item]]).SpoilOrigin = item; + } + } + + private void ProcessModule(JToken objJToken, Dictionary iconCache) + { + ModulePrototype module = new ModulePrototype( + this, + (string)objJToken["name"], + (string)objJToken["localised_name"]); + + if (iconCache.ContainsKey((string)objJToken["icon_name"])) + module.SetIconAndColor(iconCache[(string)objJToken["icon_name"]]); + else if (iconCache.ContainsKey((string)objJToken["icon_alt_name"])) + module.SetIconAndColor(iconCache[(string)objJToken["icon_alt_name"]]); + + module.SpeedBonus = (double)objJToken["module_effects"]["speed"]; + module.ProductivityBonus = (double)objJToken["module_effects"]["productivity"]; + module.ConsumptionBonus = (double)objJToken["module_effects"]["consumption"]; + module.PollutionBonus = (double)objJToken["module_effects"]["pollution"]; + module.QualityBonus = (double)objJToken["module_effects"]["quality"]; + + module.Tier = (int)objJToken["tier"]; + module.Category = (string)objJToken["category"]; + + modules.Add(module.Name, module); + } private void ProcessRecipe(JToken objJToken, Dictionary iconCache, Dictionary> craftingCategories) { @@ -621,57 +750,42 @@ private void ProcessRecipe(JToken objJToken, Dictionary i } } - recipes.Add(recipe.Name, recipe); - } - - private void ProcessModule(JToken objJToken, Dictionary iconCache) - { - ModulePrototype module = new ModulePrototype( - this, - (string)objJToken["name"], - (string)objJToken["localised_name"]); - - if (iconCache.ContainsKey((string)objJToken["icon_name"])) - module.SetIconAndColor(iconCache[(string)objJToken["icon_name"]]); - else if (iconCache.ContainsKey((string)objJToken["icon_alt_name"])) - module.SetIconAndColor(iconCache[(string)objJToken["icon_alt_name"]]); - - module.SpeedBonus = (double)objJToken["module_effects_speed"]; - module.ProductivityBonus = (double)objJToken["module_effects_productivity"]; - module.ConsumptionBonus = (double)objJToken["module_effects_consumption"]; - module.PollutionBonus = (double)objJToken["module_effects_pollution"]; - module.Tier = (int)objJToken["tier"]; - - foreach (var recipe in objJToken["limitations"]) + foreach(ModulePrototype module in modules.Values.Cast()) { - if (recipes.ContainsKey((string)recipe)) //only add if the recipe is in the list of recipes (if it isnt, means it was deleted either in data phase of LUA or during foreman export cleanup) + bool validModule = ((bool)objJToken["allowed_effects"]["consumption"] || module.ConsumptionBonus >= 0) && + ((bool)objJToken["allowed_effects"]["speed"] || module.SpeedBonus <= 0) && + ((bool)objJToken["allowed_effects"]["productivity"] || module.ProductivityBonus <= 0) && + ((bool)objJToken["allowed_effects"]["pollution"] || module.PollutionBonus >= 0) && + ((bool)objJToken["allowed_effects"]["quality"] || module.QualityBonus <= 0); + + if (objJToken["allowed_module_categories"] != null) { - ((RecipePrototype)recipes[(string)recipe]).modules.Add(module); - module.recipes.Add((RecipePrototype)recipes[(string)recipe]); + foreach (var moduleCategoryJToken in objJToken["allowed_module_categories"]) + { + validModule &= (module.Category == (string)moduleCategoryJToken); + } } - } - if (objJToken["limitations"].Count() == 0) //means all recipes work - { - foreach (RecipePrototype recipe in recipes.Values) + if (validModule) { recipe.modules.Add(module); module.recipes.Add(recipe); } } - modules.Add(module.Name, module); + recipes.Add(recipe.Name, recipe); } - private void ProcessResource(JToken objJToken, Dictionary> resourceCategories) + private string GetExtractionRecipeName(string itemName) { return "§§r:e:" + itemName; } + + private void ProcessResource(JToken objJToken, Dictionary> resourceCategories, List miningWithFluidRecipes) { if (objJToken["products"].Count() == 0) return; - string extractionRecipeName = "§§r:e:" + (string)objJToken["name"]; RecipePrototype recipe = new RecipePrototype( this, - extractionRecipeName, + GetExtractionRecipeName((string)objJToken["name"]), (string)objJToken["localised_name"] + " Extraction", (string)objJToken["products"][0]["type"] == "fluid" ? extractionSubgroupFluids : extractionSubgroupItems, (string)objJToken["name"]); @@ -698,9 +812,10 @@ private void ProcessResource(JToken objJToken, Dictionary()) //we will let the assembler sort out which module can be used with this recipe { module.recipes.Add(recipe); recipe.modules.Add(module); @@ -714,13 +829,14 @@ private void ProcessResource(JToken objJToken, Dictionary iconCache) + private void ProcessTechnology(JToken objJToken, Dictionary iconCache, List miningWithFluidRecipes) { TechnologyPrototype technology = new TechnologyPrototype( this, @@ -741,6 +857,18 @@ private void ProcessTechnology(JToken objJToken, Dictionary()) + { + recipe.myUnlockTechnologies.Add(technology); + technology.unlockedRecipes.Add(recipe); + } + } + } + foreach (var ingredientJToken in objJToken["research_unit_ingredients"].ToList()) { string name = (string)ingredientJToken["name"]; @@ -780,7 +908,7 @@ private void ProcessCharacter(JToken objJtoken, Dictionary iconCache, Dictionary> craftingCategories, Dictionary> resourceCategories, Dictionary> fuelCategories) + private void ProcessEntity(JToken objJToken, Dictionary iconCache, Dictionary> craftingCategories, Dictionary> resourceCategories, Dictionary> fuelCategories, List miningWithFluidRecipes) { string type = (string)objJToken["type"]; if (type == "character") //character is processed later @@ -806,18 +934,22 @@ private void ProcessEntity(JToken objJToken, Dictionary i if (etype == EntityType.Beacon) + { entity = new BeaconPrototype(this, (string)objJToken["name"], (string)objJToken["localised_name"], esource, false); + } else + { entity = new AssemblerPrototype(this, (string)objJToken["name"], (string)objJToken["localised_name"], etype, esource, - false); ; + false); + } //icons if (iconCache.ContainsKey((string)objJToken["icon_name"])) @@ -826,34 +958,64 @@ private void ProcessEntity(JToken objJToken, Dictionary i entity.SetIconAndColor(iconCache[(string)objJToken["icon_alt_name"]]); //associated items - if (objJToken["associated_items"] != null) - foreach (string item in objJToken["associated_items"].Select(i => (string)i)) + if (objJToken["items_to_place_this"] != null) + foreach (string item in objJToken["items_to_place_this"].Select(i => (string)i)) if (items.ContainsKey(item)) entity.associatedItems.Add((ItemPrototype)items[item]); //base parameters - entity.Speed = objJToken["speed"] == null ? 0.5f : (double)objJToken["speed"]; + if (objJToken["q_speed"] != null) + { + foreach (JToken speedToken in objJToken["q_speed"]) + entity.speed.Add(qualities[(string)speedToken["quality"]], (double)speedToken["value"]); + } + else if (objJToken["speed"] != null) + { + foreach (Quality quality in qualities.Values) + entity.speed.Add(quality, (double)objJToken["speed"]); + } + entity.ModuleSlots = objJToken["module_inventory_size"] == null ? 0 : (int)objJToken["module_inventory_size"]; //modules - List allowedEffectsList = objJToken["allowed_effects"].Select(token => (string)token).ToList(); - bool[] allowedEffects = new bool[] { - allowedEffectsList.Contains("consumption"), - allowedEffectsList.Contains("speed"), - allowedEffectsList.Contains("productivity"), - allowedEffectsList.Contains("pollution") }; - - foreach (ModulePrototype module in modules.Values.Where(module => - (allowedEffects[0] || module.ConsumptionBonus == 0) && - (allowedEffects[1] || module.SpeedBonus == 0) && - (allowedEffects[2] || module.ProductivityBonus == 0) && - (allowedEffects[3] || module.PollutionBonus == 0))) - { - entity.modules.Add(module); - if (entity is AssemblerPrototype aEntity) - module.assemblers.Add(aEntity); - else if (entity is BeaconPrototype bEntity) - module.beacons.Add(bEntity); + if (entity.EntityType == EntityType.Assembler || entity.EntityType == EntityType.Miner || entity.EntityType == EntityType.Rocket || entity.EntityType == EntityType.Beacon) + { + if (entity is AssemblerPrototype) + { + ((AssemblerPrototype)entity).BaseConsumptionBonus = (double)objJToken["base_module_effects"]["consumption"]; + ((AssemblerPrototype)entity).BaseSpeedBonus = (double)objJToken["base_module_effects"]["speed"]; + ((AssemblerPrototype)entity).BaseProductivityBonus = (double)objJToken["base_module_effects"]["productivity"]; + ((AssemblerPrototype)entity).BasePollutionBonus = (double)objJToken["base_module_effects"]["pollution"]; + ((AssemblerPrototype)entity).BaseQualityBonus = (double)objJToken["base_module_effects"]["quality"]; + ((AssemblerPrototype)entity).AllowModules = (bool)objJToken["uses_module_effects"]; + ((AssemblerPrototype)entity).AllowBeacons = (bool)objJToken["uses_beacon_effects"]; + } + + foreach (ModulePrototype module in modules.Values.Cast()) + { + bool validModule = ((bool)objJToken["allowed_effects"]["consumption"] || module.ConsumptionBonus >= 0) && + ((bool)objJToken["allowed_effects"]["speed"] || module.SpeedBonus <= 0) && + ((bool)objJToken["allowed_effects"]["productivity"] || module.ProductivityBonus <= 0) && + ((bool)objJToken["allowed_effects"]["pollution"] || module.PollutionBonus >= 0) && + ((bool)objJToken["allowed_effects"]["quality"] || module.QualityBonus <= 0); + + if (objJToken["allowed_module_categories"] != null) + { + foreach (var moduleCategoryJToken in objJToken["allowed_module_categories"].ToList()) + { + validModule &= (module.Category == (string)moduleCategoryJToken); + } + } + + if (validModule) + { + entity.modules.Add(module); + if (entity is AssemblerPrototype aEntity) + module.assemblers.Add(aEntity); + else if (entity is BeaconPrototype bEntity) + module.beacons.Add(bEntity); + } + } } //energy types @@ -863,13 +1025,13 @@ private void ProcessEntity(JToken objJToken, Dictionary i if (etype == EntityType.Beacon) { BeaconPrototype bEntity = (BeaconPrototype)entity; - bEntity.BeaconEffectivity = objJToken["distribution_effectivity"] == null ? 0.5f : (double)objJToken["distribution_effectivity"]; - beacons.Add(bEntity.Name, bEntity); + + if (BeaconAdditionalProcessing(objJToken, bEntity)) + beacons.Add(bEntity.Name, bEntity); } else { AssemblerPrototype aEntity = (AssemblerPrototype)entity; - aEntity.BaseProductivityBonus = objJToken["base_productivity"] == null ? 0f : (double)objJToken["base_productivity"]; bool success = false; switch (etype) @@ -887,10 +1049,10 @@ private void ProcessEntity(JToken objJToken, Dictionary i success = GeneratorAdditionalProcessing(objJToken, aEntity); break; case EntityType.Miner: - success = MinerAdditionalProcessing(objJToken, aEntity, resourceCategories); + success = MinerAdditionalProcessing(objJToken, aEntity, resourceCategories, miningWithFluidRecipes); break; case EntityType.OffshorePump: - success = OffshorePumpAdditionalProcessing(objJToken, aEntity); + success = OffshorePumpAdditionalProcessing(objJToken, aEntity, resourceCategories["<>"]); break; case EntityType.Reactor: success = ReactorAdditionalProcessing(objJToken, aEntity); @@ -904,14 +1066,28 @@ private void ProcessEntity(JToken objJToken, Dictionary i private void EntityEnergyFurtherProcessing(JToken objJToken, EntityObjectBasePrototype entity, Dictionary> fuelCategories) { entity.ConsumptionEffectivity = (double)objJToken["fuel_effectivity"]; - entity.Pollution = (double)objJToken["pollution"]; //calculated as per energy, so no tick to second conversion necessary - entity.EnergyProduction = (double)objJToken["energy_production"] * 60f; //in seconds + //pollution + if(objJToken is JObject objJObject) + { + Dictionary pollutions = objJObject["pollution"].ToObject>(); + foreach (KeyValuePair pollution in pollutions) + entity.pollution.Add(pollution.Key, pollution.Value); + } + + //energy production + foreach (JToken speedToken in objJToken["q_energy_production"]) + entity.energyProduction.Add(qualities[(string)speedToken["quality"]], (double)speedToken["value"] * 60.0f); //60 = convert ticks to seconds + + //energy consumption + entity.energyDrain = objJToken["drain"] != null ? (double)objJToken["drain"] * 60f : 0; //seconds + foreach (JToken speedToken in objJToken["q_max_energy_usage"]) + entity.energyConsumption.Add(qualities[(string)speedToken["quality"]], (double)speedToken["value"] * 60.0f); //60 = convert ticks to seconds + + //fuel processing switch (entity.EnergySource) { case EnergySource.Burner: - entity.EnergyDrain = 0; - entity.EnergyConsumption = (double)objJToken["max_energy_usage"] * 60f; //in seconds foreach (var categoryJToken in objJToken["fuel_categories"]) { if (fuelCategories.ContainsKey((string)categoryJToken)) @@ -926,9 +1102,6 @@ private void EntityEnergyFurtherProcessing(JToken objJToken, EntityObjectBasePro break; case EnergySource.FluidBurner: - entity.EnergyDrain = 0; - entity.EnergyConsumption = (double)objJToken["max_energy_usage"] * 60f; //in seconds - entity.IsTemperatureFluidBurner = !(bool)objJToken["burns_fluid"]; entity.FluidFuelTemperatureRange = new fRange(objJToken["minimum_fuel_temperature"] == null ? double.NegativeInfinity : (double)objJToken["minimum_fuel_temperature"], objJToken["maximum_fuel_temperature"] == null ? double.PositiveInfinity : (double)objJToken["maximum_fuel_temperature"]); string fuelFilter = objJToken["fuel_filter"] == null ? null : (string)objJToken["fuel_filter"]; @@ -955,7 +1128,7 @@ private void EntityEnergyFurtherProcessing(JToken objJToken, EntityObjectBasePro } else //ok, this is a bit of a FK U, but this basically means this entity can burn any fluid, and burns it as a temperature range. This is how the old steam generators worked (where you could feed in hot sulfuric acid and it would just burn through it no problem). If you want to use it, fine. Here you go. { - foreach(FluidPrototype fluid in items.Values.Where(i => i is Fluid)) + foreach(FluidPrototype fluid in items.Values.Where(i => i is Fluid).Cast()) { entity.fuels.Add(fluid); fluid.fuelsEntities.Add(entity); @@ -964,25 +1137,48 @@ private void EntityEnergyFurtherProcessing(JToken objJToken, EntityObjectBasePro break; case EnergySource.Heat: - entity.EnergyDrain = 0; - entity.EnergyConsumption = (double)objJToken["max_energy_usage"] * 60f; //in seconds entity.fuels.Add(HeatItem); HeatItem.fuelsEntities.Add(entity); break; case EnergySource.Electric: - entity.EnergyDrain = (double)objJToken["drain"] * 60f; //seconds - entity.EnergyConsumption = (double)objJToken["max_energy_usage"] * 60f; //seconds break; case EnergySource.Void: default: - entity.EnergyConsumption = 0; - entity.EnergyDrain = 0; break; } } + private bool BeaconAdditionalProcessing(JToken objJToken, BeaconPrototype bEntity) + { + bEntity.DistributionEffectivity = objJToken["distribution_effectivity"] == null ? 0.5f : (double)objJToken["distribution_effectivity"]; + bEntity.DistributionEffectivityQualityBoost = objJToken["distribution_effectivity_bonus_per_quality_level"] == null ? 0f : (double)objJToken["distribution_effectivity_bonus_per_quality_level"]; + + if (objJToken["profile"] != null) + { + int quantity = 1; + double lastProfile = 0.5f; + foreach(var profileJToken in objJToken["profile"]) + { + lastProfile = (double)profileJToken; + bEntity.profile[quantity] = lastProfile; + + quantity++; + if (quantity >= bEntity.profile.Length) + break; + } + while(quantity < bEntity.profile.Length) + { + bEntity.profile[quantity] = lastProfile; + quantity++; + } + bEntity.profile[0] = bEntity.profile[1]; //helps with calculating partial beacon values (ex: 0.5 beacons) + } + + return true; + } + private bool AssemblerAdditionalProcessing(JToken objJToken, AssemblerPrototype aEntity, Dictionary> craftingCategories) //recipe user { foreach (var categoryJToken in objJToken["crafting_categories"]) @@ -1002,7 +1198,7 @@ private bool AssemblerAdditionalProcessing(JToken objJToken, AssemblerPrototype return true; } - private bool MinerAdditionalProcessing(JToken objJToken, AssemblerPrototype aEntity, Dictionary> resourceCategories) //resource provider + private bool MinerAdditionalProcessing(JToken objJToken, AssemblerPrototype aEntity, Dictionary> resourceCategories, List miningWithFluidRecipes) //resource provider { foreach (var categoryJToken in objJToken["resource_categories"]) { @@ -1012,7 +1208,9 @@ private bool MinerAdditionalProcessing(JToken objJToken, AssemblerPrototype aEnt { if (TestRecipeEntityPipeFit(recipe, objJToken)) { - ProcessEntityRecipeTechlink(aEntity, recipe); + if(!miningWithFluidRecipes.Contains(recipe)) + ProcessEntityRecipeTechlink(aEntity, recipe); + recipe.assemblers.Add(aEntity); aEntity.recipes.Add(recipe); } @@ -1022,47 +1220,51 @@ private bool MinerAdditionalProcessing(JToken objJToken, AssemblerPrototype aEnt return true; } - private bool OffshorePumpAdditionalProcessing(JToken objJToken, AssemblerPrototype aEntity) //fluid provider (vanilla -> water, mods can add extra) + private bool OffshorePumpAdditionalProcessing(JToken objJToken, AssemblerPrototype aEntity, List waterPumpRecipes) { - if (objJToken["fluid_product"] == null) - return false; - - string fluidName = (string)objJToken["fluid_product"]; - ItemPrototype fluid = (ItemPrototype)items[fluidName]; + //check if the pump has a specified 'output' fluid preset. if yes then only that recipe is added to it; if not then all water tile resource recipes are added + List outPipeFilters = objJToken["out_pipe_filters"].Select(o => (string)o).ToList(); - //now to add an extra recipe that will be used to 'mine' this fluid - RecipePrototype recipe; - string extractionRecipeName = "§§r:e:" + fluid.Name; - if (!recipes.ContainsKey(extractionRecipeName)) + if (outPipeFilters.Count != 0) { - recipe = new RecipePrototype( - this, - extractionRecipeName, - fluid.FriendlyName + " Extraction", - extractionSubgroupFluidsOP, - fluid.Name); + if (recipes.TryGetValue(GetExtractionRecipeName(outPipeFilters[0]), out Recipe extractionRecipe)) + { + ProcessEntityRecipeTechlink(aEntity, (RecipePrototype)extractionRecipe); + ((RecipePrototype)extractionRecipe).assemblers.Add(aEntity); + aEntity.recipes.Add((RecipePrototype)extractionRecipe); + } + else + { + //add new recipe + if (!items.TryGetValue(outPipeFilters[0], out Item extractionFluid)) + return false; - recipe.SetIconAndColor(new IconColorPair(fluid.Icon, fluid.AverageColor)); - recipe.Time = 1; + RecipePrototype recipe = new RecipePrototype( + this, + GetExtractionRecipeName(outPipeFilters[0]), + extractionFluid.FriendlyName + " Extraction", + extractionSubgroupFluids, + extractionFluid.Name); - recipe.InternalOneWayAddProduct(fluid, 60, 60); - fluid.productionRecipes.Add(recipe); + recipe.Time = 1; + recipe.InternalOneWayAddProduct((ItemPrototype)extractionFluid, 60, 60); + ((ItemPrototype)extractionFluid).productionRecipes.Add(recipe); - foreach (ModulePrototype module in modules.Values) //we will let the assembler sort out which module can be used with this recipe - { - module.recipes.Add(recipe); - recipe.modules.Add(module); - } + recipe.SetIconAndColor(new IconColorPair(recipe.productList[0].Icon, recipe.productList[0].AverageColor)); - recipes.Add(recipe.Name, recipe); + recipes.Add(recipe.Name, recipe); + } } else - recipe = (RecipePrototype)recipes[extractionRecipeName]; - - ProcessEntityRecipeTechlink(aEntity, recipe); - recipe.assemblers.Add(aEntity); - aEntity.recipes.Add(recipe); + { + foreach (RecipePrototype recipe in waterPumpRecipes) + { + ProcessEntityRecipeTechlink(aEntity, recipe); + recipe.assemblers.Add(aEntity); + aEntity.recipes.Add(recipe); + } + } return true; } @@ -1072,7 +1274,7 @@ private bool OffshorePumpAdditionalProcessing(JToken objJToken, AssemblerPrototy if (objJToken["fluid_ingredient"] == null || objJToken["fluid_product"] == null) return false; FluidPrototype ingredient = (FluidPrototype)items[(string)objJToken["fluid_ingredient"]]; - ItemPrototype product = (ItemPrototype)items[(string)objJToken["fluid_product"]]; + FluidPrototype product = (FluidPrototype)items[(string)objJToken["fluid_product"]]; //boiler is a ingredient to product conversion with product coming out at the target_temperature *C at a rate based on energy efficiency & energy use to bring the INGREDIENT to the given temperature (basically ingredient goes from default temp to target temp, then shifts to product). we will add an extra recipe for this double temp = (double)objJToken["target_temperature"]; @@ -1083,9 +1285,14 @@ private bool OffshorePumpAdditionalProcessing(JToken objJToken, AssemblerPrototy //then the values calculated here will be wrong. //Still, for now I will leave it as is. if (ingredient.SpecificHeatCapacity == 0) - aEntity.Speed = 0; - else - aEntity.Speed = (double)(aEntity.EnergyConsumption / ((temp - ingredient.DefaultTemperature) * ingredient.SpecificHeatCapacity * 60)); //by placing this here we can keep the recipe as a 1 sec -> 60 production, simplifying recipe comparing for presets. + { + foreach (Quality quality in qualities.Values) + aEntity.speed.Add(quality, 0); + } else + { + foreach (Quality quality in qualities.Values) + aEntity.speed.Add(quality, (double)(aEntity.GetEnergyConsumption(quality) / ((temp - ingredient.DefaultTemperature) * ingredient.SpecificHeatCapacity * 60))); //by placing this here we can keep the recipe as a 1 sec -> 60 production, simplifying recipe comparing for presets. + } RecipePrototype recipe; string boilRecipeName = string.Format("§§r:b:{0}:{1}:{2}", ingredient.Name, product.Name, temp.ToString()); @@ -1104,11 +1311,13 @@ private bool OffshorePumpAdditionalProcessing(JToken objJToken, AssemblerPrototy recipe.InternalOneWayAddIngredient(ingredient, 60); ingredient.consumptionRecipes.Add(recipe); - recipe.InternalOneWayAddProduct(product, 60, 60, temp); + + double productQuantity = 60 * ingredient.SpecificHeatCapacity / product.SpecificHeatCapacity; + recipe.InternalOneWayAddProduct(product, productQuantity, productQuantity, temp); product.productionRecipes.Add(recipe); - foreach (ModulePrototype module in modules.Values) //we will let the assembler sort out which module can be used with this recipe + foreach (ModulePrototype module in modules.Values.Cast()) //we will let the assembler sort out which module can be used with this recipe { module.recipes.Add(recipe); recipe.modules.Add(module); @@ -1132,7 +1341,12 @@ private bool GeneratorAdditionalProcessing(JToken objJToken, AssemblerPrototype return false; FluidPrototype ingredient = (FluidPrototype)items[(string)objJToken["fluid_ingredient"]]; - aEntity.Speed = (double)objJToken["fluid_usage_per_tick"]; + double baseSpeed = (double)objJToken["fluid_usage_per_tick"]; + double baseEnergyProduction = (double)objJToken["max_power_output"] * 60f; //in seconds + + foreach (Quality quality in qualities.Values) + aEntity.speed.Add(quality, baseSpeed * aEntity.GetEnergyProduction(quality) / baseEnergyProduction); + aEntity.OperationTemperature = (double)objJToken["full_power_temperature"]; double minTemp = (double)(objJToken["minimum_temperature"] ?? double.NaN); double maxTemp = (double)(objJToken["maximum_temperature"] ?? double.NaN); @@ -1160,7 +1374,7 @@ private bool GeneratorAdditionalProcessing(JToken objJToken, AssemblerPrototype ingredient.consumptionRecipes.Add(recipe); - foreach (ModulePrototype module in modules.Values) //we will let the assembler sort out which module can be used with this recipe + foreach (ModulePrototype module in modules.Values.Cast()) //we will let the assembler sort out which module can be used with this recipe { module.recipes.Add(recipe); recipe.modules.Add(module); @@ -1184,7 +1398,8 @@ private bool BurnerGeneratorAdditionalProcessing(JToken objJToken, AssemblerProt BurnerRecipe.assemblers.Add(aEntity); ProcessEntityRecipeTechlink(aEntity, BurnerRecipe); - aEntity.Speed = 1f; //doesnt matter -> the recipe is empty. + foreach (Quality quality in qualities.Values) + aEntity.speed.Add(quality, 1f); //doesnt matter - recipe is empty return true; } @@ -1196,7 +1411,8 @@ private bool ReactorAdditionalProcessing(JToken objJToken, AssemblerPrototype aE HeatRecipe.assemblers.Add(aEntity); ProcessEntityRecipeTechlink(aEntity, HeatRecipe); - aEntity.Speed = (aEntity.EnergyConsumption) / HeatItem.FuelValue; //the speed of producing 1MJ of energy as heat for this reactor + foreach (Quality quality in qualities.Values) + aEntity.speed.Add(quality, (aEntity.GetEnergyConsumption(quality)) / HeatItem.FuelValue); //the speed of producing 1MJ of energy as heat for this reactor based on quality return true; } @@ -1214,7 +1430,7 @@ private void ProcessEntityRecipeTechlink(EntityObjectBasePrototype entity, Recip { foreach (Recipe placeItemRecipe in placeItem.ProductionRecipes) { - foreach (TechnologyPrototype tech in placeItemRecipe.MyUnlockTechnologies) + foreach (TechnologyPrototype tech in placeItemRecipe.MyUnlockTechnologies.Cast()) { recipe.myUnlockTechnologies.Add(tech); tech.unlockedRecipes.Add(recipe); @@ -1235,7 +1451,7 @@ private void ProcessEntityRecipeTechlink(EntityObjectBasePrototype entity, Recip int inCount = 0; //unfiltered int outCount = 0; //unfiltered - foreach(Fluid inFluid in recipe.ingredientList.Where(i => i is Fluid)) + foreach(ItemPrototype inFluid in recipe.ingredientList.Where(i => i is Fluid)) { if (inPipeFilters.Contains(inFluid.Name)) { @@ -1250,7 +1466,7 @@ private void ProcessEntityRecipeTechlink(EntityObjectBasePrototype entity, Recip else inCount++; } - foreach (Fluid outFluid in recipe.productList.Where(i => i is Fluid)) + foreach (ItemPrototype outFluid in recipe.productList.Where(i => i is Fluid)) { if (outPipeFilters.Contains(outFluid.Name)) { @@ -1299,7 +1515,7 @@ private void ProcessRocketLaunch(JToken objJToken) int inputSize = launchItem.StackSize; Dictionary products = new Dictionary(); Dictionary productTemp = new Dictionary(); - foreach (var productJToken in objJToken["launch_products"].ToList()) + foreach (var productJToken in objJToken["rocket_launch_products"].ToList()) { ItemPrototype product = (ItemPrototype)items[(string)productJToken["name"]]; double amount = (double)productJToken["amount"]; @@ -1402,11 +1618,11 @@ void UpdateSciencePackPrerequisites(Item sciPack) } //step 1: update tech unlock status & science packs (add a 0 cost pack to the tech if it has no such requirement but its prerequisites do), set tech tier - foreach (TechnologyPrototype tech in technologies.Values) + foreach (TechnologyPrototype tech in technologies.Values.Cast()) { TechRequiredSciPacks(tech); GetTechnologyTier(tech); - foreach (ItemPrototype sciPack in techRequirements[tech]) + foreach (ItemPrototype sciPack in techRequirements[tech].Cast()) tech.InternalOneWayAddSciPack(sciPack, 0); } @@ -1416,14 +1632,14 @@ void UpdateSciencePackPrerequisites(Item sciPack) //step 2.5: update the technology science packs to account for the science pack prerequisites - foreach (TechnologyPrototype tech in technologies.Values) + foreach (TechnologyPrototype tech in technologies.Values.Cast()) foreach (Item sciPack in tech.SciPackList.ToList()) - foreach (ItemPrototype reqSciPack in sciencePackPrerequisites[sciPack]) + foreach (ItemPrototype reqSciPack in sciencePackPrerequisites[sciPack].Cast()) tech.InternalOneWayAddSciPack(reqSciPack, 0); //step 3: calculate science pack tier (minimum tier of technology that unlocks the recipe for the given science pack). also make the sciencePacks list. Dictionary sciencePackTiers = new Dictionary(); - foreach (ItemPrototype sciPack in sciPacks) + foreach (ItemPrototype sciPack in sciPacks.Cast()) { int minTier = int.MaxValue; foreach (Recipe recipe in sciPack.productionRecipes) @@ -1437,11 +1653,11 @@ void UpdateSciencePackPrerequisites(Item sciPack) //step 4: update all science pack lists (main sciencePacks list, plus SciPackList of every technology). Sorting is done by A: if science pack B has science pack A as a prerequisite (in sciPackRequiredPacks), then B goes after A. If neither has the other as a prerequisite, then compare by sciencePack tiers sciencePacks.Sort((s1, s2) => sciencePackTiers[s1].CompareTo(sciencePackTiers[s2]) + (sciencePackPrerequisites[s1].Contains(s2) ? 1000 : sciencePackPrerequisites[s2].Contains(s1) ? -1000 : 0)); - foreach (TechnologyPrototype tech in technologies.Values) + foreach (TechnologyPrototype tech in technologies.Values.Cast()) tech.sciPackList.Sort((s1, s2) => sciencePackTiers[s1].CompareTo(sciencePackTiers[s2]) + (sciencePackPrerequisites[s1].Contains(s2) ? 1000 : sciencePackPrerequisites[s2].Contains(s1) ? -1000 : 0)); //step 5: create science pack lists for each recipe (list of distinct min-pack sets -> ex: if recipe can be aquired through 4 techs with [ A+B, A+B, A+C, A+B+C ] science pack requirements, we will only include A+B and A+C - foreach (RecipePrototype recipe in recipes.Values) + foreach (RecipePrototype recipe in recipes.Values.Cast()) { List> sciPackLists = new List>(); foreach (TechnologyPrototype tech in recipe.myUnlockTechnologies) diff --git a/Foreman/DataCache/DataTypes/Assembler.cs b/Foreman/DataCache/DataTypes/Assembler.cs index fe32e4e5..b88e6118 100644 --- a/Foreman/DataCache/DataTypes/Assembler.cs +++ b/Foreman/DataCache/DataTypes/Assembler.cs @@ -7,18 +7,41 @@ namespace Foreman public interface Assembler : EntityObjectBase { IReadOnlyCollection Recipes { get; } + double BaseSpeedBonus { get; } double BaseProductivityBonus { get; } + double BaseConsumptionBonus { get; } + double BasePollutionBonus { get; } + double BaseQualityBonus { get; } + + bool AllowBeacons { get; } + bool AllowModules { get; } } internal class AssemblerPrototype : EntityObjectBasePrototype, Assembler { public IReadOnlyCollection Recipes { get { return recipes; } } - public double BaseProductivityBonus { get; set; } + public double BaseSpeedBonus { get; set; } + public double BaseProductivityBonus { get; set; } + public double BaseConsumptionBonus { get; set; } + public double BasePollutionBonus { get; set; } + public double BaseQualityBonus { get; set; } + + public bool AllowBeacons { get; internal set; } + public bool AllowModules { get; internal set; } internal HashSet recipes { get; private set; } public AssemblerPrototype(DataCache dCache, string name, string friendlyName, EntityType type, EnergySource source, bool isMissing = false) : base(dCache, name, friendlyName, type, source, isMissing) { + BaseSpeedBonus = 0; + BaseProductivityBonus = 0; + BaseConsumptionBonus = 0; + BasePollutionBonus = 0; + BaseQualityBonus = 0; + + AllowBeacons = false; //assumed to be default? no info in LUA + AllowModules = false; //assumed to be default? no info in LUA + recipes = new HashSet(); } diff --git a/Foreman/DataCache/DataTypes/Beacon.cs b/Foreman/DataCache/DataTypes/Beacon.cs index 98bcc31f..0f986fd8 100644 --- a/Foreman/DataCache/DataTypes/Beacon.cs +++ b/Foreman/DataCache/DataTypes/Beacon.cs @@ -1,18 +1,53 @@  +using System; +using System.Collections.Generic; + namespace Foreman { + public interface Beacon : EntityObjectBase { - double BeaconEffectivity { get; } + double GetBeaconEffectivity(Quality quality, double beaconCount); } internal class BeaconPrototype : EntityObjectBasePrototype, Beacon { - public double BeaconEffectivity { get; set; } + + public double GetBeaconEffectivity(Quality quality, double beaconCount) + { + if (beaconCount <= 0) + return 0; + if(beaconCount > 999) + beaconCount = 999; + + int baseCount = (int)Math.Truncate(beaconCount); + double remainder = beaconCount - baseCount; + + double lowerBeaconEffectivity = baseCount * GetBeaconEffectivityBase(quality, baseCount); + double upperBeaconEffectivity = (baseCount + 1) * GetBeaconEffectivityBase(quality, baseCount + 1); + + return (((1 - remainder) * lowerBeaconEffectivity) + (remainder * upperBeaconEffectivity)) / beaconCount; + //just to explain - we need to calculate the 'average' beacon effectivity for a beacon count of (for example) 1.6: + //this means that for every 10 assemblers you have 6 with 2 beacons and 4 with 1 beacon. So calculate the total bonus and divide it by beaconCount. + //therefore 10 assemblers with beacon count of 1.6 will produce exactly the same amount as 6 assemblers with 2 beacons + 4 assemblers with 1 beacon + } + + private double GetBeaconEffectivityBase(Quality quality, int beaconCount) + { + return profile[beaconCount] * (DistributionEffectivity + (quality.Level * DistributionEffectivityQualityBoost)); + } + + internal double DistributionEffectivity { get; set; } + internal double DistributionEffectivityQualityBoost { get; set; } + + internal double[] profile { get; private set; } //off by 1 from factorio (or more akin same index as LUA starts from 0) ==> profile[x] is the multiplier for x beacons (so profile[0] is multiplier for 0 beacons...) public BeaconPrototype(DataCache dCache, string name, string friendlyName, EnergySource source, bool isMissing = false) : base(dCache, name, friendlyName, EntityType.Beacon, source, isMissing) { - BeaconEffectivity = 0.5f; + profile = new double[1000]; + for(int i = 1; i < profile.Length; i++) { profile[i] = 0.5f; } + DistributionEffectivity = 0.5f; + DistributionEffectivityQualityBoost = 0f; } public override string ToString() { return string.Format("Beacon: {0}", Name); } diff --git a/Foreman/DataCache/DataTypes/EntityObjectBase.cs b/Foreman/DataCache/DataTypes/EntityObjectBase.cs index 13e41aca..db105059 100644 --- a/Foreman/DataCache/DataTypes/EntityObjectBase.cs +++ b/Foreman/DataCache/DataTypes/EntityObjectBase.cs @@ -17,6 +17,7 @@ public interface EntityObjectBase : DataObjectBase IReadOnlyCollection Modules { get; } IReadOnlyCollection Fuels { get; } IReadOnlyCollection AssociatedItems { get; } + IReadOnlyDictionary Pollution { get; } EntityType EntityType { get; } string GetEntityTypeName(bool plural); @@ -25,19 +26,19 @@ public interface EntityObjectBase : DataObjectBase bool IsTemperatureFluidBurner { get; } fRange FluidFuelTemperatureRange { get; } - double GetBaseFuelConsumptionRate(Item fuel, double temperature = double.NaN); + double GetBaseFuelConsumptionRate(Item fuel, Quality quality, double temperature = double.NaN); bool IsMissing { get; } - double Speed { get; } + double GetSpeed(Quality quality); int ModuleSlots { get; } - double EnergyDrain { get; } - double EnergyConsumption { get; } - double EnergyProduction { get; } + double GetEnergyDrain(); + double GetEnergyConsumption(Quality quality); + double GetEnergyProduction(Quality quality); + double ConsumptionEffectivity { get; } - double Pollution { get; } //steam generators double OperationTemperature { get; } @@ -53,10 +54,12 @@ internal class EntityObjectBasePrototype : DataObjectBasePrototype, EntityObject public IReadOnlyCollection Modules { get { return modules; } } public IReadOnlyCollection Fuels { get { return fuels; } } public IReadOnlyCollection AssociatedItems { get { return associatedItems; } } + public IReadOnlyDictionary Pollution { get { return pollution; } } internal HashSet modules { get; private set; } internal HashSet fuels { get; private set; } internal List associatedItems { get; private set; } //should honestly only be 1, but knowing modders.... + internal Dictionary pollution { get; private set; } public EntityType EntityType { get; private set; } public EnergySource EnergySource { get; internal set; } @@ -65,20 +68,29 @@ internal class EntityObjectBasePrototype : DataObjectBasePrototype, EntityObject public bool IsTemperatureFluidBurner { get; set; } public fRange FluidFuelTemperatureRange { get; set; } - private double speed; - public double Speed { get { return speed; } internal set { speed = value == 0 ? 0.001 : value; } } + internal Dictionary speed { get; private set; } + internal Dictionary energyConsumption { get; private set; } + internal Dictionary energyProduction { get; private set; } + + public double GetSpeed(Quality quality) { return speed.ContainsKey(quality)? (speed[quality] > 0 ? speed[quality] : 1) : 1; } public int ModuleSlots { get; internal set; } public double NeighbourBonus { get; internal set; } - public double EnergyDrain { get; internal set; } //per second - public double EnergyConsumption { get; internal set; } - public double EnergyProduction { get; internal set; } + internal double energyDrain; + public double GetEnergyDrain() { return energyDrain; } + public double GetEnergyConsumption(Quality quality) + { + if(this is BeaconPrototype) + return quality.BeaconPowerMultiplier * (energyConsumption.ContainsKey(quality) ? energyConsumption[quality] : 1000); + else + return energyConsumption.ContainsKey(quality)? energyConsumption[quality] : 1000; + } + public double GetEnergyProduction(Quality quality) { return energyConsumption.ContainsKey(quality)? energyProduction[quality] : 0; } + public double ConsumptionEffectivity { get; internal set; } public double OperationTemperature { get; internal set; } - public double Pollution { get; internal set; } - public EntityObjectBasePrototype(DataCache dCache, string name, string friendlyName, EntityType type, EnergySource source, bool isMissing) : base(dCache, name, friendlyName, "-") { availableOverride = false; @@ -86,35 +98,35 @@ public EntityObjectBasePrototype(DataCache dCache, string name, string friendlyN modules = new HashSet(); fuels = new HashSet(); associatedItems = new List(); + pollution = new Dictionary(); + + speed = new Dictionary(); + energyConsumption = new Dictionary(); + energyProduction = new Dictionary(); IsMissing = isMissing; EntityType = type; EnergySource = source; //just some base defaults -> helps prevent overflow errors during solving if the assembler is a missing entity - Speed = 1f; ModuleSlots = 0; NeighbourBonus = 0; - EnergyDrain = 0; //passive use (pretty much electricity only) - EnergyConsumption = 1000; //default value to prevent issues with missing objects - EnergyProduction = 0; ConsumptionEffectivity = 1f; OperationTemperature = double.MaxValue; FluidFuelTemperatureRange = new fRange(double.MinValue, double.MaxValue); - Pollution = 0; } - public double GetBaseFuelConsumptionRate(Item fuel, double temperature = double.NaN) + public double GetBaseFuelConsumptionRate(Item fuel, Quality quality, double temperature = double.NaN) { if ((EnergySource != EnergySource.Burner && EnergySource != EnergySource.FluidBurner && EnergySource != EnergySource.Heat)) Trace.Fail(string.Format("Cant ask for fuel consumption rate on a non-burner! {0}", this)); else if (!fuels.Contains(fuel)) Trace.Fail(string.Format("Invalid fuel! {0} for entity {1}", fuel, this)); else if (!IsTemperatureFluidBurner) - return EnergyConsumption / (fuel.FuelValue * ConsumptionEffectivity); + return GetEnergyConsumption(quality) / (fuel.FuelValue * ConsumptionEffectivity); else if (!double.IsNaN(temperature) && (fuel is Fluid fluidFuel) && (temperature > fluidFuel.DefaultTemperature) && (fluidFuel.SpecificHeatCapacity > 0)) //temperature burn of liquid - return EnergyConsumption / ((temperature - fluidFuel.DefaultTemperature) * fluidFuel.SpecificHeatCapacity * ConsumptionEffectivity); + return GetEnergyConsumption(quality) / ((temperature - fluidFuel.DefaultTemperature) * fluidFuel.SpecificHeatCapacity * ConsumptionEffectivity); return 0.01; // we cant have a 0 consumption rate as that would mess with the solver. } diff --git a/Foreman/DataCache/DataTypes/Fluid.cs b/Foreman/DataCache/DataTypes/Fluid.cs index ce9e7b0b..0e81b5d2 100644 --- a/Foreman/DataCache/DataTypes/Fluid.cs +++ b/Foreman/DataCache/DataTypes/Fluid.cs @@ -11,6 +11,8 @@ public interface Fluid : Item bool IsTemperatureDependent { get; } double DefaultTemperature { get; } double SpecificHeatCapacity { get; } + double GasTemperature { get; } + double MaxTemperature { get; } string GetTemperatureRangeFriendlyName(fRange tempRange); string GetTemperatureFriendlyName(double temperature); @@ -21,12 +23,16 @@ public class FluidPrototype : ItemPrototype, Fluid public bool IsTemperatureDependent { get; internal set; } //true if not all recipes can accept each other (ex: fluid produced in R1 is at 10*c, and is required to be at 20+*c as ingredient at R2) public double DefaultTemperature { get; internal set; } public double SpecificHeatCapacity { get; internal set; } + public double GasTemperature { get; internal set; } + public double MaxTemperature { get; internal set; } public FluidPrototype(DataCache dCache, string name, string friendlyName, SubgroupPrototype subgroup, string order, bool isMissing = false) : base(dCache, name, friendlyName, subgroup, order, isMissing) { IsTemperatureDependent = false; DefaultTemperature = 0; SpecificHeatCapacity = 0; + GasTemperature = 0; + MaxTemperature = 0; } public string GetTemperatureRangeFriendlyName(fRange tempRange) diff --git a/Foreman/DataCache/DataTypes/Item.cs b/Foreman/DataCache/DataTypes/Item.cs index 8bae35b3..32f6ff62 100644 --- a/Foreman/DataCache/DataTypes/Item.cs +++ b/Foreman/DataCache/DataTypes/Item.cs @@ -17,11 +17,22 @@ public interface Item : DataObjectBase int StackSize { get; } + double Weight { get; } + double IngredientToWeightCoefficient { get; } double FuelValue { get; } double PollutionMultiplier { get; } + Item BurnResult { get; } + Item PlantResult { get; } + Item SpoilResult { get; } + Item FuelOrigin { get; } + Item PlantOrigin { get; } + Item SpoilOrigin { get; } + IReadOnlyCollection FuelsEntities { get; } + + //spoil ticks are ignored - its assumed that if there is a plant/spoil result then the ticks are at least low enough to make it viable on a world basis } public class ItemPrototype : DataObjectBasePrototype, Item @@ -36,10 +47,19 @@ public class ItemPrototype : DataObjectBasePrototype, Item public int StackSize { get; set; } + public double Weight { get; set; } + public double IngredientToWeightCoefficient { get; set; } public double FuelValue { get; internal set; } public double PollutionMultiplier { get; internal set; } + public Item BurnResult { get; internal set; } + public Item PlantResult { get; internal set; } + public Item SpoilResult { get; internal set; } + public Item FuelOrigin { get; internal set; } + public Item PlantOrigin { get; internal set; } + public Item SpoilOrigin { get; internal set; } + public IReadOnlyCollection FuelsEntities { get { return fuelsEntities; } } internal SubgroupPrototype mySubgroup; @@ -61,6 +81,8 @@ public ItemPrototype(DataCache dCache, string name, string friendlyName, Subgrou consumptionTechnologies = new HashSet(); fuelsEntities = new HashSet(); + Weight = 0.01f; + IngredientToWeightCoefficient = 1f; FuelValue = 1f; //useful for preventing overlow issues when using missing items / non-fuel items (loading with wrong mods / importing from alt mod group can cause this) PollutionMultiplier = 1f; IsMissing = isMissing; diff --git a/Foreman/DataCache/DataTypes/Module.cs b/Foreman/DataCache/DataTypes/Module.cs index 12d69732..6a0fd28c 100644 --- a/Foreman/DataCache/DataTypes/Module.cs +++ b/Foreman/DataCache/DataTypes/Module.cs @@ -18,6 +18,9 @@ public interface Module : DataObjectBase double ProductivityBonus { get; } double ConsumptionBonus { get; } double PollutionBonus { get; } + double QualityBonus { get; } + + string Category { get; } int Tier { get; } @@ -32,10 +35,13 @@ public class ModulePrototype : DataObjectBasePrototype, Module public IReadOnlyCollection AvailableRecipes { get; private set; } public Item AssociatedItem { get { return Owner.Items[Name]; } } - public double SpeedBonus { get; set; } - public double ProductivityBonus { get; set; } - public double ConsumptionBonus { get; set; } - public double PollutionBonus { get; set; } + public double SpeedBonus { get; internal set; } + public double ProductivityBonus { get; internal set; } + public double ConsumptionBonus { get; internal set; } + public double PollutionBonus { get; internal set; } + public double QualityBonus { get; internal set; } + + public string Category { get; internal set; } public int Tier { get; set; } @@ -55,6 +61,10 @@ public ModulePrototype(DataCache dCache, string name, string friendlyName, bool ProductivityBonus = 0; ConsumptionBonus = 0; PollutionBonus = 0; + QualityBonus = 0; + + Category = ""; + recipes = new HashSet(); assemblers = new HashSet(); beacons = new HashSet(); diff --git a/Foreman/DataCache/DataTypes/Quality.cs b/Foreman/DataCache/DataTypes/Quality.cs new file mode 100644 index 00000000..a2d10cdc --- /dev/null +++ b/Foreman/DataCache/DataTypes/Quality.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; + +namespace Foreman +{ + public interface Quality : DataObjectBase + { + Quality NextQuality { get; } + Quality PrevQuality { get; } + double NextProbability { get; } + + int Level { get; } + double BeaconPowerMultiplier { get; } + double MiningDrillResourceDrainMultiplier { get; } + + } + + public class QualityPrototype : DataObjectBasePrototype, Quality + { + public Quality NextQuality { get; internal set; } + public Quality PrevQuality { get; internal set; } + public double NextProbability { get; set; } + + public int Level { get; set; } + public double BeaconPowerMultiplier { get; set; } + public double MiningDrillResourceDrainMultiplier { get; set; } + + public QualityPrototype(DataCache dCache, string name, string friendlyName, string order) : base(dCache, name, friendlyName, order) + { + Enabled = true; + + Level = 0; + BeaconPowerMultiplier = 1; + MiningDrillResourceDrainMultiplier = 1; + } + + public override string ToString() { return string.Format("Quality T{0}: {1}", Level, Name); } + } +} diff --git a/Foreman/DataCache/DataTypes/Recipe.cs b/Foreman/DataCache/DataTypes/Recipe.cs index 3a969c80..b6b4b6da 100644 --- a/Foreman/DataCache/DataTypes/Recipe.cs +++ b/Foreman/DataCache/DataTypes/Recipe.cs @@ -15,6 +15,14 @@ public interface Recipe : DataObjectBase long RecipeID { get; } bool IsMissing { get; } + bool AllowConsumptionBonus { get; } + bool AllowSpeedBonus { get; } + bool AllowProductivityBonus { get; } + bool AllowPollutionBonus { get; } + bool AllowQualityBonus { get; } + + double MaxProductivityBonus { get; } + IReadOnlyDictionary ProductSet { get; } IReadOnlyDictionary ProductPSet { get; } //extra productivity amounts [ actual amount = productSet + (productPSet * productivity bonus) ] IReadOnlyList ProductList { get; } @@ -34,6 +42,8 @@ public interface Recipe : DataObjectBase string GetProductFriendlyName(Item item); bool TestIngredientConnection(Recipe provider, Item ingredient); + //trash items (spoiled items from spoiling of items already inside assembler) are ignored + //planet conditions are ignored } public class RecipePrototype : DataObjectBasePrototype, Recipe @@ -75,10 +85,20 @@ public class RecipePrototype : DataObjectBasePrototype, Recipe public bool IsMissing { get; private set; } + public bool AllowConsumptionBonus { get; internal set; } + public bool AllowSpeedBonus { get; internal set; } + public bool AllowProductivityBonus { get; internal set; } + public bool AllowPollutionBonus { get; internal set; } + public bool AllowQualityBonus { get; internal set; } + + public double MaxProductivityBonus { get; internal set; } + private static long lastRecipeID = 0; public long RecipeID { get; private set; } - public RecipePrototype(DataCache dCache, string name, string friendlyName, SubgroupPrototype subgroup, string order, bool isMissing = false) : base(dCache, name, friendlyName, order) + internal bool HideFromPlayerCrafting { get; set; } + + public RecipePrototype(DataCache dCache, string name, string friendlyName, SubgroupPrototype subgroup, string order, bool isMissing = false) : base(dCache, name, friendlyName, order) { RecipeID = lastRecipeID++; @@ -88,6 +108,13 @@ public RecipePrototype(DataCache dCache, string name, string friendlyName, Subgr Time = 0.5f; this.Enabled = true; this.IsMissing = isMissing; + this.HideFromPlayerCrafting = false; + this.AllowConsumptionBonus = true; + this.AllowSpeedBonus = true; + this.AllowProductivityBonus = true; + this.AllowPollutionBonus = true; + this.AllowQualityBonus = true; + this.MaxProductivityBonus = 1000; ingredientSet = new Dictionary(); ingredientList = new List(); diff --git a/Foreman/DataCache/IconCacheProcessor.cs b/Foreman/DataCache/IconCacheProcessor.cs index 8e24f732..3e699e08 100644 --- a/Foreman/DataCache/IconCacheProcessor.cs +++ b/Foreman/DataCache/IconCacheProcessor.cs @@ -99,7 +99,7 @@ public bool PrepareModPaths(Dictionary modSet, string modsPath, string foundFile = files.FirstOrDefault(f => Regex.IsMatch(Path.GetFileName(f).ToLower(), string.Format("{0}_{1}.zip", mod.Key, versionMatch))); if (foundFile == null) { - if (mod.Key.ToLower() != "core" && mod.Key.ToLower() != "base" && mod.Key.ToLower() != "foremanexport") + if (mod.Key.ToLower() != "core" && mod.Key.ToLower() != "base" && mod.Key.ToLower() != "elevated-rails" && mod.Key.ToLower() != "quality" && mod.Key.ToLower() != "space-age") return false; continue; } @@ -126,6 +126,10 @@ public bool PrepareModPaths(Dictionary modSet, string modsPath, } folderLinks.Add("__core__", Path.Combine(dataPath, "core")); folderLinks.Add("__base__", Path.Combine(dataPath, "base")); + folderLinks.Add("__elevated-rails__", Path.Combine(dataPath, "elevated-rails")); + folderLinks.Add("__quality__", Path.Combine(dataPath, "quality")); + folderLinks.Add("__space-age__", Path.Combine(dataPath, "space-age")); + return true; } diff --git a/Foreman/Foreman.csproj b/Foreman/Foreman.csproj index ea76a312..bf7d56bc 100644 --- a/Foreman/Foreman.csproj +++ b/Foreman/Foreman.csproj @@ -161,6 +161,7 @@ + @@ -340,9 +341,6 @@ Always - - Always - Always @@ -358,17 +356,35 @@ Always + + Always + + + Always + + + Always + Always Always + + Always + + + Always + - + + Always + + Always - + Always diff --git a/Foreman/Forms/GraphSummaryForm.cs b/Foreman/Forms/GraphSummaryForm.cs index c269b42f..1809b006 100644 --- a/Foreman/Forms/GraphSummaryForm.cs +++ b/Foreman/Forms/GraphSummaryForm.cs @@ -199,7 +199,7 @@ private void LoadUnfilteredBeaconList(IEnumerable origin, Li lvItem.Name = beacon.Name; //key lvItem.BackColor = beacon.Available ? AvailableObjectColor : UnavailableObjectColor; lvItem.SubItems.Add(beacon.FriendlyName); - double beaconPowerConsumption = beaconCounters[beacon] * (beacon.EnergyConsumption + beacon.EnergyDrain); + double beaconPowerConsumption = beaconCounters[beacon] * (beacon.GetEnergyConsumption(beacon.Owner.DefaultQuality) + beacon.GetEnergyDrain()); //QUALITY UPDATE REQUIRED lvItem.SubItems.Add(new ListViewItem.ListViewSubItem() { Text = beaconCounters[beacon] == 0 ? "-" : GraphicsStuff.DoubleToEnergy(beaconPowerConsumption, "W"), Tag = beaconPowerConsumption }); lviList.Add(lvItem); } diff --git a/Foreman/Forms/MainForm.Designer.cs b/Foreman/Forms/MainForm.Designer.cs index 5253c9ff..44910bbc 100644 --- a/Foreman/Forms/MainForm.Designer.cs +++ b/Foreman/Forms/MainForm.Designer.cs @@ -28,338 +28,338 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.MainLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.GraphViewer = new Foreman.ProductionGraphViewer(); - this.MenuTable = new System.Windows.Forms.TableLayoutPanel(); - this.MenuButtonsTable = new System.Windows.Forms.TableLayoutPanel(); - this.HelpButton = new System.Windows.Forms.Button(); - this.SaveButton = new System.Windows.Forms.Button(); - this.AddItemButton = new System.Windows.Forms.Button(); - this.AddRecipeButton = new System.Windows.Forms.Button(); - this.ExportImageButton = new System.Windows.Forms.Button(); - this.EnableDisableButton = new System.Windows.Forms.Button(); - this.ImportGraphButton = new System.Windows.Forms.Button(); - this.NewGraphButton = new System.Windows.Forms.Button(); - this.LoadGraphButton = new System.Windows.Forms.Button(); - this.SaveAsGraphButton = new System.Windows.Forms.Button(); - this.GridLinesGroupBox = new System.Windows.Forms.GroupBox(); - this.GridlinesTable = new System.Windows.Forms.TableLayoutPanel(); - this.AlignSelectionButton = new System.Windows.Forms.Button(); - this.MinorGridlinesDropDown = new System.Windows.Forms.ComboBox(); - this.GridlinesCheckbox = new System.Windows.Forms.CheckBox(); - this.MajorGridlinesDropDown = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.ProductionGroupBox = new System.Windows.Forms.GroupBox(); - this.GraphOptionsTable = new System.Windows.Forms.TableLayoutPanel(); - this.IconViewCheckBox = new System.Windows.Forms.CheckBox(); - this.RateOptionsDropDown = new System.Windows.Forms.ComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.PauseUpdatesCheckbox = new System.Windows.Forms.CheckBox(); - this.GraphSummaryButton = new System.Windows.Forms.Button(); - this.VersionLabel = new System.Windows.Forms.Label(); - this.MainLayoutPanel.SuspendLayout(); - this.MenuTable.SuspendLayout(); - this.MenuButtonsTable.SuspendLayout(); - this.GridLinesGroupBox.SuspendLayout(); - this.GridlinesTable.SuspendLayout(); - this.ProductionGroupBox.SuspendLayout(); - this.GraphOptionsTable.SuspendLayout(); - this.SuspendLayout(); - // - // MainLayoutPanel - // - this.MainLayoutPanel.ColumnCount = 1; - this.MainLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MainLayoutPanel.Controls.Add(this.GraphViewer, 0, 1); - this.MainLayoutPanel.Controls.Add(this.MenuTable, 0, 0); - this.MainLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.MainLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.MainLayoutPanel.Margin = new System.Windows.Forms.Padding(0); - this.MainLayoutPanel.Name = "MainLayoutPanel"; - this.MainLayoutPanel.RowCount = 2; - this.MainLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.MainLayoutPanel.Size = new System.Drawing.Size(934, 761); - this.MainLayoutPanel.TabIndex = 1; - // - // GraphViewer - // - this.GraphViewer.AllowDrop = true; - this.GraphViewer.ArrowsOnLinks = false; - this.GraphViewer.AutoSize = true; - this.GraphViewer.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.GraphViewer.BackColor = System.Drawing.Color.White; - this.GraphViewer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.GraphViewer.DCache = null; - this.GraphViewer.Dock = System.Windows.Forms.DockStyle.Fill; - this.GraphViewer.IconsOnly = false; - this.GraphViewer.IconsSize = 32; - this.GraphViewer.LevelOfDetail = Foreman.ProductionGraphViewer.LOD.Medium; - this.GraphViewer.Location = new System.Drawing.Point(3, 136); - this.GraphViewer.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.GraphViewer.MouseDownElement = null; - this.GraphViewer.Name = "GraphViewer"; - this.GraphViewer.NodeCountForSimpleView = 200; - this.GraphViewer.ShowRecipeToolTip = false; - this.GraphViewer.Size = new System.Drawing.Size(928, 622); - this.GraphViewer.SmartNodeDirection = false; - this.GraphViewer.TabIndex = 12; - this.GraphViewer.TooltipsEnabled = true; - this.GraphViewer.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GraphViewer_KeyDown); - // - // MenuTable - // - this.MenuTable.AutoSize = true; - this.MenuTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MenuTable.ColumnCount = 6; - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuTable.Controls.Add(this.MenuButtonsTable, 0, 0); - this.MenuTable.Controls.Add(this.GridLinesGroupBox, 1, 0); - this.MenuTable.Controls.Add(this.ProductionGroupBox, 2, 0); - this.MenuTable.Controls.Add(this.VersionLabel, 5, 0); - this.MenuTable.Dock = System.Windows.Forms.DockStyle.Fill; - this.MenuTable.Location = new System.Drawing.Point(3, 3); - this.MenuTable.Name = "MenuTable"; - this.MenuTable.RowCount = 1; - this.MenuTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MenuTable.Size = new System.Drawing.Size(928, 130); - this.MenuTable.TabIndex = 18; - // - // MenuButtonsTable - // - this.MenuButtonsTable.AutoSize = true; - this.MenuButtonsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MenuButtonsTable.ColumnCount = 3; - this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MenuButtonsTable.Controls.Add(this.HelpButton, 3, 2); - this.MenuButtonsTable.Controls.Add(this.SaveButton, 0, 1); - this.MenuButtonsTable.Controls.Add(this.AddItemButton, 1, 1); - this.MenuButtonsTable.Controls.Add(this.AddRecipeButton, 1, 2); - this.MenuButtonsTable.Controls.Add(this.ExportImageButton, 2, 1); - this.MenuButtonsTable.Controls.Add(this.EnableDisableButton, 2, 0); - this.MenuButtonsTable.Controls.Add(this.ImportGraphButton, 1, 0); - this.MenuButtonsTable.Controls.Add(this.NewGraphButton, 0, 0); - this.MenuButtonsTable.Controls.Add(this.LoadGraphButton, 0, 3); - this.MenuButtonsTable.Controls.Add(this.SaveAsGraphButton, 0, 2); - this.MenuButtonsTable.Dock = System.Windows.Forms.DockStyle.Fill; - this.MenuButtonsTable.Location = new System.Drawing.Point(3, 7); - this.MenuButtonsTable.Margin = new System.Windows.Forms.Padding(3, 7, 3, 3); - this.MenuButtonsTable.Name = "MenuButtonsTable"; - this.MenuButtonsTable.RowCount = 4; - this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.MenuButtonsTable.Size = new System.Drawing.Size(253, 120); - this.MenuButtonsTable.TabIndex = 0; - // - // HelpButton - // - this.HelpButton.AutoSize = true; - this.HelpButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.HelpButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.HelpButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HelpButton.Location = new System.Drawing.Point(164, 62); - this.HelpButton.Margin = new System.Windows.Forms.Padding(2); - this.HelpButton.Name = "HelpButton"; - this.HelpButton.Size = new System.Drawing.Size(87, 26); - this.HelpButton.TabIndex = 13; - this.HelpButton.Text = "Help / Git repo"; - this.HelpButton.UseVisualStyleBackColor = true; - this.HelpButton.Click += new System.EventHandler(this.HelpButton_Click); - // - // SaveButton - // - this.SaveButton.AutoSize = true; - this.SaveButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.SaveButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.SaveButton.Location = new System.Drawing.Point(2, 32); - this.SaveButton.Margin = new System.Windows.Forms.Padding(2); - this.SaveButton.Name = "SaveButton"; - this.SaveButton.Size = new System.Drawing.Size(71, 26); - this.SaveButton.TabIndex = 12; - this.SaveButton.Text = "Save"; - this.SaveButton.UseVisualStyleBackColor = true; - this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click); - // - // AddItemButton - // - this.AddItemButton.AutoSize = true; - this.AddItemButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.AddItemButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.AddItemButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.AddItemButton.Location = new System.Drawing.Point(77, 32); - this.AddItemButton.Margin = new System.Windows.Forms.Padding(2); - this.AddItemButton.Name = "AddItemButton"; - this.AddItemButton.Size = new System.Drawing.Size(83, 26); - this.AddItemButton.TabIndex = 11; - this.AddItemButton.Text = "Add Item"; - this.AddItemButton.UseVisualStyleBackColor = true; - this.AddItemButton.Click += new System.EventHandler(this.AddItemButton_Click); - // - // AddRecipeButton - // - this.AddRecipeButton.AutoSize = true; - this.AddRecipeButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.AddRecipeButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.AddRecipeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.AddRecipeButton.Location = new System.Drawing.Point(77, 62); - this.AddRecipeButton.Margin = new System.Windows.Forms.Padding(2); - this.AddRecipeButton.Name = "AddRecipeButton"; - this.AddRecipeButton.Size = new System.Drawing.Size(83, 26); - this.AddRecipeButton.TabIndex = 10; - this.AddRecipeButton.Text = "Add Recipe"; - this.AddRecipeButton.UseVisualStyleBackColor = true; - this.AddRecipeButton.Click += new System.EventHandler(this.AddRecipeButton_Click); - // - // ExportImageButton - // - this.ExportImageButton.AutoSize = true; - this.ExportImageButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ExportImageButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.ExportImageButton.Location = new System.Drawing.Point(164, 32); - this.ExportImageButton.Margin = new System.Windows.Forms.Padding(2); - this.ExportImageButton.Name = "ExportImageButton"; - this.ExportImageButton.Size = new System.Drawing.Size(87, 26); - this.ExportImageButton.TabIndex = 8; - this.ExportImageButton.Text = "Export Image"; - this.ExportImageButton.UseVisualStyleBackColor = true; - this.ExportImageButton.Click += new System.EventHandler(this.ExportImageButton_Click); - // - // EnableDisableButton - // - this.EnableDisableButton.AutoSize = true; - this.EnableDisableButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.EnableDisableButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.EnableDisableButton.Location = new System.Drawing.Point(164, 2); - this.EnableDisableButton.Margin = new System.Windows.Forms.Padding(2); - this.EnableDisableButton.Name = "EnableDisableButton"; - this.EnableDisableButton.Size = new System.Drawing.Size(87, 26); - this.EnableDisableButton.TabIndex = 7; - this.EnableDisableButton.Text = "Settings"; - this.EnableDisableButton.UseVisualStyleBackColor = true; - this.EnableDisableButton.Click += new System.EventHandler(this.SettingsButton_Click); - // - // ImportGraphButton - // - this.ImportGraphButton.AutoSize = true; - this.ImportGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ImportGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.ImportGraphButton.Location = new System.Drawing.Point(77, 2); - this.ImportGraphButton.Margin = new System.Windows.Forms.Padding(2); - this.ImportGraphButton.Name = "ImportGraphButton"; - this.ImportGraphButton.Size = new System.Drawing.Size(83, 26); - this.ImportGraphButton.TabIndex = 9; - this.ImportGraphButton.Text = "Import Graph"; - this.ImportGraphButton.UseVisualStyleBackColor = true; - this.ImportGraphButton.Click += new System.EventHandler(this.ImportGraphButton_Click); - // - // NewGraphButton - // - this.NewGraphButton.AutoSize = true; - this.NewGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.NewGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.NewGraphButton.Location = new System.Drawing.Point(2, 2); - this.NewGraphButton.Margin = new System.Windows.Forms.Padding(2); - this.NewGraphButton.Name = "NewGraphButton"; - this.NewGraphButton.Size = new System.Drawing.Size(71, 26); - this.NewGraphButton.TabIndex = 6; - this.NewGraphButton.Text = "New Graph"; - this.NewGraphButton.UseVisualStyleBackColor = true; - this.NewGraphButton.Click += new System.EventHandler(this.NewGraphButton_Click); - // - // LoadGraphButton - // - this.LoadGraphButton.AutoSize = true; - this.LoadGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.LoadGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.LoadGraphButton.Location = new System.Drawing.Point(2, 92); - this.LoadGraphButton.Margin = new System.Windows.Forms.Padding(2); - this.LoadGraphButton.Name = "LoadGraphButton"; - this.LoadGraphButton.Size = new System.Drawing.Size(71, 26); - this.LoadGraphButton.TabIndex = 10; - this.LoadGraphButton.Text = "Load"; - this.LoadGraphButton.UseVisualStyleBackColor = true; - this.LoadGraphButton.Click += new System.EventHandler(this.LoadGraphButton_Click); - // - // SaveAsGraphButton - // - this.SaveAsGraphButton.AutoSize = true; - this.SaveAsGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.SaveAsGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.SaveAsGraphButton.Location = new System.Drawing.Point(2, 62); - this.SaveAsGraphButton.Margin = new System.Windows.Forms.Padding(2); - this.SaveAsGraphButton.Name = "SaveAsGraphButton"; - this.SaveAsGraphButton.Size = new System.Drawing.Size(71, 26); - this.SaveAsGraphButton.TabIndex = 9; - this.SaveAsGraphButton.Text = "Save As"; - this.SaveAsGraphButton.UseVisualStyleBackColor = true; - this.SaveAsGraphButton.Click += new System.EventHandler(this.SaveAsGraphButton_Click); - // - // GridLinesGroupBox - // - this.GridLinesGroupBox.AutoSize = true; - this.GridLinesGroupBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.GridLinesGroupBox.Controls.Add(this.GridlinesTable); - this.GridLinesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.GridLinesGroupBox.Location = new System.Drawing.Point(262, 3); - this.GridLinesGroupBox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 5); - this.GridLinesGroupBox.Name = "GridLinesGroupBox"; - this.GridLinesGroupBox.Padding = new System.Windows.Forms.Padding(0); - this.GridLinesGroupBox.Size = new System.Drawing.Size(208, 122); - this.GridLinesGroupBox.TabIndex = 17; - this.GridLinesGroupBox.TabStop = false; - this.GridLinesGroupBox.Text = "Gridlines (2n scaling)"; - // - // GridlinesTable - // - this.GridlinesTable.AutoSize = true; - this.GridlinesTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.GridlinesTable.ColumnCount = 2; - this.GridlinesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.GridlinesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); - this.GridlinesTable.Controls.Add(this.AlignSelectionButton, 1, 2); - this.GridlinesTable.Controls.Add(this.MinorGridlinesDropDown, 1, 0); - this.GridlinesTable.Controls.Add(this.GridlinesCheckbox, 0, 2); - this.GridlinesTable.Controls.Add(this.MajorGridlinesDropDown, 1, 1); - this.GridlinesTable.Controls.Add(this.label3, 0, 1); - this.GridlinesTable.Controls.Add(this.label2, 0, 0); - this.GridlinesTable.Location = new System.Drawing.Point(3, 16); - this.GridlinesTable.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); - this.GridlinesTable.Name = "GridlinesTable"; - this.GridlinesTable.RowCount = 3; - this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GridlinesTable.Size = new System.Drawing.Size(202, 75); - this.GridlinesTable.TabIndex = 2; - // - // AlignSelectionButton - // - this.AlignSelectionButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.AlignSelectionButton.Location = new System.Drawing.Point(103, 52); - this.AlignSelectionButton.Margin = new System.Windows.Forms.Padding(1, 2, 1, 0); - this.AlignSelectionButton.Name = "AlignSelectionButton"; - this.AlignSelectionButton.Size = new System.Drawing.Size(98, 23); - this.AlignSelectionButton.TabIndex = 6; - this.AlignSelectionButton.Text = "Align Selected"; - this.AlignSelectionButton.UseVisualStyleBackColor = true; - this.AlignSelectionButton.Click += new System.EventHandler(this.AlignSelectionButton_Click); - // - // MinorGridlinesDropDown - // - this.MinorGridlinesDropDown.Dock = System.Windows.Forms.DockStyle.Fill; - this.MinorGridlinesDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.MinorGridlinesDropDown.FormattingEnabled = true; - this.MinorGridlinesDropDown.Items.AddRange(new object[] { + this.MainLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.GraphViewer = new Foreman.ProductionGraphViewer(); + this.MenuTable = new System.Windows.Forms.TableLayoutPanel(); + this.MenuButtonsTable = new System.Windows.Forms.TableLayoutPanel(); + this.HelpButton = new System.Windows.Forms.Button(); + this.SaveButton = new System.Windows.Forms.Button(); + this.AddItemButton = new System.Windows.Forms.Button(); + this.AddRecipeButton = new System.Windows.Forms.Button(); + this.ExportImageButton = new System.Windows.Forms.Button(); + this.EnableDisableButton = new System.Windows.Forms.Button(); + this.ImportGraphButton = new System.Windows.Forms.Button(); + this.NewGraphButton = new System.Windows.Forms.Button(); + this.LoadGraphButton = new System.Windows.Forms.Button(); + this.SaveAsGraphButton = new System.Windows.Forms.Button(); + this.GridLinesGroupBox = new System.Windows.Forms.GroupBox(); + this.GridlinesTable = new System.Windows.Forms.TableLayoutPanel(); + this.AlignSelectionButton = new System.Windows.Forms.Button(); + this.MinorGridlinesDropDown = new System.Windows.Forms.ComboBox(); + this.GridlinesCheckbox = new System.Windows.Forms.CheckBox(); + this.MajorGridlinesDropDown = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.ProductionGroupBox = new System.Windows.Forms.GroupBox(); + this.GraphOptionsTable = new System.Windows.Forms.TableLayoutPanel(); + this.IconViewCheckBox = new System.Windows.Forms.CheckBox(); + this.RateOptionsDropDown = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.PauseUpdatesCheckbox = new System.Windows.Forms.CheckBox(); + this.GraphSummaryButton = new System.Windows.Forms.Button(); + this.VersionLabel = new System.Windows.Forms.Label(); + this.MainLayoutPanel.SuspendLayout(); + this.MenuTable.SuspendLayout(); + this.MenuButtonsTable.SuspendLayout(); + this.GridLinesGroupBox.SuspendLayout(); + this.GridlinesTable.SuspendLayout(); + this.ProductionGroupBox.SuspendLayout(); + this.GraphOptionsTable.SuspendLayout(); + this.SuspendLayout(); + // + // MainLayoutPanel + // + this.MainLayoutPanel.ColumnCount = 1; + this.MainLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainLayoutPanel.Controls.Add(this.GraphViewer, 0, 1); + this.MainLayoutPanel.Controls.Add(this.MenuTable, 0, 0); + this.MainLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.MainLayoutPanel.Margin = new System.Windows.Forms.Padding(0); + this.MainLayoutPanel.Name = "MainLayoutPanel"; + this.MainLayoutPanel.RowCount = 2; + this.MainLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.MainLayoutPanel.Size = new System.Drawing.Size(934, 761); + this.MainLayoutPanel.TabIndex = 1; + // + // GraphViewer + // + this.GraphViewer.AllowDrop = true; + this.GraphViewer.ArrowsOnLinks = false; + this.GraphViewer.AutoSize = true; + this.GraphViewer.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.GraphViewer.BackColor = System.Drawing.Color.White; + this.GraphViewer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.GraphViewer.DCache = null; + this.GraphViewer.Dock = System.Windows.Forms.DockStyle.Fill; + this.GraphViewer.IconsOnly = false; + this.GraphViewer.IconsSize = 32; + this.GraphViewer.LevelOfDetail = Foreman.ProductionGraphViewer.LOD.Medium; + this.GraphViewer.Location = new System.Drawing.Point(3, 136); + this.GraphViewer.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.GraphViewer.MouseDownElement = null; + this.GraphViewer.Name = "GraphViewer"; + this.GraphViewer.NodeCountForSimpleView = 200; + this.GraphViewer.ShowRecipeToolTip = false; + this.GraphViewer.Size = new System.Drawing.Size(928, 622); + this.GraphViewer.SmartNodeDirection = false; + this.GraphViewer.TabIndex = 12; + this.GraphViewer.TooltipsEnabled = true; + this.GraphViewer.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GraphViewer_KeyDown); + // + // MenuTable + // + this.MenuTable.AutoSize = true; + this.MenuTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MenuTable.ColumnCount = 6; + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.MenuTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuTable.Controls.Add(this.MenuButtonsTable, 0, 0); + this.MenuTable.Controls.Add(this.GridLinesGroupBox, 1, 0); + this.MenuTable.Controls.Add(this.ProductionGroupBox, 2, 0); + this.MenuTable.Controls.Add(this.VersionLabel, 5, 0); + this.MenuTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.MenuTable.Location = new System.Drawing.Point(3, 3); + this.MenuTable.Name = "MenuTable"; + this.MenuTable.RowCount = 1; + this.MenuTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MenuTable.Size = new System.Drawing.Size(928, 130); + this.MenuTable.TabIndex = 18; + // + // MenuButtonsTable + // + this.MenuButtonsTable.AutoSize = true; + this.MenuButtonsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MenuButtonsTable.ColumnCount = 3; + this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuButtonsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MenuButtonsTable.Controls.Add(this.HelpButton, 3, 2); + this.MenuButtonsTable.Controls.Add(this.SaveButton, 0, 1); + this.MenuButtonsTable.Controls.Add(this.AddItemButton, 1, 1); + this.MenuButtonsTable.Controls.Add(this.AddRecipeButton, 1, 2); + this.MenuButtonsTable.Controls.Add(this.ExportImageButton, 2, 1); + this.MenuButtonsTable.Controls.Add(this.EnableDisableButton, 2, 0); + this.MenuButtonsTable.Controls.Add(this.ImportGraphButton, 1, 0); + this.MenuButtonsTable.Controls.Add(this.NewGraphButton, 0, 0); + this.MenuButtonsTable.Controls.Add(this.LoadGraphButton, 0, 3); + this.MenuButtonsTable.Controls.Add(this.SaveAsGraphButton, 0, 2); + this.MenuButtonsTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.MenuButtonsTable.Location = new System.Drawing.Point(3, 7); + this.MenuButtonsTable.Margin = new System.Windows.Forms.Padding(3, 7, 3, 3); + this.MenuButtonsTable.Name = "MenuButtonsTable"; + this.MenuButtonsTable.RowCount = 4; + this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.MenuButtonsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.MenuButtonsTable.Size = new System.Drawing.Size(253, 120); + this.MenuButtonsTable.TabIndex = 0; + // + // HelpButton + // + this.HelpButton.AutoSize = true; + this.HelpButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.HelpButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.HelpButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HelpButton.Location = new System.Drawing.Point(164, 62); + this.HelpButton.Margin = new System.Windows.Forms.Padding(2); + this.HelpButton.Name = "HelpButton"; + this.HelpButton.Size = new System.Drawing.Size(87, 26); + this.HelpButton.TabIndex = 13; + this.HelpButton.Text = "Help / Git repo"; + this.HelpButton.UseVisualStyleBackColor = true; + this.HelpButton.Click += new System.EventHandler(this.HelpButton_Click); + // + // SaveButton + // + this.SaveButton.AutoSize = true; + this.SaveButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.SaveButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.SaveButton.Location = new System.Drawing.Point(2, 32); + this.SaveButton.Margin = new System.Windows.Forms.Padding(2); + this.SaveButton.Name = "SaveButton"; + this.SaveButton.Size = new System.Drawing.Size(71, 26); + this.SaveButton.TabIndex = 12; + this.SaveButton.Text = "Save"; + this.SaveButton.UseVisualStyleBackColor = true; + this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click); + // + // AddItemButton + // + this.AddItemButton.AutoSize = true; + this.AddItemButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.AddItemButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.AddItemButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.AddItemButton.Location = new System.Drawing.Point(77, 32); + this.AddItemButton.Margin = new System.Windows.Forms.Padding(2); + this.AddItemButton.Name = "AddItemButton"; + this.AddItemButton.Size = new System.Drawing.Size(83, 26); + this.AddItemButton.TabIndex = 11; + this.AddItemButton.Text = "Add Item"; + this.AddItemButton.UseVisualStyleBackColor = true; + this.AddItemButton.Click += new System.EventHandler(this.AddItemButton_Click); + // + // AddRecipeButton + // + this.AddRecipeButton.AutoSize = true; + this.AddRecipeButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.AddRecipeButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.AddRecipeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.AddRecipeButton.Location = new System.Drawing.Point(77, 62); + this.AddRecipeButton.Margin = new System.Windows.Forms.Padding(2); + this.AddRecipeButton.Name = "AddRecipeButton"; + this.AddRecipeButton.Size = new System.Drawing.Size(83, 26); + this.AddRecipeButton.TabIndex = 10; + this.AddRecipeButton.Text = "Add Recipe"; + this.AddRecipeButton.UseVisualStyleBackColor = true; + this.AddRecipeButton.Click += new System.EventHandler(this.AddRecipeButton_Click); + // + // ExportImageButton + // + this.ExportImageButton.AutoSize = true; + this.ExportImageButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ExportImageButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.ExportImageButton.Location = new System.Drawing.Point(164, 32); + this.ExportImageButton.Margin = new System.Windows.Forms.Padding(2); + this.ExportImageButton.Name = "ExportImageButton"; + this.ExportImageButton.Size = new System.Drawing.Size(87, 26); + this.ExportImageButton.TabIndex = 8; + this.ExportImageButton.Text = "Export Image"; + this.ExportImageButton.UseVisualStyleBackColor = true; + this.ExportImageButton.Click += new System.EventHandler(this.ExportImageButton_Click); + // + // EnableDisableButton + // + this.EnableDisableButton.AutoSize = true; + this.EnableDisableButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.EnableDisableButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.EnableDisableButton.Location = new System.Drawing.Point(164, 2); + this.EnableDisableButton.Margin = new System.Windows.Forms.Padding(2); + this.EnableDisableButton.Name = "EnableDisableButton"; + this.EnableDisableButton.Size = new System.Drawing.Size(87, 26); + this.EnableDisableButton.TabIndex = 7; + this.EnableDisableButton.Text = "Settings"; + this.EnableDisableButton.UseVisualStyleBackColor = true; + this.EnableDisableButton.Click += new System.EventHandler(this.SettingsButton_Click); + // + // ImportGraphButton + // + this.ImportGraphButton.AutoSize = true; + this.ImportGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ImportGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.ImportGraphButton.Location = new System.Drawing.Point(77, 2); + this.ImportGraphButton.Margin = new System.Windows.Forms.Padding(2); + this.ImportGraphButton.Name = "ImportGraphButton"; + this.ImportGraphButton.Size = new System.Drawing.Size(83, 26); + this.ImportGraphButton.TabIndex = 9; + this.ImportGraphButton.Text = "Import Graph"; + this.ImportGraphButton.UseVisualStyleBackColor = true; + this.ImportGraphButton.Click += new System.EventHandler(this.ImportGraphButton_Click); + // + // NewGraphButton + // + this.NewGraphButton.AutoSize = true; + this.NewGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.NewGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.NewGraphButton.Location = new System.Drawing.Point(2, 2); + this.NewGraphButton.Margin = new System.Windows.Forms.Padding(2); + this.NewGraphButton.Name = "NewGraphButton"; + this.NewGraphButton.Size = new System.Drawing.Size(71, 26); + this.NewGraphButton.TabIndex = 6; + this.NewGraphButton.Text = "New Graph"; + this.NewGraphButton.UseVisualStyleBackColor = true; + this.NewGraphButton.Click += new System.EventHandler(this.NewGraphButton_Click); + // + // LoadGraphButton + // + this.LoadGraphButton.AutoSize = true; + this.LoadGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.LoadGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.LoadGraphButton.Location = new System.Drawing.Point(2, 92); + this.LoadGraphButton.Margin = new System.Windows.Forms.Padding(2); + this.LoadGraphButton.Name = "LoadGraphButton"; + this.LoadGraphButton.Size = new System.Drawing.Size(71, 26); + this.LoadGraphButton.TabIndex = 10; + this.LoadGraphButton.Text = "Load"; + this.LoadGraphButton.UseVisualStyleBackColor = true; + this.LoadGraphButton.Click += new System.EventHandler(this.LoadGraphButton_Click); + // + // SaveAsGraphButton + // + this.SaveAsGraphButton.AutoSize = true; + this.SaveAsGraphButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.SaveAsGraphButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.SaveAsGraphButton.Location = new System.Drawing.Point(2, 62); + this.SaveAsGraphButton.Margin = new System.Windows.Forms.Padding(2); + this.SaveAsGraphButton.Name = "SaveAsGraphButton"; + this.SaveAsGraphButton.Size = new System.Drawing.Size(71, 26); + this.SaveAsGraphButton.TabIndex = 9; + this.SaveAsGraphButton.Text = "Save As"; + this.SaveAsGraphButton.UseVisualStyleBackColor = true; + this.SaveAsGraphButton.Click += new System.EventHandler(this.SaveAsGraphButton_Click); + // + // GridLinesGroupBox + // + this.GridLinesGroupBox.AutoSize = true; + this.GridLinesGroupBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.GridLinesGroupBox.Controls.Add(this.GridlinesTable); + this.GridLinesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.GridLinesGroupBox.Location = new System.Drawing.Point(262, 3); + this.GridLinesGroupBox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 5); + this.GridLinesGroupBox.Name = "GridLinesGroupBox"; + this.GridLinesGroupBox.Padding = new System.Windows.Forms.Padding(0); + this.GridLinesGroupBox.Size = new System.Drawing.Size(208, 122); + this.GridLinesGroupBox.TabIndex = 17; + this.GridLinesGroupBox.TabStop = false; + this.GridLinesGroupBox.Text = "Gridlines (2n scaling)"; + // + // GridlinesTable + // + this.GridlinesTable.AutoSize = true; + this.GridlinesTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.GridlinesTable.ColumnCount = 2; + this.GridlinesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.GridlinesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); + this.GridlinesTable.Controls.Add(this.AlignSelectionButton, 1, 2); + this.GridlinesTable.Controls.Add(this.MinorGridlinesDropDown, 1, 0); + this.GridlinesTable.Controls.Add(this.GridlinesCheckbox, 0, 2); + this.GridlinesTable.Controls.Add(this.MajorGridlinesDropDown, 1, 1); + this.GridlinesTable.Controls.Add(this.label3, 0, 1); + this.GridlinesTable.Controls.Add(this.label2, 0, 0); + this.GridlinesTable.Location = new System.Drawing.Point(3, 16); + this.GridlinesTable.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.GridlinesTable.Name = "GridlinesTable"; + this.GridlinesTable.RowCount = 3; + this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GridlinesTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GridlinesTable.Size = new System.Drawing.Size(202, 75); + this.GridlinesTable.TabIndex = 2; + // + // AlignSelectionButton + // + this.AlignSelectionButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.AlignSelectionButton.Location = new System.Drawing.Point(103, 52); + this.AlignSelectionButton.Margin = new System.Windows.Forms.Padding(1, 2, 1, 0); + this.AlignSelectionButton.Name = "AlignSelectionButton"; + this.AlignSelectionButton.Size = new System.Drawing.Size(98, 23); + this.AlignSelectionButton.TabIndex = 6; + this.AlignSelectionButton.Text = "Align Selected"; + this.AlignSelectionButton.UseVisualStyleBackColor = true; + this.AlignSelectionButton.Click += new System.EventHandler(this.AlignSelectionButton_Click); + // + // MinorGridlinesDropDown + // + this.MinorGridlinesDropDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.MinorGridlinesDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.MinorGridlinesDropDown.FormattingEnabled = true; + this.MinorGridlinesDropDown.Items.AddRange(new object[] { "none", "1", "2", @@ -372,32 +372,32 @@ private void InitializeComponent() "256", "512", "1024"}); - this.MinorGridlinesDropDown.Location = new System.Drawing.Point(104, 2); - this.MinorGridlinesDropDown.Margin = new System.Windows.Forms.Padding(2); - this.MinorGridlinesDropDown.Name = "MinorGridlinesDropDown"; - this.MinorGridlinesDropDown.Size = new System.Drawing.Size(96, 21); - this.MinorGridlinesDropDown.TabIndex = 3; - this.MinorGridlinesDropDown.SelectedIndexChanged += new System.EventHandler(this.MinorGridlinesDropDown_SelectedIndexChanged); - // - // GridlinesCheckbox - // - this.GridlinesCheckbox.AutoSize = true; - this.GridlinesCheckbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.GridlinesCheckbox.Location = new System.Drawing.Point(3, 53); - this.GridlinesCheckbox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); - this.GridlinesCheckbox.Name = "GridlinesCheckbox"; - this.GridlinesCheckbox.Size = new System.Drawing.Size(96, 22); - this.GridlinesCheckbox.TabIndex = 3; - this.GridlinesCheckbox.Text = "Show Gridlines"; - this.GridlinesCheckbox.UseVisualStyleBackColor = true; - this.GridlinesCheckbox.CheckedChanged += new System.EventHandler(this.GridlinesCheckbox_CheckedChanged); - // - // MajorGridlinesDropDown - // - this.MajorGridlinesDropDown.Dock = System.Windows.Forms.DockStyle.Fill; - this.MajorGridlinesDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.MajorGridlinesDropDown.FormattingEnabled = true; - this.MajorGridlinesDropDown.Items.AddRange(new object[] { + this.MinorGridlinesDropDown.Location = new System.Drawing.Point(104, 2); + this.MinorGridlinesDropDown.Margin = new System.Windows.Forms.Padding(2); + this.MinorGridlinesDropDown.Name = "MinorGridlinesDropDown"; + this.MinorGridlinesDropDown.Size = new System.Drawing.Size(96, 21); + this.MinorGridlinesDropDown.TabIndex = 3; + this.MinorGridlinesDropDown.SelectedIndexChanged += new System.EventHandler(this.MinorGridlinesDropDown_SelectedIndexChanged); + // + // GridlinesCheckbox + // + this.GridlinesCheckbox.AutoSize = true; + this.GridlinesCheckbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.GridlinesCheckbox.Location = new System.Drawing.Point(3, 53); + this.GridlinesCheckbox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.GridlinesCheckbox.Name = "GridlinesCheckbox"; + this.GridlinesCheckbox.Size = new System.Drawing.Size(96, 22); + this.GridlinesCheckbox.TabIndex = 3; + this.GridlinesCheckbox.Text = "Show Gridlines"; + this.GridlinesCheckbox.UseVisualStyleBackColor = true; + this.GridlinesCheckbox.CheckedChanged += new System.EventHandler(this.GridlinesCheckbox_CheckedChanged); + // + // MajorGridlinesDropDown + // + this.MajorGridlinesDropDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.MajorGridlinesDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.MajorGridlinesDropDown.FormattingEnabled = true; + this.MajorGridlinesDropDown.Items.AddRange(new object[] { "None", "1", "2", @@ -410,180 +410,180 @@ private void InitializeComponent() "256", "512", "1024"}); - this.MajorGridlinesDropDown.Location = new System.Drawing.Point(104, 27); - this.MajorGridlinesDropDown.Margin = new System.Windows.Forms.Padding(2); - this.MajorGridlinesDropDown.Name = "MajorGridlinesDropDown"; - this.MajorGridlinesDropDown.Size = new System.Drawing.Size(96, 21); - this.MajorGridlinesDropDown.TabIndex = 4; - this.MajorGridlinesDropDown.SelectedIndexChanged += new System.EventHandler(this.MajorGridlinesDropDown_SelectedIndexChanged); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(2, 25); - this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(98, 25); - this.label3.TabIndex = 5; - this.label3.Text = "Major Gridlines:"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(2, 0); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(98, 25); - this.label2.TabIndex = 3; - this.label2.Text = "Minor Gridlines:"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // ProductionGroupBox - // - this.ProductionGroupBox.AutoSize = true; - this.ProductionGroupBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ProductionGroupBox.Controls.Add(this.GraphOptionsTable); - this.ProductionGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProductionGroupBox.Location = new System.Drawing.Point(476, 3); - this.ProductionGroupBox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 5); - this.ProductionGroupBox.Name = "ProductionGroupBox"; - this.ProductionGroupBox.Padding = new System.Windows.Forms.Padding(0); - this.ProductionGroupBox.Size = new System.Drawing.Size(190, 122); - this.ProductionGroupBox.TabIndex = 4; - this.ProductionGroupBox.TabStop = false; - this.ProductionGroupBox.Text = "Graph Options:"; - // - // GraphOptionsTable - // - this.GraphOptionsTable.AutoSize = true; - this.GraphOptionsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.GraphOptionsTable.ColumnCount = 2; - this.GraphOptionsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.GraphOptionsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.GraphOptionsTable.Controls.Add(this.IconViewCheckBox, 0, 2); - this.GraphOptionsTable.Controls.Add(this.RateOptionsDropDown, 1, 0); - this.GraphOptionsTable.Controls.Add(this.label4, 0, 0); - this.GraphOptionsTable.Controls.Add(this.PauseUpdatesCheckbox, 0, 3); - this.GraphOptionsTable.Controls.Add(this.GraphSummaryButton, 0, 1); - this.GraphOptionsTable.Location = new System.Drawing.Point(3, 16); - this.GraphOptionsTable.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); - this.GraphOptionsTable.Name = "GraphOptionsTable"; - this.GraphOptionsTable.RowCount = 4; - this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.GraphOptionsTable.Size = new System.Drawing.Size(184, 93); - this.GraphOptionsTable.TabIndex = 2; - // - // IconViewCheckBox - // - this.IconViewCheckBox.AutoSize = true; - this.GraphOptionsTable.SetColumnSpan(this.IconViewCheckBox, 2); - this.IconViewCheckBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.IconViewCheckBox.Location = new System.Drawing.Point(3, 56); - this.IconViewCheckBox.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.IconViewCheckBox.Name = "IconViewCheckBox"; - this.IconViewCheckBox.Size = new System.Drawing.Size(178, 17); - this.IconViewCheckBox.TabIndex = 7; - this.IconViewCheckBox.Text = "Icon View"; - this.IconViewCheckBox.UseVisualStyleBackColor = true; - this.IconViewCheckBox.CheckedChanged += new System.EventHandler(this.IconViewCheckBox_CheckedChanged); - // - // RateOptionsDropDown - // - this.RateOptionsDropDown.Dock = System.Windows.Forms.DockStyle.Fill; - this.RateOptionsDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.RateOptionsDropDown.FormattingEnabled = true; - this.RateOptionsDropDown.Location = new System.Drawing.Point(67, 3); - this.RateOptionsDropDown.Name = "RateOptionsDropDown"; - this.RateOptionsDropDown.Size = new System.Drawing.Size(114, 21); - this.RateOptionsDropDown.TabIndex = 2; - this.RateOptionsDropDown.SelectedIndexChanged += new System.EventHandler(this.RateOptionsDropDown_SelectedIndexChanged); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(2, 0); - this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(60, 27); - this.label4.TabIndex = 5; - this.label4.Text = "Base Time:"; - this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // PauseUpdatesCheckbox - // - this.PauseUpdatesCheckbox.AutoSize = true; - this.GraphOptionsTable.SetColumnSpan(this.PauseUpdatesCheckbox, 2); - this.PauseUpdatesCheckbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.PauseUpdatesCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.PauseUpdatesCheckbox.Location = new System.Drawing.Point(3, 73); - this.PauseUpdatesCheckbox.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.PauseUpdatesCheckbox.Name = "PauseUpdatesCheckbox"; - this.PauseUpdatesCheckbox.Size = new System.Drawing.Size(178, 20); - this.PauseUpdatesCheckbox.TabIndex = 3; - this.PauseUpdatesCheckbox.Text = "Pause all calculations"; - this.PauseUpdatesCheckbox.UseVisualStyleBackColor = true; - this.PauseUpdatesCheckbox.CheckedChanged += new System.EventHandler(this.PauseUpdatesCheckbox_CheckedChanged); - // - // GraphSummaryButton - // - this.GraphOptionsTable.SetColumnSpan(this.GraphSummaryButton, 2); - this.GraphSummaryButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.GraphSummaryButton.Location = new System.Drawing.Point(3, 30); - this.GraphSummaryButton.Name = "GraphSummaryButton"; - this.GraphSummaryButton.Size = new System.Drawing.Size(178, 23); - this.GraphSummaryButton.TabIndex = 6; - this.GraphSummaryButton.Text = "Show Graph Summary"; - this.GraphSummaryButton.UseVisualStyleBackColor = true; - this.GraphSummaryButton.Click += new System.EventHandler(this.GraphSummaryButton_Click); - // - // VersionLabel - // - this.VersionLabel.AutoSize = true; - this.VersionLabel.Dock = System.Windows.Forms.DockStyle.Fill; - this.VersionLabel.Location = new System.Drawing.Point(810, 0); - this.VersionLabel.Name = "VersionLabel"; - this.VersionLabel.Size = new System.Drawing.Size(115, 130); - this.VersionLabel.TabIndex = 18; - this.VersionLabel.Text = "Foreman v2.0 - dev.13"; - this.VersionLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(934, 761); - this.Controls.Add(this.MainLayoutPanel); - this.DoubleBuffered = true; - this.KeyPreview = true; - this.MinimumSize = new System.Drawing.Size(950, 400); - this.Name = "MainForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Foreman 2.0"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.MainForm_Load); - this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown); - this.MainLayoutPanel.ResumeLayout(false); - this.MainLayoutPanel.PerformLayout(); - this.MenuTable.ResumeLayout(false); - this.MenuTable.PerformLayout(); - this.MenuButtonsTable.ResumeLayout(false); - this.MenuButtonsTable.PerformLayout(); - this.GridLinesGroupBox.ResumeLayout(false); - this.GridLinesGroupBox.PerformLayout(); - this.GridlinesTable.ResumeLayout(false); - this.GridlinesTable.PerformLayout(); - this.ProductionGroupBox.ResumeLayout(false); - this.ProductionGroupBox.PerformLayout(); - this.GraphOptionsTable.ResumeLayout(false); - this.GraphOptionsTable.PerformLayout(); - this.ResumeLayout(false); + this.MajorGridlinesDropDown.Location = new System.Drawing.Point(104, 27); + this.MajorGridlinesDropDown.Margin = new System.Windows.Forms.Padding(2); + this.MajorGridlinesDropDown.Name = "MajorGridlinesDropDown"; + this.MajorGridlinesDropDown.Size = new System.Drawing.Size(96, 21); + this.MajorGridlinesDropDown.TabIndex = 4; + this.MajorGridlinesDropDown.SelectedIndexChanged += new System.EventHandler(this.MajorGridlinesDropDown_SelectedIndexChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Dock = System.Windows.Forms.DockStyle.Fill; + this.label3.Location = new System.Drawing.Point(2, 25); + this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(98, 25); + this.label3.TabIndex = 5; + this.label3.Text = "Major Gridlines:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Dock = System.Windows.Forms.DockStyle.Fill; + this.label2.Location = new System.Drawing.Point(2, 0); + this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(98, 25); + this.label2.TabIndex = 3; + this.label2.Text = "Minor Gridlines:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ProductionGroupBox + // + this.ProductionGroupBox.AutoSize = true; + this.ProductionGroupBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ProductionGroupBox.Controls.Add(this.GraphOptionsTable); + this.ProductionGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProductionGroupBox.Location = new System.Drawing.Point(476, 3); + this.ProductionGroupBox.Margin = new System.Windows.Forms.Padding(3, 3, 3, 5); + this.ProductionGroupBox.Name = "ProductionGroupBox"; + this.ProductionGroupBox.Padding = new System.Windows.Forms.Padding(0); + this.ProductionGroupBox.Size = new System.Drawing.Size(190, 122); + this.ProductionGroupBox.TabIndex = 4; + this.ProductionGroupBox.TabStop = false; + this.ProductionGroupBox.Text = "Graph Options:"; + // + // GraphOptionsTable + // + this.GraphOptionsTable.AutoSize = true; + this.GraphOptionsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.GraphOptionsTable.ColumnCount = 2; + this.GraphOptionsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.GraphOptionsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.GraphOptionsTable.Controls.Add(this.IconViewCheckBox, 0, 2); + this.GraphOptionsTable.Controls.Add(this.RateOptionsDropDown, 1, 0); + this.GraphOptionsTable.Controls.Add(this.label4, 0, 0); + this.GraphOptionsTable.Controls.Add(this.PauseUpdatesCheckbox, 0, 3); + this.GraphOptionsTable.Controls.Add(this.GraphSummaryButton, 0, 1); + this.GraphOptionsTable.Location = new System.Drawing.Point(3, 16); + this.GraphOptionsTable.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.GraphOptionsTable.Name = "GraphOptionsTable"; + this.GraphOptionsTable.RowCount = 4; + this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.GraphOptionsTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.GraphOptionsTable.Size = new System.Drawing.Size(184, 93); + this.GraphOptionsTable.TabIndex = 2; + // + // IconViewCheckBox + // + this.IconViewCheckBox.AutoSize = true; + this.GraphOptionsTable.SetColumnSpan(this.IconViewCheckBox, 2); + this.IconViewCheckBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.IconViewCheckBox.Location = new System.Drawing.Point(3, 56); + this.IconViewCheckBox.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.IconViewCheckBox.Name = "IconViewCheckBox"; + this.IconViewCheckBox.Size = new System.Drawing.Size(178, 17); + this.IconViewCheckBox.TabIndex = 7; + this.IconViewCheckBox.Text = "Icon View"; + this.IconViewCheckBox.UseVisualStyleBackColor = true; + this.IconViewCheckBox.CheckedChanged += new System.EventHandler(this.IconViewCheckBox_CheckedChanged); + // + // RateOptionsDropDown + // + this.RateOptionsDropDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.RateOptionsDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RateOptionsDropDown.FormattingEnabled = true; + this.RateOptionsDropDown.Location = new System.Drawing.Point(67, 3); + this.RateOptionsDropDown.Name = "RateOptionsDropDown"; + this.RateOptionsDropDown.Size = new System.Drawing.Size(114, 21); + this.RateOptionsDropDown.TabIndex = 2; + this.RateOptionsDropDown.SelectedIndexChanged += new System.EventHandler(this.RateOptionsDropDown_SelectedIndexChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Dock = System.Windows.Forms.DockStyle.Fill; + this.label4.Location = new System.Drawing.Point(2, 0); + this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(60, 27); + this.label4.TabIndex = 5; + this.label4.Text = "Base Time:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // PauseUpdatesCheckbox + // + this.PauseUpdatesCheckbox.AutoSize = true; + this.GraphOptionsTable.SetColumnSpan(this.PauseUpdatesCheckbox, 2); + this.PauseUpdatesCheckbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.PauseUpdatesCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PauseUpdatesCheckbox.Location = new System.Drawing.Point(3, 73); + this.PauseUpdatesCheckbox.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.PauseUpdatesCheckbox.Name = "PauseUpdatesCheckbox"; + this.PauseUpdatesCheckbox.Size = new System.Drawing.Size(178, 20); + this.PauseUpdatesCheckbox.TabIndex = 3; + this.PauseUpdatesCheckbox.Text = "Pause all calculations"; + this.PauseUpdatesCheckbox.UseVisualStyleBackColor = true; + this.PauseUpdatesCheckbox.CheckedChanged += new System.EventHandler(this.PauseUpdatesCheckbox_CheckedChanged); + // + // GraphSummaryButton + // + this.GraphOptionsTable.SetColumnSpan(this.GraphSummaryButton, 2); + this.GraphSummaryButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.GraphSummaryButton.Location = new System.Drawing.Point(3, 30); + this.GraphSummaryButton.Name = "GraphSummaryButton"; + this.GraphSummaryButton.Size = new System.Drawing.Size(178, 23); + this.GraphSummaryButton.TabIndex = 6; + this.GraphSummaryButton.Text = "Show Graph Summary"; + this.GraphSummaryButton.UseVisualStyleBackColor = true; + this.GraphSummaryButton.Click += new System.EventHandler(this.GraphSummaryButton_Click); + // + // VersionLabel + // + this.VersionLabel.AutoSize = true; + this.VersionLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.VersionLabel.Location = new System.Drawing.Point(820, 0); + this.VersionLabel.Name = "VersionLabel"; + this.VersionLabel.Size = new System.Drawing.Size(105, 130); + this.VersionLabel.TabIndex = 18; + this.VersionLabel.Text = "v2.2.dev14"; + this.VersionLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(934, 761); + this.Controls.Add(this.MainLayoutPanel); + this.DoubleBuffered = true; + this.KeyPreview = true; + this.MinimumSize = new System.Drawing.Size(950, 400); + this.Name = "MainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Foreman 2.2"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Load += new System.EventHandler(this.MainForm_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown); + this.MainLayoutPanel.ResumeLayout(false); + this.MainLayoutPanel.PerformLayout(); + this.MenuTable.ResumeLayout(false); + this.MenuTable.PerformLayout(); + this.MenuButtonsTable.ResumeLayout(false); + this.MenuButtonsTable.PerformLayout(); + this.GridLinesGroupBox.ResumeLayout(false); + this.GridLinesGroupBox.PerformLayout(); + this.GridlinesTable.ResumeLayout(false); + this.GridlinesTable.PerformLayout(); + this.ProductionGroupBox.ResumeLayout(false); + this.ProductionGroupBox.PerformLayout(); + this.GraphOptionsTable.ResumeLayout(false); + this.GraphOptionsTable.PerformLayout(); + this.ResumeLayout(false); } diff --git a/Foreman/Forms/MainForm.cs b/Foreman/Forms/MainForm.cs index 0a382c50..c5179271 100644 --- a/Foreman/Forms/MainForm.cs +++ b/Foreman/Forms/MainForm.cs @@ -7,18 +7,21 @@ using System.Drawing; using System.Linq; using System.Text; +using System.Runtime.CompilerServices; namespace Foreman { public partial class MainForm : Form { - internal const string DefaultPreset = "Factorio 1.1 Vanilla"; + internal const string DefaultPreset = "Factorio 2.0 Vanilla"; + internal string DefaultAppName; private string savefilePath = null; public MainForm() { InitializeComponent(); this.DoubleBuffered = true; + DefaultAppName = this.Text; SetStyle(ControlStyles.SupportsTransparentBackColor, true); } @@ -149,7 +152,7 @@ private bool SaveGraph(string path) GraphViewer.Graph.SerializeNodeIdSet = null; //we want to save everything. serialiser.Serialize(writer, GraphViewer); savefilePath = path; - this.Text = string.Format("Foreman 2.0 ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); + this.Text = string.Format(DefaultAppName + " ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); return true; } catch (Exception exception) @@ -207,7 +210,7 @@ private async void LoadGraph(string path) Properties.Settings.Default.Save(); GraphViewer.Invalidate(); - this.Text = string.Format("Foreman 2.0 ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); + this.Text = string.Format(DefaultAppName + " ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); } private void NewGraph() @@ -233,7 +236,7 @@ private void NewGraph() } Properties.Settings.Default.Save(); - this.Text = string.Format("Foreman 2.0 ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); + this.Text = string.Format(DefaultAppName + " ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); } private void ImportGraph() @@ -310,12 +313,12 @@ public static List GetValidPresetsList() if (!existingPresetFiles.Contains(Properties.Settings.Default.CurrentPresetName)) { - MessageBox.Show("The current preset (" + Properties.Settings.Default.CurrentPresetName + ") has been removed. Switching to the default preset (Factorio 1.1 Vanilla)"); + MessageBox.Show("The current preset (" + Properties.Settings.Default.CurrentPresetName + ") has been removed. Switching to the default preset (Factorio 2.0 Vanilla)"); Properties.Settings.Default.CurrentPresetName = DefaultPreset; } if (!existingPresetFiles.Contains(DefaultPreset)) { - MessageBox.Show("The default preset (Factorio 1.1 Vanilla) has been removed. Please re-install / re-download Foreman"); + MessageBox.Show("The default preset (Factorio 2.0 Vanilla) has been removed. Please re-install / re-download Foreman"); Application.Exit(); return null; } @@ -390,7 +393,7 @@ private async void SettingsButton_Click(object sender, EventArgs e) List validPresets = GetValidPresetsList(); await GraphViewer.LoadFromJson(JObject.Parse(JsonConvert.SerializeObject(GraphViewer)), true, false); - this.Text = string.Format("Foreman 2.0 ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); + this.Text = string.Format(DefaultAppName + " ({0}) - {1}", Properties.Settings.Default.CurrentPresetName, savefilePath ?? "Untitled"); } else //not loading a new preset -> update the enabled statuses { diff --git a/Foreman/Forms/PresetComparatorForm.cs b/Foreman/Forms/PresetComparatorForm.cs index 109796db..0bf4d5e1 100644 --- a/Foreman/Forms/PresetComparatorForm.cs +++ b/Foreman/Forms/PresetComparatorForm.cs @@ -326,7 +326,7 @@ private void UpdateUnfilteredLVIs() Assembler lAssembler = (Assembler)l.Tag; Assembler rAssembler = (Assembler)r.Tag; - similarInternals = (lAssembler.Speed == rAssembler.Speed && lAssembler.ModuleSlots == rAssembler.ModuleSlots); + similarInternals = true; // (lAssembler.Speed == rAssembler.Speed && lAssembler.ModuleSlots == rAssembler.ModuleSlots); //QUALITY UPDATE REQUIRED break; case 6: //beacons Beacon lBeacon = (Beacon)l.Tag; @@ -495,14 +495,14 @@ private void ListView_StartHover(object sender, MouseEventArgs e) else if (lLVI.Tag is Assembler assembler) //assembler, miner, or power { string left = assembler.FriendlyName + "\n" + - string.Format(" Speed: {0}x\n", assembler.Speed) + + string.Format(" Speed: {0}x\n", assembler.GetSpeed(assembler.Owner.DefaultQuality)) + //QUALITY UPDATE REQUIRED string.Format(" Module Slots: {0}", assembler.ModuleSlots); string right = ""; if (compareTypeTT) { Assembler rassembler = rLVI.Tag as Assembler; right = rassembler.FriendlyName + "\n" + - string.Format(" Speed: {0}x\n", rassembler.Speed) + + string.Format(" Speed: {0}x\n", rassembler.GetSpeed(assembler.Owner.DefaultQuality)) + //QUALITY UPDATE REQUIRED string.Format(" Module Slots: {0}", rassembler.ModuleSlots); } diff --git a/Foreman/Forms/PresetImportForm.cs b/Foreman/Forms/PresetImportForm.cs index 2214d9a9..bd433bdc 100644 --- a/Foreman/Forms/PresetImportForm.cs +++ b/Foreman/Forms/PresetImportForm.cs @@ -147,11 +147,27 @@ private async void OKButton_Click(object sender, EventArgs e) } FileVersionInfo factorioVersionInfo = FileVersionInfo.GetVersionInfo(Path.Combine(new string[] { installPath, "bin", "x64", "factorio.exe" })); - if (factorioVersionInfo.ProductMajorPart < 1 || factorioVersionInfo.ProductMinorPart < 1 || (factorioVersionInfo.ProductMinorPart == 1 && factorioVersionInfo.ProductBuildPart < 4)) + if(factorioVersionInfo.ProductMajorPart < 2) + { + EnableProgressBar(false); + MessageBox.Show("Factorio Version below 2.0 can not be used with this version of Foreman. Please use Factorio 2.0 or newer. Alternatively download dev.13 or under of foreman 2.0 for pre factorio 2.0."); + ErrorLogging.LogLine(string.Format("Factorio version 0.x or 1.x instead of 2.x - use Foreman dev.13 or below for these factorio installs.", factorioVersionInfo.ProductVersion)); + CleanupFailedImport(); + return; + } else + if(factorioVersionInfo.ProductMajorPart > 2) + { + EnableProgressBar(false); + MessageBox.Show("Factorio Version 3.x+ can not be used with this version of Foreman. Sit tight and wait for update...\nYou can also try to msg me on discord (u\\DanielKotes) if for some reason I am not already aware of this."); + ErrorLogging.LogLine(string.Format("Factorio version 3.x+ isnt supported.", factorioVersionInfo.ProductVersion)); + CleanupFailedImport(); + return; + } + else if (factorioVersionInfo.ProductMinorPart < 0 || (factorioVersionInfo.ProductMinorPart == 0 && factorioVersionInfo.ProductBuildPart < 7)) { EnableProgressBar(false); - MessageBox.Show("Factorio version (" + factorioVersionInfo.ProductVersion + ") can not be used with Foreman. Please use Factorio 1.1.4 or newer."); - ErrorLogging.LogLine(string.Format("Factorio version was too old. {0} instead of 1.1.4+", factorioVersionInfo.ProductVersion)); + MessageBox.Show("Factorio version (" + factorioVersionInfo.ProductVersion + ") can not be used with Foreman. Please use Factorio 2.0.7 or newer."); + ErrorLogging.LogLine(string.Format("Factorio version was too old. {0} instead of 2.0.7+", factorioVersionInfo.ProductVersion)); CleanupFailedImport(); return; } @@ -184,7 +200,8 @@ private async void OKButton_Click(object sender, EventArgs e) stopwatch.Start(); #endif ImportStarted = true; - NewPresetName = await ProcessPreset(installPath, modsPath, progress, token); + string foremanModName = "foremanexport_"+ factorioVersionInfo.ProductMajorPart + ".0.0"; + NewPresetName = await ProcessPreset(installPath, foremanModName, modsPath, progress, token); #if DEBUG Console.WriteLine(string.Format("Preset import time: {0} seconds.", (stopwatch.ElapsedMilliseconds / 1000).ToString("0.0"))); ErrorLogging.LogLine(string.Format("Preset import time: {0} seconds.", (stopwatch.ElapsedMilliseconds / 1000).ToString("0.0"))); @@ -203,7 +220,7 @@ private async void OKButton_Click(object sender, EventArgs e) } - private async Task ProcessPreset(string installPath, string modsPath, IProgress> progress, CancellationToken token) + private async Task ProcessPreset(string installPath, string foremanModName, string modsPath, IProgress> progress, CancellationToken token) { return await Task.Run(() => { @@ -221,8 +238,8 @@ private async Task ProcessPreset(string installPath, string modsPath, IP { if (!Directory.Exists(modsPath)) Directory.CreateDirectory(modsPath); - if (Directory.Exists(Path.Combine(modsPath, "foremanexport_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremanexport_1.0.0")); + if (Directory.Exists(Path.Combine(modsPath, foremanModName))) + Directory.Delete(Path.Combine(modsPath, foremanModName)); } catch (Exception e) { @@ -278,37 +295,23 @@ private async Task ProcessPreset(string installPath, string modsPath, IP //copy the files as necessary try { - Directory.CreateDirectory(Path.Combine(modsPath, "foremanexport_1.0.0")); + Directory.CreateDirectory(Path.Combine(modsPath, foremanModName)); - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "info.json" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "info.json" })); - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "instrument-after-data.lua" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "instrument-after-data.lua" }), true); + File.Copy(Path.Combine(new string[] { "Mods", foremanModName, "info.json" }), Path.Combine(new string[] { modsPath, foremanModName, "info.json" })); + File.Copy(Path.Combine(new string[] { "Mods", foremanModName, "instrument-after-data.lua" }), Path.Combine(new string[] { modsPath, foremanModName, "instrument-after-data.lua" }), true); - //recipe&technology difficulties each have their own lua script - if (NormalRecipeRButton.Checked) - { - if (NormalTechnologyRButton.Checked) - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "instrument-control - nn.lua" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "instrument-control.lua" }), true); - else - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "instrument-control - ne.lua" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "instrument-control.lua" }), true); - } - else - { - if (NormalTechnologyRButton.Checked) - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "instrument-control - en.lua" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "instrument-control.lua" }), true); - else - File.Copy(Path.Combine(new string[] { "Mods", "foremanexport_1.0.0", "instrument-control - ee.lua" }), Path.Combine(new string[] { modsPath, "foremanexport_1.0.0", "instrument-control.lua" }), true); - } + File.Copy(Path.Combine(new string[] { "Mods", foremanModName, "instrument-control.lua" }), Path.Combine(new string[] { modsPath, foremanModName, "instrument-control.lua" }), true); } catch (Exception e) { if (e is UnauthorizedAccessException) { - MessageBox.Show("Insufficient access to copy foreman export mod files (Mods/foremanexport_1.0.0/) to the factorio mods folder. Please ensure factorio mods are in an accessible folder, or launch Foreman with Administrator privileges."); + MessageBox.Show("Insufficient access to copy foreman export mod files (Mods/"+ foremanModName+"/) to the factorio mods folder. Please ensure factorio mods are in an accessible folder, or launch Foreman with Administrator privileges."); ErrorLogging.LogLine("copying of foreman export mod files failed - insufficient access E:" + e.ToString()); } else { - MessageBox.Show("could not copy foreman export mod files (Mods/foremanexport_1.0.0/) to the factorio mods folder. Reinstall foreman?"); + MessageBox.Show("could not copy foreman export mod files (Mods/"+ foremanModName+"/) to the factorio mods folder. Reinstall foreman?"); ErrorLogging.LogLine("copying of foreman export mod files failed. E:" + e.ToString()); } CleanupFailedImport(modsPath); @@ -334,8 +337,8 @@ private async Task ProcessPreset(string installPath, string modsPath, IP if (File.Exists("temp-save.zip")) File.Delete("temp-save.zip"); - if (Directory.Exists(Path.Combine(modsPath, "foremanexport_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremanexport_1.0.0"), true); + if (Directory.Exists(Path.Combine(modsPath, foremanModName))) + Directory.Delete(Path.Combine(modsPath, foremanModName), true); progress.Report(new KeyValuePair(25, "Processing mod files.")); @@ -347,12 +350,18 @@ private async Task ProcessPreset(string installPath, string modsPath, IP } else if (resultString.IndexOf("<<>>") == -1 || resultString.IndexOf("<<>>") == -1) { +#if DEBUG + Console.WriteLine(resultString); +#endif MessageBox.Show("Foreman export could not be completed - possible mod conflict detected. Please run factorio and ensure it can successfully load to menu before retrying."); ErrorLogging.LogLine("Foreman export failed partway. Consult errorExporting.json for full output (and search for <<>> or <<>>, at least one of which is missing)"); File.WriteAllText(Path.Combine(Application.StartupPath, "errorExporting.json"), resultString); CleanupFailedImport(modsPath); return ""; } +#if DEBUG + File.WriteAllText(Path.Combine(Application.StartupPath, "debugExporting.json"), resultString); +#endif string lnamesString = resultString.Substring(resultString.IndexOf("<<>>") + 23); lnamesString = lnamesString.Substring(0, lnamesString.IndexOf("<<>>") - 2); @@ -383,7 +392,7 @@ private async Task ProcessPreset(string installPath, string modsPath, IP catch { MessageBox.Show("Foreman export could not be completed - unknown json parsing error.\nSorry"); - ErrorLogging.LogLine("json parsing of output failed. This is clearly an error with the export mod (foremanexport_1.0.0). Consult _iconJObjectOut.json and _dataJObjectOut.json and check which one isnt a valid json (and why)"); + ErrorLogging.LogLine("json parsing of output failed. This is clearly an error with the export mod ("+ foremanModName+"). Consult _iconJObjectOut.json and _dataJObjectOut.json and check which one isnt a valid json (and why)"); File.WriteAllText(Path.Combine(Application.StartupPath, "_iconJObjectOut.json"), iconString.ToString()); File.WriteAllText(Path.Combine(Application.StartupPath, "_dataJObjectOut.json"), dataString.ToString()); CleanupFailedImport(modsPath); @@ -461,7 +470,7 @@ private async Task ProcessPreset(string installPath, string modsPath, IP }); } - private void CleanupFailedImport(string modsPath = "", string presetPath = "") + private void CleanupFailedImport(string modsPath = "", string presetPath = "", string foremanModName = "") { SetStateForemanExportMod(modsPath, false); @@ -470,14 +479,14 @@ private void CleanupFailedImport(string modsPath = "", string presetPath = "") if (File.Exists("temp-save.zip")) File.Delete("temp-save.zip"); - if (modsPath != "" && Directory.Exists(Path.Combine(modsPath, "foremanexport_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremanexport_1.0.0"), true); + if (modsPath != "" && foremanModName != "" && Directory.Exists(Path.Combine(modsPath, foremanModName))) + Directory.Delete(Path.Combine(modsPath, foremanModName), true); - if (presetPath != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".pjson"))) + if (presetPath != "" && foremanModName != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".pjson"))) File.Delete(Path.Combine(Application.StartupPath, presetPath + ".pjson")); - if (presetPath != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".json"))) + if (presetPath != "" && foremanModName != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".json"))) File.Delete(Path.Combine(Application.StartupPath, presetPath + ".json")); - if (presetPath != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".dat"))) + if (presetPath != "" && foremanModName != "" && File.Exists(Path.Combine(Application.StartupPath, presetPath + ".dat"))) File.Delete(Path.Combine(Application.StartupPath, presetPath + ".dat")); } diff --git a/Foreman/Forms/PresetImportForm.designer.cs b/Foreman/Forms/PresetImportForm.designer.cs index 9f3b9b07..19d59b2e 100644 --- a/Foreman/Forms/PresetImportForm.designer.cs +++ b/Foreman/Forms/PresetImportForm.designer.cs @@ -28,478 +28,387 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.FactorioBrowseButton = new System.Windows.Forms.Button(); - this.FactorioLocationComboBox = new System.Windows.Forms.ComboBox(); - this.FactorioLocationGroup = new System.Windows.Forms.GroupBox(); - this.FactorioLocationTable = new System.Windows.Forms.TableLayoutPanel(); - this.FactorioSettingsGroup = new System.Windows.Forms.GroupBox(); - this.FactorioSettingsTable = new System.Windows.Forms.TableLayoutPanel(); - this.label2 = new System.Windows.Forms.Label(); - this.RecipeDifficultyGroup = new System.Windows.Forms.GroupBox(); - this.ExpensiveRecipeRButton = new System.Windows.Forms.RadioButton(); - this.NormalRecipeRButton = new System.Windows.Forms.RadioButton(); - this.TechnologyDifficultyGroup = new System.Windows.Forms.GroupBox(); - this.ExpensiveTechnologyRButton = new System.Windows.Forms.RadioButton(); - this.NormalTechnologyRButton = new System.Windows.Forms.RadioButton(); - this.label1 = new System.Windows.Forms.Label(); - this.PresetNameGroup = new System.Windows.Forms.GroupBox(); - this.PresetNameTable = new System.Windows.Forms.TableLayoutPanel(); - this.label4 = new System.Windows.Forms.Label(); - this.PresetNameTextBox = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.MainTable = new System.Windows.Forms.TableLayoutPanel(); - this.FactorioModLocationGroup = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.ModsBrowseButton = new System.Windows.Forms.Button(); - this.ModsLocationComboBox = new System.Windows.Forms.ComboBox(); - this.OKButton = new System.Windows.Forms.Button(); - this.CancelImportButtonB = new System.Windows.Forms.Button(); - this.ImportProgressBar = new Foreman.CustomProgressBar(); - this.CancelImportButton = new System.Windows.Forms.Button(); - this.FactorioLocationGroup.SuspendLayout(); - this.FactorioLocationTable.SuspendLayout(); - this.FactorioSettingsGroup.SuspendLayout(); - this.FactorioSettingsTable.SuspendLayout(); - this.RecipeDifficultyGroup.SuspendLayout(); - this.TechnologyDifficultyGroup.SuspendLayout(); - this.PresetNameGroup.SuspendLayout(); - this.PresetNameTable.SuspendLayout(); - this.MainTable.SuspendLayout(); - this.FactorioModLocationGroup.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // FactorioBrowseButton - // - this.FactorioBrowseButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioBrowseButton.Location = new System.Drawing.Point(385, 3); - this.FactorioBrowseButton.Name = "FactorioBrowseButton"; - this.FactorioBrowseButton.Size = new System.Drawing.Size(62, 23); - this.FactorioBrowseButton.TabIndex = 1; - this.FactorioBrowseButton.Text = "Browse..."; - this.FactorioBrowseButton.UseVisualStyleBackColor = true; - this.FactorioBrowseButton.Click += new System.EventHandler(this.FactorioBrowseButton_Click); - // - // FactorioLocationComboBox - // - this.FactorioLocationComboBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioLocationComboBox.FormattingEnabled = true; - this.FactorioLocationComboBox.Location = new System.Drawing.Point(3, 3); - this.FactorioLocationComboBox.Name = "FactorioLocationComboBox"; - this.FactorioLocationComboBox.Size = new System.Drawing.Size(376, 21); - this.FactorioLocationComboBox.TabIndex = 3; - // - // FactorioLocationGroup - // - this.FactorioLocationGroup.AutoSize = true; - this.FactorioLocationGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MainTable.SetColumnSpan(this.FactorioLocationGroup, 2); - this.FactorioLocationGroup.Controls.Add(this.FactorioLocationTable); - this.FactorioLocationGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioLocationGroup.Location = new System.Drawing.Point(2, 2); - this.FactorioLocationGroup.Margin = new System.Windows.Forms.Padding(2); - this.FactorioLocationGroup.Name = "FactorioLocationGroup"; - this.FactorioLocationGroup.Padding = new System.Windows.Forms.Padding(2); - this.FactorioLocationGroup.Size = new System.Drawing.Size(454, 46); - this.FactorioLocationGroup.TabIndex = 4; - this.FactorioLocationGroup.TabStop = false; - this.FactorioLocationGroup.Text = "Factorio Location:"; - // - // FactorioLocationTable - // - this.FactorioLocationTable.AutoSize = true; - this.FactorioLocationTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.FactorioLocationTable.ColumnCount = 2; - this.FactorioLocationTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.FactorioLocationTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.FactorioLocationTable.Controls.Add(this.FactorioBrowseButton, 1, 0); - this.FactorioLocationTable.Controls.Add(this.FactorioLocationComboBox, 0, 0); - this.FactorioLocationTable.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioLocationTable.Location = new System.Drawing.Point(2, 15); - this.FactorioLocationTable.Name = "FactorioLocationTable"; - this.FactorioLocationTable.RowCount = 1; - this.FactorioLocationTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.FactorioLocationTable.Size = new System.Drawing.Size(450, 29); - this.FactorioLocationTable.TabIndex = 0; - // - // FactorioSettingsGroup - // - this.MainTable.SetColumnSpan(this.FactorioSettingsGroup, 2); - this.FactorioSettingsGroup.Controls.Add(this.FactorioSettingsTable); - this.FactorioSettingsGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioSettingsGroup.Location = new System.Drawing.Point(2, 102); - this.FactorioSettingsGroup.Margin = new System.Windows.Forms.Padding(2); - this.FactorioSettingsGroup.Name = "FactorioSettingsGroup"; - this.FactorioSettingsGroup.Padding = new System.Windows.Forms.Padding(2); - this.FactorioSettingsGroup.Size = new System.Drawing.Size(454, 82); - this.FactorioSettingsGroup.TabIndex = 5; - this.FactorioSettingsGroup.TabStop = false; - this.FactorioSettingsGroup.Text = "Factorio Settings:"; - // - // FactorioSettingsTable - // - this.FactorioSettingsTable.AutoSize = true; - this.FactorioSettingsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.FactorioSettingsTable.ColumnCount = 3; - this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.FactorioSettingsTable.Controls.Add(this.label2, 1, 1); - this.FactorioSettingsTable.Controls.Add(this.RecipeDifficultyGroup, 0, 0); - this.FactorioSettingsTable.Controls.Add(this.TechnologyDifficultyGroup, 2, 0); - this.FactorioSettingsTable.Controls.Add(this.label1, 0, 1); - this.FactorioSettingsTable.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioSettingsTable.Location = new System.Drawing.Point(2, 15); - this.FactorioSettingsTable.Name = "FactorioSettingsTable"; - this.FactorioSettingsTable.RowCount = 2; - this.FactorioSettingsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.FactorioSettingsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.FactorioSettingsTable.Size = new System.Drawing.Size(450, 65); - this.FactorioSettingsTable.TabIndex = 0; - // - // label2 - // - this.label2.AutoSize = true; - this.FactorioSettingsTable.SetColumnSpan(this.label2, 2); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(51, 44); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(397, 21); - this.label2.TabIndex = 4; - this.label2.Text = "Language, Active Mods, and Mod options are to be set within Factorio!"; - // - // RecipeDifficultyGroup - // - this.FactorioSettingsTable.SetColumnSpan(this.RecipeDifficultyGroup, 2); - this.RecipeDifficultyGroup.Controls.Add(this.ExpensiveRecipeRButton); - this.RecipeDifficultyGroup.Controls.Add(this.NormalRecipeRButton); - this.RecipeDifficultyGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.RecipeDifficultyGroup.Location = new System.Drawing.Point(2, 2); - this.RecipeDifficultyGroup.Margin = new System.Windows.Forms.Padding(2); - this.RecipeDifficultyGroup.Name = "RecipeDifficultyGroup"; - this.RecipeDifficultyGroup.Padding = new System.Windows.Forms.Padding(2); - this.RecipeDifficultyGroup.Size = new System.Drawing.Size(206, 40); - this.RecipeDifficultyGroup.TabIndex = 0; - this.RecipeDifficultyGroup.TabStop = false; - this.RecipeDifficultyGroup.Text = "Recipe Difficulty:"; - // - // ExpensiveRecipeRButton - // - this.ExpensiveRecipeRButton.AutoSize = true; - this.ExpensiveRecipeRButton.Location = new System.Drawing.Point(92, 17); - this.ExpensiveRecipeRButton.Margin = new System.Windows.Forms.Padding(2); - this.ExpensiveRecipeRButton.Name = "ExpensiveRecipeRButton"; - this.ExpensiveRecipeRButton.Size = new System.Drawing.Size(74, 17); - this.ExpensiveRecipeRButton.TabIndex = 1; - this.ExpensiveRecipeRButton.Text = "Expensive"; - this.ExpensiveRecipeRButton.UseVisualStyleBackColor = true; - // - // NormalRecipeRButton - // - this.NormalRecipeRButton.AutoSize = true; - this.NormalRecipeRButton.Checked = true; - this.NormalRecipeRButton.Location = new System.Drawing.Point(4, 17); - this.NormalRecipeRButton.Margin = new System.Windows.Forms.Padding(2); - this.NormalRecipeRButton.Name = "NormalRecipeRButton"; - this.NormalRecipeRButton.Size = new System.Drawing.Size(58, 17); - this.NormalRecipeRButton.TabIndex = 0; - this.NormalRecipeRButton.TabStop = true; - this.NormalRecipeRButton.Text = "Normal"; - this.NormalRecipeRButton.UseVisualStyleBackColor = true; - // - // TechnologyDifficultyGroup - // - this.TechnologyDifficultyGroup.Controls.Add(this.ExpensiveTechnologyRButton); - this.TechnologyDifficultyGroup.Controls.Add(this.NormalTechnologyRButton); - this.TechnologyDifficultyGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.TechnologyDifficultyGroup.Location = new System.Drawing.Point(212, 2); - this.TechnologyDifficultyGroup.Margin = new System.Windows.Forms.Padding(2); - this.TechnologyDifficultyGroup.Name = "TechnologyDifficultyGroup"; - this.TechnologyDifficultyGroup.Padding = new System.Windows.Forms.Padding(2); - this.TechnologyDifficultyGroup.Size = new System.Drawing.Size(236, 40); - this.TechnologyDifficultyGroup.TabIndex = 2; - this.TechnologyDifficultyGroup.TabStop = false; - this.TechnologyDifficultyGroup.Text = "Technology Difficulty:"; - // - // ExpensiveTechnologyRButton - // - this.ExpensiveTechnologyRButton.AutoSize = true; - this.ExpensiveTechnologyRButton.Location = new System.Drawing.Point(92, 17); - this.ExpensiveTechnologyRButton.Margin = new System.Windows.Forms.Padding(2); - this.ExpensiveTechnologyRButton.Name = "ExpensiveTechnologyRButton"; - this.ExpensiveTechnologyRButton.Size = new System.Drawing.Size(74, 17); - this.ExpensiveTechnologyRButton.TabIndex = 1; - this.ExpensiveTechnologyRButton.Text = "Expensive"; - this.ExpensiveTechnologyRButton.UseVisualStyleBackColor = true; - // - // NormalTechnologyRButton - // - this.NormalTechnologyRButton.AutoSize = true; - this.NormalTechnologyRButton.Checked = true; - this.NormalTechnologyRButton.Location = new System.Drawing.Point(4, 17); - this.NormalTechnologyRButton.Margin = new System.Windows.Forms.Padding(2); - this.NormalTechnologyRButton.Name = "NormalTechnologyRButton"; - this.NormalTechnologyRButton.Size = new System.Drawing.Size(58, 17); - this.NormalTechnologyRButton.TabIndex = 0; - this.NormalTechnologyRButton.TabStop = true; - this.NormalTechnologyRButton.Text = "Normal"; - this.NormalTechnologyRButton.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.Location = new System.Drawing.Point(2, 44); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(45, 21); - this.label1.TabIndex = 3; - this.label1.Text = "NOTE:"; - // - // PresetNameGroup - // - this.PresetNameGroup.AutoSize = true; - this.PresetNameGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MainTable.SetColumnSpan(this.PresetNameGroup, 2); - this.PresetNameGroup.Controls.Add(this.PresetNameTable); - this.PresetNameGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.PresetNameGroup.Location = new System.Drawing.Point(2, 188); - this.PresetNameGroup.Margin = new System.Windows.Forms.Padding(2); - this.PresetNameGroup.Name = "PresetNameGroup"; - this.PresetNameGroup.Padding = new System.Windows.Forms.Padding(5); - this.PresetNameGroup.Size = new System.Drawing.Size(454, 49); - this.PresetNameGroup.TabIndex = 7; - this.PresetNameGroup.TabStop = false; - this.PresetNameGroup.Text = "Preset Name:"; - // - // PresetNameTable - // - this.PresetNameTable.AutoSize = true; - this.PresetNameTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.PresetNameTable.ColumnCount = 2; - this.PresetNameTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.PresetNameTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.PresetNameTable.Controls.Add(this.label4, 1, 1); - this.PresetNameTable.Controls.Add(this.PresetNameTextBox, 0, 0); - this.PresetNameTable.Controls.Add(this.label3, 1, 0); - this.PresetNameTable.Dock = System.Windows.Forms.DockStyle.Fill; - this.PresetNameTable.Location = new System.Drawing.Point(5, 18); - this.PresetNameTable.Name = "PresetNameTable"; - this.PresetNameTable.RowCount = 2; - this.PresetNameTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.PresetNameTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.PresetNameTable.Size = new System.Drawing.Size(444, 26); - this.PresetNameTable.TabIndex = 0; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(278, 13); - this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(164, 13); - this.label4.TabIndex = 6; - this.label4.Text = "brackets, dash or underscore."; - // - // PresetNameTextBox - // - this.PresetNameTextBox.BackColor = System.Drawing.Color.Moccasin; - this.PresetNameTextBox.Dock = System.Windows.Forms.DockStyle.Left; - this.PresetNameTextBox.Location = new System.Drawing.Point(2, 2); - this.PresetNameTextBox.Margin = new System.Windows.Forms.Padding(2); - this.PresetNameTextBox.MaxLength = 40; - this.PresetNameTextBox.Name = "PresetNameTextBox"; - this.PresetNameTable.SetRowSpan(this.PresetNameTextBox, 2); - this.PresetNameTextBox.Size = new System.Drawing.Size(269, 20); - this.PresetNameTextBox.TabIndex = 0; - this.PresetNameTextBox.TextChanged += new System.EventHandler(this.PresetNameTextBox_TextChanged); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(278, 0); - this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(164, 13); - this.label3.TabIndex = 5; - this.label3.Text = "5-40 characters: letters, numbers,"; - // - // MainTable - // - this.MainTable.AutoSize = true; - this.MainTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MainTable.ColumnCount = 2; - this.MainTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.MainTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.MainTable.Controls.Add(this.FactorioModLocationGroup, 0, 1); - this.MainTable.Controls.Add(this.OKButton, 0, 4); - this.MainTable.Controls.Add(this.CancelImportButtonB, 1, 5); - this.MainTable.Controls.Add(this.ImportProgressBar, 0, 5); - this.MainTable.Controls.Add(this.CancelImportButton, 1, 4); - this.MainTable.Controls.Add(this.FactorioLocationGroup, 0, 0); - this.MainTable.Controls.Add(this.FactorioSettingsGroup, 0, 2); - this.MainTable.Controls.Add(this.PresetNameGroup, 0, 3); - this.MainTable.Location = new System.Drawing.Point(0, 0); - this.MainTable.Name = "MainTable"; - this.MainTable.RowCount = 6; - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.MainTable.Size = new System.Drawing.Size(458, 297); - this.MainTable.TabIndex = 8; - // - // FactorioModLocationGroup - // - this.FactorioModLocationGroup.AutoSize = true; - this.FactorioModLocationGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.MainTable.SetColumnSpan(this.FactorioModLocationGroup, 2); - this.FactorioModLocationGroup.Controls.Add(this.tableLayoutPanel1); - this.FactorioModLocationGroup.Dock = System.Windows.Forms.DockStyle.Fill; - this.FactorioModLocationGroup.Location = new System.Drawing.Point(2, 52); - this.FactorioModLocationGroup.Margin = new System.Windows.Forms.Padding(2); - this.FactorioModLocationGroup.Name = "FactorioModLocationGroup"; - this.FactorioModLocationGroup.Padding = new System.Windows.Forms.Padding(2); - this.FactorioModLocationGroup.Size = new System.Drawing.Size(454, 46); - this.FactorioModLocationGroup.TabIndex = 9; - this.FactorioModLocationGroup.TabStop = false; - this.FactorioModLocationGroup.Text = "Mod Folder Location (leave blank for auto-detect):"; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.ModsBrowseButton, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.ModsLocationComboBox, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(2, 15); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(450, 29); - this.tableLayoutPanel1.TabIndex = 0; - // - // ModsBrowseButton - // - this.ModsBrowseButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.ModsBrowseButton.Location = new System.Drawing.Point(385, 3); - this.ModsBrowseButton.Name = "ModsBrowseButton"; - this.ModsBrowseButton.Size = new System.Drawing.Size(62, 23); - this.ModsBrowseButton.TabIndex = 1; - this.ModsBrowseButton.Text = "Browse..."; - this.ModsBrowseButton.UseVisualStyleBackColor = true; - this.ModsBrowseButton.Click += new System.EventHandler(this.ModsBrowseButton_Click); - // - // ModsLocationComboBox - // - this.ModsLocationComboBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ModsLocationComboBox.FormattingEnabled = true; - this.ModsLocationComboBox.Location = new System.Drawing.Point(3, 3); - this.ModsLocationComboBox.Name = "ModsLocationComboBox"; - this.ModsLocationComboBox.Size = new System.Drawing.Size(376, 21); - this.ModsLocationComboBox.TabIndex = 3; - // - // OKButton - // - this.OKButton.AutoSize = true; - this.OKButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.OKButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.OKButton.Location = new System.Drawing.Point(3, 242); - this.OKButton.Name = "OKButton"; - this.OKButton.Size = new System.Drawing.Size(396, 23); - this.OKButton.TabIndex = 2; - this.OKButton.Text = "Import"; - this.OKButton.UseVisualStyleBackColor = true; - this.OKButton.Click += new System.EventHandler(this.OKButton_Click); - // - // CancelImportButtonB - // - this.CancelImportButtonB.AutoSize = true; - this.CancelImportButtonB.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.CancelImportButtonB.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.CancelImportButtonB.Dock = System.Windows.Forms.DockStyle.Fill; - this.CancelImportButtonB.Location = new System.Drawing.Point(405, 271); - this.CancelImportButtonB.Name = "CancelImportButtonB"; - this.CancelImportButtonB.Size = new System.Drawing.Size(50, 23); - this.CancelImportButtonB.TabIndex = 8; - this.CancelImportButtonB.Text = "Cancel"; - this.CancelImportButtonB.UseVisualStyleBackColor = true; - this.CancelImportButtonB.Visible = false; - this.CancelImportButtonB.Click += new System.EventHandler(this.CancelButton_Click); - // - // ImportProgressBar - // - this.ImportProgressBar.CustomText = null; - this.ImportProgressBar.Dock = System.Windows.Forms.DockStyle.Fill; - this.ImportProgressBar.Location = new System.Drawing.Point(4, 272); - this.ImportProgressBar.Margin = new System.Windows.Forms.Padding(4); - this.ImportProgressBar.Name = "ImportProgressBar"; - this.ImportProgressBar.Size = new System.Drawing.Size(394, 21); - this.ImportProgressBar.TabIndex = 5; - this.ImportProgressBar.Visible = false; - // - // CancelImportButton - // - this.CancelImportButton.AutoSize = true; - this.CancelImportButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.CancelImportButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.CancelImportButton.Dock = System.Windows.Forms.DockStyle.Fill; - this.CancelImportButton.Location = new System.Drawing.Point(405, 242); - this.CancelImportButton.Name = "CancelImportButton"; - this.CancelImportButton.Size = new System.Drawing.Size(50, 23); - this.CancelImportButton.TabIndex = 6; - this.CancelImportButton.Text = "Cancel"; - this.CancelImportButton.UseVisualStyleBackColor = true; - this.CancelImportButton.Click += new System.EventHandler(this.CancelButton_Click); - // - // PresetImportForm - // - this.AcceptButton = this.OKButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.CancelButton = this.CancelImportButton; - this.ClientSize = new System.Drawing.Size(468, 303); - this.Controls.Add(this.MainTable); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.KeyPreview = true; - this.MaximizeBox = false; - this.Name = "PresetImportForm"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.Text = "Import Preset"; - this.FactorioLocationGroup.ResumeLayout(false); - this.FactorioLocationGroup.PerformLayout(); - this.FactorioLocationTable.ResumeLayout(false); - this.FactorioSettingsGroup.ResumeLayout(false); - this.FactorioSettingsGroup.PerformLayout(); - this.FactorioSettingsTable.ResumeLayout(false); - this.FactorioSettingsTable.PerformLayout(); - this.RecipeDifficultyGroup.ResumeLayout(false); - this.RecipeDifficultyGroup.PerformLayout(); - this.TechnologyDifficultyGroup.ResumeLayout(false); - this.TechnologyDifficultyGroup.PerformLayout(); - this.PresetNameGroup.ResumeLayout(false); - this.PresetNameGroup.PerformLayout(); - this.PresetNameTable.ResumeLayout(false); - this.PresetNameTable.PerformLayout(); - this.MainTable.ResumeLayout(false); - this.MainTable.PerformLayout(); - this.FactorioModLocationGroup.ResumeLayout(false); - this.FactorioModLocationGroup.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); + this.FactorioBrowseButton = new System.Windows.Forms.Button(); + this.FactorioLocationComboBox = new System.Windows.Forms.ComboBox(); + this.FactorioLocationGroup = new System.Windows.Forms.GroupBox(); + this.FactorioLocationTable = new System.Windows.Forms.TableLayoutPanel(); + this.FactorioSettingsGroup = new System.Windows.Forms.GroupBox(); + this.FactorioSettingsTable = new System.Windows.Forms.TableLayoutPanel(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.PresetNameGroup = new System.Windows.Forms.GroupBox(); + this.PresetNameTable = new System.Windows.Forms.TableLayoutPanel(); + this.label4 = new System.Windows.Forms.Label(); + this.PresetNameTextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.MainTable = new System.Windows.Forms.TableLayoutPanel(); + this.FactorioModLocationGroup = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.ModsBrowseButton = new System.Windows.Forms.Button(); + this.ModsLocationComboBox = new System.Windows.Forms.ComboBox(); + this.OKButton = new System.Windows.Forms.Button(); + this.CancelImportButtonB = new System.Windows.Forms.Button(); + this.ImportProgressBar = new Foreman.CustomProgressBar(); + this.CancelImportButton = new System.Windows.Forms.Button(); + this.FactorioLocationGroup.SuspendLayout(); + this.FactorioLocationTable.SuspendLayout(); + this.FactorioSettingsGroup.SuspendLayout(); + this.FactorioSettingsTable.SuspendLayout(); + this.PresetNameGroup.SuspendLayout(); + this.PresetNameTable.SuspendLayout(); + this.MainTable.SuspendLayout(); + this.FactorioModLocationGroup.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // FactorioBrowseButton + // + this.FactorioBrowseButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioBrowseButton.Location = new System.Drawing.Point(385, 3); + this.FactorioBrowseButton.Name = "FactorioBrowseButton"; + this.FactorioBrowseButton.Size = new System.Drawing.Size(62, 23); + this.FactorioBrowseButton.TabIndex = 1; + this.FactorioBrowseButton.Text = "Browse..."; + this.FactorioBrowseButton.UseVisualStyleBackColor = true; + this.FactorioBrowseButton.Click += new System.EventHandler(this.FactorioBrowseButton_Click); + // + // FactorioLocationComboBox + // + this.FactorioLocationComboBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioLocationComboBox.FormattingEnabled = true; + this.FactorioLocationComboBox.Location = new System.Drawing.Point(3, 3); + this.FactorioLocationComboBox.Name = "FactorioLocationComboBox"; + this.FactorioLocationComboBox.Size = new System.Drawing.Size(376, 21); + this.FactorioLocationComboBox.TabIndex = 3; + // + // FactorioLocationGroup + // + this.FactorioLocationGroup.AutoSize = true; + this.FactorioLocationGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainTable.SetColumnSpan(this.FactorioLocationGroup, 2); + this.FactorioLocationGroup.Controls.Add(this.FactorioLocationTable); + this.FactorioLocationGroup.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioLocationGroup.Location = new System.Drawing.Point(2, 2); + this.FactorioLocationGroup.Margin = new System.Windows.Forms.Padding(2); + this.FactorioLocationGroup.Name = "FactorioLocationGroup"; + this.FactorioLocationGroup.Padding = new System.Windows.Forms.Padding(2); + this.FactorioLocationGroup.Size = new System.Drawing.Size(454, 46); + this.FactorioLocationGroup.TabIndex = 4; + this.FactorioLocationGroup.TabStop = false; + this.FactorioLocationGroup.Text = "Factorio Location:"; + // + // FactorioLocationTable + // + this.FactorioLocationTable.AutoSize = true; + this.FactorioLocationTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.FactorioLocationTable.ColumnCount = 2; + this.FactorioLocationTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.FactorioLocationTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.FactorioLocationTable.Controls.Add(this.FactorioBrowseButton, 1, 0); + this.FactorioLocationTable.Controls.Add(this.FactorioLocationComboBox, 0, 0); + this.FactorioLocationTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioLocationTable.Location = new System.Drawing.Point(2, 15); + this.FactorioLocationTable.Name = "FactorioLocationTable"; + this.FactorioLocationTable.RowCount = 1; + this.FactorioLocationTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.FactorioLocationTable.Size = new System.Drawing.Size(450, 29); + this.FactorioLocationTable.TabIndex = 0; + // + // FactorioSettingsGroup + // + this.MainTable.SetColumnSpan(this.FactorioSettingsGroup, 2); + this.FactorioSettingsGroup.Controls.Add(this.FactorioSettingsTable); + this.FactorioSettingsGroup.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioSettingsGroup.Location = new System.Drawing.Point(2, 102); + this.FactorioSettingsGroup.Margin = new System.Windows.Forms.Padding(2); + this.FactorioSettingsGroup.Name = "FactorioSettingsGroup"; + this.FactorioSettingsGroup.Padding = new System.Windows.Forms.Padding(2); + this.FactorioSettingsGroup.Size = new System.Drawing.Size(454, 35); + this.FactorioSettingsGroup.TabIndex = 5; + this.FactorioSettingsGroup.TabStop = false; + this.FactorioSettingsGroup.Text = "Factorio Settings:"; + // + // FactorioSettingsTable + // + this.FactorioSettingsTable.AutoSize = true; + this.FactorioSettingsTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.FactorioSettingsTable.ColumnCount = 3; + this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.FactorioSettingsTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.FactorioSettingsTable.Controls.Add(this.label2, 1, 1); + this.FactorioSettingsTable.Controls.Add(this.label1, 0, 1); + this.FactorioSettingsTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioSettingsTable.Location = new System.Drawing.Point(2, 15); + this.FactorioSettingsTable.Name = "FactorioSettingsTable"; + this.FactorioSettingsTable.RowCount = 2; + this.FactorioSettingsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.FactorioSettingsTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.FactorioSettingsTable.Size = new System.Drawing.Size(450, 18); + this.FactorioSettingsTable.TabIndex = 0; + // + // label2 + // + this.label2.AutoSize = true; + this.FactorioSettingsTable.SetColumnSpan(this.label2, 2); + this.label2.Dock = System.Windows.Forms.DockStyle.Fill; + this.label2.Location = new System.Drawing.Point(51, 0); + this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(397, 18); + this.label2.TabIndex = 4; + this.label2.Text = "Language, Active Mods, and Mod options are to be set within Factorio!"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(2, 0); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(45, 18); + this.label1.TabIndex = 3; + this.label1.Text = "NOTE:"; + // + // PresetNameGroup + // + this.PresetNameGroup.AutoSize = true; + this.PresetNameGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainTable.SetColumnSpan(this.PresetNameGroup, 2); + this.PresetNameGroup.Controls.Add(this.PresetNameTable); + this.PresetNameGroup.Dock = System.Windows.Forms.DockStyle.Fill; + this.PresetNameGroup.Location = new System.Drawing.Point(2, 141); + this.PresetNameGroup.Margin = new System.Windows.Forms.Padding(2); + this.PresetNameGroup.Name = "PresetNameGroup"; + this.PresetNameGroup.Padding = new System.Windows.Forms.Padding(5); + this.PresetNameGroup.Size = new System.Drawing.Size(454, 49); + this.PresetNameGroup.TabIndex = 7; + this.PresetNameGroup.TabStop = false; + this.PresetNameGroup.Text = "Preset Name:"; + // + // PresetNameTable + // + this.PresetNameTable.AutoSize = true; + this.PresetNameTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.PresetNameTable.ColumnCount = 2; + this.PresetNameTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.PresetNameTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.PresetNameTable.Controls.Add(this.label4, 1, 1); + this.PresetNameTable.Controls.Add(this.PresetNameTextBox, 0, 0); + this.PresetNameTable.Controls.Add(this.label3, 1, 0); + this.PresetNameTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.PresetNameTable.Location = new System.Drawing.Point(5, 18); + this.PresetNameTable.Name = "PresetNameTable"; + this.PresetNameTable.RowCount = 2; + this.PresetNameTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.PresetNameTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.PresetNameTable.Size = new System.Drawing.Size(444, 26); + this.PresetNameTable.TabIndex = 0; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Dock = System.Windows.Forms.DockStyle.Fill; + this.label4.Location = new System.Drawing.Point(278, 13); + this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(164, 13); + this.label4.TabIndex = 6; + this.label4.Text = "brackets, dash or underscore."; + // + // PresetNameTextBox + // + this.PresetNameTextBox.BackColor = System.Drawing.Color.Moccasin; + this.PresetNameTextBox.Dock = System.Windows.Forms.DockStyle.Left; + this.PresetNameTextBox.Location = new System.Drawing.Point(2, 2); + this.PresetNameTextBox.Margin = new System.Windows.Forms.Padding(2); + this.PresetNameTextBox.MaxLength = 40; + this.PresetNameTextBox.Name = "PresetNameTextBox"; + this.PresetNameTable.SetRowSpan(this.PresetNameTextBox, 2); + this.PresetNameTextBox.Size = new System.Drawing.Size(269, 20); + this.PresetNameTextBox.TabIndex = 0; + this.PresetNameTextBox.TextChanged += new System.EventHandler(this.PresetNameTextBox_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Dock = System.Windows.Forms.DockStyle.Fill; + this.label3.Location = new System.Drawing.Point(278, 0); + this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(164, 13); + this.label3.TabIndex = 5; + this.label3.Text = "5-40 characters: letters, numbers,"; + // + // MainTable + // + this.MainTable.AutoSize = true; + this.MainTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainTable.ColumnCount = 2; + this.MainTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.MainTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainTable.Controls.Add(this.FactorioModLocationGroup, 0, 1); + this.MainTable.Controls.Add(this.OKButton, 0, 4); + this.MainTable.Controls.Add(this.CancelImportButtonB, 1, 5); + this.MainTable.Controls.Add(this.ImportProgressBar, 0, 5); + this.MainTable.Controls.Add(this.CancelImportButton, 1, 4); + this.MainTable.Controls.Add(this.FactorioLocationGroup, 0, 0); + this.MainTable.Controls.Add(this.FactorioSettingsGroup, 0, 2); + this.MainTable.Controls.Add(this.PresetNameGroup, 0, 3); + this.MainTable.Location = new System.Drawing.Point(0, 0); + this.MainTable.Name = "MainTable"; + this.MainTable.RowCount = 6; + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainTable.Size = new System.Drawing.Size(458, 250); + this.MainTable.TabIndex = 8; + // + // FactorioModLocationGroup + // + this.FactorioModLocationGroup.AutoSize = true; + this.FactorioModLocationGroup.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainTable.SetColumnSpan(this.FactorioModLocationGroup, 2); + this.FactorioModLocationGroup.Controls.Add(this.tableLayoutPanel1); + this.FactorioModLocationGroup.Dock = System.Windows.Forms.DockStyle.Fill; + this.FactorioModLocationGroup.Location = new System.Drawing.Point(2, 52); + this.FactorioModLocationGroup.Margin = new System.Windows.Forms.Padding(2); + this.FactorioModLocationGroup.Name = "FactorioModLocationGroup"; + this.FactorioModLocationGroup.Padding = new System.Windows.Forms.Padding(2); + this.FactorioModLocationGroup.Size = new System.Drawing.Size(454, 46); + this.FactorioModLocationGroup.TabIndex = 9; + this.FactorioModLocationGroup.TabStop = false; + this.FactorioModLocationGroup.Text = "Mod Folder Location (leave blank for auto-detect):"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.ModsBrowseButton, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.ModsLocationComboBox, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(2, 15); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(450, 29); + this.tableLayoutPanel1.TabIndex = 0; + // + // ModsBrowseButton + // + this.ModsBrowseButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.ModsBrowseButton.Location = new System.Drawing.Point(385, 3); + this.ModsBrowseButton.Name = "ModsBrowseButton"; + this.ModsBrowseButton.Size = new System.Drawing.Size(62, 23); + this.ModsBrowseButton.TabIndex = 1; + this.ModsBrowseButton.Text = "Browse..."; + this.ModsBrowseButton.UseVisualStyleBackColor = true; + this.ModsBrowseButton.Click += new System.EventHandler(this.ModsBrowseButton_Click); + // + // ModsLocationComboBox + // + this.ModsLocationComboBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.ModsLocationComboBox.FormattingEnabled = true; + this.ModsLocationComboBox.Location = new System.Drawing.Point(3, 3); + this.ModsLocationComboBox.Name = "ModsLocationComboBox"; + this.ModsLocationComboBox.Size = new System.Drawing.Size(376, 21); + this.ModsLocationComboBox.TabIndex = 3; + // + // OKButton + // + this.OKButton.AutoSize = true; + this.OKButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.OKButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.OKButton.Location = new System.Drawing.Point(3, 195); + this.OKButton.Name = "OKButton"; + this.OKButton.Size = new System.Drawing.Size(396, 23); + this.OKButton.TabIndex = 2; + this.OKButton.Text = "Import"; + this.OKButton.UseVisualStyleBackColor = true; + this.OKButton.Click += new System.EventHandler(this.OKButton_Click); + // + // CancelImportButtonB + // + this.CancelImportButtonB.AutoSize = true; + this.CancelImportButtonB.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelImportButtonB.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelImportButtonB.Dock = System.Windows.Forms.DockStyle.Fill; + this.CancelImportButtonB.Location = new System.Drawing.Point(405, 224); + this.CancelImportButtonB.Name = "CancelImportButtonB"; + this.CancelImportButtonB.Size = new System.Drawing.Size(50, 23); + this.CancelImportButtonB.TabIndex = 8; + this.CancelImportButtonB.Text = "Cancel"; + this.CancelImportButtonB.UseVisualStyleBackColor = true; + this.CancelImportButtonB.Visible = false; + this.CancelImportButtonB.Click += new System.EventHandler(this.CancelButton_Click); + // + // ImportProgressBar + // + this.ImportProgressBar.CustomText = null; + this.ImportProgressBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.ImportProgressBar.Location = new System.Drawing.Point(4, 225); + this.ImportProgressBar.Margin = new System.Windows.Forms.Padding(4); + this.ImportProgressBar.Name = "ImportProgressBar"; + this.ImportProgressBar.Size = new System.Drawing.Size(394, 21); + this.ImportProgressBar.TabIndex = 5; + this.ImportProgressBar.Visible = false; + // + // CancelImportButton + // + this.CancelImportButton.AutoSize = true; + this.CancelImportButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelImportButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelImportButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.CancelImportButton.Location = new System.Drawing.Point(405, 195); + this.CancelImportButton.Name = "CancelImportButton"; + this.CancelImportButton.Size = new System.Drawing.Size(50, 23); + this.CancelImportButton.TabIndex = 6; + this.CancelImportButton.Text = "Cancel"; + this.CancelImportButton.UseVisualStyleBackColor = true; + this.CancelImportButton.Click += new System.EventHandler(this.CancelButton_Click); + // + // PresetImportForm + // + this.AcceptButton = this.OKButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelImportButton; + this.ClientSize = new System.Drawing.Size(462, 253); + this.Controls.Add(this.MainTable); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.KeyPreview = true; + this.MaximizeBox = false; + this.Name = "PresetImportForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "Import Preset"; + this.FactorioLocationGroup.ResumeLayout(false); + this.FactorioLocationGroup.PerformLayout(); + this.FactorioLocationTable.ResumeLayout(false); + this.FactorioSettingsGroup.ResumeLayout(false); + this.FactorioSettingsGroup.PerformLayout(); + this.FactorioSettingsTable.ResumeLayout(false); + this.FactorioSettingsTable.PerformLayout(); + this.PresetNameGroup.ResumeLayout(false); + this.PresetNameGroup.PerformLayout(); + this.PresetNameTable.ResumeLayout(false); + this.PresetNameTable.PerformLayout(); + this.MainTable.ResumeLayout(false); + this.MainTable.PerformLayout(); + this.FactorioModLocationGroup.ResumeLayout(false); + this.FactorioModLocationGroup.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -510,12 +419,6 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox FactorioSettingsGroup; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; - private System.Windows.Forms.GroupBox TechnologyDifficultyGroup; - private System.Windows.Forms.RadioButton ExpensiveTechnologyRButton; - private System.Windows.Forms.RadioButton NormalTechnologyRButton; - private System.Windows.Forms.GroupBox RecipeDifficultyGroup; - private System.Windows.Forms.RadioButton ExpensiveRecipeRButton; - private System.Windows.Forms.RadioButton NormalRecipeRButton; private System.Windows.Forms.GroupBox PresetNameGroup; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; diff --git a/Foreman/Forms/SavefileLoadForm.cs b/Foreman/Forms/SavefileLoadForm.cs index e7870ed1..adab3bc5 100644 --- a/Foreman/Forms/SavefileLoadForm.cs +++ b/Foreman/Forms/SavefileLoadForm.cs @@ -123,29 +123,40 @@ private async Task LoadSaveFile(CancellationToken token) } } - //test factorio version - FileVersionInfo factorioVersionInfo = FileVersionInfo.GetVersionInfo(factorioPath); - if (factorioVersionInfo.ProductMajorPart < 1 || factorioVersionInfo.ProductMinorPart < 1 || (factorioVersionInfo.ProductMinorPart == 1 && factorioVersionInfo.ProductBuildPart < 4)) - { - MessageBox.Show("Factorio version (" + factorioVersionInfo.ProductVersion + ") can not be used with Foreman. Please use Factorio 1.1.4 or newer."); - ErrorLogging.LogLine(string.Format("Save file load: Factorio version was too old. {0} instead of 1.1.4+", factorioVersionInfo.ProductVersion)); - return DialogResult.Cancel; - } + //test factorio version + FileVersionInfo factorioVersionInfo = FileVersionInfo.GetVersionInfo(factorioPath); + if (factorioVersionInfo.ProductMajorPart < 2) + { + MessageBox.Show("Factorio Version below 2.0 can not be used with this version of Foreman. Please use Factorio 2.0 or newer. Alternatively download dev.13 or under of foreman 2.0 for pre factorio 2.0."); + ErrorLogging.LogLine(string.Format("Factorio version 0.x or 1.x instead of 2.x - use Foreman dev.13 or below for these factorio installs.", factorioVersionInfo.ProductVersion)); + return DialogResult.Cancel; + } else + if (factorioVersionInfo.ProductMajorPart > 2) + { + MessageBox.Show("Factorio Version 3.x+ can not be used with this version of Foreman. Sit tight and wait for update...\nYou can also try to msg me on discord (u\\DanielKotes) if for some reason I am not already aware of this."); + ErrorLogging.LogLine(string.Format("Factorio version 3.x+ isnt supported.", factorioVersionInfo.ProductVersion)); + return DialogResult.Cancel; + } else if (factorioVersionInfo.ProductMinorPart < 0 || (factorioVersionInfo.ProductMinorPart == 0 && factorioVersionInfo.ProductBuildPart < 7)) + { + MessageBox.Show("Factorio version (" + factorioVersionInfo.ProductVersion + ") can not be used with Foreman. Please use Factorio 2.0.7 or newer."); + ErrorLogging.LogLine(string.Format("Factorio version was too old. {0} instead of 2.0.7+", factorioVersionInfo.ProductVersion)); + return DialogResult.Cancel; + } //copy the save reader mod to the mods folder modsPath = Path.Combine(userDataPath, "mods"); if (!Directory.Exists(modsPath)) Directory.CreateDirectory(modsPath); - Directory.CreateDirectory(Path.Combine(modsPath, "foremansavereader_1.0.0")); + Directory.CreateDirectory(Path.Combine(modsPath, "foremansavereader_2.0.0")); try { - File.Copy(Path.Combine(new string[] { "Mods", "foremansavereader_1.0.0", "info.json" }), Path.Combine(new string[] { modsPath, "foremansavereader_1.0.0", "info.json" }), true); - File.Copy(Path.Combine(new string[] { "Mods", "foremansavereader_1.0.0", "instrument-control.lua" }), Path.Combine(new string[] { modsPath, "foremansavereader_1.0.0", "instrument-control.lua" }), true); + File.Copy(Path.Combine(new string[] { "Mods", "foremansavereader_2.0.0", "info.json" }), Path.Combine(new string[] { modsPath, "foremansavereader_2.0.0", "info.json" }), true); + File.Copy(Path.Combine(new string[] { "Mods", "foremansavereader_2.0.0", "instrument-control.lua" }), Path.Combine(new string[] { modsPath, "foremansavereader_2.0.0", "instrument-control.lua" }), true); } catch { - MessageBox.Show("could not copy foreman save reader mod files (Mods/foremansavereader_1.0.0/) to the factorio mods folder. Reinstall foreman?"); + MessageBox.Show("could not copy foreman save reader mod files (Mods/foremansavereader_2.0.0/) to the factorio mods folder. Reinstall foreman?"); ErrorLogging.LogLine("copying of foreman save reader mod files failed."); return DialogResult.Abort; } @@ -184,15 +195,15 @@ private async Task LoadSaveFile(CancellationToken token) if (token.IsCancellationRequested) { process.Close(); - if (Directory.Exists(Path.Combine(modsPath, "foremansavereader_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremansavereader_1.0.0"), true); + if (Directory.Exists(Path.Combine(modsPath, "foremansavereader_2.0.0"))) + Directory.Delete(Path.Combine(modsPath, "foremansavereader_2.0.0"), true); return DialogResult.Cancel; } Thread.Sleep(100); } - if (Directory.Exists(Path.Combine(modsPath, "foremansavereader_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremansavereader_1.0.0"), true); + if (Directory.Exists(Path.Combine(modsPath, "foremansavereader_2.0.0"))) + Directory.Delete(Path.Combine(modsPath, "foremansavereader_2.0.0"), true); if (resultString.IndexOf("Is another instance already running?") != -1) { @@ -201,6 +212,9 @@ private async Task LoadSaveFile(CancellationToken token) } else if (resultString.IndexOf("<<>>") == -1) { +#if DEBUG + Console.WriteLine(resultString); +#endif ErrorLogging.LogLine("could not process save file due to export not completing. Mod issue?"); return DialogResult.Abort; } @@ -223,8 +237,8 @@ private async Task LoadSaveFile(CancellationToken token) } catch { - if (!string.IsNullOrEmpty(modsPath) && Directory.Exists(Path.Combine(modsPath, "foremanexport_1.0.0"))) - Directory.Delete(Path.Combine(modsPath, "foremanexport_1.0.0"), true); + if (!string.IsNullOrEmpty(modsPath) && Directory.Exists(Path.Combine(modsPath, "foremanexport_2.0.0"))) + Directory.Delete(Path.Combine(modsPath, "foremanexport_2.0.0"), true); SaveFileInfo = null; return DialogResult.Abort; } @@ -272,7 +286,7 @@ private void ProcessSaveData() EnabledObjects.Add(DCache.PlayerAssembler); foreach (Recipe recipe in DCache.Recipes.Values) - if (recipe.Name.StartsWith("§§") || SaveFileInfo.Recipes.ContainsKey(recipe.Name)) + if (recipe.Name.StartsWith("§§") || (SaveFileInfo.Recipes.ContainsKey(recipe.Name) && SaveFileInfo.Recipes[recipe.Name])) EnabledObjects.Add(recipe); //go through all the assemblers, beacons, and modules and add them to the enabled set if at least one of their associated items has at least one production recipe that is in the enabled set. diff --git a/Foreman/Models/AssemblerSelector.cs b/Foreman/Models/AssemblerSelector.cs index dd145c2d..da297589 100644 --- a/Foreman/Models/AssemblerSelector.cs +++ b/Foreman/Models/AssemblerSelector.cs @@ -26,7 +26,7 @@ public List GetOrderedAssemblerList(Recipe recipe, Style style) return recipe.Assemblers .OrderByDescending(a => a.Enabled) .ThenByDescending(a => a.Available) - .ThenByDescending(a => ((a.ModuleSlots * 1000000) + a.Speed)) + .ThenByDescending(a => ((a.ModuleSlots * 1000000) + a.GetSpeed(a.Owner.DefaultQuality))) //QUALITY UPDATE REQUIRED .ToList(); } else @@ -73,7 +73,7 @@ public List GetOrderedAssemblerList(Recipe recipe, Style style) .OrderByDescending(a => a.Enabled) .ThenByDescending(a => (a.IsBurner && includeBurners) || (!a.IsBurner && includeNonBurners)) .ThenByDescending(a => a.Available) - .ThenByDescending(a => orderDirection * ((a.Speed * 1000000) + a.ModuleSlots)) + .ThenByDescending(a => orderDirection * ((a.GetSpeed(a.Owner.DefaultQuality) * 1000000) + a.ModuleSlots)) //QUALITY UPDATE REQUIRED .ToList(); } } diff --git a/Foreman/Models/Nodes/RecipeNode.cs b/Foreman/Models/Nodes/RecipeNode.cs index 12c75b65..163a297d 100644 --- a/Foreman/Models/Nodes/RecipeNode.cs +++ b/Foreman/Models/Nodes/RecipeNode.cs @@ -75,8 +75,8 @@ public enum Warnings public List BeaconModules { get; private set; } public double DesiredAssemblerCount { get; set; } - public double ActualAssemblerCount { get { return ActualRatePerSec * BaseRecipe.Time / (SelectedAssembler.Speed * GetSpeedMultiplier()); } } - public override double DesiredRatePerSec { get { return DesiredAssemblerCount * SelectedAssembler.Speed * GetSpeedMultiplier() / (BaseRecipe.Time); } set { Trace.Fail("Desired rate set on a recipe node!"); } } + public double ActualAssemblerCount { get { return ActualRatePerSec * BaseRecipe.Time / (SelectedAssembler.GetSpeed(SelectedAssembler.Owner.DefaultQuality) * GetSpeedMultiplier()); } } //QUALITY UPDATE REQUIRED + public override double DesiredRatePerSec { get { return DesiredAssemblerCount * SelectedAssembler.GetSpeed(SelectedAssembler.Owner.DefaultQuality) * GetSpeedMultiplier() / (BaseRecipe.Time); } set { Trace.Fail("Desired rate set on a recipe node!"); } } //QUALITY UPDATE REQUIRED public double ExtraProductivityBonus { get; set; } @@ -236,7 +236,7 @@ public double GetSpeedMultiplier() foreach (Module module in AssemblerModules) multiplier += module.SpeedBonus; foreach (Module beaconModule in BeaconModules) - multiplier += beaconModule.SpeedBonus * SelectedBeacon.BeaconEffectivity * BeaconCount; + multiplier += beaconModule.SpeedBonus * SelectedBeacon.GetBeaconEffectivity(SelectedBeacon.Owner.DefaultQuality, BeaconCount) * BeaconCount; return Math.Max(0.2f, multiplier); } @@ -246,7 +246,7 @@ public double GetProductivityBonus() //unlike the others, this is the bonus (aka foreach (Module module in AssemblerModules) multiplier += module.ProductivityBonus; foreach (Module beaconModule in BeaconModules) - multiplier += beaconModule.ProductivityBonus * SelectedBeacon.BeaconEffectivity * BeaconCount; + multiplier += beaconModule.ProductivityBonus * SelectedBeacon.GetBeaconEffectivity(SelectedBeacon.Owner.DefaultQuality, BeaconCount) * BeaconCount; return Math.Max(0, multiplier); } @@ -256,7 +256,7 @@ public double GetConsumptionMultiplier() foreach (Module module in AssemblerModules) multiplier += module.ConsumptionBonus; foreach (Module beaconModule in BeaconModules) - multiplier += beaconModule.ConsumptionBonus * SelectedBeacon.BeaconEffectivity * BeaconCount; + multiplier += beaconModule.ConsumptionBonus * SelectedBeacon.GetBeaconEffectivity(SelectedBeacon.Owner.DefaultQuality, BeaconCount) * BeaconCount; return Math.Max(0.2f, multiplier); } @@ -266,7 +266,7 @@ public double GetPollutionMultiplier() foreach (Module module in AssemblerModules) multiplier += module.PollutionBonus; foreach (Module beaconModule in BeaconModules) - multiplier += beaconModule.PollutionBonus * SelectedBeacon.BeaconEffectivity * BeaconCount; + multiplier += beaconModule.PollutionBonus * SelectedBeacon.GetBeaconEffectivity(SelectedBeacon.Owner.DefaultQuality, BeaconCount) * BeaconCount; return Math.Max(0.2f, multiplier); } @@ -314,12 +314,12 @@ internal double inputRateForFuel() temperature = LinkChecker.GetTemperatureRange(Fuel as Fluid, ReadOnlyNode, LinkType.Output, false).Min; //burner rate = recipe time (modified by speed bonus & assembler) * fuel consumption rate of assembler (modified by fuel, temperature, and consumption modifier) - return (BaseRecipe.Time / (SelectedAssembler.Speed * GetSpeedMultiplier())) * SelectedAssembler.GetBaseFuelConsumptionRate(Fuel, temperature) * GetConsumptionMultiplier(); + return (BaseRecipe.Time / (SelectedAssembler.GetSpeed(SelectedAssembler.Owner.DefaultQuality) * GetSpeedMultiplier())) * SelectedAssembler.GetBaseFuelConsumptionRate(Fuel, SelectedAssembler.Owner.DefaultQuality, temperature) * GetConsumptionMultiplier(); } internal double factoryRate() { - return BaseRecipe.Time / (SelectedAssembler.Speed * GetSpeedMultiplier()); + return BaseRecipe.Time / (SelectedAssembler.GetSpeed(SelectedAssembler.Owner.DefaultQuality) * GetSpeedMultiplier()); } internal double GetMinOutputRatio() @@ -554,38 +554,38 @@ public double GetGeneratorEffectivity() public double GetGeneratorElectricalProduction() //Watts { if (SelectedAssembler.EntityType == EntityType.Generator) - return MyNode.SelectedAssembler.EnergyProduction * GetGeneratorEffectivity(); - return MyNode.SelectedAssembler.EnergyProduction; //no consumption multiplier => generators cant have modules / beacon effects + return SelectedAssembler.GetEnergyProduction(SelectedAssembler.Owner.DefaultQuality) * GetGeneratorEffectivity(); + return SelectedAssembler.GetEnergyProduction(SelectedAssembler.Owner.DefaultQuality); //no consumption multiplier => generators cant have modules / beacon effects } public double GetAssemblerSpeed() { - return MyNode.SelectedAssembler.Speed * MyNode.GetSpeedMultiplier(); + return SelectedAssembler.GetSpeed(SelectedAssembler.Owner.DefaultQuality) * MyNode.GetSpeedMultiplier(); } public double GetAssemblerEnergyConsumption() //Watts { - return MyNode.SelectedAssembler.EnergyDrain + (MyNode.SelectedAssembler.EnergyConsumption * MyNode.GetConsumptionMultiplier()); + return SelectedAssembler.GetEnergyDrain() + (SelectedAssembler.GetEnergyConsumption(SelectedAssembler.Owner.DefaultQuality) * MyNode.GetConsumptionMultiplier()); } public double GetAssemblerPollutionProduction() //pollution/sec { - return MyNode.SelectedAssembler.Pollution * MyNode.GetPollutionMultiplier() * GetAssemblerEnergyConsumption(); //pollution is counted in per energy + return 0;// SelectedAssembler.Pollution * MyNode.GetPollutionMultiplier() * GetAssemblerEnergyConsumption(); //pollution is counted in per energy //POLLUTION UPDATER REQUIRED } public double GetBeaconEnergyConsumption() //Watts { - if (MyNode.SelectedBeacon == null || MyNode.SelectedBeacon.EnergySource != EnergySource.Electric) + if (SelectedBeacon == null || SelectedBeacon.EnergySource != EnergySource.Electric) return 0; - return MyNode.SelectedBeacon.EnergyConsumption + MyNode.SelectedBeacon.EnergyDrain; + return SelectedBeacon.GetEnergyProduction(SelectedBeacon.Owner.DefaultQuality) + SelectedBeacon.GetEnergyDrain(); } public double GetBeaconPollutionProduction() //pollution/sec { - if (MyNode.SelectedBeacon == null) + if (SelectedBeacon == null) return 0; - return MyNode.SelectedBeacon.Pollution * GetBeaconEnergyConsumption(); + return 0; // SelectedBeacon.Pollution * GetBeaconEnergyConsumption(); //POLLUTION UPDATE REQUIRED } //----------------------------------------------------------------------- Get functions (totals) @@ -610,7 +610,7 @@ public double GetTotalAssemblerElectricalConsumption() // J/sec (W) double partialAssembler = MyNode.ActualAssemblerCount % 1; double entireAssemblers = MyNode.ActualAssemblerCount - partialAssembler; - return (((entireAssemblers + (partialAssembler < 0.05 ? 0 : 1)) * MyNode.SelectedAssembler.EnergyDrain) + (MyNode.ActualAssemblerCount * MyNode.SelectedAssembler.EnergyConsumption * MyNode.GetConsumptionMultiplier())); //if there is more than 5% of an extra assembler, assume there is +1 assembler working x% of the time (full drain, x% uptime) + return (((entireAssemblers + (partialAssembler < 0.05 ? 0 : 1)) * SelectedAssembler.GetEnergyDrain()) + (ActualAssemblerCount * SelectedAssembler.GetEnergyConsumption(SelectedAssembler.Owner.DefaultQuality) * GetConsumptionMultiplier())); //if there is more than 5% of an extra assembler, assume there is +1 assembler working x% of the time (full drain, x% uptime) } public double GetTotalGeneratorElectricalProduction() // J/sec (W) ; this is also when the temperature range of incoming fuel is taken into account diff --git a/Foreman/Mods/foremanexport_2.0.0/info.json b/Foreman/Mods/foremanexport_2.0.0/info.json new file mode 100644 index 00000000..ed14aebd --- /dev/null +++ b/Foreman/Mods/foremanexport_2.0.0/info.json @@ -0,0 +1,14 @@ +{ + "name": "foremanexport", + "version": "2.0.0", + "factorio_version": "2.0", + "title": "foremanexport", + "author": "Me", + "contact": "", + "homepage": "", + "description": "temp mod to grab all the data for the current factorio setup. Should be automatically deleted after use (and doesnt impact gameplay anyway)", + "dependencies": + [ + "base >= 2.0.7" + ] +} diff --git a/Foreman/Mods/foremanexport_1.0.0/data-final-fixes.lua b/Foreman/Mods/foremanexport_2.0.0/instrument-after-data.lua similarity index 87% rename from Foreman/Mods/foremanexport_1.0.0/data-final-fixes.lua rename to Foreman/Mods/foremanexport_2.0.0/instrument-after-data.lua index 6d26c182..8ee44be3 100644 --- a/Foreman/Mods/foremanexport_1.0.0/data-final-fixes.lua +++ b/Foreman/Mods/foremanexport_2.0.0/instrument-after-data.lua @@ -4,7 +4,7 @@ local function ExportLine(text, indentSize) indentSize = indentSize - 1 indents = indents..' ' end - log(indents..text) + localised_print(indents..text) end local function ExportParameter(paramName, paramValue, numerical, suffix, indentSize) @@ -70,8 +70,10 @@ output['items'] = {} output['fluids'] = data.raw.fluid output['groups'] = data.raw['item-group'] output['entities'] = {} +output['qualities'] = data.raw.qualities -for _, section in ipairs({ 'ammo', 'armor', 'capsule', 'gun', 'item', 'item-with-entity-data', 'item-with-inventory', 'item-with-label', 'item-with-tags', 'mining-tool', 'module', 'rail-planner', 'repair-tool', 'selection-tool', 'spider-vehicle', 'spidertron-remote', 'tool', 'upgrade-item' }) do +--depreciated: 'item-with-inventory', 'item-with-label', 'item-with-tags' +for _, section in ipairs({ 'ammo', 'armor', 'capsule', 'gun', 'item', 'item-with-entity-data', 'module', 'rail-planner', 'repair-tool', 'selection-tool', 'spider-vehicle', 'spidertron-remote', 'tool', 'upgrade-item' }) do for name, obj in pairs(data.raw[section]) do output['items'][name] = obj end @@ -83,6 +85,7 @@ for _, section in ipairs({'assembling-machine', 'beacon', 'furnace', 'mining-dri end end + ExportLine('<<>>', 0) ExportLine('{', 0) @@ -150,7 +153,21 @@ for _, data in pairs(output.groups) do ExportIcon(data.icon, data.icon_size, data.icons) counter = counter - 1 if counter > 0 then ExportLine('},', 2) else ExportLine('}', 2) end end -ExportLine(']', 1) +ExportLine('],', 1) + +ExportLine('"qualities": [', 1) +if output.qualities ~= nil then + counter = 0 for _,_ in pairs(output.qualities) do counter = counter + 1 end + for _, data in pairs(output.qualities) do + ExportLine('{', 2) + ExportParameter('name', data.name, false, ',', 3) + ExportParameter('icon_name', "icon.q."..data.name, false, ',', 3) + ExportIcon(data.icon, data.icon_size, data.icons) + counter = counter - 1 if counter > 0 then ExportLine('},', 2) else ExportLine('}', 2) end + end +end +ExportLine(']', 1) + ExportLine('}', 0) ExportLine('<<>>', 0) \ No newline at end of file diff --git a/Foreman/Mods/foremanexport_2.0.0/instrument-control.lua b/Foreman/Mods/foremanexport_2.0.0/instrument-control.lua new file mode 100644 index 00000000..10ad1efc --- /dev/null +++ b/Foreman/Mods/foremanexport_2.0.0/instrument-control.lua @@ -0,0 +1,701 @@ +local etable = {} +local qualityEnabled = 0 + + +localindex = 0 +local function ExportLocalisedString(lstring, index) + -- as could be expected if lstring doesnt have a working translation then we get a beauty of a mess... so that needs to be cleaned up outside of json table + localised_print('<#~#>') + localised_print(lstring) + localised_print('<#~#>') +end + +local function ProcessTemperature(temperature) + if temperature == nil then + return nil + elseif temperature == -math.huge then + return -1e100 + elseif temperature == math.huge then + return 1e100 + else + return temperature + end +end + +local function ProcessQualityValue(qualityfunction) + qualityTable = {} + if qualityEnabled then + for _, quality in pairs(prototypes.quality) do + table.insert(qualityTable, {['quality'] = quality.name, ['value'] = qualityfunction(quality)}) + end + else + qualityEntity = {} + table.insert(qualityTable, {['quality'] = 'default', ['value'] = qualityfunction()}) + end + + return qualityTable +end + +local function ExportModList() + tmods = {} + table.insert(tmods, {['name'] = 'core', ['version'] = '1.0'}) + + for name, version in pairs(script.active_mods) do + if name ~= 'foremanexport' then + table.insert(tmods, {['name'] = name, ['version'] = version}) + end + end + etable['mods'] = tmods +end + +local function ExportResearch() + ttechnologies = {} + for _, tech in pairs(prototypes.technology) do + ttech = {} + ttech['name'] = tech.name + ttech['icon_name'] = 'icon.t.'..tech.name + ttech['enabled'] = tech.enabled + ttech['essential'] = tech.essential + ttech['hidden'] = tech.hidden + + ttech['prerequisites'] = {} + for pname, _ in pairs(tech.prerequisites) do + table.insert(ttech['prerequisites'], pname) + end + + ttech['successors'] = {} + for sname, _ in pairs(tech.successors) do + table.insert(ttech['successors'], sname) + end + + ttech['recipes'] = {} + ttech['alt_modifiers'] = {} + for _, effect in pairs(tech.effects) do + if effect.type == 'unlock-recipe' then + table.insert(ttech['recipes'], effect.recipe) + elseif effect.type == 'unlock-quality' or effect.type == 'mining-with-fluid' then + table.insert(ttech['alt_modifiers'],effect.type) + end + end + + ttech['research_unit_ingredients'] = {} + for _, ingredient in pairs(tech.research_unit_ingredients) do + tingredient = {} + tingredient['name'] = ingredient.name + tingredient['amount'] = ingredient.amount + table.insert(ttech['research_unit_ingredients'], tingredient) + end + ttech['research_unit_count'] = tech.research_unit_count + + ttech['lid'] = '$'..localindex + ExportLocalisedString(tech.localised_name, localindex) + localindex = localindex + 1 + + table.insert(ttechnologies, ttech) + end + etable['technologies'] = ttechnologies +end + +local function ExportRecipes() + trecipes = {} + for _, recipe in pairs(prototypes.recipe) do + trecipe = {} + trecipe['name'] = recipe.name + trecipe['icon_name'] = 'icon.r.'..recipe.name + if recipe.products[1] then + trecipe["icon_alt_name"] = 'icon.i.'..recipe.products[1].name + else + trecipe["icon_alt_name"] = 'icon.r.'..recipe.name + end + + trecipe['enabled'] = recipe.enabled + trecipe['category'] = recipe.category + trecipe['energy'] = recipe.energy + trecipe['order'] = recipe.order + trecipe['subgroup'] = recipe.subgroup.name + + trecipe['maximum_productivity'] = recipe.maximum_productivity + trecipe['hide_from_player_crafting'] = recipe.hide_from_player_crafting + + trecipe['allowed_effects'] = recipe.allowed_effects + + if recipe.allowed_module_categories ~= nil then + trecipe['allowed_module_categories'] = {} + for name, _ in pairs(trecipe['allowed_module_categories']) do + table.insert(trecipe['allowed_module_categories'], name) + end + end + + if recipe.surface_conditions ~= nil then + trecipe['surface_conditions'] = {} + for name, _ in pairs(trecipe['surface_conditions']) do + table.insert(trecipe['surface_conditions'], name) + end + end + + if recipe.trash ~= nil then + trecipe['trash'] = {} + for _, trashitem in pairs(recipe.trash) do + ttrashitem = {} + ttrashitem['name'] = trashitem.name + ttrashitem['type'] = trashitem.type + ttrashitem['amount'] = 1 + table.insert(trecipe['trash'], ttrashitem) + end + end + + trecipe['ingredients'] = {} + for _, ingredient in pairs(recipe.ingredients) do + tingredient = {} + tingredient['name'] = ingredient.name + tingredient['type'] = ingredient.type + tingredient['amount'] = ingredient.amount + if ingredient.type == 'fluid' and ingredient.minimum_temperature ~= nil then + tingredient['minimum_temperature'] = ProcessTemperature(ingredient.minimum_temperature) + end + if ingredient.type == 'fluid' and ingredient.maximum_temperature ~= nil then + tingredient['maximum_temperature'] = ProcessTemperature(ingredient.maximum_temperature) + end + table.insert(trecipe['ingredients'], tingredient) + end + + trecipe['products'] = {} + for _, product in pairs(recipe.products) do + tproduct = {} + tproduct['name'] = product.name + tproduct['type'] = product.type + + amount = (product.amount == nil) and ((product.amount_max + product.amount_min)/2) or product.amount + amount = amount * product.probability + + tproduct['amount'] = amount + tproduct['p_amount'] = amount + + if (product.catalyst_amount ~= nil) then + + if product.amount ~= nil then + tproduct['p_amount'] = product.amount - math.max(0, math.min(product.amount, product.catalyst_amount)) + elseif product.catalyst_amount <= product.amount_min then + tproduct['p_amount'] = ((product.amount_max + product.amount_min)/2) - math.max(0, product.catalyst_amount) + else + catalyst_amount = math.min(product.amount_max, product.catalyst_amount) + tproduct['p_amount'] = ((product.amount_max - catalyst_amount) * (product.amount_max + 1 - catalyst_amount) / 2) / (product.amount_max + 1 - product.amount_min) + end + + tproduct['p_amount'] = tproduct['p_amount'] * product.probability + + elseif product.amount ~= nil and product.probability == 1 then + for _, ingredient in pairs(recipe.ingredients) do + if ingredient.name == product.name then + tproduct['p_amount'] = math.max(0, product.amount - ingredient.amount) + end + end + end + + if product.type == 'fluid' and product.temperature ~= nil then + tproduct['temperature'] = ProcessTemperature(product.temperature) + end + table.insert(trecipe['products'], tproduct) + end + + trecipe['lid'] = '$'..localindex + ExportLocalisedString(recipe.localised_name, localindex) + localindex = localindex + 1 + + table.insert(trecipes, trecipe) + end + etable['recipes'] = trecipes +end + +local function ExportQuality() + tqualities = {} + if prototypes.quality ~= nil then + for _, quality in pairs(prototypes.quality) do + + tquality = {} + tquality['name'] = quality.name + tquality['icon_name'] = 'icon.q.'..quality.name + tquality['order'] = quality.order + + tquality['level'] = quality.level + tquality['beacon_power_multiplier'] = quality.beacon_power_usage_multiplier + tquality['mining_drill_resource_drain_multiplier'] = quality.mining_drill_resource_drain_multiplier + tquality['next_probability'] = quality.next_probability + tquality['next'] = (quality.next ~= nil) and quality.next.name or nil + + tquality['lid'] = '$'..localindex + ExportLocalisedString(quality.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tqualities, tquality) + end + end + etable['qualities'] = tqualities +end + +local function ExportItems() + titems = {} + for _, item in pairs(prototypes.item) do + titem = {} + titem['name'] = item.name + titem['icon_name'] = 'icon.i.'..item.name + titem['order'] = item.order + titem['subgroup'] = item.subgroup.name + titem["stack_size"] = item.stackable and item.stack_size or 1 + titem['weight'] = item.weight + + titem['ingredient_to_weight_coefficient'] = item.ingredient_to_weight_coefficient + + + if item.fuel_category ~= nil then + titem['fuel_category'] = item.fuel_category + titem['fuel_value'] = item.fuel_value + titem['fuel_emissions_multiplier'] = item.fuel_emissions_multiplier + end + + if item.burnt_result ~= nil then + titem['burnt_result'] = item.burnt_result.name + end + + if item.spoil_result ~= nil then + titem['spoil_result'] = item.spoil_result.name + end + + if item.plant_result ~= nil then + titem['plant_result'] = item.plant_result.name + end + + if item.rocket_launch_products ~= nil and item.rocket_launch_products[1] ~= nil then + titem['rocket_launch_products'] = {} + for _, product in pairs(item.rocket_launch_products) do + tproduct = {} + tproduct['name'] = product.name + tproduct['type'] = product.type + + amount = (product.amount == nil) and ((product.amount_max + product.amount_min)/2) or product.amount + amount = amount * ( (product.probability == nil) and 1 or product.probability) + + tproduct['amount'] = amount + + if product.type == 'fluid' and product.temperature ~= nil then + tproduct['temperature'] = ProcessTemperature(product.temperature) + end + table.insert(titem['rocket_launch_products'], tproduct) + end + end + + titem['q_spoil_ticks'] = ProcessQualityValue(item.get_spoil_ticks) + + titem['lid'] = '$'..localindex + ExportLocalisedString(item.localised_name, localindex) + localindex = localindex + 1 + + table.insert(titems, titem) + end + etable['items'] = titems +end + +local function ExportFluids() + tfluids = {} + for _, fluid in pairs(prototypes.fluid) do + tfluid = {} + tfluid['name'] = fluid.name + tfluid['icon_name'] = 'icon.i.'..fluid.name + tfluid['order'] = fluid.order + tfluid['subgroup'] = fluid.subgroup.name + tfluid['default_temperature'] = ProcessTemperature(fluid.default_temperature) + tfluid['max_temperature'] = ProcessTemperature(fluid.max_temperature) + tfluid['gas_temperature'] = ProcessTemperature(fluid.gas_temperature) + tfluid['heat_capacity'] = fluid.heat_capacity == nil and 0 or fluid.heat_capacity + + if fluid.fuel_value ~= 0 then + tfluid['fuel_value'] = fluid.fuel_value + tfluid['emissions_multiplier'] = fluid.emissions_multiplier + end + + tfluid['lid'] = '$'..localindex + ExportLocalisedString(fluid.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tfluids, tfluid) + end + etable['fluids'] = tfluids +end + + +local function ExportModules() + tmodules = {} + for _, module in pairs(prototypes.item) do + if module.module_effects ~= nil then + tmodule = {} + tmodule['name'] = module.name + tmodule['icon_name'] = 'icon.e.'..module.name + tmodule["icon_alt_name"] = 'icon.i.'..module.name + tmodule['order'] = module.order + tmodule['category'] = module.category + tmodule['tier'] = module.tier + + tmodule['module_effects'] = {} + tmodule['module_effects']['consumption'] = (module.module_effects.consumption == nil) and 0 or module.module_effects.consumption + tmodule['module_effects']['speed'] = (module.module_effects.speed == nil) and 0 or module.module_effects.speed + tmodule['module_effects']['productivity'] = (module.module_effects.productivity == nil) and 0 or module.module_effects.productivity + tmodule['module_effects']['pollution'] = (module.module_effects.pollution == nil) and 0 or module.module_effects.pollution + tmodule['module_effects']['quality'] = (module.module_effects.quality == nil) and 0 or module.module_effects.quality + + tmodule['lid'] = '$'..localindex + ExportLocalisedString(module.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tmodules, tmodule) + end + end + etable['modules'] = tmodules +end + +local function ExportEntities() + tentities = {} + for _, entity in pairs(prototypes.entity) do --select any entity with an energy source (or fluid -> offshore pump). we will sort them out later. BONUS: also grab the 'character' entity - for those hand-crafts + if entity.type == 'boiler' or entity.type == 'generator' or entity.type == 'reactor' or entity.type == 'mining-drill' or entity.type == 'offshore-pump' or entity.type == 'furnace' or entity.type == 'assembling-machine' or entity.type == 'beacon' or entity.type == 'rocket-silo' or entity.type == 'burner-generator' or entity.type == "character" then + tentity = {} + tentity['name'] = entity.name + tentity['icon_name'] = 'icon.e.'..entity.name + tentity["icon_alt_name"] = 'icon.i.'..entity.name + tentity['order'] = entity.order + tentity['type'] = entity.type + + if entity.next_upgrade ~= nil then tentity['next_upgrade'] = entity.next_upgrade.name end + + if entity.type == 'mining-drill' or entity.type == 'character' then + tentity['speed'] = entity.mining_speed + elseif entity.type == 'offshore-pump' then + tentity['speed'] = entity.pumping_speed + elseif entity.type == 'furnace' or entity.type == 'assembling-machine' or entity.type == 'rocket-silo' then + tentity['q_speed'] = ProcessQualityValue(entity.get_crafting_speed) + end + + if entity.fluid_usage_per_tick ~= nil then tentity['fluid_usage_per_tick'] = entity.fluid_usage_per_tick end + + if entity.module_inventory_size ~= nil then tentity['module_inventory_size'] = entity.module_inventory_size end + if entity.distribution_effectivity ~= nil then tentity['distribution_effectivity'] = entity.distribution_effectivity end + if entity.distribution_effectivity_bonus_per_quality_level ~= nil then tentity['distribution_effectivity_bonus_per_quality_level'] = entity.distribution_effectivity_bonus_per_quality_level end + + if entity.neighbour_bonus ~= nil then tentity['neighbour_bonus'] = entity.neighbour_bonus end + + if entity.type == 'mining-drill' or entity.type == 'furnace' or entity.type == 'assembling-machine' or entity.type == 'beacon' or entity.type == 'rocket-silo' then + tentity['base_module_effects'] = {} + if entity.effect_receiver ~= nil then + tentity['base_module_effects']['consumption'] = entity.effect_receiver.base_effect.consumption ~= nil and entity.effect_receiver.base_effect.consumption or 0 + tentity['base_module_effects']['speed'] = entity.effect_receiver.base_effect.speed ~= nil and entity.effect_receiver.base_effect.speed or 0 + tentity['base_module_effects']['productivity'] = entity.effect_receiver.base_effect.productivity ~= nil and entity.effect_receiver.base_effect.productivity or 0 + tentity['base_module_effects']['pollution'] = entity.effect_receiver.base_effect.pollution ~= nil and entity.effect_receiver.base_effect.pollution or 0 + tentity['base_module_effects']['quality'] = entity.effect_receiver.base_effect.quality ~= nil and entity.effect_receiver.base_effect.quality or 0 + tentity['uses_module_effects'] = entity.effect_receiver.uses_module_effects + tentity['uses_beacon_effects'] = entity.effect_receiver.uses_beacon_effects + tentity['uses_surface_effects'] = entity.effect_receiver.uses_surface_effects + else + tentity['base_module_effects']['consumption'] = 0 + tentity['base_module_effects']['speed'] = 0 + tentity['base_module_effects']['productivity'] = 0 + tentity['base_module_effects']['pollution'] = 0 + tentity['base_module_effects']['quality'] = 0 + tentity['use_module_effects'] = false + tentity['uses_beacon_effects'] = false + tentity['uses_surface_effects'] = false + end + + tentity['allowed_effects'] = entity.allowed_effects ~= nil and entity.allowed_effects or {} + + tentity['allowed_module_categories'] = entity.allowed_module_categories + end + + tentity['items_to_place_this'] = {} + if entity.items_to_place_this ~= nil then + for _, item in pairs(entity.items_to_place_this) do + if(type(item) == 'string') then + table.insert(tentity['items_to_place_this'], item) + else + table.insert(tentity['items_to_place_this'], item['name']) + end + end + end + + if entity.crafting_categories ~= nil then + tentity['crafting_categories'] = {} + for fname, _ in pairs(entity.crafting_categories) do + table.insert(tentity['crafting_categories'], fname) + end + end + if entity.resource_categories ~= nil then + tentity['resource_categories'] = {} + for fname, _ in pairs(entity.resource_categories) do + table.insert(tentity['resource_categories'], fname) + end + end + tentity['profile'] = entity.profile --beacons + + --fluid boxes for input/output of boiler & generator need to be processed (almost guaranteed to be 'steam' and 'water', but... tests have shown that we can heat up whatever we want) + --additinally we want count of fluid boxes in/out (for checking recipe validity) + if entity.type == 'boiler' then + tentity['target_temperature'] = ProcessTemperature(entity.target_temperature) + + if entity.fluidbox_prototypes[1].filter ~= nil then + tentity['fluid_ingredient'] = entity.fluidbox_prototypes[1].filter.name + end + if entity.fluidbox_prototypes[2].filter ~= nil then + tentity['fluid_product'] = entity.fluidbox_prototypes[2].filter.name + end + elseif entity.type == 'generator' then + tentity['full_power_temperature'] = ProcessTemperature(entity.maximum_temperature) + tentity['max_power_output'] = entity.max_power_output + + tentity['minimum_temperature'] = ProcessTemperature(entity.fluidbox_prototypes[1].minimum_temperature) + tentity['maximum_temperature'] = ProcessTemperature(entity.fluidbox_prototypes[1].maximum_temperature) + if entity.fluidbox_prototypes[1].filter ~= nil then + tentity['fluid_ingredient'] = entity.fluidbox_prototypes[1].filter.name + end + else + inPipes = 0 + inPipeFilters = {} + ioPipes = 0 + ioPipeFilters = {} + outPipes = 0 + outPipeFilters = {} + -- i will ignore temperature limitations for this. (this is for recipe checks) + + for _, fbox in pairs(entity.fluidbox_prototypes) do + if fbox.production_type == 'input' then + inPipes = inPipes + 1 + if fbox.filter ~= nil then table.insert(inPipeFilters, fbox.filter.name) end + elseif fbox.production_type == 'output' then + outPipes = outPipes + 1 + if fbox.filter ~= nil then table.insert(outPipeFilters, fbox.filter.name) end + elseif fbox.production_type == 'input-output' or fbox.production_type == 'none' then --il be honest - no idea what 'none' means, but its used for miners and represents a two way connection - so chuck it under in-out + ioPipes = ioPipes + 1 + if fbox.filter ~= nil then table.insert(ioPipeFilters, fbox.filter.name) end + end + end + tentity['in_pipes'] = inPipes + tentity['in_pipe_filters'] = inPipeFilters + tentity['out_pipes'] = outPipes + tentity['out_pipe_filters'] = outPipeFilters + tentity['io_pipes'] = ioPipes + tentity['io_pipe_filters'] = ioPipeFilters + end + + tentity['energy_usage'] = (entity.energy_usage == nil) and 0 or entity.energy_usage + tentity['q_max_energy_usage'] = ProcessQualityValue(entity.get_max_energy_usage) + tentity['q_energy_production'] = ProcessQualityValue(entity.get_max_energy_production) + + if entity.burner_prototype ~= null then + tentity['fuel_type'] = 'item' + tentity['fuel_effectivity'] = entity.burner_prototype.effectivity + + tentity['pollution'] = {} + for pollutant, quantity in pairs(entity.burner_prototype.emissions_per_joule) do + tentity['pollution'][pollutant] = quantity + end + + tentity['fuel_categories'] = {} + for fname, _ in pairs(entity.burner_prototype.fuel_categories) do + table.insert(tentity['fuel_categories'], fname) + end + + elseif entity.fluid_energy_source_prototype then + tentity['fuel_type'] = 'fluid' + tentity['fuel_effectivity'] = entity.fluid_energy_source_prototype.effectivity + + tentity['pollution'] = {} + for pollutant, quantity in pairs(entity.burner_prototype.emissions_per_joule) do + tentity['pollution'][pollutant] = quantity + end + tentity['burns_fluid'] = entity.fluid_energy_source_prototype.burns_fluid + + --fluid limitations from fluid box: + if entity.fluid_energy_source_prototype.fluid_box.filter ~= nil then + tentity['fuel_filter'] = entity.fluid_energy_source_prototype.fluid_box.filter.name + end + tentity['minimum_fuel_temperature'] = ProcessTemperature(entity.fluid_energy_source_prototype.fluid_box.minimum_temperature) -- nil is accepted + tentity['maximum_fuel_temperature'] = ProcessTemperature(entity.fluid_energy_source_prototype.fluid_box.maximum_temperature) --nil is accepted + + elseif entity.electric_energy_source_prototype then + tentity['fuel_type'] = 'electricity' + tentity['fuel_effectivity'] = 1 + tentity['drain'] = entity.electric_energy_source_prototype.drain + + tentity['pollution'] = {} + for pollutant, quantity in pairs(entity.electric_energy_source_prototype.emissions_per_joule) do + tentity['pollution'][pollutant] = quantity + end + + elseif entity.heat_energy_source_prototype then + tentity['fuel_type'] = 'heat' + tentity['fuel_effectivity'] = 1 + + tentity['pollution'] = {} + for pollutant, quantity in pairs(entity.heat_energy_source_prototype.emissions_per_joule) do + tentity['pollution'][pollutant] = quantity + end + elseif entity.void_energy_source_prototype then + tentity['fuel_type'] = 'void' + tentity['fuel_effectivity'] = 1 + + tentity['pollution'] = {} + for pollutant, quantity in pairs(entity.void_energy_source_prototype.emissions_per_joule) do + tentity['pollution'][pollutant] = quantity + end + else + tentity['fuel_type'] = 'void' + tentity['fuel_effectivity'] = 1 + + tentity['pollution'] = {} + end + + tentity['lid'] = '$'..localindex + ExportLocalisedString(entity.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tentities, tentity) + end + end + etable['entities'] = tentities +end + +local function ExportResources() + tresources = {} + for _, resource in pairs(prototypes.entity) do + if resource.resource_category ~= nil and resource.mineable_properties.products ~= nil and resource.mineable_properties.minable then + tresource = {} + tresource['name'] = resource.name + tresource['resource_category'] = resource.resource_category + tresource['mining_time'] = resource.mineable_properties.mining_time + if resource.mineable_properties.required_fluid and resource.mineable_properties.fluid_amount then + tresource['required_fluid'] = resource.mineable_properties.required_fluid + tresource['fluid_amount'] = resource.mineable_properties.fluid_amount + end + + tresource['products'] = {} + for _, product in pairs(resource.mineable_properties.products) do + tproduct = {} + tproduct['name'] = product.name + tproduct['type'] = product.type + + amount = (product.amount == nil) and ((product.amount_max + product.amount_min)/2) or product.amount + amount = amount * ( (product.probability == nil) and 1 or product.probability) + tproduct['amount'] = amount + + if product.type == 'fluid' and product.temperate ~= nil then + tproduct['temperature'] = ProcessTemperature(product.temperature) + end + table.insert(tresource['products'], tproduct) + end + + tresource['lid'] = '$'..localindex + ExportLocalisedString(resource.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tresources, tresource) + end + end + etable['resources'] = tresources +end + +valid_water_resources = {} +local function ExportWaterResources() + twresources = {} + for _, wresource in pairs(prototypes.tile) do + if wresource.fluid ~= nil then + found = 0 + for _, existing_fluid in ipairs(valid_water_resources) do + if wresource.fluid.name == existing_fluid then found = 1 end + end + if found == 0 then + twresource = {} + twresource['name'] = wresource.fluid.name + twresource['resource_category'] = '<>' + twresource['mining_time'] = 1 + twresource['products'] = {} + tproduct = {} + tproduct['name'] = wresource.fluid.name + tproduct['type'] = 'fluid' + tproduct['amount'] = 60 + tproduct['temperate'] = ProcessTemperature(wresource.fluid.default_temperature) + table.insert(twresource['products'], tproduct) + + twresource['lid'] = '$'..localindex + ExportLocalisedString(wresource.fluid.localised_name, localindex) + localindex = localindex + 1 + + table.insert(twresources, twresource) + table.insert(valid_water_resources, wresource.fluid.name) + end + end + end + + etable['water_resources'] = twresources +end + +local function ExportGroups() + tgroups = {} + for _, group in pairs(prototypes['item_group']) do + tgroup = {} + tgroup['name'] = group.name + tgroup['icon_name'] = 'icon.g.'..group.name + tgroup['order'] = group.order + + tgroup['subgroups'] = {} + for _, subgroup in pairs(group.subgroups) do + table.insert(tgroup['subgroups'], subgroup.name) + end + + tgroup['lid'] = '$'..localindex + ExportLocalisedString(group.localised_name, localindex) + localindex = localindex + 1 + + table.insert(tgroups, tgroup) + end + etable['groups'] = tgroups +end + +local function ExportSubGroups() + tsgroups = {} + for _, sgroup in pairs(prototypes['item_subgroup']) do + tsgroup = {} + tsgroup['name'] = sgroup.name + tsgroup['order'] = sgroup.order + + table.insert(tsgroups, tsgroup) + end + etable['subgroups'] = tsgroups +end + +script.on_nth_tick(1, + function() + + etable['difficulty'] = {0,0} + + localised_print('<<>>') + + ExportModList() + ExportResearch() + ExportRecipes() + + ExportQuality() + + ExportItems() + ExportFluids() + ExportModules() + ExportEntities() + ExportResources() + ExportWaterResources() + ExportGroups() + ExportSubGroups() + + localised_print('<<>>') + + localised_print('<<>>') + localised_print(helpers.table_to_json(etable)) + localised_print('<<>>') + + ENDEXPORTANDJUSTDIE() -- just the most safe way of ensuring that we export once and quit. Basically... there is no ENDEXPORTANDJUSTDIE function. so lua will throw an exception and the run will end here. + end +) \ No newline at end of file diff --git a/Foreman/Mods/foremansavereader_2.0.0/info.json b/Foreman/Mods/foremansavereader_2.0.0/info.json new file mode 100644 index 00000000..52d5dde7 --- /dev/null +++ b/Foreman/Mods/foremansavereader_2.0.0/info.json @@ -0,0 +1,14 @@ +{ + "name": "foremansavereader", + "version": "2.0.0", + "factorio_version": "2.0", + "title": "foremansavereader", + "author": "Me", + "contact": "", + "homepage": "", + "description": "temp mod to grab the mod list and the enabled statuses of technologies and recipes)", + "dependencies": + [ + "base >= 2.0.7" + ] +} diff --git a/Foreman/Mods/foremansavereader_2.0.0/instrument-control.lua b/Foreman/Mods/foremansavereader_2.0.0/instrument-control.lua new file mode 100644 index 00000000..1abe12c9 --- /dev/null +++ b/Foreman/Mods/foremansavereader_2.0.0/instrument-control.lua @@ -0,0 +1,58 @@ +local function Export() + exporttable = {} + exporttable['mods'] = {} + exporttable['technologies'] = {} + exporttable['recipes'] = {} + + + for name, version in pairs(script.active_mods) do + ntable = {} + ntable['name'] = name + ntable['version'] = version + table.insert(exporttable['mods'], ntable) + end + + if game.forces['player'] ~= nil then + for _, tech in pairs(game.forces['player'].technologies) do + ttech = {} + ttech['name'] = tech.name + ttech['enabled'] = tech.researched + table.insert(exporttable['technologies'], ttech) + end + for _, recipe in pairs(game.forces['player'].recipes) do + trecipe = {} + trecipe['name'] = recipe.name + trecipe['enabled'] = recipe.enabled + table.insert(exporttable['recipes'], trecipe) + end + else --couldnt find the 'player' force, so just read all forces and assume a complete amalgamation of all researched tech and recipes works. + for _, force in pairs(game.forces) do + for _, tech in pairs(force.technologies) do + ttech = {} + ttech['name'] = tech.name + ttech['enabled'] = tech.researched + table.insert(exporttable['technologies'], ttech) + end + for _, recipe in pairs(force.recipes) do + trecipe = {} + trecipe['name'] = recipe.name + trecipe['enabled'] = recipe.enabled + table.insert(exporttable['recipes'], trecipe) + end + end + end + + localised_print('<<>>') + localised_print(helpers.table_to_json(exporttable)) + localised_print('<<>>') + +end + +script.on_nth_tick(1, + function() + + Export() + + ENDEXPORTANDJUSTDIE() -- just the most safe way of ensuring that we export once and quit. Basically... there is no ENDEXPORTANDJUSTDIE function. so lua will throw an expection and the run will end here. + end +) \ No newline at end of file diff --git a/Foreman/Presets/Factorio 1.1 Vanilla.dat b/Foreman/Presets/Factorio 2.0 Vanilla.dat similarity index 73% rename from Foreman/Presets/Factorio 1.1 Vanilla.dat rename to Foreman/Presets/Factorio 2.0 Vanilla.dat index f021fa33..b115a53a 100644 Binary files a/Foreman/Presets/Factorio 1.1 Vanilla.dat and b/Foreman/Presets/Factorio 2.0 Vanilla.dat differ diff --git a/Foreman/Presets/Factorio 2.0 Vanilla.json b/Foreman/Presets/Factorio 2.0 Vanilla.json new file mode 100644 index 00000000..e73442d8 --- /dev/null +++ b/Foreman/Presets/Factorio 2.0 Vanilla.json @@ -0,0 +1,16 @@ +{ + "technologies": [ + ], + "recipes": [ + ], + "items": [ + ], + "fluids": [ + ], + "modules": [ + ], + "entities": [ + ], + "resources": [ + ] +} \ No newline at end of file diff --git a/Foreman/Presets/Factorio 1.1 Vanilla.pjson b/Foreman/Presets/Factorio 2.0 Vanilla.pjson similarity index 63% rename from Foreman/Presets/Factorio 1.1 Vanilla.pjson rename to Foreman/Presets/Factorio 2.0 Vanilla.pjson index 92a879c8..a1c0e425 100644 --- a/Foreman/Presets/Factorio 1.1 Vanilla.pjson +++ b/Foreman/Presets/Factorio 2.0 Vanilla.pjson @@ -10,46 +10,30 @@ }, { "name": "base", - "version": "1.1.46" - }, - { - "name": "foremanexport", - "version": "1.0.0" + "version": "2.0.9" } ], "technologies": [ { - "name": "automation", - "icon_name": "icon.t.automation", - "enabled": true, - "hidden": false, - "prerequisites": {}, - "recipes": [ - "assembling-machine-1", - "long-handed-inserter" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - } - ], - "research_unit_count": 10, - "localised_name": "Automation" - }, - { - "name": "automation-2", - "icon_name": "icon.t.automation-2", + "name": "advanced-circuit", + "icon_name": "icon.t.advanced-circuit", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electronics", - "steel-processing", - "logistic-science-pack" + "plastics" + ], + "successors": [ + "bulk-inserter", + "chemical-science-pack", + "mining-productivity-1", + "modular-armor", + "modules" ], "recipes": [ - "assembling-machine-2" + "advanced-circuit" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -60,21 +44,24 @@ "amount": 1 } ], - "research_unit_count": 40, - "localised_name": "Automation 2" + "research_unit_count": 200, + "localised_name": "Advanced circuit" }, { - "name": "automation-3", - "icon_name": "icon.t.automation-3", + "name": "advanced-combinators", + "icon_name": "icon.t.advanced-combinators", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "speed-module", - "production-science-pack" + "circuit-network", + "chemical-science-pack" ], + "successors": {}, "recipes": [ - "assembling-machine-3" + "selector-combinator" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -87,65 +74,60 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 } ], - "research_unit_count": 150, - "localised_name": "Automation 3" + "research_unit_count": 50, + "localised_name": "Advanced combinators" }, { - "name": "electronics", - "icon_name": "icon.t.electronics", + "name": "advanced-material-processing", + "icon_name": "icon.t.advanced-material-processing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "automation" - ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - } + "steel-processing", + "logistic-science-pack" ], - "research_unit_count": 30, - "localised_name": "Electronics" - }, - { - "name": "fast-inserter", - "icon_name": "icon.t.fast-inserter", - "enabled": true, - "hidden": false, - "prerequisites": [ - "electronics" + "successors": [ + "advanced-material-processing-2", + "concrete", + "low-density-structure" ], "recipes": [ - "fast-inserter", - "filter-inserter" + "steel-furnace" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], - "research_unit_count": 30, - "localised_name": "Fast inserter" + "research_unit_count": 75, + "localised_name": "Advanced material processing" }, { - "name": "advanced-electronics", - "icon_name": "icon.t.advanced-electronics", + "name": "advanced-material-processing-2", + "icon_name": "icon.t.advanced-material-processing-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "plastics" + "advanced-material-processing", + "chemical-science-pack" + ], + "successors": [ + "production-science-pack" ], "recipes": [ - "advanced-circuit" + "electric-furnace" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -154,22 +136,37 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Advanced electronics" + "research_unit_count": 250, + "localised_name": "Advanced material processing 2" }, { - "name": "advanced-electronics-2", - "icon_name": "icon.t.advanced-electronics-2", + "name": "advanced-oil-processing", + "icon_name": "icon.t.advanced-oil-processing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "chemical-science-pack" ], + "successors": [ + "coal-liquefaction", + "lubricant", + "rocket-fuel" + ], "recipes": [ - "processing-unit" + "advanced-oil-processing", + "heavy-oil-cracking", + "light-oil-cracking", + "solid-fuel-from-heavy-oil", + "solid-fuel-from-light-oil" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -184,27 +181,31 @@ "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Advanced electronics 2" + "research_unit_count": 75, + "localised_name": "Advanced oil processing" }, { - "name": "circuit-network", - "icon_name": "icon.t.circuit-network", + "name": "artillery", + "icon_name": "icon.t.artillery", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electronics", - "logistic-science-pack" + "military-4", + "tank", + "concrete", + "radar" + ], + "successors": [ + "artillery-shell-range-1", + "artillery-shell-speed-1" ], "recipes": [ - "red-wire", - "green-wire", - "arithmetic-combinator", - "decider-combinator", - "constant-combinator", - "power-switch", - "programmable-speaker" + "artillery-wagon", + "artillery-turret", + "artillery-shell" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -213,22 +214,36 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Circuit network" + "research_unit_count": 2000, + "localised_name": "Artillery" }, { - "name": "explosives", - "icon_name": "icon.t.explosives", + "name": "artillery-shell-range-1", + "icon_name": "icon.t.artillery-shell-range-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "sulfur-processing" - ], - "recipes": [ - "explosives" + "artillery", + "space-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -237,44 +252,40 @@ { "name": "logistic-science-pack", "amount": 1 - } - ], - "research_unit_count": 100, - "localised_name": "Explosives" - }, - { - "name": "logistics", - "icon_name": "icon.t.logistics", - "enabled": true, - "hidden": false, - "prerequisites": {}, - "recipes": [ - "underground-belt", - "splitter" - ], - "research_unit_ingredients": [ + }, { - "name": "automation-science-pack", + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", "amount": 1 } ], - "research_unit_count": 20, - "localised_name": "Logistics" + "research_unit_count": 1000, + "localised_name": "Artillery shell range" }, { - "name": "logistics-2", - "icon_name": "icon.t.logistics-2", + "name": "artillery-shell-speed-1", + "icon_name": "icon.t.artillery-shell-speed-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "logistics", - "logistic-science-pack" - ], - "recipes": [ - "fast-transport-belt", - "fast-underground-belt", - "fast-splitter" + "artillery", + "space-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -283,25 +294,43 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Logistics 2" + "research_unit_count": 1333, + "localised_name": "Artillery shell shooting speed" }, { - "name": "logistics-3", - "icon_name": "icon.t.logistics-3", + "name": "atomic-bomb", + "icon_name": "icon.t.atomic-bomb", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "production-science-pack", - "lubricant" + "military-4", + "kovarex-enrichment-process", + "rocketry" ], + "successors": {}, "recipes": [ - "express-transport-belt", - "express-underground-belt", - "express-splitter" + "atomic-bomb" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -311,6 +340,10 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 @@ -318,71 +351,90 @@ { "name": "production-science-pack", "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Logistics 3" + "research_unit_count": 5000, + "localised_name": "Atomic bomb" }, { - "name": "optics", - "icon_name": "icon.t.optics", + "name": "automated-rail-transportation", + "icon_name": "icon.t.automated-rail-transportation", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": {}, + "prerequisites": [ + "railway" + ], + "successors": {}, "recipes": [ - "small-lamp" + "train-stop", + "rail-signal", + "rail-chain-signal" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], - "research_unit_count": 10, - "localised_name": "Optics" + "research_unit_count": 200, + "localised_name": "Automated rail transportation" }, { - "name": "laser", - "icon_name": "icon.t.laser", + "name": "automation", + "icon_name": "icon.t.automation", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "optics", - "battery", - "chemical-science-pack" + "automation-science-pack" ], - "recipes": {}, + "successors": [ + "automation-2" + ], + "recipes": [ + "assembling-machine-1", + "long-handed-inserter" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Laser" + "research_unit_count": 10, + "localised_name": "Automation" }, { - "name": "solar-energy", - "icon_name": "icon.t.solar-energy", + "name": "automation-2", + "icon_name": "icon.t.automation-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "optics", - "electronics", + "automation", "steel-processing", "logistic-science-pack" ], + "successors": [ + "concrete", + "fluid-handling", + "research-speed-1" + ], "recipes": [ - "solar-panel" + "assembling-machine-2" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -393,39 +445,25 @@ "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Solar energy" - }, - { - "name": "gun-turret", - "icon_name": "icon.t.gun-turret", - "enabled": true, - "hidden": false, - "prerequisites": {}, - "recipes": [ - "gun-turret" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - } - ], - "research_unit_count": 10, - "localised_name": "Gun turret" + "research_unit_count": 40, + "localised_name": "Automation 2" }, { - "name": "laser-turret", - "icon_name": "icon.t.laser-turret", + "name": "automation-3", + "icon_name": "icon.t.automation-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser", - "military-science-pack" + "speed-module", + "production-science-pack", + "electric-engine" ], + "successors": {}, "recipes": [ - "laser-turret" + "assembling-machine-3" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -436,47 +474,66 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 }, { - "name": "chemical-science-pack", + "name": "production-science-pack", "amount": 1 } ], "research_unit_count": 150, - "localised_name": "Laser turret" + "localised_name": "Automation 3" }, { - "name": "stone-wall", - "icon_name": "icon.t.stone-wall", + "name": "automation-science-pack", + "icon_name": "icon.t.automation-science-pack", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": {}, - "recipes": [ + "prerequisites": [ + "steam-power", + "electronics" + ], + "successors": [ + "automation", + "electric-mining-drill", + "fast-inserter", + "gun-turret", + "lamp", + "logistic-science-pack", + "logistics", + "military", + "radar", + "repair-pack", + "steel-processing", "stone-wall" ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - } + "recipes": [ + "automation-science-pack" ], - "research_unit_count": 10, - "localised_name": "Stone wall" + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Automation science pack" }, { - "name": "gate", - "icon_name": "icon.t.gate", + "name": "automobilism", + "icon_name": "icon.t.automobilism", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stone-wall", - "military-2" + "logistics-2", + "engine" + ], + "successors": [ + "tank" ], "recipes": [ - "gate" + "car" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -488,20 +545,27 @@ } ], "research_unit_count": 100, - "localised_name": "Gate" + "localised_name": "Automobilism" }, { - "name": "engine", - "icon_name": "icon.t.engine", + "name": "battery", + "icon_name": "icon.t.battery", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "steel-processing", - "logistic-science-pack" + "sulfur-processing" + ], + "successors": [ + "battery-equipment", + "electric-energy-accumulators", + "laser", + "robotics" ], "recipes": [ - "engine-unit" + "battery" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -512,20 +576,26 @@ "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Engine" + "research_unit_count": 150, + "localised_name": "Battery" }, { - "name": "electric-engine", - "icon_name": "icon.t.electric-engine", + "name": "battery-equipment", + "icon_name": "icon.t.battery-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "lubricant" + "battery", + "solar-panel-equipment" + ], + "successors": [ + "battery-mk2-equipment" ], "recipes": [ - "electric-engine-unit" + "battery-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -534,26 +604,27 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], "research_unit_count": 50, - "localised_name": "Electric engine" + "localised_name": "Personal battery" }, { - "name": "lubricant", - "icon_name": "icon.t.lubricant", + "name": "battery-mk2-equipment", + "icon_name": "icon.t.battery-mk2-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-oil-processing" + "battery-equipment", + "low-density-structure", + "power-armor" ], + "successors": {}, "recipes": [ - "lubricant" + "battery-mk2-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -568,44 +639,23 @@ "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Lubricant" - }, - { - "name": "battery", - "icon_name": "icon.t.battery", - "enabled": true, - "hidden": false, - "prerequisites": [ - "sulfur-processing" - ], - "recipes": [ - "battery" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - } - ], - "research_unit_count": 150, - "localised_name": "Battery" + "research_unit_count": 100, + "localised_name": "Personal battery MK2" }, { - "name": "landfill", - "icon_name": "icon.t.landfill", + "name": "belt-immunity-equipment", + "icon_name": "icon.t.belt-immunity-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "logistic-science-pack" + "solar-panel-equipment" ], + "successors": {}, "recipes": [ - "landfill" + "belt-immunity-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -617,18 +667,23 @@ } ], "research_unit_count": 50, - "localised_name": "Landfill" + "localised_name": "Belt immunity equipment" }, { "name": "braking-force-1", "icon_name": "icon.t.braking-force-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "railway", "chemical-science-pack" ], + "successors": [ + "braking-force-2" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -650,11 +705,16 @@ "name": "braking-force-2", "icon_name": "icon.t.braking-force-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "braking-force-1" ], + "successors": [ + "braking-force-3" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -676,11 +736,17 @@ "name": "braking-force-3", "icon_name": "icon.t.braking-force-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "braking-force-2" + "braking-force-2", + "production-science-pack" + ], + "successors": [ + "braking-force-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -706,11 +772,16 @@ "name": "braking-force-4", "icon_name": "icon.t.braking-force-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "braking-force-3" ], + "successors": [ + "braking-force-5" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -736,11 +807,16 @@ "name": "braking-force-5", "icon_name": "icon.t.braking-force-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "braking-force-4" ], + "successors": [ + "braking-force-6" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -766,11 +842,17 @@ "name": "braking-force-6", "icon_name": "icon.t.braking-force-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "braking-force-5" + "braking-force-5", + "utility-science-pack" + ], + "successors": [ + "braking-force-7" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -800,11 +882,14 @@ "name": "braking-force-7", "icon_name": "icon.t.braking-force-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "braking-force-6" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -831,17 +916,23 @@ "localised_name": "Braking force 7" }, { - "name": "chemical-science-pack", - "icon_name": "icon.t.chemical-science-pack", + "name": "bulk-inserter", + "icon_name": "icon.t.bulk-inserter", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-electronics", - "sulfur-processing" + "fast-inserter", + "logistics-2", + "advanced-circuit" + ], + "successors": [ + "inserter-capacity-bonus-1" ], "recipes": [ - "chemical-science-pack" + "bulk-inserter" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -852,39 +943,78 @@ "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Chemical science pack" + "research_unit_count": 150, + "localised_name": "Bulk inserter" }, { - "name": "logistic-science-pack", - "icon_name": "icon.t.logistic-science-pack", + "name": "chemical-science-pack", + "icon_name": "icon.t.chemical-science-pack", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": {}, + "prerequisites": [ + "advanced-circuit", + "sulfur-processing" + ], + "successors": [ + "advanced-combinators", + "advanced-material-processing-2", + "advanced-oil-processing", + "braking-force-1", + "electric-energy-distribution-2", + "follower-robot-count-3", + "inserter-capacity-bonus-3", + "laser", + "low-density-structure", + "military-3", + "mining-productivity-2", + "physical-projectile-damage-5", + "processing-unit", + "refined-flammables-3", + "research-speed-3", + "stronger-explosives-3", + "uranium-mining", + "weapon-shooting-speed-5" + ], "recipes": [ - "logistic-science-pack" + "chemical-science-pack" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], "research_unit_count": 75, - "localised_name": "Logistic science pack" + "localised_name": "Chemical science pack" }, { - "name": "military-science-pack", - "icon_name": "icon.t.military-science-pack", + "name": "circuit-network", + "icon_name": "icon.t.circuit-network", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-2", - "stone-wall" + "logistic-science-pack" + ], + "successors": [ + "advanced-combinators" ], "recipes": [ - "military-science-pack" + "arithmetic-combinator", + "decider-combinator", + "constant-combinator", + "power-switch", + "programmable-speaker", + "display-panel", + "iron-stick" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -895,22 +1025,24 @@ "amount": 1 } ], - "research_unit_count": 30, - "localised_name": "Military science pack" + "research_unit_count": 100, + "localised_name": "Circuit network" }, { - "name": "production-science-pack", - "icon_name": "icon.t.production-science-pack", + "name": "cliff-explosives", + "icon_name": "icon.t.cliff-explosives", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "productivity-module", - "advanced-material-processing-2", - "railway" + "explosives", + "military-2" ], + "successors": {}, "recipes": [ - "production-science-pack" + "cliff-explosives" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -919,28 +1051,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Production science pack" + "research_unit_count": 200, + "localised_name": "Cliff explosives" }, { - "name": "space-science-pack", - "icon_name": "icon.t.space-science-pack", + "name": "coal-liquefaction", + "icon_name": "icon.t.coal-liquefaction", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "rocket-silo", - "electric-energy-accumulators", - "solar-energy" + "advanced-oil-processing", + "production-science-pack" ], + "successors": {}, "recipes": [ - "satellite" + "coal-liquefaction" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -957,47 +1087,66 @@ { "name": "production-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 2000, - "localised_name": "Space science pack" + "research_unit_count": 200, + "localised_name": "Coal liquefaction" }, { - "name": "steel-processing", - "icon_name": "icon.t.steel-processing", + "name": "concrete", + "icon_name": "icon.t.concrete", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": {}, + "prerequisites": [ + "advanced-material-processing", + "automation-2" + ], + "successors": [ + "artillery", + "rocket-silo", + "uranium-mining" + ], "recipes": [ - "steel-plate", - "steel-chest" + "concrete", + "hazard-concrete", + "refined-concrete", + "refined-hazard-concrete", + "iron-stick" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Steel processing" + "research_unit_count": 250, + "localised_name": "Concrete" }, { - "name": "utility-science-pack", - "icon_name": "icon.t.utility-science-pack", + "name": "construction-robotics", + "icon_name": "icon.t.construction-robotics", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "robotics", - "advanced-electronics-2", - "low-density-structure" + "robotics" + ], + "successors": [ + "personal-roboport-equipment" ], "recipes": [ - "utility-science-pack" + "roboport", + "passive-provider-chest", + "storage-chest", + "construction-robot" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1013,20 +1162,25 @@ } ], "research_unit_count": 100, - "localised_name": "Utility science pack" + "localised_name": "Construction robotics" }, { - "name": "advanced-material-processing", - "icon_name": "icon.t.advanced-material-processing", + "name": "defender", + "icon_name": "icon.t.defender", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "steel-processing", - "logistic-science-pack" + "military-science-pack" + ], + "successors": [ + "distractor", + "follower-robot-count-1" ], "recipes": [ - "steel-furnace" + "defender-capsule" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1035,41 +1189,75 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Advanced material processing" + "research_unit_count": 100, + "localised_name": "Defender" }, { - "name": "steel-axe", - "icon_name": "icon.t.steel-axe", + "name": "destroyer", + "icon_name": "icon.t.destroyer", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "steel-processing" + "military-4", + "distractor", + "speed-module" ], - "recipes": {}, + "successors": [ + "follower-robot-count-4" + ], + "recipes": [ + "destroyer-capsule" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Steel axe" + "research_unit_count": 300, + "localised_name": "Destroyer" }, { - "name": "advanced-material-processing-2", - "icon_name": "icon.t.advanced-material-processing-2", + "name": "discharge-defense-equipment", + "icon_name": "icon.t.discharge-defense-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-material-processing", - "chemical-science-pack" + "laser-turret", + "military-3", + "power-armor", + "solar-panel-equipment" ], + "successors": {}, "recipes": [ - "electric-furnace" + "discharge-defense-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1079,29 +1267,36 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Advanced material processing 2" + "research_unit_count": 100, + "localised_name": "Discharge defense" }, { - "name": "concrete", - "icon_name": "icon.t.concrete", + "name": "distractor", + "icon_name": "icon.t.distractor", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-material-processing", - "automation-2" + "defender", + "military-3", + "laser" + ], + "successors": [ + "destroyer" ], "recipes": [ - "concrete", - "hazard-concrete", - "refined-concrete", - "refined-hazard-concrete" + "distractor-capsule" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1110,23 +1305,34 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Concrete" + "research_unit_count": 200, + "localised_name": "Distractor" }, { - "name": "electric-energy-accumulators", - "icon_name": "icon.t.electric-energy-accumulators", + "name": "effect-transmission", + "icon_name": "icon.t.effect-transmission", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electric-energy-distribution-1", - "battery" + "processing-unit", + "production-science-pack" ], + "successors": {}, "recipes": [ - "accumulator" + "beacon" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1135,25 +1341,35 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 } ], - "research_unit_count": 150, - "localised_name": "Electric energy accumulators" + "research_unit_count": 75, + "localised_name": "Effect transmission" }, { - "name": "electric-energy-distribution-1", - "icon_name": "icon.t.electric-energy-distribution-1", + "name": "efficiency-module", + "icon_name": "icon.t.efficiency-module", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electronics", - "steel-processing", - "logistic-science-pack" + "modules" + ], + "successors": [ + "efficiency-module-2" ], "recipes": [ - "medium-electric-pole", - "big-electric-pole" + "efficiency-module" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1164,21 +1380,27 @@ "amount": 1 } ], - "research_unit_count": 120, - "localised_name": "Electric energy distribution 1" + "research_unit_count": 50, + "localised_name": "Efficiency module" }, { - "name": "electric-energy-distribution-2", - "icon_name": "icon.t.electric-energy-distribution-2", + "name": "efficiency-module-2", + "icon_name": "icon.t.efficiency-module-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electric-energy-distribution-1", - "chemical-science-pack" + "efficiency-module", + "processing-unit" + ], + "successors": [ + "efficiency-module-3", + "power-armor-mk2" ], "recipes": [ - "substation" + "efficiency-module-2" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1193,23 +1415,26 @@ "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Electric energy distribution 2" + "research_unit_count": 75, + "localised_name": "Efficiency module 2" }, { - "name": "railway", - "icon_name": "icon.t.railway", + "name": "efficiency-module-3", + "icon_name": "icon.t.efficiency-module-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "logistics-2", - "engine" + "efficiency-module-2", + "production-science-pack" + ], + "successors": [ + "spidertron" ], "recipes": [ - "rail", - "locomotive", - "cargo-wagon" + "efficiency-module-3" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1218,23 +1443,36 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Railway" + "research_unit_count": 300, + "localised_name": "Efficiency module 3" }, { - "name": "fluid-wagon", - "icon_name": "icon.t.fluid-wagon", + "name": "electric-energy-accumulators", + "icon_name": "icon.t.electric-energy-accumulators", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "railway", - "fluid-handling" + "electric-energy-distribution-1", + "battery" + ], + "successors": [ + "rocket-silo" ], "recipes": [ - "fluid-wagon" + "accumulator" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1245,20 +1483,29 @@ "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Fluid wagon" + "research_unit_count": 150, + "localised_name": "Electric energy accumulators" }, { - "name": "automated-rail-transportation", - "icon_name": "icon.t.automated-rail-transportation", + "name": "electric-energy-distribution-1", + "icon_name": "icon.t.electric-energy-distribution-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "railway" + "steel-processing", + "logistic-science-pack" + ], + "successors": [ + "electric-energy-accumulators", + "electric-energy-distribution-2" ], "recipes": [ - "train-stop" + "medium-electric-pole", + "big-electric-pole", + "iron-stick" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1269,21 +1516,24 @@ "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Automated rail transportation" + "research_unit_count": 120, + "localised_name": "Electric energy distribution 1" }, { - "name": "rail-signals", - "icon_name": "icon.t.rail-signals", + "name": "electric-energy-distribution-2", + "icon_name": "icon.t.electric-energy-distribution-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "automated-rail-transportation" + "electric-energy-distribution-1", + "chemical-science-pack" ], + "successors": {}, "recipes": [ - "rail-signal", - "rail-chain-signal" + "substation" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1292,23 +1542,34 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], "research_unit_count": 100, - "localised_name": "Rail signals" + "localised_name": "Electric energy distribution 2" }, { - "name": "robotics", - "icon_name": "icon.t.robotics", + "name": "electric-engine", + "icon_name": "icon.t.electric-engine", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "electric-engine", - "battery" + "lubricant" + ], + "successors": [ + "automation-3", + "exoskeleton-equipment", + "power-armor", + "robotics" ], "recipes": [ - "flying-robot-frame" + "electric-engine-unit" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1323,54 +1584,71 @@ "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Robotics" + "research_unit_count": 50, + "localised_name": "Electric engine" }, { - "name": "construction-robotics", - "icon_name": "icon.t.construction-robotics", + "name": "electric-mining-drill", + "icon_name": "icon.t.electric-mining-drill", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "robotics" + "automation-science-pack" ], + "successors": {}, "recipes": [ - "roboport", - "logistic-chest-passive-provider", - "logistic-chest-storage", - "construction-robot" + "electric-mining-drill" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Construction robotics" + "research_unit_count": 25, + "localised_name": "Electric mining drill" }, { - "name": "logistic-robotics", - "icon_name": "icon.t.logistic-robotics", + "name": "electronics", + "icon_name": "icon.t.electronics", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": {}, + "successors": [ + "automation-science-pack" + ], + "recipes": [ + "copper-cable", + "electronic-circuit", + "lab", + "inserter", + "small-electric-pole" + ], + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Electronics" + }, + { + "name": "energy-shield-equipment", + "icon_name": "icon.t.energy-shield-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "robotics" + "solar-panel-equipment", + "military-science-pack" + ], + "successors": [ + "energy-shield-mk2-equipment" ], "recipes": [ - "roboport", - "logistic-chest-passive-provider", - "logistic-chest-storage", - "logistic-robot" + "energy-shield-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1381,27 +1659,30 @@ "amount": 1 }, { - "name": "chemical-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Logistic robotics" + "research_unit_count": 150, + "localised_name": "Energy shield equipment" }, { - "name": "logistic-system", - "icon_name": "icon.t.logistic-system", + "name": "energy-shield-mk2-equipment", + "icon_name": "icon.t.energy-shield-mk2-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "utility-science-pack", - "logistic-robotics" + "energy-shield-equipment", + "military-3", + "low-density-structure", + "power-armor" ], + "successors": {}, "recipes": [ - "logistic-chest-active-provider", - "logistic-chest-requester", - "logistic-chest-buffer" + "energy-shield-mk2-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1412,29 +1693,36 @@ "amount": 1 }, { - "name": "chemical-science-pack", + "name": "military-science-pack", "amount": 1 }, { - "name": "utility-science-pack", + "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Logistic system" + "research_unit_count": 200, + "localised_name": "Energy shield MK2 equipment" }, { - "name": "personal-roboport-equipment", - "icon_name": "icon.t.personal-roboport-equipment", + "name": "engine", + "icon_name": "icon.t.engine", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "construction-robotics", - "solar-panel-equipment" + "steel-processing", + "logistic-science-pack" + ], + "successors": [ + "automobilism", + "fluid-handling", + "railway" ], "recipes": [ - "personal-roboport-equipment" + "engine-unit" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1443,27 +1731,29 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Personal roboport" + "research_unit_count": 100, + "localised_name": "Engine" }, { - "name": "personal-roboport-mk2-equipment", - "icon_name": "icon.t.personal-roboport-mk2-equipment", + "name": "exoskeleton-equipment", + "icon_name": "icon.t.exoskeleton-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "personal-roboport-equipment", - "utility-science-pack" + "processing-unit", + "electric-engine", + "solar-panel-equipment" + ], + "successors": [ + "spidertron" ], "recipes": [ - "personal-roboport-mk2-equipment" + "exoskeleton-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1476,24 +1766,26 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Personal roboport MK2" + "research_unit_count": 50, + "localised_name": "Exoskeleton equipment" }, { - "name": "worker-robots-speed-1", - "icon_name": "icon.t.worker-robots-speed-1", + "name": "explosive-rocketry", + "icon_name": "icon.t.explosive-rocketry", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "robotics" + "rocketry", + "military-3" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "explosive-rocket" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1503,23 +1795,38 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Worker robot speed 1" + "research_unit_count": 100, + "localised_name": "Explosive rocketry" }, { - "name": "worker-robots-speed-2", - "icon_name": "icon.t.worker-robots-speed-2", + "name": "explosives", + "icon_name": "icon.t.explosives", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-speed-1" + "sulfur-processing" ], - "recipes": {}, + "successors": [ + "cliff-explosives", + "land-mine", + "military-4", + "rocketry", + "tank" + ], + "recipes": [ + "explosives" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1528,54 +1835,55 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], "research_unit_count": 100, - "localised_name": "Worker robot speed 2" + "localised_name": "Explosives" }, { - "name": "worker-robots-speed-3", - "icon_name": "icon.t.worker-robots-speed-3", + "name": "fast-inserter", + "icon_name": "icon.t.fast-inserter", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-speed-2" + "automation-science-pack" ], - "recipes": {}, + "successors": [ + "bulk-inserter" + ], + "recipes": [ + "fast-inserter" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 150, - "localised_name": "Worker robot speed 3" + "research_unit_count": 30, + "localised_name": "Fast inserter" }, { - "name": "worker-robots-speed-4", - "icon_name": "icon.t.worker-robots-speed-4", + "name": "fission-reactor-equipment", + "icon_name": "icon.t.fission-reactor-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-speed-3" + "utility-science-pack", + "power-armor", + "military-science-pack", + "nuclear-power" ], - "recipes": {}, + "successors": [ + "spidertron" + ], + "recipes": [ + "fission-reactor-equipment" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1585,6 +1893,10 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 @@ -1594,18 +1906,28 @@ "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Worker robot speed 4" + "research_unit_count": 200, + "localised_name": "Portable fission reactor" }, { - "name": "mining-productivity-1", - "icon_name": "icon.t.mining-productivity-1", + "name": "flamethrower", + "icon_name": "icon.t.flamethrower", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-electronics" + "flammables", + "military-science-pack" ], - "recipes": {}, + "successors": [ + "refined-flammables-1" + ], + "recipes": [ + "flamethrower", + "flamethrower-ammo", + "flamethrower-turret" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1614,20 +1936,31 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Mining productivity 1" + "research_unit_count": 50, + "localised_name": "Flamethrower" }, { - "name": "mining-productivity-2", - "icon_name": "icon.t.mining-productivity-2", + "name": "flammables", + "icon_name": "icon.t.flammables", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "mining-productivity-1" + "oil-processing" + ], + "successors": [ + "flamethrower", + "rocket-fuel", + "rocketry" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1636,24 +1969,45 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Mining productivity 2" + "research_unit_count": 50, + "localised_name": "Flammables" }, { - "name": "mining-productivity-3", - "icon_name": "icon.t.mining-productivity-3", + "name": "fluid-handling", + "icon_name": "icon.t.fluid-handling", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "mining-productivity-2" + "automation-2", + "engine" ], - "recipes": {}, + "successors": [ + "fluid-wagon", + "oil-gathering" + ], + "recipes": [ + "storage-tank", + "pump", + "barrel", + "water-barrel", + "empty-water-barrel", + "sulfuric-acid-barrel", + "empty-sulfuric-acid-barrel", + "crude-oil-barrel", + "empty-crude-oil-barrel", + "heavy-oil-barrel", + "empty-heavy-oil-barrel", + "light-oil-barrel", + "empty-light-oil-barrel", + "petroleum-gas-barrel", + "empty-petroleum-gas-barrel", + "lubricant-barrel", + "empty-lubricant-barrel" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1662,33 +2016,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 1000, - "localised_name": "Mining productivity 3" + "research_unit_count": 50, + "localised_name": "Fluid handling" }, { - "name": "mining-productivity-4", - "icon_name": "icon.t.mining-productivity-4", + "name": "fluid-wagon", + "icon_name": "icon.t.fluid-wagon", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "mining-productivity-3", - "space-science-pack" + "railway", + "fluid-handling" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "fluid-wagon" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1697,36 +2044,25 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Mining productivity" + "research_unit_count": 200, + "localised_name": "Fluid wagon" }, { - "name": "worker-robots-speed-5", - "icon_name": "icon.t.worker-robots-speed-5", + "name": "follower-robot-count-1", + "icon_name": "icon.t.follower-robot-count-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-speed-4" + "defender" + ], + "successors": [ + "follower-robot-count-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1737,31 +2073,27 @@ "amount": 1 }, { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Worker robot speed 5" + "research_unit_count": 100, + "localised_name": "Follower robot count 1" }, { - "name": "worker-robots-speed-6", - "icon_name": "icon.t.worker-robots-speed-6", + "name": "follower-robot-count-2", + "icon_name": "icon.t.follower-robot-count-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-speed-5", - "space-science-pack" + "follower-robot-count-1" + ], + "successors": [ + "follower-robot-count-3" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1772,34 +2104,28 @@ "amount": 1 }, { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Worker robot speed" + "research_unit_count": 200, + "localised_name": "Follower robot count 2" }, { - "name": "worker-robots-storage-1", - "icon_name": "icon.t.worker-robots-storage-1", + "name": "follower-robot-count-3", + "icon_name": "icon.t.follower-robot-count-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "robotics" + "follower-robot-count-2", + "chemical-science-pack" + ], + "successors": [ + "follower-robot-count-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1809,23 +2135,33 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Worker robot cargo size 1" + "research_unit_count": 300, + "localised_name": "Follower robot count 3" }, { - "name": "worker-robots-storage-2", - "icon_name": "icon.t.worker-robots-storage-2", + "name": "follower-robot-count-4", + "icon_name": "icon.t.follower-robot-count-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-storage-1" + "follower-robot-count-3", + "destroyer" + ], + "successors": [ + "follower-robot-count-5" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1835,27 +2171,35 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "production-science-pack", + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Worker robot cargo size 2" + "research_unit_count": 400, + "localised_name": "Follower robot count 4" }, { - "name": "worker-robots-storage-3", - "icon_name": "icon.t.worker-robots-storage-3", + "name": "follower-robot-count-5", + "icon_name": "icon.t.follower-robot-count-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "worker-robots-storage-2" + "follower-robot-count-4", + "space-science-pack" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1865,6 +2209,10 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 @@ -1876,20 +2224,30 @@ { "name": "utility-science-pack", "amount": 1 + }, + { + "name": "space-science-pack", + "amount": 1 } ], - "research_unit_count": 450, - "localised_name": "Worker robot cargo size 3" + "research_unit_count": 1, + "localised_name": "Follower robot count" }, { - "name": "toolbelt", - "icon_name": "icon.t.toolbelt", + "name": "gate", + "icon_name": "icon.t.gate", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "logistic-science-pack" + "stone-wall", + "military-2" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "gate" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -1901,204 +2259,71 @@ } ], "research_unit_count": 100, - "localised_name": "Toolbelt" + "localised_name": "Gate" }, { - "name": "research-speed-1", - "icon_name": "icon.t.research-speed-1", + "name": "gun-turret", + "icon_name": "icon.t.gun-turret", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "automation-2" + "automation-science-pack" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "gun-turret" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Lab research speed 1" + "research_unit_count": 10, + "localised_name": "Gun turret" }, { - "name": "research-speed-2", - "icon_name": "icon.t.research-speed-2", + "name": "heavy-armor", + "icon_name": "icon.t.heavy-armor", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "research-speed-1" + "military", + "steel-processing" ], - "recipes": {}, + "successors": [ + "modular-armor" + ], + "recipes": [ + "heavy-armor" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Lab research speed 2" - }, - { - "name": "research-speed-3", - "icon_name": "icon.t.research-speed-3", - "enabled": true, - "hidden": false, - "prerequisites": [ - "research-speed-2" - ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - } - ], - "research_unit_count": 250, - "localised_name": "Lab research speed 3" - }, - { - "name": "research-speed-4", - "icon_name": "icon.t.research-speed-4", - "enabled": true, - "hidden": false, - "prerequisites": [ - "research-speed-3" - ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - } - ], - "research_unit_count": 500, - "localised_name": "Lab research speed 4" - }, - { - "name": "research-speed-5", - "icon_name": "icon.t.research-speed-5", - "enabled": true, - "hidden": false, - "prerequisites": [ - "research-speed-4" - ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - } - ], - "research_unit_count": 500, - "localised_name": "Lab research speed 5" - }, - { - "name": "research-speed-6", - "icon_name": "icon.t.research-speed-6", - "enabled": true, - "hidden": false, - "prerequisites": [ - "research-speed-5" - ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - } - ], - "research_unit_count": 500, - "localised_name": "Lab research speed 6" - }, - { - "name": "stack-inserter", - "icon_name": "icon.t.stack-inserter", - "enabled": true, - "hidden": false, - "prerequisites": [ - "fast-inserter", - "logistics-2", - "advanced-electronics" - ], - "recipes": [ - "stack-inserter", - "stack-filter-inserter" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - } - ], - "research_unit_count": 150, - "localised_name": "Stack inserter" + "research_unit_count": 30, + "localised_name": "Heavy armor" }, { "name": "inserter-capacity-bonus-1", "icon_name": "icon.t.inserter-capacity-bonus-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stack-inserter" + "bulk-inserter" + ], + "successors": [ + "inserter-capacity-bonus-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2116,11 +2341,16 @@ "name": "inserter-capacity-bonus-2", "icon_name": "icon.t.inserter-capacity-bonus-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "inserter-capacity-bonus-1" ], + "successors": [ + "inserter-capacity-bonus-3" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2138,11 +2368,17 @@ "name": "inserter-capacity-bonus-3", "icon_name": "icon.t.inserter-capacity-bonus-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "inserter-capacity-bonus-2" + "inserter-capacity-bonus-2", + "chemical-science-pack" + ], + "successors": [ + "inserter-capacity-bonus-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2164,11 +2400,17 @@ "name": "inserter-capacity-bonus-4", "icon_name": "icon.t.inserter-capacity-bonus-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "inserter-capacity-bonus-3" + "inserter-capacity-bonus-3", + "production-science-pack" + ], + "successors": [ + "inserter-capacity-bonus-5" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2194,11 +2436,16 @@ "name": "inserter-capacity-bonus-5", "icon_name": "icon.t.inserter-capacity-bonus-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "inserter-capacity-bonus-4" ], + "successors": [ + "inserter-capacity-bonus-6" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2224,11 +2471,16 @@ "name": "inserter-capacity-bonus-6", "icon_name": "icon.t.inserter-capacity-bonus-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "inserter-capacity-bonus-5" ], + "successors": [ + "inserter-capacity-bonus-7" + ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2254,11 +2506,15 @@ "name": "inserter-capacity-bonus-7", "icon_name": "icon.t.inserter-capacity-bonus-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "inserter-capacity-bonus-6" + "inserter-capacity-bonus-6", + "utility-science-pack" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2285,20 +2541,24 @@ "localised_name": "Inserter capacity bonus 7" }, { - "name": "oil-processing", - "icon_name": "icon.t.oil-processing", + "name": "kovarex-enrichment-process", + "icon_name": "icon.t.kovarex-enrichment-process", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "fluid-handling" + "production-science-pack", + "uranium-processing", + "rocket-fuel" + ], + "successors": [ + "atomic-bomb" ], "recipes": [ - "pumpjack", - "oil-refinery", - "chemical-plant", - "basic-oil-processing", - "solid-fuel-from-petroleum-gas" + "kovarex-enrichment-process", + "nuclear-fuel" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2307,67 +2567,57 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Oil processing" + "research_unit_count": 1500, + "localised_name": "Kovarex enrichment process" }, { - "name": "fluid-handling", - "icon_name": "icon.t.fluid-handling", + "name": "lamp", + "icon_name": "icon.t.lamp", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "automation-2", - "engine" + "automation-science-pack" ], + "successors": {}, "recipes": [ - "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" + "small-lamp" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Fluid handling" + "research_unit_count": 10, + "localised_name": "Lamp" }, { - "name": "advanced-oil-processing", - "icon_name": "icon.t.advanced-oil-processing", + "name": "land-mine", + "icon_name": "icon.t.land-mine", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "chemical-science-pack" + "explosives", + "military-science-pack" ], + "successors": {}, "recipes": [ - "advanced-oil-processing", - "heavy-oil-cracking", - "light-oil-cracking", - "solid-fuel-from-heavy-oil", - "solid-fuel-from-light-oil" + "land-mine" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2378,25 +2628,27 @@ "amount": 1 }, { - "name": "chemical-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Advanced oil processing" + "research_unit_count": 100, + "localised_name": "Land mines" }, { - "name": "coal-liquefaction", - "icon_name": "icon.t.coal-liquefaction", + "name": "landfill", + "icon_name": "icon.t.landfill", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-oil-processing", - "production-science-pack" + "logistic-science-pack" ], + "successors": {}, "recipes": [ - "coal-liquefaction" + "landfill" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2405,31 +2657,29 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Coal liquefaction" + "research_unit_count": 50, + "localised_name": "Landfill" }, { - "name": "sulfur-processing", - "icon_name": "icon.t.sulfur-processing", + "name": "laser", + "icon_name": "icon.t.laser", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "oil-processing" + "battery", + "chemical-science-pack" ], - "recipes": [ - "sulfuric-acid", - "sulfur" + "successors": [ + "distractor", + "laser-shooting-speed-1", + "laser-turret", + "laser-weapons-damage-1" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2438,22 +2688,30 @@ { "name": "logistic-science-pack", "amount": 1 - } + }, + { + "name": "chemical-science-pack", + "amount": 1 + } ], - "research_unit_count": 150, - "localised_name": "Sulfur processing" + "research_unit_count": 100, + "localised_name": "Laser" }, { - "name": "plastics", - "icon_name": "icon.t.plastics", + "name": "laser-shooting-speed-1", + "icon_name": "icon.t.laser-shooting-speed-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "oil-processing" + "laser", + "military-science-pack" ], - "recipes": [ - "plastic-bar" + "successors": [ + "laser-shooting-speed-2" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2462,26 +2720,33 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Plastics" + "research_unit_count": 50, + "localised_name": "Laser shooting speed 1" }, { - "name": "artillery", - "icon_name": "icon.t.artillery", + "name": "laser-shooting-speed-2", + "icon_name": "icon.t.laser-shooting-speed-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-4", - "tank" + "laser-shooting-speed-1" ], - "recipes": [ - "artillery-wagon", - "artillery-turret", - "artillery-shell", - "artillery-targeting-remote" + "successors": [ + "laser-shooting-speed-3" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2498,32 +2763,25 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 2000, - "localised_name": "Artillery" + "research_unit_count": 100, + "localised_name": "Laser shooting speed 2" }, { - "name": "spidertron", - "icon_name": "icon.t.spidertron", + "name": "laser-shooting-speed-3", + "icon_name": "icon.t.laser-shooting-speed-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-4", - "exoskeleton-equipment", - "fusion-reactor-equipment", - "rocketry", - "rocket-control-unit", - "effectivity-module-3" + "laser-shooting-speed-2" ], - "recipes": [ - "spidertron", - "spidertron-remote" + "successors": [ + "laser-shooting-speed-4" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2540,53 +2798,61 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 2500, - "localised_name": "Spidertron" + "research_unit_count": 200, + "localised_name": "Laser shooting speed 3" }, { - "name": "military", - "icon_name": "icon.t.military", + "name": "laser-shooting-speed-4", + "icon_name": "icon.t.laser-shooting-speed-4", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": {}, - "recipes": [ - "submachine-gun", - "shotgun", - "shotgun-shell" + "prerequisites": [ + "laser-shooting-speed-3" + ], + "successors": [ + "laser-shooting-speed-5" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 10, - "localised_name": "Military" + "research_unit_count": 200, + "localised_name": "Laser shooting speed 4" }, { - "name": "atomic-bomb", - "icon_name": "icon.t.atomic-bomb", + "name": "laser-shooting-speed-5", + "icon_name": "icon.t.laser-shooting-speed-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-4", - "kovarex-enrichment-process", - "rocket-control-unit", - "rocketry" + "laser-shooting-speed-4", + "utility-science-pack" ], - "recipes": [ - "atomic-bomb" + "successors": [ + "laser-shooting-speed-6" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2604,32 +2870,28 @@ "name": "chemical-science-pack", "amount": 1 }, - { - "name": "production-science-pack", - "amount": 1 - }, { "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 5000, - "localised_name": "Atomic bomb" + "research_unit_count": 200, + "localised_name": "Laser shooting speed 5" }, { - "name": "military-2", - "icon_name": "icon.t.military-2", + "name": "laser-shooting-speed-6", + "icon_name": "icon.t.laser-shooting-speed-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military", - "steel-processing", - "logistic-science-pack" + "laser-shooting-speed-5" ], - "recipes": [ - "piercing-rounds-magazine", - "grenade" + "successors": [ + "laser-shooting-speed-7" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2638,26 +2900,35 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 20, - "localised_name": "Military 2" + "research_unit_count": 350, + "localised_name": "Laser shooting speed 6" }, { - "name": "uranium-ammo", - "icon_name": "icon.t.uranium-ammo", + "name": "laser-shooting-speed-7", + "icon_name": "icon.t.laser-shooting-speed-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "uranium-processing", - "military-4", - "tank" - ], - "recipes": [ - "uranium-rounds-magazine", - "uranium-cannon-shell", - "explosive-uranium-cannon-shell" + "laser-shooting-speed-6" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2680,23 +2951,27 @@ "amount": 1 } ], - "research_unit_count": 1000, - "localised_name": "Uranium ammo" + "research_unit_count": 450, + "localised_name": "Laser shooting speed 7" }, { - "name": "military-3", - "icon_name": "icon.t.military-3", + "name": "laser-turret", + "icon_name": "icon.t.laser-turret", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "chemical-science-pack", + "laser", "military-science-pack" ], + "successors": [ + "discharge-defense-equipment", + "personal-laser-defense-equipment" + ], "recipes": [ - "poison-capsule", - "slowdown-capsule", - "combat-shotgun" + "laser-turret" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2715,23 +2990,24 @@ "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Military 3" + "research_unit_count": 150, + "localised_name": "Laser turret" }, { - "name": "military-4", - "icon_name": "icon.t.military-4", + "name": "laser-weapons-damage-1", + "icon_name": "icon.t.laser-weapons-damage-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-3", - "utility-science-pack", - "explosives" + "laser", + "military-science-pack" ], - "recipes": [ - "piercing-shotgun-shell", - "cluster-grenade" + "successors": [ + "laser-weapons-damage-2" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2748,27 +3024,25 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 150, - "localised_name": "Military 4" + "research_unit_count": 100, + "localised_name": "Energy weapons damage 1" }, { - "name": "automobilism", - "icon_name": "icon.t.automobilism", + "name": "laser-weapons-damage-2", + "icon_name": "icon.t.laser-weapons-damage-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "logistics-2", - "engine" + "laser-weapons-damage-1" ], - "recipes": [ - "car" + "successors": [ + "laser-weapons-damage-3" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2777,20 +3051,33 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Automobilism" + "research_unit_count": 200, + "localised_name": "Energy weapons damage 2" }, { - "name": "flammables", - "icon_name": "icon.t.flammables", + "name": "laser-weapons-damage-3", + "icon_name": "icon.t.laser-weapons-damage-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "oil-processing" + "laser-weapons-damage-2" + ], + "successors": [ + "laser-weapons-damage-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2799,25 +3086,33 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "military-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Flammables" + "research_unit_count": 300, + "localised_name": "Energy weapons damage 3" }, { - "name": "flamethrower", - "icon_name": "icon.t.flamethrower", + "name": "laser-weapons-damage-4", + "icon_name": "icon.t.laser-weapons-damage-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "flammables", - "military-science-pack" + "laser-weapons-damage-3" ], - "recipes": [ - "flamethrower", - "flamethrower-ammo", - "flamethrower-turret" + "successors": [ + "laser-weapons-damage-5" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2830,26 +3125,30 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Flamethrower" + "research_unit_count": 400, + "localised_name": "Energy weapons damage 4" }, { - "name": "tank", - "icon_name": "icon.t.tank", + "name": "laser-weapons-damage-5", + "icon_name": "icon.t.laser-weapons-damage-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "automobilism", - "military-3", - "explosives" + "laser-weapons-damage-4", + "utility-science-pack" ], - "recipes": [ - "tank", - "cannon-shell", - "explosive-cannon-shell" + "successors": [ + "laser-weapons-damage-6" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2866,23 +3165,29 @@ { "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 250, - "localised_name": "Tank" + "research_unit_count": 500, + "localised_name": "Energy weapons damage 5" }, { - "name": "land-mine", - "icon_name": "icon.t.land-mine", + "name": "laser-weapons-damage-6", + "icon_name": "icon.t.laser-weapons-damage-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "explosives", - "military-science-pack" + "laser-weapons-damage-5" ], - "recipes": [ - "land-mine" + "successors": [ + "laser-weapons-damage-7" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2895,25 +3200,32 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Land mines" + "research_unit_count": 600, + "localised_name": "Energy weapons damage 6" }, { - "name": "rocketry", - "icon_name": "icon.t.rocketry", + "name": "laser-weapons-damage-7", + "icon_name": "icon.t.laser-weapons-damage-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "explosives", - "flammables", - "military-science-pack" - ], - "recipes": [ - "rocket-launcher", - "rocket" + "laser-weapons-damage-6", + "space-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2926,23 +3238,42 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", + "amount": 1 } ], - "research_unit_count": 120, - "localised_name": "Rocketry" + "research_unit_count": 7, + "localised_name": "Energy weapons damage" }, { - "name": "explosive-rocketry", - "icon_name": "icon.t.explosive-rocketry", + "name": "logistic-robotics", + "icon_name": "icon.t.logistic-robotics", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "rocketry", - "military-3" + "robotics" + ], + "successors": [ + "logistic-system" ], "recipes": [ - "explosive-rocket" + "roboport", + "passive-provider-chest", + "storage-chest", + "logistic-robot" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -2952,58 +3283,67 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Explosive rocketry" + "research_unit_count": 250, + "localised_name": "Logistic robotics" }, { - "name": "energy-weapons-damage-1", - "icon_name": "icon.t.energy-weapons-damage-1", + "name": "logistic-science-pack", + "icon_name": "icon.t.logistic-science-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser", - "military-science-pack" + "automation-science-pack" ], - "recipes": {}, + "successors": [ + "advanced-material-processing", + "automation-2", + "circuit-network", + "electric-energy-distribution-1", + "engine", + "landfill", + "logistics-2", + "military-2", + "physical-projectile-damage-2", + "solar-energy", + "toolbelt", + "weapon-shooting-speed-2" + ], + "recipes": [ + "logistic-science-pack" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Energy weapons damage 1" + "research_unit_count": 75, + "localised_name": "Logistic science pack" }, { - "name": "refined-flammables-1", - "icon_name": "icon.t.refined-flammables-1", + "name": "logistic-system", + "icon_name": "icon.t.logistic-system", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "flamethrower" + "utility-science-pack", + "logistic-robotics" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "active-provider-chest", + "requester-chest", + "buffer-chest" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3014,63 +3354,94 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Refined flammables 1" + "research_unit_count": 500, + "localised_name": "Logistic system" }, { - "name": "stronger-explosives-1", - "icon_name": "icon.t.stronger-explosives-1", + "name": "logistics", + "icon_name": "icon.t.logistics", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-2" + "automation-science-pack" ], - "recipes": {}, + "successors": [ + "logistics-2" + ], + "recipes": [ + "underground-belt", + "splitter" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Stronger explosives 1" + "research_unit_count": 20, + "localised_name": "Logistics" }, { - "name": "weapon-shooting-speed-1", - "icon_name": "icon.t.weapon-shooting-speed-1", + "name": "logistics-2", + "icon_name": "icon.t.logistics-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military" + "logistics", + "logistic-science-pack" ], - "recipes": {}, + "successors": [ + "automobilism", + "bulk-inserter", + "railway" + ], + "recipes": [ + "fast-transport-belt", + "fast-underground-belt", + "fast-splitter" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Weapon shooting speed 1" + "research_unit_count": 200, + "localised_name": "Logistics 2" }, { - "name": "artillery-shell-range-1", - "icon_name": "icon.t.artillery-shell-range-1", + "name": "logistics-3", + "icon_name": "icon.t.logistics-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "artillery", - "space-science-pack" + "production-science-pack", + "lubricant" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "express-transport-belt", + "express-underground-belt", + "express-splitter" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3080,36 +3451,38 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", + "name": "production-science-pack", "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Artillery shell range" + "research_unit_count": 300, + "localised_name": "Logistics 3" }, { - "name": "artillery-shell-speed-1", - "icon_name": "icon.t.artillery-shell-speed-1", + "name": "low-density-structure", + "icon_name": "icon.t.low-density-structure", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "artillery", - "space-science-pack" + "advanced-material-processing", + "chemical-science-pack" ], - "recipes": {}, + "successors": [ + "battery-mk2-equipment", + "energy-shield-mk2-equipment", + "personal-laser-defense-equipment", + "utility-science-pack" + ], + "recipes": [ + "low-density-structure" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3119,53 +3492,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Artillery shell shooting speed" + "research_unit_count": 300, + "localised_name": "Low density structure" }, { - "name": "physical-projectile-damage-1", - "icon_name": "icon.t.physical-projectile-damage-1", + "name": "lubricant", + "icon_name": "icon.t.lubricant", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military" + "advanced-oil-processing" ], - "recipes": {}, - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - } - ], - "research_unit_count": 100, - "localised_name": "Physical projectile damage 1" - }, - { - "name": "energy-weapons-damage-2", - "icon_name": "icon.t.energy-weapons-damage-2", - "enabled": true, - "hidden": false, - "prerequisites": [ - "energy-weapons-damage-1" - ], - "recipes": {}, + "successors": [ + "electric-engine", + "logistics-3" + ], + "recipes": [ + "lubricant" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3176,26 +3527,65 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 - }, + } + ], + "research_unit_count": 50, + "localised_name": "Lubricant" + }, + { + "name": "military", + "icon_name": "icon.t.military", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "automation-science-pack" + ], + "successors": [ + "heavy-armor", + "military-2", + "physical-projectile-damage-1", + "weapon-shooting-speed-1" + ], + "recipes": [ + "submachine-gun", + "shotgun", + "shotgun-shell" + ], + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "chemical-science-pack", + "name": "automation-science-pack", "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Energy weapons damage 2" + "research_unit_count": 10, + "localised_name": "Military" }, { - "name": "physical-projectile-damage-2", - "icon_name": "icon.t.physical-projectile-damage-2", + "name": "military-2", + "icon_name": "icon.t.military-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "physical-projectile-damage-1" + "military", + "steel-processing", + "logistic-science-pack" ], - "recipes": {}, + "successors": [ + "cliff-explosives", + "gate", + "military-science-pack", + "stronger-explosives-1" + ], + "recipes": [ + "piercing-rounds-magazine", + "grenade" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3206,18 +3596,34 @@ "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Physical projectile damage 2" + "research_unit_count": 20, + "localised_name": "Military 2" }, { - "name": "refined-flammables-2", - "icon_name": "icon.t.refined-flammables-2", + "name": "military-3", + "icon_name": "icon.t.military-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-1" + "chemical-science-pack", + "military-science-pack" ], - "recipes": {}, + "successors": [ + "discharge-defense-equipment", + "distractor", + "energy-shield-mk2-equipment", + "explosive-rocketry", + "military-4", + "personal-laser-defense-equipment", + "tank" + ], + "recipes": [ + "poison-capsule", + "slowdown-capsule", + "combat-shotgun" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3230,20 +3636,39 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Refined flammables 2" + "research_unit_count": 100, + "localised_name": "Military 3" }, { - "name": "stronger-explosives-2", - "icon_name": "icon.t.stronger-explosives-2", + "name": "military-4", + "icon_name": "icon.t.military-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-1" + "military-3", + "utility-science-pack", + "explosives" ], - "recipes": {}, + "successors": [ + "artillery", + "atomic-bomb", + "destroyer", + "power-armor-mk2", + "spidertron", + "uranium-ammo" + ], + "recipes": [ + "piercing-shotgun-shell", + "cluster-grenade" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3256,20 +3681,48 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Stronger explosives 2" + "research_unit_count": 150, + "localised_name": "Military 4" }, { - "name": "weapon-shooting-speed-2", - "icon_name": "icon.t.weapon-shooting-speed-2", + "name": "military-science-pack", + "icon_name": "icon.t.military-science-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "weapon-shooting-speed-1" + "military-2", + "stone-wall" ], - "recipes": {}, + "successors": [ + "defender", + "energy-shield-equipment", + "fission-reactor-equipment", + "flamethrower", + "land-mine", + "laser-shooting-speed-1", + "laser-turret", + "laser-weapons-damage-1", + "military-3", + "physical-projectile-damage-3", + "rocketry", + "stronger-explosives-2", + "weapon-shooting-speed-3" + ], + "recipes": [ + "military-science-pack" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3280,18 +3733,23 @@ "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Weapon shooting speed 2" + "research_unit_count": 30, + "localised_name": "Military science pack" }, { - "name": "energy-weapons-damage-3", - "icon_name": "icon.t.energy-weapons-damage-3", + "name": "mining-productivity-1", + "icon_name": "icon.t.mining-productivity-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-weapons-damage-2" + "advanced-circuit" + ], + "successors": [ + "mining-productivity-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3300,28 +3758,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Energy weapons damage 3" + "research_unit_count": 250, + "localised_name": "Mining productivity 1" }, { - "name": "physical-projectile-damage-3", - "icon_name": "icon.t.physical-projectile-damage-3", + "name": "mining-productivity-2", + "icon_name": "icon.t.mining-productivity-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "physical-projectile-damage-2" + "mining-productivity-1", + "chemical-science-pack" + ], + "successors": [ + "mining-productivity-3" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3332,22 +3788,29 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Physical projectile damage 3" + "research_unit_count": 500, + "localised_name": "Mining productivity 2" }, { - "name": "refined-flammables-3", - "icon_name": "icon.t.refined-flammables-3", + "name": "mining-productivity-3", + "icon_name": "icon.t.mining-productivity-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-2" + "mining-productivity-2", + "production-science-pack", + "utility-science-pack" + ], + "successors": [ + "mining-productivity-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3358,26 +3821,34 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 }, { - "name": "chemical-science-pack", + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Refined flammables 3" + "research_unit_count": 1000, + "localised_name": "Mining productivity 3" }, { - "name": "stronger-explosives-3", - "icon_name": "icon.t.stronger-explosives-3", + "name": "mining-productivity-4", + "icon_name": "icon.t.mining-productivity-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-2" + "mining-productivity-3", + "space-science-pack" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3388,26 +3859,43 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 }, { - "name": "chemical-science-pack", + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Stronger explosives 3" + "research_unit_count": 1, + "localised_name": "Mining productivity" }, { - "name": "weapon-shooting-speed-3", - "icon_name": "icon.t.weapon-shooting-speed-3", + "name": "modular-armor", + "icon_name": "icon.t.modular-armor", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "weapon-shooting-speed-2" + "heavy-armor", + "advanced-circuit" ], - "recipes": {}, + "successors": [ + "power-armor", + "solar-panel-equipment" + ], + "recipes": [ + "modular-armor" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3416,24 +3904,27 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Weapon shooting speed 3" + "research_unit_count": 100, + "localised_name": "Modular armor" }, { - "name": "energy-weapons-damage-4", - "icon_name": "icon.t.energy-weapons-damage-4", + "name": "modules", + "icon_name": "icon.t.modules", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-weapons-damage-3" + "advanced-circuit" + ], + "successors": [ + "efficiency-module", + "productivity-module", + "speed-module" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3442,29 +3933,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Energy weapons damage 4" + "research_unit_count": 100, + "localised_name": "Modules" }, { - "name": "physical-projectile-damage-4", - "icon_name": "icon.t.physical-projectile-damage-4", + "name": "night-vision-equipment", + "icon_name": "icon.t.night-vision-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "physical-projectile-damage-3" + "solar-panel-equipment" ], - "recipes": {}, - "research_unit_ingredients": [ + "successors": {}, + "recipes": [ + "night-vision-equipment" + ], + "alt_modifiers": {}, + "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 @@ -3472,24 +3960,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Physical projectile damage 4" + "research_unit_count": 50, + "localised_name": "Nightvision equipment" }, { - "name": "refined-flammables-4", - "icon_name": "icon.t.refined-flammables-4", + "name": "nuclear-fuel-reprocessing", + "icon_name": "icon.t.nuclear-fuel-reprocessing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-3" + "nuclear-power", + "production-science-pack" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "nuclear-fuel-reprocessing" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3499,31 +3989,39 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "utility-science-pack", + "name": "production-science-pack", "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Refined flammables 4" + "research_unit_count": 50, + "localised_name": "Nuclear fuel reprocessing" }, { - "name": "stronger-explosives-4", - "icon_name": "icon.t.stronger-explosives-4", + "name": "nuclear-power", + "icon_name": "icon.t.nuclear-power", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-3" + "uranium-processing" ], - "recipes": {}, + "successors": [ + "fission-reactor-equipment", + "nuclear-fuel-reprocessing" + ], + "recipes": [ + "nuclear-reactor", + "heat-exchanger", + "heat-pipe", + "steam-turbine", + "uranium-fuel-cell" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3533,31 +4031,30 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Stronger explosives 4" + "research_unit_count": 800, + "localised_name": "Nuclear power" }, { - "name": "weapon-shooting-speed-4", - "icon_name": "icon.t.weapon-shooting-speed-4", + "name": "oil-gathering", + "icon_name": "icon.t.oil-gathering", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "weapon-shooting-speed-3" + "fluid-handling" ], - "recipes": {}, + "successors": [ + "oil-processing" + ], + "recipes": [ + "pumpjack" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3566,24 +4063,54 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Weapon shooting speed 4" + "research_unit_count": 100, + "localised_name": "Oil gathering" }, { - "name": "energy-weapons-damage-5", - "icon_name": "icon.t.energy-weapons-damage-5", + "name": "oil-processing", + "icon_name": "icon.t.oil-processing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-weapons-damage-4" + "oil-gathering" ], - "recipes": {}, + "successors": [ + "flammables", + "plastics", + "sulfur-processing" + ], + "recipes": [ + "oil-refinery", + "chemical-plant", + "basic-oil-processing", + "solid-fuel-from-petroleum-gas" + ], + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Oil processing" + }, + { + "name": "personal-laser-defense-equipment", + "icon_name": "icon.t.personal-laser-defense-equipment", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "laser-turret", + "military-3", + "low-density-structure", + "power-armor", + "solar-panel-equipment" + ], + "successors": {}, + "recipes": [ + "personal-laser-defense-equipment" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3600,24 +4127,28 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Energy weapons damage 5" + "research_unit_count": 100, + "localised_name": "Personal laser defense" }, { - "name": "physical-projectile-damage-5", - "icon_name": "icon.t.physical-projectile-damage-5", + "name": "personal-roboport-equipment", + "icon_name": "icon.t.personal-roboport-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "physical-projectile-damage-4" + "construction-robotics", + "solar-panel-equipment" ], - "recipes": {}, + "successors": [ + "personal-roboport-mk2-equipment" + ], + "recipes": [ + "personal-roboport-equipment" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3627,27 +4158,29 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Physical projectile damage 5" + "research_unit_count": 50, + "localised_name": "Personal roboport" }, { - "name": "refined-flammables-5", - "icon_name": "icon.t.refined-flammables-5", + "name": "personal-roboport-mk2-equipment", + "icon_name": "icon.t.personal-roboport-mk2-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-4" + "personal-roboport-equipment", + "utility-science-pack" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "personal-roboport-mk2-equipment" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3657,10 +4190,6 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 @@ -3670,52 +4199,75 @@ "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Refined flammables 5" + "research_unit_count": 250, + "localised_name": "Personal roboport MK2" }, { - "name": "stronger-explosives-5", - "icon_name": "icon.t.stronger-explosives-5", + "name": "physical-projectile-damage-1", + "icon_name": "icon.t.physical-projectile-damage-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-4" + "military" + ], + "successors": [ + "physical-projectile-damage-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, + } + ], + "research_unit_count": 100, + "localised_name": "Physical projectile damage 1" + }, + { + "name": "physical-projectile-damage-2", + "icon_name": "icon.t.physical-projectile-damage-2", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "physical-projectile-damage-1", + "logistic-science-pack" + ], + "successors": [ + "physical-projectile-damage-3" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "chemical-science-pack", + "name": "automation-science-pack", "amount": 1 }, { - "name": "utility-science-pack", + "name": "logistic-science-pack", "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Stronger explosives 5" + "research_unit_count": 200, + "localised_name": "Physical projectile damage 2" }, { - "name": "weapon-shooting-speed-5", - "icon_name": "icon.t.weapon-shooting-speed-5", + "name": "physical-projectile-damage-3", + "icon_name": "icon.t.physical-projectile-damage-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "weapon-shooting-speed-4" + "physical-projectile-damage-2", + "military-science-pack" + ], + "successors": [ + "physical-projectile-damage-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3728,24 +4280,25 @@ { "name": "military-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 500, - "localised_name": "Weapon shooting speed 5" + "research_unit_count": 300, + "localised_name": "Physical projectile damage 3" }, { - "name": "energy-weapons-damage-6", - "icon_name": "icon.t.energy-weapons-damage-6", + "name": "physical-projectile-damage-4", + "icon_name": "icon.t.physical-projectile-damage-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-weapons-damage-5" + "physical-projectile-damage-3" + ], + "successors": [ + "physical-projectile-damage-5" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3758,29 +4311,26 @@ { "name": "military-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 600, - "localised_name": "Energy weapons damage 6" + "research_unit_count": 400, + "localised_name": "Physical projectile damage 4" }, { - "name": "energy-weapons-damage-7", - "icon_name": "icon.t.energy-weapons-damage-7", + "name": "physical-projectile-damage-5", + "icon_name": "icon.t.physical-projectile-damage-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-weapons-damage-6", - "space-science-pack" + "physical-projectile-damage-4", + "chemical-science-pack" + ], + "successors": [ + "physical-projectile-damage-6" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3797,28 +4347,26 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Energy weapons damage" + "research_unit_count": 500, + "localised_name": "Physical projectile damage 5" }, { "name": "physical-projectile-damage-6", "icon_name": "icon.t.physical-projectile-damage-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "physical-projectile-damage-5" + "physical-projectile-damage-5", + "utility-science-pack" + ], + "successors": [ + "physical-projectile-damage-7" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3848,12 +4396,15 @@ "name": "physical-projectile-damage-7", "icon_name": "icon.t.physical-projectile-damage-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ "physical-projectile-damage-6", "space-science-pack" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3880,19 +4431,26 @@ "amount": 1 } ], - "research_unit_count": 0, + "research_unit_count": 7, "localised_name": "Physical projectile damage" }, { - "name": "refined-flammables-6", - "icon_name": "icon.t.refined-flammables-6", + "name": "plastics", + "icon_name": "icon.t.plastics", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-5" + "oil-processing" ], - "recipes": {}, - "research_unit_ingredients": [ + "successors": [ + "advanced-circuit" + ], + "recipes": [ + "plastic-bar" + ], + "alt_modifiers": {}, + "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 @@ -3900,33 +4458,34 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 600, - "localised_name": "Refined flammables 6" + "research_unit_count": 200, + "localised_name": "Plastics" }, { - "name": "refined-flammables-7", - "icon_name": "icon.t.refined-flammables-7", + "name": "power-armor", + "icon_name": "icon.t.power-armor", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "refined-flammables-6", - "space-science-pack" + "modular-armor", + "electric-engine", + "processing-unit" ], - "recipes": {}, + "successors": [ + "battery-mk2-equipment", + "discharge-defense-equipment", + "energy-shield-mk2-equipment", + "fission-reactor-equipment", + "personal-laser-defense-equipment", + "power-armor-mk2" + ], + "recipes": [ + "power-armor" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3936,35 +4495,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Refined flammables" + "research_unit_count": 200, + "localised_name": "Power armor" }, { - "name": "stronger-explosives-6", - "icon_name": "icon.t.stronger-explosives-6", + "name": "power-armor-mk2", + "icon_name": "icon.t.power-armor-mk2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-5" + "power-armor", + "military-4", + "speed-module-2", + "efficiency-module-2" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "power-armor-mk2" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -3987,19 +4542,31 @@ "amount": 1 } ], - "research_unit_count": 600, - "localised_name": "Stronger explosives 6" + "research_unit_count": 400, + "localised_name": "Power armor MK2" }, { - "name": "stronger-explosives-7", - "icon_name": "icon.t.stronger-explosives-7", + "name": "processing-unit", + "icon_name": "icon.t.processing-unit", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "stronger-explosives-6", - "space-science-pack" + "chemical-science-pack" ], - "recipes": {}, + "successors": [ + "effect-transmission", + "efficiency-module-2", + "exoskeleton-equipment", + "power-armor", + "productivity-module-2", + "speed-module-2", + "utility-science-pack" + ], + "recipes": [ + "processing-unit" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4009,35 +4576,46 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Stronger explosives" + "research_unit_count": 300, + "localised_name": "Processing unit" }, { - "name": "weapon-shooting-speed-6", - "icon_name": "icon.t.weapon-shooting-speed-6", + "name": "production-science-pack", + "icon_name": "icon.t.production-science-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "weapon-shooting-speed-5" + "productivity-module", + "advanced-material-processing-2", + "railway" ], - "recipes": {}, + "successors": [ + "automation-3", + "braking-force-3", + "coal-liquefaction", + "effect-transmission", + "efficiency-module-3", + "inserter-capacity-bonus-4", + "kovarex-enrichment-process", + "logistics-3", + "mining-productivity-3", + "nuclear-fuel-reprocessing", + "productivity-module-3", + "research-speed-5", + "speed-module-3", + "worker-robots-speed-5", + "worker-robots-storage-2" + ], + "recipes": [ + "production-science-pack" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4047,32 +4625,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 600, - "localised_name": "Weapon shooting speed 6" + "research_unit_count": 100, + "localised_name": "Production science pack" }, { - "name": "laser-shooting-speed-1", - "icon_name": "icon.t.laser-shooting-speed-1", + "name": "productivity-module", + "icon_name": "icon.t.productivity-module", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser", - "military-science-pack" + "modules" ], - "recipes": {}, + "successors": [ + "production-science-pack", + "productivity-module-2" + ], + "recipes": [ + "productivity-module" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4081,28 +4658,28 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], "research_unit_count": 50, - "localised_name": "Laser shooting speed 1" + "localised_name": "Productivity module" }, { - "name": "laser-shooting-speed-2", - "icon_name": "icon.t.laser-shooting-speed-2", + "name": "productivity-module-2", + "icon_name": "icon.t.productivity-module-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-1" + "productivity-module", + "processing-unit" ], - "recipes": {}, + "successors": [ + "productivity-module-3" + ], + "recipes": [ + "productivity-module-2" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4112,27 +4689,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Laser shooting speed 2" + "research_unit_count": 75, + "localised_name": "Productivity module 2" }, { - "name": "laser-shooting-speed-3", - "icon_name": "icon.t.laser-shooting-speed-3", + "name": "productivity-module-3", + "icon_name": "icon.t.productivity-module-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-2" + "productivity-module-2", + "production-science-pack" ], - "recipes": {}, + "successors": [ + "rocket-silo" + ], + "recipes": [ + "productivity-module-3" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4143,56 +4724,94 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", "amount": 1 }, { - "name": "chemical-science-pack", + "name": "production-science-pack", "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Laser shooting speed 3" + "research_unit_count": 300, + "localised_name": "Productivity module 3" }, { - "name": "laser-shooting-speed-4", - "icon_name": "icon.t.laser-shooting-speed-4", + "name": "radar", + "icon_name": "icon.t.radar", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-3" + "automation-science-pack" ], - "recipes": {}, + "successors": [ + "artillery", + "rocket-silo", + "spidertron" + ], + "recipes": [ + "radar" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, + } + ], + "research_unit_count": 20, + "localised_name": "Radar" + }, + { + "name": "railway", + "icon_name": "icon.t.railway", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "logistics-2", + "engine" + ], + "successors": [ + "automated-rail-transportation", + "braking-force-1", + "fluid-wagon", + "production-science-pack" + ], + "recipes": [ + "rail", + "locomotive", + "cargo-wagon", + "iron-stick" + ], + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "military-science-pack", + "name": "automation-science-pack", "amount": 1 }, { - "name": "chemical-science-pack", + "name": "logistic-science-pack", "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Laser shooting speed 4" + "research_unit_count": 75, + "localised_name": "Railway" }, { - "name": "laser-shooting-speed-5", - "icon_name": "icon.t.laser-shooting-speed-5", + "name": "refined-flammables-1", + "icon_name": "icon.t.refined-flammables-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-4" + "flamethrower" + ], + "successors": [ + "refined-flammables-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4205,28 +4824,57 @@ { "name": "military-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, + } + ], + "research_unit_count": 100, + "localised_name": "Refined flammables 1" + }, + { + "name": "refined-flammables-2", + "icon_name": "icon.t.refined-flammables-2", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "refined-flammables-1" + ], + "successors": [ + "refined-flammables-3" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "utility-science-pack", + "name": "automation-science-pack", + "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "military-science-pack", "amount": 1 } ], "research_unit_count": 200, - "localised_name": "Laser shooting speed 5" + "localised_name": "Refined flammables 2" }, { - "name": "laser-shooting-speed-6", - "icon_name": "icon.t.laser-shooting-speed-6", + "name": "refined-flammables-3", + "icon_name": "icon.t.refined-flammables-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-5" + "refined-flammables-2", + "chemical-science-pack" + ], + "successors": [ + "refined-flammables-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4243,24 +4891,26 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 350, - "localised_name": "Laser shooting speed 6" + "research_unit_count": 300, + "localised_name": "Refined flammables 3" }, { - "name": "laser-shooting-speed-7", - "icon_name": "icon.t.laser-shooting-speed-7", + "name": "refined-flammables-4", + "icon_name": "icon.t.refined-flammables-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-shooting-speed-6" + "refined-flammables-3", + "utility-science-pack" + ], + "successors": [ + "refined-flammables-5" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4283,20 +4933,23 @@ "amount": 1 } ], - "research_unit_count": 450, - "localised_name": "Laser shooting speed 7" + "research_unit_count": 400, + "localised_name": "Refined flammables 4" }, { - "name": "defender", - "icon_name": "icon.t.defender", + "name": "refined-flammables-5", + "icon_name": "icon.t.refined-flammables-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-science-pack" + "refined-flammables-4" ], - "recipes": [ - "defender-capsule" + "successors": [ + "refined-flammables-6" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4309,24 +4962,33 @@ { "name": "military-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Defender" + "research_unit_count": 500, + "localised_name": "Refined flammables 5" }, { - "name": "distractor", - "icon_name": "icon.t.distractor", + "name": "refined-flammables-6", + "icon_name": "icon.t.refined-flammables-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "defender", - "military-3", - "laser" + "refined-flammables-5" ], - "recipes": [ - "distractor-capsule" + "successors": [ + "refined-flammables-7" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4343,24 +5005,28 @@ { "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Distractor" + "research_unit_count": 600, + "localised_name": "Refined flammables 6" }, { - "name": "destroyer", - "icon_name": "icon.t.destroyer", + "name": "refined-flammables-7", + "icon_name": "icon.t.refined-flammables-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military-4", - "distractor", - "speed-module" - ], - "recipes": [ - "destroyer-capsule" + "refined-flammables-6", + "space-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4381,46 +5047,52 @@ { "name": "utility-science-pack", "amount": 1 + }, + { + "name": "space-science-pack", + "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Destroyer" + "research_unit_count": 7, + "localised_name": "Refined flammables" }, { - "name": "follower-robot-count-1", - "icon_name": "icon.t.follower-robot-count-1", + "name": "repair-pack", + "icon_name": "icon.t.repair-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "defender" + "automation-science-pack" ], - "recipes": {}, + "successors": {}, + "recipes": [ + "repair-pack" + ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Follower robot count 1" + "research_unit_count": 25, + "localised_name": "Repair pack" }, { - "name": "follower-robot-count-2", - "icon_name": "icon.t.follower-robot-count-2", + "name": "research-speed-1", + "icon_name": "icon.t.research-speed-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-1" + "automation-2" + ], + "successors": [ + "research-speed-2" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4429,24 +5101,25 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Follower robot count 2" + "research_unit_count": 100, + "localised_name": "Lab research speed 1" }, { - "name": "follower-robot-count-3", - "icon_name": "icon.t.follower-robot-count-3", + "name": "research-speed-2", + "icon_name": "icon.t.research-speed-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-2" + "research-speed-1" + ], + "successors": [ + "research-speed-3" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4455,28 +5128,26 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "military-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Follower robot count 3" + "research_unit_count": 200, + "localised_name": "Lab research speed 2" }, { - "name": "follower-robot-count-4", - "icon_name": "icon.t.follower-robot-count-4", + "name": "research-speed-3", + "icon_name": "icon.t.research-speed-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-3" + "research-speed-2", + "chemical-science-pack" + ], + "successors": [ + "research-speed-4" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4486,28 +5157,28 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 600, - "localised_name": "Follower robot count 4" + "research_unit_count": 250, + "localised_name": "Lab research speed 3" }, { - "name": "follower-robot-count-5", - "icon_name": "icon.t.follower-robot-count-5", + "name": "research-speed-4", + "icon_name": "icon.t.research-speed-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-4", - "destroyer" + "research-speed-3" + ], + "successors": [ + "research-speed-5" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4517,31 +5188,29 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 800, - "localised_name": "Follower robot count 5" + "research_unit_count": 500, + "localised_name": "Lab research speed 4" }, { - "name": "follower-robot-count-6", - "icon_name": "icon.t.follower-robot-count-6", + "name": "research-speed-5", + "icon_name": "icon.t.research-speed-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-5" + "research-speed-4", + "production-science-pack" + ], + "successors": [ + "research-speed-6" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4551,32 +5220,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "utility-science-pack", + "name": "production-science-pack", "amount": 1 } ], - "research_unit_count": 1000, - "localised_name": "Follower robot count 6" + "research_unit_count": 500, + "localised_name": "Lab research speed 5" }, { - "name": "follower-robot-count-7", - "icon_name": "icon.t.follower-robot-count-7", + "name": "research-speed-6", + "icon_name": "icon.t.research-speed-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "follower-robot-count-6", - "space-science-pack" + "research-speed-5", + "utility-science-pack" ], + "successors": {}, "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4586,10 +5254,6 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 @@ -4601,29 +5265,32 @@ { "name": "utility-science-pack", "amount": 1 - }, - { - "name": "space-science-pack", - "amount": 1 } ], - "research_unit_count": 0, - "localised_name": "Follower robot count" + "research_unit_count": 500, + "localised_name": "Lab research speed 6" }, { - "name": "kovarex-enrichment-process", - "icon_name": "icon.t.kovarex-enrichment-process", + "name": "robotics", + "icon_name": "icon.t.robotics", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "production-science-pack", - "uranium-processing", - "rocket-fuel" + "electric-engine", + "battery" + ], + "successors": [ + "construction-robotics", + "logistic-robotics", + "utility-science-pack", + "worker-robots-speed-1", + "worker-robots-storage-1" ], "recipes": [ - "kovarex-enrichment-process", - "nuclear-fuel" + "flying-robot-frame" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4636,27 +5303,29 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 } ], - "research_unit_count": 1500, - "localised_name": "Kovarex enrichment process" + "research_unit_count": 75, + "localised_name": "Robotics" }, { - "name": "nuclear-fuel-reprocessing", - "icon_name": "icon.t.nuclear-fuel-reprocessing", + "name": "rocket-fuel", + "icon_name": "icon.t.rocket-fuel", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "nuclear-power", - "production-science-pack" + "flammables", + "advanced-oil-processing" + ], + "successors": [ + "kovarex-enrichment-process", + "rocket-silo" ], "recipes": [ - "nuclear-fuel-reprocessing" + "rocket-fuel" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4669,29 +5338,37 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Nuclear fuel reprocessing" + "research_unit_count": 300, + "localised_name": "Rocket fuel" }, { - "name": "nuclear-power", - "icon_name": "icon.t.nuclear-power", + "name": "rocket-silo", + "icon_name": "icon.t.rocket-silo", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "uranium-processing" + "concrete", + "rocket-fuel", + "electric-energy-accumulators", + "solar-energy", + "utility-science-pack", + "speed-module-3", + "productivity-module-3", + "radar" + ], + "successors": [ + "space-science-pack" ], "recipes": [ - "nuclear-reactor", - "heat-exchanger", - "heat-pipe", - "steam-turbine" + "rocket-silo", + "rocket-part", + "cargo-landing-pad", + "satellite" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4704,25 +5381,40 @@ { "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 800, - "localised_name": "Nuclear power" + "research_unit_count": 1000, + "localised_name": "Rocket silo" }, { - "name": "uranium-processing", - "icon_name": "icon.t.uranium-processing", + "name": "rocketry", + "icon_name": "icon.t.rocketry", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "chemical-science-pack", - "concrete" + "explosives", + "flammables", + "military-science-pack" + ], + "successors": [ + "atomic-bomb", + "explosive-rocketry", + "spidertron" ], "recipes": [ - "centrifuge", - "uranium-processing", - "uranium-fuel-cell" + "rocket-launcher", + "rocket" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4733,46 +5425,68 @@ "amount": 1 }, { - "name": "chemical-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Uranium processing" + "research_unit_count": 120, + "localised_name": "Rocketry" }, { - "name": "heavy-armor", - "icon_name": "icon.t.heavy-armor", + "name": "solar-energy", + "icon_name": "icon.t.solar-energy", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "military", - "steel-processing" + "steel-processing", + "logistic-science-pack" + ], + "successors": [ + "rocket-silo", + "solar-panel-equipment" ], "recipes": [ - "heavy-armor" + "solar-panel" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 } ], - "research_unit_count": 30, - "localised_name": "Heavy armor" + "research_unit_count": 250, + "localised_name": "Solar energy" }, { - "name": "modular-armor", - "icon_name": "icon.t.modular-armor", + "name": "solar-panel-equipment", + "icon_name": "icon.t.solar-panel-equipment", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "heavy-armor", - "advanced-electronics" + "modular-armor", + "solar-energy" + ], + "successors": [ + "battery-equipment", + "belt-immunity-equipment", + "discharge-defense-equipment", + "energy-shield-equipment", + "exoskeleton-equipment", + "night-vision-equipment", + "personal-laser-defense-equipment", + "personal-roboport-equipment" ], "recipes": [ - "modular-armor" + "solar-panel-equipment" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4784,21 +5498,52 @@ } ], "research_unit_count": 100, - "localised_name": "Modular armor" + "localised_name": "Portable solar panel" }, { - "name": "power-armor", - "icon_name": "icon.t.power-armor", + "name": "space-science-pack", + "icon_name": "icon.t.space-science-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "modular-armor", - "electric-engine", - "advanced-electronics-2" + "rocket-silo" + ], + "successors": [ + "artillery-shell-range-1", + "artillery-shell-speed-1", + "follower-robot-count-5", + "laser-weapons-damage-7", + "mining-productivity-4", + "physical-projectile-damage-7", + "refined-flammables-7", + "stronger-explosives-7", + "worker-robots-speed-6" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Space science pack" + }, + { + "name": "speed-module", + "icon_name": "icon.t.speed-module", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "modules" + ], + "successors": [ + "automation-3", + "destroyer", + "speed-module-2" ], "recipes": [ - "power-armor" + "speed-module" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4807,29 +5552,29 @@ { "name": "logistic-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Power armor" + "research_unit_count": 50, + "localised_name": "Speed module" }, { - "name": "power-armor-mk2", - "icon_name": "icon.t.power-armor-mk2", + "name": "speed-module-2", + "icon_name": "icon.t.speed-module-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "power-armor", - "military-4", - "speed-module-2", - "effectivity-module-2" + "speed-module", + "processing-unit" + ], + "successors": [ + "power-armor-mk2", + "speed-module-3" ], "recipes": [ - "power-armor-mk2" + "speed-module-2" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4839,34 +5584,31 @@ "name": "logistic-science-pack", "amount": 1 }, - { - "name": "military-science-pack", - "amount": 1 - }, { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 400, - "localised_name": "Power armor MK2" + "research_unit_count": 75, + "localised_name": "Speed module 2" }, { - "name": "energy-shield-equipment", - "icon_name": "icon.t.energy-shield-equipment", + "name": "speed-module-3", + "icon_name": "icon.t.speed-module-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "solar-panel-equipment", - "military-science-pack" + "speed-module-2", + "production-science-pack" + ], + "successors": [ + "rocket-silo" ], "recipes": [ - "energy-shield-equipment" + "speed-module-3" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4877,27 +5619,36 @@ "amount": 1 }, { - "name": "military-science-pack", + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", "amount": 1 } ], - "research_unit_count": 150, - "localised_name": "Energy shield equipment" + "research_unit_count": 300, + "localised_name": "Speed module 3" }, { - "name": "energy-shield-mk2-equipment", - "icon_name": "icon.t.energy-shield-mk2-equipment", + "name": "spidertron", + "icon_name": "icon.t.spidertron", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "energy-shield-equipment", - "military-3", - "low-density-structure", - "power-armor" + "military-4", + "exoskeleton-equipment", + "fission-reactor-equipment", + "rocketry", + "efficiency-module-3", + "radar" ], + "successors": {}, "recipes": [ - "energy-shield-mk2-equipment" + "spidertron" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -4914,156 +5665,130 @@ { "name": "chemical-science-pack", "amount": 1 - } - ], - "research_unit_count": 200, - "localised_name": "Energy shield MK2 equipment" - }, - { - "name": "night-vision-equipment", - "icon_name": "icon.t.night-vision-equipment", - "enabled": true, - "hidden": false, - "prerequisites": [ - "solar-panel-equipment" - ], - "recipes": [ - "night-vision-equipment" - ], - "research_unit_ingredients": [ + }, { - "name": "automation-science-pack", + "name": "production-science-pack", "amount": 1 }, { - "name": "logistic-science-pack", + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Nightvision equipment" + "research_unit_count": 2500, + "localised_name": "Spidertron" }, { - "name": "belt-immunity-equipment", - "icon_name": "icon.t.belt-immunity-equipment", + "name": "steam-power", + "icon_name": "icon.t.steam-power", "enabled": true, + "essential": false, "hidden": false, - "prerequisites": [ - "solar-panel-equipment" + "prerequisites": {}, + "successors": [ + "automation-science-pack" ], "recipes": [ - "belt-immunity-equipment" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - } + "pipe", + "pipe-to-ground", + "offshore-pump", + "boiler", + "steam-engine" ], - "research_unit_count": 50, - "localised_name": "Belt immunity equipment" + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Steam power" }, { - "name": "exoskeleton-equipment", - "icon_name": "icon.t.exoskeleton-equipment", + "name": "steel-axe", + "icon_name": "icon.t.steel-axe", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-electronics-2", - "electric-engine", - "solar-panel-equipment" - ], - "recipes": [ - "exoskeleton-equipment" - ], - "research_unit_ingredients": [ - { - "name": "automation-science-pack", - "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - } + "steel-processing" ], - "research_unit_count": 50, - "localised_name": "Exoskeleton equipment" + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Steel axe" }, { - "name": "battery-equipment", - "icon_name": "icon.t.battery-equipment", + "name": "steel-processing", + "icon_name": "icon.t.steel-processing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "battery", - "solar-panel-equipment" + "automation-science-pack" + ], + "successors": [ + "advanced-material-processing", + "automation-2", + "electric-energy-distribution-1", + "engine", + "heavy-armor", + "military-2", + "solar-energy", + "steel-axe" ], "recipes": [ - "battery-equipment" + "steel-plate", + "steel-chest" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 } ], "research_unit_count": 50, - "localised_name": "Personal battery" + "localised_name": "Steel processing" }, { - "name": "battery-mk2-equipment", - "icon_name": "icon.t.battery-mk2-equipment", + "name": "stone-wall", + "icon_name": "icon.t.stone-wall", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "battery-equipment", - "low-density-structure", - "power-armor" + "automation-science-pack" + ], + "successors": [ + "gate", + "military-science-pack" ], "recipes": [ - "battery-mk2-equipment" + "stone-wall" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", "amount": 1 - }, - { - "name": "logistic-science-pack", - "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Personal battery MK2" + "research_unit_count": 10, + "localised_name": "Stone wall" }, { - "name": "solar-panel-equipment", - "icon_name": "icon.t.solar-panel-equipment", + "name": "stronger-explosives-1", + "icon_name": "icon.t.stronger-explosives-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "modular-armor", - "solar-energy" + "military-2" ], - "recipes": [ - "solar-panel-equipment" + "successors": [ + "stronger-explosives-2" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5075,21 +5800,23 @@ } ], "research_unit_count": 100, - "localised_name": "Portable solar panel" + "localised_name": "Stronger explosives 1" }, { - "name": "fusion-reactor-equipment", - "icon_name": "icon.t.fusion-reactor-equipment", + "name": "stronger-explosives-2", + "icon_name": "icon.t.stronger-explosives-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "utility-science-pack", - "power-armor", + "stronger-explosives-1", "military-science-pack" ], - "recipes": [ - "fusion-reactor-equipment" + "successors": [ + "stronger-explosives-3" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5102,34 +5829,26 @@ { "name": "military-science-pack", "amount": 1 - }, - { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], "research_unit_count": 200, - "localised_name": "Portable fusion reactor" + "localised_name": "Stronger explosives 2" }, { - "name": "personal-laser-defense-equipment", - "icon_name": "icon.t.personal-laser-defense-equipment", + "name": "stronger-explosives-3", + "icon_name": "icon.t.stronger-explosives-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-turret", - "military-3", - "low-density-structure", - "power-armor", - "solar-panel-equipment" + "stronger-explosives-2", + "chemical-science-pack" ], - "recipes": [ - "personal-laser-defense-equipment" + "successors": [ + "stronger-explosives-4" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5148,24 +5867,24 @@ "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Personal laser defense" + "research_unit_count": 300, + "localised_name": "Stronger explosives 3" }, { - "name": "discharge-defense-equipment", - "icon_name": "icon.t.discharge-defense-equipment", + "name": "stronger-explosives-4", + "icon_name": "icon.t.stronger-explosives-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "laser-turret", - "military-3", - "power-armor", - "solar-panel-equipment" + "stronger-explosives-3", + "utility-science-pack" ], - "recipes": [ - "discharge-defense-equipment", - "discharge-defense-remote" + "successors": [ + "stronger-explosives-5" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5182,20 +5901,29 @@ { "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 100, - "localised_name": "Discharge defense" + "research_unit_count": 400, + "localised_name": "Stronger explosives 4" }, { - "name": "modules", - "icon_name": "icon.t.modules", + "name": "stronger-explosives-5", + "icon_name": "icon.t.stronger-explosives-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-electronics" + "stronger-explosives-4" + ], + "successors": [ + "stronger-explosives-6" ], "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5204,47 +5932,37 @@ { "name": "logistic-science-pack", "amount": 1 - } - ], - "research_unit_count": 100, - "localised_name": "Modules" - }, - { - "name": "speed-module", - "icon_name": "icon.t.speed-module", - "enabled": true, - "hidden": false, - "prerequisites": [ - "modules" - ], - "recipes": [ - "speed-module" - ], - "research_unit_ingredients": [ + }, { - "name": "automation-science-pack", + "name": "military-science-pack", "amount": 1 }, { - "name": "logistic-science-pack", + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Speed module" + "research_unit_count": 500, + "localised_name": "Stronger explosives 5" }, { - "name": "speed-module-2", - "icon_name": "icon.t.speed-module-2", + "name": "stronger-explosives-6", + "icon_name": "icon.t.stronger-explosives-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "speed-module", - "advanced-electronics-2" + "stronger-explosives-5" ], - "recipes": [ - "speed-module-2" + "successors": [ + "stronger-explosives-7" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5254,26 +5972,35 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Speed module 2" + "research_unit_count": 600, + "localised_name": "Stronger explosives 6" }, { - "name": "speed-module-3", - "icon_name": "icon.t.speed-module-3", + "name": "stronger-explosives-7", + "icon_name": "icon.t.stronger-explosives-7", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "speed-module-2", - "production-science-pack" - ], - "recipes": [ - "speed-module-3" + "stronger-explosives-6", + "space-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5283,29 +6010,45 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "production-science-pack", + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Speed module 3" + "research_unit_count": 7, + "localised_name": "Stronger explosives" }, { - "name": "productivity-module", - "icon_name": "icon.t.productivity-module", + "name": "sulfur-processing", + "icon_name": "icon.t.sulfur-processing", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "modules" + "oil-processing" + ], + "successors": [ + "battery", + "chemical-science-pack", + "explosives" ], "recipes": [ - "productivity-module" + "sulfuric-acid", + "sulfur" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5316,21 +6059,30 @@ "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Productivity module" + "research_unit_count": 150, + "localised_name": "Sulfur processing" }, { - "name": "productivity-module-2", - "icon_name": "icon.t.productivity-module-2", + "name": "tank", + "icon_name": "icon.t.tank", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "productivity-module", - "advanced-electronics-2" + "automobilism", + "military-3", + "explosives" + ], + "successors": [ + "artillery", + "uranium-ammo" ], "recipes": [ - "productivity-module-2" + "tank", + "cannon-shell", + "explosive-cannon-shell" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5340,26 +6092,61 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Productivity module 2" + "research_unit_count": 250, + "localised_name": "Tank" }, { - "name": "productivity-module-3", - "icon_name": "icon.t.productivity-module-3", + "name": "toolbelt", + "icon_name": "icon.t.toolbelt", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "productivity-module-2", - "production-science-pack" + "logistic-science-pack" + ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ + { + "name": "automation-science-pack", + "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + } + ], + "research_unit_count": 100, + "localised_name": "Toolbelt" + }, + { + "name": "uranium-ammo", + "icon_name": "icon.t.uranium-ammo", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "uranium-processing", + "military-4", + "tank" ], + "successors": {}, "recipes": [ - "productivity-module-3" + "uranium-rounds-magazine", + "uranium-cannon-shell", + "explosive-uranium-cannon-shell" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5369,28 +6156,38 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 }, { - "name": "production-science-pack", + "name": "utility-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Productivity module 3" + "research_unit_count": 1000, + "localised_name": "Uranium ammo" }, { - "name": "effectivity-module", - "icon_name": "icon.t.effectivity-module", + "name": "uranium-mining", + "icon_name": "icon.t.uranium-mining", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "modules" + "chemical-science-pack", + "concrete" ], - "recipes": [ - "effectivity-module" + "successors": [ + "uranium-processing" + ], + "recipes": {}, + "alt_modifiers": [ + "mining-with-fluid" ], "research_unit_ingredients": [ { @@ -5400,23 +6197,72 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "research_unit_count": 50, - "localised_name": "Efficiency module" + "research_unit_count": 100, + "localised_name": "Uranium mining" + }, + { + "name": "uranium-processing", + "icon_name": "icon.t.uranium-processing", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "uranium-mining" + ], + "successors": [ + "kovarex-enrichment-process", + "nuclear-power", + "uranium-ammo" + ], + "recipes": [ + "centrifuge", + "uranium-processing" + ], + "alt_modifiers": {}, + "research_unit_ingredients": {}, + "research_unit_count": 1, + "localised_name": "Uranium processing" }, { - "name": "effectivity-module-2", - "icon_name": "icon.t.effectivity-module-2", + "name": "utility-science-pack", + "icon_name": "icon.t.utility-science-pack", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "effectivity-module", - "advanced-electronics-2" + "robotics", + "processing-unit", + "low-density-structure" + ], + "successors": [ + "braking-force-6", + "fission-reactor-equipment", + "inserter-capacity-bonus-7", + "laser-shooting-speed-5", + "laser-weapons-damage-5", + "logistic-system", + "military-4", + "mining-productivity-3", + "personal-roboport-mk2-equipment", + "physical-projectile-damage-6", + "refined-flammables-4", + "research-speed-6", + "rocket-silo", + "stronger-explosives-4", + "weapon-shooting-speed-6", + "worker-robots-speed-3", + "worker-robots-storage-3" ], "recipes": [ - "effectivity-module-2" + "utility-science-pack" ], + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5431,21 +6277,47 @@ "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Efficiency module 2" + "research_unit_count": 100, + "localised_name": "Utility science pack" }, { - "name": "effectivity-module-3", - "icon_name": "icon.t.effectivity-module-3", + "name": "weapon-shooting-speed-1", + "icon_name": "icon.t.weapon-shooting-speed-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "effectivity-module-2", - "production-science-pack" + "military" ], - "recipes": [ - "effectivity-module-3" + "successors": [ + "weapon-shooting-speed-2" ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ + { + "name": "automation-science-pack", + "amount": 1 + } + ], + "research_unit_count": 100, + "localised_name": "Weapon shooting speed 1" + }, + { + "name": "weapon-shooting-speed-2", + "icon_name": "icon.t.weapon-shooting-speed-2", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "weapon-shooting-speed-1", + "logistic-science-pack" + ], + "successors": [ + "weapon-shooting-speed-3" + ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5454,31 +6326,57 @@ { "name": "logistic-science-pack", "amount": 1 + } + ], + "research_unit_count": 200, + "localised_name": "Weapon shooting speed 2" + }, + { + "name": "weapon-shooting-speed-3", + "icon_name": "icon.t.weapon-shooting-speed-3", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "weapon-shooting-speed-2", + "military-science-pack" + ], + "successors": [ + "weapon-shooting-speed-4" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ + { + "name": "automation-science-pack", + "amount": 1 }, { - "name": "chemical-science-pack", + "name": "logistic-science-pack", "amount": 1 }, { - "name": "production-science-pack", + "name": "military-science-pack", "amount": 1 } ], "research_unit_count": 300, - "localised_name": "Efficiency module 3" + "localised_name": "Weapon shooting speed 3" }, { - "name": "effect-transmission", - "icon_name": "icon.t.effect-transmission", + "name": "weapon-shooting-speed-4", + "icon_name": "icon.t.weapon-shooting-speed-4", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-electronics-2", - "production-science-pack" + "weapon-shooting-speed-3" ], - "recipes": [ - "beacon" + "successors": [ + "weapon-shooting-speed-5" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5489,29 +6387,28 @@ "amount": 1 }, { - "name": "chemical-science-pack", - "amount": 1 - }, - { - "name": "production-science-pack", + "name": "military-science-pack", "amount": 1 } ], - "research_unit_count": 75, - "localised_name": "Effect transmission" + "research_unit_count": 400, + "localised_name": "Weapon shooting speed 4" }, { - "name": "low-density-structure", - "icon_name": "icon.t.low-density-structure", + "name": "weapon-shooting-speed-5", + "icon_name": "icon.t.weapon-shooting-speed-5", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "advanced-material-processing", + "weapon-shooting-speed-4", "chemical-science-pack" ], - "recipes": [ - "low-density-structure" + "successors": [ + "weapon-shooting-speed-6" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5521,26 +6418,31 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Low density structure" + "research_unit_count": 500, + "localised_name": "Weapon shooting speed 5" }, { - "name": "rocket-control-unit", - "icon_name": "icon.t.rocket-control-unit", + "name": "weapon-shooting-speed-6", + "icon_name": "icon.t.weapon-shooting-speed-6", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "utility-science-pack", - "speed-module" - ], - "recipes": [ - "rocket-control-unit" + "weapon-shooting-speed-5", + "utility-science-pack" ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5550,6 +6452,10 @@ "name": "logistic-science-pack", "amount": 1 }, + { + "name": "military-science-pack", + "amount": 1 + }, { "name": "chemical-science-pack", "amount": 1 @@ -5559,21 +6465,23 @@ "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Rocket control unit" + "research_unit_count": 600, + "localised_name": "Weapon shooting speed 6" }, { - "name": "rocket-fuel", - "icon_name": "icon.t.rocket-fuel", + "name": "worker-robots-speed-1", + "icon_name": "icon.t.worker-robots-speed-1", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "flammables", - "advanced-oil-processing" + "robotics" ], - "recipes": [ - "rocket-fuel" + "successors": [ + "worker-robots-speed-2" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5588,25 +6496,23 @@ "amount": 1 } ], - "research_unit_count": 300, - "localised_name": "Rocket fuel" + "research_unit_count": 50, + "localised_name": "Worker robot speed 1" }, { - "name": "rocket-silo", - "icon_name": "icon.t.rocket-silo", + "name": "worker-robots-speed-2", + "icon_name": "icon.t.worker-robots-speed-2", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "concrete", - "speed-module-3", - "productivity-module-3", - "rocket-fuel", - "rocket-control-unit" + "worker-robots-speed-1" ], - "recipes": [ - "rocket-silo", - "rocket-part" + "successors": [ + "worker-robots-speed-3" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5619,31 +6525,26 @@ { "name": "chemical-science-pack", "amount": 1 - }, - { - "name": "production-science-pack", - "amount": 1 - }, - { - "name": "utility-science-pack", - "amount": 1 } ], - "research_unit_count": 1000, - "localised_name": "Rocket silo" + "research_unit_count": 100, + "localised_name": "Worker robot speed 2" }, { - "name": "cliff-explosives", - "icon_name": "icon.t.cliff-explosives", + "name": "worker-robots-speed-3", + "icon_name": "icon.t.worker-robots-speed-3", "enabled": true, + "essential": false, "hidden": false, "prerequisites": [ - "explosives", - "military-2" + "worker-robots-speed-2", + "utility-science-pack" ], - "recipes": [ - "cliff-explosives" + "successors": [ + "worker-robots-speed-4" ], + "recipes": {}, + "alt_modifiers": {}, "research_unit_ingredients": [ { "name": "automation-science-pack", @@ -5652,290 +6553,406 @@ { "name": "logistic-science-pack", "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 } ], - "research_unit_count": 200, - "localised_name": "Cliff explosives" - } - ], - "recipes": [ + "research_unit_count": 150, + "localised_name": "Worker robot speed 3" + }, { - "name": "assembling-machine-1", - "icon_name": "icon.r.assembling-machine-1", - "icon_alt_name": "icon.i.assembling-machine-1", - "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "a[assembling-machine-1]", - "subgroup": "production-machine", - "ingredients": [ + "name": "worker-robots-speed-4", + "icon_name": "icon.t.worker-robots-speed-4", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "worker-robots-speed-3" + ], + "successors": [ + "worker-robots-speed-5" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 9 + "name": "automation-science-pack", + "amount": 1 }, { - "name": "iron-gear-wheel", - "type": "item", - "amount": 5 + "name": "logistic-science-pack", + "amount": 1 }, { - "name": "electronic-circuit", - "type": "item", - "amount": 3 - } - ], - "products": [ + "name": "chemical-science-pack", + "amount": 1 + }, { - "name": "assembling-machine-1", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "utility-science-pack", + "amount": 1 } ], - "localised_name": "Assembling machine 1" + "research_unit_count": 250, + "localised_name": "Worker robot speed 4" }, { - "name": "automation-science-pack", - "icon_name": "icon.r.automation-science-pack", - "icon_alt_name": "icon.i.automation-science-pack", + "name": "worker-robots-speed-5", + "icon_name": "icon.t.worker-robots-speed-5", "enabled": true, - "category": "crafting", - "energy": 5, - "order": "a[automation-science-pack]", - "subgroup": "science-pack", - "ingredients": [ + "essential": false, + "hidden": false, + "prerequisites": [ + "worker-robots-speed-4", + "production-science-pack" + ], + "successors": [ + "worker-robots-speed-6" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "copper-plate", - "type": "item", + "name": "automation-science-pack", "amount": 1 }, { - "name": "iron-gear-wheel", - "type": "item", + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", "amount": 1 } ], - "products": [ + "research_unit_count": 500, + "localised_name": "Worker robot speed 5" + }, + { + "name": "worker-robots-speed-6", + "icon_name": "icon.t.worker-robots-speed-6", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "worker-robots-speed-5", + "space-science-pack" + ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { "name": "automation-science-pack", - "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + }, + { + "name": "space-science-pack", + "amount": 1 } ], - "localised_name": "Automation science pack" + "research_unit_count": 15, + "localised_name": "Worker robot speed" }, { - "name": "firearm-magazine", - "icon_name": "icon.r.firearm-magazine", - "icon_alt_name": "icon.i.firearm-magazine", + "name": "worker-robots-storage-1", + "icon_name": "icon.t.worker-robots-storage-1", "enabled": true, - "category": "crafting", - "energy": 1, - "order": "a[basic-clips]-a[firearm-magazine]", - "subgroup": "ammo", - "ingredients": [ - { - "name": "iron-plate", - "type": "item", - "amount": 4 - } + "essential": false, + "hidden": false, + "prerequisites": [ + "robotics" ], - "products": [ + "successors": [ + "worker-robots-storage-2" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "firearm-magazine", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "automation-science-pack", + "amount": 1 + }, + { + "name": "logistic-science-pack", + "amount": 1 + }, + { + "name": "chemical-science-pack", + "amount": 1 } ], - "localised_name": "Firearm magazine" + "research_unit_count": 200, + "localised_name": "Worker robot cargo size 1" }, { - "name": "pistol", - "icon_name": "icon.r.pistol", - "icon_alt_name": "icon.i.pistol", + "name": "worker-robots-storage-2", + "icon_name": "icon.t.worker-robots-storage-2", "enabled": true, - "category": "crafting", - "energy": 5, - "order": "a[basic-clips]-a[pistol]", - "subgroup": "gun", - "ingredients": [ + "essential": false, + "hidden": false, + "prerequisites": [ + "worker-robots-storage-1", + "production-science-pack" + ], + "successors": [ + "worker-robots-storage-3" + ], + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 5 + "name": "automation-science-pack", + "amount": 1 }, { - "name": "copper-plate", - "type": "item", - "amount": 5 - } - ], - "products": [ + "name": "logistic-science-pack", + "amount": 1 + }, { - "name": "pistol", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "chemical-science-pack", + "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 } ], - "localised_name": "Pistol" + "research_unit_count": 300, + "localised_name": "Worker robot cargo size 2" }, { - "name": "piercing-rounds-magazine", - "icon_name": "icon.r.piercing-rounds-magazine", - "icon_alt_name": "icon.i.piercing-rounds-magazine", - "enabled": false, - "category": "crafting", - "energy": 3, - "order": "a[basic-clips]-b[piercing-rounds-magazine]", - "subgroup": "ammo", - "ingredients": [ + "name": "worker-robots-storage-3", + "icon_name": "icon.t.worker-robots-storage-3", + "enabled": true, + "essential": false, + "hidden": false, + "prerequisites": [ + "worker-robots-storage-2", + "utility-science-pack" + ], + "successors": {}, + "recipes": {}, + "alt_modifiers": {}, + "research_unit_ingredients": [ { - "name": "copper-plate", - "type": "item", - "amount": 5 + "name": "automation-science-pack", + "amount": 1 }, { - "name": "steel-plate", - "type": "item", + "name": "logistic-science-pack", "amount": 1 }, { - "name": "firearm-magazine", - "type": "item", + "name": "chemical-science-pack", "amount": 1 + }, + { + "name": "production-science-pack", + "amount": 1 + }, + { + "name": "utility-science-pack", + "amount": 1 + } + ], + "research_unit_count": 450, + "localised_name": "Worker robot cargo size 3" + } + ], + "recipes": [ + { + "name": "wooden-chest", + "icon_name": "icon.r.wooden-chest", + "icon_alt_name": "icon.i.wooden-chest", + "enabled": true, + "category": "crafting", + "energy": 0.5, + "order": "a[items]-a[wooden-chest]", + "subgroup": "storage", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "wood", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "piercing-rounds-magazine", + "name": "wooden-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Piercing rounds magazine" + "localised_name": "Wooden chest" }, { - "name": "submachine-gun", - "icon_name": "icon.r.submachine-gun", - "icon_alt_name": "icon.i.submachine-gun", - "enabled": false, + "name": "iron-chest", + "icon_name": "icon.r.iron-chest", + "icon_alt_name": "icon.i.iron-chest", + "enabled": true, "category": "crafting", - "energy": 10, - "order": "a[basic-clips]-b[submachine-gun]", - "subgroup": "gun", + "energy": 0.5, + "order": "a[items]-b[iron-chest]", + "subgroup": "storage", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 10 - }, - { - "name": "copper-plate", - "type": "item", - "amount": 5 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 10 + "amount": 8 } ], "products": [ { - "name": "submachine-gun", + "name": "iron-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Submachine gun" + "localised_name": "Iron chest" }, { - "name": "uranium-rounds-magazine", - "icon_name": "icon.r.uranium-rounds-magazine", - "icon_alt_name": "icon.i.uranium-rounds-magazine", + "name": "steel-chest", + "icon_name": "icon.r.steel-chest", + "icon_alt_name": "icon.i.steel-chest", "enabled": false, "category": "crafting", - "energy": 10, - "order": "a[basic-clips]-c[uranium-rounds-magazine]", - "subgroup": "ammo", + "energy": 0.5, + "order": "a[items]-c[steel-chest]", + "subgroup": "storage", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "uranium-238", - "type": "item", - "amount": 1 - }, - { - "name": "piercing-rounds-magazine", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 8 } ], "products": [ { - "name": "uranium-rounds-magazine", + "name": "steel-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Uranium rounds magazine" + "localised_name": "Steel chest" }, { - "name": "beacon", - "icon_name": "icon.r.beacon", - "icon_alt_name": "icon.i.beacon", + "name": "storage-tank", + "icon_name": "icon.r.storage-tank", + "icon_alt_name": "icon.i.storage-tank", "enabled": false, "category": "crafting", - "energy": 15, - "order": "a[beacon]", - "subgroup": "module", + "energy": 3, + "order": "b[fluid]-a[storage-tank]", + "subgroup": "storage", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 10 - }, - { - "name": "copper-cable", - "type": "item", - "amount": 10 - }, - { - "name": "electronic-circuit", + "name": "iron-plate", "type": "item", "amount": 20 }, { - "name": "advanced-circuit", + "name": "steel-plate", "type": "item", - "amount": 20 + "amount": 5 } ], "products": [ { - "name": "beacon", + "name": "storage-tank", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Beacon" + "localised_name": "Storage tank" }, { - "name": "burner-inserter", - "icon_name": "icon.r.burner-inserter", - "icon_alt_name": "icon.i.burner-inserter", + "name": "transport-belt", + "icon_name": "icon.r.transport-belt", + "icon_alt_name": "icon.i.transport-belt", "enabled": true, "category": "crafting", "energy": 0.5, - "order": "a[burner-inserter]", - "subgroup": "inserter", + "order": "a[transport-belt]-a[transport-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", @@ -5950,718 +6967,917 @@ ], "products": [ { - "name": "burner-inserter", + "name": "transport-belt", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Burner inserter" + "localised_name": "Transport belt" }, { - "name": "copper-cable", - "icon_name": "icon.r.copper-cable", - "icon_alt_name": "icon.i.copper-cable", - "enabled": true, + "name": "fast-transport-belt", + "icon_name": "icon.r.fast-transport-belt", + "icon_alt_name": "icon.i.fast-transport-belt", + "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[copper-cable]", - "subgroup": "intermediate-product", + "order": "a[transport-belt]-b[fast-transport-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-gear-wheel", + "type": "item", + "amount": 5 + }, + { + "name": "transport-belt", "type": "item", "amount": 1 } ], "products": [ { - "name": "copper-cable", + "name": "fast-transport-belt", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Copper cable" + "localised_name": "Fast transport belt" }, { - "name": "electric-energy-interface", - "icon_name": "icon.r.electric-energy-interface", - "icon_alt_name": "icon.i.electric-energy-interface", + "name": "express-transport-belt", + "icon_name": "icon.r.express-transport-belt", + "icon_alt_name": "icon.i.express-transport-belt", "enabled": false, - "category": "crafting", + "category": "crafting-with-fluid", "energy": 0.5, - "order": "a[electric-energy-interface]-b[electric-energy-interface]", - "subgroup": "other", + "order": "a[transport-belt]-c[express-transport-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 2 + "amount": 10 }, { - "name": "electronic-circuit", + "name": "fast-transport-belt", "type": "item", - "amount": 5 + "amount": 1 + }, + { + "name": "lubricant", + "type": "fluid", + "amount": 20 } ], "products": [ { - "name": "electric-energy-interface", + "name": "express-transport-belt", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Electric energy interface" + "localised_name": "Express transport belt" }, { - "name": "solar-panel-equipment", - "icon_name": "icon.r.solar-panel-equipment", - "icon_alt_name": "icon.i.solar-panel-equipment", + "name": "underground-belt", + "icon_name": "icon.r.underground-belt", + "icon_alt_name": "icon.i.underground-belt", "enabled": false, "category": "crafting", - "energy": 10, - "order": "a[energy-source]-a[solar-panel]", - "subgroup": "equipment", + "energy": 1, + "order": "b[underground-belt]-a[underground-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 5 - }, - { - "name": "advanced-circuit", + "name": "iron-plate", "type": "item", - "amount": 2 + "amount": 10 }, { - "name": "solar-panel", + "name": "transport-belt", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "solar-panel-equipment", + "name": "underground-belt", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Portable solar panel" + "localised_name": "Underground belt" }, { - "name": "fusion-reactor-equipment", - "icon_name": "icon.r.fusion-reactor-equipment", - "icon_alt_name": "icon.i.fusion-reactor-equipment", + "name": "fast-underground-belt", + "icon_name": "icon.r.fast-underground-belt", + "icon_alt_name": "icon.i.fast-underground-belt", "enabled": false, "category": "crafting", - "energy": 10, - "order": "a[energy-source]-b[fusion-reactor]", - "subgroup": "equipment", + "energy": 2, + "order": "b[underground-belt]-b[fast-underground-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", + "name": "iron-gear-wheel", "type": "item", - "amount": 200 + "amount": 40 }, { - "name": "low-density-structure", + "name": "underground-belt", "type": "item", - "amount": 50 + "amount": 2 } ], "products": [ { - "name": "fusion-reactor-equipment", + "name": "fast-underground-belt", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Portable fusion reactor" + "localised_name": "Fast underground belt" }, { - "name": "small-electric-pole", - "icon_name": "icon.r.small-electric-pole", - "icon_alt_name": "icon.i.small-electric-pole", - "enabled": true, - "category": "crafting", - "energy": 0.5, - "order": "a[energy]-a[small-electric-pole]", - "subgroup": "energy-pipe-distribution", + "name": "express-underground-belt", + "icon_name": "icon.r.express-underground-belt", + "icon_alt_name": "icon.i.express-underground-belt", + "enabled": false, + "category": "crafting-with-fluid", + "energy": 2, + "order": "b[underground-belt]-c[express-underground-belt]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "wood", + "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 80 }, { - "name": "copper-cable", + "name": "fast-underground-belt", "type": "item", "amount": 2 + }, + { + "name": "lubricant", + "type": "fluid", + "amount": 40 } ], "products": [ { - "name": "small-electric-pole", + "name": "express-underground-belt", "type": "item", "amount": 2, "p_amount": 2 } ], - "localised_name": "Small electric pole" + "localised_name": "Express underground belt" }, { - "name": "medium-electric-pole", - "icon_name": "icon.r.medium-electric-pole", - "icon_alt_name": "icon.i.medium-electric-pole", + "name": "splitter", + "icon_name": "icon.r.splitter", + "icon_alt_name": "icon.i.splitter", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "a[energy]-b[medium-electric-pole]", - "subgroup": "energy-pipe-distribution", + "energy": 1, + "order": "c[splitter]-a[splitter]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-plate", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "iron-stick", + "name": "transport-belt", "type": "item", "amount": 4 } ], "products": [ { - "name": "medium-electric-pole", + "name": "splitter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Medium electric pole" + "localised_name": "Splitter" }, { - "name": "big-electric-pole", - "icon_name": "icon.r.big-electric-pole", - "icon_alt_name": "icon.i.big-electric-pole", + "name": "fast-splitter", + "icon_name": "icon.r.fast-splitter", + "icon_alt_name": "icon.i.fast-splitter", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "a[energy]-c[big-electric-pole]", - "subgroup": "energy-pipe-distribution", + "energy": 2, + "order": "c[splitter]-b[fast-splitter]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 5 + "amount": 10 }, { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 10 }, { - "name": "iron-stick", + "name": "splitter", "type": "item", - "amount": 8 + "amount": 1 } ], "products": [ { - "name": "big-electric-pole", + "name": "fast-splitter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Big electric pole" + "localised_name": "Fast splitter" }, { - "name": "substation", - "icon_name": "icon.r.substation", - "icon_alt_name": "icon.i.substation", + "name": "express-splitter", + "icon_name": "icon.r.express-splitter", + "icon_alt_name": "icon.i.express-splitter", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "a[energy]-d[substation]", - "subgroup": "energy-pipe-distribution", + "category": "crafting-with-fluid", + "energy": 2, + "order": "c[splitter]-c[express-splitter]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 5 + "amount": 10 }, { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", "amount": 10 }, { - "name": "advanced-circuit", + "name": "fast-splitter", "type": "item", - "amount": 5 + "amount": 1 + }, + { + "name": "lubricant", + "type": "fluid", + "amount": 80 } ], "products": [ { - "name": "substation", + "name": "express-splitter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Substation" + "localised_name": "Express splitter" }, { - "name": "sulfuric-acid", - "icon_name": "icon.r.sulfuric-acid", - "icon_alt_name": "icon.i.sulfuric-acid", + "name": "loader", + "icon_name": "icon.r.loader", + "icon_alt_name": "icon.i.loader", "enabled": false, - "category": "chemistry", + "category": "crafting", "energy": 1, - "order": "a[fluid]-f[sulfuric-acid]", - "subgroup": "fluid-recipes", + "order": "d[loader]-a[basic-loader]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "sulfur", + "name": "iron-gear-wheel", "type": "item", "amount": 5 }, { - "name": "water", - "type": "fluid", - "amount": 100 + "name": "electronic-circuit", + "type": "item", + "amount": 5 + }, + { + "name": "transport-belt", + "type": "item", + "amount": 5 + }, + { + "name": "inserter", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "sulfuric-acid", - "type": "fluid", - "amount": 50, - "p_amount": 50 + "name": "loader", + "type": "item", + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Sulfuric acid" + "localised_name": "Loader" }, { - "name": "grenade", - "icon_name": "icon.r.grenade", - "icon_alt_name": "icon.i.grenade", + "name": "fast-loader", + "icon_name": "icon.r.fast-loader", + "icon_alt_name": "icon.i.fast-loader", "enabled": false, "category": "crafting", - "energy": 8, - "order": "a[grenade]-a[normal]", - "subgroup": "capsule", + "energy": 3, + "order": "d[loader]-b[fast-loader]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", + "name": "fast-transport-belt", "type": "item", - "amount": 10 + "amount": 5 }, { - "name": "iron-plate", + "name": "loader", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "grenade", + "name": "fast-loader", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Grenade" + "localised_name": "Fast loader" }, { - "name": "cluster-grenade", - "icon_name": "icon.r.cluster-grenade", - "icon_alt_name": "icon.i.cluster-grenade", + "name": "express-loader", + "icon_name": "icon.r.express-loader", + "icon_alt_name": "icon.i.express-loader", "enabled": false, "category": "crafting", - "energy": 8, - "order": "a[grenade]-b[cluster]", - "subgroup": "capsule", + "energy": 10, + "order": "d[loader]-c[express-loader]", + "subgroup": "belt", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 5 - }, - { - "name": "explosives", + "name": "express-transport-belt", "type": "item", "amount": 5 }, { - "name": "grenade", + "name": "fast-loader", "type": "item", - "amount": 7 + "amount": 1 } ], "products": [ { - "name": "cluster-grenade", + "name": "express-loader", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Cluster grenade" + "localised_name": "Express loader" }, { - "name": "burner-mining-drill", - "icon_name": "icon.r.burner-mining-drill", - "icon_alt_name": "icon.i.burner-mining-drill", + "name": "burner-inserter", + "icon_name": "icon.r.burner-inserter", + "icon_alt_name": "icon.i.burner-inserter", "enabled": true, "category": "crafting", - "energy": 2, - "order": "a[items]-a[burner-mining-drill]", - "subgroup": "extraction-machine", + "energy": 0.5, + "order": "a[burner-inserter]", + "subgroup": "inserter", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 3 + "amount": 1 }, { "name": "iron-gear-wheel", "type": "item", - "amount": 3 - }, - { - "name": "stone-furnace", - "type": "item", "amount": 1 } ], "products": [ { - "name": "burner-mining-drill", + "name": "burner-inserter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Burner mining drill" + "localised_name": "Burner inserter" }, { - "name": "wooden-chest", - "icon_name": "icon.r.wooden-chest", - "icon_alt_name": "icon.i.wooden-chest", - "enabled": true, + "name": "inserter", + "icon_name": "icon.r.inserter", + "icon_alt_name": "icon.i.inserter", + "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[items]-a[wooden-chest]", - "subgroup": "storage", + "order": "b[inserter]", + "subgroup": "inserter", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "wood", + "name": "iron-plate", "type": "item", - "amount": 2 + "amount": 1 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 1 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "wooden-chest", + "name": "inserter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Wooden chest" + "localised_name": "Inserter" }, { - "name": "electric-mining-drill", - "icon_name": "icon.r.electric-mining-drill", - "icon_alt_name": "icon.i.electric-mining-drill", - "enabled": true, + "name": "long-handed-inserter", + "icon_name": "icon.r.long-handed-inserter", + "icon_alt_name": "icon.i.long-handed-inserter", + "enabled": false, "category": "crafting", - "energy": 2, - "order": "a[items]-b[electric-mining-drill]", - "subgroup": "extraction-machine", + "energy": 0.5, + "order": "c[long-handed-inserter]", + "subgroup": "inserter", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 10 + "amount": 1 }, { "name": "iron-gear-wheel", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "electronic-circuit", + "name": "inserter", "type": "item", - "amount": 3 + "amount": 1 } ], "products": [ { - "name": "electric-mining-drill", + "name": "long-handed-inserter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Electric mining drill" + "localised_name": "Long-handed inserter" }, { - "name": "iron-chest", - "icon_name": "icon.r.iron-chest", - "icon_alt_name": "icon.i.iron-chest", - "enabled": true, + "name": "fast-inserter", + "icon_name": "icon.r.fast-inserter", + "icon_alt_name": "icon.i.fast-inserter", + "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[items]-b[iron-chest]", - "subgroup": "storage", + "order": "d[fast-inserter]", + "subgroup": "inserter", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 8 + "amount": 2 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 2 + }, + { + "name": "inserter", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "iron-chest", + "name": "fast-inserter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Iron chest" + "localised_name": "Fast inserter" }, { - "name": "steel-chest", - "icon_name": "icon.r.steel-chest", - "icon_alt_name": "icon.i.steel-chest", + "name": "bulk-inserter", + "icon_name": "icon.r.bulk-inserter", + "icon_alt_name": "icon.i.bulk-inserter", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[items]-c[steel-chest]", - "subgroup": "storage", + "order": "f[bulk-inserter]", + "subgroup": "inserter", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 8 + "amount": 15 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 15 + }, + { + "name": "advanced-circuit", + "type": "item", + "amount": 1 + }, + { + "name": "fast-inserter", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "steel-chest", + "name": "bulk-inserter", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Steel chest" + "localised_name": "Bulk inserter" }, { - "name": "light-armor", - "icon_name": "icon.r.light-armor", - "icon_alt_name": "icon.i.light-armor", - "enabled": true, + "name": "small-electric-pole", + "icon_name": "icon.r.small-electric-pole", + "icon_alt_name": "icon.i.small-electric-pole", + "enabled": false, "category": "crafting", - "energy": 3, - "order": "a[light-armor]", - "subgroup": "armor", + "energy": 0.5, + "order": "a[energy]-a[small-electric-pole]", + "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "wood", "type": "item", - "amount": 40 + "amount": 1 + }, + { + "name": "copper-cable", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "light-armor", + "name": "small-electric-pole", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Light armor" + "localised_name": "Small electric pole" }, { - "name": "small-lamp", - "icon_name": "icon.r.small-lamp", - "icon_alt_name": "icon.i.small-lamp", + "name": "medium-electric-pole", + "icon_name": "icon.r.medium-electric-pole", + "icon_alt_name": "icon.i.medium-electric-pole", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[light]-a[small-lamp]", - "subgroup": "circuit-network", + "order": "a[energy]-b[medium-electric-pole]", + "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "copper-cable", + "name": "iron-stick", "type": "item", - "amount": 3 + "amount": 4 }, { - "name": "electronic-circuit", + "name": "copper-cable", "type": "item", - "amount": 1 + "amount": 2 } ], "products": [ { - "name": "small-lamp", + "name": "medium-electric-pole", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Lamp" + "localised_name": "Medium electric pole" }, { - "name": "basic-oil-processing", - "icon_name": "icon.r.basic-oil-processing", - "icon_alt_name": "icon.i.petroleum-gas", + "name": "big-electric-pole", + "icon_name": "icon.r.big-electric-pole", + "icon_alt_name": "icon.i.big-electric-pole", "enabled": false, - "category": "oil-processing", - "energy": 5, - "order": "a[oil-processing]-a[basic-oil-processing]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 0.5, + "order": "a[energy]-c[big-electric-pole]", + "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "crude-oil", - "type": "fluid", - "amount": 100 - } - ], - "products": [ - { - "name": "petroleum-gas", - "type": "fluid", - "amount": 45, - "p_amount": 45 - } - ], - "localised_name": "Basic oil processing" - }, - { - "name": "advanced-oil-processing", - "icon_name": "icon.r.advanced-oil-processing", - "icon_alt_name": "icon.i.heavy-oil", - "enabled": false, - "category": "oil-processing", - "energy": 5, - "order": "a[oil-processing]-b[advanced-oil-processing]", - "subgroup": "fluid-recipes", - "ingredients": [ + "name": "steel-plate", + "type": "item", + "amount": 5 + }, { - "name": "water", - "type": "fluid", - "amount": 50 + "name": "iron-stick", + "type": "item", + "amount": 8 }, { - "name": "crude-oil", - "type": "fluid", - "amount": 100 + "name": "copper-cable", + "type": "item", + "amount": 4 } ], "products": [ { - "name": "heavy-oil", - "type": "fluid", - "amount": 25, - "p_amount": 25 - }, - { - "name": "light-oil", - "type": "fluid", - "amount": 45, - "p_amount": 45 - }, - { - "name": "petroleum-gas", - "type": "fluid", - "amount": 55, - "p_amount": 55 + "name": "big-electric-pole", + "type": "item", + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Advanced oil processing" + "localised_name": "Big electric pole" }, { - "name": "coal-liquefaction", - "icon_name": "icon.r.coal-liquefaction", - "icon_alt_name": "icon.i.heavy-oil", + "name": "substation", + "icon_name": "icon.r.substation", + "icon_alt_name": "icon.i.substation", "enabled": false, - "category": "oil-processing", - "energy": 5, - "order": "a[oil-processing]-c[coal-liquefaction]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 0.5, + "order": "a[energy]-d[substation]", + "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", + "name": "steel-plate", "type": "item", "amount": 10 }, { - "name": "heavy-oil", - "type": "fluid", - "amount": 25 + "name": "copper-cable", + "type": "item", + "amount": 6 }, { - "name": "steam", - "type": "fluid", - "amount": 50 + "name": "advanced-circuit", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "heavy-oil", - "type": "fluid", - "amount": 90, - "p_amount": 65 - }, - { - "name": "light-oil", - "type": "fluid", - "amount": 20, - "p_amount": 20 - }, - { - "name": "petroleum-gas", - "type": "fluid", - "amount": 10, - "p_amount": 10 + "name": "substation", + "type": "item", + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Coal liquefaction" + "localised_name": "Substation" }, { "name": "pipe", "icon_name": "icon.r.pipe", "icon_alt_name": "icon.i.pipe", - "enabled": true, + "enabled": false, "category": "crafting", "energy": 0.5, "order": "a[pipe]-a[pipe]", "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", @@ -6683,11 +7899,20 @@ "name": "pipe-to-ground", "icon_name": "icon.r.pipe-to-ground", "icon_alt_name": "icon.i.pipe-to-ground", - "enabled": true, + "enabled": false, "category": "crafting", "energy": 0.5, "order": "a[pipe]-b[pipe-to-ground]", "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", @@ -6711,622 +7936,953 @@ "localised_name": "Pipe to ground" }, { - "name": "logistic-robot", - "icon_name": "icon.r.logistic-robot", - "icon_alt_name": "icon.i.logistic-robot", + "name": "pump", + "icon_name": "icon.r.pump", + "icon_alt_name": "icon.i.pump", + "enabled": false, + "category": "crafting", + "energy": 2, + "order": "b[pipe]-c[pump]", + "subgroup": "energy-pipe-distribution", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "steel-plate", + "type": "item", + "amount": 1 + }, + { + "name": "engine-unit", + "type": "item", + "amount": 1 + }, + { + "name": "pipe", + "type": "item", + "amount": 1 + } + ], + "products": [ + { + "name": "pump", + "type": "item", + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Pump" + }, + { + "name": "rail", + "icon_name": "icon.r.rail", + "icon_alt_name": "icon.i.rail", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[robot]-a[logistic-robot]", - "subgroup": "logistic-network", + "order": "a[rail]-a[rail]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "advanced-circuit", + "name": "stone", "type": "item", - "amount": 2 + "amount": 1 }, { - "name": "flying-robot-frame", + "name": "steel-plate", + "type": "item", + "amount": 1 + }, + { + "name": "iron-stick", "type": "item", "amount": 1 } ], "products": [ { - "name": "logistic-robot", + "name": "rail", + "type": "item", + "amount": 2, + "p_amount": 2 + } + ], + "localised_name": "Rail" + }, + { + "name": "train-stop", + "icon_name": "icon.r.train-stop", + "icon_alt_name": "icon.i.train-stop", + "enabled": false, + "category": "crafting", + "energy": 0.5, + "order": "b[train-automation]-a[train-stop]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "iron-plate", + "type": "item", + "amount": 6 + }, + { + "name": "steel-plate", + "type": "item", + "amount": 3 + }, + { + "name": "iron-stick", + "type": "item", + "amount": 6 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 5 + } + ], + "products": [ + { + "name": "train-stop", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Logistic robot" + "localised_name": "Train stop" }, { - "name": "construction-robot", - "icon_name": "icon.r.construction-robot", - "icon_alt_name": "icon.i.construction-robot", + "name": "rail-signal", + "icon_name": "icon.r.rail-signal", + "icon_alt_name": "icon.i.rail-signal", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[robot]-b[construction-robot]", - "subgroup": "logistic-network", + "order": "b[train-automation]-b[rail-signal]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ + { + "name": "iron-plate", + "type": "item", + "amount": 5 + }, { "name": "electronic-circuit", "type": "item", - "amount": 2 + "amount": 1 + } + ], + "products": [ + { + "name": "rail-signal", + "type": "item", + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Rail signal" + }, + { + "name": "rail-chain-signal", + "icon_name": "icon.r.rail-chain-signal", + "icon_alt_name": "icon.i.rail-chain-signal", + "enabled": false, + "category": "crafting", + "energy": 0.5, + "order": "b[train-automation]-c[rail-chain-signal]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "iron-plate", + "type": "item", + "amount": 5 }, { - "name": "flying-robot-frame", + "name": "electronic-circuit", "type": "item", "amount": 1 } ], "products": [ { - "name": "construction-robot", + "name": "rail-chain-signal", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Construction robot" + "localised_name": "Rail chain signal" }, { - "name": "energy-shield-equipment", - "icon_name": "icon.r.energy-shield-equipment", - "icon_alt_name": "icon.i.energy-shield-equipment", + "name": "locomotive", + "icon_name": "icon.r.locomotive", + "icon_alt_name": "icon.i.locomotive", "enabled": false, "category": "crafting", - "energy": 10, - "order": "a[shield]-a[energy-shield-equipment]", - "subgroup": "military-equipment", + "energy": 4, + "order": "c[rolling-stock]-a[locomotive]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", + "amount": 30 + }, + { + "name": "electronic-circuit", + "type": "item", "amount": 10 }, { - "name": "advanced-circuit", + "name": "engine-unit", "type": "item", - "amount": 5 + "amount": 20 } ], "products": [ { - "name": "energy-shield-equipment", + "name": "locomotive", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Energy shield" + "localised_name": "Locomotive" }, { - "name": "energy-shield-mk2-equipment", - "icon_name": "icon.r.energy-shield-mk2-equipment", - "icon_alt_name": "icon.i.energy-shield-mk2-equipment", + "name": "cargo-wagon", + "icon_name": "icon.r.cargo-wagon", + "icon_alt_name": "icon.i.cargo-wagon", "enabled": false, "category": "crafting", - "energy": 10, - "order": "a[shield]-b[energy-shield-equipment-mk2]", - "subgroup": "military-equipment", + "energy": 1, + "order": "c[rolling-stock]-b[cargo-wagon]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", + "name": "iron-plate", "type": "item", - "amount": 5 + "amount": 20 }, { - "name": "low-density-structure", + "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 20 }, { - "name": "energy-shield-equipment", + "name": "iron-gear-wheel", "type": "item", "amount": 10 } ], "products": [ { - "name": "energy-shield-mk2-equipment", + "name": "cargo-wagon", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Energy shield MK2" + "localised_name": "Cargo wagon" }, { - "name": "speed-module", - "icon_name": "icon.r.speed-module", - "icon_alt_name": "icon.i.speed-module", + "name": "fluid-wagon", + "icon_name": "icon.r.fluid-wagon", + "icon_alt_name": "icon.i.fluid-wagon", "enabled": false, "category": "crafting", - "energy": 15, - "order": "a[speed]-a[speed-module-1]", - "subgroup": "module", + "energy": 1.5, + "order": "c[rolling-stock]-c[fluid-wagon]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 16 }, { - "name": "advanced-circuit", + "name": "iron-gear-wheel", "type": "item", - "amount": 5 + "amount": 10 + }, + { + "name": "storage-tank", + "type": "item", + "amount": 1 + }, + { + "name": "pipe", + "type": "item", + "amount": 8 } ], "products": [ { - "name": "speed-module", + "name": "fluid-wagon", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Speed module" + "localised_name": "Fluid wagon" }, { - "name": "speed-module-2", - "icon_name": "icon.r.speed-module-2", - "icon_alt_name": "icon.i.speed-module-2", + "name": "artillery-wagon", + "icon_name": "icon.r.artillery-wagon", + "icon_alt_name": "icon.i.artillery-wagon", "enabled": false, "category": "crafting", - "energy": 30, - "order": "a[speed]-b[speed-module-2]", - "subgroup": "module", + "energy": 4, + "order": "c[rolling-stock]-d[artillery-wagon]", + "subgroup": "train-transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ + { + "name": "steel-plate", + "type": "item", + "amount": 40 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 10 + }, { "name": "advanced-circuit", "type": "item", - "amount": 5 + "amount": 20 }, { - "name": "processing-unit", + "name": "engine-unit", "type": "item", - "amount": 5 + "amount": 64 }, { - "name": "speed-module", + "name": "pipe", "type": "item", - "amount": 4 + "amount": 16 } ], "products": [ { - "name": "speed-module-2", + "name": "artillery-wagon", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Speed module 2" + "localised_name": "Artillery wagon" }, { - "name": "speed-module-3", - "icon_name": "icon.r.speed-module-3", - "icon_alt_name": "icon.i.speed-module-3", + "name": "car", + "icon_name": "icon.r.car", + "icon_alt_name": "icon.i.car", "enabled": false, "category": "crafting", - "energy": 60, - "order": "a[speed]-c[speed-module-3]", - "subgroup": "module", + "energy": 2, + "order": "b[personal-transport]-a[car]", + "subgroup": "transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "advanced-circuit", + "name": "iron-plate", "type": "item", - "amount": 5 + "amount": 20 }, { - "name": "processing-unit", + "name": "steel-plate", "type": "item", "amount": 5 }, { - "name": "speed-module-2", + "name": "engine-unit", "type": "item", - "amount": 5 + "amount": 8 } ], "products": [ { - "name": "speed-module-3", + "name": "car", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Speed module 3" + "localised_name": "Car" }, { - "name": "stone-brick", - "icon_name": "icon.r.stone-brick", - "icon_alt_name": "icon.i.stone-brick", - "enabled": true, - "category": "smelting", - "energy": 3.2, - "order": "a[stone-brick]", - "subgroup": "terrain", + "name": "tank", + "icon_name": "icon.r.tank", + "icon_alt_name": "icon.i.tank", + "enabled": false, + "category": "crafting", + "energy": 5, + "order": "b[personal-transport]-b[tank]", + "subgroup": "transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "stone", + "name": "steel-plate", "type": "item", - "amount": 2 - } - ], - "products": [ + "amount": 50 + }, { - "name": "stone-brick", + "name": "iron-gear-wheel", "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Stone brick" - }, - { - "name": "stone-furnace", - "icon_name": "icon.r.stone-furnace", - "icon_alt_name": "icon.i.stone-furnace", - "enabled": true, - "category": "crafting", - "energy": 0.5, - "order": "a[stone-furnace]", - "subgroup": "smelting-machine", - "ingredients": [ + "amount": 15 + }, { - "name": "stone", + "name": "advanced-circuit", "type": "item", - "amount": 5 + "amount": 10 + }, + { + "name": "engine-unit", + "type": "item", + "amount": 32 } ], "products": [ { - "name": "stone-furnace", + "name": "tank", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Stone furnace" + "localised_name": "Tank" }, { - "name": "stone-wall", - "icon_name": "icon.r.stone-wall", - "icon_alt_name": "icon.i.stone-wall", + "name": "spidertron", + "icon_name": "icon.r.spidertron", + "icon_alt_name": "icon.i.spidertron", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "a[stone-wall]-a[stone-wall]", - "subgroup": "defensive-structure", + "energy": 10, + "order": "b[personal-transport]-c[spidertron]-a[spider]", + "subgroup": "transport", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "stone-brick", + "name": "raw-fish", "type": "item", - "amount": 5 + "amount": 1 + }, + { + "name": "processing-unit", + "type": "item", + "amount": 16 + }, + { + "name": "low-density-structure", + "type": "item", + "amount": 150 + }, + { + "name": "efficiency-module-3", + "type": "item", + "amount": 2 + }, + { + "name": "rocket-launcher", + "type": "item", + "amount": 4 + }, + { + "name": "fission-reactor-equipment", + "type": "item", + "amount": 2 + }, + { + "name": "exoskeleton-equipment", + "type": "item", + "amount": 4 + }, + { + "name": "radar", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "stone-wall", + "name": "spidertron", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Wall" + "localised_name": "Spidertron" }, { - "name": "rail", - "icon_name": "icon.r.rail", - "icon_alt_name": "icon.i.rail", + "name": "logistic-robot", + "icon_name": "icon.r.logistic-robot", + "icon_alt_name": "icon.i.logistic-robot", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[train-system]-a[rail]", - "subgroup": "train-transport", + "order": "a[robot]-a[logistic-robot]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "stone", - "type": "item", - "amount": 1 - }, - { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "iron-stick", + "name": "flying-robot-frame", "type": "item", "amount": 1 } ], "products": [ { - "name": "rail", + "name": "logistic-robot", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Rail" + "localised_name": "Logistic robot" }, { - "name": "train-stop", - "icon_name": "icon.r.train-stop", - "icon_alt_name": "icon.i.train-stop", + "name": "construction-robot", + "icon_name": "icon.r.construction-robot", + "icon_alt_name": "icon.i.construction-robot", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[train-system]-c[train-stop]", - "subgroup": "train-transport", + "order": "a[robot]-b[construction-robot]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 6 - }, - { - "name": "steel-plate", - "type": "item", - "amount": 3 - }, - { - "name": "iron-stick", + "name": "electronic-circuit", "type": "item", - "amount": 6 + "amount": 2 }, { - "name": "electronic-circuit", + "name": "flying-robot-frame", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "train-stop", + "name": "construction-robot", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Train stop" + "localised_name": "Construction robot" }, { - "name": "rail-signal", - "icon_name": "icon.r.rail-signal", - "icon_alt_name": "icon.i.rail-signal", + "name": "active-provider-chest", + "icon_name": "icon.r.active-provider-chest", + "icon_alt_name": "icon.i.active-provider-chest", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[train-system]-d[rail-signal]", - "subgroup": "train-transport", + "order": "b[storage]-c[active-provider-chest]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 3 }, { - "name": "electronic-circuit", + "name": "advanced-circuit", + "type": "item", + "amount": 1 + }, + { + "name": "steel-chest", "type": "item", "amount": 1 } ], "products": [ { - "name": "rail-signal", + "name": "active-provider-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rail signal" + "localised_name": "Active provider chest" }, { - "name": "rail-chain-signal", - "icon_name": "icon.r.rail-chain-signal", - "icon_alt_name": "icon.i.rail-chain-signal", + "name": "passive-provider-chest", + "icon_name": "icon.r.passive-provider-chest", + "icon_alt_name": "icon.i.passive-provider-chest", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[train-system]-e[rail-signal-chain]", - "subgroup": "train-transport", + "order": "b[storage]-c[passive-provider-chest]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 3 }, { - "name": "electronic-circuit", + "name": "advanced-circuit", + "type": "item", + "amount": 1 + }, + { + "name": "steel-chest", "type": "item", "amount": 1 } ], "products": [ { - "name": "rail-chain-signal", + "name": "passive-provider-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rail chain signal" + "localised_name": "Passive provider chest" }, { - "name": "locomotive", - "icon_name": "icon.r.locomotive", - "icon_alt_name": "icon.i.locomotive", + "name": "storage-chest", + "icon_name": "icon.r.storage-chest", + "icon_alt_name": "icon.i.storage-chest", "enabled": false, "category": "crafting", - "energy": 4, - "order": "a[train-system]-f[locomotive]", - "subgroup": "train-transport", + "energy": 0.5, + "order": "b[storage]-c[storage-chest]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", - "amount": 30 + "amount": 3 }, { - "name": "electronic-circuit", + "name": "advanced-circuit", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "engine-unit", + "name": "steel-chest", "type": "item", - "amount": 20 + "amount": 1 } ], "products": [ { - "name": "locomotive", + "name": "storage-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Locomotive" + "localised_name": "Storage chest" }, { - "name": "cargo-wagon", - "icon_name": "icon.r.cargo-wagon", - "icon_alt_name": "icon.i.cargo-wagon", + "name": "buffer-chest", + "icon_name": "icon.r.buffer-chest", + "icon_alt_name": "icon.i.buffer-chest", "enabled": false, "category": "crafting", - "energy": 1, - "order": "a[train-system]-g[cargo-wagon]", - "subgroup": "train-transport", + "energy": 0.5, + "order": "b[storage]-d[buffer-chest]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "electronic-circuit", "type": "item", - "amount": 20 + "amount": 3 }, { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", - "amount": 20 + "amount": 1 }, { - "name": "iron-gear-wheel", + "name": "steel-chest", "type": "item", - "amount": 10 + "amount": 1 } ], "products": [ { - "name": "cargo-wagon", + "name": "buffer-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Cargo wagon" + "localised_name": "Buffer chest" }, { - "name": "fluid-wagon", - "icon_name": "icon.r.fluid-wagon", - "icon_alt_name": "icon.i.fluid-wagon", + "name": "requester-chest", + "icon_name": "icon.r.requester-chest", + "icon_alt_name": "icon.i.requester-chest", "enabled": false, "category": "crafting", - "energy": 1.5, - "order": "a[train-system]-h[fluid-wagon]", - "subgroup": "train-transport", + "energy": 0.5, + "order": "b[storage]-e[requester-chest]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 16 - }, - { - "name": "iron-gear-wheel", + "name": "electronic-circuit", "type": "item", - "amount": 10 + "amount": 3 }, { - "name": "storage-tank", + "name": "advanced-circuit", "type": "item", "amount": 1 }, { - "name": "pipe", + "name": "steel-chest", "type": "item", - "amount": 8 + "amount": 1 } ], "products": [ { - "name": "fluid-wagon", + "name": "requester-chest", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fluid wagon" + "localised_name": "Requester chest" }, { - "name": "artillery-wagon", - "icon_name": "icon.r.artillery-wagon", - "icon_alt_name": "icon.i.artillery-wagon", + "name": "roboport", + "icon_name": "icon.r.roboport", + "icon_alt_name": "icon.i.roboport", "enabled": false, "category": "crafting", - "energy": 4, - "order": "a[train-system]-i[artillery-wagon]", - "subgroup": "train-transport", + "energy": 5, + "order": "c[signal]-a[roboport]", + "subgroup": "logistic-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 40 + "amount": 45 }, { "name": "iron-gear-wheel", "type": "item", - "amount": 10 + "amount": 45 }, { "name": "advanced-circuit", "type": "item", - "amount": 20 - }, - { - "name": "engine-unit", - "type": "item", - "amount": 64 - }, - { - "name": "pipe", - "type": "item", - "amount": 16 + "amount": 45 } ], "products": [ { - "name": "artillery-wagon", + "name": "roboport", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Artillery wagon" + "localised_name": "Roboport" }, { - "name": "transport-belt", - "icon_name": "icon.r.transport-belt", - "icon_alt_name": "icon.i.transport-belt", - "enabled": true, + "name": "small-lamp", + "icon_name": "icon.r.small-lamp", + "icon_alt_name": "icon.i.small-lamp", + "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[transport-belt]-a[transport-belt]", - "subgroup": "belt", + "order": "a[light]-a[small-lamp]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", @@ -7334,329 +8890,355 @@ "amount": 1 }, { - "name": "iron-gear-wheel", + "name": "copper-cable", + "type": "item", + "amount": 3 + }, + { + "name": "electronic-circuit", "type": "item", "amount": 1 } ], "products": [ { - "name": "transport-belt", + "name": "small-lamp", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Transport belt" + "localised_name": "Lamp" }, { - "name": "fast-transport-belt", - "icon_name": "icon.r.fast-transport-belt", - "icon_alt_name": "icon.i.fast-transport-belt", + "name": "arithmetic-combinator", + "icon_name": "icon.r.arithmetic-combinator", + "icon_alt_name": "icon.i.arithmetic-combinator", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[transport-belt]-b[fast-transport-belt]", - "subgroup": "belt", + "order": "c[combinators]-a[arithmetic-combinator]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "copper-cable", "type": "item", "amount": 5 }, { - "name": "transport-belt", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "fast-transport-belt", + "name": "arithmetic-combinator", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fast transport belt" + "localised_name": "Arithmetic combinator" }, { - "name": "express-transport-belt", - "icon_name": "icon.r.express-transport-belt", - "icon_alt_name": "icon.i.express-transport-belt", + "name": "decider-combinator", + "icon_name": "icon.r.decider-combinator", + "icon_alt_name": "icon.i.decider-combinator", "enabled": false, - "category": "crafting-with-fluid", + "category": "crafting", "energy": 0.5, - "order": "a[transport-belt]-c[express-transport-belt]", - "subgroup": "belt", + "order": "c[combinators]-b[decider-combinator]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "copper-cable", "type": "item", - "amount": 10 + "amount": 5 }, { - "name": "fast-transport-belt", + "name": "electronic-circuit", "type": "item", - "amount": 1 - }, - { - "name": "lubricant", - "type": "fluid", - "amount": 20 + "amount": 5 } ], "products": [ { - "name": "express-transport-belt", + "name": "decider-combinator", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Express transport belt" + "localised_name": "Decider combinator" }, { - "name": "gate", - "icon_name": "icon.r.gate", - "icon_alt_name": "icon.i.gate", + "name": "selector-combinator", + "icon_name": "icon.r.selector-combinator", + "icon_alt_name": "icon.i.selector-combinator", "enabled": false, "category": "crafting", "energy": 0.5, - "order": "a[wall]-b[gate]", - "subgroup": "defensive-structure", + "order": "c[combinators]-c[selector-combinator]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 2 - }, - { - "name": "electronic-circuit", + "name": "advanced-circuit", "type": "item", "amount": 2 }, { - "name": "stone-wall", + "name": "decider-combinator", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "gate", + "name": "selector-combinator", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Gate" + "localised_name": "Selector combinator" }, { - "name": "personal-laser-defense-equipment", - "icon_name": "icon.r.personal-laser-defense-equipment", - "icon_alt_name": "icon.i.personal-laser-defense-equipment", + "name": "constant-combinator", + "icon_name": "icon.r.constant-combinator", + "icon_alt_name": "icon.i.constant-combinator", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[active-defense]-a[personal-laser-defense-equipment]", - "subgroup": "military-equipment", + "energy": 0.5, + "order": "c[combinators]-d[constant-combinator]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", - "type": "item", - "amount": 20 - }, - { - "name": "low-density-structure", + "name": "copper-cable", "type": "item", "amount": 5 }, { - "name": "laser-turret", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 2 } ], "products": [ { - "name": "personal-laser-defense-equipment", + "name": "constant-combinator", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Personal laser defense" + "localised_name": "Constant combinator" }, { - "name": "discharge-defense-equipment", - "icon_name": "icon.r.discharge-defense-equipment", - "icon_alt_name": "icon.i.discharge-defense-equipment", + "name": "power-switch", + "icon_name": "icon.r.power-switch", + "icon_alt_name": "icon.i.power-switch", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[active-defense]-b[discharge-defense-equipment]-a[equipment]", - "subgroup": "military-equipment", + "energy": 2, + "order": "d[other]-a[power-switch]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 20 + "amount": 5 }, { - "name": "processing-unit", + "name": "copper-cable", "type": "item", "amount": 5 }, - { - "name": "laser-turret", - "type": "item", - "amount": 10 - } - ], - "products": [ - { - "name": "discharge-defense-equipment", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Discharge defense" - }, - { - "name": "discharge-defense-remote", - "icon_name": "icon.r.discharge-defense-remote", - "icon_alt_name": "icon.i.discharge-defense-remote", - "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "b[active-defense]-b[discharge-defense-equipment]-b[remote]", - "subgroup": "military-equipment", - "ingredients": [ { "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 2 } ], "products": [ { - "name": "discharge-defense-remote", + "name": "power-switch", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Discharge defense remote" + "localised_name": "Power switch" }, { - "name": "assembling-machine-2", - "icon_name": "icon.r.assembling-machine-2", - "icon_alt_name": "icon.i.assembling-machine-2", + "name": "programmable-speaker", + "icon_name": "icon.r.programmable-speaker", + "icon_alt_name": "icon.i.programmable-speaker", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[assembling-machine-2]", - "subgroup": "production-machine", + "energy": 2, + "order": "d[other]-b[programmable-speaker]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 2 + "amount": 3 }, { - "name": "iron-gear-wheel", + "name": "iron-stick", "type": "item", - "amount": 5 + "amount": 4 }, { - "name": "electronic-circuit", + "name": "copper-cable", "type": "item", - "amount": 3 + "amount": 5 }, { - "name": "assembling-machine-1", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 4 } ], "products": [ { - "name": "assembling-machine-2", + "name": "programmable-speaker", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Assembling machine 2" + "localised_name": "Programmable speaker" }, { - "name": "battery-equipment", - "icon_name": "icon.r.battery-equipment", - "icon_alt_name": "icon.i.battery-equipment", + "name": "display-panel", + "icon_name": "icon.r.display-panel", + "icon_alt_name": "icon.i.display-panel", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[battery]-a[battery-equipment]", - "subgroup": "equipment", + "energy": 0.5, + "order": "s[display-panel]", + "subgroup": "circuit-network", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "battery", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "battery-equipment", + "name": "display-panel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Personal battery" + "localised_name": "Display panel" }, { - "name": "battery-mk2-equipment", - "icon_name": "icon.r.battery-mk2-equipment", - "icon_alt_name": "icon.i.battery-mk2-equipment", - "enabled": false, - "category": "crafting", - "energy": 10, - "order": "b[battery]-b[battery-equipment-mk2]", - "subgroup": "equipment", + "name": "stone-brick", + "icon_name": "icon.r.stone-brick", + "icon_alt_name": "icon.i.stone-brick", + "enabled": true, + "category": "smelting", + "energy": 3.2, + "order": "a[stone-brick]", + "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", - "type": "item", - "amount": 15 - }, - { - "name": "low-density-structure", - "type": "item", - "amount": 5 - }, - { - "name": "battery-equipment", + "name": "stone", "type": "item", - "amount": 10 + "amount": 2 } ], "products": [ { - "name": "battery-mk2-equipment", + "name": "stone-brick", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Personal battery MK2" + "localised_name": "Stone brick" }, { "name": "concrete", @@ -7667,6 +9249,15 @@ "energy": 10, "order": "b[concrete]-a[plain]", "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-ore", @@ -7703,6 +9294,15 @@ "energy": 0.25, "order": "b[concrete]-b[hazard]", "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "concrete", @@ -7729,6 +9329,15 @@ "energy": 15, "order": "b[concrete]-c[refined]", "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", @@ -7770,6 +9379,15 @@ "energy": 0.25, "order": "b[concrete]-d[refined-hazard]", "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "refined-concrete", @@ -7788,453 +9406,413 @@ "localised_name": "Refined hazard concrete" }, { - "name": "fill-crude-oil-barrel", - "icon_name": "icon.r.fill-crude-oil-barrel", - "icon_alt_name": "icon.i.crude-oil-barrel", - "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-crude-oil-barrel]", - "subgroup": "fill-barrel", - "ingredients": [ - { - "name": "empty-barrel", - "type": "item", - "amount": 1 - }, - { - "name": "crude-oil", - "type": "fluid", - "amount": 50 - } - ], - "products": [ - { - "name": "crude-oil-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Fill Crude oil barrel" - }, - { - "name": "fill-heavy-oil-barrel", - "icon_name": "icon.r.fill-heavy-oil-barrel", - "icon_alt_name": "icon.i.heavy-oil-barrel", - "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-heavy-oil-barrel]", - "subgroup": "fill-barrel", - "ingredients": [ - { - "name": "empty-barrel", - "type": "item", - "amount": 1 - }, - { - "name": "heavy-oil", - "type": "fluid", - "amount": 50 - } - ], - "products": [ - { - "name": "heavy-oil-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Fill Heavy oil barrel" - }, - { - "name": "fill-light-oil-barrel", - "icon_name": "icon.r.fill-light-oil-barrel", - "icon_alt_name": "icon.i.light-oil-barrel", - "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-light-oil-barrel]", - "subgroup": "fill-barrel", - "ingredients": [ - { - "name": "empty-barrel", - "type": "item", - "amount": 1 - }, - { - "name": "light-oil", - "type": "fluid", - "amount": 50 - } - ], - "products": [ - { - "name": "light-oil-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Fill Light oil barrel" - }, - { - "name": "fill-lubricant-barrel", - "icon_name": "icon.r.fill-lubricant-barrel", - "icon_alt_name": "icon.i.lubricant-barrel", + "name": "landfill", + "icon_name": "icon.r.landfill", + "icon_alt_name": "icon.i.landfill", "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-lubricant-barrel]", - "subgroup": "fill-barrel", + "category": "crafting", + "energy": 0.5, + "order": "c[landfill]-a[dirt]", + "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "empty-barrel", + "name": "stone", "type": "item", - "amount": 1 - }, - { - "name": "lubricant", - "type": "fluid", "amount": 50 } ], "products": [ { - "name": "lubricant-barrel", + "name": "landfill", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fill Lubricant barrel" + "localised_name": "Landfill" }, { - "name": "fill-petroleum-gas-barrel", - "icon_name": "icon.r.fill-petroleum-gas-barrel", - "icon_alt_name": "icon.i.petroleum-gas-barrel", + "name": "cliff-explosives", + "icon_name": "icon.r.cliff-explosives", + "icon_alt_name": "icon.i.cliff-explosives", "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-petroleum-gas-barrel]", - "subgroup": "fill-barrel", + "category": "crafting", + "energy": 8, + "order": "d[cliff-explosives]", + "subgroup": "terrain", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "empty-barrel", + "name": "explosives", "type": "item", - "amount": 1 + "amount": 10 }, { - "name": "petroleum-gas", - "type": "fluid", - "amount": 50 - } - ], - "products": [ - { - "name": "petroleum-gas-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Fill Petroleum gas barrel" - }, - { - "name": "fill-sulfuric-acid-barrel", - "icon_name": "icon.r.fill-sulfuric-acid-barrel", - "icon_alt_name": "icon.i.sulfuric-acid-barrel", - "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-sulfuric-acid-barrel]", - "subgroup": "fill-barrel", - "ingredients": [ - { - "name": "empty-barrel", + "name": "barrel", "type": "item", "amount": 1 }, { - "name": "sulfuric-acid", - "type": "fluid", - "amount": 50 - } - ], - "products": [ - { - "name": "sulfuric-acid-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Fill Sulfuric acid barrel" - }, - { - "name": "fill-water-barrel", - "icon_name": "icon.r.fill-water-barrel", - "icon_alt_name": "icon.i.water-barrel", - "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "b[fill-water-barrel]", - "subgroup": "fill-barrel", - "ingredients": [ - { - "name": "empty-barrel", + "name": "grenade", "type": "item", - "amount": 1 - }, - { - "name": "water", - "type": "fluid", - "amount": 50 + "amount": 1 } ], "products": [ { - "name": "water-barrel", + "name": "cliff-explosives", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fill Water barrel" + "localised_name": "Cliff explosives" }, { - "name": "heavy-oil-cracking", - "icon_name": "icon.r.heavy-oil-cracking", - "icon_alt_name": "icon.i.light-oil", + "name": "repair-pack", + "icon_name": "icon.r.repair-pack", + "icon_alt_name": "icon.i.repair-pack", "enabled": false, - "category": "chemistry", - "energy": 2, - "order": "b[fluid-chemistry]-a[heavy-oil-cracking]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 0.5, + "order": "b[repair]-a[repair-pack]", + "subgroup": "tool", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "water", - "type": "fluid", - "amount": 30 + "name": "iron-gear-wheel", + "type": "item", + "amount": 2 }, { - "name": "heavy-oil", - "type": "fluid", - "amount": 40 + "name": "electronic-circuit", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "light-oil", - "type": "fluid", - "amount": 30, - "p_amount": 30 + "name": "repair-pack", + "type": "item", + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Heavy oil cracking to light oil" + "localised_name": "Repair pack" }, { - "name": "light-oil-cracking", - "icon_name": "icon.r.light-oil-cracking", - "icon_alt_name": "icon.i.petroleum-gas", + "name": "boiler", + "icon_name": "icon.r.boiler", + "icon_alt_name": "icon.i.boiler", "enabled": false, - "category": "chemistry", - "energy": 2, - "order": "b[fluid-chemistry]-b[light-oil-cracking]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 0.5, + "order": "b[steam-power]-a[boiler]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "water", - "type": "fluid", - "amount": 30 + "name": "pipe", + "type": "item", + "amount": 4 }, { - "name": "light-oil", - "type": "fluid", - "amount": 30 + "name": "stone-furnace", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "petroleum-gas", - "type": "fluid", - "amount": 20, - "p_amount": 20 + "name": "boiler", + "type": "item", + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Light oil cracking to petroleum gas" + "localised_name": "Boiler" }, { - "name": "solid-fuel-from-light-oil", - "icon_name": "icon.r.solid-fuel-from-light-oil", - "icon_alt_name": "icon.i.solid-fuel", + "name": "steam-engine", + "icon_name": "icon.r.steam-engine", + "icon_alt_name": "icon.i.steam-engine", "enabled": false, - "category": "chemistry", - "energy": 2, - "order": "b[fluid-chemistry]-c[solid-fuel-from-light-oil]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 0.5, + "order": "b[steam-power]-b[steam-engine]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "light-oil", - "type": "fluid", + "name": "iron-plate", + "type": "item", "amount": 10 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 8 + }, + { + "name": "pipe", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "solid-fuel", + "name": "steam-engine", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Solid fuel" + "localised_name": "Steam engine" }, { - "name": "solid-fuel-from-petroleum-gas", - "icon_name": "icon.r.solid-fuel-from-petroleum-gas", - "icon_alt_name": "icon.i.solid-fuel", + "name": "solar-panel", + "icon_name": "icon.r.solar-panel", + "icon_alt_name": "icon.i.solar-panel", "enabled": false, - "category": "chemistry", - "energy": 2, - "order": "b[fluid-chemistry]-d[solid-fuel-from-petroleum-gas]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 10, + "order": "d[solar-panel]-a[solar-panel]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "petroleum-gas", - "type": "fluid", - "amount": 20 + "name": "copper-plate", + "type": "item", + "amount": 5 + }, + { + "name": "steel-plate", + "type": "item", + "amount": 5 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 15 } ], "products": [ { - "name": "solid-fuel", + "name": "solar-panel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Solid fuel" + "localised_name": "Solar panel" }, { - "name": "solid-fuel-from-heavy-oil", - "icon_name": "icon.r.solid-fuel-from-heavy-oil", - "icon_alt_name": "icon.i.solid-fuel", + "name": "accumulator", + "icon_name": "icon.r.accumulator", + "icon_alt_name": "icon.i.accumulator", "enabled": false, - "category": "chemistry", - "energy": 2, - "order": "b[fluid-chemistry]-e[solid-fuel-from-heavy-oil]", - "subgroup": "fluid-recipes", + "category": "crafting", + "energy": 10, + "order": "e[accumulator]-a[accumulator]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "heavy-oil", - "type": "fluid", - "amount": 20 + "name": "iron-plate", + "type": "item", + "amount": 2 + }, + { + "name": "battery", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "solid-fuel", + "name": "accumulator", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Solid fuel" + "localised_name": "Accumulator" }, { - "name": "storage-tank", - "icon_name": "icon.r.storage-tank", - "icon_alt_name": "icon.i.storage-tank", + "name": "nuclear-reactor", + "icon_name": "icon.r.nuclear-reactor", + "icon_alt_name": "icon.i.nuclear-reactor", "enabled": false, "category": "crafting", - "energy": 3, - "order": "b[fluid]-a[storage-tank]", - "subgroup": "storage", + "energy": 8, + "order": "f[nuclear-energy]-a[reactor]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "copper-plate", "type": "item", - "amount": 20 + "amount": 500 }, { "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 500 + }, + { + "name": "advanced-circuit", + "type": "item", + "amount": 500 + }, + { + "name": "concrete", + "type": "item", + "amount": 500 } ], "products": [ { - "name": "storage-tank", + "name": "nuclear-reactor", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Storage tank" + "localised_name": "Nuclear reactor" }, { - "name": "offshore-pump", - "icon_name": "icon.r.offshore-pump", - "icon_alt_name": "icon.i.offshore-pump", - "enabled": true, + "name": "heat-pipe", + "icon_name": "icon.r.heat-pipe", + "icon_alt_name": "icon.i.heat-pipe", + "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[fluids]-a[offshore-pump]", - "subgroup": "extraction-machine", + "energy": 1, + "order": "f[nuclear-energy]-b[heat-pipe]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", - "type": "item", - "amount": 1 - }, - { - "name": "electronic-circuit", + "name": "copper-plate", "type": "item", - "amount": 2 + "amount": 20 }, { - "name": "pipe", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 10 } ], "products": [ { - "name": "offshore-pump", + "name": "heat-pipe", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Offshore pump" + "localised_name": "Heat pipe" }, { - "name": "pumpjack", - "icon_name": "icon.r.pumpjack", - "icon_alt_name": "icon.i.pumpjack", + "name": "heat-exchanger", + "icon_name": "icon.r.heat-exchanger", + "icon_alt_name": "icon.i.heat-exchanger", "enabled": false, "category": "crafting", - "energy": 5, - "order": "b[fluids]-b[pumpjack]", - "subgroup": "extraction-machine", + "energy": 3, + "order": "f[nuclear-energy]-c[heat-exchanger]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 5 - }, - { - "name": "iron-gear-wheel", + "name": "copper-plate", "type": "item", - "amount": 10 + "amount": 100 }, { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 10 }, { "name": "pipe", @@ -8244,1362 +9822,1737 @@ ], "products": [ { - "name": "pumpjack", + "name": "heat-exchanger", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Pumpjack" + "localised_name": "Heat exchanger" }, { - "name": "heavy-armor", - "icon_name": "icon.r.heavy-armor", - "icon_alt_name": "icon.i.heavy-armor", + "name": "steam-turbine", + "icon_name": "icon.r.steam-turbine", + "icon_alt_name": "icon.i.steam-turbine", "enabled": false, "category": "crafting", - "energy": 8, - "order": "b[heavy-armor]", - "subgroup": "armor", + "energy": 3, + "order": "f[nuclear-energy]-d[steam-turbine]", + "subgroup": "energy", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "copper-plate", "type": "item", - "amount": 100 + "amount": 50 }, { - "name": "steel-plate", + "name": "iron-gear-wheel", "type": "item", "amount": 50 + }, + { + "name": "pipe", + "type": "item", + "amount": 20 } ], "products": [ { - "name": "heavy-armor", + "name": "steam-turbine", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Heavy armor" + "localised_name": "Steam turbine" }, { - "name": "inserter", - "icon_name": "icon.r.inserter", - "icon_alt_name": "icon.i.inserter", + "name": "burner-mining-drill", + "icon_name": "icon.r.burner-mining-drill", + "icon_alt_name": "icon.i.burner-mining-drill", "enabled": true, "category": "crafting", - "energy": 0.5, - "order": "b[inserter]", - "subgroup": "inserter", + "energy": 2, + "order": "a[items]-a[burner-mining-drill]", + "subgroup": "extraction-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 3 }, { "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 3 }, { - "name": "electronic-circuit", + "name": "stone-furnace", "type": "item", "amount": 1 } ], "products": [ { - "name": "inserter", + "name": "burner-mining-drill", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Inserter" + "localised_name": "Burner mining drill" }, { - "name": "iron-plate", - "icon_name": "icon.r.iron-plate", - "icon_alt_name": "icon.i.iron-plate", - "enabled": true, - "category": "smelting", - "energy": 3.2, - "order": "b[iron-plate]", - "subgroup": "raw-material", + "name": "electric-mining-drill", + "icon_name": "icon.r.electric-mining-drill", + "icon_alt_name": "icon.i.electric-mining-drill", + "enabled": false, + "category": "crafting", + "energy": 2, + "order": "a[items]-b[electric-mining-drill]", + "subgroup": "extraction-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-ore", + "name": "iron-plate", "type": "item", - "amount": 1 - } - ], - "products": [ + "amount": 10 + }, { - "name": "iron-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 1, - "p_amount": 1 - } - ], - "localised_name": "Iron plate" - }, - { - "name": "iron-stick", - "icon_name": "icon.r.iron-stick", - "icon_alt_name": "icon.i.iron-stick", - "enabled": true, - "category": "crafting", - "energy": 0.5, - "order": "b[iron-stick]", - "subgroup": "intermediate-product", - "ingredients": [ + "amount": 5 + }, { - "name": "iron-plate", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 3 } ], "products": [ { - "name": "iron-stick", + "name": "electric-mining-drill", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Iron stick" + "localised_name": "Electric mining drill" }, { - "name": "logistic-science-pack", - "icon_name": "icon.r.logistic-science-pack", - "icon_alt_name": "icon.i.logistic-science-pack", + "name": "offshore-pump", + "icon_name": "icon.r.offshore-pump", + "icon_alt_name": "icon.i.offshore-pump", "enabled": false, "category": "crafting", - "energy": 6, - "order": "b[logistic-science-pack]", - "subgroup": "science-pack", + "energy": 0.5, + "order": "b[fluids]-a[offshore-pump]", + "subgroup": "extraction-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "transport-belt", + "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "inserter", + "name": "pipe", "type": "item", - "amount": 1 + "amount": 3 } ], "products": [ { - "name": "logistic-science-pack", + "name": "offshore-pump", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Logistic science pack" + "localised_name": "Offshore pump" }, { - "name": "car", - "icon_name": "icon.r.car", - "icon_alt_name": "icon.i.car", + "name": "pumpjack", + "icon_name": "icon.r.pumpjack", + "icon_alt_name": "icon.i.pumpjack", "enabled": false, "category": "crafting", - "energy": 2, - "order": "b[personal-transport]-a[car]", - "subgroup": "transport", + "energy": 5, + "order": "b[fluids]-b[pumpjack]", + "subgroup": "extraction-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", - "amount": 20 + "amount": 5 }, { - "name": "steel-plate", + "name": "iron-gear-wheel", + "type": "item", + "amount": 10 + }, + { + "name": "electronic-circuit", "type": "item", "amount": 5 }, { - "name": "engine-unit", + "name": "pipe", "type": "item", - "amount": 8 + "amount": 10 } ], "products": [ { - "name": "car", + "name": "pumpjack", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Car" + "localised_name": "Pumpjack" }, { - "name": "tank", - "icon_name": "icon.r.tank", - "icon_alt_name": "icon.i.tank", - "enabled": false, + "name": "stone-furnace", + "icon_name": "icon.r.stone-furnace", + "icon_alt_name": "icon.i.stone-furnace", + "enabled": true, "category": "crafting", - "energy": 5, - "order": "b[personal-transport]-b[tank]", - "subgroup": "transport", + "energy": 0.5, + "order": "a[stone-furnace]", + "subgroup": "smelting-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 50 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 15 - }, - { - "name": "advanced-circuit", - "type": "item", - "amount": 10 - }, - { - "name": "engine-unit", + "name": "stone", "type": "item", - "amount": 32 + "amount": 5 } ], "products": [ { - "name": "tank", + "name": "stone-furnace", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Tank" + "localised_name": "Stone furnace" }, { - "name": "spidertron", - "icon_name": "icon.r.spidertron", - "icon_alt_name": "icon.i.spidertron", + "name": "steel-furnace", + "icon_name": "icon.r.steel-furnace", + "icon_alt_name": "icon.i.steel-furnace", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[personal-transport]-c[spidertron]-a[spider]", - "subgroup": "transport", + "energy": 3, + "order": "b[steel-furnace]", + "subgroup": "smelting-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "raw-fish", - "type": "item", - "amount": 1 - }, - { - "name": "rocket-control-unit", - "type": "item", - "amount": 16 - }, - { - "name": "low-density-structure", - "type": "item", - "amount": 150 - }, - { - "name": "effectivity-module-3", - "type": "item", - "amount": 2 - }, - { - "name": "rocket-launcher", - "type": "item", - "amount": 4 - }, - { - "name": "fusion-reactor-equipment", - "type": "item", - "amount": 2 - }, - { - "name": "exoskeleton-equipment", + "name": "steel-plate", "type": "item", - "amount": 4 + "amount": 6 }, { - "name": "radar", + "name": "stone-brick", "type": "item", - "amount": 2 + "amount": 10 } ], "products": [ { - "name": "spidertron", + "name": "steel-furnace", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Spidertron" + "localised_name": "Steel furnace" }, { - "name": "spidertron-remote", - "icon_name": "icon.r.spidertron-remote", - "icon_alt_name": "icon.i.spidertron-remote", + "name": "electric-furnace", + "icon_name": "icon.r.electric-furnace", + "icon_alt_name": "icon.i.electric-furnace", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[personal-transport]-c[spidertron]-b[remote]", - "subgroup": "transport", + "energy": 5, + "order": "c[electric-furnace]", + "subgroup": "smelting-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "rocket-control-unit", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 10 }, { - "name": "radar", + "name": "advanced-circuit", "type": "item", - "amount": 1 + "amount": 5 + }, + { + "name": "stone-brick", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "spidertron-remote", + "name": "electric-furnace", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Spidertron remote" + "localised_name": "Electric furnace" }, { - "name": "pump", - "icon_name": "icon.r.pump", - "icon_alt_name": "icon.i.pump", + "name": "assembling-machine-1", + "icon_name": "icon.r.assembling-machine-1", + "icon_alt_name": "icon.i.assembling-machine-1", "enabled": false, "category": "crafting", - "energy": 2, - "order": "b[pipe]-c[pump]", - "subgroup": "energy-pipe-distribution", + "energy": 0.5, + "order": "a[assembling-machine-1]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 9 }, { - "name": "engine-unit", + "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "pipe", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 3 } ], "products": [ { - "name": "pump", + "name": "assembling-machine-1", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Pump" + "localised_name": "Assembling machine 1" }, { - "name": "poison-capsule", - "icon_name": "icon.r.poison-capsule", - "icon_alt_name": "icon.i.poison-capsule", + "name": "assembling-machine-2", + "icon_name": "icon.r.assembling-machine-2", + "icon_alt_name": "icon.i.assembling-machine-2", "enabled": false, "category": "crafting", - "energy": 8, - "order": "b[poison-capsule]", - "subgroup": "capsule", + "energy": 0.5, + "order": "b[assembling-machine-2]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", + "name": "steel-plate", "type": "item", - "amount": 10 + "amount": 2 }, { - "name": "steel-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 3 + "amount": 5 }, { "name": "electronic-circuit", "type": "item", "amount": 3 + }, + { + "name": "assembling-machine-1", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "poison-capsule", + "name": "assembling-machine-2", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Poison capsule" + "localised_name": "Assembling machine 2" }, { - "name": "repair-pack", - "icon_name": "icon.r.repair-pack", - "icon_alt_name": "icon.i.repair-pack", - "enabled": true, + "name": "assembling-machine-3", + "icon_name": "icon.r.assembling-machine-3", + "icon_alt_name": "icon.i.assembling-machine-3", + "enabled": false, "category": "crafting", "energy": 0.5, - "order": "b[repair]-a[repair-pack]", - "subgroup": "tool", + "order": "c[assembling-machine-3]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "assembling-machine-2", "type": "item", "amount": 2 }, { - "name": "electronic-circuit", + "name": "speed-module", "type": "item", - "amount": 2 + "amount": 4 } ], "products": [ { - "name": "repair-pack", + "name": "assembling-machine-3", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Repair pack" + "localised_name": "Assembling machine 3" }, { - "name": "shotgun", - "icon_name": "icon.r.shotgun", - "icon_alt_name": "icon.i.shotgun", + "name": "oil-refinery", + "icon_name": "icon.r.oil-refinery", + "icon_alt_name": "icon.i.oil-refinery", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[shotgun]-a[basic]", - "subgroup": "gun", + "energy": 8, + "order": "d[refinery]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "wood", + "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 15 }, { - "name": "iron-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 15 + "amount": 10 }, { - "name": "copper-plate", + "name": "electronic-circuit", "type": "item", "amount": 10 }, { - "name": "iron-gear-wheel", + "name": "pipe", "type": "item", - "amount": 5 + "amount": 10 + }, + { + "name": "stone-brick", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "shotgun", + "name": "oil-refinery", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Shotgun" + "localised_name": "Oil refinery" }, { - "name": "shotgun-shell", - "icon_name": "icon.r.shotgun-shell", - "icon_alt_name": "icon.i.shotgun-shell", + "name": "chemical-plant", + "icon_name": "icon.r.chemical-plant", + "icon_alt_name": "icon.i.chemical-plant", "enabled": false, "category": "crafting", - "energy": 3, - "order": "b[shotgun]-a[basic]", - "subgroup": "ammo", + "energy": 5, + "order": "e[chemical-plant]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "copper-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 2 + "amount": 5 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 5 + }, + { + "name": "pipe", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "shotgun-shell", + "name": "chemical-plant", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Shotgun shells" + "localised_name": "Chemical plant" }, { - "name": "combat-shotgun", - "icon_name": "icon.r.combat-shotgun", - "icon_alt_name": "icon.i.combat-shotgun", + "name": "centrifuge", + "icon_name": "icon.r.centrifuge", + "icon_alt_name": "icon.i.centrifuge", "enabled": false, "category": "crafting", - "energy": 10, - "order": "b[shotgun]-a[combat]", - "subgroup": "gun", + "energy": 4, + "order": "f[centrifuge]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "wood", + "name": "steel-plate", "type": "item", - "amount": 10 + "amount": 50 }, { - "name": "copper-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 10 + "amount": 100 }, { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", - "amount": 15 + "amount": 100 }, { - "name": "iron-gear-wheel", + "name": "concrete", "type": "item", - "amount": 5 + "amount": 100 } ], "products": [ { - "name": "combat-shotgun", + "name": "centrifuge", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Combat shotgun" + "localised_name": "Centrifuge" }, { - "name": "piercing-shotgun-shell", - "icon_name": "icon.r.piercing-shotgun-shell", - "icon_alt_name": "icon.i.piercing-shotgun-shell", + "name": "lab", + "icon_name": "icon.r.lab", + "icon_alt_name": "icon.i.lab", "enabled": false, "category": "crafting", - "energy": 8, - "order": "b[shotgun]-b[piercing]", - "subgroup": "ammo", + "energy": 2, + "order": "z[lab]", + "subgroup": "production-machine", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 5 + "amount": 10 }, { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", - "amount": 2 + "amount": 10 }, { - "name": "shotgun-shell", + "name": "transport-belt", "type": "item", - "amount": 2 + "amount": 4 } ], "products": [ { - "name": "piercing-shotgun-shell", + "name": "lab", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Piercing shotgun shells" + "localised_name": "Lab" }, { - "name": "boiler", - "icon_name": "icon.r.boiler", - "icon_alt_name": "icon.i.boiler", - "enabled": true, + "name": "beacon", + "icon_name": "icon.r.beacon", + "icon_alt_name": "icon.i.beacon", + "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[steam-power]-a[boiler]", - "subgroup": "energy", + "energy": 15, + "order": "a[beacon]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "pipe", + "name": "steel-plate", "type": "item", - "amount": 4 + "amount": 10 }, { - "name": "stone-furnace", + "name": "copper-cable", "type": "item", - "amount": 1 + "amount": 10 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 20 + }, + { + "name": "advanced-circuit", + "type": "item", + "amount": 20 } ], "products": [ { - "name": "boiler", + "name": "beacon", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Boiler" + "localised_name": "Beacon" }, { - "name": "steam-engine", - "icon_name": "icon.r.steam-engine", - "icon_alt_name": "icon.i.steam-engine", - "enabled": true, + "name": "speed-module", + "icon_name": "icon.r.speed-module", + "icon_alt_name": "icon.i.speed-module", + "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[steam-power]-b[steam-engine]", - "subgroup": "energy", + "energy": 15, + "order": "a[speed]-a[speed-module-1]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 10 - }, - { - "name": "iron-gear-wheel", + "name": "electronic-circuit", "type": "item", - "amount": 8 + "amount": 5 }, { - "name": "pipe", + "name": "advanced-circuit", "type": "item", "amount": 5 } ], "products": [ { - "name": "steam-engine", + "name": "speed-module", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Steam engine" + "localised_name": "Speed module" }, { - "name": "steel-furnace", - "icon_name": "icon.r.steel-furnace", - "icon_alt_name": "icon.i.steel-furnace", + "name": "speed-module-2", + "icon_name": "icon.r.speed-module-2", + "icon_alt_name": "icon.i.speed-module-2", "enabled": false, "category": "crafting", - "energy": 3, - "order": "b[steel-furnace]", - "subgroup": "smelting-machine", + "energy": 30, + "order": "a[speed]-b[speed-module-2]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", - "amount": 6 + "amount": 5 }, { - "name": "stone-brick", + "name": "processing-unit", "type": "item", - "amount": 10 + "amount": 5 + }, + { + "name": "speed-module", + "type": "item", + "amount": 4 } ], "products": [ { - "name": "steel-furnace", + "name": "speed-module-2", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Steel furnace" + "localised_name": "Speed module 2" }, { - "name": "logistic-chest-active-provider", - "icon_name": "icon.r.logistic-chest-active-provider", - "icon_alt_name": "icon.i.logistic-chest-active-provider", + "name": "speed-module-3", + "icon_name": "icon.r.speed-module-3", + "icon_alt_name": "icon.i.speed-module-3", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[storage]-c[logistic-chest-active-provider]", - "subgroup": "logistic-network", + "energy": 60, + "order": "a[speed]-c[speed-module-3]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "advanced-circuit", "type": "item", - "amount": 3 + "amount": 5 }, { - "name": "advanced-circuit", + "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "steel-chest", + "name": "speed-module-2", "type": "item", - "amount": 1 + "amount": 4 } ], "products": [ { - "name": "logistic-chest-active-provider", + "name": "speed-module-3", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Active provider chest" + "localised_name": "Speed module 3" }, { - "name": "logistic-chest-passive-provider", - "icon_name": "icon.r.logistic-chest-passive-provider", - "icon_alt_name": "icon.i.logistic-chest-passive-provider", + "name": "efficiency-module", + "icon_name": "icon.r.efficiency-module", + "icon_alt_name": "icon.i.efficiency-module", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[storage]-c[logistic-chest-passive-provider]", - "subgroup": "logistic-network", + "energy": 15, + "order": "c[efficiency]-a[efficiency-module-1]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "electronic-circuit", "type": "item", - "amount": 3 + "amount": 5 }, { "name": "advanced-circuit", "type": "item", - "amount": 1 - }, - { - "name": "steel-chest", - "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "logistic-chest-passive-provider", + "name": "efficiency-module", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Passive provider chest" + "localised_name": "Efficiency module" }, { - "name": "logistic-chest-storage", - "icon_name": "icon.r.logistic-chest-storage", - "icon_alt_name": "icon.i.logistic-chest-storage", + "name": "efficiency-module-2", + "icon_name": "icon.r.efficiency-module-2", + "icon_alt_name": "icon.i.efficiency-module-2", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[storage]-c[logistic-chest-storage]", - "subgroup": "logistic-network", + "energy": 30, + "order": "c[efficiency]-b[efficiency-module-2]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "advanced-circuit", "type": "item", - "amount": 3 + "amount": 5 }, { - "name": "advanced-circuit", + "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "steel-chest", + "name": "efficiency-module", "type": "item", - "amount": 1 + "amount": 4 } ], "products": [ { - "name": "logistic-chest-storage", + "name": "efficiency-module-2", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Storage chest" + "localised_name": "Efficiency module 2" }, { - "name": "logistic-chest-buffer", - "icon_name": "icon.r.logistic-chest-buffer", - "icon_alt_name": "icon.i.logistic-chest-buffer", + "name": "efficiency-module-3", + "icon_name": "icon.r.efficiency-module-3", + "icon_alt_name": "icon.i.efficiency-module-3", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[storage]-d[logistic-chest-buffer]", - "subgroup": "logistic-network", + "energy": 60, + "order": "c[efficiency]-c[efficiency-module-3]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "advanced-circuit", "type": "item", - "amount": 3 + "amount": 5 }, { - "name": "advanced-circuit", + "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "steel-chest", + "name": "efficiency-module-2", "type": "item", - "amount": 1 + "amount": 4 } ], "products": [ { - "name": "logistic-chest-buffer", + "name": "efficiency-module-3", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Buffer chest" + "localised_name": "Efficiency module 3" }, { - "name": "logistic-chest-requester", - "icon_name": "icon.r.logistic-chest-requester", - "icon_alt_name": "icon.i.logistic-chest-requester", + "name": "productivity-module", + "icon_name": "icon.r.productivity-module", + "icon_alt_name": "icon.i.productivity-module", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[storage]-e[logistic-chest-requester]", - "subgroup": "logistic-network", + "energy": 15, + "order": "c[productivity]-a[productivity-module-1]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "electronic-circuit", "type": "item", - "amount": 3 + "amount": 5 }, { "name": "advanced-circuit", "type": "item", - "amount": 1 - }, - { - "name": "steel-chest", - "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "logistic-chest-requester", + "name": "productivity-module", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Requester chest" + "localised_name": "Productivity module" }, { - "name": "gun-turret", - "icon_name": "icon.r.gun-turret", - "icon_alt_name": "icon.i.gun-turret", + "name": "productivity-module-2", + "icon_name": "icon.r.productivity-module-2", + "icon_alt_name": "icon.i.productivity-module-2", "enabled": false, "category": "crafting", - "energy": 8, - "order": "b[turret]-a[gun-turret]", - "subgroup": "defensive-structure", + "energy": 30, + "order": "c[productivity]-b[productivity-module-2]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "advanced-circuit", "type": "item", - "amount": 20 + "amount": 5 }, { - "name": "copper-plate", + "name": "processing-unit", "type": "item", - "amount": 10 + "amount": 5 }, { - "name": "iron-gear-wheel", + "name": "productivity-module", "type": "item", - "amount": 10 + "amount": 4 } ], "products": [ { - "name": "gun-turret", + "name": "productivity-module-2", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Gun turret" + "localised_name": "Productivity module 2" }, { - "name": "laser-turret", - "icon_name": "icon.r.laser-turret", - "icon_alt_name": "icon.i.laser-turret", + "name": "productivity-module-3", + "icon_name": "icon.r.productivity-module-3", + "icon_alt_name": "icon.i.productivity-module-3", "enabled": false, "category": "crafting", - "energy": 20, - "order": "b[turret]-b[laser-turret]", - "subgroup": "defensive-structure", + "energy": 60, + "order": "c[productivity]-c[productivity-module-3]", + "subgroup": "module", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "advanced-circuit", "type": "item", - "amount": 20 + "amount": 5 }, { - "name": "battery", + "name": "processing-unit", "type": "item", - "amount": 12 + "amount": 5 }, { - "name": "electronic-circuit", + "name": "productivity-module-2", "type": "item", - "amount": 20 + "amount": 4 } ], "products": [ { - "name": "laser-turret", + "name": "productivity-module-3", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Laser turret" + "localised_name": "Productivity module 3" }, { - "name": "flamethrower-turret", - "icon_name": "icon.r.flamethrower-turret", - "icon_alt_name": "icon.i.flamethrower-turret", + "name": "rocket-silo", + "icon_name": "icon.r.rocket-silo", + "icon_alt_name": "icon.i.rocket-silo", "enabled": false, "category": "crafting", - "energy": 20, - "order": "b[turret]-c[flamethrower-turret]", - "subgroup": "defensive-structure", + "energy": 30, + "order": "a[rocket-silo]", + "subgroup": "space-related", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 30 + "amount": 1000 }, { - "name": "iron-gear-wheel", + "name": "processing-unit", "type": "item", - "amount": 15 + "amount": 200 }, { - "name": "engine-unit", + "name": "electric-engine-unit", "type": "item", - "amount": 5 + "amount": 200 }, { "name": "pipe", "type": "item", - "amount": 10 + "amount": 100 + }, + { + "name": "concrete", + "type": "item", + "amount": 1000 } ], "products": [ { - "name": "flamethrower-turret", + "name": "rocket-silo", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Flamethrower turret" + "localised_name": "Rocket silo" }, { - "name": "artillery-turret", - "icon_name": "icon.r.artillery-turret", - "icon_alt_name": "icon.i.artillery-turret", + "name": "cargo-landing-pad", + "icon_name": "icon.r.cargo-landing-pad", + "icon_alt_name": "icon.i.cargo-landing-pad", "enabled": false, "category": "crafting", - "energy": 40, - "order": "b[turret]-d[artillery-turret]-a[turret]", - "subgroup": "defensive-structure", + "energy": 30, + "order": "b[cargo-landing-pad]", + "subgroup": "space-related", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 60 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 40 + "amount": 25 }, { - "name": "advanced-circuit", + "name": "processing-unit", "type": "item", - "amount": 20 + "amount": 10 }, { "name": "concrete", "type": "item", - "amount": 60 + "amount": 200 } ], "products": [ { - "name": "artillery-turret", + "name": "cargo-landing-pad", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Artillery turret" + "localised_name": "Cargo landing pad" }, { - "name": "artillery-targeting-remote", - "icon_name": "icon.r.artillery-targeting-remote", - "icon_alt_name": "icon.i.artillery-targeting-remote", + "name": "satellite", + "icon_name": "icon.r.satellite", + "icon_alt_name": "icon.i.satellite", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "b[turret]-d[artillery-turret]-b[remote]", - "subgroup": "defensive-structure", + "energy": 5, + "order": "d[rocket-parts]-e[satellite]", + "subgroup": "space-related", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 100 + }, + { + "name": "low-density-structure", + "type": "item", + "amount": 100 + }, + { + "name": "rocket-fuel", + "type": "item", + "amount": 50 + }, + { + "name": "solar-panel", + "type": "item", + "amount": 100 + }, + { + "name": "accumulator", + "type": "item", + "amount": 100 }, { "name": "radar", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "artillery-targeting-remote", + "name": "satellite", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Artillery targeting remote" + "localised_name": "Satellite" }, { - "name": "underground-belt", - "icon_name": "icon.r.underground-belt", - "icon_alt_name": "icon.i.underground-belt", + "name": "basic-oil-processing", + "icon_name": "icon.r.basic-oil-processing", + "icon_alt_name": "icon.i.petroleum-gas", "enabled": false, - "category": "crafting", - "energy": 1, - "order": "b[underground-belt]-a[underground-belt]", - "subgroup": "belt", + "category": "oil-processing", + "energy": 5, + "order": "a[oil-processing]-a[basic-oil-processing]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 10 - }, - { - "name": "transport-belt", - "type": "item", - "amount": 5 + "name": "crude-oil", + "type": "fluid", + "amount": 100 } ], "products": [ { - "name": "underground-belt", - "type": "item", - "amount": 2, - "p_amount": 2 + "name": "petroleum-gas", + "type": "fluid", + "amount": 45, + "p_amount": 45 } ], - "localised_name": "Underground belt" + "localised_name": "Basic oil processing" }, { - "name": "fast-underground-belt", - "icon_name": "icon.r.fast-underground-belt", - "icon_alt_name": "icon.i.fast-underground-belt", + "name": "advanced-oil-processing", + "icon_name": "icon.r.advanced-oil-processing", + "icon_alt_name": "icon.i.heavy-oil", "enabled": false, - "category": "crafting", - "energy": 2, - "order": "b[underground-belt]-b[fast-underground-belt]", - "subgroup": "belt", + "category": "oil-processing", + "energy": 5, + "order": "a[oil-processing]-b[advanced-oil-processing]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", - "type": "item", - "amount": 40 + "name": "water", + "type": "fluid", + "amount": 50 }, { - "name": "underground-belt", - "type": "item", - "amount": 2 + "name": "crude-oil", + "type": "fluid", + "amount": 100 } ], "products": [ { - "name": "fast-underground-belt", - "type": "item", - "amount": 2, - "p_amount": 2 + "name": "heavy-oil", + "type": "fluid", + "amount": 25, + "p_amount": 25 + }, + { + "name": "light-oil", + "type": "fluid", + "amount": 45, + "p_amount": 45 + }, + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 55, + "p_amount": 55 } ], - "localised_name": "Fast underground belt" + "localised_name": "Advanced oil processing" }, { - "name": "express-underground-belt", - "icon_name": "icon.r.express-underground-belt", - "icon_alt_name": "icon.i.express-underground-belt", + "name": "coal-liquefaction", + "icon_name": "icon.r.coal-liquefaction", + "icon_alt_name": "icon.i.heavy-oil", "enabled": false, - "category": "crafting-with-fluid", - "energy": 2, - "order": "b[underground-belt]-c[express-underground-belt]", - "subgroup": "belt", + "category": "oil-processing", + "energy": 5, + "order": "a[oil-processing]-c[coal-liquefaction]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "coal", "type": "item", - "amount": 80 + "amount": 10 }, { - "name": "fast-underground-belt", - "type": "item", - "amount": 2 + "name": "heavy-oil", + "type": "fluid", + "amount": 25 }, { - "name": "lubricant", + "name": "steam", "type": "fluid", - "amount": 40 + "amount": 50 } ], "products": [ { - "name": "express-underground-belt", - "type": "item", - "amount": 2, - "p_amount": 2 + "name": "heavy-oil", + "type": "fluid", + "amount": 90, + "p_amount": 65 + }, + { + "name": "light-oil", + "type": "fluid", + "amount": 20, + "p_amount": 20 + }, + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 10, + "p_amount": 10 } ], - "localised_name": "Express underground belt" + "localised_name": "Coal liquefaction" }, { - "name": "red-wire", - "icon_name": "icon.r.red-wire", - "icon_alt_name": "icon.i.red-wire", + "name": "heavy-oil-cracking", + "icon_name": "icon.r.heavy-oil-cracking", + "icon_alt_name": "icon.i.light-oil", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "b[wires]-a[red-wire]", - "subgroup": "circuit-network", + "category": "chemistry", + "energy": 2, + "order": "b[fluid-chemistry]-a[heavy-oil-cracking]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-cable", - "type": "item", - "amount": 1 + "name": "water", + "type": "fluid", + "amount": 30 }, { - "name": "electronic-circuit", - "type": "item", - "amount": 1 + "name": "heavy-oil", + "type": "fluid", + "amount": 40 } ], "products": [ { - "name": "red-wire", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "light-oil", + "type": "fluid", + "amount": 30, + "p_amount": 30 } ], - "localised_name": "Red wire" + "localised_name": "Heavy oil cracking to light oil" }, { - "name": "green-wire", - "icon_name": "icon.r.green-wire", - "icon_alt_name": "icon.i.green-wire", + "name": "light-oil-cracking", + "icon_name": "icon.r.light-oil-cracking", + "icon_alt_name": "icon.i.petroleum-gas", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "b[wires]-b[green-wire]", - "subgroup": "circuit-network", + "category": "chemistry", + "energy": 2, + "order": "b[fluid-chemistry]-b[light-oil-cracking]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-cable", - "type": "item", - "amount": 1 + "name": "water", + "type": "fluid", + "amount": 30 }, { - "name": "electronic-circuit", - "type": "item", - "amount": 1 + "name": "light-oil", + "type": "fluid", + "amount": 30 + } + ], + "products": [ + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 20, + "p_amount": 20 + } + ], + "localised_name": "Light oil cracking to petroleum gas" + }, + { + "name": "solid-fuel-from-petroleum-gas", + "icon_name": "icon.r.solid-fuel-from-petroleum-gas", + "icon_alt_name": "icon.i.solid-fuel", + "enabled": false, + "category": "chemistry", + "energy": 1, + "order": "b[fluid-chemistry]-c[solid-fuel-from-petroleum-gas]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 20 } ], "products": [ { - "name": "green-wire", + "name": "solid-fuel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Green wire" + "localised_name": "Solid fuel from petroleum gas" }, { - "name": "assembling-machine-3", - "icon_name": "icon.r.assembling-machine-3", - "icon_alt_name": "icon.i.assembling-machine-3", + "name": "solid-fuel-from-light-oil", + "icon_name": "icon.r.solid-fuel-from-light-oil", + "icon_alt_name": "icon.i.solid-fuel", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[assembling-machine-3]", - "subgroup": "production-machine", + "category": "chemistry", + "energy": 1, + "order": "b[fluid-chemistry]-d[solid-fuel-from-light-oil]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "assembling-machine-2", - "type": "item", - "amount": 2 - }, - { - "name": "speed-module", - "type": "item", - "amount": 4 + "name": "light-oil", + "type": "fluid", + "amount": 10 } ], "products": [ { - "name": "assembling-machine-3", + "name": "solid-fuel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Assembling machine 3" + "localised_name": "Solid fuel from light oil" }, { - "name": "belt-immunity-equipment", - "icon_name": "icon.r.belt-immunity-equipment", - "icon_alt_name": "icon.i.belt-immunity-equipment", + "name": "solid-fuel-from-heavy-oil", + "icon_name": "icon.r.solid-fuel-from-heavy-oil", + "icon_alt_name": "icon.i.solid-fuel", "enabled": false, - "category": "crafting", - "energy": 10, - "order": "c[belt-immunity]-a[belt-immunity]", - "subgroup": "equipment", + "category": "chemistry", + "energy": 1, + "order": "b[fluid-chemistry]-e[solid-fuel-from-heavy-oil]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 10 - }, - { - "name": "advanced-circuit", - "type": "item", - "amount": 5 + "name": "heavy-oil", + "type": "fluid", + "amount": 20 } ], "products": [ { - "name": "belt-immunity-equipment", + "name": "solid-fuel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Belt immunity equipment" + "localised_name": "Solid fuel from heavy oil" }, { - "name": "arithmetic-combinator", - "icon_name": "icon.r.arithmetic-combinator", - "icon_alt_name": "icon.i.arithmetic-combinator", + "name": "lubricant", + "icon_name": "icon.r.lubricant", + "icon_alt_name": "icon.i.lubricant", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[combinators]-a[arithmetic-combinator]", - "subgroup": "circuit-network", + "category": "chemistry", + "energy": 1, + "order": "c[oil-products]-a[lubricant]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-cable", - "type": "item", - "amount": 5 - }, - { - "name": "electronic-circuit", - "type": "item", - "amount": 5 + "name": "heavy-oil", + "type": "fluid", + "amount": 10 } ], "products": [ { - "name": "arithmetic-combinator", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "lubricant", + "type": "fluid", + "amount": 10, + "p_amount": 10 } ], - "localised_name": "Arithmetic combinator" + "localised_name": "Lubricant" }, { - "name": "decider-combinator", - "icon_name": "icon.r.decider-combinator", - "icon_alt_name": "icon.i.decider-combinator", + "name": "sulfuric-acid", + "icon_name": "icon.r.sulfuric-acid", + "icon_alt_name": "icon.i.sulfuric-acid", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[combinators]-b[decider-combinator]", - "subgroup": "circuit-network", + "category": "chemistry", + "energy": 1, + "order": "c[oil-products]-b[sulfuric-acid]", + "subgroup": "fluid-recipes", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-cable", + "name": "iron-plate", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "electronic-circuit", + "name": "sulfur", "type": "item", "amount": 5 + }, + { + "name": "water", + "type": "fluid", + "amount": 100 } ], "products": [ { - "name": "decider-combinator", - "type": "item", - "amount": 1, - "p_amount": 1 + "name": "sulfuric-acid", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Decider combinator" + "localised_name": "Sulfuric acid" }, { - "name": "constant-combinator", - "icon_name": "icon.r.constant-combinator", - "icon_alt_name": "icon.i.constant-combinator", - "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[combinators]-c[constant-combinator]", - "subgroup": "circuit-network", + "name": "iron-plate", + "icon_name": "icon.r.iron-plate", + "icon_alt_name": "icon.i.iron-plate", + "enabled": true, + "category": "smelting", + "energy": 3.2, + "order": "a[smelting]-a[iron-plate]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-cable", - "type": "item", - "amount": 5 - }, - { - "name": "electronic-circuit", + "name": "iron-ore", "type": "item", - "amount": 2 + "amount": 1 } ], "products": [ { - "name": "constant-combinator", + "name": "iron-plate", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Constant combinator" + "localised_name": "Iron plate" }, { "name": "copper-plate", @@ -9608,8 +11561,17 @@ "enabled": true, "category": "smelting", "energy": 3.2, - "order": "c[copper-plate]", + "order": "a[smelting]-b[copper-plate]", "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "copper-ore", @@ -9628,1499 +11590,1802 @@ "localised_name": "Copper plate" }, { - "name": "effectivity-module", - "icon_name": "icon.r.effectivity-module", - "icon_alt_name": "icon.i.effectivity-module", + "name": "steel-plate", + "icon_name": "icon.r.steel-plate", + "icon_alt_name": "icon.i.steel-plate", "enabled": false, - "category": "crafting", - "energy": 15, - "order": "c[effectivity]-a[effectivity-module-1]", - "subgroup": "module", + "category": "smelting", + "energy": 16, + "order": "a[smelting]-c[steel-plate]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "advanced-circuit", + "name": "iron-plate", "type": "item", "amount": 5 } ], "products": [ { - "name": "effectivity-module", + "name": "steel-plate", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Efficiency module" + "localised_name": "Steel plate" }, { - "name": "effectivity-module-2", - "icon_name": "icon.r.effectivity-module-2", - "icon_alt_name": "icon.i.effectivity-module-2", + "name": "plastic-bar", + "icon_name": "icon.r.plastic-bar", + "icon_alt_name": "icon.i.plastic-bar", "enabled": false, - "category": "crafting", - "energy": 30, - "order": "c[effectivity]-b[effectivity-module-2]", - "subgroup": "module", + "category": "chemistry", + "energy": 1, + "order": "b[chemistry]-b[plastic-bar]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "advanced-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "processing-unit", + "name": "coal", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "effectivity-module", - "type": "item", - "amount": 4 + "name": "petroleum-gas", + "type": "fluid", + "amount": 20 } ], "products": [ { - "name": "effectivity-module-2", + "name": "plastic-bar", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Efficiency module 2" + "localised_name": "Plastic bar" }, { - "name": "effectivity-module-3", - "icon_name": "icon.r.effectivity-module-3", - "icon_alt_name": "icon.i.effectivity-module-3", + "name": "sulfur", + "icon_name": "icon.r.sulfur", + "icon_alt_name": "icon.i.sulfur", "enabled": false, - "category": "crafting", - "energy": 60, - "order": "c[effectivity]-c[effectivity-module-3]", - "subgroup": "module", + "category": "chemistry", + "energy": 1, + "order": "b[chemistry]-c[sulfur]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "advanced-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "processing-unit", - "type": "item", - "amount": 5 + "name": "water", + "type": "fluid", + "amount": 30 }, { - "name": "effectivity-module-2", - "type": "item", - "amount": 5 + "name": "petroleum-gas", + "type": "fluid", + "amount": 30 } ], "products": [ { - "name": "effectivity-module-3", + "name": "sulfur", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Efficiency module 3" + "localised_name": "Sulfur" }, { - "name": "electric-furnace", - "icon_name": "icon.r.electric-furnace", - "icon_alt_name": "icon.i.electric-furnace", + "name": "battery", + "icon_name": "icon.r.battery", + "icon_alt_name": "icon.i.battery", "enabled": false, - "category": "crafting", - "energy": 5, - "order": "c[electric-furnace]", - "subgroup": "smelting-machine", + "category": "chemistry", + "energy": 4, + "order": "b[chemistry]-d[battery]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "advanced-circuit", + "name": "copper-plate", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "stone-brick", - "type": "item", - "amount": 10 + "name": "sulfuric-acid", + "type": "fluid", + "amount": 20 } ], "products": [ { - "name": "electric-furnace", + "name": "battery", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Electric furnace" + "localised_name": "Battery" }, { - "name": "empty-crude-oil-barrel", - "icon_name": "icon.r.empty-crude-oil-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "explosives", + "icon_name": "icon.r.explosives", + "icon_alt_name": "icon.i.explosives", "enabled": false, - "category": "crafting-with-fluid", - "energy": 0.2, - "order": "c[empty-crude-oil-barrel]", - "subgroup": "empty-barrel", + "category": "chemistry", + "energy": 4, + "order": "b[chemistry]-e[explosives]", + "subgroup": "raw-material", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "crude-oil-barrel", + "name": "coal", "type": "item", "amount": 1 - } - ], - "products": [ + }, { - "name": "empty-barrel", + "name": "sulfur", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 1 }, { - "name": "crude-oil", + "name": "water", "type": "fluid", - "amount": 50, - "p_amount": 50 + "amount": 10 } ], - "localised_name": "Empty Crude oil barrel" + "products": [ + { + "name": "explosives", + "type": "item", + "amount": 2, + "p_amount": 2 + } + ], + "localised_name": "Explosives" }, { - "name": "empty-heavy-oil-barrel", - "icon_name": "icon.r.empty-heavy-oil-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "water-barrel", + "icon_name": "icon.r.water-barrel", + "icon_alt_name": "icon.i.water-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-heavy-oil-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-a[water]-a[water]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "heavy-oil-barrel", + "name": "barrel", "type": "item", "amount": 1 + }, + { + "name": "water", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "empty-barrel", + "name": "water-barrel", "type": "item", "amount": 1, "p_amount": 1 - }, - { - "name": "heavy-oil", - "type": "fluid", - "amount": 50, - "p_amount": 50 } ], - "localised_name": "Empty Heavy oil barrel" + "localised_name": "Fill Water barrel" }, { - "name": "empty-light-oil-barrel", - "icon_name": "icon.r.empty-light-oil-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "crude-oil-barrel", + "icon_name": "icon.r.crude-oil-barrel", + "icon_alt_name": "icon.i.crude-oil-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-light-oil-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-b[oil]-a[crude-oil]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "light-oil-barrel", + "name": "barrel", "type": "item", "amount": 1 + }, + { + "name": "crude-oil", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "empty-barrel", + "name": "crude-oil-barrel", "type": "item", "amount": 1, "p_amount": 1 - }, - { - "name": "light-oil", - "type": "fluid", - "amount": 50, - "p_amount": 50 } ], - "localised_name": "Empty Light oil barrel" + "localised_name": "Fill Crude oil barrel" }, { - "name": "empty-lubricant-barrel", - "icon_name": "icon.r.empty-lubricant-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "petroleum-gas-barrel", + "icon_name": "icon.r.petroleum-gas-barrel", + "icon_alt_name": "icon.i.petroleum-gas-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-lubricant-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-b[oil]-b[petroleum-gas]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "lubricant-barrel", + "name": "barrel", "type": "item", "amount": 1 + }, + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "empty-barrel", + "name": "petroleum-gas-barrel", "type": "item", "amount": 1, "p_amount": 1 - }, - { - "name": "lubricant", - "type": "fluid", - "amount": 50, - "p_amount": 50 } ], - "localised_name": "Empty Lubricant barrel" + "localised_name": "Fill Petroleum gas barrel" }, { - "name": "empty-petroleum-gas-barrel", - "icon_name": "icon.r.empty-petroleum-gas-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "light-oil-barrel", + "icon_name": "icon.r.light-oil-barrel", + "icon_alt_name": "icon.i.light-oil-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-petroleum-gas-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-b[oil]-c[light-oil]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "petroleum-gas-barrel", + "name": "barrel", "type": "item", "amount": 1 + }, + { + "name": "light-oil", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "empty-barrel", + "name": "light-oil-barrel", "type": "item", "amount": 1, "p_amount": 1 - }, - { - "name": "petroleum-gas", - "type": "fluid", - "amount": 50, - "p_amount": 50 } ], - "localised_name": "Empty Petroleum gas barrel" + "localised_name": "Fill Light oil barrel" }, { - "name": "empty-sulfuric-acid-barrel", - "icon_name": "icon.r.empty-sulfuric-acid-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "heavy-oil-barrel", + "icon_name": "icon.r.heavy-oil-barrel", + "icon_alt_name": "icon.i.heavy-oil-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-sulfuric-acid-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-b[oil]-d[heavy-oil]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "sulfuric-acid-barrel", + "name": "barrel", "type": "item", "amount": 1 + }, + { + "name": "heavy-oil", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "empty-barrel", + "name": "heavy-oil-barrel", "type": "item", "amount": 1, "p_amount": 1 - }, - { - "name": "sulfuric-acid", - "type": "fluid", - "amount": 50, - "p_amount": 50 } ], - "localised_name": "Empty Sulfuric acid barrel" + "localised_name": "Fill Heavy oil barrel" }, { - "name": "empty-water-barrel", - "icon_name": "icon.r.empty-water-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "lubricant-barrel", + "icon_name": "icon.r.lubricant-barrel", + "icon_alt_name": "icon.i.lubricant-barrel", "enabled": false, "category": "crafting-with-fluid", "energy": 0.2, - "order": "c[empty-water-barrel]", - "subgroup": "empty-barrel", + "order": "a[fluid]-b[oil]-e[lubricant]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "water-barrel", + "name": "barrel", "type": "item", "amount": 1 - } - ], - "products": [ - { - "name": "empty-barrel", - "type": "item", - "amount": 1, - "p_amount": 1 }, { - "name": "water", + "name": "lubricant", "type": "fluid", - "amount": 50, - "p_amount": 50 - } - ], - "localised_name": "Empty Water barrel" - }, - { - "name": "iron-gear-wheel", - "icon_name": "icon.r.iron-gear-wheel", - "icon_alt_name": "icon.i.iron-gear-wheel", - "enabled": true, - "category": "crafting", - "energy": 0.5, - "order": "c[iron-gear-wheel]", - "subgroup": "intermediate-product", - "ingredients": [ - { - "name": "iron-plate", - "type": "item", - "amount": 2 + "amount": 50 } ], "products": [ { - "name": "iron-gear-wheel", + "name": "lubricant-barrel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Iron gear wheel" + "localised_name": "Fill Lubricant barrel" }, { - "name": "landfill", - "icon_name": "icon.r.landfill", - "icon_alt_name": "icon.i.landfill", + "name": "sulfuric-acid-barrel", + "icon_name": "icon.r.sulfuric-acid-barrel", + "icon_alt_name": "icon.i.sulfuric-acid-barrel", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[landfill]-a[dirt]", - "subgroup": "terrain", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-f[sulfuric-acid]", + "subgroup": "fill-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "stone", + "name": "barrel", "type": "item", - "amount": 20 + "amount": 1 + }, + { + "name": "sulfuric-acid", + "type": "fluid", + "amount": 50 } ], "products": [ { - "name": "landfill", + "name": "sulfuric-acid-barrel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Landfill" + "localised_name": "Fill Sulfuric acid barrel" }, { - "name": "long-handed-inserter", - "icon_name": "icon.r.long-handed-inserter", - "icon_alt_name": "icon.i.long-handed-inserter", + "name": "empty-water-barrel", + "icon_name": "icon.r.empty-water-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "c[long-handed-inserter]", - "subgroup": "inserter", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-a[water]-a[water]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 1 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 1 - }, - { - "name": "inserter", + "name": "water-barrel", "type": "item", "amount": 1 } ], "products": [ { - "name": "long-handed-inserter", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "water", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Long-handed inserter" + "localised_name": "Empty Water barrel" }, { - "name": "military-science-pack", - "icon_name": "icon.r.military-science-pack", - "icon_alt_name": "icon.i.military-science-pack", - "enabled": false, - "category": "crafting", - "energy": 10, - "order": "c[military-science-pack]", - "subgroup": "science-pack", + "name": "empty-crude-oil-barrel", + "icon_name": "icon.r.empty-crude-oil-barrel", + "icon_alt_name": "icon.i.barrel", + "enabled": false, + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-a[crude-oil]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "piercing-rounds-magazine", - "type": "item", - "amount": 1 - }, - { - "name": "grenade", + "name": "crude-oil-barrel", "type": "item", "amount": 1 - }, - { - "name": "stone-wall", - "type": "item", - "amount": 2 } ], "products": [ { - "name": "military-science-pack", + "name": "barrel", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 + }, + { + "name": "crude-oil", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Military science pack" + "localised_name": "Empty Crude oil barrel" }, { - "name": "modular-armor", - "icon_name": "icon.r.modular-armor", - "icon_alt_name": "icon.i.modular-armor", + "name": "empty-petroleum-gas-barrel", + "icon_name": "icon.r.empty-petroleum-gas-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 15, - "order": "c[modular-armor]", - "subgroup": "armor", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-b[petroleum-gas]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 50 - }, - { - "name": "advanced-circuit", + "name": "petroleum-gas-barrel", "type": "item", - "amount": 30 + "amount": 1 } ], "products": [ { - "name": "modular-armor", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "petroleum-gas", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Modular armor" + "localised_name": "Empty Petroleum gas barrel" }, { - "name": "productivity-module", - "icon_name": "icon.r.productivity-module", - "icon_alt_name": "icon.i.productivity-module", + "name": "empty-light-oil-barrel", + "icon_name": "icon.r.empty-light-oil-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 15, - "order": "c[productivity]-a[productivity-module-1]", - "subgroup": "module", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-c[light-oil]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "electronic-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "advanced-circuit", + "name": "light-oil-barrel", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "productivity-module", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "light-oil", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Productivity module" + "localised_name": "Empty Light oil barrel" }, { - "name": "productivity-module-2", - "icon_name": "icon.r.productivity-module-2", - "icon_alt_name": "icon.i.productivity-module-2", + "name": "empty-heavy-oil-barrel", + "icon_name": "icon.r.empty-heavy-oil-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 30, - "order": "c[productivity]-b[productivity-module-2]", - "subgroup": "module", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-d[heavy-oil]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "advanced-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "processing-unit", - "type": "item", - "amount": 5 - }, - { - "name": "productivity-module", + "name": "heavy-oil-barrel", "type": "item", - "amount": 4 + "amount": 1 } ], "products": [ { - "name": "productivity-module-2", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "heavy-oil", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Productivity module 2" + "localised_name": "Empty Heavy oil barrel" }, { - "name": "productivity-module-3", - "icon_name": "icon.r.productivity-module-3", - "icon_alt_name": "icon.i.productivity-module-3", + "name": "empty-lubricant-barrel", + "icon_name": "icon.r.empty-lubricant-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 60, - "order": "c[productivity]-c[productivity-module-3]", - "subgroup": "module", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-e[lubricant]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "advanced-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "processing-unit", - "type": "item", - "amount": 5 - }, - { - "name": "productivity-module-2", + "name": "lubricant-barrel", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "productivity-module-3", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "lubricant", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Productivity module 3" + "localised_name": "Empty Lubricant barrel" }, { - "name": "roboport", - "icon_name": "icon.r.roboport", - "icon_alt_name": "icon.i.roboport", + "name": "empty-sulfuric-acid-barrel", + "icon_name": "icon.r.empty-sulfuric-acid-barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, - "category": "crafting", - "energy": 5, - "order": "c[signal]-a[roboport]", - "subgroup": "logistic-network", + "category": "crafting-with-fluid", + "energy": 0.2, + "order": "a[fluid]-b[oil]-f[sulfuric-acid]", + "subgroup": "empty-barrel", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 45 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 45 - }, - { - "name": "advanced-circuit", + "name": "sulfuric-acid-barrel", "type": "item", - "amount": 45 + "amount": 1 } ], "products": [ { - "name": "roboport", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 + }, + { + "name": "sulfuric-acid", + "type": "fluid", + "amount": 50, + "p_amount": 50 } ], - "localised_name": "Roboport" + "localised_name": "Empty Sulfuric acid barrel" }, { - "name": "slowdown-capsule", - "icon_name": "icon.r.slowdown-capsule", - "icon_alt_name": "icon.i.slowdown-capsule", - "enabled": false, + "name": "iron-gear-wheel", + "icon_name": "icon.r.iron-gear-wheel", + "icon_alt_name": "icon.i.iron-gear-wheel", + "enabled": true, "category": "crafting", - "energy": 8, - "order": "c[slowdown-capsule]", - "subgroup": "capsule", + "energy": 0.5, + "order": "a[basic-intermediates]-a[iron-gear-wheel]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", - "type": "item", - "amount": 5 - }, - { - "name": "steel-plate", - "type": "item", - "amount": 2 - }, - { - "name": "electronic-circuit", + "name": "iron-plate", "type": "item", "amount": 2 } ], "products": [ { - "name": "slowdown-capsule", + "name": "iron-gear-wheel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Slowdown capsule" + "localised_name": "Iron gear wheel" }, { - "name": "splitter", - "icon_name": "icon.r.splitter", - "icon_alt_name": "icon.i.splitter", + "name": "iron-stick", + "icon_name": "icon.r.iron-stick", + "icon_alt_name": "icon.i.iron-stick", "enabled": false, "category": "crafting", - "energy": 1, - "order": "c[splitter]-a[splitter]", - "subgroup": "belt", + "energy": 0.5, + "order": "a[basic-intermediates]-b[iron-stick]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 5 - }, + "amount": 1 + } + ], + "products": [ { - "name": "electronic-circuit", + "name": "iron-stick", "type": "item", - "amount": 5 - }, + "amount": 2, + "p_amount": 2 + } + ], + "localised_name": "Iron stick" + }, + { + "name": "copper-cable", + "icon_name": "icon.r.copper-cable", + "icon_alt_name": "icon.i.copper-cable", + "enabled": false, + "category": "crafting", + "energy": 0.5, + "order": "a[basic-intermediates]-c[copper-cable]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "ingredients": [ { - "name": "transport-belt", + "name": "copper-plate", "type": "item", - "amount": 4 + "amount": 1 } ], "products": [ { - "name": "splitter", + "name": "copper-cable", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Splitter" + "localised_name": "Copper cable" }, { - "name": "fast-splitter", - "icon_name": "icon.r.fast-splitter", - "icon_alt_name": "icon.i.fast-splitter", + "name": "barrel", + "icon_name": "icon.r.barrel", + "icon_alt_name": "icon.i.barrel", "enabled": false, "category": "crafting", - "energy": 2, - "order": "c[splitter]-b[fast-splitter]", - "subgroup": "belt", + "energy": 1, + "order": "a[basic-intermediates]-d[empty-barrel]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", - "type": "item", - "amount": 10 - }, - { - "name": "electronic-circuit", - "type": "item", - "amount": 10 - }, - { - "name": "splitter", + "name": "steel-plate", "type": "item", "amount": 1 } ], "products": [ { - "name": "fast-splitter", + "name": "barrel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fast splitter" + "localised_name": "Barrel" }, { - "name": "express-splitter", - "icon_name": "icon.r.express-splitter", - "icon_alt_name": "icon.i.express-splitter", + "name": "electronic-circuit", + "icon_name": "icon.r.electronic-circuit", + "icon_alt_name": "icon.i.electronic-circuit", "enabled": false, - "category": "crafting-with-fluid", - "energy": 2, - "order": "c[splitter]-c[express-splitter]", - "subgroup": "belt", + "category": "crafting", + "energy": 0.5, + "order": "b[circuits]-a[electronic-circuit]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", - "type": "item", - "amount": 10 - }, - { - "name": "advanced-circuit", - "type": "item", - "amount": 10 - }, - { - "name": "fast-splitter", + "name": "iron-plate", "type": "item", "amount": 1 }, { - "name": "lubricant", - "type": "fluid", - "amount": 80 + "name": "copper-cable", + "type": "item", + "amount": 3 } ], "products": [ { - "name": "express-splitter", + "name": "electronic-circuit", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Express splitter" + "localised_name": "Electronic circuit" }, { - "name": "cannon-shell", - "icon_name": "icon.r.cannon-shell", - "icon_alt_name": "icon.i.cannon-shell", + "name": "advanced-circuit", + "icon_name": "icon.r.advanced-circuit", + "icon_alt_name": "icon.i.advanced-circuit", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[cannon-shell]-a[basic]", - "subgroup": "ammo", + "energy": 6, + "order": "b[circuits]-b[advanced-circuit]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "plastic-bar", "type": "item", "amount": 2 }, { - "name": "plastic-bar", + "name": "copper-cable", "type": "item", - "amount": 2 + "amount": 4 }, { - "name": "explosives", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 2 } ], "products": [ { - "name": "cannon-shell", + "name": "advanced-circuit", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Cannon shell" + "localised_name": "Advanced circuit" }, { - "name": "explosive-cannon-shell", - "icon_name": "icon.r.explosive-cannon-shell", - "icon_alt_name": "icon.i.explosive-cannon-shell", + "name": "processing-unit", + "icon_name": "icon.r.processing-unit", + "icon_alt_name": "icon.i.processing-unit", "enabled": false, - "category": "crafting", - "energy": 8, - "order": "d[cannon-shell]-c[explosive]", - "subgroup": "ammo", + "category": "crafting-with-fluid", + "energy": 10, + "order": "b[circuits]-c[processing-unit]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", - "amount": 2 + "amount": 20 }, { - "name": "plastic-bar", + "name": "advanced-circuit", "type": "item", "amount": 2 }, { - "name": "explosives", - "type": "item", - "amount": 2 + "name": "sulfuric-acid", + "type": "fluid", + "amount": 5 } ], "products": [ { - "name": "explosive-cannon-shell", + "name": "processing-unit", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Explosive cannon shell" + "localised_name": "Processing unit" }, { - "name": "uranium-cannon-shell", - "icon_name": "icon.r.uranium-cannon-shell", - "icon_alt_name": "icon.i.uranium-cannon-shell", + "name": "engine-unit", + "icon_name": "icon.r.engine-unit", + "icon_alt_name": "icon.i.engine-unit", "enabled": false, - "category": "crafting", - "energy": 12, - "order": "d[cannon-shell]-c[uranium]", - "subgroup": "ammo", + "category": "advanced-crafting", + "energy": 10, + "order": "c[advanced-intermediates]-a[engine-unit]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "uranium-238", + "name": "steel-plate", "type": "item", "amount": 1 }, { - "name": "cannon-shell", + "name": "iron-gear-wheel", "type": "item", "amount": 1 + }, + { + "name": "pipe", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "uranium-cannon-shell", + "name": "engine-unit", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Uranium cannon shell" + "localised_name": "Engine unit" }, { - "name": "chemical-science-pack", - "icon_name": "icon.r.chemical-science-pack", - "icon_alt_name": "icon.i.chemical-science-pack", + "name": "electric-engine-unit", + "icon_name": "icon.r.electric-engine-unit", + "icon_alt_name": "icon.i.electric-engine-unit", "enabled": false, - "category": "crafting", - "energy": 24, - "order": "d[chemical-science-pack]", - "subgroup": "science-pack", + "category": "crafting-with-fluid", + "energy": 10, + "order": "c[advanced-intermediates]-b[electric-engine-unit]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "sulfur", + "name": "electronic-circuit", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "advanced-circuit", + "name": "engine-unit", "type": "item", - "amount": 3 + "amount": 1 }, { - "name": "engine-unit", - "type": "item", - "amount": 2 + "name": "lubricant", + "type": "fluid", + "amount": 15 } ], "products": [ { - "name": "chemical-science-pack", + "name": "electric-engine-unit", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Chemical science pack" + "localised_name": "Electric engine unit" }, { - "name": "cliff-explosives", - "icon_name": "icon.r.cliff-explosives", - "icon_alt_name": "icon.i.cliff-explosives", + "name": "flying-robot-frame", + "icon_name": "icon.r.flying-robot-frame", + "icon_alt_name": "icon.i.flying-robot-frame", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[cliff-explosives]", - "subgroup": "terrain", + "energy": 20, + "order": "c[advanced-intermediates]-c[flying-robot-frame]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "explosives", + "name": "steel-plate", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "empty-barrel", + "name": "battery", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "grenade", + "name": "electronic-circuit", + "type": "item", + "amount": 3 + }, + { + "name": "electric-engine-unit", "type": "item", "amount": 1 } ], "products": [ { - "name": "cliff-explosives", + "name": "flying-robot-frame", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Cliff explosives" + "localised_name": "Flying robot frame" }, { - "name": "defender-capsule", - "icon_name": "icon.r.defender-capsule", - "icon_alt_name": "icon.i.defender-capsule", + "name": "low-density-structure", + "icon_name": "icon.r.low-density-structure", + "icon_alt_name": "icon.i.low-density-structure", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[defender-capsule]", - "subgroup": "capsule", + "energy": 15, + "order": "d[rocket-parts]-a[low-density-structure]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "copper-plate", "type": "item", - "amount": 3 + "amount": 20 }, { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 3 + "amount": 2 }, { - "name": "piercing-rounds-magazine", + "name": "plastic-bar", "type": "item", - "amount": 3 + "amount": 5 } ], "products": [ { - "name": "defender-capsule", + "name": "low-density-structure", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Defender capsule" + "localised_name": "Low density structure" }, { - "name": "empty-barrel", - "icon_name": "icon.r.empty-barrel", - "icon_alt_name": "icon.i.empty-barrel", + "name": "rocket-fuel", + "icon_name": "icon.r.rocket-fuel", + "icon_alt_name": "icon.i.rocket-fuel", "enabled": false, - "category": "crafting", - "energy": 1, - "order": "d[empty-barrel]", + "category": "crafting-with-fluid", + "energy": 15, + "order": "d[rocket-parts]-b[rocket-fuel]", "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "solid-fuel", "type": "item", - "amount": 1 + "amount": 10 + }, + { + "name": "light-oil", + "type": "fluid", + "amount": 10 } ], "products": [ { - "name": "empty-barrel", + "name": "rocket-fuel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Empty barrel" + "localised_name": "Rocket fuel" }, { - "name": "exoskeleton-equipment", - "icon_name": "icon.r.exoskeleton-equipment", - "icon_alt_name": "icon.i.exoskeleton-equipment", + "name": "rocket-part", + "icon_name": "icon.r.rocket-part", + "icon_alt_name": "icon.i.rocket-part", "enabled": false, - "category": "crafting", - "energy": 10, - "order": "d[exoskeleton]-a[exoskeleton-equipment]", - "subgroup": "equipment", + "category": "rocket-building", + "energy": 3, + "order": "d[rocket-parts]-d[rocket-part]", + "subgroup": "intermediate-product", + "maximum_productivity": 3, + "hide_from_player_crafting": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "processing-unit", "type": "item", - "amount": 20 + "amount": 10 }, { - "name": "processing-unit", + "name": "low-density-structure", "type": "item", "amount": 10 }, { - "name": "electric-engine-unit", + "name": "rocket-fuel", "type": "item", - "amount": 30 + "amount": 10 } ], "products": [ { - "name": "exoskeleton-equipment", + "name": "rocket-part", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Exoskeleton" + "localised_name": "Rocket part" }, { - "name": "explosive-uranium-cannon-shell", - "icon_name": "icon.r.explosive-uranium-cannon-shell", - "icon_alt_name": "icon.i.explosive-uranium-cannon-shell", + "name": "uranium-processing", + "icon_name": "icon.r.uranium-processing", + "icon_alt_name": "icon.i.uranium-235", "enabled": false, - "category": "crafting", + "category": "centrifuging", "energy": 12, - "order": "d[explosive-cannon-shell]-c[uranium]", - "subgroup": "ammo", + "order": "a[uranium-processing]-a[uranium-processing]", + "subgroup": "uranium-processing", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "uranium-238", - "type": "item", - "amount": 1 - }, - { - "name": "explosive-cannon-shell", + "name": "uranium-ore", "type": "item", - "amount": 1 + "amount": 10 } ], "products": [ { - "name": "explosive-uranium-cannon-shell", + "name": "uranium-235", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 0.007000000000000001, + "p_amount": 0.007000000000000001 + }, + { + "name": "uranium-238", + "type": "item", + "amount": 0.993, + "p_amount": 0.993 } ], - "localised_name": "Explosive uranium cannon shell" + "localised_name": "Uranium processing" }, { - "name": "artillery-shell", - "icon_name": "icon.r.artillery-shell", - "icon_alt_name": "icon.i.artillery-shell", + "name": "uranium-fuel-cell", + "icon_name": "icon.r.uranium-fuel-cell", + "icon_alt_name": "icon.i.uranium-fuel-cell", "enabled": false, "category": "crafting", - "energy": 15, - "order": "d[explosive-cannon-shell]-d[artillery]", - "subgroup": "ammo", + "energy": 10, + "order": "b[uranium-products]-a[uranium-fuel-cell]", + "subgroup": "uranium-processing", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "explosives", + "name": "iron-plate", "type": "item", - "amount": 8 + "amount": 10 }, { - "name": "explosive-cannon-shell", + "name": "uranium-235", "type": "item", - "amount": 4 + "amount": 1 }, { - "name": "radar", + "name": "uranium-238", "type": "item", - "amount": 1 + "amount": 19 } ], "products": [ { - "name": "artillery-shell", + "name": "uranium-fuel-cell", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 10, + "p_amount": 10 } ], - "localised_name": "Artillery shell" + "localised_name": "Uranium fuel cell" }, { - "name": "fast-inserter", - "icon_name": "icon.r.fast-inserter", - "icon_alt_name": "icon.i.fast-inserter", + "name": "nuclear-fuel-reprocessing", + "icon_name": "icon.r.nuclear-fuel-reprocessing", + "icon_alt_name": "icon.i.uranium-238", "enabled": false, - "category": "crafting", - "energy": 0.5, - "order": "d[fast-inserter]", - "subgroup": "inserter", + "category": "centrifuging", + "energy": 60, + "order": "b[uranium-products]-b[nuclear-fuel-reprocessing]", + "subgroup": "uranium-processing", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 2 - }, - { - "name": "electronic-circuit", - "type": "item", - "amount": 2 - }, - { - "name": "inserter", + "name": "depleted-uranium-fuel-cell", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "fast-inserter", + "name": "uranium-238", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 3, + "p_amount": 3 } ], - "localised_name": "Fast inserter" + "localised_name": "Nuclear fuel reprocessing" }, { - "name": "loader", - "icon_name": "icon.r.loader", - "icon_alt_name": "icon.i.loader", + "name": "kovarex-enrichment-process", + "icon_name": "icon.r.kovarex-enrichment-process", + "icon_alt_name": "icon.i.uranium-235", "enabled": false, - "category": "crafting", - "energy": 1, - "order": "d[loader]-a[basic-loader]", - "subgroup": "belt", + "category": "centrifuging", + "energy": 60, + "order": "b[uranium-products]-c[kovarex-enrichment-process]", + "subgroup": "uranium-processing", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": false + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 5 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 5 - }, - { - "name": "electronic-circuit", - "type": "item", - "amount": 5 - }, - { - "name": "transport-belt", + "name": "uranium-235", "type": "item", - "amount": 5 + "amount": 40 }, { - "name": "inserter", + "name": "uranium-238", "type": "item", "amount": 5 } ], "products": [ { - "name": "loader", + "name": "uranium-235", "type": "item", - "amount": 1, + "amount": 41, "p_amount": 1 + }, + { + "name": "uranium-238", + "type": "item", + "amount": 2, + "p_amount": 0 } ], - "localised_name": "Loader" + "localised_name": "Kovarex enrichment process" }, { - "name": "fast-loader", - "icon_name": "icon.r.fast-loader", - "icon_alt_name": "icon.i.fast-loader", + "name": "nuclear-fuel", + "icon_name": "icon.r.nuclear-fuel", + "icon_alt_name": "icon.i.nuclear-fuel", "enabled": false, - "category": "crafting", - "energy": 3, - "order": "d[loader]-b[fast-loader]", - "subgroup": "belt", + "category": "centrifuging", + "energy": 90, + "order": "b[uranium-products]-d[nuclear-fuel]", + "subgroup": "uranium-processing", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "fast-transport-belt", + "name": "rocket-fuel", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "loader", + "name": "uranium-235", "type": "item", "amount": 1 } ], "products": [ { - "name": "fast-loader", + "name": "nuclear-fuel", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Fast loader" + "localised_name": "Nuclear fuel" }, { - "name": "express-loader", - "icon_name": "icon.r.express-loader", - "icon_alt_name": "icon.i.express-loader", + "name": "automation-science-pack", + "icon_name": "icon.r.automation-science-pack", + "icon_alt_name": "icon.i.automation-science-pack", "enabled": false, "category": "crafting", - "energy": 10, - "order": "d[loader]-c[express-loader]", - "subgroup": "belt", + "energy": 5, + "order": "a[automation-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "express-transport-belt", + "name": "copper-plate", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "fast-loader", + "name": "iron-gear-wheel", "type": "item", "amount": 1 } ], "products": [ { - "name": "express-loader", + "name": "automation-science-pack", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Express loader" + "localised_name": "Automation science pack" }, { - "name": "power-switch", - "icon_name": "icon.r.power-switch", - "icon_alt_name": "icon.i.power-switch", + "name": "logistic-science-pack", + "icon_name": "icon.r.logistic-science-pack", + "icon_alt_name": "icon.i.logistic-science-pack", "enabled": false, "category": "crafting", - "energy": 2, - "order": "d[other]-a[power-switch]", - "subgroup": "circuit-network", + "energy": 6, + "order": "b[logistic-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 5 - }, - { - "name": "copper-cable", + "name": "transport-belt", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "electronic-circuit", + "name": "inserter", "type": "item", - "amount": 2 + "amount": 1 } ], "products": [ { - "name": "power-switch", + "name": "logistic-science-pack", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Power switch" + "localised_name": "Logistic science pack" }, { - "name": "programmable-speaker", - "icon_name": "icon.r.programmable-speaker", - "icon_alt_name": "icon.i.programmable-speaker", + "name": "military-science-pack", + "icon_name": "icon.r.military-science-pack", + "icon_alt_name": "icon.i.military-science-pack", "enabled": false, "category": "crafting", - "energy": 2, - "order": "d[other]-b[programmable-speaker]", - "subgroup": "circuit-network", + "energy": 10, + "order": "c[military-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", - "type": "item", - "amount": 3 - }, - { - "name": "copper-cable", + "name": "piercing-rounds-magazine", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "iron-stick", + "name": "grenade", "type": "item", - "amount": 4 + "amount": 1 }, { - "name": "electronic-circuit", + "name": "stone-wall", "type": "item", - "amount": 4 + "amount": 2 } ], "products": [ { - "name": "programmable-speaker", + "name": "military-science-pack", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Programmable speaker" + "localised_name": "Military science pack" }, { - "name": "power-armor", - "icon_name": "icon.r.power-armor", - "icon_alt_name": "icon.i.power-armor", + "name": "chemical-science-pack", + "icon_name": "icon.r.chemical-science-pack", + "icon_alt_name": "icon.i.chemical-science-pack", "enabled": false, "category": "crafting", - "energy": 20, - "order": "d[power-armor]", - "subgroup": "armor", + "energy": 24, + "order": "d[chemical-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "sulfur", "type": "item", - "amount": 40 + "amount": 1 }, { - "name": "processing-unit", + "name": "advanced-circuit", "type": "item", - "amount": 40 + "amount": 3 }, { - "name": "electric-engine-unit", + "name": "engine-unit", "type": "item", - "amount": 20 + "amount": 2 } ], "products": [ { - "name": "power-armor", + "name": "chemical-science-pack", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 2, + "p_amount": 2 } ], - "localised_name": "Power armor" + "localised_name": "Chemical science pack" }, { - "name": "radar", - "icon_name": "icon.r.radar", - "icon_alt_name": "icon.i.radar", - "enabled": true, + "name": "production-science-pack", + "icon_name": "icon.r.production-science-pack", + "icon_alt_name": "icon.i.production-science-pack", + "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "d[radar]-a[radar]", - "subgroup": "defensive-structure", + "energy": 21, + "order": "e[production-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "rail", "type": "item", - "amount": 10 + "amount": 30 }, { - "name": "iron-gear-wheel", + "name": "electric-furnace", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "electronic-circuit", + "name": "productivity-module", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "radar", + "name": "production-science-pack", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 3, + "p_amount": 3 } ], - "localised_name": "Radar" + "localised_name": "Production science pack" }, { - "name": "oil-refinery", - "icon_name": "icon.r.oil-refinery", - "icon_alt_name": "icon.i.oil-refinery", + "name": "utility-science-pack", + "icon_name": "icon.r.utility-science-pack", + "icon_alt_name": "icon.i.utility-science-pack", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[refinery]", - "subgroup": "production-machine", + "energy": 21, + "order": "f[utility-science-pack]", + "subgroup": "science-pack", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 15 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 10 - }, - { - "name": "electronic-circuit", + "name": "processing-unit", "type": "item", - "amount": 10 + "amount": 2 }, { - "name": "pipe", + "name": "flying-robot-frame", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "stone-brick", + "name": "low-density-structure", "type": "item", - "amount": 10 + "amount": 3 } ], "products": [ { - "name": "oil-refinery", + "name": "utility-science-pack", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 3, + "p_amount": 3 } ], - "localised_name": "Oil refinery" + "localised_name": "Utility science pack" }, { - "name": "rocket-launcher", - "icon_name": "icon.r.rocket-launcher", - "icon_alt_name": "icon.i.rocket-launcher", + "name": "pistol", + "icon_name": "icon.r.pistol", + "icon_alt_name": "icon.i.pistol", "enabled": false, "category": "crafting", - "energy": 10, - "order": "d[rocket-launcher]", + "energy": 5, + "order": "a[basic-clips]-a[pistol]", "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", @@ -11128,1736 +13393,2539 @@ "amount": 5 }, { - "name": "iron-gear-wheel", - "type": "item", - "amount": 5 - }, - { - "name": "electronic-circuit", + "name": "copper-plate", "type": "item", "amount": 5 } ], "products": [ { - "name": "rocket-launcher", + "name": "pistol", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rocket launcher" + "localised_name": "Pistol" }, { - "name": "rocket", - "icon_name": "icon.r.rocket", - "icon_alt_name": "icon.i.rocket", + "name": "submachine-gun", + "icon_name": "icon.r.submachine-gun", + "icon_alt_name": "icon.i.submachine-gun", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[rocket-launcher]-a[basic]", - "subgroup": "ammo", + "energy": 10, + "order": "a[basic-clips]-b[submachine-gun]", + "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 2 + "amount": 10 }, { - "name": "explosives", + "name": "copper-plate", "type": "item", - "amount": 1 + "amount": 5 }, { - "name": "electronic-circuit", + "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 10 } ], "products": [ { - "name": "rocket", + "name": "submachine-gun", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rocket" + "localised_name": "Submachine gun" }, { - "name": "explosive-rocket", - "icon_name": "icon.r.explosive-rocket", - "icon_alt_name": "icon.i.explosive-rocket", + "name": "shotgun", + "icon_name": "icon.r.shotgun", + "icon_alt_name": "icon.i.shotgun", "enabled": false, "category": "crafting", - "energy": 8, - "order": "d[rocket-launcher]-b[explosive]", - "subgroup": "ammo", + "energy": 10, + "order": "b[shotgun]-a[basic]", + "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "explosives", + "name": "wood", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "rocket", + "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 15 + }, + { + "name": "copper-plate", + "type": "item", + "amount": 10 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "explosive-rocket", + "name": "shotgun", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Explosive rocket" + "localised_name": "Shotgun" }, { - "name": "atomic-bomb", - "icon_name": "icon.r.atomic-bomb", - "icon_alt_name": "icon.i.atomic-bomb", + "name": "combat-shotgun", + "icon_name": "icon.r.combat-shotgun", + "icon_alt_name": "icon.i.combat-shotgun", "enabled": false, "category": "crafting", - "energy": 50, - "order": "d[rocket-launcher]-c[atomic-bomb]", - "subgroup": "ammo", + "energy": 10, + "order": "b[shotgun]-a[combat]", + "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "explosives", + "name": "wood", "type": "item", "amount": 10 }, { - "name": "rocket-control-unit", + "name": "copper-plate", "type": "item", "amount": 10 }, { - "name": "uranium-235", + "name": "steel-plate", "type": "item", - "amount": 30 + "amount": 15 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "atomic-bomb", + "name": "combat-shotgun", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Atomic bomb" + "localised_name": "Combat shotgun" }, { - "name": "solar-panel", - "icon_name": "icon.r.solar-panel", - "icon_alt_name": "icon.i.solar-panel", + "name": "rocket-launcher", + "icon_name": "icon.r.rocket-launcher", + "icon_alt_name": "icon.i.rocket-launcher", "enabled": false, "category": "crafting", - "energy": 10, - "order": "d[solar-panel]-a[solar-panel]", - "subgroup": "energy", + "energy": 10, + "order": "d[rocket-launcher]", + "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "iron-plate", "type": "item", "amount": 5 }, { - "name": "steel-plate", + "name": "iron-gear-wheel", "type": "item", "amount": 5 }, { "name": "electronic-circuit", "type": "item", - "amount": 15 + "amount": 5 } ], "products": [ { - "name": "solar-panel", + "name": "rocket-launcher", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Solar panel" + "localised_name": "Rocket launcher" }, { - "name": "steel-plate", - "icon_name": "icon.r.steel-plate", - "icon_alt_name": "icon.i.steel-plate", + "name": "flamethrower", + "icon_name": "icon.r.flamethrower", + "icon_alt_name": "icon.i.flamethrower", "enabled": false, - "category": "smelting", - "energy": 16, - "order": "d[steel-plate]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 10, + "order": "e[flamethrower]", + "subgroup": "gun", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", "amount": 5 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "steel-plate", + "name": "flamethrower", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Steel plate" + "localised_name": "Flamethrower" }, { - "name": "accumulator", - "icon_name": "icon.r.accumulator", - "icon_alt_name": "icon.i.accumulator", - "enabled": false, + "name": "firearm-magazine", + "icon_name": "icon.r.firearm-magazine", + "icon_alt_name": "icon.i.firearm-magazine", + "enabled": true, "category": "crafting", - "energy": 10, - "order": "e[accumulator]-a[accumulator]", - "subgroup": "energy", + "energy": 1, + "order": "a[basic-clips]-a[firearm-magazine]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 2 - }, - { - "name": "battery", - "type": "item", - "amount": 5 + "amount": 4 } ], "products": [ { - "name": "accumulator", + "name": "firearm-magazine", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Accumulator" + "localised_name": "Firearm magazine" }, { - "name": "chemical-plant", - "icon_name": "icon.r.chemical-plant", - "icon_alt_name": "icon.i.chemical-plant", + "name": "piercing-rounds-magazine", + "icon_name": "icon.r.piercing-rounds-magazine", + "icon_alt_name": "icon.i.piercing-rounds-magazine", "enabled": false, "category": "crafting", - "energy": 5, - "order": "e[chemical-plant]", - "subgroup": "production-machine", + "energy": 3, + "order": "a[basic-clips]-b[piercing-rounds-magazine]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 5 - }, - { - "name": "iron-gear-wheel", + "name": "copper-plate", "type": "item", "amount": 5 }, { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 1 }, { - "name": "pipe", + "name": "firearm-magazine", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "chemical-plant", + "name": "piercing-rounds-magazine", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Chemical plant" + "localised_name": "Piercing rounds magazine" }, { - "name": "distractor-capsule", - "icon_name": "icon.r.distractor-capsule", - "icon_alt_name": "icon.i.distractor-capsule", + "name": "uranium-rounds-magazine", + "icon_name": "icon.r.uranium-rounds-magazine", + "icon_alt_name": "icon.i.uranium-rounds-magazine", "enabled": false, "category": "crafting", - "energy": 15, - "order": "e[defender-capsule]", - "subgroup": "capsule", + "energy": 10, + "order": "a[basic-clips]-c[uranium-rounds-magazine]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "advanced-circuit", + "name": "uranium-238", "type": "item", - "amount": 3 + "amount": 1 }, { - "name": "defender-capsule", + "name": "piercing-rounds-magazine", "type": "item", - "amount": 4 + "amount": 1 } ], "products": [ { - "name": "distractor-capsule", + "name": "uranium-rounds-magazine", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Distractor capsule" + "localised_name": "Uranium rounds magazine" }, { - "name": "electronic-circuit", - "icon_name": "icon.r.electronic-circuit", - "icon_alt_name": "icon.i.electronic-circuit", - "enabled": true, + "name": "shotgun-shell", + "icon_name": "icon.r.shotgun-shell", + "icon_alt_name": "icon.i.shotgun-shell", + "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "e[electronic-circuit]", - "subgroup": "intermediate-product", + "energy": 3, + "order": "b[shotgun]-a[basic]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "copper-cable", + "name": "copper-plate", "type": "item", - "amount": 3 + "amount": 2 } ], "products": [ { - "name": "electronic-circuit", + "name": "shotgun-shell", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Electronic circuit" + "localised_name": "Shotgun shells" }, { - "name": "filter-inserter", - "icon_name": "icon.r.filter-inserter", - "icon_alt_name": "icon.i.filter-inserter", + "name": "piercing-shotgun-shell", + "icon_name": "icon.r.piercing-shotgun-shell", + "icon_alt_name": "icon.i.piercing-shotgun-shell", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "e[filter-inserter]", - "subgroup": "inserter", + "energy": 8, + "order": "b[shotgun]-b[piercing]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "copper-plate", "type": "item", - "amount": 4 + "amount": 5 }, { - "name": "fast-inserter", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 2 + }, + { + "name": "shotgun-shell", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "filter-inserter", + "name": "piercing-shotgun-shell", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Filter inserter" + "localised_name": "Piercing shotgun shells" }, { - "name": "flamethrower", - "icon_name": "icon.r.flamethrower", - "icon_alt_name": "icon.i.flamethrower", + "name": "cannon-shell", + "icon_name": "icon.r.cannon-shell", + "icon_alt_name": "icon.i.cannon-shell", "enabled": false, "category": "crafting", - "energy": 10, - "order": "e[flamethrower]", - "subgroup": "gun", + "energy": 8, + "order": "d[cannon-shell]-a[basic]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 2 }, { - "name": "iron-gear-wheel", + "name": "plastic-bar", "type": "item", - "amount": 10 + "amount": 2 + }, + { + "name": "explosives", + "type": "item", + "amount": 1 } ], "products": [ { - "name": "flamethrower", + "name": "cannon-shell", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Flamethrower" + "localised_name": "Cannon shell" }, { - "name": "flamethrower-ammo", - "icon_name": "icon.r.flamethrower-ammo", - "icon_alt_name": "icon.i.flamethrower-ammo", + "name": "explosive-cannon-shell", + "icon_name": "icon.r.explosive-cannon-shell", + "icon_alt_name": "icon.i.explosive-cannon-shell", "enabled": false, - "category": "chemistry", - "energy": 6, - "order": "e[flamethrower]", + "category": "crafting", + "energy": 8, + "order": "d[cannon-shell]-c[explosive]", "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 5 + "amount": 2 }, { - "name": "crude-oil", - "type": "fluid", - "amount": 100 + "name": "plastic-bar", + "type": "item", + "amount": 2 + }, + { + "name": "explosives", + "type": "item", + "amount": 2 } ], "products": [ { - "name": "flamethrower-ammo", + "name": "explosive-cannon-shell", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Flamethrower ammo" - }, - { - "name": "lubricant", - "icon_name": "icon.r.lubricant", - "icon_alt_name": "icon.i.lubricant", - "enabled": false, - "category": "chemistry", - "energy": 1, - "order": "e[lubricant]", - "subgroup": "fluid-recipes", - "ingredients": [ - { - "name": "heavy-oil", - "type": "fluid", - "amount": 10 - } - ], - "products": [ - { - "name": "lubricant", - "type": "fluid", - "amount": 10, - "p_amount": 10 - } - ], - "localised_name": "Lubricant" + "localised_name": "Explosive cannon shell" }, { - "name": "power-armor-mk2", - "icon_name": "icon.r.power-armor-mk2", - "icon_alt_name": "icon.i.power-armor-mk2", + "name": "uranium-cannon-shell", + "icon_name": "icon.r.uranium-cannon-shell", + "icon_alt_name": "icon.i.uranium-cannon-shell", "enabled": false, "category": "crafting", - "energy": 25, - "order": "e[power-armor-mk2]", - "subgroup": "armor", + "energy": 12, + "order": "d[cannon-shell]-c[uranium]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", + "name": "uranium-238", "type": "item", - "amount": 60 + "amount": 1 }, { - "name": "electric-engine-unit", + "name": "cannon-shell", "type": "item", - "amount": 40 - }, + "amount": 1 + } + ], + "products": [ { - "name": "low-density-structure", + "name": "uranium-cannon-shell", "type": "item", - "amount": 30 - }, + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Uranium cannon shell" + }, + { + "name": "explosive-uranium-cannon-shell", + "icon_name": "icon.r.explosive-uranium-cannon-shell", + "icon_alt_name": "icon.i.explosive-uranium-cannon-shell", + "enabled": false, + "category": "crafting", + "energy": 12, + "order": "d[explosive-cannon-shell]-c[uranium]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ { - "name": "speed-module-2", + "name": "uranium-238", "type": "item", - "amount": 25 + "amount": 1 }, { - "name": "effectivity-module-2", + "name": "explosive-cannon-shell", "type": "item", - "amount": 25 + "amount": 1 } ], "products": [ { - "name": "power-armor-mk2", + "name": "explosive-uranium-cannon-shell", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Power armor MK2" + "localised_name": "Explosive uranium cannon shell" }, { - "name": "production-science-pack", - "icon_name": "icon.r.production-science-pack", - "icon_alt_name": "icon.i.production-science-pack", + "name": "artillery-shell", + "icon_name": "icon.r.artillery-shell", + "icon_alt_name": "icon.i.artillery-shell", "enabled": false, "category": "crafting", - "energy": 21, - "order": "e[production-science-pack]", - "subgroup": "science-pack", + "energy": 15, + "order": "d[explosive-cannon-shell]-d[artillery]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "rail", + "name": "explosives", "type": "item", - "amount": 30 + "amount": 8 }, { - "name": "electric-furnace", + "name": "explosive-cannon-shell", "type": "item", - "amount": 1 + "amount": 4 }, { - "name": "productivity-module", + "name": "radar", "type": "item", "amount": 1 } ], "products": [ { - "name": "production-science-pack", + "name": "artillery-shell", "type": "item", - "amount": 3, - "p_amount": 3 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Production science pack" + "localised_name": "Artillery shell" }, { - "name": "personal-roboport-equipment", - "icon_name": "icon.r.personal-roboport-equipment", - "icon_alt_name": "icon.i.personal-roboport-equipment", + "name": "rocket", + "icon_name": "icon.r.rocket", + "icon_alt_name": "icon.i.rocket", "enabled": false, "category": "crafting", - "energy": 10, - "order": "e[robotics]-a[personal-roboport-equipment]", - "subgroup": "equipment", + "energy": 4, + "order": "d[rocket-launcher]-a[basic]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-plate", "type": "item", - "amount": 20 + "amount": 2 }, { - "name": "battery", + "name": "explosives", "type": "item", - "amount": 45 - }, + "amount": 1 + } + ], + "products": [ { - "name": "iron-gear-wheel", + "name": "rocket", "type": "item", - "amount": 40 + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Rocket" + }, + { + "name": "explosive-rocket", + "icon_name": "icon.r.explosive-rocket", + "icon_alt_name": "icon.i.explosive-rocket", + "enabled": false, + "category": "crafting", + "energy": 8, + "order": "d[rocket-launcher]-b[explosive]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ + { + "name": "explosives", + "type": "item", + "amount": 2 }, { - "name": "advanced-circuit", + "name": "rocket", "type": "item", - "amount": 10 + "amount": 1 } ], "products": [ { - "name": "personal-roboport-equipment", + "name": "explosive-rocket", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Personal roboport" + "localised_name": "Explosive rocket" }, { - "name": "personal-roboport-mk2-equipment", - "icon_name": "icon.r.personal-roboport-mk2-equipment", - "icon_alt_name": "icon.i.personal-roboport-mk2-equipment", + "name": "atomic-bomb", + "icon_name": "icon.r.atomic-bomb", + "icon_alt_name": "icon.i.atomic-bomb", "enabled": false, "category": "crafting", - "energy": 20, - "order": "e[robotics]-b[personal-roboport-mk2-equipment]", - "subgroup": "equipment", + "energy": 50, + "order": "d[rocket-launcher]-d[atomic-bomb]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", + "name": "explosives", "type": "item", - "amount": 100 + "amount": 10 }, { - "name": "low-density-structure", + "name": "processing-unit", "type": "item", - "amount": 20 + "amount": 10 }, { - "name": "personal-roboport-equipment", + "name": "uranium-235", "type": "item", - "amount": 5 + "amount": 30 } ], "products": [ { - "name": "personal-roboport-mk2-equipment", + "name": "atomic-bomb", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Personal roboport MK2" + "localised_name": "Atomic bomb" }, { - "name": "rocket-silo", - "icon_name": "icon.r.rocket-silo", - "icon_alt_name": "icon.i.rocket-silo", + "name": "flamethrower-ammo", + "icon_name": "icon.r.flamethrower-ammo", + "icon_alt_name": "icon.i.flamethrower-ammo", "enabled": false, - "category": "crafting", - "energy": 30, - "order": "e[rocket-silo]", - "subgroup": "space-related", + "category": "chemistry", + "energy": 6, + "order": "e[flamethrower]", + "subgroup": "ammo", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 1000 + "amount": 5 }, { - "name": "processing-unit", - "type": "item", - "amount": 200 - }, + "name": "crude-oil", + "type": "fluid", + "amount": 100 + } + ], + "products": [ { - "name": "electric-engine-unit", + "name": "flamethrower-ammo", "type": "item", - "amount": 200 - }, + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Flamethrower ammo" + }, + { + "name": "grenade", + "icon_name": "icon.r.grenade", + "icon_alt_name": "icon.i.grenade", + "enabled": false, + "category": "crafting", + "energy": 8, + "order": "a[grenade]-a[normal]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ { - "name": "pipe", + "name": "coal", "type": "item", - "amount": 100 + "amount": 10 }, { - "name": "concrete", + "name": "iron-plate", "type": "item", - "amount": 1000 + "amount": 5 } ], "products": [ { - "name": "rocket-silo", + "name": "grenade", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rocket silo" + "localised_name": "Grenade" }, { - "name": "advanced-circuit", - "icon_name": "icon.r.advanced-circuit", - "icon_alt_name": "icon.i.advanced-circuit", + "name": "cluster-grenade", + "icon_name": "icon.r.cluster-grenade", + "icon_alt_name": "icon.i.cluster-grenade", "enabled": false, "category": "crafting", - "energy": 6, - "order": "f[advanced-circuit]", - "subgroup": "intermediate-product", + "energy": 8, + "order": "a[grenade]-b[cluster]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "plastic-bar", + "name": "steel-plate", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "copper-cable", + "name": "explosives", "type": "item", - "amount": 4 + "amount": 5 }, { - "name": "electronic-circuit", + "name": "grenade", "type": "item", - "amount": 2 + "amount": 7 } ], "products": [ { - "name": "advanced-circuit", + "name": "cluster-grenade", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Advanced circuit" + "localised_name": "Cluster grenade" }, { - "name": "destroyer-capsule", - "icon_name": "icon.r.destroyer-capsule", - "icon_alt_name": "icon.i.destroyer-capsule", + "name": "poison-capsule", + "icon_name": "icon.r.poison-capsule", + "icon_alt_name": "icon.i.poison-capsule", "enabled": false, "category": "crafting", - "energy": 15, - "order": "f[destroyer-capsule]", + "energy": 8, + "order": "b[poison-capsule]", "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "speed-module", + "name": "coal", + "type": "item", + "amount": 10 + }, + { + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 3 }, { - "name": "distractor-capsule", + "name": "electronic-circuit", "type": "item", - "amount": 4 + "amount": 3 } ], "products": [ { - "name": "destroyer-capsule", + "name": "poison-capsule", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Destroyer capsule" + "localised_name": "Poison capsule" }, { - "name": "land-mine", - "icon_name": "icon.r.land-mine", - "icon_alt_name": "icon.i.land-mine", + "name": "slowdown-capsule", + "icon_name": "icon.r.slowdown-capsule", + "icon_alt_name": "icon.i.slowdown-capsule", "enabled": false, "category": "crafting", - "energy": 5, - "order": "f[land-mine]", - "subgroup": "gun", + "energy": 8, + "order": "c[slowdown-capsule]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ + { + "name": "coal", + "type": "item", + "amount": 5 + }, { "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 2 }, { - "name": "explosives", + "name": "electronic-circuit", "type": "item", "amount": 2 } ], "products": [ { - "name": "land-mine", + "name": "slowdown-capsule", "type": "item", - "amount": 4, - "p_amount": 4 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Land mine" + "localised_name": "Slowdown capsule" }, { - "name": "night-vision-equipment", - "icon_name": "icon.r.night-vision-equipment", - "icon_alt_name": "icon.i.night-vision-equipment", + "name": "defender-capsule", + "icon_name": "icon.r.defender-capsule", + "icon_alt_name": "icon.i.defender-capsule", "enabled": false, "category": "crafting", - "energy": 10, - "order": "f[night-vision]-a[night-vision-equipment]", - "subgroup": "equipment", + "energy": 8, + "order": "d[defender-capsule]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", + "name": "iron-gear-wheel", "type": "item", - "amount": 10 + "amount": 3 }, { - "name": "advanced-circuit", + "name": "electronic-circuit", "type": "item", - "amount": 5 + "amount": 3 + }, + { + "name": "piercing-rounds-magazine", + "type": "item", + "amount": 3 } ], "products": [ { - "name": "night-vision-equipment", + "name": "defender-capsule", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Nightvision" + "localised_name": "Defender capsule" }, { - "name": "nuclear-reactor", - "icon_name": "icon.r.nuclear-reactor", - "icon_alt_name": "icon.i.nuclear-reactor", + "name": "distractor-capsule", + "icon_name": "icon.r.distractor-capsule", + "icon_alt_name": "icon.i.distractor-capsule", "enabled": false, "category": "crafting", - "energy": 8, - "order": "f[nuclear-energy]-a[reactor]", - "subgroup": "energy", + "energy": 15, + "order": "e[defender-capsule]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ - { - "name": "copper-plate", - "type": "item", - "amount": 500 - }, - { - "name": "steel-plate", - "type": "item", - "amount": 500 - }, { "name": "advanced-circuit", "type": "item", - "amount": 500 + "amount": 3 }, { - "name": "concrete", + "name": "defender-capsule", "type": "item", - "amount": 500 + "amount": 4 } ], "products": [ { - "name": "nuclear-reactor", + "name": "distractor-capsule", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Nuclear reactor" + "localised_name": "Distractor capsule" }, { - "name": "heat-pipe", - "icon_name": "icon.r.heat-pipe", - "icon_alt_name": "icon.i.heat-pipe", + "name": "destroyer-capsule", + "icon_name": "icon.r.destroyer-capsule", + "icon_alt_name": "icon.i.destroyer-capsule", "enabled": false, "category": "crafting", - "energy": 1, - "order": "f[nuclear-energy]-b[heat-pipe]", - "subgroup": "energy", + "energy": 15, + "order": "f[destroyer-capsule]", + "subgroup": "capsule", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "speed-module", "type": "item", - "amount": 20 + "amount": 1 }, { - "name": "steel-plate", + "name": "distractor-capsule", "type": "item", - "amount": 10 + "amount": 4 } ], "products": [ { - "name": "heat-pipe", + "name": "destroyer-capsule", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Heat pipe" + "localised_name": "Destroyer capsule" }, { - "name": "heat-exchanger", - "icon_name": "icon.r.heat-exchanger", - "icon_alt_name": "icon.i.heat-exchanger", - "enabled": false, + "name": "light-armor", + "icon_name": "icon.r.light-armor", + "icon_alt_name": "icon.i.light-armor", + "enabled": true, "category": "crafting", "energy": 3, - "order": "f[nuclear-energy]-c[heat-exchanger]", - "subgroup": "energy", + "order": "a[light-armor]", + "subgroup": "armor", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", - "type": "item", - "amount": 100 - }, - { - "name": "steel-plate", - "type": "item", - "amount": 10 - }, - { - "name": "pipe", + "name": "iron-plate", "type": "item", - "amount": 10 + "amount": 40 } ], "products": [ { - "name": "heat-exchanger", + "name": "light-armor", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Heat exchanger" + "localised_name": "Light armor" }, { - "name": "steam-turbine", - "icon_name": "icon.r.steam-turbine", - "icon_alt_name": "icon.i.steam-turbine", + "name": "heavy-armor", + "icon_name": "icon.r.heavy-armor", + "icon_alt_name": "icon.i.heavy-armor", "enabled": false, "category": "crafting", - "energy": 3, - "order": "f[nuclear-energy]-d[steam-turbine]", - "subgroup": "energy", + "energy": 8, + "order": "b[heavy-armor]", + "subgroup": "armor", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "copper-plate", "type": "item", - "amount": 50 + "amount": 100 }, { - "name": "iron-gear-wheel", + "name": "steel-plate", "type": "item", "amount": 50 - }, - { - "name": "pipe", - "type": "item", - "amount": 20 } ], "products": [ { - "name": "steam-turbine", + "name": "heavy-armor", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Steam turbine" + "localised_name": "Heavy armor" }, { - "name": "plastic-bar", - "icon_name": "icon.r.plastic-bar", - "icon_alt_name": "icon.i.plastic-bar", + "name": "modular-armor", + "icon_name": "icon.r.modular-armor", + "icon_alt_name": "icon.i.modular-armor", "enabled": false, - "category": "chemistry", - "energy": 1, - "order": "f[plastic-bar]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 15, + "order": "c[modular-armor]", + "subgroup": "armor", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 50 }, { - "name": "petroleum-gas", - "type": "fluid", - "amount": 20 + "name": "advanced-circuit", + "type": "item", + "amount": 30 } ], "products": [ { - "name": "plastic-bar", + "name": "modular-armor", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Plastic bar" + "localised_name": "Modular armor" }, { - "name": "stack-inserter", - "icon_name": "icon.r.stack-inserter", - "icon_alt_name": "icon.i.stack-inserter", + "name": "power-armor", + "icon_name": "icon.r.power-armor", + "icon_alt_name": "icon.i.power-armor", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "f[stack-inserter]", - "subgroup": "inserter", + "energy": 20, + "order": "d[power-armor]", + "subgroup": "armor", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", - "type": "item", - "amount": 15 - }, - { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 15 + "amount": 40 }, { - "name": "advanced-circuit", + "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 40 }, { - "name": "fast-inserter", + "name": "electric-engine-unit", "type": "item", - "amount": 1 + "amount": 20 } ], "products": [ { - "name": "stack-inserter", + "name": "power-armor", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Stack inserter" + "localised_name": "Power armor" }, { - "name": "utility-science-pack", - "icon_name": "icon.r.utility-science-pack", - "icon_alt_name": "icon.i.utility-science-pack", + "name": "power-armor-mk2", + "icon_name": "icon.r.power-armor-mk2", + "icon_alt_name": "icon.i.power-armor-mk2", "enabled": false, "category": "crafting", - "energy": 21, - "order": "f[utility-science-pack]", - "subgroup": "science-pack", + "energy": 25, + "order": "e[power-armor-mk2]", + "subgroup": "armor", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", + "name": "processing-unit", + "type": "item", + "amount": 60 + }, + { + "name": "electric-engine-unit", + "type": "item", + "amount": 40 + }, + { + "name": "low-density-structure", "type": "item", - "amount": 2 + "amount": 30 }, { - "name": "flying-robot-frame", + "name": "speed-module-2", "type": "item", - "amount": 1 + "amount": 25 }, { - "name": "low-density-structure", + "name": "efficiency-module-2", "type": "item", - "amount": 3 + "amount": 25 } ], "products": [ { - "name": "utility-science-pack", + "name": "power-armor-mk2", "type": "item", - "amount": 3, - "p_amount": 3 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Utility science pack" + "localised_name": "Power armor MK2" }, { - "name": "centrifuge", - "icon_name": "icon.r.centrifuge", - "icon_alt_name": "icon.i.centrifuge", + "name": "solar-panel-equipment", + "icon_name": "icon.r.solar-panel-equipment", + "icon_alt_name": "icon.i.solar-panel-equipment", "enabled": false, "category": "crafting", - "energy": 4, - "order": "g[centrifuge]", - "subgroup": "production-machine", + "energy": 10, + "order": "a[energy-source]-a[solar-panel]", + "subgroup": "equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 50 - }, - { - "name": "iron-gear-wheel", - "type": "item", - "amount": 100 + "amount": 5 }, { "name": "advanced-circuit", "type": "item", - "amount": 100 + "amount": 2 }, { - "name": "concrete", + "name": "solar-panel", "type": "item", - "amount": 100 + "amount": 1 } ], "products": [ { - "name": "centrifuge", + "name": "solar-panel-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Centrifuge" + "localised_name": "Portable solar panel" }, { - "name": "lab", - "icon_name": "icon.r.lab", - "icon_alt_name": "icon.i.lab", - "enabled": true, + "name": "fission-reactor-equipment", + "icon_name": "icon.r.fission-reactor-equipment", + "icon_alt_name": "icon.i.fission-reactor-equipment", + "enabled": false, "category": "crafting", - "energy": 2, - "order": "g[lab]", - "subgroup": "production-machine", + "energy": 10, + "order": "a[energy-source]-b[fission-reactor]", + "subgroup": "equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-gear-wheel", + "name": "processing-unit", "type": "item", - "amount": 10 + "amount": 200 }, { - "name": "electronic-circuit", + "name": "low-density-structure", "type": "item", - "amount": 10 + "amount": 50 }, { - "name": "transport-belt", + "name": "uranium-fuel-cell", "type": "item", "amount": 4 } ], "products": [ { - "name": "lab", + "name": "fission-reactor-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Lab" + "localised_name": "Portable fission reactor" }, { - "name": "processing-unit", - "icon_name": "icon.r.processing-unit", - "icon_alt_name": "icon.i.processing-unit", + "name": "battery-equipment", + "icon_name": "icon.r.battery-equipment", + "icon_alt_name": "icon.i.battery-equipment", "enabled": false, - "category": "crafting-with-fluid", + "category": "crafting", "energy": 10, - "order": "g[processing-unit]", - "subgroup": "intermediate-product", + "order": "b[battery]-a[battery-equipment]", + "subgroup": "equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "steel-plate", "type": "item", - "amount": 20 + "amount": 10 }, { - "name": "advanced-circuit", + "name": "battery", "type": "item", - "amount": 2 - }, - { - "name": "sulfuric-acid", - "type": "fluid", "amount": 5 } ], "products": [ { - "name": "processing-unit", + "name": "battery-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Processing unit" + "localised_name": "Personal battery" }, { - "name": "stack-filter-inserter", - "icon_name": "icon.r.stack-filter-inserter", - "icon_alt_name": "icon.i.stack-filter-inserter", + "name": "battery-mk2-equipment", + "icon_name": "icon.r.battery-mk2-equipment", + "icon_alt_name": "icon.i.battery-mk2-equipment", "enabled": false, "category": "crafting", - "energy": 0.5, - "order": "g[stack-filter-inserter]", - "subgroup": "inserter", + "energy": 10, + "order": "b[battery]-b[battery-equipment-mk2]", + "subgroup": "equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "processing-unit", + "type": "item", + "amount": 15 + }, + { + "name": "low-density-structure", "type": "item", "amount": 5 }, { - "name": "stack-inserter", + "name": "battery-equipment", "type": "item", - "amount": 1 + "amount": 10 } ], "products": [ { - "name": "stack-filter-inserter", + "name": "battery-mk2-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Stack filter inserter" + "localised_name": "Personal battery MK2" }, { - "name": "sulfur", - "icon_name": "icon.r.sulfur", - "icon_alt_name": "icon.i.sulfur", + "name": "belt-immunity-equipment", + "icon_name": "icon.r.belt-immunity-equipment", + "icon_alt_name": "icon.i.belt-immunity-equipment", "enabled": false, - "category": "chemistry", - "energy": 1, - "order": "g[sulfur]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 10, + "order": "c[belt-immunity]-a[belt-immunity]", + "subgroup": "utility-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "water", - "type": "fluid", - "amount": 30 + "name": "steel-plate", + "type": "item", + "amount": 10 }, { - "name": "petroleum-gas", - "type": "fluid", - "amount": 30 + "name": "advanced-circuit", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "sulfur", + "name": "belt-immunity-equipment", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Sulfur" + "localised_name": "Belt immunity equipment" }, { - "name": "battery", - "icon_name": "icon.r.battery", - "icon_alt_name": "icon.i.battery", + "name": "exoskeleton-equipment", + "icon_name": "icon.r.exoskeleton-equipment", + "icon_alt_name": "icon.i.exoskeleton-equipment", "enabled": false, - "category": "chemistry", - "energy": 4, - "order": "h[battery]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 10, + "order": "d[exoskeleton]-a[exoskeleton-equipment]", + "subgroup": "utility-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 20 }, { - "name": "copper-plate", + "name": "processing-unit", "type": "item", - "amount": 1 + "amount": 10 }, { - "name": "sulfuric-acid", - "type": "fluid", - "amount": 20 + "name": "electric-engine-unit", + "type": "item", + "amount": 30 } ], "products": [ { - "name": "battery", + "name": "exoskeleton-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Battery" + "localised_name": "Exoskeleton" }, { - "name": "engine-unit", - "icon_name": "icon.r.engine-unit", - "icon_alt_name": "icon.i.engine-unit", + "name": "personal-roboport-equipment", + "icon_name": "icon.r.personal-roboport-equipment", + "icon_alt_name": "icon.i.personal-roboport-equipment", "enabled": false, - "category": "advanced-crafting", + "category": "crafting", "energy": 10, - "order": "h[engine-unit]", - "subgroup": "intermediate-product", + "order": "e[robotics]-a[personal-roboport-equipment]", + "subgroup": "utility-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 20 + }, + { + "name": "battery", + "type": "item", + "amount": 45 }, { "name": "iron-gear-wheel", "type": "item", - "amount": 1 + "amount": 40 }, { - "name": "pipe", + "name": "advanced-circuit", "type": "item", - "amount": 2 + "amount": 10 } ], "products": [ { - "name": "engine-unit", + "name": "personal-roboport-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Engine unit" + "localised_name": "Personal roboport" }, { - "name": "electric-engine-unit", - "icon_name": "icon.r.electric-engine-unit", - "icon_alt_name": "icon.i.electric-engine-unit", + "name": "personal-roboport-mk2-equipment", + "icon_name": "icon.r.personal-roboport-mk2-equipment", + "icon_alt_name": "icon.i.personal-roboport-mk2-equipment", "enabled": false, - "category": "crafting-with-fluid", - "energy": 10, - "order": "i[electric-engine-unit]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 20, + "order": "e[robotics]-b[personal-roboport-mk2-equipment]", + "subgroup": "utility-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "electronic-circuit", + "name": "processing-unit", "type": "item", - "amount": 2 + "amount": 100 }, { - "name": "engine-unit", + "name": "low-density-structure", "type": "item", - "amount": 1 + "amount": 20 }, { - "name": "lubricant", - "type": "fluid", - "amount": 15 + "name": "personal-roboport-equipment", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "electric-engine-unit", + "name": "personal-roboport-mk2-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Electric engine unit" + "localised_name": "Personal roboport MK2" }, { - "name": "explosives", - "icon_name": "icon.r.explosives", - "icon_alt_name": "icon.i.explosives", + "name": "night-vision-equipment", + "icon_name": "icon.r.night-vision-equipment", + "icon_alt_name": "icon.i.night-vision-equipment", "enabled": false, - "category": "chemistry", - "energy": 4, - "order": "j[explosives]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 10, + "order": "f[night-vision]-a[night-vision-equipment]", + "subgroup": "utility-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "coal", - "type": "item", - "amount": 1 - }, - { - "name": "sulfur", + "name": "steel-plate", "type": "item", - "amount": 1 + "amount": 10 }, { - "name": "water", - "type": "fluid", - "amount": 10 + "name": "advanced-circuit", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "explosives", + "name": "night-vision-equipment", "type": "item", - "amount": 2, - "p_amount": 2 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Explosives" + "localised_name": "Nightvision" }, { - "name": "uranium-processing", - "icon_name": "icon.r.uranium-processing", - "icon_alt_name": "icon.i.uranium-235", + "name": "energy-shield-equipment", + "icon_name": "icon.r.energy-shield-equipment", + "icon_alt_name": "icon.i.energy-shield-equipment", "enabled": false, - "category": "centrifuging", - "energy": 12, - "order": "k[uranium-processing]", - "subgroup": "raw-material", + "category": "crafting", + "energy": 10, + "order": "a[shield]-a[energy-shield-equipment]", + "subgroup": "military-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "uranium-ore", + "name": "steel-plate", "type": "item", "amount": 10 + }, + { + "name": "advanced-circuit", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "uranium-235", - "type": "item", - "amount": 0.007000000000000001, - "p_amount": 0.007000000000000001 - }, - { - "name": "uranium-238", + "name": "energy-shield-equipment", "type": "item", - "amount": 0.993, - "p_amount": 0.993 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Uranium processing" + "localised_name": "Energy shield" }, { - "name": "flying-robot-frame", - "icon_name": "icon.r.flying-robot-frame", - "icon_alt_name": "icon.i.flying-robot-frame", + "name": "energy-shield-mk2-equipment", + "icon_name": "icon.r.energy-shield-mk2-equipment", + "icon_alt_name": "icon.i.energy-shield-mk2-equipment", "enabled": false, "category": "crafting", - "energy": 20, - "order": "l[flying-robot-frame]", - "subgroup": "intermediate-product", + "energy": 10, + "order": "a[shield]-b[energy-shield-equipment-mk2]", + "subgroup": "military-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "steel-plate", - "type": "item", - "amount": 1 - }, - { - "name": "battery", + "name": "processing-unit", "type": "item", - "amount": 2 + "amount": 5 }, { - "name": "electronic-circuit", + "name": "low-density-structure", "type": "item", - "amount": 3 + "amount": 5 }, { - "name": "electric-engine-unit", + "name": "energy-shield-equipment", "type": "item", - "amount": 1 + "amount": 10 } ], "products": [ { - "name": "flying-robot-frame", + "name": "energy-shield-mk2-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Flying robot frame" + "localised_name": "Energy shield MK2" }, { - "name": "satellite", - "icon_name": "icon.r.satellite", - "icon_alt_name": "icon.i.satellite", + "name": "personal-laser-defense-equipment", + "icon_name": "icon.r.personal-laser-defense-equipment", + "icon_alt_name": "icon.i.personal-laser-defense-equipment", "enabled": false, "category": "crafting", - "energy": 5, - "order": "m[satellite]", - "subgroup": "space-related", + "energy": 10, + "order": "b[active-defense]-a[personal-laser-defense-equipment]", + "subgroup": "military-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { "name": "processing-unit", "type": "item", - "amount": 100 + "amount": 20 }, { "name": "low-density-structure", "type": "item", - "amount": 100 + "amount": 5 }, { - "name": "rocket-fuel", + "name": "laser-turret", "type": "item", - "amount": 50 - }, + "amount": 5 + } + ], + "products": [ { - "name": "solar-panel", + "name": "personal-laser-defense-equipment", "type": "item", - "amount": 100 - }, + "amount": 1, + "p_amount": 1 + } + ], + "localised_name": "Personal laser defense" + }, + { + "name": "discharge-defense-equipment", + "icon_name": "icon.r.discharge-defense-equipment", + "icon_alt_name": "icon.i.discharge-defense-equipment", + "enabled": false, + "category": "crafting", + "energy": 10, + "order": "b[active-defense]-b[discharge-defense-equipment]-a[equipment]", + "subgroup": "military-equipment", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": [ { - "name": "accumulator", + "name": "steel-plate", "type": "item", - "amount": 100 + "amount": 20 }, { - "name": "radar", + "name": "processing-unit", "type": "item", "amount": 5 + }, + { + "name": "laser-turret", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "satellite", + "name": "discharge-defense-equipment", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Satellite" + "localised_name": "Discharge defense" }, { - "name": "rocket-control-unit", - "icon_name": "icon.r.rocket-control-unit", - "icon_alt_name": "icon.i.rocket-control-unit", + "name": "stone-wall", + "icon_name": "icon.r.stone-wall", + "icon_alt_name": "icon.i.stone-wall", "enabled": false, "category": "crafting", - "energy": 30, - "order": "n[rocket-control-unit]", - "subgroup": "intermediate-product", + "energy": 0.5, + "order": "a[stone-wall]-a[stone-wall]", + "subgroup": "defensive-structure", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "processing-unit", - "type": "item", - "amount": 1 - }, - { - "name": "speed-module", + "name": "stone-brick", "type": "item", - "amount": 1 + "amount": 5 } ], "products": [ { - "name": "rocket-control-unit", + "name": "stone-wall", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rocket control unit" + "localised_name": "Wall" }, { - "name": "low-density-structure", - "icon_name": "icon.r.low-density-structure", - "icon_alt_name": "icon.i.low-density-structure", + "name": "gate", + "icon_name": "icon.r.gate", + "icon_alt_name": "icon.i.gate", "enabled": false, "category": "crafting", - "energy": 20, - "order": "o[low-density-structure]", - "subgroup": "intermediate-product", + "energy": 0.5, + "order": "a[wall]-b[gate]", + "subgroup": "defensive-structure", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "copper-plate", + "name": "steel-plate", "type": "item", - "amount": 20 + "amount": 2 }, { - "name": "steel-plate", + "name": "electronic-circuit", "type": "item", "amount": 2 }, { - "name": "plastic-bar", + "name": "stone-wall", "type": "item", - "amount": 5 + "amount": 1 } ], "products": [ { - "name": "low-density-structure", + "name": "gate", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Low density structure" + "localised_name": "Gate" }, { - "name": "rocket-fuel", - "icon_name": "icon.r.rocket-fuel", - "icon_alt_name": "icon.i.rocket-fuel", + "name": "radar", + "icon_name": "icon.r.radar", + "icon_alt_name": "icon.i.radar", "enabled": false, - "category": "crafting-with-fluid", - "energy": 30, - "order": "p[rocket-fuel]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 0.5, + "order": "d[radar]-a[radar]", + "subgroup": "defensive-structure", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "solid-fuel", + "name": "iron-plate", "type": "item", "amount": 10 }, { - "name": "light-oil", - "type": "fluid", - "amount": 10 + "name": "iron-gear-wheel", + "type": "item", + "amount": 5 + }, + { + "name": "electronic-circuit", + "type": "item", + "amount": 5 } ], "products": [ { - "name": "rocket-fuel", + "name": "radar", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Rocket fuel" + "localised_name": "Radar" }, { - "name": "rocket-part", - "icon_name": "icon.r.rocket-part", - "icon_alt_name": "icon.i.rocket-part", + "name": "land-mine", + "icon_name": "icon.r.land-mine", + "icon_alt_name": "icon.i.land-mine", "enabled": false, - "category": "rocket-building", - "energy": 3, - "order": "q[rocket-part]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 5, + "order": "f[land-mine]", + "subgroup": "defensive-structure", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "rocket-control-unit", - "type": "item", - "amount": 10 - }, - { - "name": "low-density-structure", + "name": "steel-plate", "type": "item", - "amount": 10 + "amount": 1 }, { - "name": "rocket-fuel", + "name": "explosives", "type": "item", - "amount": 10 + "amount": 2 } ], "products": [ { - "name": "rocket-part", + "name": "land-mine", "type": "item", - "amount": 1, - "p_amount": 1 + "amount": 4, + "p_amount": 4 } ], - "localised_name": "Rocket part" + "localised_name": "Land mine" }, { - "name": "nuclear-fuel", - "icon_name": "icon.r.nuclear-fuel", - "icon_alt_name": "icon.i.nuclear-fuel", + "name": "gun-turret", + "icon_name": "icon.r.gun-turret", + "icon_alt_name": "icon.i.gun-turret", "enabled": false, - "category": "centrifuging", - "energy": 90, - "order": "q[uranium-rocket-fuel]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 8, + "order": "b[turret]-a[gun-turret]", + "subgroup": "turret", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "rocket-fuel", + "name": "iron-plate", "type": "item", - "amount": 1 + "amount": 20 }, { - "name": "uranium-235", + "name": "copper-plate", "type": "item", - "amount": 1 + "amount": 10 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "nuclear-fuel", + "name": "gun-turret", "type": "item", "amount": 1, "p_amount": 1 } ], - "localised_name": "Nuclear fuel" + "localised_name": "Gun turret" }, { - "name": "uranium-fuel-cell", - "icon_name": "icon.r.uranium-fuel-cell", - "icon_alt_name": "icon.i.uranium-fuel-cell", + "name": "laser-turret", + "icon_name": "icon.r.laser-turret", + "icon_alt_name": "icon.i.laser-turret", "enabled": false, "category": "crafting", - "energy": 10, - "order": "r[uranium-processing]-a[uranium-fuel-cell]", - "subgroup": "intermediate-product", + "energy": 20, + "order": "b[turret]-b[laser-turret]", + "subgroup": "turret", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "iron-plate", + "name": "steel-plate", "type": "item", - "amount": 10 + "amount": 20 }, { - "name": "uranium-235", + "name": "battery", "type": "item", - "amount": 1 + "amount": 12 }, { - "name": "uranium-238", + "name": "electronic-circuit", "type": "item", - "amount": 19 + "amount": 20 } ], "products": [ { - "name": "uranium-fuel-cell", + "name": "laser-turret", "type": "item", - "amount": 10, - "p_amount": 10 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Uranium fuel cell" + "localised_name": "Laser turret" }, { - "name": "nuclear-fuel-reprocessing", - "icon_name": "icon.r.nuclear-fuel-reprocessing", - "icon_alt_name": "icon.i.uranium-238", + "name": "flamethrower-turret", + "icon_name": "icon.r.flamethrower-turret", + "icon_alt_name": "icon.i.flamethrower-turret", "enabled": false, - "category": "centrifuging", - "energy": 60, - "order": "r[uranium-processing]-b[nuclear-fuel-reprocessing]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 20, + "order": "b[turret]-c[flamethrower-turret]", + "subgroup": "turret", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "used-up-uranium-fuel-cell", + "name": "steel-plate", + "type": "item", + "amount": 30 + }, + { + "name": "iron-gear-wheel", + "type": "item", + "amount": 15 + }, + { + "name": "engine-unit", "type": "item", "amount": 5 + }, + { + "name": "pipe", + "type": "item", + "amount": 10 } ], "products": [ { - "name": "uranium-238", + "name": "flamethrower-turret", "type": "item", - "amount": 3, - "p_amount": 3 + "amount": 1, + "p_amount": 1 } ], - "localised_name": "Nuclear fuel reprocessing" + "localised_name": "Flamethrower turret" }, { - "name": "kovarex-enrichment-process", - "icon_name": "icon.r.kovarex-enrichment-process", - "icon_alt_name": "icon.i.uranium-235", + "name": "artillery-turret", + "icon_name": "icon.r.artillery-turret", + "icon_alt_name": "icon.i.artillery-turret", "enabled": false, - "category": "centrifuging", - "energy": 60, - "order": "r[uranium-processing]-c[kovarex-enrichment-process]", - "subgroup": "intermediate-product", + "category": "crafting", + "energy": 40, + "order": "b[turret]-d[artillery-turret]-a[turret]", + "subgroup": "turret", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, "ingredients": [ { - "name": "uranium-235", + "name": "steel-plate", + "type": "item", + "amount": 60 + }, + { + "name": "iron-gear-wheel", "type": "item", "amount": 40 }, { - "name": "uranium-238", + "name": "advanced-circuit", "type": "item", - "amount": 5 + "amount": 20 + }, + { + "name": "concrete", + "type": "item", + "amount": 60 } ], "products": [ { - "name": "uranium-235", + "name": "artillery-turret", "type": "item", - "amount": 41, + "amount": 1, "p_amount": 1 - }, - { - "name": "uranium-238", - "type": "item", - "amount": 2, - "p_amount": 0 } ], - "localised_name": "Kovarex enrichment process" + "localised_name": "Artillery turret" + }, + { + "name": "parameter-0", + "icon_name": "icon.r.parameter-0", + "icon_alt_name": "icon.r.parameter-0", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 0" + }, + { + "name": "parameter-1", + "icon_name": "icon.r.parameter-1", + "icon_alt_name": "icon.r.parameter-1", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 1" + }, + { + "name": "parameter-2", + "icon_name": "icon.r.parameter-2", + "icon_alt_name": "icon.r.parameter-2", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 2" + }, + { + "name": "parameter-3", + "icon_name": "icon.r.parameter-3", + "icon_alt_name": "icon.r.parameter-3", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 3" + }, + { + "name": "parameter-4", + "icon_name": "icon.r.parameter-4", + "icon_alt_name": "icon.r.parameter-4", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 4" + }, + { + "name": "parameter-5", + "icon_name": "icon.r.parameter-5", + "icon_alt_name": "icon.r.parameter-5", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 5" + }, + { + "name": "parameter-6", + "icon_name": "icon.r.parameter-6", + "icon_alt_name": "icon.r.parameter-6", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 6" + }, + { + "name": "parameter-7", + "icon_name": "icon.r.parameter-7", + "icon_alt_name": "icon.r.parameter-7", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 7" + }, + { + "name": "parameter-8", + "icon_name": "icon.r.parameter-8", + "icon_alt_name": "icon.r.parameter-8", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 8" + }, + { + "name": "parameter-9", + "icon_name": "icon.r.parameter-9", + "icon_alt_name": "icon.r.parameter-9", + "enabled": true, + "category": "parameters", + "energy": 0.5, + "order": "a", + "subgroup": "parameters", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Parameter 9" + }, + { + "name": "recipe-unknown", + "icon_name": "icon.r.recipe-unknown", + "icon_alt_name": "icon.r.recipe-unknown", + "enabled": true, + "category": "crafting", + "energy": 0.5, + "order": "", + "subgroup": "other", + "maximum_productivity": 3, + "hide_from_player_crafting": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": true + }, + "ingredients": {}, + "products": {}, + "localised_name": "Unknown recipe" + } + ], + "qualities": [ + { + "name": "normal", + "icon_name": "icon.q.normal", + "order": "a", + "level": 0, + "beacon_power_multiplier": 1, + "mining_drill_resource_drain_multiplier": 1, + "next_probability": 0.1, + "localised_name": "quality-name.normal" + }, + { + "name": "quality-unknown", + "icon_name": "icon.q.quality-unknown", + "order": "z", + "level": 0, + "beacon_power_multiplier": 1, + "mining_drill_resource_drain_multiplier": 1, + "next_probability": 0, + "localised_name": "Unknown" } ], "items": [ @@ -12866,7 +15934,19 @@ "icon_name": "icon.i.wooden-chest", "order": "a[items]-a[wooden-chest]", "subgroup": "storage", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Wooden chest" }, { @@ -12874,7 +15954,19 @@ "icon_name": "icon.i.iron-chest", "order": "a[items]-b[iron-chest]", "subgroup": "storage", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Iron chest" }, { @@ -12882,7 +15974,19 @@ "icon_name": "icon.i.steel-chest", "order": "a[items]-c[steel-chest]", "subgroup": "storage", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Steel chest" }, { @@ -12890,7 +15994,19 @@ "icon_name": "icon.i.storage-tank", "order": "b[fluid]-a[storage-tank]", "subgroup": "storage", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Storage tank" }, { @@ -12898,7 +16014,19 @@ "icon_name": "icon.i.transport-belt", "order": "a[transport-belt]-a[transport-belt]", "subgroup": "belt", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Transport belt" }, { @@ -12906,7 +16034,19 @@ "icon_name": "icon.i.fast-transport-belt", "order": "a[transport-belt]-b[fast-transport-belt]", "subgroup": "belt", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fast transport belt" }, { @@ -12914,7 +16054,19 @@ "icon_name": "icon.i.express-transport-belt", "order": "a[transport-belt]-c[express-transport-belt]", "subgroup": "belt", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Express transport belt" }, { @@ -12922,7 +16074,19 @@ "icon_name": "icon.i.underground-belt", "order": "b[underground-belt]-a[underground-belt]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Underground belt" }, { @@ -12930,7 +16094,19 @@ "icon_name": "icon.i.fast-underground-belt", "order": "b[underground-belt]-b[fast-underground-belt]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fast underground belt" }, { @@ -12938,7 +16114,19 @@ "icon_name": "icon.i.express-underground-belt", "order": "b[underground-belt]-c[express-underground-belt]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Express underground belt" }, { @@ -12946,7 +16134,19 @@ "icon_name": "icon.i.splitter", "order": "c[splitter]-a[splitter]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Splitter" }, { @@ -12954,7 +16154,19 @@ "icon_name": "icon.i.fast-splitter", "order": "c[splitter]-b[fast-splitter]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fast splitter" }, { @@ -12962,7 +16174,19 @@ "icon_name": "icon.i.express-splitter", "order": "c[splitter]-c[express-splitter]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Express splitter" }, { @@ -12970,7 +16194,19 @@ "icon_name": "icon.i.loader", "order": "d[loader]-a[basic-loader]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Loader" }, { @@ -12978,7 +16214,19 @@ "icon_name": "icon.i.fast-loader", "order": "d[loader]-b[fast-loader]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fast loader" }, { @@ -12986,7 +16234,19 @@ "icon_name": "icon.i.express-loader", "order": "d[loader]-c[express-loader]", "subgroup": "belt", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Express loader" }, { @@ -12994,7 +16254,19 @@ "icon_name": "icon.i.burner-inserter", "order": "a[burner-inserter]", "subgroup": "inserter", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Burner inserter" }, { @@ -13002,7 +16274,19 @@ "icon_name": "icon.i.inserter", "order": "b[inserter]", "subgroup": "inserter", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Inserter" }, { @@ -13010,7 +16294,19 @@ "icon_name": "icon.i.long-handed-inserter", "order": "c[long-handed-inserter]", "subgroup": "inserter", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Long-handed inserter" }, { @@ -13018,39 +16314,59 @@ "icon_name": "icon.i.fast-inserter", "order": "d[fast-inserter]", "subgroup": "inserter", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fast inserter" }, { - "name": "filter-inserter", - "icon_name": "icon.i.filter-inserter", - "order": "e[filter-inserter]", - "subgroup": "inserter", - "stack": 50, - "localised_name": "Filter inserter" - }, - { - "name": "stack-inserter", - "icon_name": "icon.i.stack-inserter", - "order": "f[stack-inserter]", + "name": "bulk-inserter", + "icon_name": "icon.i.bulk-inserter", + "order": "f[bulk-inserter]", "subgroup": "inserter", - "stack": 50, - "localised_name": "Stack inserter" - }, - { - "name": "stack-filter-inserter", - "icon_name": "icon.i.stack-filter-inserter", - "order": "g[stack-filter-inserter]", - "subgroup": "inserter", - "stack": 50, - "localised_name": "Stack filter inserter" + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Bulk inserter" }, { "name": "small-electric-pole", "icon_name": "icon.i.small-electric-pole", "order": "a[energy]-a[small-electric-pole]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Small electric pole" }, { @@ -13058,7 +16374,19 @@ "icon_name": "icon.i.medium-electric-pole", "order": "a[energy]-b[medium-electric-pole]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Medium electric pole" }, { @@ -13066,7 +16394,19 @@ "icon_name": "icon.i.big-electric-pole", "order": "a[energy]-c[big-electric-pole]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Big electric pole" }, { @@ -13074,7 +16414,19 @@ "icon_name": "icon.i.substation", "order": "a[energy]-d[substation]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Substation" }, { @@ -13082,7 +16434,19 @@ "icon_name": "icon.i.pipe", "order": "a[pipe]-a[pipe]", "subgroup": "energy-pipe-distribution", - "stack": 100, + "stack_size": 100, + "weight": 5000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Pipe" }, { @@ -13090,7 +16454,19 @@ "icon_name": "icon.i.pipe-to-ground", "order": "a[pipe]-b[pipe-to-ground]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Pipe to ground" }, { @@ -13098,71 +16474,179 @@ "icon_name": "icon.i.pump", "order": "b[pipe]-c[pump]", "subgroup": "energy-pipe-distribution", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Pump" }, { "name": "rail", "icon_name": "icon.i.rail", - "order": "a[train-system]-a[rail]", + "order": "a[rail]-a[rail]", "subgroup": "train-transport", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rail" }, { "name": "train-stop", "icon_name": "icon.i.train-stop", - "order": "a[train-system]-c[train-stop]", + "order": "b[train-automation]-a[train-stop]", "subgroup": "train-transport", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Train stop" }, { "name": "rail-signal", "icon_name": "icon.i.rail-signal", - "order": "a[train-system]-d[rail-signal]", + "order": "b[train-automation]-b[rail-signal]", "subgroup": "train-transport", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rail signal" }, { "name": "rail-chain-signal", "icon_name": "icon.i.rail-chain-signal", - "order": "a[train-system]-e[rail-signal-chain]", + "order": "b[train-automation]-c[rail-chain-signal]", "subgroup": "train-transport", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rail chain signal" }, { "name": "locomotive", "icon_name": "icon.i.locomotive", - "order": "a[train-system]-f[locomotive]", + "order": "c[rolling-stock]-a[locomotive]", "subgroup": "train-transport", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Locomotive" }, { "name": "cargo-wagon", "icon_name": "icon.i.cargo-wagon", - "order": "a[train-system]-g[cargo-wagon]", + "order": "c[rolling-stock]-b[cargo-wagon]", "subgroup": "train-transport", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Cargo wagon" }, { "name": "fluid-wagon", "icon_name": "icon.i.fluid-wagon", - "order": "a[train-system]-h[fluid-wagon]", + "order": "c[rolling-stock]-c[fluid-wagon]", "subgroup": "train-transport", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Fluid wagon" }, { "name": "artillery-wagon", "icon_name": "icon.i.artillery-wagon", - "order": "a[train-system]-i[artillery-wagon]", + "order": "c[rolling-stock]-d[artillery-wagon]", "subgroup": "train-transport", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Artillery wagon" }, { @@ -13170,7 +16654,19 @@ "icon_name": "icon.i.car", "order": "b[personal-transport]-a[car]", "subgroup": "transport", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Car" }, { @@ -13178,7 +16674,19 @@ "icon_name": "icon.i.tank", "order": "b[personal-transport]-b[tank]", "subgroup": "transport", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Tank" }, { @@ -13186,23 +16694,39 @@ "icon_name": "icon.i.spidertron", "order": "b[personal-transport]-c[spidertron]-a[spider]", "subgroup": "transport", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Spidertron" }, - { - "name": "spidertron-remote", - "icon_name": "icon.i.spidertron-remote", - "order": "b[personal-transport]-c[spidertron]-b[remote]", - "subgroup": "transport", - "stack": 1, - "localised_name": "Spidertron remote" - }, { "name": "logistic-robot", "icon_name": "icon.i.logistic-robot", "order": "a[robot]-a[logistic-robot]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Logistic robot" }, { @@ -13210,47 +16734,119 @@ "icon_name": "icon.i.construction-robot", "order": "a[robot]-b[construction-robot]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Construction robot" }, { - "name": "logistic-chest-active-provider", - "icon_name": "icon.i.logistic-chest-active-provider", - "order": "b[storage]-c[logistic-chest-active-provider]", + "name": "active-provider-chest", + "icon_name": "icon.i.active-provider-chest", + "order": "b[storage]-c[active-provider-chest]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Active provider chest" }, { - "name": "logistic-chest-passive-provider", - "icon_name": "icon.i.logistic-chest-passive-provider", - "order": "b[storage]-c[logistic-chest-passive-provider]", + "name": "passive-provider-chest", + "icon_name": "icon.i.passive-provider-chest", + "order": "b[storage]-c[passive-provider-chest]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Passive provider chest" }, { - "name": "logistic-chest-storage", - "icon_name": "icon.i.logistic-chest-storage", - "order": "b[storage]-c[logistic-chest-storage]", + "name": "storage-chest", + "icon_name": "icon.i.storage-chest", + "order": "b[storage]-c[storage-chest]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Storage chest" }, { - "name": "logistic-chest-buffer", - "icon_name": "icon.i.logistic-chest-buffer", - "order": "b[storage]-d[logistic-chest-buffer]", + "name": "buffer-chest", + "icon_name": "icon.i.buffer-chest", + "order": "b[storage]-d[buffer-chest]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Buffer chest" }, { - "name": "logistic-chest-requester", - "icon_name": "icon.i.logistic-chest-requester", - "order": "b[storage]-e[logistic-chest-requester]", + "name": "requester-chest", + "icon_name": "icon.i.requester-chest", + "order": "b[storage]-e[requester-chest]", "subgroup": "logistic-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Requester chest" }, { @@ -13258,7 +16854,19 @@ "icon_name": "icon.i.roboport", "order": "c[signal]-a[roboport]", "subgroup": "logistic-network", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Roboport" }, { @@ -13266,31 +16874,39 @@ "icon_name": "icon.i.small-lamp", "order": "a[light]-a[small-lamp]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Lamp" }, - { - "name": "red-wire", - "icon_name": "icon.i.red-wire", - "order": "b[wires]-a[red-wire]", - "subgroup": "circuit-network", - "stack": 200, - "localised_name": "Red wire" - }, - { - "name": "green-wire", - "icon_name": "icon.i.green-wire", - "order": "b[wires]-b[green-wire]", - "subgroup": "circuit-network", - "stack": 200, - "localised_name": "Green wire" - }, { "name": "arithmetic-combinator", "icon_name": "icon.i.arithmetic-combinator", "order": "c[combinators]-a[arithmetic-combinator]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Arithmetic combinator" }, { @@ -13298,15 +16914,59 @@ "icon_name": "icon.i.decider-combinator", "order": "c[combinators]-b[decider-combinator]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Decider combinator" }, + { + "name": "selector-combinator", + "icon_name": "icon.i.selector-combinator", + "order": "c[combinators]-c[selector-combinator]", + "subgroup": "circuit-network", + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Selector combinator" + }, { "name": "constant-combinator", "icon_name": "icon.i.constant-combinator", - "order": "c[combinators]-c[constant-combinator]", + "order": "c[combinators]-d[constant-combinator]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Constant combinator" }, { @@ -13314,7 +16974,19 @@ "icon_name": "icon.i.power-switch", "order": "d[other]-a[power-switch]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Power switch" }, { @@ -13322,15 +16994,59 @@ "icon_name": "icon.i.programmable-speaker", "order": "d[other]-b[programmable-speaker]", "subgroup": "circuit-network", - "stack": 50, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Programmable speaker" }, + { + "name": "display-panel", + "icon_name": "icon.i.display-panel", + "order": "s[display-panel]", + "subgroup": "circuit-network", + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Display panel" + }, { "name": "stone-brick", "icon_name": "icon.i.stone-brick", "order": "a[stone-brick]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Stone brick" }, { @@ -13338,7 +17054,19 @@ "icon_name": "icon.i.concrete", "order": "b[concrete]-a[plain]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Concrete" }, { @@ -13346,7 +17074,19 @@ "icon_name": "icon.i.hazard-concrete", "order": "b[concrete]-b[hazard]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Hazard concrete" }, { @@ -13354,7 +17094,19 @@ "icon_name": "icon.i.refined-concrete", "order": "b[concrete]-c[refined]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Refined concrete" }, { @@ -13362,7 +17114,19 @@ "icon_name": "icon.i.refined-hazard-concrete", "order": "b[concrete]-d[refined-hazard]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Refined hazard concrete" }, { @@ -13370,7 +17134,19 @@ "icon_name": "icon.i.landfill", "order": "c[landfill]-a[dirt]", "subgroup": "terrain", - "stack": 100, + "stack_size": 100, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Landfill" }, { @@ -13378,23 +17154,39 @@ "icon_name": "icon.i.cliff-explosives", "order": "d[cliff-explosives]", "subgroup": "terrain", - "stack": 20, - "localised_name": "Cliff explosives" - }, - { - "name": "dummy-steel-axe", - "icon_name": "icon.i.dummy-steel-axe", - "order": "a[mining]-b[steel-axe]", - "subgroup": "tool", - "stack": 1, - "localised_name": "item-name.dummy-steel-axe" + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Cliff explosives" }, { "name": "repair-pack", "icon_name": "icon.i.repair-pack", "order": "b[repair]-a[repair-pack]", "subgroup": "tool", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Repair pack" }, { @@ -13402,7 +17194,19 @@ "icon_name": "icon.i.blueprint", "order": "c[automated-construction]-a[blueprint]", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Blueprint" }, { @@ -13410,7 +17214,19 @@ "icon_name": "icon.i.deconstruction-planner", "order": "c[automated-construction]-b[deconstruction-planner]", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Deconstruction planner" }, { @@ -13418,7 +17234,19 @@ "icon_name": "icon.i.upgrade-planner", "order": "c[automated-construction]-c[upgrade-planner]", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Upgrade planner" }, { @@ -13426,7 +17254,19 @@ "icon_name": "icon.i.blueprint-book", "order": "c[automated-construction]-d[blueprint-book]", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Blueprint book" }, { @@ -13434,7 +17274,19 @@ "icon_name": "icon.i.copy-paste-tool", "order": "c[automated-construction]-x", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Copy paste tool" }, { @@ -13442,7 +17294,19 @@ "icon_name": "icon.i.cut-paste-tool", "order": "c[automated-construction]-x", "subgroup": "tool", - "stack": 1, + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Cut paste tool" }, { @@ -13450,7 +17314,19 @@ "icon_name": "icon.i.boiler", "order": "b[steam-power]-a[boiler]", "subgroup": "energy", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Boiler" }, { @@ -13458,7 +17334,19 @@ "icon_name": "icon.i.steam-engine", "order": "b[steam-power]-b[steam-engine]", "subgroup": "energy", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Steam engine" }, { @@ -13466,7 +17354,19 @@ "icon_name": "icon.i.solar-panel", "order": "d[solar-panel]-a[solar-panel]", "subgroup": "energy", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Solar panel" }, { @@ -13474,7 +17374,19 @@ "icon_name": "icon.i.accumulator", "order": "e[accumulator]-a[accumulator]", "subgroup": "energy", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Accumulator" }, { @@ -13482,7 +17394,19 @@ "icon_name": "icon.i.nuclear-reactor", "order": "f[nuclear-energy]-a[reactor]", "subgroup": "energy", - "stack": 10, + "stack_size": 10, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Nuclear reactor" }, { @@ -13490,7 +17414,19 @@ "icon_name": "icon.i.heat-pipe", "order": "f[nuclear-energy]-b[heat-pipe]", "subgroup": "energy", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Heat pipe" }, { @@ -13498,7 +17434,19 @@ "icon_name": "icon.i.heat-exchanger", "order": "f[nuclear-energy]-c[heat-exchanger]", "subgroup": "energy", - "stack": 50, + "stack_size": 50, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Heat exchanger" }, { @@ -13506,7 +17454,19 @@ "icon_name": "icon.i.steam-turbine", "order": "f[nuclear-energy]-d[steam-turbine]", "subgroup": "energy", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Steam turbine" }, { @@ -13514,7 +17474,19 @@ "icon_name": "icon.i.burner-mining-drill", "order": "a[items]-a[burner-mining-drill]", "subgroup": "extraction-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Burner mining drill" }, { @@ -13522,7 +17494,19 @@ "icon_name": "icon.i.electric-mining-drill", "order": "a[items]-b[electric-mining-drill]", "subgroup": "extraction-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Electric mining drill" }, { @@ -13530,7 +17514,19 @@ "icon_name": "icon.i.offshore-pump", "order": "b[fluids]-a[offshore-pump]", "subgroup": "extraction-machine", - "stack": 20, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Offshore pump" }, { @@ -13538,7 +17534,19 @@ "icon_name": "icon.i.pumpjack", "order": "b[fluids]-b[pumpjack]", "subgroup": "extraction-machine", - "stack": 20, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Pumpjack" }, { @@ -13546,7 +17554,19 @@ "icon_name": "icon.i.stone-furnace", "order": "a[stone-furnace]", "subgroup": "smelting-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Stone furnace" }, { @@ -13554,7 +17574,19 @@ "icon_name": "icon.i.steel-furnace", "order": "b[steel-furnace]", "subgroup": "smelting-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Steel furnace" }, { @@ -13562,7 +17594,19 @@ "icon_name": "icon.i.electric-furnace", "order": "c[electric-furnace]", "subgroup": "smelting-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Electric furnace" }, { @@ -13570,7 +17614,19 @@ "icon_name": "icon.i.assembling-machine-1", "order": "a[assembling-machine-1]", "subgroup": "production-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Assembling machine 1" }, { @@ -13578,7 +17634,19 @@ "icon_name": "icon.i.assembling-machine-2", "order": "b[assembling-machine-2]", "subgroup": "production-machine", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Assembling machine 2" }, { @@ -13586,7 +17654,19 @@ "icon_name": "icon.i.assembling-machine-3", "order": "c[assembling-machine-3]", "subgroup": "production-machine", - "stack": 50, + "stack_size": 50, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Assembling machine 3" }, { @@ -13594,7 +17674,19 @@ "icon_name": "icon.i.oil-refinery", "order": "d[refinery]", "subgroup": "production-machine", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Oil refinery" }, { @@ -13602,23 +17694,59 @@ "icon_name": "icon.i.chemical-plant", "order": "e[chemical-plant]", "subgroup": "production-machine", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Chemical plant" }, { "name": "centrifuge", "icon_name": "icon.i.centrifuge", - "order": "g[centrifuge]", + "order": "f[centrifuge]", "subgroup": "production-machine", - "stack": 50, + "stack_size": 50, + "weight": 662500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Centrifuge" }, { "name": "lab", "icon_name": "icon.i.lab", - "order": "g[lab]", + "order": "z[lab]", "subgroup": "production-machine", - "stack": 10, + "stack_size": 10, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Lab" }, { @@ -13626,7 +17754,19 @@ "icon_name": "icon.i.beacon", "order": "a[beacon]", "subgroup": "module", - "stack": 10, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Beacon" }, { @@ -13634,7 +17774,19 @@ "icon_name": "icon.i.speed-module", "order": "a[speed]-a[speed-module-1]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Speed module" }, { @@ -13642,7 +17794,19 @@ "icon_name": "icon.i.speed-module-2", "order": "a[speed]-b[speed-module-2]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Speed module 2" }, { @@ -13650,31 +17814,79 @@ "icon_name": "icon.i.speed-module-3", "order": "a[speed]-c[speed-module-3]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Speed module 3" }, { - "name": "effectivity-module", - "icon_name": "icon.i.effectivity-module", - "order": "c[effectivity]-a[effectivity-module-1]", + "name": "efficiency-module", + "icon_name": "icon.i.efficiency-module", + "order": "c[efficiency]-a[efficiency-module-1]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Efficiency module" }, { - "name": "effectivity-module-2", - "icon_name": "icon.i.effectivity-module-2", - "order": "c[effectivity]-b[effectivity-module-2]", + "name": "efficiency-module-2", + "icon_name": "icon.i.efficiency-module-2", + "order": "c[efficiency]-b[efficiency-module-2]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Efficiency module 2" }, { - "name": "effectivity-module-3", - "icon_name": "icon.i.effectivity-module-3", - "order": "c[effectivity]-c[effectivity-module-3]", + "name": "efficiency-module-3", + "icon_name": "icon.i.efficiency-module-3", + "order": "c[efficiency]-c[efficiency-module-3]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Efficiency module 3" }, { @@ -13682,7 +17894,19 @@ "icon_name": "icon.i.productivity-module", "order": "c[productivity]-a[productivity-module-1]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Productivity module" }, { @@ -13690,7 +17914,19 @@ "icon_name": "icon.i.productivity-module-2", "order": "c[productivity]-b[productivity-module-2]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Productivity module 2" }, { @@ -13698,30 +17934,106 @@ "icon_name": "icon.i.productivity-module-3", "order": "c[productivity]-c[productivity-module-3]", "subgroup": "module", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Productivity module 3" }, + { + "name": "empty-module-slot", + "icon_name": "icon.i.empty-module-slot", + "order": "z[meta]-a[empty-module-slot]", + "subgroup": "module", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Empty module slot" + }, { "name": "rocket-silo", "icon_name": "icon.i.rocket-silo", - "order": "e[rocket-silo]", + "order": "a[rocket-silo]", "subgroup": "space-related", - "stack": 1, + "stack_size": 1, + "weight": 10000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rocket silo" }, + { + "name": "cargo-landing-pad", + "icon_name": "icon.i.cargo-landing-pad", + "order": "b[cargo-landing-pad]", + "subgroup": "space-related", + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Cargo landing pad" + }, { "name": "satellite", "icon_name": "icon.i.satellite", - "order": "m[satellite]", + "order": "d[rocket-parts]-e[satellite]", "subgroup": "space-related", - "stack": 1, - "launch_products": [ + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "rocket_launch_products": [ { "name": "space-science-pack", "type": "item", "amount": 1000 } ], + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Satellite" }, { @@ -13729,10 +18041,22 @@ "icon_name": "icon.i.wood", "order": "a[wood]", "subgroup": "raw-resource", - "stack": 100, + "stack_size": 100, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, "fuel_category": "chemical", "fuel_value": 2000000, - "pollution_multiplier": 1, + "fuel_emissions_multiplier": 1, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Wood" }, { @@ -13740,10 +18064,22 @@ "icon_name": "icon.i.coal", "order": "b[coal]", "subgroup": "raw-resource", - "stack": 50, + "stack_size": 50, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, "fuel_category": "chemical", "fuel_value": 4000000, - "pollution_multiplier": 1, + "fuel_emissions_multiplier": 1, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Coal" }, { @@ -13751,7 +18087,19 @@ "icon_name": "icon.i.stone", "order": "d[stone]", "subgroup": "raw-resource", - "stack": 50, + "stack_size": 50, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Stone" }, { @@ -13759,7 +18107,19 @@ "icon_name": "icon.i.iron-ore", "order": "e[iron-ore]", "subgroup": "raw-resource", - "stack": 50, + "stack_size": 50, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Iron ore" }, { @@ -13767,7 +18127,19 @@ "icon_name": "icon.i.copper-ore", "order": "f[copper-ore]", "subgroup": "raw-resource", - "stack": 50, + "stack_size": 50, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Copper ore" }, { @@ -13775,7 +18147,19 @@ "icon_name": "icon.i.uranium-ore", "order": "g[uranium-ore]", "subgroup": "raw-resource", - "stack": 50, + "stack_size": 50, + "weight": 5000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium ore" }, { @@ -13783,300 +18167,712 @@ "icon_name": "icon.i.raw-fish", "order": "h[raw-fish]", "subgroup": "raw-resource", - "stack": 100, + "stack_size": 100, + "weight": 3333.3333282470703, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Raw fish" }, { "name": "iron-plate", "icon_name": "icon.i.iron-plate", - "order": "b[iron-plate]", + "order": "a[smelting]-a[iron-plate]", "subgroup": "raw-material", - "stack": 100, + "stack_size": 100, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Iron plate" }, { "name": "copper-plate", "icon_name": "icon.i.copper-plate", - "order": "c[copper-plate]", + "order": "a[smelting]-b[copper-plate]", "subgroup": "raw-material", - "stack": 100, + "stack_size": 100, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Copper plate" }, + { + "name": "steel-plate", + "icon_name": "icon.i.steel-plate", + "order": "a[smelting]-c[steel-plate]", + "subgroup": "raw-material", + "stack_size": 100, + "weight": 2500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Steel plate" + }, { "name": "solid-fuel", "icon_name": "icon.i.solid-fuel", - "order": "c[solid-fuel]", + "order": "b[chemistry]-a[solid-fuel]", "subgroup": "raw-material", - "stack": 50, + "stack_size": 50, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, "fuel_category": "chemical", "fuel_value": 12000000, - "pollution_multiplier": 1, + "fuel_emissions_multiplier": 1, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Solid fuel" }, - { - "name": "steel-plate", - "icon_name": "icon.i.steel-plate", - "order": "d[steel-plate]", - "subgroup": "raw-material", - "stack": 100, - "localised_name": "Steel plate" - }, { "name": "plastic-bar", "icon_name": "icon.i.plastic-bar", - "order": "f[plastic-bar]", + "order": "b[chemistry]-b[plastic-bar]", "subgroup": "raw-material", - "stack": 100, + "stack_size": 100, + "weight": 500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Plastic bar" }, { "name": "sulfur", "icon_name": "icon.i.sulfur", - "order": "g[sulfur]", + "order": "b[chemistry]-c[sulfur]", "subgroup": "raw-material", - "stack": 50, + "stack_size": 50, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Sulfur" }, { "name": "battery", "icon_name": "icon.i.battery", - "order": "h[battery]", + "order": "b[chemistry]-d[battery]", "subgroup": "raw-material", - "stack": 200, + "stack_size": 200, + "weight": 2500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Battery" }, { "name": "explosives", "icon_name": "icon.i.explosives", - "order": "j[explosives]", + "order": "b[chemistry]-e[explosives]", "subgroup": "raw-material", - "stack": 50, + "stack_size": 50, + "weight": 2000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Explosives" }, + { + "name": "water-barrel", + "icon_name": "icon.i.water-barrel", + "order": "a[fluid]-a[water]-a[water]", + "subgroup": "barrel", + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Water barrel" + }, { "name": "crude-oil-barrel", "icon_name": "icon.i.crude-oil-barrel", - "order": "b[crude-oil-barrel]", + "order": "a[fluid]-b[oil]-a[crude-oil]", "subgroup": "barrel", - "stack": 10, + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Crude oil barrel" }, { - "name": "heavy-oil-barrel", - "icon_name": "icon.i.heavy-oil-barrel", - "order": "b[heavy-oil-barrel]", + "name": "petroleum-gas-barrel", + "icon_name": "icon.i.petroleum-gas-barrel", + "order": "a[fluid]-b[oil]-b[petroleum-gas]", "subgroup": "barrel", - "stack": 10, - "localised_name": "Heavy oil barrel" + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Petroleum gas barrel" }, { "name": "light-oil-barrel", "icon_name": "icon.i.light-oil-barrel", - "order": "b[light-oil-barrel]", + "order": "a[fluid]-b[oil]-c[light-oil]", "subgroup": "barrel", - "stack": 10, + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Light oil barrel" }, { - "name": "lubricant-barrel", - "icon_name": "icon.i.lubricant-barrel", - "order": "b[lubricant-barrel]", + "name": "heavy-oil-barrel", + "icon_name": "icon.i.heavy-oil-barrel", + "order": "a[fluid]-b[oil]-d[heavy-oil]", "subgroup": "barrel", - "stack": 10, - "localised_name": "Lubricant barrel" + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Heavy oil barrel" }, { - "name": "petroleum-gas-barrel", - "icon_name": "icon.i.petroleum-gas-barrel", - "order": "b[petroleum-gas-barrel]", + "name": "lubricant-barrel", + "icon_name": "icon.i.lubricant-barrel", + "order": "a[fluid]-b[oil]-e[lubricant]", "subgroup": "barrel", - "stack": 10, - "localised_name": "Petroleum gas barrel" + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Lubricant barrel" }, { "name": "sulfuric-acid-barrel", "icon_name": "icon.i.sulfuric-acid-barrel", - "order": "b[sulfuric-acid-barrel]", + "order": "a[fluid]-b[oil]-f[sulfuric-acid]", "subgroup": "barrel", - "stack": 10, + "stack_size": 10, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Sulfuric acid barrel" }, { - "name": "water-barrel", - "icon_name": "icon.i.water-barrel", - "order": "b[water-barrel]", - "subgroup": "barrel", - "stack": 10, - "localised_name": "Water barrel" - }, - { - "name": "copper-cable", - "icon_name": "icon.i.copper-cable", - "order": "a[copper-cable]", + "name": "iron-gear-wheel", + "icon_name": "icon.i.iron-gear-wheel", + "order": "a[basic-intermediates]-a[iron-gear-wheel]", "subgroup": "intermediate-product", - "stack": 200, - "localised_name": "Copper cable" + "stack_size": 100, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Iron gear wheel" }, { "name": "iron-stick", "icon_name": "icon.i.iron-stick", - "order": "b[iron-stick]", + "order": "a[basic-intermediates]-b[iron-stick]", "subgroup": "intermediate-product", - "stack": 100, + "stack_size": 100, + "weight": 500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Iron stick" }, { - "name": "iron-gear-wheel", - "icon_name": "icon.i.iron-gear-wheel", - "order": "c[iron-gear-wheel]", + "name": "copper-cable", + "icon_name": "icon.i.copper-cable", + "order": "a[basic-intermediates]-c[copper-cable]", "subgroup": "intermediate-product", - "stack": 100, - "localised_name": "Iron gear wheel" + "stack_size": 200, + "weight": 250, + "ingredient_to_weight_coefficient": 0.25, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Copper cable" }, { - "name": "empty-barrel", - "icon_name": "icon.i.empty-barrel", - "order": "d[empty-barrel]", + "name": "barrel", + "icon_name": "icon.i.barrel", + "order": "a[basic-intermediates]-d[empty-barrel]", "subgroup": "intermediate-product", - "stack": 10, - "localised_name": "Empty barrel" + "stack_size": 10, + "weight": 5000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Barrel" }, { "name": "electronic-circuit", "icon_name": "icon.i.electronic-circuit", - "order": "e[electronic-circuit]", + "order": "b[circuits]-a[electronic-circuit]", "subgroup": "intermediate-product", - "stack": 200, + "stack_size": 200, + "weight": 500, + "ingredient_to_weight_coefficient": 0.28, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Electronic circuit" }, { "name": "advanced-circuit", "icon_name": "icon.i.advanced-circuit", - "order": "f[advanced-circuit]", + "order": "b[circuits]-b[advanced-circuit]", "subgroup": "intermediate-product", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.28, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Advanced circuit" }, { "name": "processing-unit", "icon_name": "icon.i.processing-unit", - "order": "g[processing-unit]", + "order": "b[circuits]-c[processing-unit]", "subgroup": "intermediate-product", - "stack": 100, + "stack_size": 100, + "weight": 3333.3333282470703, + "ingredient_to_weight_coefficient": 0.25, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Processing unit" }, { "name": "engine-unit", "icon_name": "icon.i.engine-unit", - "order": "h[engine-unit]", + "order": "c[advanced-intermediates]-a[engine-unit]", "subgroup": "intermediate-product", - "stack": 50, + "stack_size": 50, + "weight": 2500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Engine unit" }, { "name": "electric-engine-unit", "icon_name": "icon.i.electric-engine-unit", - "order": "i[electric-engine-unit]", + "order": "c[advanced-intermediates]-b[electric-engine-unit]", "subgroup": "intermediate-product", - "stack": 50, + "stack_size": 50, + "weight": 2500, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Electric engine unit" }, { "name": "flying-robot-frame", "icon_name": "icon.i.flying-robot-frame", - "order": "l[flying-robot-frame]", + "order": "c[advanced-intermediates]-c[flying-robot-frame]", "subgroup": "intermediate-product", - "stack": 50, + "stack_size": 50, + "weight": 6666.6666564941406, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Flying robot frame" }, - { - "name": "rocket-control-unit", - "icon_name": "icon.i.rocket-control-unit", - "order": "n[rocket-control-unit]", - "subgroup": "intermediate-product", - "stack": 10, - "localised_name": "Rocket control unit" - }, { "name": "low-density-structure", "icon_name": "icon.i.low-density-structure", - "order": "o[low-density-structure]", + "order": "d[rocket-parts]-a[low-density-structure]", "subgroup": "intermediate-product", - "stack": 10, + "stack_size": 50, + "weight": 5000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Low density structure" }, { "name": "rocket-fuel", "icon_name": "icon.i.rocket-fuel", - "order": "p[rocket-fuel]", + "order": "d[rocket-parts]-b[rocket-fuel]", "subgroup": "intermediate-product", - "stack": 10, + "stack_size": 20, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, "fuel_category": "chemical", "fuel_value": 100000000, - "pollution_multiplier": 1, + "fuel_emissions_multiplier": 1, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rocket fuel" }, { "name": "rocket-part", "icon_name": "icon.i.rocket-part", - "order": "q[rocket-part]", + "order": "d[rocket-parts]-d[rocket-part]", "subgroup": "intermediate-product", - "stack": 5, + "stack_size": 5, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rocket part" }, - { - "name": "nuclear-fuel", - "icon_name": "icon.i.nuclear-fuel", - "order": "q[uranium-rocket-fuel]", - "subgroup": "intermediate-product", - "stack": 1, - "fuel_category": "chemical", - "fuel_value": 1210000000, - "pollution_multiplier": 1, - "localised_name": "Nuclear fuel" - }, { "name": "uranium-235", "icon_name": "icon.i.uranium-235", - "order": "r[uranium-235]", - "subgroup": "intermediate-product", - "stack": 100, + "order": "a[uranium-processing]-b[uranium-235]", + "subgroup": "uranium-processing", + "stack_size": 100, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium-235" }, { "name": "uranium-238", "icon_name": "icon.i.uranium-238", - "order": "r[uranium-238]", - "subgroup": "intermediate-product", - "stack": 100, + "order": "a[uranium-processing]-c[uranium-238]", + "subgroup": "uranium-processing", + "stack_size": 100, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium-238" }, { "name": "uranium-fuel-cell", "icon_name": "icon.i.uranium-fuel-cell", - "order": "r[uranium-processing]-a[uranium-fuel-cell]", - "subgroup": "intermediate-product", - "stack": 50, + "order": "b[uranium-products]-a[uranium-fuel-cell]", + "subgroup": "uranium-processing", + "stack_size": 50, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, "fuel_category": "nuclear", "fuel_value": 8000000000, - "pollution_multiplier": 1, - "burnt_result": "used-up-uranium-fuel-cell", + "fuel_emissions_multiplier": 1, + "burnt_result": "depleted-uranium-fuel-cell", + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium fuel cell" }, { - "name": "used-up-uranium-fuel-cell", - "icon_name": "icon.i.used-up-uranium-fuel-cell", - "order": "r[used-up-uranium-fuel-cell]", - "subgroup": "intermediate-product", - "stack": 50, - "localised_name": "Used-up uranium fuel cell" + "name": "depleted-uranium-fuel-cell", + "icon_name": "icon.i.depleted-uranium-fuel-cell", + "order": "b[uranium-products]-b[depleted-uranium-fuel-cell]", + "subgroup": "uranium-processing", + "stack_size": 50, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Depleted uranium fuel cell" + }, + { + "name": "nuclear-fuel", + "icon_name": "icon.i.nuclear-fuel", + "order": "r[uranium-processing]-e[nuclear-fuel]", + "subgroup": "uranium-processing", + "stack_size": 1, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "fuel_category": "chemical", + "fuel_value": 1210000000, + "fuel_emissions_multiplier": 1, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Nuclear fuel" }, { "name": "automation-science-pack", "icon_name": "icon.i.automation-science-pack", "order": "a[automation-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Automation science pack" }, { @@ -14084,7 +18880,19 @@ "icon_name": "icon.i.logistic-science-pack", "order": "b[logistic-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Logistic science pack" }, { @@ -14092,7 +18900,19 @@ "icon_name": "icon.i.military-science-pack", "order": "c[military-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Military science pack" }, { @@ -14100,7 +18920,19 @@ "icon_name": "icon.i.chemical-science-pack", "order": "d[chemical-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Chemical science pack" }, { @@ -14108,7 +18940,19 @@ "icon_name": "icon.i.production-science-pack", "order": "e[production-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Production science pack" }, { @@ -14116,7 +18960,19 @@ "icon_name": "icon.i.utility-science-pack", "order": "f[utility-science-pack]", "subgroup": "science-pack", - "stack": 200, + "stack_size": 200, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Utility science pack" }, { @@ -14124,12 +18980,17 @@ "icon_name": "icon.i.space-science-pack", "order": "g[space-science-pack]", "subgroup": "science-pack", - "stack": 2000, - "launch_products": [ + "stack_size": 2000, + "weight": 1000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ { - "name": "raw-fish", - "type": "item", - "amount": 1 + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 } ], "localised_name": "Space science pack" @@ -14139,15 +19000,59 @@ "icon_name": "icon.i.coin", "order": "y", "subgroup": "science-pack", - "stack": 100000, + "stack_size": 100000, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Coin" }, + { + "name": "science", + "icon_name": "icon.i.science", + "order": "zz[science]", + "subgroup": "science-pack", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Science" + }, { "name": "pistol", "icon_name": "icon.i.pistol", "order": "a[basic-clips]-a[pistol]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Pistol" }, { @@ -14155,7 +19060,19 @@ "icon_name": "icon.i.submachine-gun", "order": "a[basic-clips]-b[submachine-gun]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Submachine gun" }, { @@ -14163,7 +19080,19 @@ "icon_name": "icon.i.tank-machine-gun", "order": "a[basic-clips]-b[tank-machine-gun]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Vehicle machine gun" }, { @@ -14171,7 +19100,19 @@ "icon_name": "icon.i.vehicle-machine-gun", "order": "a[basic-clips]-b[vehicle-machine-gun]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Vehicle machine gun" }, { @@ -14179,7 +19120,19 @@ "icon_name": "icon.i.tank-flamethrower", "order": "b[flamethrower]-b[tank-flamethrower]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Vehicle flamethrower" }, { @@ -14187,7 +19140,19 @@ "icon_name": "icon.i.shotgun", "order": "b[shotgun]-a[basic]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Shotgun" }, { @@ -14195,7 +19160,19 @@ "icon_name": "icon.i.combat-shotgun", "order": "b[shotgun]-a[combat]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Combat shotgun" }, { @@ -14203,7 +19180,19 @@ "icon_name": "icon.i.rocket-launcher", "order": "d[rocket-launcher]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rocket launcher" }, { @@ -14211,23 +19200,39 @@ "icon_name": "icon.i.flamethrower", "order": "e[flamethrower]", "subgroup": "gun", - "stack": 5, + "stack_size": 5, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Flamethrower" }, - { - "name": "land-mine", - "icon_name": "icon.i.land-mine", - "order": "f[land-mine]", - "subgroup": "gun", - "stack": 100, - "localised_name": "Land mine" - }, { "name": "artillery-wagon-cannon", "icon_name": "icon.i.artillery-wagon-cannon", "order": "z[artillery]-a[cannon]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Artillery cannon" }, { @@ -14235,7 +19240,19 @@ "icon_name": "icon.i.spidertron-rocket-launcher-1", "order": "z[spider]-a[rocket-launcher]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Spidertron rocket launcher" }, { @@ -14243,7 +19260,19 @@ "icon_name": "icon.i.spidertron-rocket-launcher-2", "order": "z[spider]-a[rocket-launcher]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Spidertron rocket launcher" }, { @@ -14251,7 +19280,19 @@ "icon_name": "icon.i.spidertron-rocket-launcher-3", "order": "z[spider]-a[rocket-launcher]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Spidertron rocket launcher" }, { @@ -14259,7 +19300,19 @@ "icon_name": "icon.i.spidertron-rocket-launcher-4", "order": "z[spider]-a[rocket-launcher]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Spidertron rocket launcher" }, { @@ -14267,7 +19320,19 @@ "icon_name": "icon.i.tank-cannon", "order": "z[tank]-a[cannon]", "subgroup": "gun", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Tank cannon" }, { @@ -14275,7 +19340,19 @@ "icon_name": "icon.i.firearm-magazine", "order": "a[basic-clips]-a[firearm-magazine]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Firearm magazine" }, { @@ -14283,7 +19360,19 @@ "icon_name": "icon.i.piercing-rounds-magazine", "order": "a[basic-clips]-b[piercing-rounds-magazine]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Piercing rounds magazine" }, { @@ -14291,7 +19380,19 @@ "icon_name": "icon.i.uranium-rounds-magazine", "order": "a[basic-clips]-c[uranium-rounds-magazine]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium rounds magazine" }, { @@ -14299,7 +19400,19 @@ "icon_name": "icon.i.shotgun-shell", "order": "b[shotgun]-a[basic]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Shotgun shells" }, { @@ -14307,7 +19420,19 @@ "icon_name": "icon.i.piercing-shotgun-shell", "order": "b[shotgun]-b[piercing]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Piercing shotgun shells" }, { @@ -14315,7 +19440,19 @@ "icon_name": "icon.i.cannon-shell", "order": "d[cannon-shell]-a[basic]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Cannon shell" }, { @@ -14323,7 +19460,19 @@ "icon_name": "icon.i.explosive-cannon-shell", "order": "d[cannon-shell]-c[explosive]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Explosive cannon shell" }, { @@ -14331,7 +19480,19 @@ "icon_name": "icon.i.uranium-cannon-shell", "order": "d[cannon-shell]-c[uranium]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Uranium cannon shell" }, { @@ -14339,7 +19500,19 @@ "icon_name": "icon.i.explosive-uranium-cannon-shell", "order": "d[explosive-cannon-shell]-c[uranium]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Explosive uranium cannon shell" }, { @@ -14347,7 +19520,19 @@ "icon_name": "icon.i.artillery-shell", "order": "d[explosive-cannon-shell]-d[artillery]", "subgroup": "ammo", - "stack": 1, + "stack_size": 1, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Artillery shell" }, { @@ -14355,7 +19540,19 @@ "icon_name": "icon.i.rocket", "order": "d[rocket-launcher]-a[basic]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Rocket" }, { @@ -14363,15 +19560,39 @@ "icon_name": "icon.i.explosive-rocket", "order": "d[rocket-launcher]-b[explosive]", "subgroup": "ammo", - "stack": 200, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Explosive rocket" }, { "name": "atomic-bomb", "icon_name": "icon.i.atomic-bomb", - "order": "d[rocket-launcher]-c[atomic-bomb]", + "order": "d[rocket-launcher]-d[atomic-bomb]", "subgroup": "ammo", - "stack": 10, + "stack_size": 10, + "weight": 1500000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Atomic bomb" }, { @@ -14379,7 +19600,19 @@ "icon_name": "icon.i.flamethrower-ammo", "order": "e[flamethrower]", "subgroup": "ammo", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Flamethrower ammo" }, { @@ -14387,7 +19620,19 @@ "icon_name": "icon.i.grenade", "order": "a[grenade]-a[normal]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Grenade" }, { @@ -14395,7 +19640,19 @@ "icon_name": "icon.i.cluster-grenade", "order": "a[grenade]-b[cluster]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Cluster grenade" }, { @@ -14403,7 +19660,19 @@ "icon_name": "icon.i.poison-capsule", "order": "b[poison-capsule]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Poison capsule" }, { @@ -14411,7 +19680,19 @@ "icon_name": "icon.i.slowdown-capsule", "order": "c[slowdown-capsule]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Slowdown capsule" }, { @@ -14419,7 +19700,19 @@ "icon_name": "icon.i.defender-capsule", "order": "d[defender-capsule]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Defender capsule" }, { @@ -14427,7 +19720,19 @@ "icon_name": "icon.i.distractor-capsule", "order": "e[defender-capsule]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Distractor capsule" }, { @@ -14435,7 +19740,19 @@ "icon_name": "icon.i.destroyer-capsule", "order": "f[destroyer-capsule]", "subgroup": "capsule", - "stack": 100, + "stack_size": 100, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Destroyer capsule" }, { @@ -14443,7 +19760,19 @@ "icon_name": "icon.i.light-armor", "order": "a[light-armor]", "subgroup": "armor", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Light armor" }, { @@ -14451,7 +19780,19 @@ "icon_name": "icon.i.heavy-armor", "order": "b[heavy-armor]", "subgroup": "armor", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Heavy armor" }, { @@ -14459,7 +19800,19 @@ "icon_name": "icon.i.modular-armor", "order": "c[modular-armor]", "subgroup": "armor", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Modular armor" }, { @@ -14467,7 +19820,19 @@ "icon_name": "icon.i.power-armor", "order": "d[power-armor]", "subgroup": "armor", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Power armor" }, { @@ -14475,7 +19840,19 @@ "icon_name": "icon.i.power-armor-mk2", "order": "e[power-armor-mk2]", "subgroup": "armor", - "stack": 1, + "stack_size": 1, + "weight": 1000000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Power armor MK2" }, { @@ -14483,23 +19860,59 @@ "icon_name": "icon.i.solar-panel-equipment", "order": "a[energy-source]-a[solar-panel]", "subgroup": "equipment", - "stack": 20, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Portable solar panel" }, { - "name": "fusion-reactor-equipment", - "icon_name": "icon.i.fusion-reactor-equipment", - "order": "a[energy-source]-b[fusion-reactor]", + "name": "fission-reactor-equipment", + "icon_name": "icon.i.fission-reactor-equipment", + "order": "a[energy-source]-b[fission-reactor]", "subgroup": "equipment", - "stack": 20, - "localised_name": "Portable fusion reactor" + "stack_size": 20, + "weight": 250000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Portable fission reactor" }, { "name": "battery-equipment", "icon_name": "icon.i.battery-equipment", "order": "b[battery]-a[battery-equipment]", "subgroup": "equipment", - "stack": 20, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Personal battery" }, { @@ -14507,47 +19920,119 @@ "icon_name": "icon.i.battery-mk2-equipment", "order": "b[battery]-b[battery-equipment-mk2]", "subgroup": "equipment", - "stack": 20, + "stack_size": 20, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Personal battery MK2" }, { "name": "belt-immunity-equipment", "icon_name": "icon.i.belt-immunity-equipment", "order": "c[belt-immunity]-a[belt-immunity]", - "subgroup": "equipment", - "stack": 20, + "subgroup": "utility-equipment", + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Belt immunity equipment" }, { "name": "exoskeleton-equipment", "icon_name": "icon.i.exoskeleton-equipment", "order": "d[exoskeleton]-a[exoskeleton-equipment]", - "subgroup": "equipment", - "stack": 20, + "subgroup": "utility-equipment", + "stack_size": 20, + "weight": 79166, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Exoskeleton" }, { "name": "personal-roboport-equipment", "icon_name": "icon.i.personal-roboport-equipment", "order": "e[robotics]-a[personal-roboport-equipment]", - "subgroup": "equipment", - "stack": 20, + "subgroup": "utility-equipment", + "stack_size": 20, + "weight": 106250, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Personal roboport" }, { "name": "personal-roboport-mk2-equipment", "icon_name": "icon.i.personal-roboport-mk2-equipment", "order": "e[robotics]-b[personal-roboport-mk2-equipment]", - "subgroup": "equipment", - "stack": 20, + "subgroup": "utility-equipment", + "stack_size": 20, + "weight": 482291, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Personal roboport MK2" }, { "name": "night-vision-equipment", "icon_name": "icon.i.night-vision-equipment", "order": "f[night-vision]-a[night-vision-equipment]", - "subgroup": "equipment", - "stack": 20, + "subgroup": "utility-equipment", + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Nightvision" }, { @@ -14555,7 +20040,19 @@ "icon_name": "icon.i.energy-shield-equipment", "order": "a[shield]-a[energy-shield-equipment]", "subgroup": "military-equipment", - "stack": 20, + "stack_size": 20, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Energy shield" }, { @@ -14563,7 +20060,19 @@ "icon_name": "icon.i.energy-shield-mk2-equipment", "order": "a[shield]-b[energy-shield-equipment-mk2]", "subgroup": "military-equipment", - "stack": 20, + "stack_size": 20, + "weight": 100000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Energy shield MK2" }, { @@ -14571,7 +20080,19 @@ "icon_name": "icon.i.personal-laser-defense-equipment", "order": "b[active-defense]-a[personal-laser-defense-equipment]", "subgroup": "military-equipment", - "stack": 20, + "stack_size": 20, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Personal laser defense" }, { @@ -14579,23 +20100,39 @@ "icon_name": "icon.i.discharge-defense-equipment", "order": "b[active-defense]-b[discharge-defense-equipment]-a[equipment]", "subgroup": "military-equipment", - "stack": 20, + "stack_size": 20, + "weight": 233333, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Discharge defense" }, - { - "name": "discharge-defense-remote", - "icon_name": "icon.i.discharge-defense-remote", - "order": "b[active-defense]-b[discharge-defense-equipment]-b[remote]", - "subgroup": "military-equipment", - "stack": 1, - "localised_name": "Discharge defense remote" - }, { "name": "stone-wall", "icon_name": "icon.i.stone-wall", "order": "a[stone-wall]-a[stone-wall]", "subgroup": "defensive-structure", - "stack": 100, + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Wall" }, { @@ -14603,71 +20140,479 @@ "icon_name": "icon.i.gate", "order": "a[wall]-b[gate]", "subgroup": "defensive-structure", - "stack": 50, + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Gate" }, + { + "name": "radar", + "icon_name": "icon.i.radar", + "order": "d[radar]-a[radar]", + "subgroup": "defensive-structure", + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Radar" + }, + { + "name": "land-mine", + "icon_name": "icon.i.land-mine", + "order": "f[land-mine]", + "subgroup": "defensive-structure", + "stack_size": 100, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Land mine" + }, { "name": "gun-turret", "icon_name": "icon.i.gun-turret", "order": "b[turret]-a[gun-turret]", - "subgroup": "defensive-structure", - "stack": 50, + "subgroup": "turret", + "stack_size": 50, + "weight": 20000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Gun turret" }, { "name": "laser-turret", "icon_name": "icon.i.laser-turret", "order": "b[turret]-b[laser-turret]", - "subgroup": "defensive-structure", - "stack": 50, + "subgroup": "turret", + "stack_size": 50, + "weight": 40000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Laser turret" }, { "name": "flamethrower-turret", "icon_name": "icon.i.flamethrower-turret", "order": "b[turret]-c[flamethrower-turret]", - "subgroup": "defensive-structure", - "stack": 50, + "subgroup": "turret", + "stack_size": 50, + "weight": 50000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Flamethrower turret" }, { "name": "artillery-turret", "icon_name": "icon.i.artillery-turret", "order": "b[turret]-d[artillery-turret]-a[turret]", - "subgroup": "defensive-structure", - "stack": 10, + "subgroup": "turret", + "stack_size": 10, + "weight": 200000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Artillery turret" }, + { + "name": "parameter-0", + "icon_name": "icon.i.parameter-0", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 0" + }, + { + "name": "parameter-1", + "icon_name": "icon.i.parameter-1", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 1" + }, + { + "name": "parameter-2", + "icon_name": "icon.i.parameter-2", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 2" + }, + { + "name": "parameter-3", + "icon_name": "icon.i.parameter-3", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 3" + }, + { + "name": "parameter-4", + "icon_name": "icon.i.parameter-4", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 4" + }, + { + "name": "parameter-5", + "icon_name": "icon.i.parameter-5", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 5" + }, + { + "name": "parameter-6", + "icon_name": "icon.i.parameter-6", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 6" + }, + { + "name": "parameter-7", + "icon_name": "icon.i.parameter-7", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 7" + }, + { + "name": "parameter-8", + "icon_name": "icon.i.parameter-8", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 8" + }, + { + "name": "parameter-9", + "icon_name": "icon.i.parameter-9", + "order": "a", + "subgroup": "parameters", + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Parameter 9" + }, + { + "name": "copper-wire", + "icon_name": "icon.i.copper-wire", + "order": "", + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Copper wire" + }, + { + "name": "green-wire", + "icon_name": "icon.i.green-wire", + "order": "", + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Green wire" + }, + { + "name": "red-wire", + "icon_name": "icon.i.red-wire", + "order": "", + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Red wire" + }, + { + "name": "spidertron-remote", + "icon_name": "icon.i.spidertron-remote", + "order": "", + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Spidertron remote" + }, + { + "name": "discharge-defense-remote", + "icon_name": "icon.i.discharge-defense-remote", + "order": "b[active-defense]-b[discharge-defense-equipment]-b[remote]", + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Discharge defense remote" + }, { "name": "artillery-targeting-remote", "icon_name": "icon.i.artillery-targeting-remote", "order": "b[turret]-d[artillery-turret]-b[remote]", - "subgroup": "defensive-structure", - "stack": 1, + "subgroup": "spawnables", + "stack_size": 1, + "weight": 0, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Artillery targeting remote" }, - { - "name": "radar", - "icon_name": "icon.i.radar", - "order": "d[radar]-a[radar]", - "subgroup": "defensive-structure", - "stack": 50, - "localised_name": "Radar" - }, - { - "name": "player-port", - "icon_name": "icon.i.player-port", - "order": "z[not-used]", - "subgroup": "defensive-structure", - "stack": 50, - "localised_name": "Player port" - }, { "name": "item-unknown", "icon_name": "icon.i.item-unknown", "order": "", "subgroup": "other", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Unknown item" }, { @@ -14675,7 +20620,19 @@ "icon_name": "icon.i.electric-energy-interface", "order": "a[electric-energy-interface]-b[electric-energy-interface]", "subgroup": "other", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Electric energy interface" }, { @@ -14683,7 +20640,19 @@ "icon_name": "icon.i.linked-chest", "order": "a[items]-a[linked-chest]", "subgroup": "other", - "stack": 10, + "stack_size": 10, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Linked chest" }, { @@ -14691,15 +20660,59 @@ "icon_name": "icon.i.heat-interface", "order": "b[heat-interface]", "subgroup": "other", - "stack": 20, + "stack_size": 20, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Heat interface" }, + { + "name": "lane-splitter", + "icon_name": "icon.i.lane-splitter", + "order": "b[items]-b[lane-splitter]", + "subgroup": "other", + "stack_size": 50, + "weight": 10000, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "localised_name": "Lane splitter" + }, { "name": "linked-belt", "icon_name": "icon.i.linked-belt", "order": "b[items]-b[linked-belt]", "subgroup": "other", - "stack": 10, + "stack_size": 10, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Linked belt" }, { @@ -14707,7 +20720,19 @@ "icon_name": "icon.i.infinity-chest", "order": "c[item]-o[infinity-chest]", "subgroup": "other", - "stack": 10, + "stack_size": 10, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Infinity chest" }, { @@ -14715,7 +20740,19 @@ "icon_name": "icon.i.infinity-pipe", "order": "d[item]-o[infinity-pipe]", "subgroup": "other", - "stack": 10, + "stack_size": 10, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Infinity pipe" }, { @@ -14723,39 +20760,39 @@ "icon_name": "icon.i.selection-tool", "order": "e[automated-construction]-a[blueprint]", "subgroup": "other", - "stack": 1, + "stack_size": 1, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Selection tool" }, - { - "name": "item-with-inventory", - "icon_name": "icon.i.item-with-inventory", - "order": "s[item-with-inventory]-o[item-with-inventory]", - "subgroup": "other", - "stack": 1, - "localised_name": "Item with inventory" - }, - { - "name": "item-with-label", - "icon_name": "icon.i.item-with-label", - "order": "s[item-with-label]-o[item-with-label]", - "subgroup": "other", - "stack": 1, - "localised_name": "Item with label" - }, - { - "name": "item-with-tags", - "icon_name": "icon.i.item-with-tags", - "order": "s[item-with-tags]-o[item-with-tags]", - "subgroup": "other", - "stack": 1, - "localised_name": "Item with tags" - }, { "name": "simple-entity-with-force", "icon_name": "icon.i.simple-entity-with-force", "order": "s[simple-entity-with-force]-f[simple-entity-with-force]", "subgroup": "other", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Simple entity with force" }, { @@ -14763,7 +20800,19 @@ "icon_name": "icon.i.simple-entity-with-owner", "order": "s[simple-entity-with-owner]-o[simple-entity-with-owner]", "subgroup": "other", - "stack": 50, + "stack_size": 50, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Simple entity with owner" }, { @@ -14771,100 +20820,231 @@ "icon_name": "icon.i.burner-generator", "order": "t[item]-o[burner-generator]", "subgroup": "other", - "stack": 10, + "stack_size": 10, + "weight": 100, + "ingredient_to_weight_coefficient": 0.5, + "q_spoil_ticks": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "localised_name": "Burner generator" } ], "fluids": [ - { - "name": "fluid-unknown", - "icon_name": "icon.i.fluid-unknown", - "order": "", - "subgroup": "fluid", - "default_temperature": 0, - "max_temperature": 0, - "heat_capacity": 1000, - "localised_name": "Unknown fluid" - }, { "name": "water", "icon_name": "icon.i.water", - "order": "a[fluid]-a[water]", + "order": "a[fluid]-a[water]-a[water]", "subgroup": "fluid", "default_temperature": 15, "max_temperature": 100, - "heat_capacity": 200, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 2000, "localised_name": "Water" }, - { - "name": "crude-oil", - "icon_name": "icon.i.crude-oil", - "order": "a[fluid]-b[crude-oil]", - "subgroup": "fluid", - "default_temperature": 25, - "max_temperature": 25, - "heat_capacity": 100, - "localised_name": "Crude oil" - }, { "name": "steam", "icon_name": "icon.i.steam", - "order": "a[fluid]-b[steam]", + "order": "a[fluid]-a[water]-b[steam]", "subgroup": "fluid", "default_temperature": 15, - "max_temperature": 1000, + "max_temperature": 5000, + "gas_temperature": 15, "heat_capacity": 200, "localised_name": "Steam" }, { - "name": "heavy-oil", - "icon_name": "icon.i.heavy-oil", - "order": "a[fluid]-c[heavy-oil]", + "name": "crude-oil", + "icon_name": "icon.i.crude-oil", + "order": "a[fluid]-b[oil]-a[crude-oil]", "subgroup": "fluid", "default_temperature": 25, "max_temperature": 25, - "heat_capacity": 100, - "localised_name": "Heavy oil" + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Crude oil" + }, + { + "name": "petroleum-gas", + "icon_name": "icon.i.petroleum-gas", + "order": "a[fluid]-b[oil]-b[petroleum-gas]", + "subgroup": "fluid", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Petroleum gas" }, { "name": "light-oil", "icon_name": "icon.i.light-oil", - "order": "a[fluid]-d[light-oil]", + "order": "a[fluid]-b[oil]-c[light-oil]", "subgroup": "fluid", "default_temperature": 25, "max_temperature": 25, - "heat_capacity": 100, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, "localised_name": "Light oil" }, { - "name": "petroleum-gas", - "icon_name": "icon.i.petroleum-gas", - "order": "a[fluid]-e[petroleum-gas]", + "name": "heavy-oil", + "icon_name": "icon.i.heavy-oil", + "order": "a[fluid]-b[oil]-d[heavy-oil]", "subgroup": "fluid", "default_temperature": 25, "max_temperature": 25, - "heat_capacity": 100, - "localised_name": "Petroleum gas" + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Heavy oil" + }, + { + "name": "lubricant", + "icon_name": "icon.i.lubricant", + "order": "a[fluid]-b[oil]-e[lubricant]", + "subgroup": "fluid", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Lubricant" }, { "name": "sulfuric-acid", "icon_name": "icon.i.sulfuric-acid", - "order": "a[fluid]-f[sulfuric-acid]", + "order": "a[fluid]-b[oil]-f[sulfuric-acid]", "subgroup": "fluid", "default_temperature": 25, "max_temperature": 25, - "heat_capacity": 100, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, "localised_name": "Sulfuric acid" }, { - "name": "lubricant", - "icon_name": "icon.i.lubricant", - "order": "e[lubricant]", - "subgroup": "fluid", + "name": "parameter-0", + "icon_name": "icon.i.parameter-0", + "order": "a", + "subgroup": "parameters", "default_temperature": 25, "max_temperature": 25, - "heat_capacity": 100, - "localised_name": "Lubricant" + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 0" + }, + { + "name": "parameter-1", + "icon_name": "icon.i.parameter-1", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 1" + }, + { + "name": "parameter-2", + "icon_name": "icon.i.parameter-2", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 2" + }, + { + "name": "parameter-3", + "icon_name": "icon.i.parameter-3", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 3" + }, + { + "name": "parameter-4", + "icon_name": "icon.i.parameter-4", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 4" + }, + { + "name": "parameter-5", + "icon_name": "icon.i.parameter-5", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 5" + }, + { + "name": "parameter-6", + "icon_name": "icon.i.parameter-6", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 6" + }, + { + "name": "parameter-7", + "icon_name": "icon.i.parameter-7", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 7" + }, + { + "name": "parameter-8", + "icon_name": "icon.i.parameter-8", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 8" + }, + { + "name": "parameter-9", + "icon_name": "icon.i.parameter-9", + "order": "a", + "subgroup": "parameters", + "default_temperature": 25, + "max_temperature": 25, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Parameter 9" + }, + { + "name": "fluid-unknown", + "icon_name": "icon.i.fluid-unknown", + "order": "", + "subgroup": "other", + "default_temperature": 0, + "max_temperature": 0, + "gas_temperature": 340282346638528942488602606004204804240, + "heat_capacity": 1000, + "localised_name": "Unknown fluid" } ], "modules": [ @@ -14875,11 +21055,13 @@ "order": "a[speed]-a[speed-module-1]", "category": "speed", "tier": 1, - "module_effects_consumption": 0.5, - "module_effects_speed": 0.20000000298023224, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, + "module_effects": { + "consumption": 0.5, + "speed": 0.20000000298023224, + "productivity": 0, + "pollution": 0, + "quality": -0.10000000149011612 + }, "localised_name": "Speed module" }, { @@ -14889,11 +21071,13 @@ "order": "a[speed]-b[speed-module-2]", "category": "speed", "tier": 2, - "module_effects_consumption": 0.60000002384185791, - "module_effects_speed": 0.30000001192092896, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, + "module_effects": { + "consumption": 0.60000002384185791, + "speed": 0.30000001192092896, + "productivity": 0, + "pollution": 0, + "quality": -0.15000000596046448 + }, "localised_name": "Speed module 2" }, { @@ -14903,111 +21087,77 @@ "order": "a[speed]-c[speed-module-3]", "category": "speed", "tier": 3, - "module_effects_consumption": 0.699999988079071, - "module_effects_speed": 0.5, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, + "module_effects": { + "consumption": 0.699999988079071, + "speed": 0.5, + "productivity": 0, + "pollution": 0, + "quality": -0.25 + }, "localised_name": "Speed module 3" }, { - "name": "effectivity-module", - "icon_name": "icon.e.effectivity-module", - "icon_alt_name": "icon.i.effectivity-module", - "order": "c[effectivity]-a[effectivity-module-1]", - "category": "effectivity", + "name": "efficiency-module", + "icon_name": "icon.e.efficiency-module", + "icon_alt_name": "icon.i.efficiency-module", + "order": "c[efficiency]-a[efficiency-module-1]", + "category": "efficiency", "tier": 1, - "module_effects_consumption": -0.30000001192092896, - "module_effects_speed": 0, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, + "module_effects": { + "consumption": -0.30000001192092896, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, "localised_name": "Efficiency module" }, { - "name": "effectivity-module-2", - "icon_name": "icon.e.effectivity-module-2", - "icon_alt_name": "icon.i.effectivity-module-2", - "order": "c[effectivity]-b[effectivity-module-2]", - "category": "effectivity", - "tier": 2, - "module_effects_consumption": -0.40000000596046448, - "module_effects_speed": 0, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, - "localised_name": "Efficiency module 2" - }, - { - "name": "effectivity-module-3", - "icon_name": "icon.e.effectivity-module-3", - "icon_alt_name": "icon.i.effectivity-module-3", - "order": "c[effectivity]-c[effectivity-module-3]", - "category": "effectivity", - "tier": 3, - "module_effects_consumption": -0.5, - "module_effects_speed": 0, - "module_effects_productivity": 0, - "module_effects_pollution": 0, - "limitations": {}, - "localised_name": "Efficiency module 3" - }, - { - "name": "productivity-module", - "icon_name": "icon.e.productivity-module", - "icon_alt_name": "icon.i.productivity-module", - "order": "c[productivity]-a[productivity-module-1]", - "category": "productivity", - "tier": 1, - "module_effects_consumption": 0.40000000596046448, - "module_effects_speed": -0.05000000074505806, - "module_effects_productivity": 0.039999999105930328, - "module_effects_pollution": 0.05000000074505806, - "limitations": [ - "advanced-circuit", - "automation-science-pack", - "battery", - "chemical-science-pack", - "copper-cable", - "copper-plate", - "electric-engine-unit", - "electronic-circuit", - "empty-barrel", - "engine-unit", - "explosives", - "flying-robot-frame", - "iron-gear-wheel", - "iron-plate", - "iron-stick", - "logistic-science-pack", - "low-density-structure", - "lubricant", - "military-science-pack", - "nuclear-fuel", - "plastic-bar", - "processing-unit", - "production-science-pack", - "rocket-control-unit", - "rocket-fuel", - "rocket-part", - "steel-plate", - "stone-brick", - "sulfur", - "sulfuric-acid", - "uranium-fuel-cell", - "utility-science-pack", - "basic-oil-processing", - "advanced-oil-processing", - "coal-liquefaction", - "heavy-oil-cracking", - "light-oil-cracking", - "solid-fuel-from-light-oil", - "solid-fuel-from-petroleum-gas", - "solid-fuel-from-heavy-oil", - "uranium-processing", - "nuclear-fuel-reprocessing", - "kovarex-enrichment-process" - ], + "name": "efficiency-module-2", + "icon_name": "icon.e.efficiency-module-2", + "icon_alt_name": "icon.i.efficiency-module-2", + "order": "c[efficiency]-b[efficiency-module-2]", + "category": "efficiency", + "tier": 2, + "module_effects": { + "consumption": -0.40000000596046448, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "localised_name": "Efficiency module 2" + }, + { + "name": "efficiency-module-3", + "icon_name": "icon.e.efficiency-module-3", + "icon_alt_name": "icon.i.efficiency-module-3", + "order": "c[efficiency]-c[efficiency-module-3]", + "category": "efficiency", + "tier": 3, + "module_effects": { + "consumption": -0.5, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "localised_name": "Efficiency module 3" + }, + { + "name": "productivity-module", + "icon_name": "icon.e.productivity-module", + "icon_alt_name": "icon.i.productivity-module", + "order": "c[productivity]-a[productivity-module-1]", + "category": "productivity", + "tier": 1, + "module_effects": { + "consumption": 0.40000000596046448, + "speed": -0.05000000074505806, + "productivity": 0.039999999105930328, + "pollution": 0.05000000074505806, + "quality": 0 + }, "localised_name": "Productivity module" }, { @@ -15017,55 +21167,13 @@ "order": "c[productivity]-b[productivity-module-2]", "category": "productivity", "tier": 2, - "module_effects_consumption": 0.60000002384185791, - "module_effects_speed": -0.10000000149011612, - "module_effects_productivity": 0.059999998658895493, - "module_effects_pollution": 0.070000000298023224, - "limitations": [ - "advanced-circuit", - "automation-science-pack", - "battery", - "chemical-science-pack", - "copper-cable", - "copper-plate", - "electric-engine-unit", - "electronic-circuit", - "empty-barrel", - "engine-unit", - "explosives", - "flying-robot-frame", - "iron-gear-wheel", - "iron-plate", - "iron-stick", - "logistic-science-pack", - "low-density-structure", - "lubricant", - "military-science-pack", - "nuclear-fuel", - "plastic-bar", - "processing-unit", - "production-science-pack", - "rocket-control-unit", - "rocket-fuel", - "rocket-part", - "steel-plate", - "stone-brick", - "sulfur", - "sulfuric-acid", - "uranium-fuel-cell", - "utility-science-pack", - "basic-oil-processing", - "advanced-oil-processing", - "coal-liquefaction", - "heavy-oil-cracking", - "light-oil-cracking", - "solid-fuel-from-light-oil", - "solid-fuel-from-petroleum-gas", - "solid-fuel-from-heavy-oil", - "uranium-processing", - "nuclear-fuel-reprocessing", - "kovarex-enrichment-process" - ], + "module_effects": { + "consumption": 0.60000002384185791, + "speed": -0.10000000149011612, + "productivity": 0.059999998658895493, + "pollution": 0.070000000298023224, + "quality": 0 + }, "localised_name": "Productivity module 2" }, { @@ -15075,55 +21183,13 @@ "order": "c[productivity]-c[productivity-module-3]", "category": "productivity", "tier": 3, - "module_effects_consumption": 0.800000011920929, - "module_effects_speed": -0.15000000596046448, - "module_effects_productivity": 0.10000000149011612, - "module_effects_pollution": 0.10000000149011612, - "limitations": [ - "advanced-circuit", - "automation-science-pack", - "battery", - "chemical-science-pack", - "copper-cable", - "copper-plate", - "electric-engine-unit", - "electronic-circuit", - "empty-barrel", - "engine-unit", - "explosives", - "flying-robot-frame", - "iron-gear-wheel", - "iron-plate", - "iron-stick", - "logistic-science-pack", - "low-density-structure", - "lubricant", - "military-science-pack", - "nuclear-fuel", - "plastic-bar", - "processing-unit", - "production-science-pack", - "rocket-control-unit", - "rocket-fuel", - "rocket-part", - "steel-plate", - "stone-brick", - "sulfur", - "sulfuric-acid", - "uranium-fuel-cell", - "utility-science-pack", - "basic-oil-processing", - "advanced-oil-processing", - "coal-liquefaction", - "heavy-oil-cracking", - "light-oil-cracking", - "solid-fuel-from-light-oil", - "solid-fuel-from-petroleum-gas", - "solid-fuel-from-heavy-oil", - "uranium-processing", - "nuclear-fuel-reprocessing", - "kovarex-enrichment-process" - ], + "module_effects": { + "consumption": 0.800000011920929, + "speed": -0.15000000596046448, + "productivity": 0.10000000149011612, + "pollution": 0.10000000149011612, + "quality": 0 + }, "localised_name": "Productivity module 3" } ], @@ -15134,19 +21200,39 @@ "icon_alt_name": "icon.i.boiler", "order": "z-b[steam-power]-a[boiler]", "type": "boiler", - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "boiler" ], - "allowed_effects": {}, "target_temperature": 165, "fluid_ingredient": "water", "fluid_product": "steam", - "max_energy_usage": 30000, "energy_usage": 0, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 30000 + }, + { + "quality": "quality-unknown", + "value": 30000 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "item", "fuel_effectivity": 1, - "pollution": 2.7777777777777781E-07, + "pollution": { + "pollution": 2.7777777777777781E-07 + }, "fuel_categories": [ "chemical" ], @@ -15159,20 +21245,41 @@ "order": "z-b[steam-power]-b[steam-engine]", "type": "generator", "fluid_usage_per_tick": 0.5, - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "steam-engine" ], - "allowed_effects": {}, "full_power_temperature": 165, + "max_power_output": 15000, "minimum_temperature": 100, "fluid_ingredient": "steam", - "max_energy_usage": 0, "energy_usage": 0, - "energy_production": 15000, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 15000 + }, + { + "quality": "quality-unknown", + "value": 15000 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 0, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Steam engine" }, { @@ -15181,23 +21288,43 @@ "icon_alt_name": "icon.i.nuclear-reactor", "order": "z-f[nuclear-energy]-a[reactor]", "type": "reactor", + "module_inventory_size": 0, "neighbour_bonus": 1, - "associated_items": [ + "items_to_place_this": [ "nuclear-reactor" ], - "allowed_effects": {}, "in_pipes": 0, "in_pipe_filters": {}, "out_pipes": 0, "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 666666.66666666663, "energy_usage": 0, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 666666.66666666663 + }, + { + "quality": "quality-unknown", + "value": 666666.66666666663 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "item", "fuel_effectivity": 1, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "fuel_categories": [ "nuclear" ], @@ -15209,19 +21336,39 @@ "icon_alt_name": "icon.i.heat-exchanger", "order": "z-f[nuclear-energy]-c[heat-exchanger]", "type": "boiler", - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "heat-exchanger" ], - "allowed_effects": {}, "target_temperature": 500, "fluid_ingredient": "water", "fluid_product": "steam", - "max_energy_usage": 166666.66666666666, "energy_usage": 0, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 166666.66666666666 + }, + { + "quality": "quality-unknown", + "value": 166666.66666666666 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "heat", "fuel_effectivity": 1, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Heat exchanger" }, { @@ -15231,20 +21378,41 @@ "order": "z-f[nuclear-energy]-d[steam-turbine]", "type": "generator", "fluid_usage_per_tick": 1, - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "steam-turbine" ], - "allowed_effects": {}, "full_power_temperature": 500, + "max_power_output": 97000, "minimum_temperature": 100, "fluid_ingredient": "steam", - "max_energy_usage": 0, "energy_usage": 0, - "energy_production": 97000, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 97000 + }, + { + "quality": "quality-unknown", + "value": 97000 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 0, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Steam turbine" }, { @@ -15255,11 +21423,26 @@ "type": "mining-drill", "speed": 0.25, "module_inventory_size": 0, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": false, + "speed": false, + "productivity": false, + "pollution": false, + "quality": false + }, + "items_to_place_this": [ "burner-mining-drill" ], - "allowed_effects": {}, "resource_categories": [ "basic-solid" ], @@ -15269,12 +21452,32 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 2500, "energy_usage": 2500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 2500 + }, + { + "quality": "quality-unknown", + "value": 2500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "item", "fuel_effectivity": 1, - "pollution": 1.3333333333333334E-06, + "pollution": { + "pollution": 1.3333333333333334E-06 + }, "fuel_categories": [ "chemical" ], @@ -15288,16 +21491,26 @@ "type": "mining-drill", "speed": 0.5, "module_inventory_size": 3, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "electric-mining-drill" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "resource_categories": [ "basic-solid" ], @@ -15307,13 +21520,33 @@ "out_pipe_filters": {}, "io_pipes": 1, "io_pipe_filters": {}, - "max_energy_usage": 1500, "energy_usage": 1500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1500 + }, + { + "quality": "quality-unknown", + "value": 1500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 0, - "pollution": 1.8518518518518519E-06, + "pollution": { + "pollution": 1.8518518518518519E-06 + }, "localised_name": "Electric mining drill" }, { @@ -15323,25 +21556,42 @@ "order": "z-b[fluids]-a[offshore-pump]", "type": "offshore-pump", "speed": 20, - "fluid_product": "water", - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "offshore-pump" ], - "allowed_effects": {}, "in_pipes": 0, "in_pipe_filters": {}, "out_pipes": 1, - "out_pipe_filters": [ - "water" - ], + "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 0, - "energy_usage": 0, - "energy_production": 0, + "energy_usage": 1000, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1000 + }, + { + "quality": "quality-unknown", + "value": 1000 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "void", "fuel_effectivity": 1, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Offshore pump" }, { @@ -15352,16 +21602,26 @@ "type": "mining-drill", "speed": 1, "module_inventory_size": 2, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "pumpjack" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "resource_categories": [ "basic-fluid" ], @@ -15371,13 +21631,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 1500, "energy_usage": 1500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1500 + }, + { + "quality": "quality-unknown", + "value": 1500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 0, - "pollution": 1.8518518518518519E-06, + "pollution": { + "pollution": 1.8518518518518519E-06 + }, "localised_name": "Pumpjack" }, { @@ -15387,13 +21667,37 @@ "order": "z-a[stone-furnace]", "type": "furnace", "next_upgrade": "steel-furnace", - "speed": 1, + "q_speed": [ + { + "quality": "normal", + "value": 1 + }, + { + "quality": "quality-unknown", + "value": 1 + } + ], "module_inventory_size": 0, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": false, + "uses_beacon_effects": false, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "stone-furnace" ], - "allowed_effects": {}, "crafting_categories": [ "smelting" ], @@ -15403,12 +21707,32 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 1500, "energy_usage": 1500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1500 + }, + { + "quality": "quality-unknown", + "value": 1500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "item", "fuel_effectivity": 1, - "pollution": 3.7037037037037036E-07, + "pollution": { + "pollution": 3.7037037037037036E-07 + }, "fuel_categories": [ "chemical" ], @@ -15420,13 +21744,37 @@ "icon_alt_name": "icon.i.steel-furnace", "order": "z-b[steel-furnace]", "type": "furnace", - "speed": 2, + "q_speed": [ + { + "quality": "normal", + "value": 2 + }, + { + "quality": "quality-unknown", + "value": 2 + } + ], "module_inventory_size": 0, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": false, + "uses_beacon_effects": false, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "steel-furnace" ], - "allowed_effects": {}, "crafting_categories": [ "smelting" ], @@ -15436,12 +21784,32 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 1500, "energy_usage": 1500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1500 + }, + { + "quality": "quality-unknown", + "value": 1500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "item", "fuel_effectivity": 1, - "pollution": 7.4074074074074073E-07, + "pollution": { + "pollution": 7.4074074074074073E-07 + }, "fuel_categories": [ "chemical" ], @@ -15453,18 +21821,37 @@ "icon_alt_name": "icon.i.electric-furnace", "order": "z-c[electric-furnace]", "type": "furnace", - "speed": 2, + "q_speed": [ + { + "quality": "normal", + "value": 2 + }, + { + "quality": "quality-unknown", + "value": 2 + } + ], "module_inventory_size": 2, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "electric-furnace" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ "smelting" ], @@ -15474,13 +21861,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 3000, "energy_usage": 3000, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 3000 + }, + { + "quality": "quality-unknown", + "value": 3000 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 100, - "pollution": 9.2592592592592591E-08, + "pollution": { + "pollution": 9.2592592592592591E-08 + }, "localised_name": "Electric furnace" }, { @@ -15490,17 +21897,42 @@ "order": "z-a[assembling-machine-1]", "type": "assembling-machine", "next_upgrade": "assembling-machine-2", - "speed": 0.5, + "q_speed": [ + { + "quality": "normal", + "value": 0.5 + }, + { + "quality": "quality-unknown", + "value": 0.5 + } + ], "module_inventory_size": 0, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": false, + "uses_beacon_effects": false, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "assembling-machine-1" ], - "allowed_effects": {}, "crafting_categories": [ "crafting", "basic-crafting", - "advanced-crafting" + "advanced-crafting", + "parameters" ], "in_pipes": 0, "in_pipe_filters": {}, @@ -15508,13 +21940,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 1250, "energy_usage": 1250, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 1250 + }, + { + "quality": "quality-unknown", + "value": 1250 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 41.666666666666664, - "pollution": 8.88888888888889E-07, + "pollution": { + "pollution": 8.88888888888889E-07 + }, "localised_name": "Assembling machine 1" }, { @@ -15524,37 +21976,77 @@ "order": "z-b[assembling-machine-2]", "type": "assembling-machine", "next_upgrade": "assembling-machine-3", - "speed": 0.75, + "q_speed": [ + { + "quality": "normal", + "value": 0.75 + }, + { + "quality": "quality-unknown", + "value": 0.75 + } + ], "module_inventory_size": 2, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "assembling-machine-2" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ "basic-crafting", "crafting", "advanced-crafting", - "crafting-with-fluid" + "crafting-with-fluid", + "parameters" + ], + "in_pipes": 1, + "in_pipe_filters": {}, + "out_pipes": 1, + "out_pipe_filters": {}, + "io_pipes": 0, + "io_pipe_filters": {}, + "energy_usage": 2500, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 2500 + }, + { + "quality": "quality-unknown", + "value": 2500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } ], - "in_pipes": 1, - "in_pipe_filters": {}, - "out_pipes": 1, - "out_pipe_filters": {}, - "io_pipes": 0, - "io_pipe_filters": {}, - "max_energy_usage": 2500, - "energy_usage": 2500, - "energy_production": 0, "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 83.333333333333329, - "pollution": 3.3333333333333335E-07, + "pollution": { + "pollution": 3.3333333333333335E-07 + }, "localised_name": "Assembling machine 2" }, { @@ -15563,23 +22055,43 @@ "icon_alt_name": "icon.i.assembling-machine-3", "order": "z-c[assembling-machine-3]", "type": "assembling-machine", - "speed": 1.25, + "q_speed": [ + { + "quality": "normal", + "value": 1.25 + }, + { + "quality": "quality-unknown", + "value": 1.25 + } + ], "module_inventory_size": 4, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "assembling-machine-3" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ "basic-crafting", "crafting", "advanced-crafting", - "crafting-with-fluid" + "crafting-with-fluid", + "parameters" ], "in_pipes": 1, "in_pipe_filters": {}, @@ -15587,13 +22099,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 6250, "energy_usage": 6250, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 6250 + }, + { + "quality": "quality-unknown", + "value": 6250 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 208.33333333333334, - "pollution": 8.88888888888889E-08, + "pollution": { + "pollution": 8.88888888888889E-08 + }, "localised_name": "Assembling machine 3" }, { @@ -15602,20 +22134,40 @@ "icon_alt_name": "icon.i.oil-refinery", "order": "z-d[refinery]", "type": "assembling-machine", - "speed": 1, + "q_speed": [ + { + "quality": "normal", + "value": 1 + }, + { + "quality": "quality-unknown", + "value": 1 + } + ], "module_inventory_size": 3, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "oil-refinery" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ - "oil-processing" + "oil-processing", + "parameters" ], "in_pipes": 2, "in_pipe_filters": {}, @@ -15623,13 +22175,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 7000, "energy_usage": 7000, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 7000 + }, + { + "quality": "quality-unknown", + "value": 7000 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 233.33333333333334, - "pollution": 2.3809523809523809E-07, + "pollution": { + "pollution": 2.3809523809523809E-07 + }, "localised_name": "Oil refinery" }, { @@ -15638,20 +22210,40 @@ "icon_alt_name": "icon.i.chemical-plant", "order": "z-e[chemical-plant]", "type": "assembling-machine", - "speed": 1, + "q_speed": [ + { + "quality": "normal", + "value": 1 + }, + { + "quality": "quality-unknown", + "value": 1 + } + ], "module_inventory_size": 3, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "chemical-plant" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ - "chemistry" + "chemistry", + "parameters" ], "in_pipes": 2, "in_pipe_filters": {}, @@ -15659,35 +22251,75 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 3500, "energy_usage": 3500, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 3500 + }, + { + "quality": "quality-unknown", + "value": 3500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 116.66666666666667, - "pollution": 3.1746031746031743E-07, + "pollution": { + "pollution": 3.1746031746031743E-07 + }, "localised_name": "Chemical plant" }, { "name": "centrifuge", "icon_name": "icon.e.centrifuge", "icon_alt_name": "icon.i.centrifuge", - "order": "z-g[centrifuge]", + "order": "z-f[centrifuge]", "type": "assembling-machine", - "speed": 1, + "q_speed": [ + { + "quality": "normal", + "value": 1 + }, + { + "quality": "quality-unknown", + "value": 1 + } + ], "module_inventory_size": 2, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": true + }, + "items_to_place_this": [ "centrifuge" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ - "centrifuging" + "centrifuging", + "parameters" ], "in_pipes": 0, "in_pipe_filters": {}, @@ -15695,13 +22327,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 5833.333333333333, "energy_usage": 5833.333333333333, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 5833.333333333333 + }, + { + "quality": "quality-unknown", + "value": 5833.333333333333 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 194.44444444444443, - "pollution": 1.9047619047619048E-07, + "pollution": { + "pollution": 1.9047619047619048E-07 + }, "localised_name": "Centrifuge" }, { @@ -15711,14 +22363,129 @@ "order": "z-a[beacon]", "type": "beacon", "module_inventory_size": 2, - "distribution_effectivity": 0.5, - "associated_items": [ + "distribution_effectivity": 1.5, + "distribution_effectivity_bonus_per_quality_level": 0.2, + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "use_module_effects": false, + "uses_beacon_effects": false, + "uses_surface_effects": false, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": false, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "beacon" ], - "allowed_effects": [ - "consumption", - "speed", - "pollution" + "profile": [ + 1, + 0.7071, + 0.5773, + 0.5, + 0.44719999999999993, + 0.4082, + 0.3779, + 0.3535, + 0.3333, + 0.3162, + 0.3015, + 0.2886, + 0.2773, + 0.2672, + 0.2581, + 0.25, + 0.2425, + 0.23569999999999997, + 0.2294, + 0.22359999999999997, + 0.2182, + 0.2132, + 0.2085, + 0.2041, + 0.2, + 0.1961, + 0.1924, + 0.1889, + 0.1856, + 0.1825, + 0.1796, + 0.1767, + 0.174, + 0.1714, + 0.169, + 0.1666, + 0.1643, + 0.1622, + 0.1601, + 0.1581, + 0.1561, + 0.1543, + 0.1524, + 0.1507, + 0.149, + 0.1474, + 0.1458, + 0.1443, + 0.1428, + 0.1414, + 0.14, + 0.1386, + 0.1373, + 0.136, + 0.1348, + 0.1336, + 0.1324, + 0.1313, + 0.1301, + 0.129, + 0.128, + 0.127, + 0.1259, + 0.125, + 0.124, + 0.123, + 0.12210000000000001, + 0.1212, + 0.1203, + 0.11949999999999998, + 0.1186, + 0.11779999999999999, + 0.11700000000000002, + 0.1162, + 0.11539999999999999, + 0.1147, + 0.1139, + 0.1132, + 0.1125, + 0.11179999999999998, + 0.1111, + 0.11040000000000001, + 0.10969999999999999, + 0.1091, + 0.10840000000000001, + 0.1078, + 0.1072, + 0.1066, + 0.1059, + 0.10539999999999998, + 0.1048, + 0.1042, + 0.1036, + 0.1031, + 0.1025, + 0.10200000000000001, + 0.1015, + 0.101, + 0.1005, + 0.1 ], "in_pipes": 0, "in_pipe_filters": {}, @@ -15726,35 +22493,75 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 8000, "energy_usage": 8000, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 8000 + }, + { + "quality": "quality-unknown", + "value": 8000 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 8000, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Beacon" }, { "name": "rocket-silo", "icon_name": "icon.e.rocket-silo", "icon_alt_name": "icon.i.rocket-silo", - "order": "z-e[rocket-silo]", + "order": "z-a[rocket-silo]", "type": "rocket-silo", - "speed": 1, + "q_speed": [ + { + "quality": "normal", + "value": 1 + }, + { + "quality": "quality-unknown", + "value": 1 + } + ], "module_inventory_size": 4, - "base_productivity": 0, - "associated_items": [ + "base_module_effects": { + "consumption": 0, + "speed": 0, + "productivity": 0, + "pollution": 0, + "quality": 0 + }, + "uses_module_effects": true, + "uses_beacon_effects": true, + "uses_surface_effects": true, + "allowed_effects": { + "consumption": true, + "speed": true, + "productivity": true, + "pollution": true, + "quality": false + }, + "items_to_place_this": [ "rocket-silo" ], - "allowed_effects": [ - "consumption", - "speed", - "productivity", - "pollution" - ], "crafting_categories": [ - "rocket-building" + "rocket-building", + "parameters" ], "in_pipes": 0, "in_pipe_filters": {}, @@ -15762,13 +22569,33 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 66500, "energy_usage": 4166.666666666667, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 66500 + }, + { + "quality": "quality-unknown", + "value": 66500 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "electricity", "fuel_effectivity": 1, "drain": 138.88888888888889, - "pollution": 0, + "pollution": { + "pollution": 0 + }, "localised_name": "Rocket silo" }, { @@ -15777,22 +22604,42 @@ "icon_alt_name": "icon.i.burner-generator", "order": "z-t[item]-o[burner-generator]", "type": "burner-generator", - "associated_items": [ + "module_inventory_size": 0, + "items_to_place_this": [ "burner-generator" ], - "allowed_effects": {}, "in_pipes": 0, "in_pipe_filters": {}, "out_pipes": 0, "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 16666.666666666668, "energy_usage": 0, - "energy_production": 16666.666666666668, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 16666.666666666668 + }, + { + "quality": "quality-unknown", + "value": 16666.666666666668 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 16666.666666666668 + }, + { + "quality": "quality-unknown", + "value": 16666.666666666668 + } + ], "fuel_type": "item", "fuel_effectivity": 0.5, - "pollution": 1.6666666666666665E-07, + "pollution": { + "pollution": 1.6666666666666665E-07 + }, "fuel_categories": [ "chemical" ], @@ -15805,8 +22652,8 @@ "order": "a", "type": "character", "speed": 0.5, - "associated_items": {}, - "allowed_effects": {}, + "module_inventory_size": 0, + "items_to_place_this": {}, "crafting_categories": [ "crafting" ], @@ -15819,29 +22666,34 @@ "out_pipe_filters": {}, "io_pipes": 0, "io_pipe_filters": {}, - "max_energy_usage": 0, "energy_usage": 0, - "energy_production": 0, + "q_max_energy_usage": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], + "q_energy_production": [ + { + "quality": "normal", + "value": 0 + }, + { + "quality": "quality-unknown", + "value": 0 + } + ], "fuel_type": "void", "fuel_effectivity": 1, - "pollution": 0, + "pollution": {}, "localised_name": "Character" } ], "resources": [ - { - "name": "crude-oil", - "resource_category": "basic-fluid", - "mining_time": 1, - "products": [ - { - "name": "crude-oil", - "type": "fluid", - "amount": 10 - } - ], - "localised_name": "Crude oil" - }, { "name": "coal", "resource_category": "basic-solid", @@ -15908,6 +22760,35 @@ } ], "localised_name": "Uranium ore" + }, + { + "name": "crude-oil", + "resource_category": "basic-fluid", + "mining_time": 1, + "products": [ + { + "name": "crude-oil", + "type": "fluid", + "amount": 10 + } + ], + "localised_name": "Crude oil" + } + ], + "water_resources": [ + { + "name": "water", + "resource_category": "<>", + "mining_time": 1, + "products": [ + { + "name": "water", + "type": "fluid", + "amount": 60, + "temperate": 15 + } + ], + "localised_name": "Water" } ], "groups": [ @@ -15955,29 +22836,35 @@ "fill-barrel", "empty-barrel", "intermediate-product", - "science-pack" + "intermediate-recipe", + "uranium-processing", + "science-pack", + "internal-process" ], "localised_name": "Intermediate products" }, { "name": "combat", "icon_name": "icon.g.combat", - "order": "d", + "order": "e", "subgroups": [ "gun", "ammo", "capsule", "armor", "equipment", + "utility-equipment", "military-equipment", - "defensive-structure" + "defensive-structure", + "turret", + "ammo-category" ], "localised_name": "Combat" }, { "name": "fluids", "icon_name": "icon.g.fluids", - "order": "e", + "order": "f", "subgroups": [ "fluid" ], @@ -15986,34 +22873,55 @@ { "name": "signals", "icon_name": "icon.g.signals", - "order": "f", + "order": "g", "subgroups": [ "virtual-signal-special", "virtual-signal-number", "virtual-signal-letter", "virtual-signal-color", - "virtual-signal" + "virtual-signal", + "shapes", + "arrows", + "additions" ], "localised_name": "Signals" }, { "name": "enemies", "icon_name": "icon.g.enemies", - "order": "g", + "order": "h", "subgroups": [ "enemies" ], "localised_name": "Enemies" }, + { + "name": "tiles", + "icon_name": "icon.g.tiles", + "order": "i", + "subgroups": [ + "artificial-tiles", + "nauvis-tiles", + "vulcanus-tiles", + "gleba-water-tiles", + "gleba-tiles", + "fulgora-tiles", + "aquilo-tiles", + "special-tiles" + ], + "localised_name": "Tiles" + }, { "name": "environment", "icon_name": "icon.g.environment", - "order": "h", + "order": "l", "subgroups": [ "cliffs", "creatures", "trees", "grass", + "mineable-fluids", + "obstacles", "corpses", "storage-remnants", "belt-remnants", @@ -16061,6 +22969,8 @@ "rock-explosions", "ground-explosions", "decorative-explosions", + "enemy-death-explosions", + "fluid-explosions", "explosions", "hit-effects", "particles" @@ -16072,12 +22982,19 @@ "icon_name": "icon.g.other", "order": "z", "subgroups": [ + "parameters", + "qualities", + "spawnables", "other" ], "localised_name": "Unsorted" } ], "subgroups": [ + { + "name": "artificial-tiles", + "order": "a" + }, { "name": "cliffs", "order": "a" @@ -16102,6 +23019,10 @@ "name": "gun", "order": "a" }, + { + "name": "parameters", + "order": "a" + }, { "name": "storage", "order": "a" @@ -16166,6 +23087,14 @@ "name": "grass", "order": "b" }, + { + "name": "nauvis-tiles", + "order": "b" + }, + { + "name": "qualities", + "order": "b" + }, { "name": "raw-resource", "order": "b" @@ -16178,10 +23107,18 @@ "name": "energy-explosions", "order": "ba" }, + { + "name": "mineable-fluids", + "order": "ba" + }, { "name": "extraction-machine-explosions", "order": "bb" }, + { + "name": "obstacles", + "order": "bb" + }, { "name": "smelting-machine-explosions", "order": "bc" @@ -16218,10 +23155,18 @@ "name": "raw-material", "order": "c" }, + { + "name": "spawnables", + "order": "c" + }, { "name": "virtual-signal-letter", "order": "c" }, + { + "name": "vulcanus-tiles", + "order": "c" + }, { "name": "gun-explosions", "order": "ca" @@ -16250,6 +23195,10 @@ "name": "energy-pipe-distribution", "order": "d" }, + { + "name": "other", + "order": "d" + }, { "name": "smelting-machine", "order": "d" @@ -16258,6 +23207,14 @@ "name": "virtual-signal-color", "order": "d" }, + { + "name": "gleba-water-tiles", + "order": "d-a" + }, + { + "name": "gleba-tiles", + "order": "d-b" + }, { "name": "rock-explosions", "order": "da" @@ -16287,17 +23244,25 @@ "order": "dd" }, { - "name": "explosions", + "name": "enemy-death-explosions", "order": "de" }, { "name": "train-transport-remnants", "order": "de" }, + { + "name": "fluid-explosions", + "order": "df" + }, { "name": "transport-remnants", "order": "df" }, + { + "name": "explosions", + "order": "dg" + }, { "name": "logistic-network-remnants", "order": "dg" @@ -16346,6 +23311,10 @@ "name": "fill-barrel", "order": "e" }, + { + "name": "fulgora-tiles", + "order": "e" + }, { "name": "hit-effects", "order": "e" @@ -16371,23 +23340,31 @@ "order": "e" }, { - "name": "empty-barrel", + "name": "aquilo-tiles", "order": "f" }, { - "name": "military-equipment", + "name": "empty-barrel", "order": "f" }, { "name": "module", "order": "f" }, + { + "name": "shapes", + "order": "f" + }, { "name": "transport", "order": "f" }, { - "name": "defensive-structure", + "name": "utility-equipment", + "order": "f" + }, + { + "name": "arrows", "order": "g" }, { @@ -16398,16 +23375,32 @@ "name": "logistic-network", "order": "g" }, + { + "name": "military-equipment", + "order": "g" + }, { "name": "space-related", "order": "g" }, + { + "name": "special-tiles", + "order": "g" + }, + { + "name": "additions", + "order": "h" + }, { "name": "circuit-network", "order": "h" }, { - "name": "science-pack", + "name": "defensive-structure", + "order": "h" + }, + { + "name": "intermediate-recipe", "order": "h" }, { @@ -16415,7 +23408,23 @@ "order": "i" }, { - "name": "other", + "name": "turret", + "order": "i" + }, + { + "name": "uranium-processing", + "order": "i" + }, + { + "name": "ammo-category", + "order": "j" + }, + { + "name": "science-pack", + "order": "y" + }, + { + "name": "internal-process", "order": "z" } ] diff --git a/Foreman/ProductionGraphView/ProductionGraphViewer.cs b/Foreman/ProductionGraphView/ProductionGraphViewer.cs index 37e4f504..13fb66f0 100644 --- a/Foreman/ProductionGraphView/ProductionGraphViewer.cs +++ b/Foreman/ProductionGraphView/ProductionGraphViewer.cs @@ -1199,7 +1199,7 @@ public void LoadPreset(Preset preset) DCache = form.GetDataCache(); if (result == DialogResult.Abort) { - MessageBox.Show("The current preset (" + Properties.Settings.Default.CurrentPresetName + ") is corrupt. Switching to the default preset (Factorio 1.1 Vanilla)"); + MessageBox.Show("The current preset (" + Properties.Settings.Default.CurrentPresetName + ") is corrupt. Switching to the default preset (Factorio 2.0 Vanilla)"); Properties.Settings.Default.CurrentPresetName = MainForm.DefaultPreset; using (DataLoadForm form2 = new DataLoadForm(new Preset(MainForm.DefaultPreset, false, true))) {