Compare commits

..

37 Commits

Author SHA1 Message Date
Deserty0
6575aa19c4 Revert "Try to predict"
This reverts commit 48a5620099.
2025-09-04 02:35:12 +10:00
Deserty0
7ac03a54e4 fix 2025-09-04 01:47:14 +10:00
Deserty0
874c524538 Update Program.OpenGL.cs 2025-09-04 01:18:13 +10:00
Deserty0
8623324fab 123 2025-09-04 01:10:03 +10:00
Ed
80e429c8fa Merge branch 'master' into fishing 2025-04-11 19:53:22 +03:00
Ed
355fc410a3 Another Try (#1167)
* tick

* Update simple.yml

* revert deep

* revert straw

* revert surko

* revert fix

* revert beards

* Revert "revert surko"

This reverts commit 9ea597414a.

* Revert "revert fix"

This reverts commit 910da9d6e6.

* Revert "revert beards"

This reverts commit a941a41788.

* Revert "revert deep"

This reverts commit 8dd25a4b96.

* Reapply "revert deep"

This reverts commit cbde613021.
2025-04-11 19:53:00 +03:00
Ed
948d711336 Bunch of bugfixes (#1165)
* watcher fix

* fix #1162

* fix #1111

* make watcher move smoothly

* s

* Delete test_xeno.yml
2025-04-10 22:28:50 +03:00
github-actions[bot]
de5ec12791 @noverd has signed the CLA in crystallpunk-14/crystall-punk-14#1164 2025-04-10 08:40:55 +00:00
Ed
41b84f43eb Delete Factoria (#1156)
* bue

* Update PostMapInitTest.cs
2025-04-10 11:10:04 +03:00
Ed
d96a4b6638 Merge branch 'master' into fishing 2025-04-09 16:49:07 +03:00
Ed
0decd375e4 Birch tree (#1154)
* birch

* wooden birch log and planks

* birch tile crafting

* add birch to worldgen

* Update grasslands.yml

* wooden planks (any)

* universal wood crafting

* birch wall
2025-04-09 15:54:38 +03:00
creamybag
d201dc0695 Beards (#1153)
* beards

* fix

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2025-04-08 17:40:01 +03:00
Ed
5b3688fc89 deep Comoss ocean (#1150)
* deep Comoss ocean

* Update migration.yml
2025-04-08 17:39:23 +03:00
Ed
f7b5e40f23 fix master (#1152) 2025-04-08 17:24:56 +03:00
Viator-MV
d0a185cca0 Empties (#1151)
добавлены пустые пресеты карт 2 биомов со всеми нужными компонентами
2025-04-08 16:04:45 +03:00
Ed
f7f7feb837 Marble update (#1146)
* all marble resprite

* Update meta.json

* marble table

* marble natural wall

* marble cave floor

* marble material

* marble small floor bricks

* marble in demiplanes
2025-04-07 21:27:20 +03:00
creamybag
06863d9986 StrawHat (#1132) 2025-04-07 17:15:56 +03:00
creamybag
d5ce5d9f37 Syurko update (#1148)
* Syurko\

* Translation editsЭ

* fix
2025-04-07 17:15:21 +03:00
Ed
56299c62d6 fix 2025-04-07 01:36:55 +03:00
Ed
e77645d9d6 old tiles YES (#1144) 2025-04-07 01:34:45 +03:00
Ed
d81dbe4c20 Update tiefling.yml 2025-04-06 20:32:52 +03:00
Nim
d3be599ccb carcat tail (#1141) 2025-04-06 17:26:36 +03:00
Ed
4efbb6f307 Update sell.yml 2025-04-06 15:04:18 +03:00
Ed
b4ab1a714c Update CP14SharedFarmingSystem.Interactions.cs 2025-04-06 14:05:04 +03:00
Ed
b04b95cae4 farm buff 2025-04-06 13:59:50 +03:00
Viator-MV
32b077af63 update (#1137) 2025-04-05 14:42:51 +03:00
Ed
52c06249ea f (#1136) 2025-04-05 13:46:23 +03:00
Ed
bb2fbd1baf Update secret_weights.yml 2025-04-05 12:43:46 +03:00
Tornado Tech
48a5620099 Try to predict 2025-01-17 16:22:37 +10:00
Tornado Tech
ad70108cdf Separated rods to parts 2024-12-17 21:34:39 +10:00
Tornado Tech
97d08097fe Fix again 2024-12-15 02:21:40 +10:00
Tornado Tech
961f365f52 Fix 2024-12-15 01:16:29 +10:00
Tornado Tech
78c711950a FUUUUCK 2024-12-15 00:40:43 +10:00
Tornado Tech
c0221b1445 Finaly sprites 2024-12-14 17:18:39 +10:00
Tornado Tech
dbcf17bab2 Updated system 2024-12-09 02:29:33 +10:00
Tornado Tech
a88e0ee00f Updated fishing process 2024-12-03 01:17:00 +10:00
Tornado Tech
ba60bc7176 Fishing init without sprites 2024-12-01 04:28:25 +10:00
247 changed files with 5170 additions and 116583 deletions

View File

@@ -0,0 +1,149 @@
using System.Numerics;
using Content.Client.Resources;
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Prototypes;
using Content.Shared._CP14.Fishing.Systems;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.ResourceManagement;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
namespace Content.Client._CP14.Fishing;
public sealed class CP14FishingOverlay : Overlay
{
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly IEntityManager _entity = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
private readonly SpriteSystem _sprite;
private readonly TransformSystem _transform;
private readonly CP14SharedFishingProcessSystem _sharedFishingProcess;
private Texture _backgroundTexture = default!;
private Texture _handleTopTexture = default!;
private Texture _handleMiddleTexture = default!;
private Texture _handleBottomTexture = default!;
private Texture _lootTexture = default!;
private Vector2 _backgroundOffset;
private Vector2 _backgroundHandleOffset;
private Vector2 _backgroundHandleSize;
private Vector2 _progressOffset;
private Vector2 _progressSize;
private EntityUid _process = EntityUid.Invalid;
public override OverlaySpace Space => OverlaySpace.WorldSpace;
public CP14FishingOverlay()
{
IoCManager.InjectDependencies(this);
_sprite = _entity.System<SpriteSystem>();
_transform = _entity.System<TransformSystem>();
_sharedFishingProcess = _entity.System<CP14SharedFishingProcessSystem>();
}
protected override void Draw(in OverlayDrawArgs args)
{
if (_player.LocalEntity is not { } localEntity)
return;
if (!_sharedFishingProcess.TryGetByUser(localEntity, out var fishingProcess))
return;
// Refresh the texture cache, with a new fishing process
if (_process != fishingProcess.Value.Owner)
{
_process = fishingProcess.Value.Owner;
UpdateCachedStyleSheet(_sharedFishingProcess.GetStyle(fishingProcess.Value));
var prototype = _prototype.Index(fishingProcess.Value.Comp.LootProtoId);
var iconPath = CP14FishingIconComponent.DefaultTexturePath;
if (prototype.Components.TryGetComponent(_factory.GetComponentName(typeof(CP14FishingIconComponent)), out var iconComponent))
{
var comp = (CP14FishingIconComponent) iconComponent;
iconPath = comp.TexturePath;
}
_lootTexture = _resourceCache.GetTexture(iconPath);
}
// Getting the position of the player we will be working from
var worldPosition = _transform.GetWorldPosition(localEntity);
// Calculate the shift of the player relative to the bottom of the coordinates
var playerOffset = fishingProcess.Value.Comp.PlayerPositionNormalized * _backgroundHandleSize;
var playerHalfSize = fishingProcess.Value.Comp.PlayerHalfSizeNormalized * _backgroundHandleSize;
var lootOffset = fishingProcess.Value.Comp.LootPositionNormalized * _backgroundHandleSize + Vector2.UnitX * _backgroundHandleSize.X / 2;
DrawBackground(args.WorldHandle, worldPosition - _backgroundOffset);
DrawProgress(args.WorldHandle, worldPosition - _backgroundOffset + _progressOffset, _progressSize, fishingProcess.Value.Comp.Progress);
DrawHandle(args.WorldHandle, worldPosition - _backgroundOffset + _backgroundHandleOffset + playerOffset, playerHalfSize);
DrawLoot(args.WorldHandle, worldPosition - _backgroundOffset + _backgroundHandleOffset + lootOffset);
}
private void DrawBackground(DrawingHandleWorld handle, Vector2 position)
{
handle.DrawTexture(_backgroundTexture, position);
}
private void DrawProgress(DrawingHandleWorld handle, Vector2 position, Vector2 size, float progress)
{
var vectorA = position;
var vectorB = position + new Vector2(size.X, size.Y * progress);
var box = new Box2(vectorA, vectorB);
handle.DrawRect(box, Color.Aqua);
}
private void DrawHandle(DrawingHandleWorld handle, Vector2 position, Vector2 halfSize)
{
var cursor = position - halfSize;
// Bottom
handle.DrawTexture(_handleBottomTexture, cursor);
cursor += new Vector2(0, _handleBottomTexture.Height / 32f);
// Middle
while (cursor.Y < position.Y + halfSize.Y - _handleTopTexture.Height / 32f)
{
handle.DrawTexture(_handleMiddleTexture, cursor);
cursor += new Vector2(0, _handleMiddleTexture.Height / 32f);
}
// Front
handle.DrawTexture(_handleTopTexture, cursor);
}
private void DrawLoot(DrawingHandleWorld handle, Vector2 position)
{
handle.DrawTexture(_lootTexture, position - _lootTexture.Size / 64f);
}
private void UpdateCachedStyleSheet(CP14FishingProcessStyleSheetPrototype styleSheet)
{
_backgroundTexture = _resourceCache.GetTexture(styleSheet.Background.Texture);
_handleTopTexture = _resourceCache.GetTexture(styleSheet.Handle.TopTexture);
_handleMiddleTexture = _resourceCache.GetTexture(styleSheet.Handle.MiddleTexture);
_handleBottomTexture = _resourceCache.GetTexture(styleSheet.Handle.BottomTexture);
_backgroundOffset = styleSheet.Background.Offset + Vector2.UnitX * _backgroundTexture.Width / 32f;
_backgroundHandleOffset = styleSheet.Background.HandleOffset;
_backgroundHandleSize = styleSheet.Background.HandleSize;
_progressOffset = styleSheet.Background.ProgressOffset;
_progressSize = styleSheet.Background.ProgressSize;
}
}

View File

@@ -0,0 +1,23 @@
using Content.Client.Overlays;
using Robust.Client.Graphics;
namespace Content.Client._CP14.Fishing;
public sealed class CP14FishingOverlaySystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlay = default!;
public override void Initialize()
{
base.Initialize();
_overlay.AddOverlay(new CP14FishingOverlay());
}
public override void Shutdown()
{
base.Shutdown();
_overlay.RemoveOverlay<StencilOverlay>();
}
}

View File

@@ -0,0 +1,5 @@
using Content.Shared._CP14.Fishing.Systems;
namespace Content.Client._CP14.Fishing;
public sealed class CP14FishingProcessSystem : CP14SharedFishingProcessSystem;

View File

@@ -0,0 +1,35 @@
using Content.Client.Hands.Systems;
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Systems;
using Robust.Client.GameObjects;
using Robust.Shared.Input;
using Robust.Shared.Timing;
namespace Content.Client._CP14.Fishing;
public sealed class CP14FishingRodSystem : CP14SharedFishingRodSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly InputSystem _input = default!;
[Dependency] private readonly HandsSystem _hands = default!;
public override void Update(float frameTime)
{
base.Update(frameTime);
if (!_timing.IsFirstTimePredicted)
return;
var handUid = _hands.GetActiveHandEntity();
if (!TryComp<CP14FishingRodComponent>(handUid, out var fishingRodComponent))
return;
var reelKey = _input.CmdStates.GetState(EngineKeyFunctions.UseSecondary) == BoundKeyState.Down;
if (fishingRodComponent.Reeling == reelKey)
return;
RaisePredictiveEvent(new RequestFishingRodReelMessage(reelKey));
}
}

View File

@@ -40,6 +40,7 @@ namespace Content.IntegrationTests.Tests
.Where(p => !pair.IsTestPrototype(p))
.Where(p => !p.Components.ContainsKey("MapGrid")) // This will smash stuff otherwise.
.Where(p => !p.Components.ContainsKey("RoomFill")) // This comp can delete all entities, and spawn others
.Where(p => !p.Components.ContainsKey("CP14BiomeSpawner")) // CP14 this component delete all entities on this tile
.Select(p => p.ID)
.ToList();
@@ -103,6 +104,7 @@ namespace Content.IntegrationTests.Tests
.Where(p => !pair.IsTestPrototype(p))
.Where(p => !p.Components.ContainsKey("MapGrid")) // This will smash stuff otherwise.
.Where(p => !p.Components.ContainsKey("RoomFill")) // This comp can delete all entities, and spawn others
.Where(p => !p.Components.ContainsKey("CP14BiomeSpawner")) // CP14 this component delete all entities on this tile
.Select(p => p.ID)
.ToList();
foreach (var protoId in protoIds)
@@ -344,6 +346,7 @@ namespace Content.IntegrationTests.Tests
"DebugExceptionStartup",
"GridFill",
"RoomFill",
"CP14BiomeSpawner", // CP14 this component delete all entities on this tile
"Map", // We aren't testing a map entity in this test
"MapGrid",
"Broadphase",

View File

@@ -70,7 +70,6 @@ namespace Content.IntegrationTests.Tests
"Dev",
"MeteorArena",
"Comoss",
"Factoria",
//CrystallEdge Map replacement end
};

View File

@@ -2,6 +2,7 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Content.Server.Construction.Components;
using Content.Shared._CP14.Workbench.Prototypes;
using Content.Shared.ActionBlocker;
using Content.Shared.Construction;
using Content.Shared.Construction.Prototypes;
@@ -236,6 +237,36 @@ namespace Content.Server.Construction
}
break;
//CP14 stack group support
case CP14StackGroupConstructionGraphStep stackGroupStep:
foreach (var entity in new HashSet<EntityUid>(EnumerateNearby(user)))
{
if (!stackGroupStep.EntityValid(entity, out var stack))
continue;
if (used.Contains(entity))
continue;
var splitStack = _stackSystem.Split(entity, stackGroupStep.Amount, user.ToCoordinates(0, 0), stack);
if (splitStack == null)
continue;
if (string.IsNullOrEmpty(stackGroupStep.Store))
{
if (!_container.Insert(splitStack.Value, container))
continue;
}
else if (!_container.Insert(splitStack.Value, GetContainer(stackGroupStep.Store)))
continue;
handled = true;
break;
}
break;
//CP14 stack group support end
}
if (handled == false)

View File

@@ -0,0 +1,121 @@
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Core;
using Content.Shared._CP14.Fishing.Core.Behaviors;
using Content.Shared._CP14.Fishing.Events;
using Content.Shared._CP14.Fishing.Systems;
using Content.Shared.Throwing;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server._CP14.Fishing;
public sealed class CP14FishingProcessSystem : CP14SharedFishingProcessSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly ThrowingSystem _throwing = default!;
[Dependency] private readonly CP14FishingPoolSystem _pool = default!;
/*
private readonly TimeSpan _dirtyDelay = TimeSpan.FromTicks(10000000000000);
private TimeSpan _dirtyDelayTime;
*/
public override void Update(float frameTime)
{
// DON'T CALL BASE METHOD!!!
var query = EntityQueryEnumerator<CP14FishingProcessComponent>();
while (query.MoveNext(out var entityUid, out var processComponent))
{
Update((entityUid, processComponent), frameTime * 2);
}
}
public override void FishPreUpdate(Entity<CP14FishingProcessComponent> process, Fish fish, float frameTime)
{
base.FishPreUpdate(process, fish, frameTime);
fish.UpdateSpeed(_random, _timing);
Dirty(process);
}
public override void UpdateDirty(Entity<CP14FishingProcessComponent> process)
{
base.UpdateDirty(process);
/*
if (_timing.CurTime < _dirtyDelayTime)
return;
_dirtyDelayTime = _timing.CurTime + _dirtyDelay;
Dirty(process);
*/
}
public override void Finish(Entity<CP14FishingProcessComponent> process, bool success)
{
base.Finish(process, success);
if (success)
{
Reward(process);
}
// Raising events before deletion
var ev = new CP14FishingFinishedEvent(success);
RaiseLocalEvent(process, ref ev, true);
// Either way, we need to delete the process
Stop(process);
}
public override void Reward(Entity<CP14FishingProcessComponent> process)
{
base.Reward(process);
var pool = GetPool(process);
var rod = GetRod(process);
var coordinates = Transform(pool).Coordinates;
var targetCoordinates = Transform(process.Comp.User!.Value).Coordinates;
var loot = Spawn(process.Comp.LootProtoId, coordinates);
_throwing.TryThrow(loot, targetCoordinates, rod.Comp.ThrowPower);
}
public Entity<CP14FishingProcessComponent> Start(
Entity<CP14FishingRodComponent> fishingRod,
Entity<CP14FishingPoolComponent> fishingPool,
EntityUid user)
{
var process = CreateProcess(fishingRod.Owner);
var loot = _pool.GetLootPrototypeId(fishingPool);
var style = GetStyle(fishingRod);
// Save entities
process.Comp.FishingRod = fishingRod;
process.Comp.FishingPool = fishingPool;
process.Comp.User = user;
process.Comp.Player = new Player(fishingRod.Comp.Size);
process.Comp.Fish = new Fish(new MixedBehavior(), _timing.CurTime + TimeSpan.FromSeconds(0.5f));
process.Comp.LootProtoId = loot;
process.Comp.StyleSheet = style;
Dirty(process);
Log.Debug($"Started new fishing process at {process}");
return process;
}
public Entity<CP14FishingProcessComponent> CreateProcess(EntityUid parent)
{
var entityUid = SpawnAttachedTo(null, Transform(parent).Coordinates);
var ensureComponent = AddComp<CP14FishingProcessComponent>(entityUid);
return (entityUid, ensureComponent);
}
}

View File

@@ -0,0 +1,31 @@
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Systems;
using Content.Shared.Interaction;
namespace Content.Server._CP14.Fishing;
public sealed class CP14FishingRodSystem : CP14SharedFishingRodSystem
{
[Dependency] private readonly CP14FishingProcessSystem _fishingProcess = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14FishingPoolComponent, AfterInteractUsingEvent>(OnAfterInteractUsing);
}
private void OnAfterInteractUsing(Entity<CP14FishingPoolComponent> entity, ref AfterInteractUsingEvent args)
{
if (args.Handled || !args.CanReach)
return;
if (!TryComp<CP14FishingRodComponent>(args.Used, out var fishingRodComponent))
return;
if (fishingRodComponent.Process is not null)
return;
fishingRodComponent.Process = _fishingProcess.Start((args.Used, fishingRodComponent), entity, args.User);
}
}

View File

@@ -3,6 +3,7 @@
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
using System.Numerics;
using Content.Server.DoAfter;
using Content.Server.Popups;
using Content.Server.Stack;
@@ -15,6 +16,7 @@ using Content.Shared.UserInterface;
using Robust.Server.Audio;
using Robust.Server.GameObjects;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server._CP14.Workbench;
@@ -29,6 +31,7 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
[Dependency] private readonly UserInterfaceSystem _userInterface = default!;
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IRobustRandom _random = default!;
private EntityQuery<MetaDataComponent> _metaQuery;
private EntityQuery<StackComponent> _stackQuery;
@@ -94,13 +97,13 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
foreach (var req in recipe.Requirements)
{
req.PostCraft(EntityManager, placedEntities, args.User);
req.PostCraft(EntityManager, _proto, placedEntities, args.User);
}
//We teleport result to workbench AFTER craft.
foreach (var resultEntity in resultEntities)
{
_transform.SetCoordinates(resultEntity, Transform(ent).Coordinates);
_transform.SetCoordinates(resultEntity, Transform(ent).Coordinates.Offset(new Vector2(_random.NextFloat(-0.25f, 0.25f), _random.NextFloat(-0.25f, 0.25f))));
}
UpdateUIRecipes(ent, args.User);

View File

@@ -1,4 +1,5 @@
using Robust.Shared.Serialization;
using Content.Shared._CP14.Workbench.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Validation;
@@ -46,6 +47,13 @@ namespace Content.Shared.Construction.Steps
return typeof(PartAssemblyConstructionGraphStep);
}
//CP14 stack group support
if (node.Has("stackGroup"))
{
return typeof(CP14StackGroupConstructionGraphStep);
}
//CP14 stack group support end
return null;
}

View File

@@ -204,11 +204,14 @@ public abstract partial class CP14SharedFarmingSystem
return false;
}
if (_map.GetAnchoredEntities((map.Value, gridComp), position).ToList().Count > 0)
foreach (var anchored in _map.GetAnchoredEntities((map.Value, gridComp), position))
{
if (user is not null && _timing.IsFirstTimePredicted && _net.IsClient)
_popup.PopupEntity(Loc.GetString("cp14-farming-soil-occupied"), user.Value, user.Value);
return false;
if (PlantQuery.TryComp(anchored, out var plant))
{
if (user is not null && _timing.IsFirstTimePredicted && _net.IsClient)
_popup.PopupEntity(Loc.GetString("cp14-farming-soil-occupied"), user.Value, user.Value);
return false;
}
}
return true;

View File

@@ -0,0 +1,13 @@
using Robust.Shared.GameStates;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.Fishing.Components;
[RegisterComponent, NetworkedComponent]
public sealed partial class CP14FishingIconComponent : Component
{
public static readonly ResPath DefaultTexturePath = new("/Textures/_CP14/Interface/Fishing/Icons/default.png");
[DataField]
public ResPath TexturePath = DefaultTexturePath;
}

View File

@@ -0,0 +1,12 @@
using Content.Shared._CP14.Fishing.Prototypes;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Components;
[RegisterComponent, NetworkedComponent]
public sealed partial class CP14FishingPoolComponent : Component
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public ProtoId<CP14FishingPoolLootTablePrototype> LootTable = "Default";
}

View File

@@ -0,0 +1,65 @@
using System.Numerics;
using Content.Shared._CP14.Fishing.Core;
using Content.Shared._CP14.Fishing.Prototypes;
using Content.Shared._CP14.Fishing.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Components;
[Access(typeof(CP14SharedFishingProcessSystem))]
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class CP14FishingProcessComponent : Component
{
/**
* Boxes
*/
[ViewVariables, AutoNetworkedField]
public Player? Player;
[ViewVariables, AutoNetworkedField]
public Fish? Fish;
/**
* Progress
*/
[ViewVariables, AutoNetworkedField]
public float Progress;
/**
* Saved entities
*/
[ViewVariables, AutoNetworkedField]
public EntityUid? FishingRod = null;
[ViewVariables, AutoNetworkedField]
public EntityUid? User = null;
[ViewVariables, AutoNetworkedField]
public EntityUid? FishingPool = null;
/**
* Loot
*/
[ViewVariables, AutoNetworkedField]
public EntProtoId LootProtoId;
/**
* Style
*/
[ViewVariables]
public CP14FishingProcessStyleSheetPrototype? StyleSheet;
/**
* Normalized
*/
public Vector2 LootPositionNormalized => Vector2.UnitY * Fish?.Position ?? Vector2.Zero;
public Vector2 PlayerPositionNormalized => Vector2.UnitY * Player?.Position ?? Vector2.Zero;
public Vector2 PlayerHalfSizeNormalized => Vector2.UnitY * Player?.HalfSize ?? Vector2.Zero;
}

View File

@@ -0,0 +1,45 @@
using Content.Shared._CP14.Fishing.Prototypes;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Components;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class CP14FishingRodComponent : Component
{
[ViewVariables]
public static readonly ProtoId<CP14FishingProcessStyleSheetPrototype> DefaultStyle = "Default";
[ViewVariables]
public EntityUid? Process;
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public bool Reeling;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float Speed = 0.1f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float Gravity = 0.075f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float MaxVelocity = 0.3f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float MinVelocity = -0.325f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float Bouncing = 0.07f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float Drag = 0.98f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float Size = 0.25f;
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public float ThrowPower = 10f;
[DataField, ViewVariables(VVAccess.ReadWrite)]
public ProtoId<CP14FishingProcessStyleSheetPrototype> Style = DefaultStyle;
}

View File

@@ -0,0 +1,18 @@
using JetBrains.Annotations;
using Robust.Shared.Random;
using Robust.Shared.Serialization;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
[ImplicitDataDefinitionForInheritors, MeansImplicitUse]
[Serializable, NetSerializable]
public abstract partial class Behavior
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float Speed { get; set; } = 0.25f;
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float Difficulty { get; set; } = 2f;
public abstract float CalculateSpeed(IRobustRandom random);
}

View File

@@ -0,0 +1,11 @@
using Robust.Shared.Random;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
public sealed partial class DartBehavior : Behavior
{
public override float CalculateSpeed(IRobustRandom random)
{
return Speed * (0.5f + random.NextFloat() * Difficulty);
}
}

View File

@@ -0,0 +1,11 @@
using Robust.Shared.Random;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
public sealed partial class FloaterBehaviour : Behavior
{
public override float CalculateSpeed(IRobustRandom random)
{
return Speed * (0.5f + random.NextFloat() * Difficulty);
}
}

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Random;
using Robust.Shared.Serialization;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
[Serializable, NetSerializable]
public sealed partial class MixedBehavior : Behavior
{
public override float CalculateSpeed(IRobustRandom random)
{
return Speed * (random.NextFloat() - 0.5f);
}
}

View File

@@ -0,0 +1,11 @@
using Robust.Shared.Random;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
public sealed partial class SinkerBehavior : Behavior
{
public override float CalculateSpeed(IRobustRandom random)
{
return Speed * (1.0f + random.NextFloat() * 0.5f);
}
}

View File

@@ -0,0 +1,11 @@
using Robust.Shared.Random;
namespace Content.Shared._CP14.Fishing.Core.Behaviors;
public sealed partial class SmoothBehavior : Behavior
{
public override float CalculateSpeed(IRobustRandom random)
{
return Speed * (0.5f + random.NextFloat() * Difficulty);
}
}

View File

@@ -0,0 +1,49 @@
using Content.Shared._CP14.Fishing.Core.Behaviors;
using Robust.Shared.Random;
using Robust.Shared.Serialization;
using Robust.Shared.Timing;
namespace Content.Shared._CP14.Fishing.Core;
[Serializable, NetSerializable]
public sealed class Fish
{
private const float MaxPosition = 1f;
private const float MinPosition = 0f;
[ViewVariables(VVAccess.ReadWrite)]
public float Position { get; private set; }
[ViewVariables(VVAccess.ReadWrite)]
private readonly Behavior _behavior;
[ViewVariables(VVAccess.ReadWrite)]
private float _speed;
[ViewVariables(VVAccess.ReadWrite)]
private TimeSpan _updateSpeedTime;
public Fish(Behavior behavior, TimeSpan updateSpeedTime)
{
_behavior = behavior;
_updateSpeedTime = updateSpeedTime;
}
public void Update(float frameTime)
{
// Update position
Position += _speed * frameTime;
// Clamp position
Position = Math.Clamp(Position, MinPosition, MaxPosition);
}
public void UpdateSpeed(IRobustRandom random, IGameTiming timing)
{
if (_updateSpeedTime > timing.CurTime)
return;
_speed = _behavior.CalculateSpeed(random);
_updateSpeedTime = timing.CurTime + TimeSpan.FromSeconds(random.NextFloat(1.5f - 1f / _behavior.Difficulty, 2.5f - 1f / _behavior.Difficulty));
}
}

View File

@@ -0,0 +1,25 @@
using Robust.Shared.Serialization;
namespace Content.Shared._CP14.Fishing.Core;
[Serializable, NetSerializable]
public sealed class Player
{
[ViewVariables(VVAccess.ReadWrite)]
public float Size;
[ViewVariables(VVAccess.ReadWrite)]
public float Position;
[ViewVariables(VVAccess.ReadWrite)]
public float Velocity;
[ViewVariables]
public float HalfSize => Size / 2f;
public Player(float size = 0.25f)
{
Size = size;
Position = HalfSize;
}
}

View File

@@ -0,0 +1,12 @@
namespace Content.Shared._CP14.Fishing.Events;
[ByRefEvent]
public readonly struct CP14FishingFinishedEvent
{
public readonly bool Success;
public CP14FishingFinishedEvent(bool success)
{
Success = success;
}
}

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Prototypes;
[Prototype("CP14FishingPoolLootTable")]
public sealed class CP14FishingPoolLootTablePrototype : IPrototype
{
[IdDataField]
public string ID { get; } = string.Empty;
[DataField]
public List<EntProtoId> Prototypes = [];
}

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Prototypes;
[Prototype("CP14FishingProcess")]
public sealed class CP14FishingProcessPrototype : IPrototype
{
[IdDataField]
public string ID { get; } = string.Empty;
[DataField, ViewVariables]
public EntProtoId LootProtoId;
}

View File

@@ -0,0 +1,127 @@
using System.Numerics;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Prototypes;
/// <summary>
/// Represents the style sheet for the fishing process, containing UI elements like background and handle configurations.
/// </summary>
[Prototype("CP14FishingProcessStyleSheet")]
public sealed partial class CP14FishingProcessStyleSheetPrototype : IPrototype
{
/// <summary>
/// Gets the unique identifier for this fishing process style sheet prototype.
/// </summary>
[IdDataField]
public string ID { get; } = string.Empty;
/// <summary>
/// Background settings for the fishing process UI.
/// </summary>
[DataField, ViewVariables]
public BackgroundData Background = new();
/// <summary>
/// Handle settings for the fishing process UI.
/// </summary>
[DataField, ViewVariables]
public HandleData Handle = new();
/// <summary>
/// Contains data related to the background of the fishing process UI.
/// </summary>
[DataDefinition, Serializable]
public sealed partial class BackgroundData
{
/// <summary>
/// Path to the background texture image.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public string Texture = "/Textures/_CP14/Interface/Fishing/background.png";
/// <summary>
/// Offset of the background texture in pixels.
/// </summary>
[DataField("offset"), ViewVariables(VVAccess.ReadWrite)]
public Vector2 OffsetPixels = new(10, 0);
/// <summary>
/// Offset of the handle in pixels.
/// </summary>
[DataField("handleOffset"), ViewVariables(VVAccess.ReadWrite)]
public Vector2 HandleOffsetPixels = new(16, 4);
/// <summary>
/// Size of the handle in pixels.
/// </summary>
[DataField("handleSize"), ViewVariables(VVAccess.ReadWrite)]
public Vector2 HandleSizePixels = new(149, 0);
/// <summary>
/// Offset of the progress bar in pixels.
/// </summary>
[DataField("progressOffset"), ViewVariables(VVAccess.ReadWrite)]
public Vector2 ProgressOffsetPixels = new(31, 3);
/// <summary>
/// Size of the progress bar in pixels.
/// </summary>
[DataField("progressSize"), ViewVariables(VVAccess.ReadWrite)]
public Vector2 ProgressSizePixels = new(4, 144);
/// <summary>
/// Gets the background offset in units (pixels divided by 32).
/// </summary>
[ViewVariables]
public Vector2 Offset => OffsetPixels / 32f;
/// <summary>
/// Gets the handle offset in units (pixels divided by 32).
/// </summary>
[ViewVariables]
public Vector2 HandleOffset => HandleOffsetPixels / 32f;
/// <summary>
/// Gets the progress bar offset in units (pixels divided by 32).
/// </summary>
[ViewVariables]
public Vector2 ProgressOffset => ProgressOffsetPixels / 32f;
/// <summary>
/// Gets the progress bar size in units (pixels divided by 32).
/// </summary>
[ViewVariables]
public Vector2 ProgressSize => ProgressSizePixels / 32f;
/// <summary>
/// Gets the handle size in units (pixels divided by 32).
/// </summary>
[ViewVariables]
public Vector2 HandleSize => HandleSizePixels / 32f;
}
/// <summary>
/// Contains data related to the handle elements of the fishing process UI.
/// </summary>
[DataDefinition, Serializable]
public sealed partial class HandleData
{
/// <summary>
/// Path to the texture for the top part of the handle.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public string TopTexture = "/Textures/_CP14/Interface/Fishing/Handle/top.png";
/// <summary>
/// Path to the texture for the middle part of the handle.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public string MiddleTexture = "/Textures/_CP14/Interface/Fishing/Handle/middle.png";
/// <summary>
/// Path to the texture for the bottom part of the handle.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public string BottomTexture = "/Textures/_CP14/Interface/Fishing/Handle/bottom.png";
}
}

View File

@@ -0,0 +1,19 @@
using Content.Shared._CP14.Fishing.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Shared._CP14.Fishing.Systems;
public sealed class CP14FishingPoolSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public EntProtoId GetLootPrototypeId(Entity<CP14FishingPoolComponent> pool)
{
var lootTable = _prototype.Index(pool.Comp.LootTable);
var loot = _random.Pick(lootTable.Prototypes);
return loot;
}
}

View File

@@ -0,0 +1,43 @@
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Core;
using Content.Shared._CP14.Fishing.Prototypes;
namespace Content.Shared._CP14.Fishing.Systems;
public abstract partial class CP14SharedFishingProcessSystem
{
protected Entity<CP14FishingRodComponent> GetRod(Entity<CP14FishingProcessComponent> process)
{
var entityUid = process.Comp.FishingRod!.Value;
var component = FishingRod.GetComponent(entityUid);
return (entityUid, component);
}
protected Entity<CP14FishingPoolComponent> GetPool(Entity<CP14FishingProcessComponent> process)
{
var entityUid = process.Comp.FishingPool!.Value;
var component = FishingPool.GetComponent(entityUid);
return (entityUid, component);
}
public CP14FishingProcessStyleSheetPrototype GetStyle(Entity<CP14FishingProcessComponent> process)
{
return GetStyle(GetRod(process));
}
public CP14FishingProcessStyleSheetPrototype GetStyle(Entity<CP14FishingRodComponent> fishingRod)
{
if (_prototype.TryIndex(fishingRod.Comp.Style, out var style))
return style;
Log.Error($"Failed to retrieve fishing rod style, {fishingRod.Comp.Style} not found. Reverting to default style.");
return _prototype.Index(CP14FishingRodComponent.DefaultStyle);
}
protected static bool Collide(Fish fish, Player player)
{
var playerMin = player.Position - player.HalfSize;
var playerMax = player.Position + player.HalfSize;
return fish.Position >= playerMin && fish.Position <= playerMax;
}
}

View File

@@ -0,0 +1,143 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared._CP14.Fishing.Components;
using Content.Shared._CP14.Fishing.Core;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Fishing.Systems;
public abstract partial class CP14SharedFishingProcessSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
protected EntityQuery<CP14FishingRodComponent> FishingRod;
protected EntityQuery<CP14FishingPoolComponent> FishingPool;
public override void Initialize()
{
base.Initialize();
FishingRod = GetEntityQuery<CP14FishingRodComponent>();
FishingPool = GetEntityQuery<CP14FishingPoolComponent>();
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CP14FishingProcessComponent>();
while (query.MoveNext(out var entityUid, out var processComponent))
{
Update((entityUid, processComponent), frameTime);
}
}
private void UpdateReeling(Entity<CP14FishingProcessComponent> process,
Entity<CP14FishingRodComponent> fishingRod,
float frameTime)
{
if (process.Comp.Player is not { } player)
return;
if (fishingRod.Comp.Reeling)
{
player.Velocity += fishingRod.Comp.Speed * frameTime;
return;
}
player.Velocity -= fishingRod.Comp.Gravity * frameTime;
}
private void UpdateVelocity(Entity<CP14FishingProcessComponent> process,
Entity<CP14FishingRodComponent> fishingRod)
{
if (process.Comp.Player is not { } player)
return;
player.Velocity *= fishingRod.Comp.Drag;
player.Velocity = Math.Clamp(player.Velocity,
fishingRod.Comp.MinVelocity,
fishingRod.Comp.MaxVelocity);
}
private void UpdatePosition(Entity<CP14FishingProcessComponent> process,
float frameTime)
{
if (process.Comp.Player is not { } player)
return;
player.Position += process.Comp.Player.Velocity * frameTime;
var halfSize = process.Comp.Player.HalfSize;
process.Comp.Player.Position = Math.Clamp(process.Comp.Player.Position, halfSize, 1 - halfSize);
}
public void Update(Entity<CP14FishingProcessComponent> process, float frameTime)
{
if (process.Comp.Player is not { } player)
return;
var fishingRod = GetRod(process);
UpdateReeling(process, fishingRod, frameTime);
UpdateVelocity(process, fishingRod);
UpdatePosition(process, frameTime);
if (process.Comp.Fish is { } fish)
{
FishPreUpdate(process, fish, frameTime);
fish.Update(frameTime);
var collides = Collide(fish, player);
var progressAdditive = collides ? 0.1f : -0.2f;
process.Comp.Progress = Math.Clamp(process.Comp.Progress + progressAdditive * frameTime, 0, 1);
}
UpdateDirty(process);
if (process.Comp.Progress is 1 or 0)
Finish(process, process.Comp.Progress is 1);
}
public virtual void FishPreUpdate(Entity<CP14FishingProcessComponent> process, Fish fish, float frameTime)
{
}
public virtual void UpdateDirty(Entity<CP14FishingProcessComponent> process)
{
}
public virtual void Finish(Entity<CP14FishingProcessComponent> process, bool success)
{
}
public void Stop(Entity<CP14FishingProcessComponent> process)
{
var rod = GetRod(process);
rod.Comp.Process = null;
Dirty(rod);
Del(process);
}
public virtual void Reward(Entity<CP14FishingProcessComponent> process)
{
}
public bool TryGetByUser(EntityUid userEntityUid, [NotNullWhen(true)] out Entity<CP14FishingProcessComponent>? process)
{
process = null;
var query = EntityQueryEnumerator<CP14FishingProcessComponent>();
while (query.MoveNext(out var entityUid, out var processComponent))
{
if (processComponent.User != userEntityUid)
continue;
process = (entityUid, processComponent);
return true;
}
return false;
}
}

View File

@@ -0,0 +1,51 @@
using Content.Shared._CP14.Fishing.Components;
using Content.Shared.Hands;
using Content.Shared.Hands.Components;
using Robust.Shared.Serialization;
namespace Content.Shared._CP14.Fishing.Systems;
public abstract class CP14SharedFishingRodSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeAllEvent<RequestFishingRodReelMessage>(OnReel);
SubscribeLocalEvent<CP14FishingRodComponent, HandDeselectedEvent>(OnDeselected);
}
private void OnReel(RequestFishingRodReelMessage msg, EntitySessionEventArgs args)
{
var player = args.SenderSession.AttachedEntity;
if (!TryComp<HandsComponent>(player, out var hands))
return;
if (!TryComp<CP14FishingRodComponent>(hands.ActiveHandEntity, out var fishingRodComponent))
return;
if (fishingRodComponent.Reeling == msg.Reeling)
return;
fishingRodComponent.Reeling = msg.Reeling;
Dirty(hands.ActiveHandEntity.Value, fishingRodComponent);
}
private void OnDeselected(Entity<CP14FishingRodComponent> entity, ref HandDeselectedEvent args)
{
entity.Comp.Reeling = false;
Dirty(entity);
}
[Serializable, NetSerializable]
protected sealed class RequestFishingRodReelMessage : EntityEventArgs
{
public bool Reeling;
public RequestFishingRodReelMessage(bool reeling)
{
Reeling = reeling;
}
}
}

View File

@@ -0,0 +1,65 @@
/*
* This file is sublicensed under MIT License
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Construction;
using Content.Shared.Construction.Steps;
using Content.Shared.Examine;
using Content.Shared.Stacks;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.Workbench.Prototypes;
[DataDefinition]
public sealed partial class CP14StackGroupConstructionGraphStep : EntityInsertConstructionGraphStep
{
[DataField]
public ProtoId<CP14StackGroupPrototype> StackGroup = default!;
[DataField]
public int Amount = 1;
public override void DoExamine(ExaminedEvent examinedEvent)
{
var group = IoCManager.Resolve<IPrototypeManager>().Index(StackGroup);
examinedEvent.PushMarkup(Loc.GetString("construction-insert-material-entity", ("amount", Amount), ("materialName", Loc.GetString(group.Name))));
}
public override bool EntityValid(EntityUid uid, IEntityManager entityManager, IComponentFactory compFactory)
{
var group = IoCManager.Resolve<IPrototypeManager>().Index(StackGroup);
return entityManager.TryGetComponent(uid, out StackComponent? stack) && group.Stacks.Contains(stack.StackTypeId) && stack.Count >= Amount;
}
public bool EntityValid(EntityUid entity, [NotNullWhen(true)] out StackComponent? stack)
{
var group = IoCManager.Resolve<IPrototypeManager>().Index(StackGroup);
if (IoCManager.Resolve<IEntityManager>().TryGetComponent(entity, out StackComponent? otherStack) && group.Stacks.Contains(otherStack.StackTypeId) && otherStack.Count >= Amount)
stack = otherStack;
else
stack = null;
return stack != null;
}
public override ConstructionGuideEntry GenerateGuideEntry()
{
var proto = IoCManager.Resolve<IPrototypeManager>();
var group = proto.Index(StackGroup);
var firstStack = group.Stacks.FirstOrNull();
return new ConstructionGuideEntry()
{
Localization = "construction-presenter-material-step",
Arguments = new (string, object)[]{("amount", Amount), ("material", Loc.GetString(group.Name))},
Icon = firstStack != null ? proto.Index(firstStack.Value).Icon : SpriteSpecifier.Invalid,
};
}
}

View File

@@ -0,0 +1,25 @@
/*
* This file is sublicensed under MIT License
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
using Content.Shared.Stacks;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Workbench.Prototypes;
/// <summary>
/// Allows you to group several different kinds of stacks into one group. Can be used for situations where different stacks are appropriate for a particular situation
/// </summary>
[Prototype("CP14StackGroup")]
public sealed class CP14StackGroupPrototype : IPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
[DataField(required: true)]
public LocId Name = default!;
[DataField(required: true)]
public List<ProtoId<StackPrototype>> Stacks = new();
}

View File

@@ -34,7 +34,7 @@ public sealed partial class SkillRequired : CP14WorkbenchCraftRequirement
return haveAllSkills;
}
public override void PostCraft(EntityManager entManager, HashSet<EntityUid> placedEntities, EntityUid user)
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet<EntityUid> placedEntities, EntityUid user)
{
}

View File

@@ -59,7 +59,7 @@ public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
return true;
}
public override void PostCraft(EntityManager entManager, HashSet<EntityUid> placedEntities, EntityUid user)
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet<EntityUid> placedEntities, EntityUid user)
{
var stackSystem = entManager.System<SharedStackSystem>();

View File

@@ -30,9 +30,7 @@ public sealed partial class ProtoIdResource : CP14WorkbenchCraftRequirement
return indexedIngredients.TryGetValue(ProtoId, out var availableQuantity) && availableQuantity >= Count;
}
public override void PostCraft(EntityManager entManager,
HashSet<EntityUid> placedEntities,
EntityUid user)
public override void PostCraft(EntityManager entManager,IPrototypeManager protoManager, HashSet<EntityUid> placedEntities, EntityUid user)
{
var requiredCount = Count;

View File

@@ -0,0 +1,97 @@
/*
* This file is sublicensed under MIT License
* https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
*/
using Content.Shared._CP14.Workbench.Prototypes;
using Content.Shared.Stacks;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.Workbench.Requirements;
public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
{
public override bool HideRecipe { get; set; } = false;
[DataField(required: true)]
public ProtoId<CP14StackGroupPrototype> Group;
[DataField]
public int Count = 1;
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities,
EntityUid user,
CP14WorkbenchRecipePrototype recipe)
{
if (!protoManager.TryIndex(Group, out var indexedGroup))
return false;
var count = 0;
foreach (var ent in placedEntities)
{
if (!entManager.TryGetComponent<StackComponent>(ent, out var stack))
continue;
if (!indexedGroup.Stacks.Contains(stack.StackTypeId))
continue;
count += stack.Count;
}
if (count < Count)
return false;
return true;
}
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities,
EntityUid user)
{
var stackSystem = entManager.System<SharedStackSystem>();
if (!protoManager.TryIndex(Group, out var indexedGroup))
return;
var requiredCount = Count;
foreach (var placedEntity in placedEntities)
{
if (!entManager.TryGetComponent<StackComponent>(placedEntity, out var stack))
continue;
if (!indexedGroup.Stacks.Contains(stack.StackTypeId))
continue;
var count = (int)MathF.Min(requiredCount, stack.Count);
if (stack.Count - count <= 0)
entManager.DeleteEntity(placedEntity);
else
stackSystem.SetCount(placedEntity, stack.Count - count, stack);
requiredCount -= count;
}
}
public override string GetRequirementTitle(IPrototypeManager protoManager)
{
var indexedGroup = protoManager.Index(Group);
return $"{Loc.GetString(indexedGroup.Name)} x{Count}";
}
public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager)
{
return null;
}
public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager)
{
var indexedGroup = protoManager.Index(Group);
return !protoManager.TryIndex(indexedGroup.Stacks.FirstOrNull(), out var indexedStack) ? null : indexedStack.Icon;
}
}

View File

@@ -44,7 +44,7 @@ public sealed partial class StackResource : CP14WorkbenchCraftRequirement
return true;
}
public override void PostCraft(EntityManager entManager,
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities,
EntityUid user)
{

View File

@@ -50,7 +50,7 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
return true;
}
public override void PostCraft(EntityManager entManager, HashSet<EntityUid> placedEntities, EntityUid user)
public override void PostCraft(EntityManager entManager, IPrototypeManager protoManager, HashSet<EntityUid> placedEntities, EntityUid user)
{
var tagSystem = entManager.System<TagSystem>();

View File

@@ -33,6 +33,7 @@ public abstract partial class CP14WorkbenchCraftRequirement
/// An event that is triggered after crafting. This is the place to put important things like removing items, spending stacks or other things.
/// </summary>
public abstract void PostCraft(EntityManager entManager,
IPrototypeManager protoManager,
HashSet<EntityUid> placedEntities,
EntityUid user);

View File

@@ -0,0 +1,2 @@
marking-CP14CarcatTail = Tail
marking-CP14CarcatTailFluffy = Fluffy Tail

View File

@@ -1,14 +1,34 @@
marking-CP14HumanFacialHair3Clock = 3 O'clock
marking-CP14HumanFacialHairAbe = Abe
marking-CP14HumanFacialHairDwarf = Dwarf
marking-CP14HumanFacialHairGoateeMush = Goatee
marking-CP14HumanFacialHairBriefs = Briefs
marking-CP14HumanFacialHairCircle = Circle
marking-CP14HumanFacialHairEspanol = Espanol
marking-CP14HumanFacialHairImperial = Imperial
marking-CP14HumanFacialHairMachete = Machete
marking-CP14HumanFacialHairMutton = Mutton
marking-CP14HumanFacialHairPigtail = Pigtail
marking-CP14HumanFacialHairSage = Sage
marking-CP14HumanFacialHairWatson = Watson
marking-CP14HumanFacialHairWhiskers = Whiskers
marking-CP14HumanFacialHair3Clock = morning stubble
marking-CP14HumanFacialHair5oclockmoustache = evening mustache
marking-CP14HumanFacialHair7oclock = dusk stubble
marking-CP14HumanFacialHair7oclockmoustache = dusk mustache
marking-CP14HumanFacialHairAbe = elderborn
marking-CP14HumanFacialHairChinlessbeard = chinless
marking-CP14HumanFacialHairDwarf = stone short
marking-CP14HumanFacialHairDwarf2 = forge battle
marking-CP14HumanFacialHairElvis = curled courtly
marking-CP14HumanFacialHairFiveoclock = noon shadow
marking-CP14HumanFacialHairFullbeard = full war
marking-CP14HumanFacialHairFumanchu = mustache of desert winds
marking-CP14HumanFacialHairGoateemush = mossy goat
marking-CP14HumanFacialHairGt = steel trim
marking-CP14HumanFacialHairHip = wildgrass
marking-CP14HumanFacialHairHogan = stormblade
marking-CP14HumanFacialHairJensen = northern hold
marking-CP14HumanFacialHairLongbeard = longhang
marking-CP14HumanFacialHairMartialartist = path of silence
marking-CP14HumanFacialHairMartialartist2 = path of the blade
marking-CP14HumanFacialHairMoonshiner = moon wanderer
marking-CP14HumanFacialHairMoustache = commoners mustache
marking-CP14HumanFacialHairMutton = road whiskers
marking-CP14HumanFacialHairMuttonmus = heralds whiskers
marking-CP14HumanFacialHairNeckbeard = shadow chin
marking-CP14HumanFacialHairPencilstache = line of the mustached
marking-CP14HumanFacialHairSelleck = hunters cluster
marking-CP14HumanFacialHairSideburn = side mark
marking-CP14HumanFacialHairSmallstache = pages mustache
marking-CP14HumanFacialHairVandyke = evening branch
marking-CP14HumanFacialHairVolaju = steppe fringe
marking-CP14HumanFacialHairWalrus = walrus storm
marking-CP14HumanFacialHairWatson = scholarly classic
marking-CP14HumanFacialHairWise = runebound

View File

@@ -1,6 +1,8 @@
cp14-stack-dirt-block = dirt blocks
cp14-stack-stone-block = stone blocks
cp14-stack-wood-planks = wooden planks
cp14-stack-marble-block = marble rocks
cp14-stack-wood-planks = oak planks
cp14-stack-wood-planks-birch = birch planks
cp14-stack-nails = nails
cp14-stack-cloth = rolls of fabric
cp14-stack-flora = tufts of grass
@@ -21,3 +23,5 @@ cp14-stack-wallpaper = rolls of wallpaper
cp14-stack-glass-sheet = glass
cp14-stack-ash-pile = pile of ashes
cp14-stack-group-wooden-planks-any = planks (any)

View File

@@ -22,6 +22,9 @@ ent-CP14WoodenChestFilledSmallHealingBlood = сундук с зельями во
ent-CP14WoodenChestFilledSmallHealingMana = сундук с зельями маны
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenChestFilledSmallHealingManaDepletion = сундук с зельями лечения магического истощения
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenChestFilledSmallSpeedUp = сундук с зельями ускорения
.desc = { ent-CP14WoodenChest.desc }
@@ -31,6 +34,9 @@ ent-CP14WoodenChestFilledSmallRainbow = сундук с веселыми зел
ent-CP14WoodenChestFilledCandles = сундук со свечами
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenChestFilledSmokePowder = сундук с курительным шалфеем
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenChestFilledFarmSeeds = сундук с семенами
.desc = { ent-CP14WoodenChest.desc }
@@ -40,7 +46,7 @@ ent-CP14WoodenChestFilledCheese = сундук с сыром
ent-CP14WoodenChestFilledBureaucracy = сундук с бюрократией
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenChestFilledEnergyCrystals = energy crystals chest
ent-CP14WoodenChestFilledEnergyCrystals = сундук с энергокристаллами
.desc = { ent-CP14WoodenChest.desc }
ent-CP14WoodenClosetAlchemyFilled = { ent-CP14WoodenCloset }
@@ -95,12 +101,12 @@ ent-CP14WoodenCabinetGuildmaster = { ent-CP14WoodenCabinet }
.desc = { ent-CP14WoodenCabinet.desc }
.suffix = Гильдмастер, Заполненный
ent-CP14BaseFlammableSpreadingStrong = { ent-CP14BaseFlammableSpreading }
.desc = { ent-CP14BaseFlammableSpreading.desc }
ent-CP14Fire = огонь
.desc = Это огонь!
ent-CP14BaseFlammableSpreadingStrong = { ent-CP14BaseFlammableSpreading }
.desc = { ent-CP14BaseFlammableSpreading.desc }
ent-CP14ActionZLevelUp = Вверх
.desc = Перейти на 1 Z-уровень вверх
@@ -213,6 +219,32 @@ ent-CP14ImpactEffectEarthWall = { ent-CP14BaseMagicImpact }
ent-CP14SpellScrollEarthWall = свиток заклинания земляной стены
.desc = { ent-CP14BaseSpellScrollEarth.desc }
ent-CP14ActionSpellFireball = Огненный шар
.desc = Эффективный метод уничтожения - взрывной огненный шар.
ent-CP14RuneFireball = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ImpactEffectFireball = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14Fireball = огненный шар
ent-CP14SpellScrollFireball = свиток заклинания огненного шара
.desc = { ent-CP14BaseSpellScrollFire.desc }
ent-CP14ActionSpellFireRune = Руна огня
.desc = Вы создаете зону, в которой обжигающий поток огня возникает практически мгновенно.
ent-CP14TelegraphyFireRune = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14AreaEntityEffectFireRune = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14SpellScrollFireRune = свиток заклинаний руны огня
.desc = { ent-CP14BaseSpellScrollFire.desc }
ent-CP14ActionSpellFlameCreation = Создание пламени
.desc = В вашей руке образуется искусственное пламя, освещающее окружающее пространство. Вы можете бросить его, чтобы использовать в качестве одноразового оружия.
@@ -243,38 +275,21 @@ ent-CP14ImpactEffectTieflingRevenge = { ent-CP14BaseMagicImpact }
ent-CP14RuneTieflingRevenge = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ActionSpellFireball = Огненный шар
.desc = Эффективный метод уничтожения - взрывной огненный шар.
ent-CP14RuneFireball = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ImpactEffectFireball = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14Fireball = искусственное пламя
ent-CP14SpellScrollFireball = свиток заклинания огненного шара
.desc = { ent-CP14BaseSpellScrollFire.desc }
ent-CP14ActionSpellFireRune = Руна огня
.desc = Вы создаете зону, в которой обжигающий поток огня возникает практически мгновенно.
ent-CP14TelegraphyFireRune = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14AreaEntityEffectFireRune = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14SpellScrollFireRune = свиток заклинаний руны огня
.desc = { ent-CP14BaseSpellScrollFire.desc }
ent-CP14ActionSpellMagicalAcceleration = Магическое ускорение
.desc = Затрачивая магическую энергию, вы значительно ускоряете скорость передвижения.
ent-CP14SpellScrollMagicalAcceleration = Свиток заклинания магического ускорения
.desc = { ent-CP14BaseSpellScrollHealing.desc }
ent-CP14ActionSpellSheepPolymorph = Полиморф в овечку
.desc = Вы проклинаете цель, превращая ее на короткое время в глупую овцу.
ent-CP14RuneSheepPolymorph = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ImpactEffectSheepPolymorph = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14ActionSpellCureBurn = Лечение ожогов
.desc = Вы излечиваете кожные повреждения, вызванные крайне высокой или низкой температурой.
@@ -443,12 +458,12 @@ ent-CP14RuneManaConsume = { ent-CP14BaseMagicRune }
ent-CP14ImpactEffectManaConsume = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14DummyActionSpellManaManipulation = Манипуляция маной
.desc = Вы можете манипулировать маной, отдавая ее другим предметам или забирая у них.
ent-CP14ActionSpellManaGift = Передача маны
.desc = Вы можете передать небольшое количество своей магической энергии целевому существу или магическому объекту.
ent-CP14ActionSpellManaGiftElf = Аккуратная передача маны
.desc = Вы передаете ману с огромной скоростью, не нанося цели урона.
ent-CP14RuneManaGift = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
@@ -497,30 +512,6 @@ ent-CP14ActionSpellVampireBloodStep = Шаг крови
ent-CP14ImpactEffectBloodStep = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14ActionSpellFreeze = Заморозка
.desc = Вы начинаете сильно охлаждать цель, замедляя скорость ее передвижения.
ent-CP14ImpactEffectFreeze = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14RunePlantFreeze = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14SpellScrollFreeze = свиток заклинания заморозки
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellWaterCreation = Создание воды
.desc = Создайте сгусток воды, который удерживается в форме парящего шара в течение некоторого времени.
ent-CP14RuneWaterCreation = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ImpactEffectWaterCreation = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14SpellScrollWaterCreation = свиток заклинания создания воды
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellBeerCreation = Создание пива
.desc = Секретное заклинание, создающее пиво из чистой маны.
@@ -537,6 +528,33 @@ ent-CP14ImpactEffectBeerCreation = { ent-CP14BaseMagicImpact }
ent-CP14SpellScrollBeerCreation = свиток заклинания создания пива
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellFreeze = Заморозка
.desc = Вы начинаете сильно охлаждать цель, замедляя скорость ее передвижения.
ent-CP14ImpactEffectFreeze = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14RunePlantFreeze = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14SpellScrollFreeze = свиток заклинания заморозки
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellIceArrow = Ледяная стрела
.desc = Вы создаете временную острую ледяную стрелу, которую можно использовать как одноразовый снаряд для лука.
ent-CP14IceArrow = ледяная стрела
.desc = Острая ледяная стрела, созданная с помощью магии. Она тает и вскоре исчезает, но вы можете один раз выстрелить в нее из своего лука.
ent-CP14SpellScrollIceArrow = свиток заклинания ледяной стрелы
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellIceDagger = Ледяной кинжал
.desc = Вы создаете ледяной острый кинжал, который подойдет для временного использования.
ent-CP14SpellScrollIceDagger = свиток заклинания ледяного кинжала
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellIceShards = Ледяные осколки
.desc = Быстрые ледяные иглы для быстрой стрельбы по мишеням.
@@ -548,6 +566,18 @@ ent-CP14IceShard = ледяной осколок
ent-CP14SpellScrollIceShards = свиток заклинания ледяных осколков
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14ActionSpellWaterCreation = Создание воды
.desc = Создайте сгусток воды, который удерживается в форме парящего шара в течение некоторого времени.
ent-CP14RuneWaterCreation = { ent-CP14BaseMagicRune }
.desc = { ent-CP14BaseMagicRune.desc }
ent-CP14ImpactEffectWaterCreation = { ent-CP14BaseMagicImpact }
.desc = { ent-CP14BaseMagicImpact.desc }
ent-CP14SpellScrollWaterCreation = свиток заклинания создания воды
.desc = { ent-CP14BaseSpellScrollWater.desc }
ent-CP14HeadSkeleton = череп
.desc = Бедный Йорик...
@@ -633,6 +663,9 @@ ent-CP14ClothingGlovesGirdles = железные наручи
ent-CP14ClothingGlovesJagermeister = перчатки егермейстера
.desc = Кожаные перчатки, любимые местными егермейстерами.
ent-CP14ClothingGlovesBlacksmith = кузнечные перчатки
.desc = Говорят, в них можно взять в руки только что отлитый слиток. Но проверять это все равно не стоит.
ent-CP14ClothingHeadCapellina = капеллина
.desc = Защита от ударов крупными предметами по голове.
@@ -695,12 +728,15 @@ ent-CP14ClothingMaskNeckerchief = шейный платок
ent-CP14ClothingMaskBoneMask = костяная маска
.desc = Заколдованная маска, ранее принадлежавшая волшебному существу.
ent-CP14ClothingMaskBoneHornedMask = костяная рогатая маска
.desc = Заколдованная маска, ранее принадлежавшая волшебному существу.
ent-CP14ClothingMaskBoneHornedMask = рогатая костяная маска
.desc = Костяная маска какого-то животного.
ent-CP14ClothingMaskBoneMaskMind = { ent-CP14ClothingMaskBoneMask }
.desc = { ent-CP14ClothingMaskBoneMask.desc }
ent-CP14ClothingMaskMime = маска тишины
.desc = ...
ent-CP14ArmorIronCuirassPresets = полная железная кираса
.desc = Полные железные доспехи, защищающие владельца от другого острого железа.
@@ -713,12 +749,6 @@ ent-CP14ArmorCopperCuirassPresets = полная медная кираса
ent-CP14ArmorMithrilCuirassPresets = полная мифриловая кираса
.desc = Мечта любого искателя приключений, мифриловая броня - прочная, крепкая и почти не стесняющая движений. Если и существует идеал, то это именно он.
ent-CP14ArmorIronChainmailPresets = полная железная кольчуга
.desc = Полные железные кольчужные доспехи, легкие и с достойной защитой.
ent-CP14ArmorMithrilChainmailPresets = полная мифриловая кольчуга
.desc = Полная мифриловая кольчуга, которую, возможно, медленно и кропотливо собирали гномьи кузнецы. Ценнейшая работа.
ent-CP14ClothingOuterClothingCopperArmor = медная броня
.desc = Качественная медная броня.
@@ -947,6 +977,9 @@ ent-CP14ClothinGreenLightDress = светло-зеленое платье
ent-CP14ClothingWarriorsGarbDress = воинское одеяние
.desc = Покажите свою силу.
ent-CP14ClothinShirtMaidDress = платье горничной
.desc = { ent-CP14ClothingShirtBase.desc }
ent-CP14ClothingShirtGuardBase = кольчуга стражника
.desc = Рубашка с вшитой подкладкой из кольчуги, окрашенная в стандартные цвета униформы Имперской гвардии.
@@ -982,6 +1015,10 @@ ent-CP14LongLeatherBoots = длинные кожаные сапоги
ent-CP14ClothingShoesJestersRingers = шутовские звонари
.desc = Все вокруг должны знать, что ты существуешь, приятель.
ent-CP14ClothingShoesArtifactFrogs = жаботапы
.desc = Для любителей сред
.suffix = Артефакт
ent-CP14Mist = облако
ent-CP14DemiplaneEntryPointMarker = точка входа в демиплан
@@ -1157,6 +1194,7 @@ ent-CP14ActionSpellIceShardsGhost = { ent-CP14ActionSpellIceShards }
ent-CP14MobMonsterInvisibleWhistler = невидимый свистун
.desc = Невидимое обычным глазом чудовище, обожающее пожирать жертвы, измученные страхом и непониманием.
.suffix = AI
ent-CP14MobMonsterMole = хищный крот
.desc = Охотится в темноте и любит вкус мяса и крови во рту.
@@ -1165,28 +1203,28 @@ ent-CP14MobMonsterMole = хищный крот
ent-CP14MobUndeadSkeletonDemiplane = скелет
.desc = Оживленный темной магией хрупкий скелет. Обычно скелеты - чрезвычайно разумные существа, управляемые недавно умершей душой.
ent-CP14MobUndeadSkeletonHalberd = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonHalberd = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Алебардщик
ent-CP14MobUndeadSkeletonSword = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonSword = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Мечник
ent-CP14MobUndeadSkeletonDodger = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonDodger = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Кинжал
ent-CP14MobUndeadSkeletonArcher = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonArcher = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Лучник
ent-CP14MobUndeadSkeletonWizard = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonWizard = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Маг
ent-CP14MobUndeadSkeletonBard = скелет
.desc = { ent-CP14MobUndeadSkeleton.desc }
ent-CP14MobUndeadSkeletonBard = { ent-CP14MobUndeadSkeletonDemiplane }
.desc = { ent-CP14MobUndeadSkeletonDemiplane.desc }
.suffix = Бард
ent-SpawnPointGhostDemiplaneSkeleton = точка спавна роли призрака
@@ -1217,6 +1255,12 @@ ent-SpawnPointGhostDemiplaneSkeletonBard = точка спавна роли пр
.desc = { ent-SpawnPointGhostDemiplaneSkeleton.desc }
.suffix = скелет-бард
ent-CP14MobWatcherIce = ледяной наблюдатель
.desc = { ent-CP14MobWatcherBase.desc }
ent-CP14MobWatcherMagma = магмовый наблюдатель
.desc = { ent-CP14MobWatcherBase.desc }
ent-CP14MobSpaceCobra = кобра
ent-CP14MobUndeadZombie = ходячий труп
@@ -1234,6 +1278,10 @@ ent-CP14MobUndeadZombieGearEasy3 = { ent-CP14MobUndeadZombie }
.desc = { ent-CP14MobUndeadZombie.desc }
.suffix = Зомби. Легкий
ent-CP14MobSlimeBase = слайм
.desc = Сгусток полуразумной слизи, чувствительной к стихиям. Он с удовольствием слижет кожу с вашего лица.
.suffix = AI
ent-CP14ActionSpellSlimeJump = Слаймопрыжок
.desc = Прыгай! ПРЫГАЙ!
@@ -1335,9 +1383,6 @@ ent-CP14GuidebookBase = { ent-CP14BookBase }
.desc = { ent-CP14BookBase.desc }
.suffix = Путеводитель
ent-CP14BookKnowledgeBase = книга знаний
.desc = В этой книге содержатся ценные знания, которые вы можете освоить... если будете к этому готовы.
ent-CP14GuidebookImperialLaws = имперские законы
.desc = Книга об императорских законах.
.suffix = Путеводитель
@@ -1350,34 +1395,6 @@ ent-CP14GuidebookDemiplanes = руководство по исследовани
.desc = Приключение на 20 минут: туда и назад.
.suffix = Путеводитель
ent-CP14BookKnowledgeWoodWork = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Работа по дереву
ent-CP14BookKnowledgeMetallMelting = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Плавка металла
ent-CP14BookKnowledgeMetallForging = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Ковка металла
ent-CP14BookKnowledgeGlasswork = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Работа со стеклом
ent-CP14BookKnowledgeClothingSewing = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Шитье одежды
ent-CP14BookKnowledgeWallpaperCraft = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Изготовление обоев
ent-CP14BookKnowledgeAdvancedClothingSewing = { ent-CP14BookKnowledgeBase }
.desc = { ent-CP14BookKnowledgeBase.desc }
.suffix = Продвинутое шитье одежды
ent-CP14BookRandom = { ent-CP14BookWriteableBase }
.desc = Каждая книга уникальна! Что спрятано в этой?
.suffix = Случайный визуал
@@ -1706,8 +1723,8 @@ ent-CP14AgaricMushroom = мухомор
ent-CP14ChromiumSlime = хромиевая слизь
.desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует.
ent-CP14WildSage = корень дикого шалфея
.desc = Корень повсеместно распространенного лекарственного растения, неплохо заживляющего физические повреждения и вызывающего откашливание.
ent-CP14WildSage = шалфей
.desc = Цветы шалфея. Хорошая лекарственная трава, которая при правильной обработке действует как галлюциноген.
ent-CP14LumiMushroom = люмигриб
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
@@ -2033,6 +2050,22 @@ ent-CP14DyePurple = фиолетовый краситель
ent-CP14DyeBlack = черный краситель
.desc = { ent-CP14BaseDye.desc }
ent-CP14FloraMaterial1 = растительный материал
.desc = Органический материал, используемый в лечебных или строительных целях.
.suffix = 1
ent-CP14FloraMaterial10 = { ent-CP14FloraMaterial1 }
.desc = { ent-CP14FloraMaterial1.desc }
.suffix = 10
ent-CP14CompostMaterial1 = компост
.desc = Когда-то это было красивое и яркое растение или еда. Теперь это вонючая куча разлагающейся органики.
.suffix = 1
ent-CP14CompostMaterial10 = { ent-CP14CompostMaterial1 }
.desc = { ent-CP14CompostMaterial1.desc }
.suffix = 10
ent-CP14OreCopper1 = медная руда
.desc = Кусок бледной, тяжелой меди.
@@ -2145,14 +2178,6 @@ ent-CP14Nail50 = { ent-CP14Nail1 }
.desc = { ent-CP14Nail1.desc }
.suffix = 50
ent-CP14FloraMaterial1 = растительный материал
.desc = Органический материал, используемый в лечебных или строительных целях.
.suffix = 1
ent-CP14FloraMaterial10 = { ent-CP14FloraMaterial1 }
.desc = { ent-CP14FloraMaterial1.desc }
.suffix = 10
ent-CP14String = нитки
.desc = Тонкая нить. Материал для починки одежды или пошива новой.
@@ -2299,6 +2324,9 @@ ent-CP14ModularGripCopper = медная рукоять
ent-CP14ModularGripMithril = мифриловая рукоять
.desc = { ent-CP14ModularGripShort.desc }
ent-CP14ModularGripGuildmaster = рукоять рапиры гильдмастера
.desc = { ent-CP14ModularGripShort.desc }
ent-CP14ModularGripWoodenLong = длинная деревянная рукоять
.desc = { ent-CP14ModularGripLong.desc }
@@ -2374,6 +2402,21 @@ ent-CP14ModularBladeCopperHammer = медный наболдашник моло
ent-CP14ModularBladeMithrilHammer = мифриловый наболдашник молота
.desc = { ent-CP14ModularBladeHammerBase.desc }
ent-CP14ModularBladeHoeBase = None
.desc = Лезвие мотыги без рукояти. Кузнец может использовать его как запасную часть для создания инструмента.
ent-CP14ModularBladeIronHoe = железное лезвие мотыги
.desc = { ent-CP14ModularBladeHoeBase.desc }
ent-CP14ModularBladeCopperHoe = медное лезвие мотыги
.desc = { ent-CP14ModularBladeHoeBase.desc }
ent-CP14ModularBladeGoldHoe = золотое лезвие мотыги
.desc = { ent-CP14ModularBladeHoeBase.desc }
ent-CP14ModularBladeMithrilHoe = мифриловое лезвие мотыги
.desc = { ent-CP14ModularBladeSickleBase.desc }
ent-CP14ModularBladeMaceBase = None
.desc = Булава-шар без рукояти. Кузнец может использовать его как запасную часть для создания оружия.
@@ -2485,6 +2528,9 @@ ent-CP14ModularBladeBoneSword = костяное лезвие меча
ent-CP14ModularGardeBase = None
.desc = Гарда? Гарда!
ent-CP14ModularGardeGuildmaster = гарда рапиры гильдмастера
.desc = { ent-CP14ModularGardeBase.desc }
ent-CP14ModularGardeSharpIron = острая железная гарда
.desc = { ent-CP14ModularGardeBase.desc }
@@ -2634,7 +2680,11 @@ ent-CP14VialSmallSpeedUp = зелье ускорения Брада
ent-CP14VialSmallRainbow = веселое зелье Брада
.desc = { ent-CP14VialSmall.desc }
.suffix = Радуга и пьяные 20%
.suffix = Радуга и пьянь 20%
ent-CP14VialSmallHealingManaDepletion = мана-лечебное зелье Брада
.desc = { ent-CP14VialSmall.desc }
.suffix = Лечение мана-истощения 10%
ent-CP14BaseAlchemyBomb = алхимическая бомба
.desc = Флакон с жидкостью, который при броске взрывается облаком алхимических реагентов.
@@ -2675,12 +2725,12 @@ ent-CP14SeedCucumber = семена огурцов
ent-CP14SeedTomato = семена помидоров
.desc = Похоже на порошок! Они такие маленькие, эти семена.
ent-CP14SeedOnion = семена лука
.desc = Семена лука, мелкие, но крепкие.
ent-CP14SeedPepper = семена перца
.desc = Семена перца, с перчинкой внутри.
ent-CP14SeedSage = семена шалфея
.desc = Семена шалфея. Пришло время выращивать интересные травы!
ent-CP14HerbalBandage = травяной бинт
.desc = Бинт для перевязки, сплетенный из травы. Не самая надежная и полезная вещь, но лучше, чем ничего.
.suffix = 5
@@ -2861,12 +2911,18 @@ ent-CP14ModularIronDagger = железный кинжал
ent-CP14ModularIronHammer = железный молоток
.desc = Небольшой молоток. Хорошо подходит для плотницких работ, а также для раскалывания черепов.
ent-CP14ModularIronHoe = железная мотыга
.desc = Мотыга. Идеальный инструмент для обработки земли и подготовки ее к садоводству.
ent-CP14ModularIronMace = железная булава
.desc = Тяжелый кусок металла на длинной палке. Что может быть проще этого?
ent-CP14ModularIronPickaxe = железная кирка
.desc = Идеальна для забуривания в камни.
ent-CP14ModularGuildmasterRapier = личная рапира гильдмастера
.desc = Личное оружие, выдаваемое каждому гильдмастеру. Сочетает в себе надежность и убойную силу.
ent-CP14ModularIronShovel = железная лопата
.desc = Орудие для вскапывания земли, рытья грядок или могил.
@@ -3458,87 +3514,62 @@ ent-CP14CrystalShardOrder = ordo осколок кварца
ent-CP14CrystalShardChaos = perditio осколок кварца
.desc = { ent-CP14CrystalShardBase.desc }
ent-CP14GatherableWildBase = { ent-CP14GatherableBase }
.desc = { ent-CP14GatherableBase.desc }
ent-CP14GatherablePlantBase = { ent-CP14GatherableBase }
.desc = { ent-CP14GatherableBase.desc }
ent-CP14PlantCabbage = капуста
.desc = Вы видите перед собой капусту. Возможно, вы родились в такой же.
ent-CP14PlantCucumber = огурцы
.desc = Не доверяйте людям, которые умеют превращаться в огурцы.
ent-CP14PlantOnion = лук
.desc = Он такой милый, что у меня на глаза наворачиваются слезы, когда я его разрезаю.
ent-CP14PlantPepper = перцы
.desc = Русская рулетка. Острый или сладкий перец?
ent-CP14PlantPotato = картошка
.desc = Некоторые любят ассоциировать себя с картошкой. Такие люди не могут быть плохими.
ent-CP14PlantPumpkin = тыква
.desc = Легенды гласят, что есть тыквенный король, который заглядывает вам в душу сквозь кроны деревьев.
ent-CP14PlantSage = шалфей
.desc = Лекарственный шалфей. Одни любят его за лечебные свойства, другие - за наркотические. А вы на чьей стороне?
ent-CP14PlantTomatoes = помидоры
.desc = С одной стороны, это вкусный плод. Но зачем его есть, если гораздо интереснее использовать помидоры в качестве метательного снаряда?
ent-CP14PlantWheat = пшеница
.desc = Самая популярная культура. Неприхотливая, она открывает путь к изобилию мучных изделий.
ent-CP14GatherableBloodFlower = кровьцветы
.desc = Алые цветы растут там, где пролилась кровь.
.suffix = Gatherable
ent-CP14GatherableBlueAmanita = лазурная аманита
.desc = Небесно-голубой цветок, известный своими лечебными и магическими свойствами.
.suffix = Gatherable
ent-CP14GatherableChromiumSlime = хромовая слизь
.desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует.
.suffix = Gatherable
ent-CP14GatherableDayflin = желтые днецветы
.desc = Желтый солнечный цветок, пахнущий топленым молоком. Может быть переработан в желтый краситель.
.suffix = Gatherable
ent-CP14GatherableFlyAgaric = мухомор
.desc = Этот ядовитый гриб часто можно встретить вблизи водоемов или других влажных мест. Он не рекомендуется для употребления в пищу.
.suffix = Gatherable
ent-CP14WaterLilies = кувшинки
.desc = Ух ты, это растения, которые растут не на суше, а в воде! Природа удивительна.
ent-CP14WaterReeds = рогоз
.desc = Обычно растет на болотах и по берегам рек.
ent-CP14GatherableBloodFlower = кровавая роза
.desc = Алые цветы растут там, где пролилась кровь.
.suffix = Собираемый
ent-CP14GatherableDayflin = желтый днецвет
.desc = Желтый солнечный цветок, пахнущий топленым молоком. Может быть переработан в желтый краситель.
.suffix = Собираемый
ent-CP14GatherableFlyAgaric = мухоморы
.desc = Этот ядовитый гриб часто можно встретить вблизи водоемов или других влажных мест. Он не рекомендуется для употребления в пищу.
.suffix = Собираемый
ent-CP14GatherableChromiumSlime = хромиевая слизь
.desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует.
.suffix = Собираемый
ent-CP14GatherableWildSage = дикий шалфей
.desc = Корень этого повсеместно распространенного лекарственного растения неплохо заживляет физические повреждения и вызывает кашель.
.suffix = Собираемый
ent-CP14GatherableLumiMushroom = люмигрибы
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
.suffix = Собираемый
ent-CP14GatherableBlueAmanita = лазурная аманита
.desc = Небесно-голубой цветок, известный своими лечебными и магическими свойствами.
.suffix = Собираемый
ent-CP14PlantCabbage = капуста
ent-CP14PlantCabbageDeath = мёртвая капуста
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantCucumber = огурец
ent-CP14PlantCucumberDeath = мёртвый огурец
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantOnion = лук
ent-CP14PlantOnionDeath = мёртвый лук
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantPepper = перец
ent-CP14PlantPepperDeath = мёртвый перец
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantPotato = картофель
ent-CP14PlantPotatoDeath = мёртвая картошка
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantPumpkin = тыква
ent-CP14PlantPumpkinDeath = мёртвая тыква
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantTomatoes = помидоры
ent-CP14PlantTomatoesDeath = мёртвые помидоры
.desc = Печальное зрелище выброшенной еды.
ent-CP14PlantWheat = пшеница
.desc = Наиболее популярная культура. Непритязательна, и открывает дорогу к разнообразию мучных изделий.
ent-CP14PlantWheatDeath = мертвая пшеница
.desc = Грустное зрелище потерянной еды.
ent-CP14BarrelWater = { ent-CP14BaseBarrel }
.desc = { ent-CP14BaseBarrel.desc }
.suffix = Вода
@@ -3881,9 +3912,6 @@ ent-CP14TradingPortalSpiceStream = { ent-CP14TradingPortalBase }
.desc = { ent-CP14TradingPortalBase.desc }
.suffix = SpiceStream
ent-CP14SeedbedWooden = грядка
.desc = Деревянная кадка с кучей земли, приспособленная для выращивания растений.
ent-CP14BaseEssenceNode = узел эссенции
.desc = Естественное накопление магической эссенции.
@@ -3997,9 +4025,23 @@ ent-CP14WindowIceBlock = блок льда
ent-CP14AstralCorrosion = астральное заражение
.desc = Светящиеся трещины в реальности. Возможно, это нормально.
ent-CP14SkillTreePyrokineticLoadoutDummy = Пирокинетика
ent-CP14SkillTreeHydrosophistryLoadoutDummy = Гидрософистика
ent-CP14SkillTreeIllusionLoadoutDummy = Иллюзия
ent-CP14SkillTreeMetamagicLoadoutDummy = Метамагия
ent-CP14SkillTreeHealingLoadoutDummy = Животворение
ent-CP14SkillTreeAtlethicLoadoutDummy = Атлетика
ent-CP14DemiplaneArtifactRoomSpawner = Спавнер комнаты артефактов в демиплане
ent-CP14DemiplanEnterRoomMarker = Демиплановый маркер входа в комнату
ent-CP14DemiplanEnterRoomMarker = Спавнер комнаты входа в демиплан
ent-CP14DemiplaneRuinsRoomSpawner = Спавнер руин демиплана
ent-CP14MindRoleDemiplaneAntag = Роль антага в демиплане
@@ -4020,6 +4062,12 @@ ent-CP14LiquidDropWater = парящая капля жидкости
.desc = Сгусток жидкости, удерживаемый в форме шара с помощью магии.
.suffix = Вода
ent-CP14ClothingCloakAmuletGold = золотой амулет
.desc = Золотой амулет, ценная безделушка.
ent-CP14ClothingCloakAmuletMana = мана амулет
.desc = Золотой амулет с магическим камнем внутри, который поможет вам легче колдовать.
ent-CP14ClothingCloakMaidArpon = фартук горничной
.desc = Чистота, порядок и послушание - главные черты хорошей горничной.
@@ -4062,14 +4110,21 @@ ent-CP14ClothingOuterClothingMerchantWaistCoat = купеческий жилет
ent-CP14SimpleMobBase = None
.suffix = AI
ent-CP14SimpleMobNoLifeBase = None
.suffix = AI
ent-CP14SimpleSpaceMobNoLifeBase = None
.suffix = AI
ent-CP14MobIceSpectre = ледяной спектр
.desc = Непогребенная душа замерзших искателей приключений. Ее ярость против мира лишает ее разума.
ent-CP14MobMonsterMosquito = рой москитов-кровопийц
ent-CP14MobMonsterMosquito = рой комаров кровопийц
.desc = Кровожадный рой мелких комаров только и ждет мягкой плоти для кровавого пиршества.
.suffix = AI
ent-CP14MobSlimeBase = слайм
.desc = Сгусток полуразумной слизи, чувствительной к стихиям. И с удовольствием слижет кожу с вашего лица.
ent-CP14MobWatcherBase = наблюдатель
.desc = Как будто он смотрит прямо сквозь вас.
.suffix = AI
ent-CP14BaseMobSkeleton = Мистер Скелет
@@ -4100,9 +4155,6 @@ ent-CP14BaseShield = щит
ent-CP14BaseCrowbar = лом
.desc = Универсальная и полезная железяка, предназначенная для разборки полов и других предметов.
ent-CP14BaseHoe = мотыга
.desc = Садовый инструмент для подготовки почвы к посадке или для удаления сорняков
ent-CP14BaseMop = деревянная швабра
.desc = Швабра для мытья полов от различных неприятных жидкостей
@@ -4313,3 +4365,4 @@ ent-CP14WallCardboard = картонная стена
ent-CP14WindowWooden = деревянное окно
.desc = Деревянная стена со стеклянным окном в ней.

View File

@@ -0,0 +1,2 @@
marking-CP14CarcatTail = Хвост
marking-CP14CarcatTailFluffy = Пушистый хвост

View File

@@ -1,6 +1,8 @@
cp14-stack-dirt-block = блоки земли
cp14-stack-stone-block = каменные блоки
cp14-stack-wood-planks = деревянные доски
cp14-stack-marble-block = мраморные камни
cp14-stack-wood-planks = дубовые доски
cp14-stack-wood-planks-birch = березовые доски
cp14-stack-nails = гвозди
cp14-stack-cloth = рулоны ткани
cp14-stack-flora = пучки травы
@@ -21,3 +23,7 @@ cp14-stack-wallpaper = рулон обоев
cp14-stack-glass-sheet = стекло
cp14-stack-ash-pile = кучка пепла
cp14-stack-group-wooden-planks-any = доски (любые)

View File

@@ -1,11 +1,11 @@
meta:
format: 7
category: Map
engineVersion: 248.0.2
engineVersion: 250.0.0
forkId: ""
forkVersion: ""
time: 03/18/2025 21:57:21
entityCount: 14429
time: 04/05/2025 10:23:32
entityCount: 14385
maps:
- 2
grids:
@@ -65,8 +65,8 @@ entities:
id: Comoss
- type: CP14WeatherController
entries:
- visuals: null
weight: 3
- weight: 3
visuals: null
- visuals: CP14Mist
- visuals: CP14Rain
- type: LightCycle
@@ -976,24 +976,6 @@ entities:
- type: Transform
pos: -1.7708926,13.337564
parent: 2
- proto: CP14BaseHoe
entities:
- uid: 33
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -20.17605,-13.383461
parent: 2
- uid: 34
components:
- type: Transform
pos: -19.952974,-13.253024
parent: 2
- uid: 35
components:
- type: Transform
pos: 12.486586,-56.600544
parent: 2
- proto: CP14BaseLightCrossbow
entities:
- uid: 36
@@ -44740,6 +44722,24 @@ entities:
- type: Transform
pos: 10.025342,-7.197178
parent: 2
- proto: CP14ModularIronHoe
entities:
- uid: 33
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -20.17605,-13.383461
parent: 2
- uid: 34
components:
- type: Transform
pos: -19.952974,-13.253024
parent: 2
- uid: 35
components:
- type: Transform
pos: 12.486586,-56.600544
parent: 2
- proto: CP14ModularIronMace
entities:
- uid: 8182
@@ -61032,228 +61032,6 @@ entities:
- type: Transform
pos: 7.7062325,2.3277578
parent: 2
- proto: CP14SeedbedWooden
entities:
- uid: 10509
components:
- type: Transform
pos: -24.5,-11.5
parent: 2
- uid: 10510
components:
- type: Transform
pos: -23.5,-11.5
parent: 2
- uid: 10511
components:
- type: Transform
pos: -24.5,-12.5
parent: 2
- uid: 10512
components:
- type: Transform
pos: -24.5,-13.5
parent: 2
- uid: 10513
components:
- type: Transform
pos: -24.5,-14.5
parent: 2
- uid: 10514
components:
- type: Transform
pos: -23.5,-14.5
parent: 2
- uid: 10515
components:
- type: Transform
pos: -23.5,-13.5
parent: 2
- uid: 10516
components:
- type: Transform
pos: -23.5,-12.5
parent: 2
- uid: 10517
components:
- type: Transform
pos: -24.5,-16.5
parent: 2
- uid: 10518
components:
- type: Transform
pos: -24.5,-17.5
parent: 2
- uid: 10519
components:
- type: Transform
pos: -24.5,-18.5
parent: 2
- uid: 10520
components:
- type: Transform
pos: -23.5,-16.5
parent: 2
- uid: 10521
components:
- type: Transform
pos: -23.5,-17.5
parent: 2
- uid: 10522
components:
- type: Transform
pos: -23.5,-18.5
parent: 2
- uid: 10523
components:
- type: Transform
pos: -21.5,-16.5
parent: 2
- uid: 10524
components:
- type: Transform
pos: -21.5,-17.5
parent: 2
- uid: 10525
components:
- type: Transform
pos: -21.5,-18.5
parent: 2
- uid: 10526
components:
- type: Transform
pos: -20.5,-16.5
parent: 2
- uid: 10527
components:
- type: Transform
pos: -20.5,-17.5
parent: 2
- uid: 10528
components:
- type: Transform
pos: -20.5,-18.5
parent: 2
- uid: 10529
components:
- type: Transform
pos: -24.5,-20.5
parent: 2
- uid: 10530
components:
- type: Transform
pos: -24.5,-21.5
parent: 2
- uid: 10531
components:
- type: Transform
pos: -24.5,-22.5
parent: 2
- uid: 10532
components:
- type: Transform
pos: -23.5,-20.5
parent: 2
- uid: 10533
components:
- type: Transform
pos: -23.5,-21.5
parent: 2
- uid: 10534
components:
- type: Transform
pos: -23.5,-22.5
parent: 2
- uid: 10535
components:
- type: Transform
pos: -21.5,-20.5
parent: 2
- uid: 10536
components:
- type: Transform
pos: -21.5,-21.5
parent: 2
- uid: 10537
components:
- type: Transform
pos: -21.5,-22.5
parent: 2
- uid: 10538
components:
- type: Transform
pos: -20.5,-20.5
parent: 2
- uid: 10539
components:
- type: Transform
pos: -20.5,-21.5
parent: 2
- uid: 10540
components:
- type: Transform
pos: -20.5,-22.5
parent: 2
- uid: 10541
components:
- type: Transform
pos: 16.5,-62.5
parent: 2
- uid: 10542
components:
- type: Transform
pos: 17.5,-62.5
parent: 2
- uid: 10543
components:
- type: Transform
pos: 18.5,-53.5
parent: 2
- uid: 10544
components:
- type: Transform
pos: 18.5,-54.5
parent: 2
- uid: 10545
components:
- type: Transform
pos: 15.5,-54.5
parent: 2
- uid: 10546
components:
- type: Transform
pos: 15.5,-52.5
parent: 2
- uid: 10547
components:
- type: Transform
pos: 15.5,-57.5
parent: 2
- uid: 10548
components:
- type: Transform
pos: 17.5,-57.5
parent: 2
- uid: 10549
components:
- type: Transform
pos: 15.5,-53.5
parent: 2
- uid: 10550
components:
- type: Transform
pos: 18.5,-52.5
parent: 2
- uid: 10551
components:
- type: Transform
pos: 18.5,-57.5
parent: 2
- uid: 10552
components:
- type: Transform
pos: 16.5,-57.5
parent: 2
- proto: CP14SilverCoin1
entities:
- uid: 10553
@@ -61384,14 +61162,13 @@ entities:
- 8184
- 8182
- 8181
- uid: 10555
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -12.5,-5.5
parent: 2
- proto: CP14SmallWoodenCrateFilled
entities:
- uid: 10509
components:
- type: Transform
pos: -12.5,-5.5
parent: 2
- uid: 10556
components:
- type: Transform
@@ -61784,11 +61561,6 @@ entities:
rot: -1.5707963267948966 rad
pos: 0.5,-53.5
parent: 2
- uid: 10628
components:
- type: Transform
pos: 15.5,-60.5
parent: 2
- uid: 10629
components:
- type: Transform
@@ -64380,6 +64152,21 @@ entities:
fixtures: {}
- proto: CP14WallmountLampEmpty
entities:
- uid: 1
components:
- type: Transform
pos: -14.5,-5.5
parent: 2
- type: Fixtures
fixtures: {}
- uid: 7131
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -16.5,-4.5
parent: 2
- type: Fixtures
fixtures: {}
- uid: 11062
components:
- type: Transform
@@ -81689,6 +81476,12 @@ entities:
parent: 2
- proto: CP14WoodenDoorPersonalHouse3
entities:
- uid: 10510
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -6.5,16.5
parent: 2
- uid: 14352
components:
- type: Transform
@@ -81738,12 +81531,6 @@ entities:
parent: 2
- proto: CP14WoodenDoorPersonalHouse8
entities:
- uid: 14359
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -6.5,16.5
parent: 2
- uid: 14360
components:
- type: Transform
@@ -82154,7 +81941,7 @@ entities:
pos: 29.5,15.5
parent: 2
- type: WarpPoint
location: Blacksmith 2
location: Blacksmith
- uid: 14429
components:
- type: Transform
@@ -82162,7 +81949,7 @@ entities:
pos: 14.5,3.5
parent: 2
- type: WarpPoint
location: Alchemist 2
location: Alchemist
- uid: 14430
components:
- type: Transform

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
- type: storePositionSell
id: CP14SpellScroll
price: 150
price: 50
factions:
- Sylphoria
service: !type:CP14SellWhitelistService

View File

@@ -84,4 +84,27 @@
- type: Sprite
sprite: _CP14/Clothing/Cloak/Roles/General/insulated_mantle.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/Roles/General/insulated_mantle.rsi
sprite: _CP14/Clothing/Cloak/Roles/General/insulated_mantle.rsi
- type: entity
parent: CP14ClothingCloakBase
id: CP14ClothingCloakBlackSyurko
name: black surcoats
description: A long and roomy cloak that serves to protect your armour.
components:
- type: Sprite
sprite: _CP14/Clothing/Cloak/Roles/General/black_syurko.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/Roles/General/black_syurko.rsi
- type: entity
parent: CP14ClothingCloakBase
id: CP14ClothingCloakRedSyurko
name: red surcoats
description: A long and roomy cloak that serves to protect your armour.
components:
- type: Sprite
sprite: _CP14/Clothing/Cloak/Roles/General/red_syurko.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/Roles/General/red_syurko.rsi

View File

@@ -12,4 +12,15 @@
- type: Sprite
sprite: _CP14/Clothing/Cloak/Roles/Guard/blue.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/Roles/Guard/blue.rsi
sprite: _CP14/Clothing/Cloak/Roles/Guard/blue.rsi
- type: entity
parent: CP14ClothingCloakGuardBase
id: CP14ClothingCloakGuardSyurko
name: guard surcoats
description: A long and roomy cloak that serves to protect your armour.
components:
- type: Sprite
sprite: _CP14/Clothing/Cloak/Roles/Guard/guard_syurko.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/Roles/Guard/guard_syurko.rsi

View File

@@ -1,45 +0,0 @@
- type: entity
id: CP14ConstrainedSpawnerBase
abstract: true
parent: MarkerBase
description: lol
categories: [ ForkFiltered ]
components:
- type: Sprite
layers:
- state: red
- type: Physics
bodyType: Static
fixedRotation: true
- type: Fixtures
fixtures:
spawn:
shape:
!type:PhysShapeCircle
radius: 15
hard: false
layer:
- AllMask
- type: TriggerOnCollide
fixtureID: spawn
- type: StepTrigger
requiredTriggeredSpeed: 0
stepOn: true
- type: entity
parent: CP14ConstrainedSpawnerBase
id: CP14ConstrainedSpawnerXeno
name: xeno constrained spawner
components:
- type: TriggerOnCollide
fixtureID: spawn
- type: CP14ConstrainedSpawnerOnTrigger
prototypes:
- CP14MobXeno
- CP14MobXenoDrone
- CP14MobSpaceCobra
- CP14MobSmallPurpleSnake
- CP14MobPurpleSnake
- MobLuminousEntity
- MobLuminousObject
- CP14MobWatcherMagmawing

View File

@@ -0,0 +1,45 @@
- type: marking
id: CP14CarcatTail
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [ CP14Carcat ]
followSkinColor: true
forcedColoring: true
sprites:
- sprite: _CP14/Mobs/Customization/carcat_tail.rsi
state: tail
- type: marking
id: CP14CarcatTailFluffy
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [ CP14Carcat ]
followSkinColor: true
forcedColoring: true
sprites:
- sprite: _CP14/Mobs/Customization/carcat_tail.rsi
state: tail_fluffy
# Animation
- type: marking
id: CP14CarcatTailAnimated
bodyPart: Tail
markingCategory: Tail
speciesRestriction: []
followSkinColor: true
forcedColoring: true
sprites:
- sprite: _CP14/Mobs/Customization/carcat_tail.rsi
state: tail_waggin
- type: marking
id: CP14CarcatTailFluffyAnimated
bodyPart: Tail
markingCategory: Tail
speciesRestriction: []
followSkinColor: true
forcedColoring: true
sprites:
- sprite: _CP14/Mobs/Customization/carcat_tail.rsi
state: tail_fluffy_waggin

View File

@@ -6,6 +6,30 @@
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: 3oclock
- type: marking
id: CP14HumanFacialHair5oclockmoustache
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: 5oclockmoustache
- type: marking
id: CP14HumanFacialHair7oclock
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: 7oclock
- type: marking
id: CP14HumanFacialHair7oclockmoustache
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: 7oclockmoustache
- type: marking
id: CP14HumanFacialHairAbe
bodyPart: FacialHair
@@ -14,6 +38,14 @@
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: abe
- type: marking
id: CP14HumanFacialHairChinlessbeard
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: chinlessbeard
- type: marking
id: CP14HumanFacialHairDwarf
bodyPart: FacialHair
@@ -23,7 +55,47 @@
state: dwarf
- type: marking
id: CP14HumanFacialHairGoateeMush
id: CP14HumanFacialHairDwarf2
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: dwarf2
- type: marking
id: CP14HumanFacialHairElvis
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: elvis
- type: marking
id: CP14HumanFacialHairFiveoclock
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: fiveoclock
- type: marking
id: CP14HumanFacialHairFullbeard
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: fullbeard
- type: marking
id: CP14HumanFacialHairFumanchu
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: fumanchu
- type: marking
id: CP14HumanFacialHairGoateemush
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
@@ -31,44 +103,76 @@
state: goateemush
- type: marking
id: CP14HumanFacialHairBriefs
id: CP14HumanFacialHairGt
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: briefs
state: gt
- type: marking
id: CP14HumanFacialHairCircle
id: CP14HumanFacialHairHip
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: circle
state: hip
- type: marking
id: CP14HumanFacialHairEspanol
id: CP14HumanFacialHairHogan
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: espanol
state: hogan
- type: marking
id: CP14HumanFacialHairImperial
id: CP14HumanFacialHairJensen
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: imperial
state: jensen
- type: marking
id: CP14HumanFacialHairMachete
id: CP14HumanFacialHairLongbeard
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: machete
state: longbeard
- type: marking
id: CP14HumanFacialHairMartialartist
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: martialartist
- type: marking
id: CP14HumanFacialHairMartialartist2
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: martialartist2
- type: marking
id: CP14HumanFacialHairMoonshiner
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: moonshiner
- type: marking
id: CP14HumanFacialHairMoustache
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: moustache
- type: marking
id: CP14HumanFacialHairMutton
@@ -79,20 +183,76 @@
state: mutton
- type: marking
id: CP14HumanFacialHairPigtail
id: CP14HumanFacialHairMuttonmus
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: pigtail
state: muttonmus
- type: marking
id: CP14HumanFacialHairSage
id: CP14HumanFacialHairNeckbeard
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: sage
state: neckbeard
- type: marking
id: CP14HumanFacialHairPencilstache
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: pencilstache
- type: marking
id: CP14HumanFacialHairSelleck
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: selleck
- type: marking
id: CP14HumanFacialHairSideburn
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: sideburn
- type: marking
id: CP14HumanFacialHairSmallstache
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: smallstache
- type: marking
id: CP14HumanFacialHairVandyke
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: vandyke
- type: marking
id: CP14HumanFacialHairVolaju
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: volaju
- type: marking
id: CP14HumanFacialHairWalrus
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: walrus
- type: marking
id: CP14HumanFacialHairWatson
@@ -103,9 +263,9 @@
state: watson
- type: marking
id: CP14HumanFacialHairWhiskers
id: CP14HumanFacialHairWise
bodyPart: FacialHair
markingCategory: FacialHair
sprites:
- sprite: _CP14/Mobs/Customization/human_facial_hair.rsi
state: whiskers
state: wise

View File

@@ -45,8 +45,10 @@
0: Alive
50: Dead
- type: MovementSpeedModifier
baseWalkSpeed: 5
baseSprintSpeed: 7
baseWalkSpeed: 2
baseSprintSpeed: 4
friction: 0.5
acceleration: 3
- type: ProjectileBatteryAmmoProvider
proto: WatcherBolt
fireCost: 50

View File

@@ -1,84 +0,0 @@
- type: entity
id: CP14MobXeno
parent: MobXeno
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster
- type: entity
id: CP14MobXenoDrone
parent: MobXenoDrone
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster
- type: entity
id: CP14MobSpaceCobra
name: cobra
parent: MobCobraSpace
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster
- type: MeleeChemicalInjector
transferAmount: 2
- type: MeleeWeapon
hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
animation: WeaponArcBite
damage:
types:
Piercing: 2
Poison: 2
- type: entity
id: CP14MobPurpleSnake
parent: MobPurpleSnake
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster
- type: MeleeWeapon
angle: 0
animation: WeaponArcBite
damage:
types:
Piercing: 1
- type: MeleeChemicalInjector
transferAmount: 3
- type: entity
id: CP14MobSmallPurpleSnake
parent: MobSmallPurpleSnake
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster
- type: SolutionTransfer
maxTransferAmount: 0.2
- type: MeleeWeapon
angle: 0
animation: WeaponArcBite
damage:
types:
Piercing: 0.5
- type: MeleeChemicalInjector
transferAmount: 2
- type: entity
id: CP14MobWatcherMagmawing
parent: MobWatcherMagmawing
categories: [ ForkFiltered ]
components:
- type: NpcFactionMember
factions:
- CP14Monster

View File

@@ -22,6 +22,7 @@
- type: Speech
speechSounds: CP14Carcat
- type: Thirst
- type: Wagging
- type: Butcherable
butcheringType: Spike
spawned:

View File

@@ -30,6 +30,7 @@
damageContainer: CP14Biological
damageModifierSet: CP14Tiefling
- type: PassiveDamage
damageCap: 0
allowedStates:
- Alive
- Critical

View File

@@ -61,14 +61,6 @@
layers:
- state: stone
map: ["base"]
- type: FloorTile
placeTileSound:
collection: CP14Digging #TODO
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorFoundation
- type: Appearance
- type: Stack
stackType: CP14Stone
@@ -94,204 +86,6 @@
- type: Stack
count: 10
- type: entity
id: CP14WoodLog
parent: BaseItem
name: wooden log
description: A piece of unprocessed wood. Good material for building, or starting a fire.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
shape:
- 0,0,1,0
- type: Sprite
sprite: _CP14/Objects/Materials/wood.rsi
layers:
- state: log
map: ["random"]
- type: RandomSprite
available:
- random:
log: ""
log_2: ""
log_3: ""
- type: Tag
tags:
- CP14FireplaceFuel
- Wooden
- type: Flammable
fireSpread: false
canResistFire: false
alwaysCombustible: true
canExtinguish: true
cP14FireplaceFuel: 30
damage:
types:
Heat: 1
- type: Log
spawnedPrototype: CP14WoodenPlanks1
spawnCount: 3
- type: Appearance
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 25
behaviors:
- !type:PlaySoundBehavior
sound:
collection: WoodDestroy
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: entity
id: CP14WoodenPlanks1
parent: BaseItem
name: wooden planks
description: Treated and ready-to-use wood.
categories: [ ForkFiltered ]
suffix: 1
components:
- type: Item
size: Normal
- type: Sprite
sprite: _CP14/Objects/Materials/wood.rsi
layers:
- state: planks
map: ["base"]
- type: Tag
tags:
- CP14FireplaceFuel
- Wooden
- type: Flammable
fireSpread: false
canResistFire: false
alwaysCombustible: true
canExtinguish: true
cP14FireplaceFuel: 12
damage:
types:
Heat: 1
- type: Appearance
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanks # TODO
- type: Stack
stackType: CP14WoodenPlanks
count: 1
baseLayer: base
layerStates:
- planks
- planks_2
- planks_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14WoodenPlanks: 100
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 25
behaviors:
- !type:PlaySoundBehavior
sound:
collection: WoodDestroy
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: entity
id: CP14WoodenPlanks10
parent: CP14WoodenPlanks1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14WoodenPlanks20
parent: CP14WoodenPlanks1
suffix: 20
components:
- type: Stack
count: 20
- type: entity
id: CP14LucensWoodLog
parent: CP14WoodLog
name: lucens log
components:
- type: Sprite
sprite: _CP14/Objects/Materials/lucens_wood.rsi
layers:
- state: log
map: ["random"]
- type: RandomSprite
available:
- random:
log: ""
log_2: ""
log_3: ""
- type: Log
spawnedPrototype: CP14LucensWoodenPlanks1
spawnCount: 3
- type: entity
id: CP14LucensWoodenPlanks1
parent: CP14WoodenPlanks1
name: lucens planks
suffix: 1
components:
- type: Sprite
sprite: _CP14/Objects/Materials/lucens_wood.rsi
layers:
- state: planks
map: ["base"]
- type: Stack
stackType: CP14LucensWoodenPlanks
count: 1
baseLayer: base
layerStates:
- planks
- planks_2
- planks_3
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorLucensWoodPlanks
- type: entity
id: CP14LucensWoodenPlanks10
parent: CP14LucensWoodenPlanks1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14LucensWoodenPlanks20
parent: CP14LucensWoodenPlanks1
suffix: 20
components:
- type: Stack
count: 20
- type: entity
id: CP14Nail1
parent: BaseItem

View File

@@ -0,0 +1,241 @@
- type: entity
id: CP14WoodLog
parent: BaseItem
name: wooden log
description: A piece of unprocessed wood. Good material for building, or starting a fire.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
shape:
- 0,0,1,0
- type: Sprite
sprite: _CP14/Objects/Materials/wood.rsi
layers:
- state: log
map: ["random"]
- type: RandomSprite
available:
- random:
log: ""
log_2: ""
log_3: ""
- type: Tag
tags:
- CP14FireplaceFuel
- Wooden
- type: Flammable
fireSpread: false
canResistFire: false
alwaysCombustible: true
canExtinguish: true
cP14FireplaceFuel: 30
damage:
types:
Heat: 1
- type: Log
spawnedPrototype: CP14WoodenPlanks1
spawnCount: 3
- type: Appearance
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 25
behaviors:
- !type:PlaySoundBehavior
sound:
collection: WoodDestroy
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: entity
id: CP14WoodenPlanks1
parent: BaseItem
name: wooden planks
description: Treated and ready-to-use wood.
categories: [ ForkFiltered ]
suffix: 1
components:
- type: Item
size: Normal
- type: Sprite
sprite: _CP14/Objects/Materials/wood.rsi
layers:
- state: planks
map: ["base"]
- type: Tag
tags:
- CP14FireplaceFuel
- Wooden
- type: Flammable
fireSpread: false
canResistFire: false
alwaysCombustible: true
canExtinguish: true
cP14FireplaceFuel: 12
damage:
types:
Heat: 1
- type: Appearance
- type: Stack
stackType: CP14WoodenPlanks
count: 1
baseLayer: base
layerStates:
- planks
- planks_2
- planks_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14WoodenPlanks: 100
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 25
behaviors:
- !type:PlaySoundBehavior
sound:
collection: WoodDestroy
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: entity
id: CP14WoodenPlanks10
parent: CP14WoodenPlanks1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14WoodenPlanks20
parent: CP14WoodenPlanks1
suffix: 20
components:
- type: Stack
count: 20
# Lucen
- type: entity
id: CP14LucensWoodLog
parent: CP14WoodLog
name: lucens log
components:
- type: Sprite
sprite: _CP14/Objects/Materials/wood_lucens.rsi
layers:
- state: log
map: ["random"]
- type: RandomSprite
available:
- random:
log: ""
log_2: ""
log_3: ""
- type: Log
spawnedPrototype: CP14LucensWoodenPlanks1
spawnCount: 3
- type: entity
id: CP14LucensWoodenPlanks1
parent: CP14WoodenPlanks1
name: lucens planks
suffix: 1
components:
- type: Sprite
sprite: _CP14/Objects/Materials/wood_lucens.rsi
layers:
- state: planks
map: ["base"]
- type: Stack
stackType: CP14LucensWoodenPlanks
count: 1
baseLayer: base
layerStates:
- planks
- planks_2
- planks_3
- type: entity
id: CP14LucensWoodenPlanks10
parent: CP14LucensWoodenPlanks1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14LucensWoodenPlanks20
parent: CP14LucensWoodenPlanks1
suffix: 20
components:
- type: Stack
count: 20
#Birch
- type: entity
id: CP14BirchWoodLog
parent: CP14WoodLog
name: birch log
components:
- type: Sprite
sprite: _CP14/Objects/Materials/wood_birch.rsi
layers:
- state: log
map: ["random"]
- type: RandomSprite
available:
- random:
log: ""
log_2: ""
log_3: ""
- type: Log
spawnedPrototype: CP14BirchWoodenPlanks1
spawnCount: 3
- type: entity
id: CP14BirchWoodenPlanks1
parent: CP14WoodenPlanks1
name: birch planks
suffix: 1
components:
- type: Sprite
sprite: _CP14/Objects/Materials/wood_birch.rsi
layers:
- state: planks
map: ["base"]
- type: Stack
stackType: CP14BirchWoodenPlanks
count: 1
baseLayer: base
layerStates:
- planks
- planks_2
- planks_3
- type: entity
id: CP14BirchWoodenPlanks10
parent: CP14BirchWoodenPlanks1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14BirchWoodenPlanks20
parent: CP14BirchWoodenPlanks1
suffix: 20
components:
- type: Stack
count: 20

View File

@@ -0,0 +1,264 @@
- type: entity
parent: BaseItem
id: CP14FloorTileBase
description: Makes the floor more pleasant for your feet. And your eyes.
abstract: true
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Objects/Tile/tile.rsi
- type: Item
sprite: _CP14/Objects/Tile/tile.rsi
size: Normal
- type: Stack
count: 1
- type: FloorTile
placeTileSound:
collection: CP14Digging #TODO
params:
variation: 0.03
volume: 2
- type: Damageable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 30
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 20
behaviors:
- !type:PlaySoundBehavior
sound:
collection: MetalBreak
params:
volume: -8
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileFoundation
name: foundation floor tile
components:
- type: Sprite
state: foundation
- type: FloorTile
outputs:
- CP14FloorFoundation
- type: Stack
stackType: CP14FloorTileFoundation
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileMarbleBrick
name: marble brick
components:
- type: Sprite
state: marble
- type: FloorTile
outputs:
- CP14FloorMarble
- type: Stack
stackType: CP14FloorTileMarbleBrick
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileOakWoodplanks
name: oak woodplanks
components:
- type: Sprite
state: oak_woodplanks
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanks
- type: Stack
stackType: CP14FloorTileOakWoodplanks
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileOakWoodplanksBig
name: oak big woodplanks
components:
- type: Sprite
state: oak_woodplanks_big
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanksBig
- type: Stack
stackType: CP14FloorTileOakWoodplanksBig
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileOakWoodplanksCruciform
name: oak cruciform woodplanks
components:
- type: Sprite
state: oak_woodplanks_cruciform
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanksCruciform
- type: Stack
stackType: CP14FloorTileOakWoodplanksCruciform
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileOakWoodplanksStairs
name: oak stairs woodplanks
components:
- type: Sprite
state: oak_woodplanks_stairways
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanksStairways
- type: Stack
stackType: CP14FloorTileOakWoodplanksStairs
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileStonebricks
name: stonebrick
components:
- type: Sprite
state: stonebrick
- type: FloorTile
outputs:
- CP14FloorStonebricks
- type: Stack
stackType: CP14FloorTileStonebricks
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileStonebricksSmallCarved
name: small carved stonebricks
components:
- type: Sprite
state: stonebrick_small_carved
- type: FloorTile
outputs:
- CP14FloorStonebricksSmallCarved1
- type: Stack
stackType: CP14FloorTileStonebricksSmallCarved
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileStonebricksSmallCarved2
name: small carved stonebricks 2
components:
- type: Sprite
state: stonebrick_small_carved2
- type: FloorTile
outputs:
- CP14FloorStonebricksSmallCarved2
- type: Stack
stackType: CP14FloorTileStonebricksSmallCarved2
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileStonebricksSquareCarved
name: square carved stonebricks
components:
- type: Sprite
state: stonebrick_square_carved
- type: FloorTile
outputs:
- CP14FloorStonebricksSquareCarved
- type: Stack
stackType: CP14FloorTileStonebricksSquareCarved
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileBirchWoodplanks
name: birch woodplanks
components:
- type: Sprite
state: birch_woodplanks
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorBirchWoodPlanks
- type: Stack
stackType: CP14FloorTileBirchWoodplanks
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileBirchWoodplanksBig
name: birch big woodplanks
components:
- type: Sprite
state: birch_woodplanks_big
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorBirchWoodPlanksBig
- type: Stack
stackType: CP14FloorTileBirchWoodplanksBig
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileBirchWoodplanksCruciform
name: birch cruciform woodplanks
components:
- type: Sprite
state: birch_woodplanks_cruciform
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorBirchWoodPlanksCruciform
- type: Stack
stackType: CP14FloorTileBirchWoodplanksCruciform
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileBirchWoodplanksStairs
name: birch stairs woodplanks
components:
- type: Sprite
state: birch_woodplanks_stairways
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorBirchWoodPlanksStairways
- type: Stack
stackType: CP14FloorTileBirchWoodplanksStairs

View File

@@ -88,7 +88,6 @@
- type: CP14Seed
plantProto: CP14PlantPepper
- type: entity
id: CP14SeedSage
name: sage seeds

View File

@@ -0,0 +1,49 @@
- type: entity
parent: BaseItem
id: CP14FishingRod
name: fishing rod
description: Wooden stick with string attached.
categories: [ ForkFiltered ]
components:
- type: Item
shape:
- 0,0,0,1
- type: Sprite
sprite: _CP14/Objects/Tools/fishing_rod.rsi
state: icon
- type: Damageable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 50
behaviors:
- !type:PlaySoundBehavior
sound:
collection: MetalBreak
- !type:CP14ModularDisassembleBehavior
- !type:DoActsBehavior
acts: ["Destruction"]
- type: CP14ModularCraftStartPoint
startSlots:
- FishingRodShaft
- type: MeleeWeapon
angle: 45
attackRate: 1
wideAnimationRotation: 135
wideAnimation: CP14WeaponArcSlash
damage:
types:
Blunt: 0.1
soundHit:
collection: MetalThud
cPAnimationLength: 0.25
- type: Clothing
equipDelay: 0.25
unequipDelay: 0.25
quickEquip: false
breakOnMove: false
slots:
- neck
- type: CP14FishingRod

View File

@@ -9,6 +9,7 @@
snap:
- Wall
components:
- type: CP14FishingPool
- type: PlacementReplacement
key: floorTile
- type: Sprite
@@ -120,4 +121,4 @@
- CP14GatherableWaterAirLily
chance: 1
offset: 0.2
deleteSpawnerAfterSpawn: false
deleteSpawnerAfterSpawn: false

View File

@@ -20,5 +20,5 @@
id: CP14GatherCucumber
entries:
- id: CP14FoodCucumber
amount: 1
maxAmount: 3
amount: 2
maxAmount: 4

View File

@@ -22,5 +22,5 @@
id: CP14GatherPepper
entries:
- id: CP14FoodPepper
amount: 1
maxAmount: 3
amount: 2
maxAmount: 4

View File

@@ -21,4 +21,4 @@
entries:
- id: CP14FoodPumpkin
amount: 2
maxAmount: 3
maxAmount: 4

View File

@@ -22,5 +22,5 @@
id: CP14GatherSage
entries:
- id: CP14WildSage
amount: 1
maxAmount: 3
amount: 2
maxAmount: 4

View File

@@ -20,5 +20,5 @@
id: CP14GatherTomatoes
entries:
- id: CP14FoodTomatoes
amount: 1
maxAmount: 3
amount: 2
maxAmount: 4

View File

@@ -24,7 +24,7 @@
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.35,-0.4,0.35,0.4"
bounds: "-0.2,-0.2,0.2,0.2"
density: 1000
layer:
- WallLayer
@@ -82,15 +82,6 @@
components:
- type: Sprite
offset: 0,1.55
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.18,-0.35,0.18,0.35"
density: 2000
layer:
- WallLayer
- type: Destructible
thresholds:
- trigger:
@@ -148,7 +139,7 @@
id: CP14FloraTreeSnow
components:
- type: Sprite
sprite: _CP14/Structures/Flora/snow_trees.rsi
sprite: _CP14/Structures/Flora/tree_snow.rsi
layers:
- state: tree01
map: ["random"]
@@ -256,15 +247,6 @@
- random:
tree01: ""
tree02: ""
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.18,-0.35,0.18,0.35"
density: 2000
layer:
- WallLayer
- type: Destructible
thresholds:
- trigger:
@@ -297,3 +279,151 @@
CP14LucensWoodLog:
min: 3
max: 6
- type: entity
parent: CP14BaseTree
id: CP14FloraTreeBirchSmall
suffix: Small
components:
- type: Sprite
offset: 0,1.3
sprite: _CP14/Structures/Flora/tree_birch_small.rsi
layers:
- state: tree01
map: ["random"]
- type: RandomSprite
available:
- random:
tree01: ""
tree02: ""
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 100
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 75
behaviors:
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/tree_fell.ogg
params:
volume: 5
variation: 0.05
- !type:DoActsBehavior
acts: [ "Destruction" ]
- !type:SpawnEntitiesBehavior
spawn:
CP14BirchWoodLog:
min: 1
max: 2
- type: entity
parent: CP14BaseTree
id: CP14FloraTreeBirchMedium
suffix: Medium
components:
- type: Sprite
offset: 0,1.8
sprite: _CP14/Structures/Flora/tree_birch_medium.rsi
layers:
- state: tree01
map: ["random"]
- type: RandomSprite
available:
- random:
tree01: ""
tree02: ""
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 100
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 75
behaviors:
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/tree_fell.ogg
params:
volume: 5
variation: 0.05
- !type:DoActsBehavior
acts: [ "Destruction" ]
- !type:SpawnEntitiesBehavior
spawn:
CP14BirchWoodLog:
min: 2
max: 4
- type: entity
parent: CP14BaseTree
id: CP14FloraTreeBirchLarge
suffix: Large
components:
- type: Sprite
offset: 0,2.6
sprite: _CP14/Structures/Flora/tree_birch_big.rsi
layers:
- state: tree01
map: ["random"]
- type: RandomSprite
available:
- random:
tree01: ""
tree02: ""
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 100
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 75
behaviors:
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/tree_fell.ogg
params:
volume: 5
variation: 0.05
- !type:DoActsBehavior
acts: [ "Destruction" ]
- !type:SpawnEntitiesBehavior
spawn:
CP14BirchWoodLog:
min: 3
max: 6

View File

@@ -128,6 +128,18 @@
node: WallWooden
- type: CP14WallpaperHolder
- type: entity
id: CP14WallWoodenBirch
parent: CP14WallWooden
components:
- type: Sprite
sprite: _CP14/Structures/Walls/wooden_wall_birch.rsi
- type: Icon
sprite: _CP14/Structures/Walls/wooden_wall_birch.rsi
- type: Construction
graph: CP14WallWood
node: WallWoodenBirch
- type: entity
id: CP14WallWoodenPalisade
name: palisade

View File

@@ -0,0 +1,4 @@
- type: CP14FishingPoolLootTable
id: Default
prototypes:
- CP14BaseLockpick

View File

@@ -0,0 +1,13 @@
- type: CP14FishingProcessStyleSheet
id: Default
background:
texture: /Textures/_CP14/Interface/Fishing/Styles/Default/background.png
offset: 10, 0
handleOffset: 14, 5
handleSize: 11, 141
progressOffset: 4, 4
progressSize: 2, 142
handle:
topTexture: /Textures/_CP14/Interface/Fishing/Styles/Default/Handle/top.png
middleTexture: /Textures/_CP14/Interface/Fishing/Styles/Default/Handle/middle.png
bottomTexture: /Textures/_CP14/Interface/Fishing/Styles/Default/Handle/bottom.png

View File

@@ -14,6 +14,8 @@
- CP14ClothingCloakBlue
- CP14ClothingCloakFurCoat
- CP14ClothingCloakInsulated
- CP14ClothingCloakBlackSyurko
- CP14ClothingCloakRedSyurko
- type: loadout
id: CP14ClothingCloakFurcapeBlack
@@ -25,6 +27,16 @@
equipment:
cloak: CP14ClothingCloakFurcapeBlue
- type: loadout
id: CP14ClothingCloakBlackSyurko
equipment:
cloak: CP14ClothingCloakBlackSyurko
- type: loadout
id: CP14ClothingCloakRedSyurko
equipment:
cloak: CP14ClothingCloakRedSyurko
- type: loadout
id: CP14ClothingCloakMaidArpon
equipment:

View File

@@ -7,12 +7,18 @@
minLimit: 0
loadouts:
- CP14ClothingCloakGuardBlue
- CP14ClothingCloakGuardSyurko
- type: loadout
id: CP14ClothingCloakGuardBlue
equipment:
cloak: CP14ClothingCloakGuardBlue
- type: loadout
id: CP14ClothingCloakGuardSyurko
equipment:
cloak: CP14ClothingCloakGuardSyurko
# Head
- type: loadoutGroup

View File

@@ -26,7 +26,7 @@
id: CP14SkillTreePyrokinetic
dummyEntity: CP14SkillTreePyrokineticLoadoutDummy
skillTree:
Pyrokinetic: 1
Pyrokinetic: 2
@@ -43,7 +43,7 @@
id: CP14SkillTreeHydrosophistry
dummyEntity: CP14SkillTreeHydrosophistryLoadoutDummy
skillTree:
Hydrosophistry: 1
Hydrosophistry: 2
- type: entity
@@ -59,7 +59,7 @@
id: CP14SkillTreeIllusion
dummyEntity: CP14SkillTreeIllusionLoadoutDummy
skillTree:
Illusion: 1
Illusion: 2
- type: entity
@@ -75,7 +75,7 @@
id: CP14SkillTreeMetamagic
dummyEntity: CP14SkillTreeMetamagicLoadoutDummy
skillTree:
Metamagic: 1
Metamagic: 2
- type: entity
@@ -91,7 +91,7 @@
id: CP14SkillTreeHealing
dummyEntity: CP14SkillTreeHealingLoadoutDummy
skillTree:
Healing: 1
Healing: 2
- type: entity
@@ -107,4 +107,4 @@
id: CP14SkillTreeAtlethic
dummyEntity: CP14SkillTreeAtlethicLoadoutDummy
skillTree:
Atlethic: 1
Atlethic: 2

View File

@@ -1,54 +0,0 @@
- type: gameMap
id: Factoria
mapName: "Factoria"
mapPath: /Maps/_CP14/factoria.yml
maxRandomOffset: 0
randomRotation: false
minPlayers: 0
stations:
Factoria:
stationProto: CP14BaseExpedition
components:
- type: StationNameSetup
mapNameTemplate: "Factoria"
- type: StationJobs
availableJobs:
#Mercenary
CP14Guildmaster: [1, 1]
CP14Adventurer: [ -1, -1 ]
#Artisans
CP14Apprentice: [ 5, 5 ]
CP14Alchemist: [ 2, 2 ]
CP14Blacksmith: [ 2, 2 ]
CP14Innkeeper: [ 3, 4 ]
CP14Merchant: [2, 2]
#Guard
CP14Guard: [8, 8]
CP14GuardCommander: [1, 1]
- type: CP14StationZLevels
defaultMapLevel: 0
levels:
-1:
path: /Maps/_CP14/factoria_d.yml
- type: CP14StationKeyDistribution
keys:
- Alchemy1
- Alchemy2
- Blacksmith1
- Blacksmith2
- PersonalHouse1
- PersonalHouse2
- PersonalHouse3
- PersonalHouse4
- PersonalHouse5
- PersonalHouse6
- PersonalHouse7
- PersonalHouse8
- PersonalHouse9
- PersonalHouse10
- PersonalHouse11
- PersonalHouse12
- PersonalHouse13
- PersonalHouse14
- PersonalHouse15
- PersonalHouse16

View File

@@ -84,7 +84,7 @@
stackEntity: CP14LucensWoodenPlanks1
name: cp14-material-lucens-planks
unit: materials-unit-bar
icon: { sprite: _CP14/Objects/Materials/lucens_wood.rsi, state: planks_2 }
icon: { sprite: _CP14/Objects/Materials/wood_lucens.rsi, state: planks_2 }
color: "#1a1e22"
price: 0

View File

@@ -220,7 +220,7 @@
- CP14DemiplaneHot
layers:
- !type:OreDunGen
entity: CP14MobSlimeBase
entity: CP14MobWatcherIce
count: 2
minGroupSize: 2
maxGroupSize: 3
@@ -239,7 +239,7 @@
- CP14DemiplaneCold
layers:
- !type:OreDunGen
entity: CP14MobSlimeBase
entity: CP14MobWatcherMagma
count: 2
minGroupSize: 2
maxGroupSize: 3

View File

@@ -126,8 +126,12 @@
- CP14FloorGrassLight
- CP14FloorGrassTall
entities:
- CP14FloraTreeGreen
- CP14FloraTreeGreen
- CP14FloraTreeGreenLarge
- CP14FloraTreeBirchSmall
- CP14FloraTreeBirchMedium
- CP14FloraTreeBirchLarge
- !type:BiomeEntityLayer # More Rocks
threshold: 0.7
noise:
@@ -174,8 +178,12 @@
- CP14FloorGrassLight
- CP14FloorGrassTall
entities:
- CP14FloraTreeGreen
- CP14FloraTreeGreen
- CP14FloraTreeGreenLarge
- CP14FloraTreeBirchSmall
- CP14FloraTreeBirchMedium
- CP14FloraTreeBirchLarge
- type: biomeTemplate
id: CP14GrasslandHills # Холмы

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14WoodenBed
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
- material: CP14Cloth
amount: 1

View File

@@ -8,7 +8,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
- material: CP14Nail
amount: 2

View File

@@ -8,7 +8,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
- material: CP14Nail
amount: 2

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14CurtainsWhite
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 1
doAfter: 2
- material: CP14Nail

View File

@@ -11,7 +11,7 @@
- material: CP14Stone
amount: 3
doAfter: 2
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2

View File

@@ -10,7 +10,7 @@
completed:
- !type:SnapToGrid { }
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 5
doAfter: 3
- node: CP14mannequin

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14WallmountOrdersBorder
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 3

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14ChairWooden
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- node: CP14ChairWooden
@@ -24,7 +24,7 @@
edges:
- to: CP14BenchWood
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14BenchWood

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14TableWooden
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14TableWooden
@@ -24,7 +24,7 @@
edges:
- to: CP14TableWoodenRound
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14TableWoodenRound
@@ -40,7 +40,7 @@
edges:
- to: CP14TableWoodenCounter
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14TableWoodenCounter
@@ -56,7 +56,7 @@
edges:
- to: CP14Workbench
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14Workbench
@@ -72,7 +72,7 @@
edges:
- to: CP14WorkbenchCooking
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14WorkbenchCooking
@@ -88,7 +88,7 @@
edges:
- to: CP14WorkbenchSewing
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 2
- node: CP14WorkbenchSewing

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14WoodenPallet
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- node: CP14WoodenPallet

View File

@@ -9,7 +9,7 @@
- !type:SnapToGrid
southRotation: true
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
@@ -18,16 +18,13 @@
edges:
- to: start
completed:
- !type:GivePrototype
prototype: CP14WoodenPlanks1
amount: 2
- !type:DeleteEntity {}
steps:
- tool: Screwing
doAfter: 1
- to: CP14target
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 1
- material: CP14Nail
@@ -64,7 +61,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 5
- material: CP14Cloth
amount: 2

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14BaseBarrel
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 5
doAfter: 3
- material: CP14Nail
@@ -27,7 +27,7 @@
edges:
- to: CP14CraneBarrel
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 5
doAfter: 3
- material: CP14Nail
@@ -46,7 +46,7 @@
edges:
- to: CP14CraneBarrelSmall
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
doAfter: 3
- material: CP14Nail

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14WoodenChestFrame
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
@@ -17,7 +17,7 @@
edges:
- to: CP14WoodenChest
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- material: CP14Nail

View File

@@ -8,7 +8,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 3
- material: CP14Cloth
amount: 2

View File

@@ -8,7 +8,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
- material: CP14Nail
amount: 1
@@ -26,7 +26,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
- material: CP14Nail
amount: 2

View File

@@ -8,7 +8,7 @@
edges:
- to: CP14WoodenDoorFrame
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
@@ -30,7 +30,7 @@
doAfter: 1
- to: CP14WoodenDoor
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- to: CP14WoodenDoorWindowed
@@ -47,9 +47,6 @@
edges:
- to: start
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
- !type:DeleteEntity {}
steps:
- tool: Prying #TODO - new tool
@@ -76,10 +73,6 @@
entity: CP14WoodenDoor
edges:
- to: CP14WoodenDoorFrame
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
steps:
- tool: Prying #TODO - new tool
doAfter: 5
@@ -88,10 +81,6 @@
entity: CP14WoodenDoorMirrored
edges:
- to: CP14WoodenDoorFrameMirrored
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
steps:
- tool: Prying #TODO - new tool
doAfter: 5
@@ -100,10 +89,6 @@
entity: CP14WoodenDoorWindowed
edges:
- to: CP14WoodenDoorFrame
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
steps:
- tool: Prying #TODO - new tool
doAfter: 5
@@ -112,10 +97,6 @@
entity: CP14WoodenDoorWindowedMirrored
edges:
- to: CP14WoodenDoorFrameMirrored
completed:
- !type:SpawnPrototype
prototype: CP14WoodenPlanks1
amount: 2
steps:
- tool: Prying #TODO - new tool
doAfter: 5

View File

@@ -8,32 +8,32 @@
edges:
- to: CP14FenceWoodSmallStraight
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- to: CP14FenceWoodSmallCorner
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- to: CP14FenceWoodSmallGate
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
- to: CP14FenceWoodStraight
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
doAfter: 2
- to: CP14FenceWoodCorner
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
doAfter: 2
- to: CP14FenceWoodGate
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
doAfter: 2

Some files were not shown because too many files have changed in this diff Show More