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 0000000000..2cdfca47d3 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base1.png differ 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 0000000000..7d6f7cc660 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/base2.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/meta.json new file mode 100644 index 0000000000..bac91552b6 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wheat.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd for CrystallPunk14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base1.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base1.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base1.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base1.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base2.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base2.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base2.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base2.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base3.png b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base3.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Specific/Alchemy/Herbal/wild_sage.rsi/base3.png rename to Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/base3.png diff --git a/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.rsi/meta.json new file mode 100644 index 0000000000..b58485d4be --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Farming/Produce/wild_sage.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 Prazar for CrystallPunk14", + "states": [ + { + "name": "base1" + }, + { + "name": "base2" + }, + { + "name": "base3" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/icon.png b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/icon.png new file mode 100644 index 0000000000..055d844c25 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/icon.png differ 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 0000000000..875206d787 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-left.png differ 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 0000000000..ca649221ec Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/meta.json b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/meta.json new file mode 100644 index 0000000000..182b816e44 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Tools/hoe.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd (Github) for CrystallPunk", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/icon.png b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/icon.png index bb6349a43f..23e44893b2 100644 Binary files a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/icon.png and b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/icon.png differ diff --git a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-left.png index fee212ccec..3861cdeb29 100644 Binary files a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-left.png and b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-right.png index 765229c5e8..d4470bc904 100644 Binary files a/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-right.png and b/Resources/Textures/_CP14/Objects/Tools/shovel.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT1.png index 86c60421e5..6757aa75c7 100644 Binary files a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT1.png and b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT1.png differ diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT2.png index 178ddbb2b8..9dbd16530f 100644 Binary files a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT2.png and b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT2.png differ 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 bb5755a9c6..b0cd3caf63 100644 Binary files a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/icon.png and b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/icon.png differ 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 cd4df08595..4dae3235b2 100644 Binary files a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-left.png and b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png index 0e8509ed9a..6fdce06693 100644 Binary files a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png and b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png differ 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 0000000000..2fb196993f Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/death.png differ 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 0000000000..81b4d9e770 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-1.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-2.png new file mode 100644 index 0000000000..eac53dac60 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-2.png differ 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 0000000000..fa67f4f3d1 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-3.png differ 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 0000000000..e22ecf6121 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-4.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-5.png b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-5.png new file mode 100644 index 0000000000..f4571a9beb Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/Herbals/wheat.rsi/grow-5.png differ 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 0000000000..243edc9bdf Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_east.png b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_east.png new file mode 100644 index 0000000000..55221721a3 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_east.png differ 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 0000000000..6f46d93b72 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_north.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_south.png b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_south.png new file mode 100644 index 0000000000..8e44dc87ba Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_south.png differ 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 0000000000..36691f39f0 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/seedbed.rsi/seedbed_default_west.png differ 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 0000000000..866669947f Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-1.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-2.png new file mode 100644 index 0000000000..8ef3440ed8 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-2.png differ 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 0000000000..c49454b976 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-3.png differ 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 0000000000..6d9e10a71e Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/liq-4.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/meta.json b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/meta.json new file mode 100644 index 0000000000..65b48ae5f5 --- /dev/null +++ b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "All rights reserved for the CrystallPunk14 project only", + "copyright": "Created by TheShuEd for CrystallPunk14", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "liq-1" + }, + { + "name": "liq-2" + }, + { + "name": "liq-3" + }, + { + "name": "liq-4" + }, + { + "name": "soil1" + }, + { + "name": "soil2" + }, + { + "name": "soil3" + }, + { + "name": "soil4" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil1.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil1.png new file mode 100644 index 0000000000..67eb9b052e Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil1.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil2.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil2.png new file mode 100644 index 0000000000..735fc692aa Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil2.png differ 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 0000000000..c4a342ff3b Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil3.png differ diff --git a/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil4.png b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil4.png new file mode 100644 index 0000000000..6e4e368879 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Specific/Farming/soil.rsi/soil4.png differ 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