From 8cbd26ae2f55b2a8c3355f898026cfa1b1bca766 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:58:03 +0300 Subject: [PATCH] Farming WIP (#269) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * setup planting doafter * spawn plants after use seed * some work * move comps to separate folder * public check daylight * daylight plant energy regeneration * some fixes * bruh, im thinking * added ingame soil * added hoe * attaching plants * hoe system * block plant dublicating * some planting refactor * shovel as pant + soil remover * plant growing visualizer * soil resprite * split farming system to second partial class * update throught event refactor * tring sync update plant with update visuals * finish visual sync * plants growing * more partial splitting, naming work, clean up * Update FARMINGTEST.yml * Update FARMINGTEST.yml * fix typo * prototype value validating * Оно бухает воду! * solution visualizer in soil * forgot some fix * part of Tornado review fix * destroy RemovePlantComponent * more fixes * simple harvesting * refactor plant component values changing * harvest redo * gather on destroyByTool * sickle resprite * plant fading * fading per minute! * wheat sprites * YML restruct * fixes * auto root plants * add comments * move sprites * split structures from object textures * wheat farming! * Update CP14FarmingSystem.Interactions.cs * seedbed (#297) seedbed :^) * a * Update soil.yml --------- Co-authored-by: Jaraten <116667537+Jaraten@users.noreply.github.com> --- .../Farming/CP14PlantVisualsComponent.cs | 23 +++ .../_CP14/Farming/ClientCP14FarmingSystem.cs | 48 ++++++ .../Farming/CP14FarmingSystem.Interactions.cs | 153 ++++++++++++++++++ .../Farming/CP14FarmingSystem.Resourse.cs | 87 ++++++++++ .../_CP14/Farming/CP14FarmingSystem.cs | 114 +++++++++++++ .../Components/CP14PlantAutoRootComponent.cs | 9 ++ .../CP14PlantEnergyFromLightComponent.cs | 17 ++ .../Components/CP14PlantFadingComponent.cs | 23 +++ .../Components/CP14PlantGrowingComponent.cs | 20 +++ .../CP14PlantMetabolizerComponent.cs | 18 +++ .../Farming/Components/CP14SeedComponent.cs | 16 ++ .../Farming/Components/CP14SoilComponent.cs | 13 ++ .../SpawnOnTileTool/CP14SpawnOnTileSystem.cs | 21 +++ .../_CP14/DayCycle/CP14DayCycleSystem.cs | 35 ++++ .../CP14DestroyedByToolComponent.cs | 17 ++ .../CP14DestroyedByToolSystem.cs | 59 +++++++ .../_CP14/Farming/CP14PlantComponent.cs | 75 +++++++++ .../Farming/CP14PlantGatherableComponent.cs | 63 ++++++++ .../_CP14/Farming/CP14SharedFarmingSystem.cs | 37 +++++ .../Farming/Metabolizer/AffectPlantValues.cs | 23 +++ .../CP14PlantMetabolizerPrototype.cs | 27 ++++ .../CP14SpawnOnTileToolComponent.cs | 43 +++++ .../SharedCP14SpawnOnTileToolSystem.cs | 58 +++++++ Resources/Locale/en-US/_CP14/_PROTO/popup.ftl | 3 - .../Locale/en-US/_CP14/farming/farming.ftl | 1 + .../Locale/en-US/_CP14/misc/interaction.ftl | 3 + Resources/Locale/ru-RU/_CP14/_PROTO/popup.ftl | 3 - .../Locale/ru-RU/_CP14/farming/farming.ftl | 1 + .../Locale/ru-RU/_CP14/misc/interaction.ftl | 3 + .../Prototypes/_CP14/Entities/FARMINGTEST.yml | 10 ++ .../Markers/Spawners/Random/herbal_gather.yml | 2 +- .../Objects/Specific/Farming/farm.yml | 19 +++ .../Specific/{Alchemy => Farming}/herbals.yml | 10 +- .../Entities/Objects/Tools/gardening.yml | 53 ++++++ .../_CP14/Entities/Objects/Tools/shovel.yml | 29 ---- .../Specific/Farming/Herbals/base.yml | 70 ++++++++ .../Specific/Farming/Herbals/domesticated.yml | 67 ++++++++ .../{herbals.yml => Farming/Herbals/wild.yml} | 58 ++----- .../Structures/Specific/Farming/soil.yml | 88 ++++++++++ .../_CP14/PlantMetabolizer/metabolizers.yml | 6 + .../Produce}/agaric.rsi/base1.png | Bin .../Produce}/agaric.rsi/base2.png | Bin .../Produce}/agaric.rsi/base3.png | Bin .../Produce}/agaric.rsi/base4.png | Bin .../Produce}/agaric.rsi/base5.png | Bin .../Farming/Produce/agaric.rsi/meta.json | 26 +++ .../Produce}/bloodgrass.rsi/base1.png | Bin .../Produce}/bloodgrass.rsi/base2.png | Bin .../Produce}/bloodgrass.rsi/base3.png | Bin .../Produce}/bloodgrass.rsi/base4.png | Bin .../Produce}/bloodgrass.rsi/base5.png | Bin .../Farming/Produce/bloodgrass.rsi/meta.json | 26 +++ .../Produce}/chromium_slime.rsi/base1.png | Bin .../Produce}/chromium_slime.rsi/base2.png | Bin .../Produce}/chromium_slime.rsi/base3.png | Bin .../Produce/chromium_slime.rsi/meta.json | 20 +++ .../Produce}/lumishroom.rsi/base1.png | Bin .../Produce}/lumishroom.rsi/base2.png | Bin .../Produce}/lumishroom.rsi/base3.png | Bin .../Produce}/lumishroom.rsi/base4.png | Bin .../Produce}/lumishroom.rsi/base5.png | Bin .../Farming/Produce/lumishroom.rsi/meta.json | 26 +++ .../Farming/Produce/wheat.rsi/base1.png | Bin 0 -> 465 bytes .../Farming/Produce/wheat.rsi/base2.png | Bin 0 -> 467 bytes .../Farming/Produce/wheat.rsi/meta.json | 17 ++ .../Produce}/wild_sage.rsi/base1.png | Bin .../Produce}/wild_sage.rsi/base2.png | Bin .../Produce}/wild_sage.rsi/base3.png | Bin .../Farming/Produce/wild_sage.rsi/meta.json | 20 +++ .../_CP14/Objects/Tools/hoe.rsi/icon.png | Bin 0 -> 377 bytes .../Objects/Tools/hoe.rsi/inhand-left.png | Bin 0 -> 819 bytes .../Objects/Tools/hoe.rsi/inhand-right.png | Bin 0 -> 807 bytes .../_CP14/Objects/Tools/hoe.rsi/meta.json | 22 +++ .../_CP14/Objects/Tools/shovel.rsi/icon.png | Bin 339 -> 362 bytes .../Objects/Tools/shovel.rsi/inhand-left.png | Bin 748 -> 777 bytes .../Objects/Tools/shovel.rsi/inhand-right.png | Bin 749 -> 795 bytes .../Sickle/sickle.rsi/equipped-BELT1.png | Bin 332 -> 400 bytes .../Sickle/sickle.rsi/equipped-BELT2.png | Bin 346 -> 397 bytes .../Weapons/Melee/Sickle/sickle.rsi/icon.png | Bin 352 -> 372 bytes .../Melee/Sickle/sickle.rsi/inhand-left.png | Bin 526 -> 583 bytes .../Melee/Sickle/sickle.rsi/inhand-right.png | Bin 545 -> 587 bytes .../Farming/Herbals}/agaric.rsi/meta.json | 15 -- .../Farming/Herbals}/agaric.rsi/world1.png | Bin .../Farming/Herbals}/agaric.rsi/world2.png | Bin .../Farming/Herbals}/agaric.rsi/world3.png | Bin .../Farming/Herbals}/agaric.rsi/world4.png | Bin .../Farming/Herbals}/agaric.rsi/world5.png | Bin .../Farming/Herbals}/agaric.rsi/world6.png | Bin .../Herbals}/bloodgrass.rsi/grass1.png | Bin .../Herbals}/bloodgrass.rsi/grass2.png | Bin .../Herbals}/bloodgrass.rsi/grass3.png | Bin .../Herbals}/bloodgrass.rsi/grass4.png | Bin .../Herbals}/bloodgrass.rsi/grass5.png | Bin .../Farming/Herbals}/bloodgrass.rsi/meta.json | 15 -- .../Herbals}/chromium_slime.rsi/meta.json | 9 -- .../Herbals}/chromium_slime.rsi/world1.png | Bin .../Herbals}/chromium_slime.rsi/world2.png | Bin .../Herbals}/chromium_slime.rsi/world3.png | Bin .../Farming/Herbals}/lumishroom.rsi/meta.json | 15 -- .../Herbals}/lumishroom.rsi/world1.png | Bin .../Herbals}/lumishroom.rsi/world2.png | Bin .../Herbals}/lumishroom.rsi/world3.png | Bin .../Herbals}/lumishroom.rsi/world4.png | Bin .../Herbals}/lumishroom.rsi/world5.png | Bin .../Herbals}/lumishroom.rsi/world6.png | Bin .../Farming/Herbals/wheat.rsi/death.png | Bin 0 -> 1199 bytes .../Farming/Herbals/wheat.rsi/grow-1.png | Bin 0 -> 616 bytes .../Farming/Herbals/wheat.rsi/grow-2.png | Bin 0 -> 899 bytes .../Farming/Herbals/wheat.rsi/grow-3.png | Bin 0 -> 1177 bytes .../Farming/Herbals/wheat.rsi/grow-4.png | Bin 0 -> 1328 bytes .../Farming/Herbals/wheat.rsi/grow-5.png | Bin 0 -> 1497 bytes .../Farming/Herbals/wheat.rsi/meta.json | 29 ++++ .../Farming/Herbals}/wild_sage.rsi/meta.json | 9 -- .../Farming/Herbals}/wild_sage.rsi/world1.png | Bin .../Farming/Herbals}/wild_sage.rsi/world2.png | Bin .../Farming/Herbals}/wild_sage.rsi/world3.png | Bin .../Specific/Farming/seedbed.rsi/meta.json | 26 +++ .../Farming/seedbed.rsi/seedbed_default.png | Bin 0 -> 868 bytes .../seedbed.rsi/seedbed_default_east.png | Bin 0 -> 271 bytes .../seedbed.rsi/seedbed_default_north.png | Bin 0 -> 274 bytes .../seedbed.rsi/seedbed_default_south.png | Bin 0 -> 267 bytes .../seedbed.rsi/seedbed_default_west.png | Bin 0 -> 254 bytes .../Specific/Farming/soil.rsi/liq-1.png | Bin 0 -> 632 bytes .../Specific/Farming/soil.rsi/liq-2.png | Bin 0 -> 928 bytes .../Specific/Farming/soil.rsi/liq-3.png | Bin 0 -> 1081 bytes .../Specific/Farming/soil.rsi/liq-4.png | Bin 0 -> 1059 bytes .../Specific/Farming/soil.rsi/meta.json | 35 ++++ .../Specific/Farming/soil.rsi/soil1.png | Bin 0 -> 743 bytes .../Specific/Farming/soil.rsi/soil2.png | Bin 0 -> 766 bytes .../Specific/Farming/soil.rsi/soil3.png | Bin 0 -> 757 bytes .../Specific/Farming/soil.rsi/soil4.png | Bin 0 -> 747 bytes SpaceStation14.sln.DotSettings | 1 + 132 files changed, 1584 insertions(+), 152 deletions(-) create mode 100644 Content.Client/_CP14/Farming/CP14PlantVisualsComponent.cs create mode 100644 Content.Client/_CP14/Farming/ClientCP14FarmingSystem.cs create mode 100644 Content.Server/_CP14/Farming/CP14FarmingSystem.Interactions.cs create mode 100644 Content.Server/_CP14/Farming/CP14FarmingSystem.Resourse.cs create mode 100644 Content.Server/_CP14/Farming/CP14FarmingSystem.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14PlantAutoRootComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14PlantEnergyFromLightComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14PlantFadingComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14PlantGrowingComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14PlantMetabolizerComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14SeedComponent.cs create mode 100644 Content.Server/_CP14/Farming/Components/CP14SoilComponent.cs create mode 100644 Content.Server/_CP14/SpawnOnTileTool/CP14SpawnOnTileSystem.cs create mode 100644 Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolComponent.cs create mode 100644 Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolSystem.cs create mode 100644 Content.Shared/_CP14/Farming/CP14PlantComponent.cs create mode 100644 Content.Shared/_CP14/Farming/CP14PlantGatherableComponent.cs create mode 100644 Content.Shared/_CP14/Farming/CP14SharedFarmingSystem.cs create mode 100644 Content.Shared/_CP14/Farming/Metabolizer/AffectPlantValues.cs create mode 100644 Content.Shared/_CP14/Farming/Prototypes/CP14PlantMetabolizerPrototype.cs create mode 100644 Content.Shared/_CP14/SpawnOnTileTool/CP14SpawnOnTileToolComponent.cs create mode 100644 Content.Shared/_CP14/SpawnOnTileTool/SharedCP14SpawnOnTileToolSystem.cs delete mode 100644 Resources/Locale/en-US/_CP14/_PROTO/popup.ftl create mode 100644 Resources/Locale/en-US/_CP14/farming/farming.ftl create mode 100644 Resources/Locale/en-US/_CP14/misc/interaction.ftl delete mode 100644 Resources/Locale/ru-RU/_CP14/_PROTO/popup.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/farming/farming.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/misc/interaction.ftl create mode 100644 Resources/Prototypes/_CP14/Entities/FARMINGTEST.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/farm.yml rename Resources/Prototypes/_CP14/Entities/Objects/Specific/{Alchemy => Farming}/herbals.yml (93%) create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Tools/gardening.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Tools/shovel.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/base.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/domesticated.yml rename Resources/Prototypes/_CP14/Entities/Structures/Specific/{herbals.yml => Farming/Herbals/wild.yml} (73%) create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/soil.yml create mode 100644 Resources/Prototypes/_CP14/PlantMetabolizer/metabolizers.yml rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/agaric.rsi/base1.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/agaric.rsi/base2.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/agaric.rsi/base3.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/agaric.rsi/base4.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/agaric.rsi/base5.png (100%) create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/meta.json rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/bloodgrass.rsi/base1.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/bloodgrass.rsi/base2.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/bloodgrass.rsi/base3.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/bloodgrass.rsi/base4.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/bloodgrass.rsi/base5.png (100%) create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/meta.json rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/chromium_slime.rsi/base1.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/chromium_slime.rsi/base2.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/chromium_slime.rsi/base3.png (100%) create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/meta.json rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/lumishroom.rsi/base1.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/lumishroom.rsi/base2.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/lumishroom.rsi/base3.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/lumishroom.rsi/base4.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/lumishroom.rsi/base5.png (100%) create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base1.png create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base2.png create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/meta.json rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/wild_sage.rsi/base1.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/wild_sage.rsi/base2.png (100%) rename Resources/Textures/_CP14/Objects/Specific/{Alchemy/Herbal => Farming/Produce}/wild_sage.rsi/base3.png (100%) create mode 100644 Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/Tools/hoe.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/hoe.rsi/meta.json rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/meta.json (71%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world1.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world2.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world3.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world4.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world5.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/agaric.rsi/world6.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/grass1.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/grass2.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/grass3.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/grass4.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/grass5.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/bloodgrass.rsi/meta.json (74%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/chromium_slime.rsi/meta.json (86%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/chromium_slime.rsi/world1.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/chromium_slime.rsi/world2.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/chromium_slime.rsi/world3.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/meta.json (71%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world1.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world2.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world3.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world4.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world5.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/lumishroom.rsi/world6.png (100%) create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/death.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-1.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-2.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-3.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-4.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-5.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/meta.json rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/wild_sage.rsi/meta.json (74%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/wild_sage.rsi/world1.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/wild_sage.rsi/world2.png (100%) rename Resources/Textures/_CP14/{Objects/Specific/Alchemy/Herbal => Structures/Specific/Farming/Herbals}/wild_sage.rsi/world3.png (100%) create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_east.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_north.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_south.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_west.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-1.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-2.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-3.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-4.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil1.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil2.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil3.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil4.png diff --git a/Content.Client/_CP14/Farming/CP14PlantVisualsComponent.cs b/Content.Client/_CP14/Farming/CP14PlantVisualsComponent.cs new file mode 100644 index 0000000000..a0cdca231e --- /dev/null +++ b/Content.Client/_CP14/Farming/CP14PlantVisualsComponent.cs @@ -0,0 +1,23 @@ +namespace Content.Client._CP14.Farming; + +/// +/// Controls the visual display of plant growth +/// +[RegisterComponent] +public sealed partial class CP14PlantVisualsComponent : Component +{ + [DataField] + public int GrowthSteps = 3; + + [DataField] + public string? GrowState; + + [DataField] + public string? GrowUnshadedState; +} + +public enum PlantVisualLayers : byte +{ + Base, + BaseUnshaded, +} diff --git a/Content.Client/_CP14/Farming/ClientCP14FarmingSystem.cs b/Content.Client/_CP14/Farming/ClientCP14FarmingSystem.cs new file mode 100644 index 0000000000..dad9d5995d --- /dev/null +++ b/Content.Client/_CP14/Farming/ClientCP14FarmingSystem.cs @@ -0,0 +1,48 @@ +using Content.Shared._CP14.Farming; +using Content.Shared.Rounding; +using Robust.Client.GameObjects; + +namespace Content.Client._CP14.Farming; + +public sealed class ClientCP14FarmingSystem : CP14SharedFarmingSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPlantVisualInit); + SubscribeLocalEvent(OnAutoHandleState); + } + + private void OnAutoHandleState(Entity plant, ref AfterAutoHandleStateEvent args) + { + if (!TryComp(plant, out var visuals)) + return; + + UpdateVisuals(new Entity(plant, visuals)); + } + + private void OnPlantVisualInit(Entity visuals, ref ComponentInit args) + { + UpdateVisuals(visuals); + } + + private void UpdateVisuals(Entity visuals) + { + if (!TryComp(visuals, out var sprite)) + return; + + if (!TryComp(visuals, out var plant)) + return; + + var growthState = ContentHelpers.RoundToNearestLevels(plant.GrowthLevel, 1, visuals.Comp.GrowthSteps); + if (growthState == 0) + growthState++; + + if (sprite.LayerMapTryGet(PlantVisualLayers.Base, out _)) + sprite.LayerSetState(PlantVisualLayers.Base, $"{visuals.Comp.GrowState}{growthState}"); + + if (sprite.LayerMapTryGet(PlantVisualLayers.BaseUnshaded, out _)) + sprite.LayerSetState(PlantVisualLayers.BaseUnshaded, $"{visuals.Comp.GrowUnshadedState}{growthState}"); + } +} diff --git a/Content.Server/_CP14/Farming/CP14FarmingSystem.Interactions.cs b/Content.Server/_CP14/Farming/CP14FarmingSystem.Interactions.cs new file mode 100644 index 0000000000..8c31bef3d6 --- /dev/null +++ b/Content.Server/_CP14/Farming/CP14FarmingSystem.Interactions.cs @@ -0,0 +1,153 @@ +using Content.Server._CP14.Farming.Components; +using Content.Server.Gatherable.Components; +using Content.Shared._CP14.Farming; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server._CP14.Farming; + +public sealed partial class CP14FarmingSystem +{ + private void InitializeInteractions() + { + SubscribeLocalEvent(OnSeedInteract); + SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnAttacked); + + SubscribeLocalEvent(OnSeedPlantedDoAfter); + } + + private void OnAttacked(Entity gatherable, ref AttackedEvent args) + { + if (_whitelist.IsWhitelistFailOrNull(gatherable.Comp.ToolWhitelist, args.Used)) + return; + + TryHarvestPlant(gatherable, out _); + } + + private void OnActivate(Entity gatherable, ref ActivateInWorldEvent args) + { + if (args.Handled || !args.Complex) + return; + + if (_whitelist.IsWhitelistFailOrNull(gatherable.Comp.ToolWhitelist, args.User)) + return; + + TryHarvestPlant(gatherable, out _); + args.Handled = true; + } + + public bool TryHarvestPlant(Entity gatheredPlant, out HashSet result, EntityUid? gatherer = null) + { + result = new(); + + if (!TryComp(gatheredPlant, out var plant)) + return false; + + if (plant.GrowthLevel < gatheredPlant.Comp.GrowthLevelToHarvest) + return false; + + + if (TryComp(gatheredPlant, out var soundComp)) + { + _audio.PlayPvs(soundComp.Sound, Transform(gatheredPlant).Coordinates); + } + + if (gatheredPlant.Comp.Loot == null) + return false; + + var pos = _transform.GetMapCoordinates(gatheredPlant); + + foreach (var (tag, table) in gatheredPlant.Comp.Loot) + { + if (tag != "All") + { + if (gatherer != null && !_tag.HasTag(gatherer.Value, tag)) + continue; + } + + if (!_proto.TryIndex(table, out var getLoot)) + continue; + + var spawnLoot = getLoot.GetSpawns(_random); + var spawnPos = pos.Offset(_random.NextVector2(gatheredPlant.Comp.GatherOffset)); + result.Add(Spawn(spawnLoot[0], spawnPos)); //TODO почему то не спавнится больше 1 пшенички. Кажись проблема оффов + } + + if (gatheredPlant.Comp.DeleteAfterHarvest) + _destructible.DestroyEntity(gatheredPlant); + else + AffectGrowth((gatheredPlant, plant), -gatheredPlant.Comp.GrowthCostHarvest); + + return true; + } + + private void OnSeedInteract(Entity seed, ref AfterInteractEvent args) + { + if (args.Handled) + return; + + if (!TryComp(args.Target, out var soil)) + return; + + if (EntityManager.EntityExists(soil.PlantUid)) + { + _popup.PopupEntity(Loc.GetString("cp14-farming-soil-interact-plant-exist"), args.Target.Value, args.User); + return; + } + var doAfterArgs = + new DoAfterArgs(EntityManager, args.User, seed.Comp.PlantingTime, new PlantSeedDoAfterEvent(), args.Target, args.Used, args.Target) + { + BreakOnDamage = true, + BlockDuplicate = true, + BreakOnMove = true, + BreakOnHandChange = true, + }; + _doAfter.TryStartDoAfter(doAfterArgs); + + args.Handled = true; + } + + public bool TryPlantSeed(EntityUid seed, EntityUid soil, EntityUid? user) + { + if (!TryComp(soil, out var soilComp)) + return false; + + if (!TryComp(seed, out var seedComp)) + return false; + + if (Exists(soilComp.PlantUid)) + { + if (user is not null) + _popup.PopupEntity(Loc.GetString("cp14-farming-soil-interact-plant-exist"), soil, user.Value); + + return false; + } + + var plant = SpawnAttachedTo(seedComp.PlantProto, Transform(soil).Coordinates); + + if (!TryComp(plant, out var plantComp)) + return false; + + _transform.SetParent(plant, soil); + soilComp.PlantUid = plant; + plantComp.SoilUid = soil; + + return true; + } + + private void OnSeedPlantedDoAfter(Entity soil, ref PlantSeedDoAfterEvent args) + { + if (args.Cancelled || args.Handled || args.Args.Used == null || args.Target == null) + return; + + if (!TryPlantSeed(args.Target.Value, soil, args.User)) + return; + + //Audio + QueueDel(args.Target); //delete seed + + args.Handled = true; + } +} diff --git a/Content.Server/_CP14/Farming/CP14FarmingSystem.Resourse.cs b/Content.Server/_CP14/Farming/CP14FarmingSystem.Resourse.cs new file mode 100644 index 0000000000..c431f94d7f --- /dev/null +++ b/Content.Server/_CP14/Farming/CP14FarmingSystem.Resourse.cs @@ -0,0 +1,87 @@ +using Content.Server._CP14.Farming.Components; +using Content.Shared._CP14.Farming; +using Content.Shared.Chemistry.Components.SolutionManager; + +namespace Content.Server._CP14.Farming; + +public sealed partial class CP14FarmingSystem +{ + private void InitializeResources() + { + SubscribeLocalEvent(OnTakeEnergyFromLight); + SubscribeLocalEvent(OnPlantMetabolizing); + SubscribeLocalEvent(OnPlantFade); + + SubscribeLocalEvent(OnPlantGrowing); + } + + private void OnPlantFade(Entity ent, ref CP14PlantUpdateEvent args) + { + var realFade = ent.Comp.ResourcePerMinute * (float)args.Plant.Comp.Age.TotalMinutes; + if (args.Plant.Comp.Resource < realFade) + { + _damageable.TryChangeDamage(ent, ent.Comp.FadeDamage, true); + } + AffectResource(args.Plant, -realFade); + } + + private void OnTakeEnergyFromLight(Entity regeneration, ref CP14PlantUpdateEvent args) + { + var gainEnergy = false; + var daylight = _dayCycle.TryDaylightThere(regeneration, true); + + if (regeneration.Comp.Daytime && daylight) + gainEnergy = true; + + if (regeneration.Comp.Nighttime && !daylight) + gainEnergy = true; + + if (gainEnergy) + args.EnergyDelta += regeneration.Comp.Energy; + } + + private void OnPlantGrowing(Entity growing, ref CP14AfterPlantUpdateEvent args) + { + if (args.Plant.Comp.Energy < growing.Comp.EnergyCost) + return; + + if (args.Plant.Comp.Resource < growing.Comp.ResourceCost) + return; + + if (args.Plant.Comp.GrowthLevel >= 1) + return; + + AffectEnergy(args.Plant, -growing.Comp.EnergyCost); + AffectResource(args.Plant, -growing.Comp.ResourceCost); + + AffectGrowth(args.Plant, growing.Comp.GrowthPerUpdate); + } + + private void OnPlantMetabolizing(Entity ent, ref CP14PlantUpdateEvent args) + { + if (args.Plant.Comp.SoilUid == null || + !TryComp(args.Plant.Comp.SoilUid, out var soil) || + !TryComp(ent, out var plant) || + !TryComp(args.Plant.Comp.SoilUid, out var solmanager)) + return; + + var solEntity = new Entity(args.Plant.Comp.SoilUid.Value, solmanager); + if (!_solutionContainer.TryGetSolution(solEntity, soil.Solution, out var soln, out var solution)) + return; + + if (!_proto.TryIndex(ent.Comp.MetabolizerId, out var metabolizer)) + return; + + var splitted = _solutionContainer.SplitSolution(soln.Value, ent.Comp.SolutionPerUpdate); + foreach (var reagent in splitted) + { + if (!metabolizer.Metabolization.ContainsKey(reagent.Reagent.ToString())) + continue; + + foreach (var effect in metabolizer.Metabolization[reagent.Reagent.ToString()]) + { + effect.Effect((ent, plant), reagent.Quantity, EntityManager); + } + } + } +} diff --git a/Content.Server/_CP14/Farming/CP14FarmingSystem.cs b/Content.Server/_CP14/Farming/CP14FarmingSystem.cs new file mode 100644 index 0000000000..8eeaa3bd5e --- /dev/null +++ b/Content.Server/_CP14/Farming/CP14FarmingSystem.cs @@ -0,0 +1,114 @@ +using Content.Server._CP14.Farming.Components; +using Content.Server.Destructible; +using Content.Server.DoAfter; +using Content.Server.Popups; +using Content.Shared._CP14.DayCycle; +using Content.Shared._CP14.Farming; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Damage; +using Content.Shared.Tag; +using Content.Shared.Whitelist; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server._CP14.Farming; + +public sealed partial class CP14FarmingSystem : CP14SharedFarmingSystem +{ + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly CP14DayCycleSystem _dayCycle = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly DestructibleSystem _destructible = default!; + [Dependency] private readonly SharedMapSystem _map = default!; + + public override void Initialize() + { + base.Initialize(); + + InitializeInteractions(); + InitializeResources(); + + SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnAutoRootMapInit); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var plant)) + { + if (_timing.CurTime <= plant.NextUpdateTime) + continue; + + var newTime = _random.NextFloat(plant.UpdateFrequency); + plant.NextUpdateTime = _timing.CurTime + TimeSpan.FromSeconds(newTime); + plant.Age += TimeSpan.FromSeconds(plant.UpdateFrequency); + + var ev = new CP14PlantUpdateEvent((uid, plant)); + RaiseLocalEvent(uid, ev); + + AffectResource((uid, plant), ev.ResourceDelta); + AffectEnergy((uid, plant), ev.EnergyDelta); + + var ev2 = new CP14AfterPlantUpdateEvent((uid, plant)); + RaiseLocalEvent(uid, ev2); + + Dirty(uid, plant); + } + } + + private void OnUnpaused(Entity ent, ref EntityUnpausedEvent args) + { + ent.Comp.NextUpdateTime += args.PausedTime; + } + + private void OnMapInit(Entity plant, ref MapInitEvent args) + { + var newTime = _random.NextFloat(plant.Comp.UpdateFrequency); + plant.Comp.NextUpdateTime = _timing.CurTime + TimeSpan.FromSeconds(newTime); + } + + private void OnAutoRootMapInit(Entity autoRoot, ref MapInitEvent args) + { + var grid = Transform(autoRoot).GridUid; + if (grid == null || !TryComp(grid, out var gridComp)) + return; + + + var targetPos = new EntityCoordinates(grid.Value,Transform(autoRoot).LocalPosition); + var anchored = _map.GetAnchoredEntities(grid.Value, gridComp, targetPos); + + foreach (var entt in anchored) + { + if (!TryComp(entt, out var soil)) + continue; + + _transform.SetParent(autoRoot, entt); + soil.PlantUid = autoRoot; + + if (TryComp(autoRoot, out var plantComp)) + { + plantComp.SoilUid = entt; + } + + break; + } + } +} diff --git a/Content.Server/_CP14/Farming/Components/CP14PlantAutoRootComponent.cs b/Content.Server/_CP14/Farming/Components/CP14PlantAutoRootComponent.cs new file mode 100644 index 0000000000..6732756f93 --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14PlantAutoRootComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server._CP14.Farming.Components; + +/// +/// when it init, it automatically attaches itself by its roots to the soil beneath it. +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14PlantAutoRootComponent : Component +{ +} diff --git a/Content.Server/_CP14/Farming/Components/CP14PlantEnergyFromLightComponent.cs b/Content.Server/_CP14/Farming/Components/CP14PlantEnergyFromLightComponent.cs new file mode 100644 index 0000000000..7aee236634 --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14PlantEnergyFromLightComponent.cs @@ -0,0 +1,17 @@ +namespace Content.Server._CP14.Farming.Components; + +/// +/// allows the plant to receive energy passively, depending on daylight +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14PlantEnergyFromLightComponent : Component +{ + [DataField] + public float Energy = 0f; + + [DataField] + public bool Daytime = true; + + [DataField] + public bool Nighttime = false; +} diff --git a/Content.Server/_CP14/Farming/Components/CP14PlantFadingComponent.cs b/Content.Server/_CP14/Farming/Components/CP14PlantFadingComponent.cs new file mode 100644 index 0000000000..75339a0201 --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14PlantFadingComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; + +namespace Content.Server._CP14.Farming.Components; + +/// +/// Gradually wastes the plant's resources, killing it if there aren't enough. The waste gradually increases over time, reflecting the "Old Age" of the plant +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14PlantFadingComponent : Component +{ + [DataField] + public float ResourcePerMinute = 0f; + + [DataField] + public DamageSpecifier FadeDamage = new() + { + DamageDict = new Dictionary + { + { "Cellular", 0.05 }, + }, + }; +} diff --git a/Content.Server/_CP14/Farming/Components/CP14PlantGrowingComponent.cs b/Content.Server/_CP14/Farming/Components/CP14PlantGrowingComponent.cs new file mode 100644 index 0000000000..a78c399c3c --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14PlantGrowingComponent.cs @@ -0,0 +1,20 @@ +namespace Content.Server._CP14.Farming.Components; + +/// +/// Is trying to use up the plant's energy and resources to grow. +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14PlantGrowingComponent : Component +{ + [DataField] + public float EnergyCost = 0f; + + [DataField] + public float ResourceCost = 0f; + + /// + /// for each plant renewal. It is not every frame, it depends on the refresh rate in PlantComponent + /// + [DataField] + public float GrowthPerUpdate = 0f; +} diff --git a/Content.Server/_CP14/Farming/Components/CP14PlantMetabolizerComponent.cs b/Content.Server/_CP14/Farming/Components/CP14PlantMetabolizerComponent.cs new file mode 100644 index 0000000000..1d1aeed2bc --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14PlantMetabolizerComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared._CP14.Farming.Prototypes; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.Farming.Components; + +/// +/// allows the plant to obtain resources by absorbing liquid from the ground +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14PlantMetabolizerComponent : Component +{ + [DataField] + public FixedPoint2 SolutionPerUpdate = 5f; + + [DataField(required: true)] + public ProtoId MetabolizerId; +} diff --git a/Content.Server/_CP14/Farming/Components/CP14SeedComponent.cs b/Content.Server/_CP14/Farming/Components/CP14SeedComponent.cs new file mode 100644 index 0000000000..5a3f81d47f --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14SeedComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.Farming.Components; + +/// +/// a component that allows for the creation of the plant entity on the soil +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14SeedComponent : Component +{ + [DataField] + public TimeSpan PlantingTime = TimeSpan.FromSeconds(2f); + + [DataField(required: true)] + public EntProtoId PlantProto; +} diff --git a/Content.Server/_CP14/Farming/Components/CP14SoilComponent.cs b/Content.Server/_CP14/Farming/Components/CP14SoilComponent.cs new file mode 100644 index 0000000000..8cb4740a85 --- /dev/null +++ b/Content.Server/_CP14/Farming/Components/CP14SoilComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Server._CP14.Farming.Components; + +/// +/// a component that provides a link to a liquid storage that can be used by the plant +/// +[RegisterComponent, Access(typeof(CP14FarmingSystem))] +public sealed partial class CP14SoilComponent : Component +{ + [DataField(required: true)] + public string Solution = string.Empty; + + public EntityUid? PlantUid; +} diff --git a/Content.Server/_CP14/SpawnOnTileTool/CP14SpawnOnTileSystem.cs b/Content.Server/_CP14/SpawnOnTileTool/CP14SpawnOnTileSystem.cs new file mode 100644 index 0000000000..33cb3dfd58 --- /dev/null +++ b/Content.Server/_CP14/SpawnOnTileTool/CP14SpawnOnTileSystem.cs @@ -0,0 +1,21 @@ +using Content.Shared._CP14.SpawnOnTileTool; + +namespace Content.Server._CP14.SpawnOnTileTool; + +public sealed partial class CP14SpawnOnTileToolSystem : SharedCP14SpawnOnTileToolSystem +{ + public override void Initialize() + { + SubscribeLocalEvent(AfterDoAfter); + } + + private void AfterDoAfter(Entity ent, ref SpawnOnTileToolAfterEvent args) + { + if (args.Handled || args.Cancelled) + return; + + SpawnAtPosition(args.Spawn, GetCoordinates(args.Coordinates)); + + args.Handled = true; + } +} diff --git a/Content.Shared/_CP14/DayCycle/CP14DayCycleSystem.cs b/Content.Shared/_CP14/DayCycle/CP14DayCycleSystem.cs index 4d7cd39b6d..423957219d 100644 --- a/Content.Shared/_CP14/DayCycle/CP14DayCycleSystem.cs +++ b/Content.Shared/_CP14/DayCycle/CP14DayCycleSystem.cs @@ -1,3 +1,6 @@ +using System.Diagnostics; +using Content.Shared.Maps; +using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Timing; @@ -9,6 +12,9 @@ public sealed partial class CP14DayCycleSystem : EntitySystem private const float MaxTimeDiff = 0.05f; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedMapSystem _maps = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; public override void Initialize() { @@ -102,6 +108,35 @@ public sealed partial class CP14DayCycleSystem : EntitySystem Dirty(dayCycle); } + /// + /// Checks to see if the specified entity is on the map where it's daytime. + /// + /// An entity being tested to see if it is in daylight + /// Checks if the tile covers the weather (the only "roof" factor at the moment) + /// daylight test result returned + public bool TryDaylightThere(EntityUid target, bool checkRoof) + { + if (!TryComp(target, out var xform)) + return false; + + if (!TryComp(xform.MapUid, out var dayCycle)) + return false; + + if (checkRoof) + { + if (!TryComp(xform.GridUid, out var mapGrid)) + return !dayCycle.IsNight; + + var tileRef = _maps.GetTileRef(xform.GridUid.Value, mapGrid, xform.Coordinates); + var tileDef = (ContentTileDefinition) _tileDefManager[tileRef.Tile.TypeId]; + + if (!tileDef.Weather) + return false; + } + + return !dayCycle.IsNight; + } + private void SetAmbientColor(Entity light, Color color) { if (color == light.Comp.AmbientLightColor) diff --git a/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolComponent.cs b/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolComponent.cs new file mode 100644 index 0000000000..8b42e08637 --- /dev/null +++ b/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Tools; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.DestroyedByTool; + +/// +/// abstract ability to destroy objects by using the right kind of tool on them +/// +[RegisterComponent, Access(typeof(CP14DestroyedByToolSystem))] +public sealed partial class CP14DestroyedByToolComponent : Component +{ + [DataField] + public ProtoId? Tool; + + [DataField] + public TimeSpan RemoveTime = TimeSpan.FromSeconds(1f); +} diff --git a/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolSystem.cs b/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolSystem.cs new file mode 100644 index 0000000000..57067c3d4b --- /dev/null +++ b/Content.Shared/_CP14/DestroyedByTool/CP14DestroyedByToolSystem.cs @@ -0,0 +1,59 @@ +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Tools.Components; +using Content.Shared.Tools.Systems; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.DestroyedByTool; + +public sealed partial class CP14DestroyedByToolSystem : EntitySystem +{ + [Dependency] private readonly SharedToolSystem _tool = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDestroyDoAfter); + SubscribeLocalEvent(OnInteractUsing); + } + + private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + if (args.Handled) + return; + + if (ent.Comp.Tool == null || !_tool.HasQuality(args.Used, ent.Comp.Tool)) + return; + + if (TryComp(args.Used, out var tool)) + { + _tool.PlayToolSound(args.Used, tool, args.User); + } + + var doAfterArgs = + new DoAfterArgs(EntityManager, args.User, ent.Comp.RemoveTime, new CP14DestroyedByToolDoAfterEvent(), args.Target) + { + BreakOnDamage = true, + BlockDuplicate = true, + BreakOnMove = true, + BreakOnHandChange = true, + }; + _doAfter.TryStartDoAfter(doAfterArgs); + } + + private void OnDestroyDoAfter(Entity ent, ref CP14DestroyedByToolDoAfterEvent args) + { + if (args.Cancelled || args.Handled) + return; + + QueueDel(ent); + + args.Handled = true; + } +} + +[Serializable, NetSerializable] +public sealed partial class CP14DestroyedByToolDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/_CP14/Farming/CP14PlantComponent.cs b/Content.Shared/_CP14/Farming/CP14PlantComponent.cs new file mode 100644 index 0000000000..df35aee9c8 --- /dev/null +++ b/Content.Shared/_CP14/Farming/CP14PlantComponent.cs @@ -0,0 +1,75 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Farming; + +/// +/// The backbone of any plant. Provides common variables for the plant to other components, and a link to the soil +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(CP14SharedFarmingSystem))] +public sealed partial class CP14PlantComponent : Component +{ + /// + /// Soil link. May be null, as not all plants in the world grow on entity soil (e.g. wild shrubs) + /// + public EntityUid? SoilUid; + + /// + /// The ability to consume a resource for growing + /// + [DataField] + public float Energy = 0f; + + [DataField] + public float EnergyMax = 100f; + + /// + /// resource consumed for growth + /// + [DataField] + public float Resource = 0f; + + [DataField] + public float ResourceMax = 100f; + + /// + /// Plant growth status, 0 to 1 + /// + [DataField, AutoNetworkedField] + public float GrowthLevel = 0f; + + [DataField(serverOnly: true)] + public float UpdateFrequency = 60f; + + [DataField(serverOnly: true)] + public TimeSpan NextUpdateTime = TimeSpan.Zero; + + [DataField(serverOnly: true)] + public TimeSpan Age = TimeSpan.Zero; +} + +/// +/// Is called periodically at random intervals on the plant. +/// +public sealed class CP14PlantUpdateEvent : EntityEventArgs +{ + public readonly Entity Plant; + public float EnergyDelta = 0f; + public float ResourceDelta = 0f; + + public CP14PlantUpdateEvent(Entity comp) + { + Plant = comp; + } +} + +/// +/// is called after CP14PlantUpdateEvent when all value changes have already been calculated. +/// +public sealed class CP14AfterPlantUpdateEvent : EntityEventArgs +{ + public readonly Entity Plant; + public CP14AfterPlantUpdateEvent(Entity comp) + { + Plant = comp; + } +} diff --git a/Content.Shared/_CP14/Farming/CP14PlantGatherableComponent.cs b/Content.Shared/_CP14/Farming/CP14PlantGatherableComponent.cs new file mode 100644 index 0000000000..a5800528da --- /dev/null +++ b/Content.Shared/_CP14/Farming/CP14PlantGatherableComponent.cs @@ -0,0 +1,63 @@ + +using Content.Shared.EntityList; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Farming; + +/// +/// Means that the plant can be harvested. +/// +[RegisterComponent] +public sealed partial class CP14PlantGatherableComponent : Component +{ + /// + /// Whitelist for specifying the kind of tools can be used on a resource + /// Supports multiple tags. + /// + [DataField(required: true)] + public EntityWhitelist ToolWhitelist = new(); + + /// + /// YAML example below + /// (Tag1, Tag2, LootTableID1, LootTableID2 are placeholders for example) + /// -------------------- + /// useMappedLoot: true + /// toolWhitelist: + /// tags: + /// - Tag1 + /// - Tag2 + /// loot: + /// Tag1: LootTableID1 + /// Tag2: LootTableID2 + /// + [DataField] + public Dictionary>? Loot = new(); + + /// + /// Random shift of the appearing entity during gathering + /// + [DataField] + public float GatherOffset = 0.3f; + + [DataField] + public TimeSpan Time = TimeSpan.FromSeconds(1f); + + /// + /// after harvesting, should the plant be completely removed? + /// + [DataField] + public bool DeleteAfterHarvest = false; + + /// + /// after harvest, the growth level of the plant will be reduced by the specified value + /// + [DataField] + public float GrowthCostHarvest = 0.4f; + + /// + /// what level of growth does a plant need to have before it can be harvested? + /// + [DataField] + public float GrowthLevelToHarvest = 0.9f; +} diff --git a/Content.Shared/_CP14/Farming/CP14SharedFarmingSystem.cs b/Content.Shared/_CP14/Farming/CP14SharedFarmingSystem.cs new file mode 100644 index 0000000000..27a03fdbb6 --- /dev/null +++ b/Content.Shared/_CP14/Farming/CP14SharedFarmingSystem.cs @@ -0,0 +1,37 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Farming; + +public abstract partial class CP14SharedFarmingSystem : EntitySystem +{ + public void AffectEnergy(Entity ent, float energyDelta) + { + if (energyDelta == 0) + return; + + ent.Comp.Energy = MathHelper.Clamp(ent.Comp.Energy + energyDelta, 0, ent.Comp.EnergyMax); + } + public void AffectResource(Entity ent, float resourceDelta) + { + if (resourceDelta == 0) + return; + + ent.Comp.Resource = MathHelper.Clamp(ent.Comp.Resource + resourceDelta, 0, ent.Comp.ResourceMax); + } + + public void AffectGrowth(Entity ent, float growthDelta) + { + if (growthDelta == 0) + return; + + ent.Comp.GrowthLevel = MathHelper.Clamp01(ent.Comp.GrowthLevel + growthDelta); + Dirty(ent); + } + + + [Serializable, NetSerializable] + public sealed partial class PlantSeedDoAfterEvent : SimpleDoAfterEvent + { + } +} diff --git a/Content.Shared/_CP14/Farming/Metabolizer/AffectPlantValues.cs b/Content.Shared/_CP14/Farming/Metabolizer/AffectPlantValues.cs new file mode 100644 index 0000000000..839783f2a1 --- /dev/null +++ b/Content.Shared/_CP14/Farming/Metabolizer/AffectPlantValues.cs @@ -0,0 +1,23 @@ +using Content.Shared._CP14.Farming.Prototypes; +using Content.Shared.FixedPoint; + +namespace Content.Shared._CP14.Farming.Metabolizer; + +public sealed partial class AffectPlantValues : CP14MetabolizerEffect +{ + [DataField] + public float Energy = 0f; + [DataField] + public float Resource = 0f; + [DataField] + public float Growth = 0f; + + public override void Effect(Entity plant, FixedPoint2 amount, EntityManager entityManager) + { + var farmingSystem = entityManager.System(); + + farmingSystem.AffectEnergy(plant, Energy * (float)amount); + farmingSystem.AffectResource(plant,Resource * (float)amount); + farmingSystem.AffectGrowth(plant, Growth * (float)amount); + } +} diff --git a/Content.Shared/_CP14/Farming/Prototypes/CP14PlantMetabolizerPrototype.cs b/Content.Shared/_CP14/Farming/Prototypes/CP14PlantMetabolizerPrototype.cs new file mode 100644 index 0000000000..3d747d3090 --- /dev/null +++ b/Content.Shared/_CP14/Farming/Prototypes/CP14PlantMetabolizerPrototype.cs @@ -0,0 +1,27 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Farming.Prototypes; + +/// +/// Allows the plant to drink chemicals from the soil. The effect of the drank reagents depends on the selected metabolizer. +/// +[Prototype("CP14PlantMetabolizer")] +public sealed partial class CP14PlantMetabolizerPrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; private set; } = string.Empty; + + [DataField] + public Dictionary, HashSet> Metabolization = new(); +} + +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class CP14MetabolizerEffect +{ + public abstract void Effect(Entity plant, FixedPoint2 amount, EntityManager entityManager); +} diff --git a/Content.Shared/_CP14/SpawnOnTileTool/CP14SpawnOnTileToolComponent.cs b/Content.Shared/_CP14/SpawnOnTileTool/CP14SpawnOnTileToolComponent.cs new file mode 100644 index 0000000000..9bdd921e2a --- /dev/null +++ b/Content.Shared/_CP14/SpawnOnTileTool/CP14SpawnOnTileToolComponent.cs @@ -0,0 +1,43 @@ +using Content.Shared.DoAfter; +using Content.Shared.Maps; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.SpawnOnTileTool; + +/// +/// Allows using an item on a certain type of tile to spawn entities on it. +/// +[RegisterComponent, Access(typeof(SharedCP14SpawnOnTileToolSystem))] +public sealed partial class CP14SpawnOnTileToolComponent : Component +{ + [DataField] + public Dictionary, EntProtoId> Spawns = new(); + + [DataField] + public bool NeedEmptySpace = true; + + [DataField] + public TimeSpan DoAfter = TimeSpan.FromSeconds(1f); +} + +[Serializable, NetSerializable] +public sealed partial class SpawnOnTileToolAfterEvent : DoAfterEvent +{ + public override DoAfterEvent Clone() => this; + public readonly NetCoordinates Coordinates; + public readonly EntProtoId Spawn; + + public SpawnOnTileToolAfterEvent(IEntityManager entManager, EntityCoordinates coord, EntProtoId spawn) + { + Spawn = spawn; + Coordinates = entManager.GetNetCoordinates(coord); + } + + public SpawnOnTileToolAfterEvent(NetCoordinates coord, EntProtoId spawn) + { + Spawn = spawn; + Coordinates = coord; + } +} diff --git a/Content.Shared/_CP14/SpawnOnTileTool/SharedCP14SpawnOnTileToolSystem.cs b/Content.Shared/_CP14/SpawnOnTileTool/SharedCP14SpawnOnTileToolSystem.cs new file mode 100644 index 0000000000..1236aed50c --- /dev/null +++ b/Content.Shared/_CP14/SpawnOnTileTool/SharedCP14SpawnOnTileToolSystem.cs @@ -0,0 +1,58 @@ +using System.Linq; +using Content.Shared._CP14.Farming; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Maps; +using Content.Shared.Popups; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; + +namespace Content.Shared._CP14.SpawnOnTileTool; + +public partial class SharedCP14SpawnOnTileToolSystem : EntitySystem +{ + [Dependency] private readonly SharedMapSystem _map = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly ITileDefinitionManager _tileDef = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnAfterInteract); + } + + private void OnAfterInteract(Entity tool, ref AfterInteractEvent args) + { + var grid = _transform.GetGrid(args.ClickLocation); + + if (grid == null || !TryComp(grid, out var gridComp)) + return; + + var tile = _map.GetTileRef(grid.Value, gridComp, args.ClickLocation); + var tileDef = (ContentTileDefinition) _tileDef[tile.Tile.TypeId]; + + if (tool.Comp.NeedEmptySpace && _map.GetAnchoredEntities(grid.Value, gridComp, args.ClickLocation).Count() > 0) + { + _popup.PopupClient(Loc.GetString("cp14-insufficient-space"), args.ClickLocation, args.User); + return; + } + + foreach (var pair in tool.Comp.Spawns) + { + if (tileDef.ID != pair.Key) + continue; + + var doAfterArgs = + new DoAfterArgs(EntityManager, args.User, tool.Comp.DoAfter, new SpawnOnTileToolAfterEvent(EntityManager, args.ClickLocation, pair.Value), tool) + { + BreakOnDamage = true, + BlockDuplicate = true, + BreakOnMove = true, + BreakOnHandChange = true + }; + _doAfter.TryStartDoAfter(doAfterArgs); + break; + } + } +} diff --git a/Resources/Locale/en-US/_CP14/_PROTO/popup.ftl b/Resources/Locale/en-US/_CP14/_PROTO/popup.ftl deleted file mode 100644 index 00c190f614..0000000000 --- a/Resources/Locale/en-US/_CP14/_PROTO/popup.ftl +++ /dev/null @@ -1,3 +0,0 @@ -# Crystal - -popup-cp14crystal-ding = *ding* diff --git a/Resources/Locale/en-US/_CP14/farming/farming.ftl b/Resources/Locale/en-US/_CP14/farming/farming.ftl new file mode 100644 index 0000000000..c6dcebdf30 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/farming/farming.ftl @@ -0,0 +1 @@ +cp14-farming-soil-interact-plant-exist = There's already something planted here! \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/misc/interaction.ftl b/Resources/Locale/en-US/_CP14/misc/interaction.ftl new file mode 100644 index 0000000000..9c249fa011 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/misc/interaction.ftl @@ -0,0 +1,3 @@ +popup-cp14crystal-ding = *ding* + +cp14-insufficient-space = Insufficient space! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/_PROTO/popup.ftl b/Resources/Locale/ru-RU/_CP14/_PROTO/popup.ftl deleted file mode 100644 index eab662dd42..0000000000 --- a/Resources/Locale/ru-RU/_CP14/_PROTO/popup.ftl +++ /dev/null @@ -1,3 +0,0 @@ -# Crystal - -popup-cp14crystal-ding = *дзынь* diff --git a/Resources/Locale/ru-RU/_CP14/farming/farming.ftl b/Resources/Locale/ru-RU/_CP14/farming/farming.ftl new file mode 100644 index 0000000000..69ca0b04ea --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/farming/farming.ftl @@ -0,0 +1 @@ +cp14-farming-soil-interact-plant-exist = Здесь уже что-то посажено! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/misc/interaction.ftl b/Resources/Locale/ru-RU/_CP14/misc/interaction.ftl new file mode 100644 index 0000000000..7c5f6f97fe --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/misc/interaction.ftl @@ -0,0 +1,3 @@ +popup-cp14crystal-ding = *дзынь* + +cp14-insufficient-space = Недостаточно места! \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/FARMINGTEST.yml b/Resources/Prototypes/_CP14/Entities/FARMINGTEST.yml new file mode 100644 index 0000000000..6a83f97a5d --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/FARMINGTEST.yml @@ -0,0 +1,10 @@ +- type: entity + id: CP14SeedTest + name: FUCK test SEED + parent: BaseItem + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/seeds.rsi + state: seed + - type: CP14Seed + plantProto: CP14PlantWheat \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/herbal_gather.yml b/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/herbal_gather.yml index 6dc65152ef..4f25fde063 100644 --- a/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/herbal_gather.yml +++ b/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/herbal_gather.yml @@ -8,7 +8,7 @@ - type: Sprite layers: - state: red - - sprite: _CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi + - sprite: _CP14/Structures/Specific/Farming/Herbals/agaric.rsi state: world1 - type: RandomSpawner prototypes: diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/farm.yml b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/farm.yml new file mode 100644 index 0000000000..486d0c3095 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/farm.yml @@ -0,0 +1,19 @@ +- type: entity + id: CP14Wheat + parent: ProduceBase + name: wheat bushel + description: You have the choice of either planting the grains again or grinding them into flour. + components: + - type: Item + size: Tiny + - type: Produce + - type: Sprite + sprite: _CP14/Objects/Specific/Farming/Produce/wheat.rsi + layers: + - state: base1 + map: ["random"] + - type: RandomSprite + available: + - random: + base1: "" + base2: "" \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Specific/Alchemy/herbals.yml b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/herbals.yml similarity index 93% rename from Resources/Prototypes/_CP14/Entities/Objects/Specific/Alchemy/herbals.yml rename to Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/herbals.yml index 5a1f5b2f43..0bf85076a9 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Specific/Alchemy/herbals.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Farming/herbals.yml @@ -12,7 +12,7 @@ size: Tiny - type: Produce - type: Sprite - sprite: _CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi + sprite: _CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi layers: - state: base1 map: ["random"] @@ -54,7 +54,7 @@ size: Tiny - type: Produce - type: Sprite - sprite: _CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi + sprite: _CP14/Objects/Specific/Farming/Produce/agaric.rsi layers: - state: base1 map: ["random"] @@ -93,7 +93,7 @@ size: Tiny - type: Produce - type: Sprite - sprite: _CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi + sprite: _CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi layers: - state: base1 map: ["random"] @@ -131,7 +131,7 @@ - 0,0,0,1 - type: Produce - type: Sprite - sprite: _CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi + sprite: _CP14/Objects/Specific/Farming/Produce/wild_sage.rsi layers: - state: base1 map: ["random"] @@ -197,7 +197,7 @@ size: Tiny - type: Produce - type: Sprite - sprite: _CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi + sprite: _CP14/Objects/Specific/Farming/Produce/lumishroom.rsi layers: - state: base1 map: ["random"] diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Tools/gardening.yml b/Resources/Prototypes/_CP14/Entities/Objects/Tools/gardening.yml new file mode 100644 index 0000000000..f3d98a8f72 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Tools/gardening.yml @@ -0,0 +1,53 @@ +- type: entity + id: CP14Shovel + parent: BaseItem + name: shovel + description: An implement for digging up earth, digging beds or graves. + components: + - type: Sprite + sprite: _CP14/Objects/Tools/shovel.rsi + state: icon + - type: MeleeWeapon + wideAnimationRotation: 65 + damage: + types: + Blunt: 5 + Slash: 2 + soundHit: + collection: MetalThud + - type: Item + size: Normal + sprite: _CP14/Objects/Tools/shovel.rsi + - type: ToolTileCompatible + - type: Tool + qualities: + - CP14Digging + useSound: + collection: CP14Digging + params: + variation: 0.03 + volume: 2 + +- type: entity + id: CP14Hoe + parent: BaseItem + name: hoe + description: A gardening tool to prepare the soil for planting, or to clear weeds + components: + - type: Sprite + sprite: _CP14/Objects/Tools/hoe.rsi + state: icon + - type: MeleeWeapon + wideAnimationRotation: 65 + damage: + types: + Piercing: 5 + Slash: 2 + soundHit: + collection: MetalThud + - type: Item + size: Normal + sprite: _CP14/Objects/Tools/hoe.rsi + - type: CP14SpawnOnTileTool + spawns: + CP14FloorDirt: CP14PloughedGround diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Tools/shovel.yml b/Resources/Prototypes/_CP14/Entities/Objects/Tools/shovel.yml deleted file mode 100644 index 95d2777f36..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Tools/shovel.yml +++ /dev/null @@ -1,29 +0,0 @@ -- type: entity - id: CP14Shovel - parent: BaseItem - name: shovel - description: An implement for digging up earth, digging beds or graves. - components: - - type: Sprite - sprite: _CP14/Objects/Tools/shovel.rsi - state: icon - - type: MeleeWeapon - wideAnimationRotation: 45 - damage: - types: - Blunt: 7 - Slash: 3 - soundHit: - collection: MetalThud - - type: Item - size: Normal - sprite: _CP14/Objects/Tools/shovel.rsi - - type: ToolTileCompatible - - type: Tool - qualities: - - CP14Digging - useSound: - collection: CP14Digging - params: - variation: 0.03 - volume: 2 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/base.yml new file mode 100644 index 0000000000..e82e467a26 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/base.yml @@ -0,0 +1,70 @@ +- type: entity + id: CP14GatherableBase + parent: BaseStructure + abstract: true + components: + - type: Sprite + snapCardinals: true + - type: Transform + anchored: true + - type: Physics + canCollide: false + bodyType: Static + - type: CP14DestroyedByTool + tool: CP14Digging + - type: CP14PlantAutoRoot + - type: Damageable + damageContainer: Biological + - type: MeleeSound + soundGroups: + Brute: + collection: CP14GrassGathering + params: + variation: 0.03 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 25 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTypeTrigger + damageType: Cellular + damage: 1 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + +- type: entity + id: CP14GatherableWildBase + parent: CP14GatherableBase + abstract: true + components: + - type: Tag + tags: + - HideContextMenu + - type: Gatherable + toolWhitelist: + tags: + - CP14HerbalGathering + +- type: entity + id: CP14GatherablePlantBase + parent: CP14GatherableBase + abstract: true + components: + - type: InteractionOutline + - type: Appearance + - type: CP14PlantVisuals + growthSteps: 5 + growState: "grow-" + - type: CP14Plant + resource: 10 + energy: 0 + growthLevel: 0 + - type: CP14PlantGatherable + toolWhitelist: + tags: + - CP14HerbalGathering \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/domesticated.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/domesticated.yml new file mode 100644 index 0000000000..6f2e5cb35e --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/domesticated.yml @@ -0,0 +1,67 @@ +- type: entity + id: CP14PlantWheat + parent: CP14GatherablePlantBase + name: wheat + description: Most popular crop. Unpretentious, it opens the way to an abundance of flour products. + components: + - type: Sprite + sprite: _CP14/Structures/Specific/Farming/Herbals/wheat.rsi + layers: + - state: grow-1 + map: ["enum.PlantVisualLayers.Base"] + - type: CP14PlantMetabolizer + metabolizerId: Base + - type: CP14PlantEnergyFromLight + energy: 1 + daytime: true + - type: CP14PlantGrowing + energyCost: 1 + resourceCost: 1 + growthPerUpdate: 0.1 # 10 minute to full grow + - type: CP14PlantFading + resourcePerMinute: 0.25 #20 minute from water + - type: CP14PlantGatherable + deleteAfterHarvest: true + loot: + All: CP14GatherWheat + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 25 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTypeTrigger + damageType: Cellular + damage: 1 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:SpawnEntitiesBehavior + spawn: + CP14PlantWheatDeath: + min: 1 + max: 1 + +- type: entity + id: CP14PlantWheatDeath + name: dead wheat + description: The sad spectacle of wasted food. + parent: CP14GatherableBase + components: + - type: Sprite + sprite: _CP14/Structures/Specific/Farming/Herbals/wheat.rsi + state: death + - type: Gatherable + toolWhitelist: + tags: + - CP14HerbalGathering + +- type: entityLootTable + id: CP14GatherWheat + entries: + - id: CP14Wheat + amount: 2 + maxAmount: 4 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/herbals.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/wild.yml similarity index 73% rename from Resources/Prototypes/_CP14/Entities/Structures/Specific/herbals.yml rename to Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/wild.yml index 5c57c2e789..a67cb59e16 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/herbals.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/Herbals/wild.yml @@ -1,36 +1,3 @@ -- type: entity - id: CP14GatherableHerbalBase - parent: BaseStructure - abstract: true - components: - - type: Transform - anchored: true - - type: Physics - canCollide: false - - type: Gatherable - toolWhitelist: - tags: - - CP14HerbalGathering - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Wood - - type: MeleeSound - soundGroups: - Brute: - collection: CP14GrassGathering - params: - variation: 0.03 - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 25 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: Tag - tags: - - HideContextMenu # Bloodgrass @@ -43,15 +10,14 @@ - type: entity id: CP14GatherableBloodgrass - parent: CP14GatherableHerbalBase + parent: CP14GatherableWildBase name: bloodgrass description: The dullest and most common plant to be found in the wild is the dark brown grass. suffix: Gatherable components: - type: Sprite - snapCardinals: true drawdepth: FloorTiles - sprite: _CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi + sprite: _CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi layers: - state: grass1 map: ["random"] @@ -78,15 +44,14 @@ - type: entity id: CP14GatherableFlyAgaric - parent: CP14GatherableHerbalBase + parent: CP14GatherableWildBase name: fly agaric description: This poisonous mushroom can often be found near bodies of water or other wet areas. It is not recommended for consumption. suffix: Gatherable components: - type: Sprite - snapCardinals: true drawdepth: FloorTiles - sprite: _CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi + sprite: _CP14/Structures/Specific/Farming/Herbals/agaric.rsi layers: - state: world1 map: ["random"] @@ -119,15 +84,14 @@ - type: entity id: CP14GatherableChromiumSlime - parent: CP14GatherableHerbalBase + parent: CP14GatherableWildBase name: chromium slime description: This rare thick substance can be found in a stream of water as if it has a mind of its own. When trying to change the slime itself - the slime changes the reagent it interacts with. suffix: Gatherable components: - type: Sprite - snapCardinals: true drawdepth: FloorTiles - sprite: _CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi + sprite: _CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi layers: - state: world1 map: ["random"] @@ -155,15 +119,14 @@ - type: entity id: CP14GatherableWildSage - parent: CP14GatherableHerbalBase + parent: CP14GatherableWildBase name: wild sage description: Root of this ubiquitous medicinal plant not bad at healing physical injuries, and inducing coughing. suffix: Gatherable components: - type: Sprite - snapCardinals: true drawdepth: FloorTiles - sprite: _CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi + sprite: _CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi layers: - state: world1 map: ["random"] @@ -188,15 +151,14 @@ - type: entity id: CP14GatherableLumiMushroom - parent: CP14GatherableHerbalBase + parent: CP14GatherableWildBase name: lumishroom description: A faintly luminous mushroom. Often used by alchemists as a means of concentrating solutions. suffix: Gatherable components: - type: Sprite - snapCardinals: true drawdepth: FloorTiles - sprite: _CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi + sprite: _CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi layers: - state: world1 map: ["random"] diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/soil.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/soil.yml new file mode 100644 index 0000000000..ef711610ef --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Farming/soil.yml @@ -0,0 +1,88 @@ +- type: entity + id: CP14BaseFarmingSoil + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.1" + density: 190 + hard: false + mask: + - FullTileMask + layer: + - FullTileMask + - type: Appearance + - type: SolutionContainerManager + solutions: + soil: + maxVol: 200 + - type: RefillableSolution + solution: soil + maxRefill: 50 + - type: Transform + anchored: true + - type: CP14Soil + solution: soil + - type: CP14DestroyedByTool + tool: CP14Digging + +- type: entity + name: ploughed ground + parent: CP14BaseFarmingSoil + id: CP14PloughedGround + components: + - type: Sprite + drawdepth: FloorTiles + sprite: _CP14/Structures/Specific/Farming/soil.rsi + layers: + - state: soil1 + map: ["random"] + - state: liq-1 #Resprite this shit + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + snapCardinals: true + - type: SolutionContainerVisuals + maxFillLevels: 4 + fillBaseName: liq- + - type: RandomSprite + available: + - random: + soil1: "" + soil2: "" + soil3: "" + soil4: "" + +- type: entity + name: seedbed + id: CP14SeedbedDefault + parent: CP14BaseFarmingSoil + components: + - type: Icon + sprite: _CP14/Structures/Specific/Farming/seedbed.rsi + state: seedbed_default + - type: SmoothEdge + - type: IconSmooth + key: walls + mode: NoSprite + - type: Sprite + drawdepth: FloorTiles + sprite: _CP14/Structures/Specific/Farming/seedbed.rsi + layers: + - state: seedbed_default + - map: [ "enum.EdgeLayer.South" ] + state: seedbed_default_south + - map: [ "enum.EdgeLayer.East" ] + state: seedbed_default_east + - map: [ "enum.EdgeLayer.North" ] + state: seedbed_default_north + - map: [ "enum.EdgeLayer.West" ] + state: seedbed_default_west +# snapCardinals: true (when you flip it over, you get a swastika) diff --git a/Resources/Prototypes/_CP14/PlantMetabolizer/metabolizers.yml b/Resources/Prototypes/_CP14/PlantMetabolizer/metabolizers.yml new file mode 100644 index 0000000000..ce99925717 --- /dev/null +++ b/Resources/Prototypes/_CP14/PlantMetabolizer/metabolizers.yml @@ -0,0 +1,6 @@ +- type: CP14PlantMetabolizer + id: Base + metabolization: + CP14Water: + - !type:AffectPlantValues + resource: 1 \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base1.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base2.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base3.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base3.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base4.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base4.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base5.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/base5.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/base5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/meta.json new file mode 100644 index 0000000000..10bdf6ee5e --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/agaric.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd (Github) for CrystallPunk14", + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + }, + { + "name": "base3" + }, + { + "name": "base4" + }, + { + "name": "base5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base1.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base2.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base3.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base3.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base4.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base4.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base5.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/base5.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/base5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/meta.json new file mode 100644 index 0000000000..a54761f6d7 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/bloodgrass.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Base Created by TheShuEd (Github) for CrystallPunk14, Grass taken from tgstation at commits https://github.com/tgstation/tgstation/commit/729d858807905263adab8b5a331c1d8a04982dd3, and recolored", + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + }, + { + "name": "base3" + }, + { + "name": "base4" + }, + { + "name": "base5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base1.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base2.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base3.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/base3.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/base3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/meta.json new file mode 100644 index 0000000000..41ffc95aa5 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/chromium_slime.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd (Github) for CrystallPunk14", + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + }, + { + "name": "base3" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base1.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base2.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base3.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base3.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base4.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base4.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base5.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/base5.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/base5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/meta.json new file mode 100644 index 0000000000..10bdf6ee5e --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/lumishroom.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd (Github) for CrystallPunk14", + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + }, + { + "name": "base3" + }, + { + "name": "base4" + }, + { + "name": "base5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base1.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdfca47d38172d91d7a589f7d9794fddca3b20a GIT binary patch literal 465 zcmV;?0WSWDP)Px$i%CR5R9J=WmCsAUU>L{0iV8wwU?6sIAlOcwWCZ4+Q?N@%LA)g)^e05nK@k6h zAO^ch_dpU)9r}UnrY92y4pM>+W5sL)ZwJ|$Li*yg4()S&$NTv{&-=XZ03RP8pEYoH zzE6HdLY39kSd{LOdDnbOfi$JHDCp>GQ(l7x4gUq{cPiK(k03pdh(Ts(1U_~9Uo>lbpiPV-0Nd^F*Xa@QN^T#lr0?f*bJ3ze)^am!? zk%d$uvc4lI34$Z%Spz&fEw5ibP!+dS2Wp3V1OQ&&K2fd3Q11e*w(hJS?6NpIzFAEG zSrUnRvyvc?7!w2lY;J_`G_)|zgr_Plma`<4h#<{H7Y3n9DNCYrm+c|z4@?Xj@7Ugo z;Pm=_=~)WWd}LSQmZ!NW#+k4uIdy=KN0GSY>d11gnOCUO+vi%y#i3{hT5X+r(&s_d z0bnxO>d1nk8PpR_1JyeqOCtHMIQu()Iyc4gA4q+CeEtnzpjf@bSThW|00000NkvXX Hu0mjfloZ6S literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6f7cc6607048f5c122bc963fb9234b44658da0 GIT binary patch literal 467 zcmV;^0WAKBP)Px$jY&j7R9J=Wl}}3oQ540`lo*8)VMqlALM@7xvk@0<=L-npGD2|K+K`g`5;8O^ zWj;aR(#7D$R%!+b!WbxnS)gGJ)oT%NvOnewrt!DA&o-_BJcL#8AaQJ1Csa^7C z;)*QU7N6l29sOc4;N>mHXM*SnVs`{w9jFu{W5pC%BC&Xg#NweJ4GBC3sEKl`kA^-( zH0%d`Zgx!Mv!#jkxeX9KK@Q~$OB{I1f~pw+fM&-8fU#z{3{(mcva_{}YP}0pGqABf zkA^;E5~j@Z7se2jRtP{oUXh`D{t3oL?VLsxfs4_e7CwuDVgn^}ftK zxZ=j7@G%?sZn-G3L=G}R+zg)J^SDsU^*)3ylP)rkmg(TAiH1JJ$^JH~^)AY-K5Drh zd>$9B+9poRW!srzej%CKCDE`SG<3A>?X&x-gefkTLy9aBG2peX8G!ehbBF^B8KB!v z)eP&3shYvOXt)i~R%g;hfi4?6A>-onk7YEBtk=xJ!NK9*^9pmE)LEtm*Px$Gf6~2R9J=Wls!uWK@f%?L6CrOMJfwZrST`EO8$XhA?d6|1pCzXffSbEEG;Yr z3yt29h#(k>YWq041d3P2x8jVKt-&y$!kxH>3 z0FC}Dt*7pc=IXLU>*bQ-!M^1Ah`J8X3UF<(=Hv4wmgG57o;h z0eF1*VBk;q8jm=>ZKr-yKLYT)4o8Q3(~GJ#Qvlf-x&)b;%^sUZCRL^?A`b^vcwPs~ zc3Ah?K(wc6QFg&RD;6mn%XjH#<~zIlqT2sk5@i&&B2858QiwnC%PXco;U X9qx|=+Mh4m00000NkvXXu0mjfNur|8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..875206d787f6672b465478552686d91f92c5a0c6 GIT binary patch literal 819 zcmV-31I+x1P)Px%?MXyIRCt{2o6l<#K@`Wo5kYckK*4Asm4a*_cvuQTQb}9&Ab2U{5PC|m?In~# z@BJqNLALJvS@{0Kmihx0KRp1&aZjw(Xm^6Clx|(rE=-4|x9ilaEWA5;g;d`r?zVZfeqr3q_83rlg9s+D^EX=X3-zj0~0V&fI!}8=<45-%6 z$U+z8n`JXd-v$%Oi~xX{coYC|S}X|w`1s+C=T)K9nujx}TJ0b+Ad$=n*>C_b zjEMVFc&T_InGwrNi*TF@3?l-^slcV}NvjiNLqJw=Z8hx!fbrlM)>hL#$Ejd>Y0;CG zZ2a14+BY5?`%l+xG6ke_fPCtW$VPNatLt0oD}!zCi%#W!>U0BX5BT-_Z^v>!b^1!a zP!^ragVfV#G#ZUYqtR$agl_W+l;0J;D&6K4Tw4Q1nvI3IuG4DT?g_5X#>BHncTqd8 z#$|7GVi)_vkZsV^ljYsCv3~7QFEtY?baMO59E{E1d xVuj*K6jZpMy8KP0C3atFX2!^(P0(mO@ek8gRTbT<^{4;<002ovPDHLkV1mm|ew6?K literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ca649221ec27b9b839d8276712cc9c0dacc504d0 GIT binary patch literal 807 zcmV+?1K9kDP)Px%;Ymb6RCt{2nn7q2K@^7nh){Crf;rR{8Yz@5=Cl-qT4}9#5WEOEgq{*;dkGTA z-Lv;V5RWAuJqTU`IaoD88^~o3CA3RGG+=2#XhbMIJugmKqnpeovzwXie3xusGWp-X zGqXGM9-z@^G#br7Ru`5iYgsgD9lT^Mi&htwxb$A zcsuR(&d1RdDt@$b8L&7zHL{pV!K<0efMmkJE8C8Zr6^>Q34^O0mjMr7yj3cAKX9)B zDlu=w@$E;Ct8F9=5WWbiNay&1t6gLb;3cvK2z?By2=5f&Vs~>xnSFp?xJE$d_yQ_z zhWx-~K(}{}jzW6@KfBj~yTNoOPXMsIwt{549U90A`?eh$5s z4dI%rwH6J#mIalxYBU;+Mx)Val)z7}T}8N##8j&f@Iz#e#f6f!EQ;#UI9G`bz@KlI zh26~!N+t~K9h~C%$9?~YqW$b0oQhEv0?+Q>rT2$t0M5j9s#0Pk5Una1pe&_wg;;VU zEV$Qzpt0>EavffVmUxlEfNHHp9~w>68%@tP@18!PAd0o5Fo0#C*!NPoLICLYiH*hC zDI^mHDxbav^50Sz;11qB73vM3d$Uo2rb5sKnj?<@-a0%# zcuj>M7sRnTcIV^W!bQNQg5$JNZ!`m|N$@=a`il@)?Laz{7j~z3o(dBooyk+FT%l^M zMb%o1{tQu6Yb_F)HD>)v2MZqfH)xsD=7aEcAYz)S%VLAakM8_6++|Li3&nk>-J@Z0 libCc}2FR!T@0ZsyXp_ksA&UZDpD{ zj*d_89v|2=-U&Lj>mF%gOw{S00|ep#*S+Ps)?(3ZhPAlT$N*A0YA_syVt^n_xopvC zpC$fmBcGvZ<~vwjUIO5<)?#gagHAhX{SQ|lrK11_!%;Yez1{7pd{`QdMl+jy0@F`p U$$E~OLjV8(07*qoM6N<$f>eu>0ssI2 delta 299 zcmV+`0o4BL0@DJJF@Ft7L_t(oh3%6uN&`U@hCe}&t)>VpSR_?0k!_M21X88g8+e2? zHXgysBE%Ey1vG1s*exjp6=Wro0bxOLt6()2vWto%hTYiYebq3$ng9Ra%mYCX1Yy_N z`wx*(w_^dO`i1%9{TI#sZHbPDJ=UGT4BE!9bdn$OVJLfhcJqZB$Tj zDP#zpBDP&Z5!^c#_d@Ah(#h2&G($BQDuFC-kYJ92Gy$bTpyv{torRJ_r-h7 z`;ABLpL_rBd+*)5?*lX%jYgv(C2N{;el{j4wB~1HGHaS7T7UoIDu-yu??cG%!>6yK zYdxB|F}g?}u5gGp?Y5`&dSNjD0Pftr<|&4%h^d*IeiAJzor_@0fG0cerns~z zVKab=M$1OX?_<;Vya9lsiy#$8-+!^{d)@$UJa2%K+aM*}Q-F=#^^k3JgApIib4EAHW(!J(9JOwGQ z8_*f-dBojDALtCWRIYUOEUSiKfZhP|GrJIV`R(KdLG`q{Gf!k{Oeh=7KoRg35-9n>f z0G1HjLL7S WQ~c>iOzt)S0000L_t(|ob8%1Yui8+$NwpXlF875pdbrk3Zc+JXv-~e+YgX6 zgE4gI;ruGJCWE!M|dkU~|cHCwAf2V{c0{UTSo8mbZ16*e_ zveZSnv)mX`N`I@ABKc^gl$BDl8KCxyAUCA{>v0^ko9s$OfJJ-JNSJn)Ipt8myNKb_F!5U-c-lzO{Aq1IL4yghD9BdWu z3n7ps$^2St%@PUZdv>Li&F5?o1n6`+rQe~HvPqJ_^M5=DAu4HY6r~ht8l=*4I2;a# z!{Kmj1FQBG+}i_@Rr?C=tpT>0v*Yf{Z8b~J15OSP?5h_Z#?uUM-pgieMUnRu+^%%* z(kU>>W;nmP!KbgcI5|9M%$D@yXY=oy)`hcEi<%~VD+^n10LTC4a&Xj`5M)Vh{V=q7 zW7G4ugMT~6b%Tr1Xl*@~X6Yhnnj%e8)_07jS?OmtG9TkOwnfhaAoG44$M(y+Q%tg1sR*dm zg0wDDN~^U-ahk1LK5z7PSZfUc^TC%X#x^zrq(GE5O;dQD2jEvFx=e~~Yy{+Mi7{qA t1;wEGW zol;PjAVP7pbaW2{aZyVg9R!y^1Z!;2hK9l$N;F4AYak^Bp@~E3^c=#~R6XzA-`qRj zXACcQ-}k-Wz2o=350FSC5{bl+x!DBE6T&8~!wPvq*xYP_OMml8vjNxQXPhhYnV1qm zOo`yb7xS?vcrMr-95~hFD^~QH8gS{{DMw-^1+Q*X1L9Ey&nca9tjK5LQH5)qsR7p? zy%KKnR^VC#L?fm|@a_A6YiuYDaCH$BmCo)V*SOFcz)NTiaP2cFD!i|NDXR+^q51%; zm{ve%_Yk5rLw{BDhIj}vbn;sCts;HkLF;6p#iFz#C$sCrasRZ*L!~Y^dG3-O4cqSTpJ=Ho)O^Xzuyt! zB2Nel>-MK8!!_L>wxDojQ04TrT@#KDiF+iWV z&U`wBbpTy$!_)iP+B44+!WOU0xORqcJb%!`4Bd>Cm1S&gzVfxdOZYUxssAmX73*N`!^L?RKLpM10d9|e)F-T(jq07*qoM6N<$g2JI>)c^nh delta 712 zcmV;(0yq7e2JHoqF@L8?L_t(|ob8&wYui8+$G<6s;z>}0pm4qtQ3&0Hx2i*3`Ug~F z2IEed@+WlemNip{(4s%UT?Fc=I5gP{;_cTdb*S8Ur46=tq0yxl!1pYN9$ynmz*>wC0eM%Dl$Yk=r? zx$Qlf0WX#}b$!|>D*l!R;K`#0wVc@&vVNBafDSEuJUiQ|?a_vzLrco8Gyt!TKWR64 z6{Pk6-56N|Bv(r*+g=8s(M?cS7MHhDcD)UNEWHgtW5=Mb$S#3WPWC5S)d8xMX29a| z7P=KfDwGD`Vt;vqg=V!tqZKS;OoU;mRR)A%C>Uc>KKFJLl%?>0eh>r#06fn_6h-;> z)9JLcwLuUBf)D}#pp+s>5^&Df`dpX+*+3a-nl|NU>rhIiZ3_dC4H88W(lmu_+y4Zm zYj~cg{F}8cF+vD9=lSGSBD*a(=lSP2j^X?MTKl!@nSU`Rk|Y6eml2NRbawq`Fvdid zwZ8Ay_n9#!eWY{+9ep+!3PS5peiM@UCOnm)y4dA-DL3I*GTJcq<02mBC4abtV8=3qFox*tQMePU!f2bkyo|EA`B0t}EU= zf85v|!lKE`XnS?3oB^`;@Knh($oYH@0C_;#qH+d|tO1@L95(iLG9hC%6E>klD?cCz z0+KMJSiUgb+kglnbS+Vx*2#dO>qx7>aD-X_{g@9&4Kgl^PG& u4NC{vyogGtfa5qjMty~mp$!Iu{`>{d0S9Yat;)3k0000cICb#>d;!7by0{qB_LAJ*-uVA*fp9tbI5*2VA^-pY0001g zxEzN1W;D{S>*&&f$;*S2V|jc3uvLo_Mgd%(59Br(+N#9~qkjPIUXSGEG?gqbdUFko z0$45Q!J@20M5M0Qy$Hc501=U=$NRuWA+8t)&^H?cNGDToTYa0_HwG|{qi@eyUg#u_ zM5%D^uR^o-pKSFJ>13+MaU{vtf&2XNb-mWlWhINU>fQee000000002+uh~0000p_MPEe#000000NxnqJ-Zx@Z0tIGYPvj} zb=q>i-a^$9g;N0YK_=^I9;%iooC3H^7Sdg9MC+nf%fQKYw|}=<7uFc_zai8q0H-BT zM;`;&?)J(4X)m=uZ+Iz9e{Y+0dE@)_k2l6xtqYs-%mn}d0000006;vR^Osa^jm`SQ zubjV!>PJ)#AocqKl>b*;H`v2|sa`(9RGQ1N3000000I+Z~ z9-FHmG+poGCyq3Oy}rH6==4N0q;skXSfqhmUyL+EI;WO^yniUo<}8!jmt(Dvtx!oo z(`=21$g-+sy?PpG#B7Ud2|V22d3AUZG`GgcV4`n4KC8aI>u08ADzgH(riRTCTSgjz~=)BqG;s1Alx3iD=rkHsm00000000RVbsaye*EsY# zZt-kc?Ei3-@?~sUGCR`-ESpN^@1_%3FLTICi$bP#M`G5YiD(i!)#t_=LT5nwC z-%Qtlq1SN_(=))MtPMzwgsVthi$Q8E+{H>&qxFHfT5nV!Z0000006YS3 zcllXfhWfh0pS^t~f5-LP;IgTbYnaUk^z9tAub-qkE_Xl|vES`(=%rlh>kZFx9>H`6 zOeRw)isH$#W-D%{4H)|8UCk4u$}x}NPL6p50Kg+T0jXw;3?|}bH2?qr07*qoM6N<$ Ef-R4ah5!Hn diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/icon.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/icon.png index bb5755a9c611f32fd64ef09a2d903ce3862148bc..b0cd3caf63eac92b192c63a0250f073e2166fdc0 100644 GIT binary patch delta 332 zcmV-S0ki(#0`vlqF@G*eL_t(og=1hC1*2f314c>>xNza-e{?Ye19hU!CEEcoi=Vyx z#Bl4@H3kL-1_m`XEe0uZK9U?lmIE$axcMJu@u9;f7}l+t4mW4Q(Kp?0?kTFRHovb*}`kRE2?*H$Xe89-af9I)h0cLiW-?A(V zt{ZK@3tMZ^Gz|bC&vPiHL`I?vFthW*#u$`k+14Q<*EJ$ZBY#+2YwfD4x{AIF5xHB} z(;Ka|BchnI;FPUfRFwzk1LeauUnJ=a8AKm3uaDY zBx*?b8Bi1jlv2Hh%_Qc~`)+?;?02!cE#fNxfcf;LU3bUuAiS;Du2`-f_XvLu$5h&K zQg;ss6Zmu812KUKd~7#PoldE>!wuw%8D3X2e13lo`^$}t48bofzJvcsSNXO80000< KMNUMnLSTZf0+kv7 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-left.png index cd4df08595cc75824a70b0e5ed2b0e3cac73a896..4dae3235b24f1b7640791aaf019f5e3599437ba4 100644 GIT binary patch delta 546 zcmV+-0^R+N1jhuBFn{)f@2gMECfTqAXy>@ic_W( zLbg&TGYEpvKcGYBgHRkp5TO(d2u@C+f`pX7Q4x}%sH>ohpy=}J&^|fA#xuV6a*uvL z+bzG`?|1ipkG$UjL_|bHL_|asSA|qsRT6=6K3IG7z z%WE8+_7cOsk4Q|tt|p9_2zqsM2LPy*J^App`J$&51U+dUwg3Qg-3FGv>=}LP#)8+% zo+Ky6as0Lj0PylTWHPgTe@`X<{ci!z&wioPK5(-D05HF>B2&{d0D#4Ou5S^-$v3`j zSzGHymVnY}AAck|?T1SN{v_J(O|Y3fU~w0)omf=PY=fr6rU04DY{JXu;8*Jp+h?&< zabhd|r*Hy(wJt%>dp4nBsUm*0F5yC$WPDw!L~M6=A|fIpA|fIpqNf=>qEcso&BIot z$}!ozD|>QrdyoB-p93u`qtoFqH6_w990`9!k?c0` zZVuQ#87!7_&1e`OQN%_N^u({$Md#4e$tI|C#^_`Lbo%cL;2hNl)b(rofs@^{SgMHn kf3dOt-W$mrh$tR@1DRjR^ivI?n*aa+07*qoM6N<$f`W7Y+W-In delta 488 zcmVi07WKD_VqKJWX& zJueXe00000006{QDVyW6WpUVXcft;+LMfZ$!~H#K_6DKH)_)=aL`2QrfEt}vV%_7I zi>h)}K}iMlzrLwE98uk|7fyndl7(Op*B*bCkIQ%((W*tdPG6tBvlLk%5QC(O~o66jkpC?vGobi&g3@O%JX33 e9#H_m+WY{=76rdFB2jYy00000@?kc1j_`FFnuLCgO&Z?%1uSS9oMn6#R z0J2gw-Lh}1Nh6V*6{GPO0AOK$Dp36a5fKp)5fKp)1wlhjc^L&7<$Y?-aw5~Ah6})4 znlma?qwyFH)>kn(*zS6n&ayb_HFM+56SB8AS7Jr!#eZGt;or{96V=o5Ua(ad84pLq zOf)Ke%>b|&z~1FW=)UrTbV_kGgr#NG&BOhO?G7cKQbbor8_Ww30Ovins_EkB_|&r^ zt)m|q9vKq=(B0Dqqnh+>{jI?`8U^YtKmaTjAp}9aMF@?|*X8k_2z&sJR4+h~?eYg) oco#69+#ihR_MojXA|koH0_gbFQnP=r)&Kwi07*qoM6N<$g5!_!?EnA( delta 507 zcmVqBcb!wrDP;lsA z2NydDBIxGgI}|b)aHyjX;Hc=-2S_7SDF|*BDoDXzyIhBILmJ!ArZ-8G{(oBv3Fn;N zkC1bT000000000W%&LmQOQ|fM<(?Ih|P5)XlI8 z6UPxyujF~BKcKIlU%%p!>hbh|8-~seL+6aKv47&K{RhSvZ@1rwi0JeBipm+H=5$OV0r?X+`eB%5U?9(6$>w(w?r_QCOYUbYQaclqp z000000000mB)&~D#wLHqmt^6(KGxQp=uj04Il4SNqH-o7y-oM8Hy9*q^67NeOthwI z{35?YAKmZ3V)I21-6>a%ky0wltBMkd&*rWQaQ~vmI&}R3)hl_aMbK_;Wj<~yu3KZ} zOoFyIH^_PbVcr#6wBr5jNX@mPS_3T>azsRv`|k@%TA-pBj)xGIf#V^B1r+J__%xQj x0CTY)KnUCLCz7xTiZ?g$-X4`xWdN`o{s82>|G$usJ&phX002ovPDHLkV1kr0_3Quu diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/meta.json similarity index 71% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/meta.json rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/meta.json index 5446984454..6555eb48c1 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/meta.json @@ -7,21 +7,6 @@ "license": "All rights reserved for the CrystallPunk14 project only", "copyright": "Created by TheShuEd (Github) for CrystallPunk14", "states": [ - { - "name": "base1" - }, - { - "name": "base2" - }, - { - "name": "base3" - }, - { - "name": "base4" - }, - { - "name": "base5" - }, { "name": "world1" }, diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world1.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world2.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world3.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world4.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world5.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world5.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world6.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world6.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/agaric.rsi/world6.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/agaric.rsi/world6.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass1.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass2.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass3.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass4.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass5.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/grass5.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/grass5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/meta.json similarity index 74% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/meta.json rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/meta.json index 3d030c7049..71ed5fddb4 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/bloodgrass.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/bloodgrass.rsi/meta.json @@ -7,21 +7,6 @@ "license": "CC-BY-SA-3.0", "copyright": "Base Created by TheShuEd (Github) for CrystallPunk14, Grass taken from tgstation at commits https://github.com/tgstation/tgstation/commit/729d858807905263adab8b5a331c1d8a04982dd3, and recolored", "states": [ - { - "name": "base1" - }, - { - "name": "base2" - }, - { - "name": "base3" - }, - { - "name": "base4" - }, - { - "name": "base5" - }, { "name": "grass1" }, diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/meta.json similarity index 86% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/meta.json rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/meta.json index 780f3e816b..d23e620f21 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/meta.json @@ -7,15 +7,6 @@ "license": "All rights reserved for the CrystallPunk14 project only", "copyright": "Created by TheShuEd (Github) for CrystallPunk14", "states": [ - { - "name": "base1" - }, - { - "name": "base2" - }, - { - "name": "base3" - }, { "name": "world1", "delays": [ diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world1.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world2.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/chromium_slime.rsi/world3.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/chromium_slime.rsi/world3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/meta.json similarity index 71% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/meta.json rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/meta.json index 5446984454..6555eb48c1 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/meta.json @@ -7,21 +7,6 @@ "license": "All rights reserved for the CrystallPunk14 project only", "copyright": "Created by TheShuEd (Github) for CrystallPunk14", "states": [ - { - "name": "base1" - }, - { - "name": "base2" - }, - { - "name": "base3" - }, - { - "name": "base4" - }, - { - "name": "base5" - }, { "name": "world1" }, diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world1.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world2.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world3.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world4.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world4.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world4.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world5.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world5.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world5.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world5.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world6.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world6.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/lumishroom.rsi/world6.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/lumishroom.rsi/world6.png diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/death.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/death.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb196993f6953be6caa2d70f0d5dfe087978a27 GIT binary patch literal 1199 zcmV;g1W@~lP)Px(X-PyuRA_o(q)V3s17SDCCE|cgb6*k8-80v7$I%SS!umBKGk5O!zH`s7E5HE< z{5t4#eU;={n)oB_4eN~>OPCYldd)YBOI<)xbh^HBvY9vU^HT)W8#T3fdeNtoW?1bd zz(!#4^kV&{cybiGuI;z>5|vm08t8O=b#>VjNxjICMKSo-mN!YT(+T|Tp25{+Pta$a zaqbxkalNLxzPSegfa{z4i05gDC3VnF0{#pOdQNmsJUNOGDxV&2Bs~BhGQm28tIM7k^oL?LoyXdtNF<=%s71Qwx9?ILHOXufiEy$R z7>_2RS}7&v%3|*ja=oU)q{aBBA=K&mk?tFZPS;n9hezEY={Kq6K(G!q(GTwnFz62j z8aIV;r88KEAf*KQ4!^y+?CG$nH)`s``vL&Go^&cXFdj|Bpg$By+B6REqeKq+L$O*0 zZ0sXRbObgufS)i*m_UMkmW%nYT~GSD?X zE;R5vTjQfheViWjhoV|3X+h)BM7Um4Egl|WJer8vbS^Mls8|4qgxzd9PgG801=!*; z$$Uf0LR6tdZVV$n@GT{`}iGAP)Zg<5sLzrUfe&I zcOs+2HoUWuH>W}KIE&s#g~qW&=JF0)-`qpBQi5uw1dFE^JqOuIoV7kl#m35&OiVDx3RD5H5JA^Eed9VFm2h$TLqXf4dDN)We_0;5DgtF@JsKj zpyLS55lr;9-%`8&QehQ<7x8VE3Qmj(^BrC#kt}tPxi-%Gu>#@=*1jhv!zo47{}Nj5Z}Jb$iCv~KU7b;+b1oC6kv)UT8X?l=eiVIx@L$OyQ1K9k{hORM1(dNd1Bbv0KZOs9*hT|!;{g%Sg=Xy*pN8Z;(!8jd1u4$`Nf%{P3@P&`Nf%f%eC-;0}eRgfCGM8{0}M${fW?-=;r_c N002ovPDHLkV1nevHa7qO literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-1.png new file mode 100644 index 0000000000000000000000000000000000000000..81b4d9e7706a94f3b1ca3cde92f8c755866ed7ae GIT binary patch literal 616 zcmV-u0+;=XP)Px%B1uF+RA_?%3=Y2yvd2xzS|?)bH|clt$=QPVq%uT z%JIF>!Rp%021mvP#(TgdmdDd!c08O4}p+I)FB-4?bxdfI1;?3}bI% zY9k7P%K#Uoo7+|6W3X4C-E6?~tvWf#XR`xamq5UnNG9K_=oDi)Wq8^Jnp%hl+n4 zFZSJD)^~eo-@2chg$cy>%d1nf3ykR(pg%p)8TMZ1f)gigrS_E$nCigwWHwhHCgJ3+pZ z$o0Bcl}b;_ho^hAj=Gg{$G-}wbHQS0000Px&JxN4CRA_iFy`rF`iHQVL2GRwaZ5FJy^8vOLd;p*3K7f#NA0VC8 zf{jhE6D$pqt2Uw#5t&<@3)TcwA#kp+;H=B?fFHQ3Z;8!Jq0(%7M&nd_ znDCqRYXAWNj&5+i+CeWI#N&S8iur2C+=7R*@4k=^$iS=YSmF zGH{F&bL0r}JuVE}3pa;{L)bWSfE zIL)>vmzGB2g(J`2bWJ3ZJ=Rj$MWPz!kIU5^B|=)(8YGoho3m*6X+I zlSi<$5SGjPhwH?6FB~}3h)Ox9G#;B7z+rdio;>2{5PE(6d+<*6P1; zX&znu))fI23Z*=}y?@x41pt-=hSA7Do#O|tco9)n9T*sx(e|mL$aG<^)k)nc3}WUBa;bG z*{s6-!!@9=vz5;@xoxknsRVSJPsR)Fkg` Z{sHt}Bur2(7Y+ab002ovPDHLkV1m-~rUw83 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa67f4f3d19e88202db9df9d0df7e5dd70119e51 GIT binary patch literal 1177 zcmV;K1ZMk*P)Px(Q%OWYRA_*! z2L!ToTgXmI5JJI4!Bqu!G1#CI5DgJA(}g)N_l+~p@o7V$o{jq6eB3kl+>eoHg%$oC z936j_HqVxcz_J(26;fJ*bwu*T%);cBPQVsN$Dd_97F>9pS0Ruqq~y*0ljEIb%4#73 zsv$S`PsXu{^?>KNgTt&ZQq}}a8_YUQov|Q;Pc?4lAv2c;a)p%h9ftq-^`IL!WdMle ziy4VIKYl&9j5Q?yFU%_;XM@v|E1|yZ^v6^#RYkc}6)>pNAJ1zOVUCR_7K#B?9-k5+ z?ZzO~ZuPY5;JqLCBA`1Nubh5xn3bLWm}-@}K~Ys{K}=OFwOBz08n*~pv7}t z&bLX8pAr+PAvNlR* zm&V(z9^KwO8u$0|)=UW@Q?y$>M@G#?*9kxR0^<2%M)Kr<7J_3T4*)m?RLXcP=n7I80qOAE z4&;j&32*R&;NRy>sa76PGZ2>nH;!l`9gyhs$AlK-;;bULH`2)ng_#WV#f(%B#Rf(X z*yd&(85Qa~em_?C`YX+xx>>u`qr`f^xqUSoU23;_#2dctoed`#)jKtIUyE9$E@0fj zVOGN3$Q%F~IestThIjg73P(e(m{6~o!@GXA z##@{Y)>+8ZL0+C;yX2+@vk6>=SYQ2ZvySzhSbe5mANiPOqwDH_0Mp6BP=4pI{p)>Z zC00*{H&{Ftcp97-GWi~l1?kqKIGH3jOKyPgf5bRIARG-j?KH5L-Id!r8&l8udm^)U rUIlyEUAf4$aD^3CSYd?~{#*P3-=OR0RF4T(00000NkvXXu0mjf{P-x; literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e22ecf6121ff1174b32428b0b527a649aad7c1f1 GIT binary patch literal 1328 zcmV-01<(44P)Px(>PbXFRA_gvJ`6U40;C@(+RXgLU_i}~QQlxwn@Y=wO1j&XX zKtuo_zO&`}tLBYPa$Z;{0_ki*{!fO#dH+F)3C(6B;y9@NU4VM^^4CQIbL(T z;EO;yn{Z;0fGltIiz{UENry;z8F%N_4U|h2VV_@4&mu9CfNr9FemUh?LbWr-aq(0T3BsU1#N&h8Q$`Y+jV|gJS5uuW?LRA#=SF}Q zZ8o}6Mm4)F6VWs*!Am1m7D`ZHaw5|^wBDdU#GpTv@2D2;JcO3{ibqACo7q7eW85#ajnmN_rW}}Pv&K69=5_C!f?gMCdFN&Jo#=-rtycZKVVbVOH?~_&{ zz{B3^jgZbJ9MiDG?%qV_6n08LE}2*)fO4rK_!Y6*8Dr2NO0VaizLd$U^Ze3RN-iI+ z$vd}h0JxR}$tj&pIJy&+3@2l0Y+i!$Z%9iKAZgHV^)Aav@m88Qd-aPeaKrg~vy2Oc zgK{pgh8x*&@l=#c6;ZR>i0^D6S4hcQQzoC3p9jyXL)pl2Eobsc8J$*dgitu>y0oa* z%>8)K^YXtG0os7-vkKDvaq(1y!m~H$5#o{~!t|VXz4PF^3XyKW z)_dL6)XzE#A7tb$wdC=4YIfVzR#W@n m@msey*kFSVHrQYThJOL)i7cL1KEcZX0000Px)lSxEDRA_&B?GYdyuG$0N^LZBm|T^fol4$=-? z2_0eR!jgs1Rbg6i*(p+~B5~10OVC1)5*z|?@g}-3L6~9)nItoW#QH~RUKg+5^}hRF zl9!)F7de~c{oMD?`Mz_%``rh$(Z>G=7tu*oKDYeLc&^r%dSGj2uo)^5G857)d7y;? zh>Y*)n~K*&EI*r67ei-A7Q34g(lP-ZW19>BLi4@4^V37x@8QuIyndGoTnY;Kx^!b3 zK~n-`TO^C!JOe~>ZC|@aWW{JNhR*odg}_8ZS+Fdi(hF*Nn=(K`I>t6xve=F3Az*Mo z6GfRZ8(#}`Wx(rq8HoS<`=#f1Q^z{87tu*|ZC}gG;nA6n+}gf=?0?T!FQSubve<2z zQ@s}Ak(vG6=-cfVCkO{)YQ40I5P5@koM`lEqhgPOU7otc<3!=Z15R z{!S=L4uF;&ak8cgWyAeqCWhU2Q~>y9@sFyRuq+@|C?gz_^LMIHMm|$Qs!+zg2OGRp0)XquO90wBA_|TkoVI2Tgo81r zC^=n}R=*ww08S>KDdF(w42qJg=>5^rJ}wftZ2aPp1pCNy%LenI$&J%WP!5H)_2V9)Q|uYA-@E;Y#oS%XT%Oiev^5aFrnq=hJ8UgdydBsZ|g`>K>)N!M-NU7oh=cs zHjyn^=-z`3md}*9R~044Ct^4lV`6DE+nG7~J9+selIiR@(%Ex6%lVZ z10v#)1d|sTdbwC4i8y6IemS+!q4{2fgE2-u64~XupI+*Oib9$aAQFj363p3S(^-ki zDiNpJF2m8^$#-W2k*sXBTCm(om>p9&q!k&^tV0_TQJ@$_+DeK$FA_oBt5sAKU{*E( zV`RL3m-_8*uK-*MkxL_anh@}HAzAFkqtz3Bjfl6rnUl$Q{Vp}1DPeG+3*lgl(JBq- z7ogG6J}62KAK&l8`%e89@zJVA_J>dG-19)?Jwn3*#I&ahWqAEAH5`nwcLz0}Q`%_) zik5Nq*bt8-7_A|DTT|-c(HYX&a~}1Mu}waC%_86MmQu8j=*h9W*8l)h_qBF`?Bw;k zRI?S8hy&GI3mM`!q=p2LHRxE}%L2g0&gHS#N{h{2^xzaCaq+%tB5Fri+Y{LRTbdu&`3HFBbtXXe~IJE=k$9rmlbO^dwE^o-aI0c%PC zy@2Yo4Dx+w`8jj+cUFD5qU3lBAzF?EQwGJZw-zifWaL}=nnqYzisX#br(Hl(wapP$c^Ol?wb4c!ZM4xw8#VAR!1ZU}P5lf`00000NkvXXu0mjfX1&3P literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/meta.json new file mode 100644 index 0000000000..7190c499e3 --- /dev/null +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd for CrystallPunk14", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "grow-1" + }, + { + "name": "grow-2" + }, + { + "name": "grow-3" + }, + { + "name": "grow-4" + }, + { + "name": "grow-5" + }, + { + "name": "death" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/meta.json similarity index 74% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/meta.json rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/meta.json index 0adde5cd86..e91fee36bf 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/meta.json @@ -7,15 +7,6 @@ "license": "All rights reserved for the CrystallPunk14 project only", "copyright": "Created by Prazar for CrystallPunk14", "states": [ - { - "name": "base1" - }, - { - "name": "base2" - }, - { - "name": "base3" - }, { "name": "world1" }, diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world1.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world2.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/world3.png rename to Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wild_sage.rsi/world3.png diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/meta.json new file mode 100644 index 0000000000..f0b7bbf8fb --- /dev/null +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by Jaraten(Discord/Github)", + "size": { + "x": 35, + "y": 35 + }, + "states": [ + { + "name": "seedbed_default" + }, + { + "name": "seedbed_default_east" + }, + { + "name": "seedbed_default_west" + }, + { + "name": "seedbed_default_north" + }, + { + "name": "seedbed_default_south" + } + ] +} diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default.png b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default.png new file mode 100644 index 0000000000000000000000000000000000000000..243edc9bdff7e4ece341ea80e2cd203d6b1c9683 GIT binary patch literal 868 zcmV-q1DpJbP)500001b5ch_0Itp) z=>Px&9!W$&R9J=WSWRmbK@fdO=98JM3xVViau5%S1cX3Nf;W#j`YSzp^z2Cp2wprX zNDd0Cn@NxJ(Hqx8Q{B}cGqVXX7kv=2TU}NCx;OjYRDk~oW9uf#FP}YL&&xu;Uy2%U zKYY4Tk6V#(Hy*?5cjtFP$ZB$Sdc3CBS(4~@+xK3K;#rdDbvK8TeD(Zf&1;sTMwY~Q z^ZujG*#dwUPamz*I6{`h-iDhHQokhtz`ae{e5{5(>IeWt(;|&aw7nc@Dv>3zJ`ul> z%enyoq;aIzDc`+0>JI>&Tv>ZW?m`+zn3sjsK;1~J8*$Q9)5#SUl>h*gd4>l??&T?R zst@fan${;{f*HR3yhIvDR+F(4iKa!FXDIUwqG|O{nP+ejBH@v7Nr?u!S!na2y0MsO zycD0zlleYoWsKcoXFU6kaaCWV5)$XQFk}Fr5)ze=n3eHHjdqJ2T-Dbb$6ZuHda(!q zzAS!WmgWF}AENh?{wAuyZq@4q){e0Vgi+81BzU_1hVy#u2ML!!64 zzYSnq`blM{uy>%oovyEK0m_F$LKPy$Er6u_?DTleYp39fprybRBtqu(Fd;ewuch1} z>)?kWrRLZMpp}z^jgnlmT#A~#R|H6d)FD)kTJw$8CS)tIbu*n@1tmOmbClo7mG(9F zFx(77_CiD^>;T#dTvF~ysD}HRTjvtv`7SIw;QllQU*^MgX&j9baQk@P6iNc1O>ivk zult7z^{~j0Hvza;e;V~B{(H)!raWk9J>*FQ&zlJMr-w(lXA!9PC$ z#!5Is{xmvbZ0a>ch(GCvdT=XoEyW^3{>0&`=-Bw;KQm8H8Sc2U?GiC6nlQ2IgTCWh z0M)y>ZQonMXKu%SwvGTJ?KC@)CCtl0v*#m2 zBu}IWG$rs&)G5tr7M0MoTyd!{f3OG4jKy;-GH%d@nGnc(_>FMzgLHD`j4mc`NX>6G uu%A3U)ZY-^m~Mb?bpH9`&i+gB@8S=+akqh4$os+o0000t??~kKI5VfKeA=2tx-*}@K3&%F!mCYJ;iQq~CZ8^y z$w`XER&U&=aePoeyl?NuHA!9mHLkunntR*h{M;5~XK!9T zQNrQ4By&dGfj2FuDlgdF`|z6gGHYt_|0A9+tQVb{;`72fCNKQedQpZy3>)?vez5ia R^%UqS22WQ%mvv4FO#o5NZEXMm literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_north.png b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_north.png new file mode 100644 index 0000000000000000000000000000000000000000..6f46d93b72ce414c027dd7aac260ac57ec4f3fba GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^${@_a1|;QfZjJ;}jKx9jP7LeL$-D$|&Um^whD5Z! zy|kCF$v}klf%6fCe;X_;W=NPn*W**$$Kn5A@=uL*XY!84ws#4sEYq8I#i`L^)@NOn zy*r=B&0=zafG^wkL~w}q{+`iO72kUMFDt`@%)r|_{Ds!*)@+Z}W|*3DT}EHbX>02> z-E8((yZEj%zmb_7`+Yahq|AqV6vH=|&F7W+eI{=I=>?acHfnIJR;+A$TEem5_S>tv z37=w{Z=JAVW{3&?`qQrdoW^uR{cv2p!|l~?|*_;mjCvgW)W?+O~T%B7#5-FaK|a^m_)PhU^T ztC)7bnaiuR`=)VZ+)llFl|Qq8r0wV3w`J+klyCc{hwZ!T?E(Sy?^vJbN9Qcrd-^)i OLkym-elF{r5}E*wb$m+z literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_west.png b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_west.png new file mode 100644 index 0000000000000000000000000000000000000000..36691f39f049c520ecec12a78b5ba1841615e0c6 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^${@_a1|;QfZjJ;}jKx9jP7LeL$-D$|c6hothD5Z! zyk6{fu{~Q}dioJXml! z(Vp>u7w^VXO2?x(EyAuI+59D??6$Ab?n>VViD0oxqumyg&L<7`m>2Pg%sz*Nw* z@rlH~dm!%8B@(+`r-@vSxqnjUXvunaBX7gf>T?y-^bOwk%3Qu{zdzlwjr+`=AD4bl zKh65CJ+Qy<>#Q9IbVMck)^Gdrzo&GkEh9tx6)hFkY599s1O33@>FVdQ&MBb@0DC}Y Ak^lez literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-1.png new file mode 100644 index 0000000000000000000000000000000000000000..866669947fdde57c49a1a520beeb0aa4ed4ab6fb GIT binary patch literal 632 zcmV-;0*C#HP)Px%GD$>1RA_G8EcEjfwzq!)2sAQ6H>N6sga^jiE#hjgyil zabqsdSaGFF$UotRInrn)JG(w-=gjN|91e%W;cz${4#)qBPTLD!j7A-xTMB?}5trj} z-sbmO6=39hKnM(gzI|f@tSr{R11*UOnl4brFpdL6{unq1J_7H7H^3nh)I*~3VI1dI zNzzEfJ_HPacfc3mtBvPK)GK=*AWLP#INml9(YAmty9|6l!ERJmK0(Zd7#?0ncMr8p{beVFe!N~jqz5&ls;l`*ALX`Co zH~^lN=GQ_c0Z(+9&`5wf%i1CXu2D8_fK%WEcxk`=i88ceCw%_`&~EjC*T~Z+sJjG4 zc8+Y38o3l$0uv*DXltZMU~2Pf7jabq9kk;SD$LKQ;|$PFF3^roY@C^Z9C>|dgi~a* z1&}p459$_iVWkK-L)i$Cb!NcSL`;xX3gSz9x5cb>IUfI03l&{vZsfirYZP&WTIHDu zxv@xX&aJI6qhawDs48HKygfx(D0Xs*>~M;F-a%a^LV`2Y^IN}rRXWJ7l7wL#=SFCS zd_6}yoU*e|Q3uyRQi>n;Y-)2iO|KHQcjRI;>Y{>vf$VdPx>JNY6-Z=R;2rSW;+}>D z3=LCi=R$yl9H2t(v&-xQk8hzHd)C_3x)o3U<#gWLe*uTX;cz${4u`|h2!8-(3&iS{ S6)DyL0000Px&T1iAfRA_bk0y-lC)K0Px)LPA19LPA19Lc;$-_EaBk7ezMn{VBll$;ot+<7}Kj zUyTcvN8h3?V?yo4|55$iz3HLr3t(PK46jF6|pgJF3Yhf)S}i9rmUCCYPpo7vuv#wV@N=wW zoY+WCUK4cSf*$I;AKAdk9JN~0&z;Uv1Qxc@Ig^z4{5{|$)^!drq3`Ru&jBOux5|+S zmsn<9hlK9)5)-Aj*8!HLJ{IviU7rwisaKQm_{-=;ep9T%xgW1zT@TDn;|d~v2);zkcqVkco*`C$=|PG ztuv1X$#gx(N-&Skga literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c49454b9767dbbcac97c46327aad6766c9d1a921 GIT binary patch literal 1081 zcmV-91jhS`P)Px&^GQTORA_>0myQ0N+BvZWgw+alE$7 zpFB)gW=Ko6C_Bl+vVp-+6v?UTuI_0PI_s>n&N}O?v(Em%);sjZMV9H__!*TB&X>!I zUtp~X81TN0#O59zd}*`57dHPm_u9l-5isxxFanNjjO;ljklQRGC2)@?qEQ0XYY`c= zyuNRM-vFn;95}|4Du4$(i6Z)a58MF%*>MgOi!3XF@})%fiohbvB$**F1wH_O0)H5Z zAt3@H@L-_-1+IWg;45$kY+|A>A@L-E2zY{z))6o>;Gckxz!^RYeY>qPVD|?83-A~4 zH}DVjXl#t=!6cGrzz+@d1USJgat@f7FE&|fK2)wazVgMC6EhG}! z7h>?0kv*|zo!aq;Ag8g75m2Pg75kESBq6KyPbIgK6nrAyMgZj1iGl0k<#t5a?Cy=k z)W#XUI<4_ZJ_J7F6a86x6oHG?iqyHd@(2jjHz|cazOMPagnA*E*zvIuo*J1C_~<0~ zd|6+tR)-M)NS#v@w40XHH>r}asf`HXS6hM2YC9w?{Xeklr}zpsvuEU3BvR+TSw0*@ z0D_lQX&wlgPHe$ryq@JzC3f5wm3E)1QEunu07);$?-7@HDcu4+E3Z5AVJiWXQM|ak z4k00Dc<;>#l|_ju;sU*)zHy0!lKl>!2bVV1c5MZesdMG7NbKx|Y-cPMSr+SkZ1WMJ zqP#akLqby*gO6o2h=wFr;1l-B=AJoZM!lM;aMY~7?PP<90F~71`8&ccJj3f*Q4kR| zbKAx(-s{(RuV34_lCXJ>pTpR;8-<|%xO6Jvo3ha^tqLU>YL4Zz#^-?A?`9soh(KJ8 z3InHwOG5q6sq4Lk&en_ZJed>{XzrXQ1||} z!6Cq9uR@?{5uxT9Kjqs{XPtG{S!bPf_PgvmLR_A)uF)~`00000NkvXXu0mjff%OVg literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-4.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e10a71ef623585fff71e733d077aac837bf1a GIT binary patch literal 1059 zcmV+;1l;?HP)Px&-AP12RA_vbWHFmJIj&YNIS^jpP+reOYjC*ghg8|6twpP5) zG92UjE1>oU5FGCU9W8^fvoGPe&~den31lw-a=rjgfitZh2?S)P?f4v+)z%8oF@SWo zZ>d;YPQL-(1Mh%yQa0KGu+W+TQ(zRS;9ry

1_#!3;aT#y8_|H7J*nsp_;`js+n{xYy?rfcJk)>8me=RXB&?aE>Cn?AsS?|5i z;Jx2ebOu+GDp@#sq%2xAI&5gTYa5wC^ve+LHQ25{oCQA`$EGFaW^;PmcBBt1STaaoSDD4#%uGGp3IL+>=$$ zKxUgd@;(4!Q9qJ6y3oVBWW|Z9MR447i1p*b9+F4y2OT4&*4jQVG^WZEc^Dg#C(!zP zag2IV+v7&*3_MfqHEwp(+rePtII;69r5Z|XT5kCs9U`|~gubTU7c8xHd5v9vy2~)P z?>n(0>VeITD>fuM8Y3U66W^Jg1;2jIfXVG(u#q+g0}u#1>oFomKQ4ofzt_8a1hOE# ziS6_ra4>*1VB)?P)Px%p-DtRRA_ zV(7T81bQth5s&*(aee$aJJ*nem^MTs+Bje_o8|xjgXl{9pArZ7A|Lmok_caM5?mrG zrnZ3-I-M`YJr~La;vDVze7s3Wp2yhSy1PEeS@@=bg@%k_hj};Bq&~@6j^2 z0a|2-V{yHD-RfM(1WH`;ZyTsDb1~WB2x$_RzHNj#oP+p|bN}TB*(8pNz&V5H3Qp%s ziM*D$RRBN8)RX{F+A;i}x(D@HTQs7PrEX>~1}$dOTq4R({bDxFm+MV$J{jk$*KLm; zbYCAg36-qNc~k^60To02*n~8REAA#mArone*6S0rBnqNda#=`2_}`(CVt(*2MEXXO zCg`M`rZANNu64YlkQPlcFv>cVuWC9<|YqHfdQY82Y-vx-~!G(Q0TLR5o& z;=T*6URhJXQ5Xl7vIU%~)i6(l``qnp(Dx&^Nh*vKGw6-(XE zCZY%M9X6#Xo96KnTFMoaERBrbiA;JU!DBx{S{!?WHiX!qKJh5XCsw<Px%xJg7oRA_0r+=ppE&qYpJI zQmlY-D5H$Vv#ZsI3!(eKco8$Z?`d~FR)B|xhlj`ijNo4_^!RY!()h>EUyH3fX(CRB zLnCIgHQA5F=m~6uY=~B2H?B`jH=ZlP*_jjPWF#RC(q8kKDrC@Ux81Y=a2;Otp1(G4 z0D!MI>oZbBxIQ(ARv~`>sm|slzqvxJ#=GsN<;01!1};P+3;<hnh+-ert0f@JS1^0l*i6K zFM=#hTJocLfPS*zB2)o9h~!ouj%Al=c-G;QXKB*L>!|m}>r>P7B_B>&eH(MJ+iqI= zadDJJvovXWjWB`R^Z&V6O!cL^P7`KN>=M|7O9+`=iGh!7!9k52jR{MOnAA>7B3YWW zceioRo+>N_vnj`G^NoSk$#e(cd6{5q+6b}*UqXn{`0?Ss9V$3Oq&3mBGs*XFJ=>}G zf-@sqBSi(ob~_t_Y!L{imoX${kygTVq)g&85!c}rUYj?RRSg+WeBRNmgxnEc-T|E5 z1NfMT5o~wk!?EmIkEiFCfUi5c82rx%V04hA=k)MA@4J3en)OxU5ImkOo? wq#(ak53gaj-L!PKaJ^%AczAetczk-i1GkM9r+xl6QUCw|07*qoM6N<$g3v=|IsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil3.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil3.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a342ff3beb7a17d56063484b9d289020297565 GIT binary patch literal 757 zcmVPx%uSrBfRA_?ZGk5Mh3`9gkL`3}0NakGZ>zB_hJ%9WDW7f4zm}L`A zTtX9K8XqEhvH(sdyGpzF^|=XJZ>)%50n&<`Ji#SG&f(*Ig^U(pBL4f&X)yNoI!AqO zx-mqM6Q_C0bkUpp(!2ry*4v$xqfz6s%YssR8+o~diyUgzDjCYZqYdTCy* zBD_z4gt#`8kRoj$0|3Bgf0*Bes#V$YP3~@r-tRV_CLzaDjUvx_-(v_%eDWPgC%`v) zdOmi0Cv#GLI}o$|gn%;qwS%g!Bf|CFPfkh?Bc)_J`#0;lAa*EQxU; zzHX+$M@X>mNil@usm9$+(VZUfCWJ05HxiBK&oZ*{({v@ZV3397w`-0ZPm!)#l`VZ- z>s++t9b2V_;35J{6)G_8!fKdZfJUAdbOavVfbdK_TR9C3a|K;qU|4oMJs*3d<$C|D zoCby^wXL`#@aV$x4#BrK@D|`|U=BZj0eH9cnC?tVd@@0rL^uVQB8g@}K<~_K&@62W zpE4JyrG!Qdc=OvL&#+7vod6&5bRXopGIL8IK5$l}^t|5gl4@19R2pcm!U+>NaV-P$ zk_8x+8z?Nx&cb6k;yLyWd4ndQAasa_~S8Tn7 zkEluiN=Pz9i06g5dJB`7-bPx%rAb6VRA_3ggP%h2w$` zD^@^PjTz0(?5^ZEz9aiVupOQrC4Edp-C%XBbr=!}0HfRC>3emoqn>LKY#1X*!xA~V9ilqct?RN4=dFGR04&!V zRjX-$3y9-PfawSzY9LNxmY8eV&Fno+udL>pEaxP zZcr9^BSn@)-e|_CUDOP4GlUGMZ}qz~f)W~KE;^=vAH5!+8RC!;E|lIKE2Dl{K6NxG z6w6H9x0D9Xh(aL&R!QRHBIUFc?kns_fE?+oWMW=QJls!I;a2h?{+Ue7%Lt8_a+sUF zN+u>K9BRZE;T7jaGqI0Qr7Dd8u9=tDJ%CTj#2UV+q?Hy{G&(1Q0zC|L-6KYRlM*vdA0yqu(ToKKc4h dBoc|Q%U^Ag@Sd8o<~INU002ovPDHLkV1g@ATa^F+ literal 0 HcmV?d00001 diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 800617c0fd..97e1e31b3f 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -55,6 +55,7 @@ AL BB CC + CP FTL GC GD