diff --git a/Assets/Buildings.json b/Assets/Buildings.json index 766bf82..cfed5e7 100644 --- a/Assets/Buildings.json +++ b/Assets/Buildings.json @@ -9,7 +9,7 @@ ], "research": "basics", "texture": "res://Assets/Images/Buildings/Workbench.png", - "crafttime": 1.0, + "crafttime": 3.0, "stacksize": 1 }, { @@ -26,7 +26,7 @@ ], "research": "heat_control", "texture": "res://Assets/Images/Buildings/Furnace.png", - "crafttime": 1.0, + "crafttime": 10.0, "stacksize": 1 }, { @@ -47,7 +47,7 @@ ], "research": "basic_machines", "texture": "res://Assets/Images/Buildings/Crusher.png", - "crafttime": 1.0, + "crafttime": 8.0, "stacksize": 1 }, { @@ -64,7 +64,7 @@ ], "research": "basic_machines", "texture": "res://Assets/Images/Buildings/Press.png", - "crafttime": 1.0, + "crafttime": 6.5, "stacksize": 1 }, { @@ -81,7 +81,7 @@ ], "research": "basic_machines", "texture": "res://Assets/Images/Buildings/Anvil.png", - "crafttime": 1.0, + "crafttime": 7.5, "stacksize": 1 }, { @@ -98,7 +98,7 @@ ], "research": "textiles", "texture": "res://Assets/Images/Buildings/Loom.png", - "crafttime": 1.0, + "crafttime": 12.0, "stacksize": 1 }, { @@ -119,7 +119,7 @@ ], "research": "basic_electricity", "texture": "res://Assets/Images/Buildings/SteamGeneratorv1.png", - "crafttime": 1.0, + "crafttime": 18.0, "stacksize": 1 }, { @@ -136,7 +136,7 @@ ], "research": "stone_storage", "texture": "res://Assets/Images/Buildings/StoneChest.png", - "crafttime": 1.0, + "crafttime": 5.5, "stacksize": 1 }, { @@ -153,7 +153,7 @@ ], "research": "metalworking", "texture": "res://Assets/Images/Buildings/CopperChest.png", - "crafttime": 1.0, + "crafttime": 9.5, "stacksize": 1 }, { @@ -170,7 +170,7 @@ ], "research": "bronze_storage", "texture": "res://Assets/Images/Buildings/BronzeChest.png", - "crafttime": 1.0, + "crafttime": 14.0, "stacksize": 1 }, { @@ -187,7 +187,7 @@ ], "research": "iron_machining", "texture": "res://Assets/Images/Buildings/IronChest.png", - "crafttime": 1.0, + "crafttime": 17.0, "stacksize": 1 }, { @@ -208,7 +208,7 @@ ], "research": "advanced_power", "texture": "res://Assets/Images/Buildings/SteamGeneratorv2.png", - "crafttime": 1.0, + "crafttime": 28.0, "stacksize": 1 }, { @@ -225,7 +225,7 @@ ], "research": "glass_work", "texture": "res://Assets/Images/Buildings/WaterPurifier.png", - "crafttime": 1.0, + "crafttime": 12.5, "stacksize": 1 }, { @@ -246,7 +246,7 @@ ], "research": "glass_work", "texture": "res://Assets/Images/Buildings/Glassblower.png", - "crafttime": 1.0, + "crafttime": 13.5, "stacksize": 1 } -] +] \ No newline at end of file diff --git a/Assets/Recipes.json b/Assets/Recipes.json index ce3f8b8..63fc778 100644 --- a/Assets/Recipes.json +++ b/Assets/Recipes.json @@ -9,7 +9,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/IronSymbol.png", "research": "iron_smelting", - "crafttime": 1.0, + "crafttime": 3.2, "stacksize": 99 }, { @@ -22,7 +22,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/TinSymbol.png", "research": "tin_working", - "crafttime": 1.0, + "crafttime": 2.0, "stacksize": 99 }, { @@ -35,7 +35,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/CopperSymbol.png", "research": "stoneage", - "crafttime": 1.0, + "crafttime": 1.6, "stacksize": 99 }, { @@ -48,7 +48,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/MushroomSymbol.png", "research": "basics", - "crafttime": 1.0, + "crafttime": 0.8, "stacksize": 99 }, { @@ -61,7 +61,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/SpiderSilkSymbol.png", "research": "basics", - "crafttime": 1.0, + "crafttime": 1.2, "stacksize": 99 }, { @@ -74,7 +74,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/CoalSymbol.png", "research": "basics", - "crafttime": 1.0, + "crafttime": 1.1, "stacksize": 99 }, { @@ -87,7 +87,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/WaterSymbol.png", "research": "basics", - "crafttime": 1.0, + "crafttime": 0.6, "stacksize": 99 }, { @@ -100,7 +100,7 @@ "workstation": "", "texture": "res://Assets/Images/Resources/StoneSymbol.png", "research": "basics", - "crafttime": 1.0, + "crafttime": 0.9, "stacksize": 99 }, { @@ -118,7 +118,7 @@ "workstation": "crusher", "texture": "res://Assets/Images/Items/SandSymbol.png", "research": "basic_machines", - "crafttime": 1.0, + "crafttime": 2.5, "stacksize": 99 }, { @@ -136,149 +136,61 @@ "workstation": "workbench", "texture": "res://Assets/Images/Items/StoneGearSymbol.png", "research": "stone_tools", - "crafttime": 1.0, + "crafttime": 2.2, "stacksize": 99 }, { - "id": "copper_gear", + "id": "stone_plate", "inputs": [ { - "item": "copper_ingot", - "amount": 2 - } - ], - "output": { - "item": "copper_gear", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/CopperGearSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "tin_gear", - "inputs": [ - { - "item": "tin_ingot", - "amount": 2 - } - ], - "output": { - "item": "tin_gear", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/TinGearSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "bronze_gear", - "inputs": [ - { - "item": "bronze_ingot", - "amount": 2 - } - ], - "output": { - "item": "bronze_gear", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/BronzeGearSymbol.png", - "research": "bronze_machining", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "bronze_ingot", - "inputs": [ - { - "item": "tin_ingot", - "amount": 1 - }, - { - "item": "copper_ingot", - "amount": 2 - }, - { - "item": "coal", - "amount": 2 - } - ], - "output": { - "item": "bronze_ingot", - "amount": 1 - }, - "workstation": "furnace", - "texture": "res://Assets/Images/Items/BronzeIngotSymbol.png", - "research": "bronze_smelting", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "iron_gear", - "inputs": [ - { - "item": "iron_ingot", - "amount": 2 - } - ], - "output": { - "item": "iron_gear", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/IronGearSymbol.png", - "research": "iron_machining", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "iron_ingot", - "inputs": [ - { - "item": "iron_ore", + "item": "stone", "amount": 3 - }, - { - "item": "coal", - "amount": 2 } ], "output": { - "item": "iron_ingot", + "item": "stone_plate", "amount": 1 }, - "workstation": "furnace", - "texture": "res://Assets/Images/Items/IronIngotSymbol.png", - "research": "iron_smelting", - "crafttime": 1.0, + "workstation": "workbench", + "texture": "res://Assets/Images/Items/StonePlateSymbol.png", + "research": "basic_machines", + "crafttime": 2.0, "stacksize": 99 }, { - "id": "tin_ingot", + "id": "rope", "inputs": [ { - "item": "tin_ore", + "item": "spider_silk", "amount": 2 - }, - { - "item": "coal", - "amount": 1 } ], "output": { - "item": "tin_ingot", + "item": "rope", "amount": 1 }, - "workstation": "furnace", - "texture": "res://Assets/Images/Items/TinIngotSymbol.png", - "research": "tin_working", - "crafttime": 1.0, + "workstation": "workbench", + "texture": "res://Assets/Images/Items/RopeSymbol.png", + "research": "stone_tools", + "crafttime": 1.8, + "stacksize": 99 + }, + { + "id": "heating_element_v1", + "inputs": [ + { + "item": "stone", + "amount": 4 + } + ], + "output": { + "item": "heating_element_v1", + "amount": 1 + }, + "workstation": "workbench", + "texture": "res://Assets/Images/Items/Heaterv1Symbol.png", + "research": "heat_control", + "crafttime": 3.5, "stacksize": 99 }, { @@ -300,171 +212,155 @@ "workstation": "furnace", "texture": "res://Assets/Images/Items/CopperIngotSymbol.png", "research": "copper_smelting", - "crafttime": 1.0, + "crafttime": 4.5, "stacksize": 99 }, { - "id": "rope", + "id": "tin_ingot", "inputs": [ { - "item": "spider_silk", - "amount": 2 - } - ], - "output": { - "item": "rope", - "amount": 1 - }, - "workstation": "workbench", - "texture": "res://Assets/Images/Items/RopeSymbol.png", - "research": "stone_tools", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "stone_robot", - "inputs": [ - { - "item": "stone", - "amount": 6 - }, - { - "item": "rope", - "amount": 3 - }, - { - "item": "stone_gear", - "amount": 2 - } - ], - "output": { - "item": "stone_robot", - "amount": 1 - }, - "workstation": "workbench", - "texture": "res://Assets/Images/Items/StoneRobotSymbol.png", - "research": "stone_robotics", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "copper_robot", - "inputs": [ - { - "item": "copper_plate", + "item": "tin_ore", "amount": 2 }, { - "item": "rope", - "amount": 3 - }, - { - "item": "copper_gear", - "amount": 2 - }, - { - "item": "battery_v1", + "item": "coal", "amount": 1 } ], "output": { - "item": "copper_robot", + "item": "tin_ingot", "amount": 1 }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/CopperRobotSymbol.png", - "research": "copper_robotics", - "crafttime": 1.0, + "workstation": "furnace", + "texture": "res://Assets/Images/Items/TinIngotSymbol.png", + "research": "tin_working", + "crafttime": 5.0, "stacksize": 99 }, { - "id": "tin_robot", + "id": "copper_rod", "inputs": [ { - "item": "tin_plate", - "amount": 2 - }, - { - "item": "rope", - "amount": 3 - }, - { - "item": "tin_gear", - "amount": 2 - }, - { - "item": "battery_v1", + "item": "copper_ingot", "amount": 1 } ], "output": { - "item": "tin_robot", + "item": "copper_rod", "amount": 1 }, "workstation": "anvil", - "texture": "res://Assets/Images/Items/TinRobotSymbol.png", - "research": "copper_robotics", - "crafttime": 1.0, + "texture": "res://Assets/Images/Items/CopperRodSymbol.png", + "research": "metalworking", + "crafttime": 3.0, "stacksize": 99 }, { - "id": "bronze_robot", + "id": "tin_rod", "inputs": [ { - "item": "bronze_plate", - "amount": 3 - }, + "item": "tin_ingot", + "amount": 1 + } + ], + "output": { + "item": "tin_rod", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/TinRodSymbol.png", + "research": "metalworking", + "crafttime": 3.2, + "stacksize": 99 + }, + { + "id": "copper_wire", + "inputs": [ { - "item": "rope", - "amount": 4 - }, + "item": "copper_ingot", + "amount": 1 + } + ], + "output": { + "item": "copper_wire", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/CopperWireSymbol.png", + "research": "metalworking", + "crafttime": 3.4, + "stacksize": 99 + }, + { + "id": "copper_plate", + "inputs": [ { - "item": "bronze_gear", - "amount": 2 - }, - { - "item": "battery_v1", + "item": "copper_ingot", "amount": 2 } ], "output": { - "item": "bronze_robot", + "item": "copper_plate", "amount": 1 }, "workstation": "anvil", - "texture": "res://Assets/Images/Items/BronzeRobotSymbol.png", - "research": "bronze_robotics", - "crafttime": 1.0, + "texture": "res://Assets/Images/Items/CopperPlateSymbol.png", + "research": "metalworking", + "crafttime": 3.8, "stacksize": 99 }, { - "id": "iron_robot", + "id": "tin_plate", "inputs": [ { - "item": "iron_plate", - "amount": 4 - }, - { - "item": "rope", - "amount": 6 - }, - { - "item": "iron_gear", - "amount": 3 - }, - { - "item": "battery_v2", + "item": "tin_ingot", "amount": 2 } ], "output": { - "item": "iron_robot", + "item": "tin_plate", "amount": 1 }, "workstation": "anvil", - "texture": "res://Assets/Images/Items/IronRobotSymbol.png", - "research": "iron_robotics", - "crafttime": 1.0, + "texture": "res://Assets/Images/Items/TinPlateSymbol.png", + "research": "metalworking", + "crafttime": 4.0, + "stacksize": 99 + }, + { + "id": "copper_gear", + "inputs": [ + { + "item": "copper_ingot", + "amount": 2 + } + ], + "output": { + "item": "copper_gear", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/CopperGearSymbol.png", + "research": "metalworking", + "crafttime": 4.2, + "stacksize": 99 + }, + { + "id": "tin_gear", + "inputs": [ + { + "item": "tin_ingot", + "amount": 2 + } + ], + "output": { + "item": "tin_gear", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/TinGearSymbol.png", + "research": "metalworking", + "crafttime": 4.4, "stacksize": 99 }, { @@ -486,7 +382,29 @@ "workstation": "furnace", "texture": "res://Assets/Images/Items/GlassSymbol.png", "research": "glass_work", - "crafttime": 1.0, + "crafttime": 5.5, + "stacksize": 99 + }, + { + "id": "glass_bottles", + "inputs": [ + { + "item": "glass", + "amount": 2 + }, + { + "item": "coal", + "amount": 1 + } + ], + "output": { + "item": "glass_bottles", + "amount": 1 + }, + "workstation": "glassblower", + "texture": "res://Assets/Images/Items/GlassBottleSymbol.png", + "research": "glass_work", + "crafttime": 6.5, "stacksize": 99 }, { @@ -508,79 +426,7 @@ "workstation": "loom", "texture": "res://Assets/Images/Items/RopeSymbol.png", "research": "textiles", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "copper_rod", - "inputs": [ - { - "item": "copper_ingot", - "amount": 1 - } - ], - "output": { - "item": "copper_rod", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/CopperRodSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "tin_rod", - "inputs": [ - { - "item": "tin_ingot", - "amount": 1 - } - ], - "output": { - "item": "tin_rod", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/TinRodSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "bronze_rod", - "inputs": [ - { - "item": "bronze_ingot", - "amount": 1 - } - ], - "output": { - "item": "bronze_rod", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/BronzeRodSymbol.png", - "research": "bronze_machining", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "iron_rod", - "inputs": [ - { - "item": "iron_ingot", - "amount": 1 - } - ], - "output": { - "item": "iron_rod", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/IronRodSymbol.png", - "research": "iron_machining", - "crafttime": 1.0, + "crafttime": 5.8, "stacksize": 99 }, { @@ -606,7 +452,7 @@ "workstation": "workbench", "texture": "res://Assets/Images/Items/Batteryv1Symbol.png", "research": "basic_electricity", - "crafttime": 1.0, + "crafttime": 7.5, "stacksize": 99 }, { @@ -632,97 +478,73 @@ "workstation": "anvil", "texture": "res://Assets/Images/Items/Dynamov1Symbol.png", "research": "basic_electricity", - "crafttime": 1.0, + "crafttime": 9.5, "stacksize": 99 }, { - "id": "copper_wire", + "id": "steam", "inputs": [ + { + "item": "water", + "amount": 2 + }, + { + "item": "coal", + "amount": 2 + } + ], + "output": { + "item": "steam", + "amount": 1 + }, + "workstation": "steam_generator_v1", + "texture": "res://Assets/Images/Items/SteamSymbol.png", + "research": "basic_electricity", + "crafttime": 4.0, + "stacksize": 99 + }, + { + "id": "bronze_ingot", + "inputs": [ + { + "item": "tin_ingot", + "amount": 1 + }, { "item": "copper_ingot", + "amount": 2 + }, + { + "item": "coal", + "amount": 2 + } + ], + "output": { + "item": "bronze_ingot", + "amount": 1 + }, + "workstation": "furnace", + "texture": "res://Assets/Images/Items/BronzeIngotSymbol.png", + "research": "bronze_smelting", + "crafttime": 7.5, + "stacksize": 99 + }, + { + "id": "bronze_rod", + "inputs": [ + { + "item": "bronze_ingot", "amount": 1 } ], "output": { - "item": "copper_wire", + "item": "bronze_rod", "amount": 1 }, "workstation": "anvil", - "texture": "res://Assets/Images/Items/CopperWireSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "heating_element_v1", - "inputs": [ - { - "item": "stone", - "amount": 4 - } - ], - "output": { - "item": "heating_element_v1", - "amount": 1 - }, - "workstation": "workbench", - "texture": "res://Assets/Images/Items/Heaterv1Symbol.png", - "research": "heat_control", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "stone_plate", - "inputs": [ - { - "item": "stone", - "amount": 3 - } - ], - "output": { - "item": "stone_plate", - "amount": 1 - }, - "workstation": "workbench", - "texture": "res://Assets/Images/Items/StonePlateSymbol.png", - "research": "basic_machines", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "copper_plate", - "inputs": [ - { - "item": "copper_ingot", - "amount": 2 - } - ], - "output": { - "item": "copper_plate", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/CopperPlateSymbol.png", - "research": "metalworking", - "crafttime": 1.0, - "stacksize": 99 - }, - { - "id": "iron_plate", - "inputs": [ - { - "item": "iron_ingot", - "amount": 2 - } - ], - "output": { - "item": "iron_plate", - "amount": 1 - }, - "workstation": "anvil", - "texture": "res://Assets/Images/Items/IronPlateSymbol.png", - "research": "iron_machining", - "crafttime": 1.0, + "texture": "res://Assets/Images/Items/BronzeRodSymbol.png", + "research": "bronze_machining", + "crafttime": 4.8, "stacksize": 99 }, { @@ -740,25 +562,101 @@ "workstation": "anvil", "texture": "res://Assets/Images/Items/BronzePlateSymbol.png", "research": "bronze_machining", - "crafttime": 1.0, + "crafttime": 5.8, "stacksize": 99 }, { - "id": "tin_plate", + "id": "bronze_gear", "inputs": [ { - "item": "tin_ingot", + "item": "bronze_ingot", "amount": 2 } ], "output": { - "item": "tin_plate", + "item": "bronze_gear", "amount": 1 }, "workstation": "anvil", - "texture": "res://Assets/Images/Items/TinPlateSymbol.png", - "research": "metalworking", - "crafttime": 1.0, + "texture": "res://Assets/Images/Items/BronzeGearSymbol.png", + "research": "bronze_machining", + "crafttime": 6.4, + "stacksize": 99 + }, + { + "id": "iron_ingot", + "inputs": [ + { + "item": "iron_ore", + "amount": 3 + }, + { + "item": "coal", + "amount": 2 + } + ], + "output": { + "item": "iron_ingot", + "amount": 1 + }, + "workstation": "furnace", + "texture": "res://Assets/Images/Items/IronIngotSymbol.png", + "research": "iron_smelting", + "crafttime": 9.0, + "stacksize": 99 + }, + { + "id": "iron_rod", + "inputs": [ + { + "item": "iron_ingot", + "amount": 1 + } + ], + "output": { + "item": "iron_rod", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/IronRodSymbol.png", + "research": "iron_machining", + "crafttime": 5.8, + "stacksize": 99 + }, + { + "id": "iron_plate", + "inputs": [ + { + "item": "iron_ingot", + "amount": 2 + } + ], + "output": { + "item": "iron_plate", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/IronPlateSymbol.png", + "research": "iron_machining", + "crafttime": 7.0, + "stacksize": 99 + }, + { + "id": "iron_gear", + "inputs": [ + { + "item": "iron_ingot", + "amount": 2 + } + ], + "output": { + "item": "iron_gear", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/IronGearSymbol.png", + "research": "iron_machining", + "crafttime": 7.8, "stacksize": 99 }, { @@ -784,7 +682,7 @@ "workstation": "workbench", "texture": "res://Assets/Images/Items/Batteryv2Symbol.png", "research": "advanced_power", - "crafttime": 1.0, + "crafttime": 11.0, "stacksize": 99 }, { @@ -814,51 +712,153 @@ "workstation": "anvil", "texture": "res://Assets/Images/Items/Dynamov2Symbol.png", "research": "advanced_power", - "crafttime": 1.0, + "crafttime": 15.0, "stacksize": 99 }, { - "id": "steam", + "id": "stone_robot", "inputs": [ { - "item": "water", - "amount": 2 + "item": "stone", + "amount": 6 }, { - "item": "coal", + "item": "rope", + "amount": 3 + }, + { + "item": "stone_gear", "amount": 2 } ], "output": { - "item": "steam", + "item": "stone_robot", "amount": 1 }, - "workstation": "steam_generator_v1", - "texture": "res://Assets/Images/Items/SteamSymbol.png", - "research": "basic_electricity", - "crafttime": 1.0, + "workstation": "workbench", + "texture": "res://Assets/Images/Items/StoneRobotSymbol.png", + "research": "stone_robotics", + "crafttime": 8.0, "stacksize": 99 }, { - "id": "glass_bottles", + "id": "copper_robot", "inputs": [ { - "item": "glass", + "item": "copper_plate", "amount": 2 }, { - "item": "coal", + "item": "rope", + "amount": 3 + }, + { + "item": "copper_gear", + "amount": 2 + }, + { + "item": "battery_v1", "amount": 1 } ], "output": { - "item": "glass_bottles", + "item": "copper_robot", "amount": 1 }, - "workstation": "glassblower", - "texture": "res://Assets/Images/Items/GlassBottleSymbol.png", - "research": "glass_work", - "crafttime": 1.0, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/CopperRobotSymbol.png", + "research": "copper_robotics", + "crafttime": 13.0, + "stacksize": 99 + }, + { + "id": "tin_robot", + "inputs": [ + { + "item": "tin_plate", + "amount": 2 + }, + { + "item": "rope", + "amount": 3 + }, + { + "item": "tin_gear", + "amount": 2 + }, + { + "item": "battery_v1", + "amount": 1 + } + ], + "output": { + "item": "tin_robot", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/TinRobotSymbol.png", + "research": "copper_robotics", + "crafttime": 13.5, + "stacksize": 99 + }, + { + "id": "bronze_robot", + "inputs": [ + { + "item": "bronze_plate", + "amount": 3 + }, + { + "item": "rope", + "amount": 4 + }, + { + "item": "bronze_gear", + "amount": 2 + }, + { + "item": "battery_v1", + "amount": 2 + } + ], + "output": { + "item": "bronze_robot", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/BronzeRobotSymbol.png", + "research": "bronze_robotics", + "crafttime": 18.0, + "stacksize": 99 + }, + { + "id": "iron_robot", + "inputs": [ + { + "item": "iron_plate", + "amount": 4 + }, + { + "item": "rope", + "amount": 6 + }, + { + "item": "iron_gear", + "amount": 3 + }, + { + "item": "battery_v2", + "amount": 2 + } + ], + "output": { + "item": "iron_robot", + "amount": 1 + }, + "workstation": "anvil", + "texture": "res://Assets/Images/Items/IronRobotSymbol.png", + "research": "iron_robotics", + "crafttime": 25.0, "stacksize": 99 } -] +] \ No newline at end of file diff --git a/Assets/Research.json b/Assets/Research.json index 7b6b72e..8d88bb1 100644 --- a/Assets/Research.json +++ b/Assets/Research.json @@ -19,7 +19,7 @@ } ], "research": "basics", - "crafttime": 1.0, + "crafttime": 4.0, "texture": "res://Assets/Images/Research/StoneageSymbol.png" }, { @@ -35,7 +35,7 @@ } ], "research": "stoneage", - "crafttime": 1.0, + "crafttime": 5.0, "texture": "res://Assets/Images/Items/StoneGearSymbol.png" }, { @@ -55,7 +55,7 @@ } ], "research": "stone_tools", - "crafttime": 1.0, + "crafttime": 7.0, "texture": "res://Assets/Images/Items/StoneGearSymbol.png" }, { @@ -71,7 +71,7 @@ } ], "research": "basic_machines", - "crafttime": 1.0, + "crafttime": 8.0, "texture": "res://Assets/Images/Items/Heaterv1Symbol.png" }, { @@ -91,7 +91,7 @@ } ], "research": "heat_control", - "crafttime": 1.0, + "crafttime": 9.0, "texture": "res://Assets/Images/Items/GlassSymbol.png" }, { @@ -107,7 +107,7 @@ } ], "research": "basic_machines", - "crafttime": 1.0, + "crafttime": 6.0, "texture": "res://Assets/Images/Items/StonePlateSymbol.png" }, { @@ -123,9 +123,35 @@ } ], "research": "stone_tools", - "crafttime": 1.0, + "crafttime": 8.0, "texture": "res://Assets/Images/Items/StoneRobotSymbol.png" }, + { + "id": "joint_tuning", + "inputs": [ + { + "item": "stone_gear", + "amount": 3 + }, + { + "item": "rope", + "amount": 4 + } + ], + "research": "stone_robotics", + "crafttime": 10.0, + "texture": "res://Assets/Images/Items/StoneGearSymbol.png", + "effects": [ + { + "stat": "robot_speed_bonus", + "value": 0.1 + }, + { + "stat": "robot_minimum_efficiency_bonus", + "value": 0.05 + } + ] + }, { "id": "copperage", "inputs": [ @@ -139,7 +165,7 @@ } ], "research": "heat_control", - "crafttime": 1.0, + "crafttime": 12.0, "texture": "res://Assets/Images/Research/CopperageSymbol.png" }, { @@ -155,7 +181,7 @@ } ], "research": "copperage", - "crafttime": 1.0, + "crafttime": 13.0, "texture": "res://Assets/Images/Items/CopperIngotSymbol.png" }, { @@ -171,7 +197,7 @@ } ], "research": "copper_smelting", - "crafttime": 1.0, + "crafttime": 14.0, "texture": "res://Assets/Images/Items/TinIngotSymbol.png" }, { @@ -191,7 +217,7 @@ } ], "research": "tin_working", - "crafttime": 1.0, + "crafttime": 16.0, "texture": "res://Assets/Images/Items/CopperGearSymbol.png" }, { @@ -211,7 +237,7 @@ } ], "research": "metalworking", - "crafttime": 1.0, + "crafttime": 15.0, "texture": "res://Assets/Images/Items/RopeSymbol.png" }, { @@ -235,7 +261,7 @@ } ], "research": "metalworking", - "crafttime": 1.0, + "crafttime": 18.0, "texture": "res://Assets/Images/Items/Batteryv1Symbol.png" }, { @@ -255,9 +281,69 @@ } ], "research": "basic_electricity", - "crafttime": 1.0, + "crafttime": 20.0, "texture": "res://Assets/Images/Items/CopperRobotSymbol.png" }, + { + "id": "efficient_actuators", + "inputs": [ + { + "item": "battery_v1", + "amount": 1 + }, + { + "item": "copper_wire", + "amount": 6 + }, + { + "item": "copper_gear", + "amount": 2 + } + ], + "research": "copper_robotics", + "crafttime": 22.0, + "texture": "res://Assets/Images/Items/CopperWireSymbol.png", + "effects": [ + { + "stat": "robot_energy_use_reduction", + "value": 0.12 + }, + { + "stat": "robot_speed_bonus", + "value": 0.08 + } + ] + }, + { + "id": "cooling_channels", + "inputs": [ + { + "item": "copper_plate", + "amount": 3 + }, + { + "item": "water", + "amount": 6 + }, + { + "item": "heating_element_v1", + "amount": 1 + } + ], + "research": "efficient_actuators", + "crafttime": 21.0, + "texture": "res://Assets/Images/Resources/WaterSymbol.png", + "effects": [ + { + "stat": "robot_heat_gain_reduction", + "value": 0.15 + }, + { + "stat": "robot_cooling_bonus", + "value": 0.25 + } + ] + }, { "id": "bronzeage", "inputs": [ @@ -271,7 +357,7 @@ } ], "research": "basic_electricity", - "crafttime": 1.0, + "crafttime": 24.0, "texture": "res://Assets/Images/Research/BronzeageSymbol.png" }, { @@ -291,7 +377,7 @@ } ], "research": "bronzeage", - "crafttime": 1.0, + "crafttime": 26.0, "texture": "res://Assets/Images/Items/BronzeIngotSymbol.png" }, { @@ -307,7 +393,7 @@ } ], "research": "bronze_smelting", - "crafttime": 1.0, + "crafttime": 29.0, "texture": "res://Assets/Images/Items/BronzeGearSymbol.png" }, { @@ -323,7 +409,7 @@ } ], "research": "bronze_machining", - "crafttime": 1.0, + "crafttime": 27.0, "texture": "res://Assets/Images/Items/BronzePlateSymbol.png" }, { @@ -343,9 +429,39 @@ } ], "research": "bronze_machining", - "crafttime": 1.0, + "crafttime": 32.0, "texture": "res://Assets/Images/Items/BronzeRobotSymbol.png" }, + { + "id": "sealed_bearings", + "inputs": [ + { + "item": "bronze_gear", + "amount": 3 + }, + { + "item": "bronze_plate", + "amount": 4 + }, + { + "item": "glass_bottles", + "amount": 2 + } + ], + "research": "bronze_robotics", + "crafttime": 35.0, + "texture": "res://Assets/Images/Items/BronzeGearSymbol.png", + "effects": [ + { + "stat": "robot_maintenance_loss_reduction", + "value": 0.2 + }, + { + "stat": "robot_minimum_efficiency_bonus", + "value": 0.08 + } + ] + }, { "id": "ironage", "inputs": [ @@ -363,7 +479,7 @@ } ], "research": "bronze_robotics", - "crafttime": 1.0, + "crafttime": 38.0, "texture": "res://Assets/Images/Research/IronageSymbol.png" }, { @@ -379,7 +495,7 @@ } ], "research": "ironage", - "crafttime": 1.0, + "crafttime": 40.0, "texture": "res://Assets/Images/Items/IronIngotSymbol.png" }, { @@ -395,7 +511,7 @@ } ], "research": "iron_smelting", - "crafttime": 1.0, + "crafttime": 44.0, "texture": "res://Assets/Images/Items/IronGearSymbol.png" }, { @@ -415,7 +531,7 @@ } ], "research": "iron_machining", - "crafttime": 1.0, + "crafttime": 48.0, "texture": "res://Assets/Images/Items/Batteryv2Symbol.png" }, { @@ -435,7 +551,67 @@ } ], "research": "advanced_power", - "crafttime": 1.0, + "crafttime": 54.0, "texture": "res://Assets/Images/Items/IronRobotSymbol.png" + }, + { + "id": "regulated_power_cores", + "inputs": [ + { + "item": "battery_v2", + "amount": 2 + }, + { + "item": "dynamo_v2", + "amount": 1 + }, + { + "item": "iron_rod", + "amount": 4 + } + ], + "research": "iron_robotics", + "crafttime": 58.0, + "texture": "res://Assets/Images/Items/Batteryv2Symbol.png", + "effects": [ + { + "stat": "robot_energy_use_reduction", + "value": 0.18 + }, + { + "stat": "robot_heat_gain_reduction", + "value": 0.12 + } + ] + }, + { + "id": "precision_drive_train", + "inputs": [ + { + "item": "iron_gear", + "amount": 4 + }, + { + "item": "iron_plate", + "amount": 4 + }, + { + "item": "battery_v2", + "amount": 1 + } + ], + "research": "regulated_power_cores", + "crafttime": 62.0, + "texture": "res://Assets/Images/Items/IronGearSymbol.png", + "effects": [ + { + "stat": "robot_speed_bonus", + "value": 0.18 + }, + { + "stat": "robot_maintenance_loss_reduction", + "value": 0.12 + } + ] } -] +] \ No newline at end of file diff --git a/Scripts/Core/GameData.cs b/Scripts/Core/GameData.cs index 65cba23..b802502 100644 --- a/Scripts/Core/GameData.cs +++ b/Scripts/Core/GameData.cs @@ -15,12 +15,13 @@ public partial class GameData public static bool canMove = true; public static int maxRobotCount = 1000; public static List robots = new List(); - public static float robotSpeed = 20f; + public static float robotSpeed = 10f; public static float tileWidth = 6; public static float tileHeight = 4; public static SortedDictionary availableItems = ResourceLoader.LoadItems(); public static Dictionary availableResearch = ResourceLoader.LoadResearch(); public static SurvivalState survival = new SurvivalState(); + public static RobotStats robotStats = new RobotStats(); public static Color primaryColor = new Color("#276ac2"); public static Color lightColor = new Color("#7efff5"); diff --git a/Scripts/Gameplay/Research/Research.cs b/Scripts/Gameplay/Research/Research.cs index 23bd0b0..e438eda 100644 --- a/Scripts/Gameplay/Research/Research.cs +++ b/Scripts/Gameplay/Research/Research.cs @@ -25,13 +25,20 @@ public class Research elapsedResearchTime += delta; if (elapsedResearchTime >= data.CraftTime) { - state = ResearchState.RESEARCHED; + Complete(); return ResearchResult.FINISHED; } - return ResearchResult.RESEARCHING; } + public void Complete() + { + if (state == ResearchState.RESEARCHED) return; + + state = ResearchState.RESEARCHED; + GameData.robotStats.Apply(data.Effects); + } + public static string GetReadableName(string input) { string noUnderscore = input.Replace("_", " ").ToLower(); diff --git a/Scripts/Gameplay/Research/ResearchData.cs b/Scripts/Gameplay/Research/ResearchData.cs index e28ff7c..aca3542 100644 --- a/Scripts/Gameplay/Research/ResearchData.cs +++ b/Scripts/Gameplay/Research/ResearchData.cs @@ -18,6 +18,9 @@ public class ResearchData [JsonPropertyName("texture")] public string Texture { get; set; } + [JsonPropertyName("effects")] + public List Effects { get; set; } + public string GetReadableName() { string noUnderscore = Id.Replace("_", " ").ToLower(); diff --git a/Scripts/Gameplay/Research/ResearchEffect.cs b/Scripts/Gameplay/Research/ResearchEffect.cs new file mode 100644 index 0000000..2a90a0e --- /dev/null +++ b/Scripts/Gameplay/Research/ResearchEffect.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Serialization; + +public class ResearchEffect +{ + [JsonPropertyName("stat")] + public string Stat { get; set; } + + [JsonPropertyName("value")] + public float Value { get; set; } + + public string GetDisplayText() + { + return Stat switch + { + "robot_speed_bonus" => $"Robot speed +{Value * 100f:0}%", + "robot_energy_use_reduction" => $"Robot energy use -{Value * 100f:0}%", + "robot_heat_gain_reduction" => $"Robot heat gain -{Value * 100f:0}%", + "robot_cooling_bonus" => $"Robot cooling +{Value * 100f:0}%", + "robot_maintenance_loss_reduction" => $"Robot maintenance loss -{Value * 100f:0}%", + "robot_minimum_efficiency_bonus" => $"Damaged robot efficiency +{Value * 100f:0}%", + _ => Stat + }; + } +} diff --git a/Scripts/Gameplay/Research/ResearchEffect.cs.uid b/Scripts/Gameplay/Research/ResearchEffect.cs.uid new file mode 100644 index 0000000..9e03b13 --- /dev/null +++ b/Scripts/Gameplay/Research/ResearchEffect.cs.uid @@ -0,0 +1 @@ +uid://c6k1b1inavgyj diff --git a/Scripts/Gameplay/Research/ResearchState.cs b/Scripts/Gameplay/Research/ResearchState.cs index 84cd46f..3ad4455 100644 --- a/Scripts/Gameplay/Research/ResearchState.cs +++ b/Scripts/Gameplay/Research/ResearchState.cs @@ -3,5 +3,6 @@ public enum ResearchState UNDEFINED, RESEARCHED, AVAILABLE, - LOCKED + LOCKED, + RESEARCHING } \ No newline at end of file diff --git a/Scripts/Gameplay/Robots/Robot.cs b/Scripts/Gameplay/Robots/Robot.cs index 78cd756..cc081dd 100644 --- a/Scripts/Gameplay/Robots/Robot.cs +++ b/Scripts/Gameplay/Robots/Robot.cs @@ -49,7 +49,7 @@ public partial class Robot : Node3D } else if (currentMessage.Length <= 0) { - CoolDown(delta, IdleHeatLossPerSecond); + CoolDown(delta, GameData.robotStats.GetCoolingRate(IdleHeatLossPerSecond)); currentMessage = "No script executing"; } @@ -68,7 +68,7 @@ public partial class Robot : Node3D public float GetMovementSpeed() { - return GameData.robotSpeed * GetWorkEfficiency(); + return GameData.robotStats.GetMovementSpeed(GameData.robotSpeed) * GetWorkEfficiency(); } public float GetWorkEfficiency() @@ -76,7 +76,8 @@ public partial class Robot : Node3D if (isBroken) return 0f; if (maintenance >= 50f) return 1f; - return Math.Clamp(0.35f + maintenance / 100f, 0.35f, 1f); + float minimumEfficiency = GameData.robotStats.GetMinimumEfficiency(); + return Math.Clamp(minimumEfficiency + maintenance / 100f, minimumEfficiency, 1f); } public void Maintain() @@ -102,19 +103,19 @@ public partial class Robot : Node3D if (isCoolingDown) { - CoolDown(delta, ActiveHeatLossPerSecond); + CoolDown(delta, GameData.robotStats.GetCoolingRate(ActiveHeatLossPerSecond)); currentMessage = $"Cooling down ({heat:0}%)"; return false; } - if (!GameData.survival.TryConsumeEnergy(EnergyUsePerSecond * (float)delta)) + if (!GameData.survival.TryConsumeEnergy(GameData.robotStats.GetEnergyUse(EnergyUsePerSecond) * (float)delta)) { currentMessage = "Not enough energy"; return false; } - heat = Math.Clamp(heat + HeatGainPerSecond * (float)delta, 0f, 100f); - maintenance = Math.Clamp(maintenance - MaintenanceLossPerSecond * (float)delta, 0f, 100f); + heat = Math.Clamp(heat + GameData.robotStats.GetHeatGain(HeatGainPerSecond) * (float)delta, 0f, 100f); + maintenance = Math.Clamp(maintenance - GameData.robotStats.GetMaintenanceLoss(MaintenanceLossPerSecond) * (float)delta, 0f, 100f); if (heat >= 100f) { diff --git a/Scripts/Gameplay/Robots/RobotStats.cs b/Scripts/Gameplay/Robots/RobotStats.cs new file mode 100644 index 0000000..710d390 --- /dev/null +++ b/Scripts/Gameplay/Robots/RobotStats.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; + +public class RobotStats +{ + private const float BaseMinimumEfficiency = 0.35f; + + private float speedBonus = 0f; + private float energyUseReduction = 0f; + private float heatGainReduction = 0f; + private float coolingBonus = 0f; + private float maintenanceLossReduction = 0f; + private float minimumEfficiencyBonus = 0f; + + public float GetMovementSpeed(float baseSpeed) + { + return baseSpeed * (1f + speedBonus); + } + + public float GetEnergyUse(float baseEnergyUse) + { + return baseEnergyUse * (1f - Math.Clamp(energyUseReduction, 0f, 0.8f)); + } + + public float GetHeatGain(float baseHeatGain) + { + return baseHeatGain * (1f - Math.Clamp(heatGainReduction, 0f, 0.8f)); + } + + public float GetCoolingRate(float baseCoolingRate) + { + return baseCoolingRate * (1f + coolingBonus); + } + + public float GetMaintenanceLoss(float baseMaintenanceLoss) + { + return baseMaintenanceLoss * (1f - Math.Clamp(maintenanceLossReduction, 0f, 0.8f)); + } + + public float GetMinimumEfficiency() + { + return Math.Clamp(BaseMinimumEfficiency + minimumEfficiencyBonus, BaseMinimumEfficiency, 0.85f); + } + + public void Apply(List effects) + { + if (effects == null) return; + + foreach (ResearchEffect effect in effects) + { + Apply(effect); + } + } + + private void Apply(ResearchEffect effect) + { + if (effect == null) return; + + switch (effect.Stat) + { + case "robot_speed_bonus": + speedBonus += effect.Value; + break; + case "robot_energy_use_reduction": + energyUseReduction += effect.Value; + break; + case "robot_heat_gain_reduction": + heatGainReduction += effect.Value; + break; + case "robot_cooling_bonus": + coolingBonus += effect.Value; + break; + case "robot_maintenance_loss_reduction": + maintenanceLossReduction += effect.Value; + break; + case "robot_minimum_efficiency_bonus": + minimumEfficiencyBonus += effect.Value; + break; + } + } +} diff --git a/Scripts/Gameplay/Robots/RobotStats.cs.uid b/Scripts/Gameplay/Robots/RobotStats.cs.uid new file mode 100644 index 0000000..7e4d0ec --- /dev/null +++ b/Scripts/Gameplay/Robots/RobotStats.cs.uid @@ -0,0 +1 @@ +uid://djuorq37m01xc diff --git a/Scripts/UI/Research/ResearchList.cs b/Scripts/UI/Research/ResearchList.cs index ee4d01e..2e3caaa 100644 --- a/Scripts/UI/Research/ResearchList.cs +++ b/Scripts/UI/Research/ResearchList.cs @@ -1,5 +1,7 @@ using Godot; using Godot.Collections; +using System.Collections.Generic; +using System.Text; public partial class ResearchList : PanelContainer { @@ -7,12 +9,33 @@ public partial class ResearchList : PanelContainer private System.Collections.Generic.Dictionary nodePositions = new System.Collections.Generic.Dictionary(); private bool hasArrangedNodes = false; + private List currentResearch = new List(); + private List toDelete = new List(); + public override void _Ready() { RecalculateResearchStates(); if (Visible) SetupGraph(); } + public override void _Process(double delta) + { + if(currentResearch.Count > 0) toDelete = new List(); + foreach (Research research in currentResearch) + { + if (research.Execute(delta) == ResearchResult.FINISHED) + { + toDelete.Add(research); + RecalculateResearchStates(); + SetupGraph(); + } + } + foreach (Research delete in toDelete) + { + currentResearch.Remove(delete); + } + } + public void SetupGraph() { RememberNodePositions(); @@ -98,6 +121,7 @@ public partial class ResearchList : PanelContainer { Texture2D texture = GD.Load(texturePath); Color stateColor = GetColorByState(state); + string tooltipText = GetResearchTooltip(GameData.availableResearch[id]); TextureRect icon = new TextureRect { @@ -110,7 +134,8 @@ public partial class ResearchList : PanelContainer Button button = new Button { Text = "Research", - Disabled = state != ResearchState.AVAILABLE + Disabled = state != ResearchState.AVAILABLE, + TooltipText = tooltipText }; button.Pressed += () => OnResearchPressed(id); @@ -119,7 +144,8 @@ public partial class ResearchList : PanelContainer { Name = id, Title = Research.GetReadableName(id), - SelfModulate = stateColor + SelfModulate = stateColor, + TooltipText = tooltipText }; if (nodePositions.ContainsKey(id)) @@ -145,11 +171,33 @@ public partial class ResearchList : PanelContainer private void OnResearchPressed(string id) { - GameData.availableResearch[id].state = ResearchState.RESEARCHED; + GameData.availableResearch[id].state = ResearchState.RESEARCHING; + currentResearch.Add(GameData.availableResearch[id]); RecalculateResearchStates(); SetupGraph(); } + private string GetResearchTooltip(Research research) + { + if (research.data.Effects == null || research.data.Effects.Count <= 0) + { + return Research.GetReadableName(research.data.Id); + } + + StringBuilder tooltip = new StringBuilder(Research.GetReadableName(research.data.Id)); + tooltip.AppendLine(); + tooltip.AppendLine(); + tooltip.AppendLine("Effects:"); + + foreach (ResearchEffect effect in research.data.Effects) + { + tooltip.Append("- "); + tooltip.AppendLine(effect.GetDisplayText()); + } + + return tooltip.ToString(); + } + private void RecalculateResearchStates() { bool changedState = true; @@ -182,6 +230,11 @@ public partial class ResearchList : PanelContainer return ResearchState.RESEARCHED; } + if (research.state == ResearchState.RESEARCHING) + { + return ResearchState.RESEARCHING; + } + if (GameData.availableResearch[research.data.Research].state == ResearchState.RESEARCHED) { return ResearchState.AVAILABLE; @@ -197,6 +250,7 @@ public partial class ResearchList : PanelContainer ResearchState.AVAILABLE => Colors.White, ResearchState.LOCKED => new Color(0.6f, 0.6f, 0.6f, 0.5f), ResearchState.RESEARCHED => new Color(0.7f, 1f, 0.7f, 1f), + ResearchState.RESEARCHING => new Color(0.3f, 1f, 0.3f, 1f), _ => Colors.Red }; } diff --git a/Scripts/World/World.cs b/Scripts/World/World.cs index 9c7e3a5..b565684 100644 --- a/Scripts/World/World.cs +++ b/Scripts/World/World.cs @@ -94,6 +94,7 @@ public partial class World : Node3D private void ResetRunState() { survival = new SurvivalState(); + robotStats = new RobotStats(); inventory = new Inventory(); availableResearch = ResourceLoader.LoadResearch(); robots.Clear();