Pumpkin + Cabbage (#417)

* seeds

* import Omsoyk plant sprites

* cabbage slicing

* sliceable pumpkin

* some tweaks

* seedbed clean fix, remove shitcode systems

* seed crafting, knife fix

* utencil

* Update base.yml

* cabbage rebalance

* abstract seed
This commit is contained in:
Ed
2024-08-22 17:35:00 +03:00
committed by GitHub
parent 3d864eb0fd
commit d3189b83cf
60 changed files with 575 additions and 247 deletions

View File

@@ -1,21 +0,0 @@
using Content.Shared._CP14.SpawnOnTileTool;
namespace Content.Server._CP14.SpawnOnTileTool;
public sealed partial class CP14SpawnOnTileToolSystem : SharedCP14SpawnOnTileToolSystem
{
public override void Initialize()
{
SubscribeLocalEvent<CP14SpawnOnTileToolComponent, SpawnOnTileToolAfterEvent>(AfterDoAfter);
}
private void AfterDoAfter(Entity<CP14SpawnOnTileToolComponent> ent, ref SpawnOnTileToolAfterEvent args)
{
if (args.Handled || args.Cancelled)
return;
SpawnAtPosition(args.Spawn, GetCoordinates(args.Coordinates));
args.Handled = true;
}
}

View File

@@ -1,17 +0,0 @@
using Content.Shared.Tools;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.DestroyedByTool;
/// <summary>
/// abstract ability to destroy objects by using the right kind of tool on them
/// </summary>
[RegisterComponent, Access(typeof(CP14DestroyedByToolSystem))]
public sealed partial class CP14DestroyedByToolComponent : Component
{
[DataField]
public ProtoId<ToolQualityPrototype>? Tool;
[DataField]
public TimeSpan RemoveTime = TimeSpan.FromSeconds(1f);
}

View File

@@ -1,59 +0,0 @@
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<CP14DestroyedByToolComponent, CP14DestroyedByToolDoAfterEvent>(OnDestroyDoAfter);
SubscribeLocalEvent<CP14DestroyedByToolComponent, InteractUsingEvent>(OnInteractUsing);
}
private void OnInteractUsing(Entity<CP14DestroyedByToolComponent> ent, ref InteractUsingEvent args)
{
if (args.Handled)
return;
if (ent.Comp.Tool == null || !_tool.HasQuality(args.Used, ent.Comp.Tool))
return;
if (TryComp<ToolComponent>(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<CP14DestroyedByToolComponent> ent, ref CP14DestroyedByToolDoAfterEvent args)
{
if (args.Cancelled || args.Handled)
return;
QueueDel(ent);
args.Handled = true;
}
}
[Serializable, NetSerializable]
public sealed partial class CP14DestroyedByToolDoAfterEvent : SimpleDoAfterEvent
{
}

View File

@@ -1,43 +0,0 @@
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;
/// <summary>
/// Allows using an item on a certain type of tile to spawn entities on it.
/// </summary>
[RegisterComponent, Access(typeof(SharedCP14SpawnOnTileToolSystem))]
public sealed partial class CP14SpawnOnTileToolComponent : Component
{
[DataField]
public Dictionary<ProtoId<ContentTileDefinition>, 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;
}
}

View File

@@ -1,58 +0,0 @@
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<CP14SpawnOnTileToolComponent, AfterInteractEvent>(OnAfterInteract);
}
private void OnAfterInteract(Entity<CP14SpawnOnTileToolComponent> tool, ref AfterInteractEvent args)
{
var grid = _transform.GetGrid(args.ClickLocation);
if (grid == null || !TryComp<MapGridComponent>(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;
}
}
}

View File

@@ -1,10 +0,0 @@
- 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

View File

@@ -0,0 +1,130 @@
- type: entity
id: CP14FoodCabbage
parent: FoodInjectableBase
name: cabbage
description: Green edible ball.
components:
- type: Item
size: Normal
- type: FlavorProfile
flavors:
- cabbage
- type: Sprite
sprite: _CP14/Objects/Specific/Farming/Produce/cabbage.rsi
layers:
- state: base1
map: [ "random" ]
- type: RandomSprite
available:
- random:
base1: ""
base2: ""
base3: ""
- type: SolutionContainerManager
solutions:
food:
maxVol: 12
reagents:
- ReagentId: Nutriment
Quantity: 10
- ReagentId: Vitamin
Quantity: 1
- type: SliceableFood
count: 4
sliceTime: 1.5
slice: CP14FoodCabbageSlice
- type: entity
id: CP14FoodCabbageSlice
parent: CP14FoodCabbage
name: cabbage leaf
description: Time to make green salads
components:
- type: Item
size: Tiny
- type: Sprite
layers:
- state: slice1
map: [ "random" ]
- type: RandomSprite
available:
- random:
slice1: ""
slice2: ""
slice3: ""
slice4: ""
- type: SolutionContainerManager
solutions:
food:
maxVol: 3 # 1/4 cabbage
reagents:
- ReagentId: Nutriment
Quantity: 2.5
- ReagentId: Vitamin
Quantity: 0.25
- type: entity
id: CP14FoodPumpkin
parent: FoodInjectableBase
name: pumpkin
description: Big, cool pumpkin.
components:
- type: Item
size: Normal
- type: FlavorProfile
flavors:
- pumpkin
- type: Sprite
sprite: _CP14/Objects/Specific/Farming/Produce/pumpkin.rsi
layers:
- state: base1
map: [ "random" ]
- type: RandomSprite
available:
- random:
base1: ""
base2: ""
base3: ""
base4: ""
- type: SolutionContainerManager
solutions:
food:
maxVol: 25
reagents:
- ReagentId: PumpkinFlesh
Quantity: 20
- ReagentId: Vitamin
Quantity: 5
- type: SliceableFood
count: 5
sliceTime: 2
slice: CP14FoodPumpkinSlice
- type: entity
id: CP14FoodPumpkinSlice
parent: CP14FoodPumpkin
name: pumpkin slice
description: Pumpkin! # TODO
components:
- type: Item
size: Tiny
- type: Sprite
layers:
- state: slice1
map: [ "random" ]
- type: RandomSprite
available:
- random:
slice1: ""
slice2: ""
slice3: ""
slice4: ""
- type: SolutionContainerManager
solutions:
food:
maxVol: 5 # 1/5 pumpkin
reagents:
- ReagentId: Nutriment
Quantity: 4
- ReagentId: Vitamin
Quantity: 1

View File

@@ -0,0 +1,61 @@
- type: entity
id: CP14BaseSeed
parent: BaseItem
abstract: true
components:
- type: Item
size: Tiny
- type: Sprite
sprite: _CP14/Objects/Specific/Farming/seeds.rsi
- type: entity
id: CP14SeedWheat
name: wheat seeds
description: Small wheat seeds. What will you do with them? Grind them into flour, or plant them again?
parent: CP14BaseSeed
components:
- type: Sprite
layers:
- state: bag
- state: wheat
- type: CP14Seed
plantProto: CP14PlantWheat
- type: entity
id: CP14SeedPumpkin
name: pumpkin seeds
description: Pumpkin seeds. Some pumpkin seems to have been gutted and butchered.
parent: CP14BaseSeed
components:
- type: Sprite
layers:
- state: bag
- state: pumpkin
- type: CP14Seed
plantProto: CP14PlantPumpkin
- type: entity
id: CP14SeedCabbage
name: cabbage seeds
description: Oh, no, my cabbage!
parent: CP14BaseSeed
components:
- type: Sprite
layers:
- state: bag
- state: cabbage
- type: CP14Seed
plantProto: CP14PlantCabbage
- type: entity
id: CP14SeedTomato
name: tomato seeds
description: It looks like powder! They're so small, these seeds.
parent: CP14BaseSeed
components:
- type: Sprite
layers:
- state: bag
- state: tomato
#- type: CP14Seed
# plantProto: CP14PlantWheat

View File

@@ -21,7 +21,4 @@
collection: MetalThud
- type: Item
size: Normal
sprite: _CP14/Objects/Weapons/Melee/Hoe/hoe.rsi
- type: CP14SpawnOnTileTool
spawns:
CP14FloorDirt: CP14PloughedGround
sprite: _CP14/Objects/Weapons/Melee/Hoe/hoe.rsi

View File

@@ -69,6 +69,14 @@
- type: CP14Sharpened
- type: CP14SharpeningStone
- type: UseDelay
- type: Tool
qualities:
- Slicing
useSound:
path: /Audio/Items/Culinary/chop.ogg
- type: Utensil
types:
- Knife
- type: entity
id: CP14BaseWeaponDestructible

View File

@@ -120,4 +120,6 @@
- CP14FoodDoughLarge
- CP14FoodDoughMediumFlat
- CP14FoodDoughMedium
- CP14FoodMeatLamb
- CP14FoodMeatLamb
- CP14SeedPumpkin
- CP14SeedWheat

View File

@@ -10,8 +10,6 @@
- type: Physics
canCollide: false
bodyType: Static
- type: CP14DestroyedByTool
tool: CP14Digging
- type: CP14PlantAutoRoot
- type: Damageable
damageContainer: Biological

View File

@@ -0,0 +1,69 @@
- type: entity
id: CP14PlantCabbage
parent: CP14GatherablePlantBase
name: cabbage
description: OOO # TODO
components:
- type: Sprite
sprite: _CP14/Structures/Specific/Farming/Herbals/cabbage.rsi
layers:
- state: grow-1
map: ["enum.PlantVisualLayers.Base"]
- type: CP14PlantMetabolizer
metabolizerId: Base
- type: CP14PlantEnergyFromLight
energy: 1
daytime: true
- type: CP14PlantVisuals
growthSteps: 6
- 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: CP14GatherCabbage
- 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: CP14PlantCabbageDeath
name: dead cabbage
description: The sad spectacle of wasted food.
parent: CP14GatherableBase
components:
- type: Sprite
sprite: _CP14/Structures/Specific/Farming/Herbals/cabbage.rsi
state: death
- type: Gatherable
toolWhitelist:
tags:
- CP14HerbalGathering
- type: entityLootTable
id: CP14GatherCabbage
entries:
- id: CP14FoodCabbage
amount: 3
maxAmount: 4

View File

@@ -0,0 +1,69 @@
- type: entity
id: CP14PlantPumpkin
parent: CP14GatherablePlantBase
name: pumpkin
description: OOO # TODO
components:
- type: Sprite
sprite: _CP14/Structures/Specific/Farming/Herbals/pumpkin.rsi
layers:
- state: grow-1
map: ["enum.PlantVisualLayers.Base"]
- type: CP14PlantMetabolizer
metabolizerId: Base
- type: CP14PlantEnergyFromLight
energy: 1
daytime: true
- type: CP14PlantVisuals
growthSteps: 6
- 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: CP14GatherPumpkin
- 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: CP14PlantPumpkinDeath
name: dead pumpkin
description: The sad spectacle of wasted food.
parent: CP14GatherableBase
components:
- type: Sprite
sprite: _CP14/Structures/Specific/Farming/Herbals/pumpkin.rsi
state: death
- type: Gatherable
toolWhitelist:
tags:
- CP14HerbalGathering
- type: entityLootTable
id: CP14GatherPumpkin
entries:
- id: CP14FoodPumpkin
amount: 1
maxAmount: 2

View File

@@ -31,39 +31,12 @@
anchored: true
- type: CP14Soil
solution: soil
- type: CP14DestroyedByTool
tool: CP14Digging
- type: entity
name: ploughed ground
id: CP14SeedbedWooden
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
description: A wooden tub with a pile of earth adapted for growing plants.
components:
- type: Icon
sprite: _CP14/Structures/Specific/Farming/seedbed.rsi
@@ -85,4 +58,6 @@
state: seedbed_default_north
- map: [ "enum.EdgeLayer.West" ]
state: seedbed_default_west
# snapCardinals: true (when you flip it over, you get a swastika)
- type: Construction
graph: CP14Seedbed
node: CP14SeedbedWooden

View File

@@ -34,7 +34,7 @@
- type: entity
id: CP14WallDirt
name: earth cliffs
name: earth wall
parent: CP14BaseWall
description: A tall pile of dirt. Can a house be built from it?
components:

View File

@@ -0,0 +1,32 @@
- type: constructionGraph
id: CP14Seedbed
start: start
graph:
- node: start
actions:
- !type:DestroyEntity {}
edges:
- to: CP14SeedbedWooden
steps:
- material: CP14Dirt
amount: 2
doAfter: 2
- material: CP14WoodenPlanks
amount: 2
doAfter: 2
- node: CP14SeedbedWooden
entity: CP14SeedbedWooden
edges:
- to: start
steps:
- tool: CP14Digging
doAfter: 1
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
- !type:SpawnPrototype
prototype: CP14DirtBlock1
amount: 2
- !type:DeleteEntity {}

View File

@@ -0,0 +1,20 @@
- type: construction
crystallPunkAllowed: true
name: Seedbed
description: A wooden tub with a pile of earth adapted for growing plants.
id: CP14SeedbedWooden
graph: CP14Seedbed
startNode: start
targetNode: CP14SeedbedWooden
category: construction-category-furniture
icon:
sprite: _CP14/Structures/Specific/Farming/seedbed.rsi
state: seedbed_default
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked
- !type:TileType
targets:
- CP14FloorDirt

View File

@@ -29,4 +29,18 @@
entities:
CP14FoodDoughMedium: 1
result: CP14FoodDoughMediumFlat
tryMergeSolutions: true
tryMergeSolutions: true
- type: CP14Recipe
id: CP14SeedPumpkin
craftTime: 1
entities:
CP14FoodPumpkinSlice: 1
result: CP14SeedPumpkin
- type: CP14Recipe
id: CP14SeedWheat
craftTime: 1
entities:
CP14Wheat: 1
result: CP14SeedWheat

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

View File

@@ -0,0 +1,32 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by omsoyk (Discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "base1"
},
{
"name": "base2"
},
{
"name": "base3"
},
{
"name": "slice1"
},
{
"name": "slice2"
},
{
"name": "slice3"
},
{
"name": "slice4"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

View File

@@ -0,0 +1,35 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by omsoyk (Discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "base1"
},
{
"name": "base2"
},
{
"name": "base3"
},
{
"name": "base4"
},
{
"name": "slice1"
},
{
"name": "slice2"
},
{
"name": "slice3"
},
{
"name": "slice4"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

View File

@@ -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": "bag"
},
{
"name": "cabbage"
},
{
"name": "pumpkin"
},
{
"name": "tomato"
},
{
"name": "wheat"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 923 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,32 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by omsoyk (Discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "grow-1"
},
{
"name": "grow-2"
},
{
"name": "grow-3"
},
{
"name": "grow-4"
},
{
"name": "grow-5"
},
{
"name": "grow-6"
},
{
"name": "death"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,32 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by omsoyk (Discord)",
"size": {
"x": 48,
"y": 48
},
"states": [
{
"name": "grow-1"
},
{
"name": "grow-2"
},
{
"name": "grow-3"
},
{
"name": "grow-4"
},
{
"name": "grow-5"
},
{
"name": "grow-6"
},
{
"name": "death"
}
]
}

View File

@@ -33,6 +33,10 @@ CP14Shovel: CP14BaseShovel
CP14Hoe: CP14BaseHoe
CP14WallStoneSilverOre: CP14WallStoneGoldOre
# 2024-08-22
CP14PloughedGround: CP14SeedbedWooden
CP14SeedbedDefault: CP14SeedbedWooden
# <---> CrystallPunk migration zone end