Compare commits

...

5 Commits

Author SHA1 Message Date
Ed
e503f9aeaa dd 2024-08-26 15:53:43 +03:00
Ed
79515d9303 Convenient Z-Levels (#421)
* clear ores and herbals frmo generation

* remake simple zlevels system

* GetMapOffset

* woohoo

* autolink between zlevels

* 5am

* somwthing sommetinh work

* Update CP14StationZLevelsSystem.cs

* fix biomespawner portal deletion

* some docs

* Revert "clear ores and herbals frmo generation"

This reverts commit 658d15a602.
2024-08-25 17:53:15 +03:00
Ed
ea9c6ee7bf PlantFix (#419)
* fix

* Update wheat.yml

* Update CP14FarmingSystem.Interactions.cs
2024-08-23 00:42:27 +03:00
Ed
3850317a37 Update entities.ftl (#418) 2024-08-22 19:00:29 +03:00
Ed
d3189b83cf 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
2024-08-22 17:35:00 +03:00
78 changed files with 1017 additions and 415 deletions

View File

@@ -7,6 +7,7 @@
using Content.Server._CP14.BiomeSpawner.EntitySystems;
using Content.Shared.Parallax.Biomes;
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.BiomeSpawner.Components;
@@ -19,4 +20,10 @@ public sealed partial class CP14BiomeSpawnerComponent : Component
{
[DataField]
public ProtoId<BiomeTemplatePrototype> Biome = "Grasslands";
/// <summary>
/// entities that we don't remove.
/// </summary>
[DataField(required: true)]
public EntityWhitelist DeleteBlacklist = new();
}

View File

@@ -10,6 +10,7 @@ using Content.Server._CP14.BiomeSpawner.Components;
using Content.Server._CP14.RoundSeed;
using Content.Server.Decals;
using Content.Server.Parallax;
using Content.Shared.Whitelist;
using Robust.Server.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
@@ -26,6 +27,7 @@ public sealed class CP14BiomeSpawnerSystem : EntitySystem
[Dependency] private readonly DecalSystem _decals = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly CP14RoundSeedSystem _roundSeed = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
public override void Initialize()
{
@@ -79,11 +81,12 @@ public sealed class CP14BiomeSpawnerSystem : EntitySystem
}
// Remove entities
var oldEntities = _lookup.GetEntitiesInRange(spawnerTransform.Coordinates, 0.48f);
var oldEntities = _lookup.GetEntitiesInRange(spawnerTransform.Coordinates, 0.48f, LookupFlags.Uncontained);
// TODO: Replace this shit with GetEntitiesInBox2
foreach (var entToRemove in oldEntities.Concat(new[] { ent.Owner })) // Do not remove self
{
QueueDel(entToRemove);
if (!_whitelist.IsValid(ent.Comp.DeleteBlacklist, entToRemove))
QueueDel(entToRemove);
}
if (_biome.TryGetEntity(vec, biome.Layers, tile.Value, seed, map, out var entityProto))

View File

@@ -71,8 +71,11 @@ public sealed partial class CP14FarmingSystem
continue;
var spawnLoot = getLoot.GetSpawns(_random);
var spawnPos = pos.Offset(_random.NextVector2(gatheredPlant.Comp.GatherOffset));
result.Add(Spawn(spawnLoot[0], spawnPos)); //TODO почему то не спавнится больше 1 пшенички. Кажись проблема оффов
foreach (var loot in spawnLoot)
{
var spawnPos = pos.Offset(_random.NextVector2(gatheredPlant.Comp.GatherOffset));
result.Add(Spawn(loot, spawnPos));
}
}
if (gatheredPlant.Comp.DeleteAfterHarvest)

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,16 +0,0 @@
using Robust.Shared.Utility;
namespace Content.Server._CP14.StationDungeonMap;
/// <summary>
/// Loads additional maps from the list at the start of the round.
/// </summary>
[RegisterComponent, Access(typeof(CP14StationAdditionalMapSystem))]
public sealed partial class CP14StationAdditionalMapComponent : Component
{
/// <summary>
/// A map paths to load on a new map.
/// </summary>
[DataField]
public List<ResPath> MapPaths = new();
}

View File

@@ -1,46 +0,0 @@
using Content.Server.Parallax;
using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared.Teleportation.Systems;
using Robust.Server.GameObjects;
using Robust.Server.Maps;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.StationDungeonMap;
public sealed partial class CP14StationAdditionalMapSystem : EntitySystem
{
[Dependency] private readonly BiomeSystem _biome = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly MapSystem _map = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly LinkedEntitySystem _linkedEntity = default!;
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14StationAdditionalMapComponent, StationPostInitEvent>(OnStationPostInit);
}
private void OnStationPostInit(Entity<CP14StationAdditionalMapComponent> addMap, ref StationPostInitEvent args)
{
if (!TryComp(addMap, out StationDataComponent? dataComp))
return;
foreach (var path in addMap.Comp.MapPaths)
{
var mapUid = _map.CreateMap(out var mapId);
Log.Info($"Created map {mapId} for StationAdditionalMap system");
var options = new MapLoadOptions { LoadMap = true };
if (!_mapLoader.TryLoad(mapId, path.ToString(), out var roots, options))
{
Log.Error($"Failed to load map from {path}!");
Del(mapUid);
return;
}
}
}
}

View File

@@ -0,0 +1,28 @@
using Content.Server._CP14.StationDungeonMap.EntitySystems;
using Robust.Shared.Map;
using Robust.Shared.Utility;
namespace Content.Server._CP14.StationDungeonMap.Components;
/// <summary>
/// Initializes the z-level system by creating a series of linked maps
/// </summary>
[RegisterComponent, Access(typeof(CP14StationZLevelsSystem))]
public sealed partial class CP14StationZLevelsComponent : Component
{
[DataField(required: true)]
public int DefaultMapLevel = 0;
[DataField(required: true)]
public Dictionary<int, CP14ZLevelEntry> Levels = new();
public bool Initialized = false;
public Dictionary<MapId, int> LevelEntities = new();
}
[DataRecord, Serializable]
public sealed class CP14ZLevelEntry
{
public ResPath? Path { get; set; } = null;
}

View File

@@ -0,0 +1,23 @@
using Content.Server._CP14.StationDungeonMap.EntitySystems;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.StationDungeonMap.Components;
/// <summary>
/// automatically creates a linked portal at a different relative z-level, and then the component is removed
/// </summary>
[RegisterComponent, Access(typeof(CP14StationZLevelsSystem))]
public sealed partial class CP14ZLevelAutoPortalComponent : Component
{
/// <summary>
/// relative neighboring layer. Ideally, -1 is the neighboring bottom layer, +1 is the neighboring top layer
/// </summary>
[DataField(required: true)]
public int ZLevelOffset = 0;
/// <summary>
/// prototype of the portal being created on the other side
/// </summary>
[DataField(required: true)]
public EntProtoId OtherSideProto = default!;
}

View File

@@ -0,0 +1,147 @@
using Content.Server._CP14.StationDungeonMap.Components;
using Content.Server.GameTicking.Events;
using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared.Maps;
using Content.Shared.Station.Components;
using Content.Shared.Teleportation.Systems;
using Robust.Server.GameObjects;
using Robust.Server.Maps;
using Robust.Shared.Map;
using Robust.Shared.Random;
namespace Content.Server._CP14.StationDungeonMap.EntitySystems;
public sealed partial class CP14StationZLevelsSystem : EntitySystem
{
[Dependency] private readonly MapSystem _map = default!;
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly TileSystem _tile = default!;
[Dependency] private readonly SharedMapSystem _maps = default!;
[Dependency] private readonly LinkedEntitySystem _linkedEntity = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14ZLevelAutoPortalComponent, MapInitEvent>(OnPortalMapInit);
SubscribeLocalEvent<RoundStartingEvent>(OnRoundStart);
SubscribeLocalEvent<CP14StationZLevelsComponent, StationPostInitEvent>(OnStationPostInit);
}
private void OnRoundStart(RoundStartingEvent ev)
{
var query = EntityQueryEnumerator<CP14ZLevelAutoPortalComponent>();
while (query.MoveNext(out var uid, out var portal))
{
InitPortal((uid, portal));
}
}
private void OnStationPostInit(Entity<CP14StationZLevelsComponent> ent, ref StationPostInitEvent args)
{
if (ent.Comp.Initialized)
return;
if (!TryComp(ent, out StationDataComponent? dataComp))
{
Log.Error($"Failed to init CP14StationZLevelsSystem: no StationData");
return;
}
var defaultMap = _station.GetLargestGrid(dataComp);
if (defaultMap is null)
{
Log.Error($"Failed to init CP14StationZLevelsSystem: defaultMap is null");
return;
}
ent.Comp.LevelEntities.Add(Transform(defaultMap.Value).MapID, ent.Comp.DefaultMapLevel);
ent.Comp.Initialized = true;
foreach (var (map, level) in ent.Comp.Levels)
{
if (ent.Comp.LevelEntities.ContainsValue(map))
{
Log.Error($"Key duplication for CP14StationZLevelsSystem at level {map}!");
continue;
}
var path = level.Path.ToString();
if (path is null)
{
Log.Error($"path {path} for CP14StationZLevelsSystem at level {map} don't exist!");
continue;
}
var mapUid = _map.CreateMap(out var mapId);
var member = EnsureComp<StationMemberComponent>(mapUid);
member.Station = ent;
Log.Info($"Created map {mapId} for CP14StationZLevelsSystem at level {map}");
var options = new MapLoadOptions { LoadMap = true };
if (!_mapLoader.TryLoad(mapId, path, out var grids, options))
{
Log.Error($"Failed to load map for CP14StationZLevelsSystem at level {map}!");
Del(mapUid);
continue;
}
ent.Comp.LevelEntities.Add(mapId, map);
}
}
private void OnPortalMapInit(Entity<CP14ZLevelAutoPortalComponent> autoPortal, ref MapInitEvent args)
{
InitPortal(autoPortal);
}
private void InitPortal(Entity<CP14ZLevelAutoPortalComponent> autoPortal)
{
var mapId = Transform(autoPortal).MapUid;
if (mapId is null)
return;
var offsetMap = GetMapOffset(mapId.Value, autoPortal.Comp.ZLevelOffset);
if (offsetMap is null)
return;
var currentWorldPos = _transform.GetWorldPosition(autoPortal);
var targetMapPos = new MapCoordinates(currentWorldPos, offsetMap.Value);
var otherSidePortal = Spawn(autoPortal.Comp.OtherSideProto, targetMapPos);
if (_linkedEntity.TryLink(autoPortal, otherSidePortal, true))
RemComp<CP14ZLevelAutoPortalComponent>(autoPortal);
}
public MapId? GetMapOffset(EntityUid mapUid, int offset)
{
var query = EntityQueryEnumerator<CP14StationZLevelsComponent, StationDataComponent>();
while (query.MoveNext(out var uid, out var zLevel, out _))
{
if (!zLevel.LevelEntities.TryGetValue(Transform(mapUid).MapID, out var currentLevel))
continue;
var targetLevel = currentLevel + offset;
if (!zLevel.LevelEntities.ContainsValue(targetLevel))
continue;
foreach (var (key, value) in zLevel.LevelEntities)
{
if (value == targetLevel && _map.MapExists(key))
return key;
}
}
return null;
}
}

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,11 +1,9 @@
ent-CP14SeedTest = FUCK test SEED
ent-CP14Fire = огонь
.desc = Это огонь!
.suffix = cp14
ent-CP14BaseKeyRing = кольцо для ключей
.desc = Позволяет комфортно хранить большое количество ключей в одном месте.
.desc = Позволяет комфортно носить большое количество ключей в одном месте.
.suffix = Пустое
ent-CP14KeyRingInnkeeper = { ent-CP14BaseKeyRing }
@@ -13,19 +11,25 @@ ent-CP14KeyRingInnkeeper = { ent-CP14BaseKeyRing }
.suffix = Трактирщик
ent-CP14BaseKey = ключ
.desc = Небольшая заковыристая железяка, открывающая определенные замки. Не отдавайте кому попало!
.desc = Небольшой замысловатый кусочек железа, открывающий определенные замки. Не отдавайте кому попало!
ent-CP14BaseLockpick = отмычка
.desc = Воровской инструмент, при должном умении и сноровке позволяющий взламывать любые замки.
.desc = Воровской инструмент, позволяющий с достаточными навыками и сноровкой открыть любой замок.
ent-CP14KeyTavern = капитанский ключ
.desc = { ent-CP14BaseKey.desc }
ent-CP14BaseLock = стальной замок
.desc = Он запирает вещи. И вам потребуется ключ, чтобы открыть их обратно.
.desc = Он запирает вещи. И вам, конечно же, нужен ключ, чтобы открыть их.
ent-CP14BaseMagicRune = magic rune
.desc = manifestation of magical energy in the physical plane
ent-CP14LockTavern = капитанский замок
.desc = { ent-CP14BaseLock.desc }
ent-CP14BaseMagicImpact = magic impact
.desc = manifestation of magical energy in the physical plane
ent-CP14BaseMagicRune = магическая руна
.desc = проявления магической энергии в физическом плане.
ent-CP14BaseMagicImpact = магическая вспышка
.desc = проявления магической энергии в физическом плане.
ent-CP14ClothingCloakArmoredRed = бронированная красная накидка
.desc = Огромные металлические наплечники дают дополнительную защиту от отрубания головы.
@@ -96,9 +100,21 @@ ent-CP14ClothingHeadBlackBeret = черный берет
ent-CP14ClothingHeadCaptainCap = капитанская кепка
.desc = Нет, ну вы посмотрите какой красавчик!
ent-CP14ClothingHeadYellowHat = желтая бандана
.desc = Почему-то любимая желтая шляпа магов.
ent-CP14ClothingHeadMercenaryBeret = берет наемника
.desc = Большая красная шерстяная шляпа, украшенная пером.
ent-CP14ClothingHeadCapellina = капеллина
.desc = Защита от ударов крупными предметами по голове.
ent-CP14ClothingMaskSinner = маска грешника
.desc = Маска предназначенная для ношения не самыми светлыми личностями. Палачи надевают их на себя и на жертву перед казнью.
ent-CP14ClothingMaskSteelMask = стальная маска
.desc = Стальная маска, защищающая лицо от внешнего воздействия железа.
ent-CP14ClothingPantsTrouserWhite = белые штаны
.desc = Широкие, свободные штаны из простой холщовой ткани.
@@ -114,17 +130,11 @@ ent-CP14ClothingPantsLoincloth = набедренная повязка
ent-CP14ClothingDressBlack = черное платье
.desc = Просторная женское платье
ent-CP14ClothingRingIceDagger = conductive ring
.desc = A standard mana-conductive ring that allows the user to summon ice daggers.
.suffix = Ice Dagger
ent-CP14ClothingPantsMercenaryTrousers = брюки наемника
.desc = Разноцветные брюки наемника. Не порвите их.
ent-CP14ClothingRingFlameCreation = conductive ring
.desc = A standard mana-conductive ring that allows the user to summon artificial flames.
.suffix = Flame creation
ent-CP14ClothingRingCureWounds = conductive ring
.desc = A standard mana-conductive ring that allows the user to heal physical injuries.
.suffix = Cure Wounds
ent-CP14ClothingPantsSouthernMagician = Платье южного фокусника
.desc = Традиционная юбка южного мага, довольно свободная.
ent-CP14ClothingShirtCottonBlue = хлопковая синяя рубаха
.desc = { ent-CP14ClothingShirtCottonBlue.desc }
@@ -147,6 +157,12 @@ ent-CP14ClothingShirtCottonYellow = хлопковая желтая
ent-CP14ClothingShirtSteampunk = укрепленная латунью рубашка
.desc = Белая рубашка, укрепленная латунными вставками.
ent-CP14ClothingShirtMercenary = рубашка наемника
.desc = Пестрая рубашка наемника.
ent-CP14ClothingShirtYellowWizard = yellow wizard shirt
.desc = A loose magician's shirt, comfortable and nice looking.
ent-CP14ClothingShoesBlack = простые черные ботинки
.desc = Влагу они не удержат, но это лучше чем ходить босиком.
@@ -171,21 +187,16 @@ ent-CP14SpawnPointAdventurer = авантюрист
ent-CP14SpawnPointAlchemist = алхимик
ent-CP14SpawnPointInnkeeper = трактирщик
ent-CP14SpawnPointCaptain = капитан
ent-CP14ConstrainedSpawnerBase = None
.desc = lol
ent-CP14SpawnPointGuardCommander = командир стражи
ent-CP14ConstrainedSpawnerXeno = xeno constrained spawner
.desc = { ent-CP14ConstrainedSpawnerBase.desc }
ent-CP14SpawnPointHouseKeeper = завхоз
ent-CP14RandomSpawnerBattleRoyaleLootWeapon = Loot
.desc = lol
.suffix = Weapon
ent-CP14RandomSpawnerBattleRoyaleLootTools = Loot
.desc = lol
.suffix = Tools
ent-CP14ConstrainedSpawnerBase = Неа
.desc = лол
ent-CP14RandomSpawnerGatherAgaricShroom = спавнер мухоморов
@@ -201,6 +212,10 @@ ent-CP14BiomeSpawnerCave = { ent-CP14BaseBiomeSpawner }
.desc = { ent-CP14BaseBiomeSpawner.desc }
.suffix = Пещеры
ent-CP14BiomeSpawnerForest = { ent-CP14BaseBiomeSpawner }
.desc = { ent-CP14BaseBiomeSpawner.desc }
.suffix = Лес
ent-CP14MobDwarf = мистер Дварф
.desc = { ent-CP14BaseMobDwarf.desc }
@@ -235,6 +250,86 @@ ent-CP14OreIron = железная руда
ent-CP14OreGold = золотая руда
.desc = Кусочек мягкого, чистого золота.
ent-CP14GreenBottle = Зеленая бутылка
.desc = Зеленая бутылка, идеально подходит для пива.
.suffix = Пустая
ent-CP14BlueVial = Синий флакон
.desc = Синий флакон, идеально подходит для рома.
.suffix = Пустой
ent-CP14GreenVial = Зеленый флакон
.desc = Маленький зеленый флакон.
.suffix = Пустой
ent-CP14OrangeBottle = Оранжевая бутылка
.desc = Просто оранжевая бутылка.
.suffix = Пустая
ent-CP14RedBottle = Красная бутылка
.desc = Красная бутылка, идеально подходит для вина.
.suffix = Пустая
ent-CP14MetalBeerMug = Металлическая кружка
.desc = Самая обычная металлическая кружка.
ent-CP14WoodenBeerMug = Деревянная кружка
.desc = Деревянная кружка для пива.
ent-CP14SteelBeerMug = Пивная кружка
.desc = Деревянная кружка с железными вкраплениями.
ent-CP14SteelWoodBeerMug = { ent-CP14SteelBeerMug }
.desc = { ent-CP14SteelBeerMug.desc }
ent-CP14FoodCheeseWheel = колесо сыра
.desc = Большое колесо мягкого, ароматного сыра.
ent-CP14FoodCheesePart = сыр
.desc = Треугольник мягкого, ароматного сыра.
ent-CP14FoodCheeseSlice = долька сыра
.desc = Тонкий ломтик вкусно пахнущего сыра
ent-CP14FoodDoughLarge = большой кусок теста
.desc = Идеальный ингредиент для любого мучного изделия. Остается только придать ему форму.
ent-CP14FoodDoughMedium = средний кусок теста
.desc = { ent-CP14FoodDoughLarge.desc }
ent-CP14FoodDoughMediumFlat = раскатанное тесто
.desc = { ent-CP14FoodDoughMedium.desc }
ent-CP14Eggshells = яичная скорлупа
.desc = Ты ходишь по ним, приятель.
ent-CP14FoodEgg = яйцо
.desc = { ent-CP14FoodEggBase.desc }
ent-CP14FoodMeatSliceBase = { ent-CP14FoodMeatBase }
.desc = { ent-CP14FoodMeatBase.desc }
ent-CP14FoodMeatLamb = сырая баранина
.desc = Сочный стейк из баранины
ent-CP14FoodMeatLambSlice = кусочки мяса
.desc = Succulent lamb steak
ent-CP14FoodMeatLambCutlet = котлета из баранины
.desc = Результат смешивания нарезанной баранины и яйца - сырая круглая котлета.
ent-CP14FoodCabbage = капуста
.desc = Зеленый съедобный шарик
ent-CP14FoodCabbageSlice = лист капусты
.desc = Время делать салатики.
ent-CP14FoodPumpkin = тыква
.desc = Большая, клевая тыква.
ent-CP14FoodPumpkinSlice = кусок тыквы
.desc = Это тыква!
ent-CP14CopperCoin = медная корона
.desc = Минимальная экономическая единица на просторах Эберрона. Является одной десятой серебряного соверена.
.suffix = 10 монет
@@ -358,6 +453,9 @@ ent-CP14Nail110 = { ent-CP14Nail1 }
.desc = { ent-CP14Nail1.desc }
.suffix = 10
ent-CP14FloraMaterial = растительный материал
.desc = Органический материал, используемый в лечебных или строительных целях.
ent-CP14Cauldron = котел
.desc = Тяжелый котелок. Он не такой громоздкий, как чан, но его можно нести в руках.
@@ -406,7 +504,7 @@ ent-CP14VialSmallLumiMushroom = { ent-CP14VialTiny }
ent-CP14MeltingMoldBase = форма для выплавки
.desc = Деревянная доска для заливки металла в необходимые формы.
ent-CP14MeltingMoldBlank = форма для выплавки заготовок
ent-CP14MeltingMoldBlank = пустая форма для выплавки
.desc = Пустая форма для литья металла. Вы можете вырезать в ней любую нужную форму на столе для резки деталей.
ent-CP14MeltingMoldDaggers = форма для кинжала
@@ -454,24 +552,17 @@ ent-CP14QuartzShard = грубый кварц
ent-CP14LumiMushroom = люмигриб
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
ent-CP14EnergyCrystalBase = None
.desc = Shards of one of the Khyber dragon, used to bind and control elemental energy.
ent-CP14SeedWheat = семена пшеницы
.desc = Маленькие семена пшеницы. Что вы будете с ними делать? Размолоть в муку или посадить снова?
ent-CP14EnergyCrystalSmall = small Khyber shard
.desc = { ent-CP14EnergyCrystalBase.desc }
.suffix = Full
ent-CP14SeedPumpkin = семена тыквы
.desc = Тыквенные семечки. Кажется, какая-то тыква была жестоко выпотрошена и разделана.
ent-CP14EnergyCrystalSmallEmpty = { ent-CP14EnergyCrystalSmall }
.desc = { ent-CP14EnergyCrystalSmall.desc }
.suffix = Empty
ent-CP14SeedCabbage = семена капусты
.desc = О нет! Моя капуста!
ent-CP14EnergyCrystalMedium = Khyber shard
.desc = { ent-CP14EnergyCrystalBase.desc }
.suffix = Full
ent-CP14EnergyCrystalMediumEmpty = { ent-CP14EnergyCrystalMedium }
.desc = { ent-CP14EnergyCrystalMedium.desc }
.suffix = Empty
ent-CP14SeedTomato = семена помидоров
.desc = Похоже на порошок! Они такие маленькие, эти семена.
ent-CP14AuraScanner = сканер ауры
.desc = Сканирует полярность потоков элементальной энергии в этом месте.
@@ -589,6 +680,9 @@ ent-CP14WoodDoorTavern = { ent-CP14BaseWoodDoor }
.desc = { ent-CP14BaseWoodDoor.desc }
.suffix = Таверна
ent-CP14FloorWater = вода
.desc = Впадина с обычной водой. Достаточна чиста для употребления.
ent-CP14Chasm = бездна
.desc = И вы не видите ее дна...
@@ -694,9 +788,6 @@ ent-CP14CrystalDiamondsBig = { ent-CP14CrystalBase }
.desc = { ent-CP14CrystalBase.desc }
.suffix = White, Big
ent-CP14FloorWater = вода
.desc = Впадина с обычной водой. Достаточна чиста для употребления.
ent-CP14HighBush = высокий куст
.desc = Высокие и густые заросли. Возможно кто-то наблюдает за тобой из них.
@@ -797,6 +888,9 @@ ent-CP14Bonfire = костёр
ent-CP14ChairWooden = деревянный стул
.desc = Сколочен из самых обычных досок. Просто и эффективно!
ent-CP14CuttingBoard = Разделочная доска
.desc = Поможет вам приготовить еду.
ent-CP14ClosetBase = шкаф
.desc = Обычный, ветхий шкаф.
@@ -832,6 +926,9 @@ ent-CP14Workbench = верстак
ent-CP14WorkbenchMeltingMolds = стол для резки форм
.desc = Специализированный стол, позволяющий вырезать формы для выплавки металла.
ent-CP14WorkbenchCooking = кухонный стол
.desc = Время готовить.
ent-CP14FrameWooden = каркас деревянной стены
.desc = Деревянный каркас для деревянных стен любых видов.
@@ -847,9 +944,8 @@ ent-CP14AlchemyNormalizer = нормализатор растворов
ent-CP14BaseVat = чан
.desc = Очень большой чан для хранения огромного количества жидкости. Тяжелый, неудобный для переноски.
ent-CP14PloughedGround = вскопанная почва
ent-CP14SeedbedDefault = лоток для семян
ent-CP14SeedbedWooden = грядка
.desc = Деревянная кадка с кучей земли, приспособленная для выращивания растений.
ent-CP14GatherableWildBase = { ent-CP14GatherableBase }
.desc = { ent-CP14GatherableBase.desc }
@@ -857,12 +953,6 @@ ent-CP14GatherableWildBase = { ent-CP14GatherableBase }
ent-CP14GatherablePlantBase = { ent-CP14GatherableBase }
.desc = { ent-CP14GatherableBase.desc }
ent-CP14PlantWheat = пшеница
.desc = Наиболее популярная культура. Непритязательна, и открывает дорогу к разнообразию мучных изделий.
ent-CP14PlantWheatDeath = мертвая пшеница
.desc = Грустное зрелище потерянной еды.
ent-CP14GatherableBloodgrass = кровьтрава
.desc = Самое скучное и распространенное растение, которое можно встретить в природе, - это темно-коричневая трава.
.suffix = Gatherable
@@ -883,6 +973,12 @@ ent-CP14GatherableLumiMushroom = люмигрибы
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
.suffix = Gatherable
ent-CP14PlantWheat = пшеница
.desc = Наиболее популярная культура. Непритязательна, и открывает дорогу к разнообразию мучных изделий.
ent-CP14PlantWheatDeath = мертвая пшеница
.desc = Грустное зрелище потерянной еды.
ent-CP14ElementalReactor = elemental reactor
.desc = A work of art created by the dwarves of Zilagro and House Lyrandar, controlling the fire elemental and allowing it to produce vast amounts of energy.
@@ -948,10 +1044,14 @@ ent-CP14IronGrilleTJunction = { ent-CP14IronGrilleBase }
ent-CP14IronGrilleGate = ворота в железной решетке
.desc = Представляете ли вы, что ждет вас за этими воротами? Это может быть как туалет, так и роскошный особняк.
ent-CP14IronGrilleGateLockedTavern = { ent-CP14IronGrilleGate }
.desc = { ent-CP14IronGrilleGate.desc }
.suffix = Таверна, закрыто
ent-CP14WallStone = камень
.desc = Природная стена из цельного камня. В ней ощущается холод пещеры.
ent-CP14WallDirt = земляной холм
ent-CP14WallDirt = земляная стена
.desc = Высокая куча земли. Можно ли построить из нее дом?
ent-CP14WallStoneGoldOre = { ent-CP14WallStone }
@@ -1022,6 +1122,9 @@ ent-CP14FenceWoodSmallTJunction = { ent-CP14BaseFenceWoodSmall }
ent-CP14FenceWoodSmallGate = ворота в деревянном заборе
.desc = Представляете ли вы, что ждет вас за этими воротами? Это может быть как туалет, так и роскошный особняк.
ent-CP14WindowDirectional = направленное окно
.desc = Не заляпайте стекло.
ent-CP14WindowStoneBrick = окно в стене из каменного кирпича
.desc = Каменная кирпичная стена, и проделанным в ней стеклянным окном.
@@ -1074,47 +1177,12 @@ ent-CP14CardboardWall = стена из картона
ent-CPBaseSharpeningStoneStructure = стационарный точильный камень
.desc = прочный, долговечный точильный камень, способный затачивать оружие без особого вреда для него.
ent-CP14GreenBottle = Зеленая бутылка
.desc = Зеленая бутылка, идеально подходит для пива.
.suffix = Пустая
ent-CP14BlueVial = Синий флакон
.desc = Синий флакон, идеально подходит для рома.
.suffix = Пустой
ent-CP14GreenVial = Зеленый флакон
.desc = Маленький зеленый флакон.
.suffix = Пустой
ent-CP14OrangeBottle = Оранжевая бутылка
.desc = Просто оранжевая бутылка.
.suffix = Пустая
ent-CP14RedBottle = Красная бутылка
.desc = Красная бутылка, идеально подходит для вина.
.suffix = Пустая
ent-CP14MetalBeerMug = Металлическая кружка
.desc = Самая обычная металлическая кружка.
ent-CP14WoodenBeerMug = Деревянная кружка
.desc = Деревянная кружка для пива.
ent-CP14SteelBeerMug = Пивная кружка
.desc = Деревянная кружка с железными вкраплениями.
ent-CP14SteelWoodBeerMug = { ent-CP14SteelBeerMug }
.desc = { ent-CP14SteelBeerMug.desc }
ent-CP14RawFoodMeat = Сырая баранина
.desc = Пахнет странно, но выглядит как обычное мясо...
ent-CP14CookedFoodMeat = Стейк из баранины
.desc = Зажаренный кусок мяса. Запах первобытный.
ent-CP14CuttingBoard = Разделочная доска
.desc = Поможет вам приготовить еду.
ent-CP14ActionSpellCureWounds = Лечение ран
.desc = Вы касаетесь существа, исцеляя его тело от физических повреждений.
@@ -1159,3 +1227,4 @@ ent-CP14ActionSpellSphereOfLight = Сфера света
ent-CP14SphereOfLight = Сфера света
.desc = Сгусток яркого света в форме сферы.

View File

@@ -25,7 +25,6 @@ entities:
name: Map Entity
- type: Transform
- type: Map
mapPaused: True
- type: PhysicsMap
- type: GridTree
- type: MovedGrids

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

@@ -14,6 +14,11 @@
drawdepth: BelowFloor
sprite: _CP14/Markers/biome.rsi
- type: CP14BiomeSpawner
deleteBlacklist:
components:
- Portal
- MindContainer
- CP14WorldBounding
- type: PlacementReplacement
key: CP14BiomeSpawner

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:
CP14PlantCabbageDeath:
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:
CP14PlantPumpkinDeath:
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

@@ -44,6 +44,9 @@
CP14PlantWheatDeath:
min: 1
max: 1
- type: CP14WaveShader
speed: 2.8
dis: 4
- type: entity
id: CP14PlantWheatDeath

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

@@ -1,6 +1,7 @@
- type: entity
id: CP14DungeonEntrance
name: dungeon entrance
noSpawn: true
description: The dark depths of the underworld are calling you.
placement:
mode: SnapgridCenter
@@ -31,12 +32,12 @@
- type: Portal
canTeleportToOtherMaps: true
randomTeleport: false
- type: CP14AutoLink
- type: entity
parent: CP14DungeonEntrance
id: CP14DungeonExit
name: dungeon exit
noSpawn: true
description: A way out of the dark underworld into the overworld.
components:
- type: Sprite
@@ -50,4 +51,19 @@
radius: 3
energy: 1
netsync: false
- type: CP14AutoLink
- type: entity
parent: CP14DungeonEntrance
id: CP14DungeonEntranceAutoLink
components:
- type: CP14ZLevelAutoPortal
zLevelOffset: -1 # Go into deep
otherSideProto: CP14DungeonExit
- type: entity
parent: CP14DungeonExit
id: CP14DungeonExitAutoLink
components:
- type: CP14ZLevelAutoPortal
zLevelOffset: 1 # Go onto surface
otherSideProto: CP14DungeonEntrance

View File

@@ -24,9 +24,11 @@
AlchemyTest:
stationProto: StandardStationArena
components:
- type: CP14StationAdditionalMap
mapPaths:
- /Maps/_CP14/alchemy_test_layer2.yml
- type: CP14StationZLevels
defaultMapLevel: 0
levels:
1:
path: /Maps/_CP14/alchemy_test_layer2.yml
- type: StationNameSetup
mapNameTemplate: "Alchemy test"
- type: StationJobs
@@ -78,4 +80,11 @@
CP14GuardCommander: [1, 1]
CP14HouseKeeper: [1, 1]
- type: CP14StationExpeditionTarget
shuttlePath: /Maps/_CP14/Shuttles/test-ship.yml
shuttlePath: /Maps/_CP14/Shuttles/test-ship.yml
- type: CP14StationZLevels
defaultMapLevel: 0
levels:
-1:
path: /Maps/_CP14/alchemy_test_layer2.yml
-2:
path: /Maps/_CP14/battle_royale.yml

View File

@@ -27,3 +27,8 @@
- type: StationJobs
availableJobs:
CP14Adventurer: [ -1, -1 ]
- type: CP14StationZLevels
defaultMapLevel: 0
levels:
-1:
path: /Maps/_CP14/alchemy_test_layer2.yml

View File

@@ -0,0 +1,9 @@
- type: biomeMarkerLayer
id: CP14OreGold
entityMask:
CP14WallStone: CP14PlantPumpkinDeath
maxCount: 30
minGroupSize: 10
maxGroupSize: 15
radius: 4

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

View File

@@ -10,3 +10,7 @@
- type: lobbyBackground
id: Tiefling
background: /Textures/_CP14/LobbyScreens/tiefling.webp
- type: lobbyBackground
id: LittleAdventure
background: /Textures/_CP14/LobbyScreens/little_adventure.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,2 @@
sample:
filter: true

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,14 @@ CP14Shovel: CP14BaseShovel
CP14Hoe: CP14BaseHoe
CP14WallStoneSilverOre: CP14WallStoneGoldOre
# 2024-08-22
CP14PloughedGround: CP14SeedbedWooden
CP14SeedbedDefault: CP14SeedbedWooden
# 2024-08-24
CP14DungeonEntrance: CP14DungeonEntranceAutoLink
CP14DungeonExit: CP14DungeonExitAutoLink
# <---> CrystallPunk migration zone end