Compare commits

..

20 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
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
268 changed files with 2622 additions and 114725 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

@@ -97,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.Offset(new Vector2(_random.NextFloat(-0.5f, 0.5f), _random.NextFloat(-0.5f, 0.5f))));
_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

@@ -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

@@ -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,7 +1,8 @@
cp14-stack-dirt-block = dirt blocks
cp14-stack-stone-block = stone blocks
cp14-stack-marble-block = marble rocks
cp14-stack-wood-planks = wooden planks
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
@@ -22,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

@@ -10,7 +10,6 @@ cp14-tiles-sand = sand
cp14-tiles-snow = snow
cp14-tiles-snow-deep = deep snow
cp14-tiles-snow-deep-deep = deep deep snow
cp14-tiles-marble-cave = marble floor
# Produced
cp14-tiles-foundation = foundation
@@ -62,7 +61,7 @@ cp14-tiles-stonebricks-small-carved2 = carved brick floor
cp14-tiles-stonebricks-square-carved = carved brick floor
cp14-tiles-stonebricks = stonebrick floor
cp14-tiles-stonebricks-weather = street stonebrick floor
cp14-tiles-stonebricks-marble = marble brick floor
cp14-tiles-stonebricks-marble = marble floor
cp14-tiles-lucens-woodplanks = lucens woodplanks
cp14-tiles-lucens-woodplanks-big = big lucens planks

View File

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

View File

@@ -10,7 +10,6 @@ cp14-tiles-sand = песок
cp14-tiles-snow = снег
cp14-tiles-snow-deep = глубокий снег
cp14-tiles-snow-deep-deep = очень глубокий снег
cp14-tiles-marble-cave = мраморный пол
# Produced
cp14-tiles-foundation = фундамент
@@ -62,7 +61,7 @@ cp14-tiles-stonebricks-small-carved2 = пол из резного кирпича
cp14-tiles-stonebricks-square-carved = пол из резного кирпича
cp14-tiles-stonebricks = каменный кирпичный пол
cp14-tiles-stonebricks-weather = уличный каменный кирпичный пол
cp14-tiles-stonebricks-marble = мраморный кирпич
cp14-tiles-stonebricks-marble = мраморный пол
cp14-tiles-lucens-woodplanks = люценcовые доски
cp14-tiles-lucens-woodplanks-big = большие люценcовые доски

View File

@@ -43,10 +43,9 @@ entities:
data: {}
- type: CP14CloudShadows
- type: MapLight
ambientLightColor: "#DDDDDDFF"
- type: LightCycle
- type: SunShadow
alpha: 0.8
direction: 1, -1.5
- type: SunShadowCycle
- type: Biome
forcedMarkerLayers: []
markerLayers: []

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -84,18 +84,4 @@
- type: Sprite
sprite: _CP14/Clothing/Head/Roles/General/jagermeister_hat.rsi
- type: Clothing
sprite: _CP14/Clothing/Head/Roles/General/jagermeister_hat.rsi
- type: entity
parent: CP14ClothingHeadBase
id: CP14ClothingHeadStrawHat
name: straw hat
description: Easy to make, not too bad to lose.
components:
- type: Sprite
sprite: _CP14/Clothing/Head/Roles/General/straw_hat.rsi
- type: Clothing
sprite: _CP14/Clothing/Head/Roles/General/straw_hat.rsi
- type: Construction
graph: CP14StrawHat
node: cp14headstrawhat
sprite: _CP14/Clothing/Head/Roles/General/jagermeister_hat.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

@@ -137,18 +137,4 @@
color: green
- state: frame
- type: CP14BiomeSpawner
biome: CP14LeafMaze
- type: entity
id: CP14BiomeSpawnerMarbleCave
parent: CP14BaseBiomeSpawner
suffix: Marble cave
components:
- type: Sprite
layers:
- state: cave
- state: frame
- sprite: _CP14/Objects/Materials/marble_block.rsi
state: stone_3
- type: CP14BiomeSpawner
biome: CP14MarbleCaves
biome: CP14LeafMaze

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

@@ -1,124 +0,0 @@
- type: entity
id: CP14DirtBlock1
parent: BaseItem
name: dirt block
description: A block of excellent black soil.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
- type: Sprite
noRot: true
sprite: _CP14/Objects/Materials/dirt_block.rsi
layers:
- state: dirt
map: ["base"]
- type: FloorTile
placeTileSound:
collection: CP14Digging
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorDirt
- type: Appearance
- type: Stack
stackType: CP14Dirt
count: 1
baseLayer: base
layerStates:
- dirt
- dirt_2
- dirt_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14Dirt: 100
- type: CP14MagicEssenceContainer
essences:
Earth: 1
- type: entity
id: CP14DirtBlock10
parent: CP14DirtBlock1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14StoneBlock1
parent: BaseItem
name: stone block
description: A block of cold stone.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
- type: Sprite
noRot: true
sprite: _CP14/Objects/Materials/stone_block.rsi
layers:
- state: stone
map: ["base"]
- type: Appearance
- type: Stack
stackType: CP14Stone
count: 1
baseLayer: base
layerStates:
- stone
- stone_2
- stone_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14Stone: 100
- type: CP14MagicEssenceContainer
essences:
Earth: 1
- type: entity
id: CP14StoneBlock10
parent: CP14StoneBlock1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14MarbleBlock1
parent: BaseItem
name: marble block
description: A block of white marble.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
- type: Sprite
noRot: true
sprite: _CP14/Objects/Materials/marble_block.rsi
layers:
- state: stone
map: ["base"]
- type: Appearance
- type: Stack
stackType: CP14MarbleStone
count: 1
baseLayer: base
layerStates:
- stone
- stone_2
- stone_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14MarbleStone: 100
- type: entity
id: CP14MarbleBlock10
parent: CP14MarbleBlock1
suffix: 10
components:
- type: Stack
count: 10

View File

@@ -1,192 +1,90 @@
- type: entity
id: CP14WoodLog
id: CP14DirtBlock1
parent: BaseItem
name: wooden log
description: A piece of unprocessed wood. Good material for building, or starting a fire.
name: dirt block
description: A block of excellent black soil.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
shape:
- 0,0,1,0
- type: Sprite
sprite: _CP14/Objects/Materials/wood.rsi
noRot: true
sprite: _CP14/Objects/Materials/dirt_block.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
- state: dirt
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
- 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
collection: CP14Digging
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorLucensWoodPlanks
- CP14FloorDirt
- type: Appearance
- type: Stack
stackType: CP14Dirt
count: 1
baseLayer: base
layerStates:
- dirt
- dirt_2
- dirt_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14Dirt: 100
- type: CP14MagicEssenceContainer
essences:
Earth: 1
- type: entity
id: CP14LucensWoodenPlanks10
parent: CP14LucensWoodenPlanks1
id: CP14DirtBlock10
parent: CP14DirtBlock1
suffix: 10
components:
- type: Stack
count: 10
- type: entity
id: CP14LucensWoodenPlanks20
parent: CP14LucensWoodenPlanks1
suffix: 20
id: CP14StoneBlock1
parent: BaseItem
name: stone block
description: A block of cold stone.
categories: [ ForkFiltered ]
components:
- type: Item
size: Normal
- type: Sprite
noRot: true
sprite: _CP14/Objects/Materials/stone_block.rsi
layers:
- state: stone
map: ["base"]
- type: Appearance
- type: Stack
stackType: CP14Stone
count: 1
baseLayer: base
layerStates:
- stone
- stone_2
- stone_3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14Stone: 100
- type: CP14MagicEssenceContainer
essences:
Earth: 1
- type: entity
id: CP14StoneBlock10
parent: CP14StoneBlock1
suffix: 10
components:
- type: Stack
count: 20
count: 10
- type: entity
id: CP14Nail1

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

@@ -66,19 +66,6 @@
- type: Stack
stackType: CP14FloorTileMarbleBrick
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileMarbleSmallbricks
name: marble small brick
components:
- type: Sprite
state: marble_smallbricks
- type: FloorTile
outputs:
- CP14FloorMarbleSmallbricks
- type: Stack
stackType: CP14FloorTileMarbleSmallbricks
- type: entity
parent: CP14FloorTileBase
id: CP14FloorTileOakWoodplanks
@@ -87,6 +74,11 @@
- type: Sprite
state: oak_woodplanks
- type: FloorTile
placeTileSound:
path: /Audio/Effects/woodenclosetclose.ogg
params:
variation: 0.03
volume: 2
outputs:
- CP14FloorOakWoodPlanks
- type: Stack
@@ -196,4 +188,77 @@
outputs:
- CP14FloorStonebricksSquareCarved
- type: Stack
stackType: CP14FloorTileStonebricksSquareCarved
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

@@ -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

@@ -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

@@ -1,7 +1,8 @@
- type: entity
parent:
- BaseStructure
id: CP14TableBase
- CP14BaseFlammable
id: CP14WoodenTableBase
categories: [ ForkFiltered ]
abstract: true
components:
@@ -16,31 +17,6 @@
- TableMask
layer:
- TableLayer
- type: Damageable
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 60
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/picaxe2.ogg
- type: FootstepModifier
footstepSoundCollection:
collection: FootstepHull
- type: Climbable
- type: PlaceableSurface
- type: entity
parent:
- CP14TableBase
- CP14BaseFlammable
id: CP14WoodenTableBase
abstract: true
components:
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
@@ -76,6 +52,8 @@
- type: FireVisuals
sprite: _CP14/Effects/fire.rsi
normalState: full
- type: Climbable
- type: PlaceableSurface
- type: entity
parent: CP14WoodenTableBase
@@ -138,25 +116,4 @@
state: full
- type: Construction
graph: CP14TableWoodenCounter
node: CP14TableWoodenCounter
- type: entity
parent: CP14TableBase
id: CP14TableMarble
name: marble table
description: Exquisite white marble table.
components:
- type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Metallic
- type: Sprite
sprite: _CP14/Structures/Furniture/Tables/marble.rsi
- type: Icon
sprite: _CP14/Structures/Furniture/Tables/marble.rsi
state: full
- type: IconSmooth
key: state
base: state
- type: FootstepModifier
footstepSoundCollection:
collection: FootstepFloor
node: CP14TableWoodenCounter

View File

@@ -38,39 +38,6 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: entity
id: CP14WallMarbleStone
name: marble
parent: CP14WallStone
components:
- type: Sprite
sprite: _CP14/Structures/Walls/Natural/marble_stone.rsi
- type: Icon
sprite: _CP14/Structures/Walls/Natural/marble_stone.rsi
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 350
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/break_stone.ogg
params:
volume: -6
- !type:SpawnEntitiesBehavior
spawn:
CP14MarbleBlock1:
min: 2
max: 3
- !type:DoActsBehavior
acts: ["Destruction"]
- type: entity
id: CP14WallStoneIndestructable

View File

@@ -71,25 +71,6 @@
sprite: _CP14/Structures/Walls/marblebricks_stone_wall.rsi
- type: IconSmooth
base: stonebricks
- type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Rock
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/break_stone.ogg
params:
volume: -6
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Construction
graph: CP14WallMarbleBrick
node: CP14WallMarbleBrick
- type: CP14WallpaperHolder
- type: entity
@@ -147,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

@@ -202,7 +202,6 @@
- CP14ClothingHeadJestersCap
- CP14ClothingHeadHuntersHat
- CP14ClothingHeadJagermeisterHat
- CP14ClothingHeadStrawHat
- type: loadout
id: CP14ClothingHeadMetalHeadband
@@ -224,11 +223,6 @@
equipment:
head: CP14ClothingHeadJestersCap
- type: loadout
id: CP14ClothingHeadStrawHat
equipment:
head: CP14ClothingHeadStrawHat
- type: loadout
id: CP14ClothingHeadHuntersHat
equipment:

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

@@ -25,15 +25,6 @@
color: "#555963"
price: 0
- type: material
id: CP14MarbleStone
stackEntity: CP14MarbleBlock1
name: cp14-material-stone-block #TODO
unit: materials-unit-chunk
icon: { sprite: _CP14/Objects/Materials/marble_block.rsi, state: stone_2 }
color: "#555963"
price: 0
- type: material
id: CP14Nail
stackEntity: CP14Nail1
@@ -93,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

@@ -41,10 +41,6 @@
biomeTemplate: CP14CavesFloor
tileMask:
- CP14FloorGrass
- !type:BiomeDunGen
biomeTemplate: CP14MarbleCaves
tileMask:
- CP14FloorMarble
- type: dungeonConfig
id: CP14DemiplaneCavesRingFloorMaskStone
@@ -106,9 +102,9 @@
- !type:NoiseDistanceDunGen
size: 50, 50
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.8
blendWeight: 0.6
layers:
- tile: CP14FloorMarble
- tile: Space
threshold: 0.50
noise:
frequency: 0.010
@@ -116,4 +112,18 @@
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 50
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.2
layers:
- tile: Space
threshold: 0.50
noise:
frequency: 0.08
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5

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

@@ -1,47 +0,0 @@
- type: biomeTemplate
id: CP14MarbleCaves
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: CP14FloorMarbleCave
#Rocks
- !type:BiomeEntityLayer
threshold: 0.4
noise:
seed: 1
noiseType: OpenSimplex2
fractalType: FBm
frequency: 2
allowedTiles:
- CP14FloorMarbleCave
entities:
- CP14RockSmall
# Lakes
- !type:BiomeEntityLayer
threshold: -0.45
invert: true
noise:
seed: 12
noiseType: Perlin
fractalType: Ridged
octaves: 1
frequency: 0.1
gain: 0.5
allowedTiles:
- CP14FloorMarbleCave
entities:
- CP14FloorLava
- !type:BiomeEntityLayer
threshold: -0.45
invert: true
noise:
seed: 0
noiseType: Perlin
fractalType: Ridged
octaves: 1
frequency: 0.1
gain: 0.5
allowedTiles:
- CP14FloorMarbleCave
entities:
- CP14WallMarbleStone

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

View File

@@ -6,7 +6,7 @@
edges:
- to: CP14RoofWooden
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2

View File

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

View File

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

View File

@@ -1,16 +0,0 @@
- type: constructionGraph
id: CP14WallMarbleBrick
start: start
graph:
- node: start
edges:
- to: CP14WallMarbleBrick
completed:
- !type:SnapToGrid
southRotation: true
steps:
- material: CP14MarbleStone
amount: 3
doAfter: 2
- node: CP14WallMarbleBrick
entity: CP14WallMarbleBrick

View File

@@ -9,7 +9,7 @@
- !type:SnapToGrid
southRotation: true
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 2
doAfter: 2
@@ -35,6 +35,16 @@
doAfter: 1
- tool: CP14Hammering
doAfter: 2
- to: WallWoodenBirch
steps:
- material: CP14BirchWoodenPlanks
amount: 2
doAfter: 1
- material: CP14Nail
amount: 2
doAfter: 1
- tool: CP14Hammering
doAfter: 2
- to: WindowWooden
steps:
- material: CP14GlassSheet
@@ -49,6 +59,14 @@
- tool: CP14Hammering
doAfter: 2
- node: WallWoodenBirch
entity: CP14WallWoodenBirch
edges:
- to: FrameWooden
steps:
- tool: CP14Hammering
doAfter: 2
- node: WindowWooden
entity: CP14WindowWooden
@@ -63,7 +81,7 @@
completed:
- !type:SnapToGrid
steps:
- material: CP14WoodenPlanks
- stackGroup: WoodenPlanks
amount: 4
doAfter: 2
- node: CP14WallWoodenPalisade

View File

@@ -16,6 +16,24 @@
conditions:
- !type:TileNotBlocked
- type: construction
crystallPunkAllowed: true
name: wooden birch wall
description: Sturdy enough to cover you from threats or cold winds.
id: CP14WoodenWallBirch
graph: CP14WallWood
startNode: start
targetNode: WallWoodenBirch
category: construction-category-structures
icon:
sprite: _CP14/Structures/Walls/wooden_wall_birch.rsi
state: full
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked
- type: construction
crystallPunkAllowed: true
name: palisade
@@ -72,7 +90,7 @@
- type: construction
crystallPunkAllowed: true
name: stonebrick wall
name: stone wall
description: Sturdy enough to cover you from threats or cold winds.
id: CP14WallStonebrick
graph: CP14WallStonebrick
@@ -88,24 +106,6 @@
conditions:
- !type:TileNotBlocked
- type: construction
crystallPunkAllowed: true
name: marble brick wall
description: Sturdy enough to cover you from threats or cold winds.
id: CP14WallMarbleBrick
graph: CP14WallMarbleBrick
startNode: start
targetNode: CP14WallMarbleBrick
category: construction-category-structures
icon:
sprite: _CP14/Structures/Walls/marblebricks_stone_wall.rsi
state: full
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked
- type: construction
crystallPunkAllowed: true
name: iron grille

View File

@@ -1,17 +0,0 @@
- type: constructionGraph
id: CP14StrawHat
start: start
graph:
- node: start
edges:
- to: cp14headstrawhat
steps:
- tag: CP14Wheat
name: wheat
icon:
sprite: _CP14/Objects/Flora/Farm/wheat.rsi
state: base1
doAfter: 4
- node: cp14headstrawhat
entity: CP14ClothingHeadStrawHat

View File

@@ -11,17 +11,3 @@
icon:
sprite: _CP14/Clothing/Head/Produced/wreath.rsi
state: icon
- type: construction
crystallPunkAllowed: true
name: straw hat
id: cp14headstrawhat
graph: CP14StrawHat
startNode: start
targetNode: cp14headstrawhat
category: construction-category-clothing
objectType: Item
description: Easy to make, not too bad to lose.
icon:
sprite: _CP14/Clothing/Head/Roles/General/straw_hat.rsi
state: icon

View File

@@ -3,8 +3,8 @@
tag: CP14RecipeWorkbench
craftTime: 2
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 3
- !type:ProtoIdResource
protoId: CP14Rope
@@ -16,8 +16,8 @@
tag: CP14RecipeWorkbench
craftTime: 3
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 2
- !type:StackResource
stack: CP14Nail
@@ -29,8 +29,8 @@
tag: CP14RecipeWorkbench
craftTime: 3
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 2
result: CP14SmokingPipe
@@ -39,8 +39,8 @@
tag: CP14RecipeWorkbench
craftTime: 3
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 2
result: CP14Plate
@@ -49,8 +49,8 @@
tag: CP14RecipeWorkbench
craftTime: 3
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 2
- !type:StackResource
stack: CP14Cloth
@@ -115,8 +115,8 @@
tag: CP14RecipeWorkbench
craftTime: 2
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
count: 4
- !type:ProtoIdResource
protoId: CP14String
@@ -150,8 +150,8 @@
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14WoodenPlanks
- !type:StackGroupResource
group: WoodenPlanks
- !type:ProtoIdResource
protoId: CP14CrystalShardBase
result: CP14CrayonWhite

View File

@@ -15,22 +15,11 @@
craftTime: 1
requirements:
- !type:StackResource
stack: CP14MarbleStone
stack: CP14Stone
count: 1
result: CP14FloorTileMarbleBrick
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileMarbleSmallbricks
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14MarbleStone
count: 1
result: CP14FloorTileMarbleSmallbricks
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileStonebricks
tag: CP14RecipeWorkbench
@@ -117,4 +106,48 @@
stack: CP14WoodenPlanks
count: 1
result: CP14FloorTileOakWoodplanksStairs
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileBirchWoodplanks
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14BirchWoodenPlanks
count: 1
result: CP14FloorTileBirchWoodplanks
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileBirchWoodplanksBig
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14BirchWoodenPlanks
count: 1
result: CP14FloorTileBirchWoodplanksBig
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileBirchWoodplanksCruciform
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14BirchWoodenPlanks
count: 1
result: CP14FloorTileBirchWoodplanksCruciform
resultCount: 4
- type: CP14Recipe
id: CP14FloorTileBirchWoodplanksStairs
tag: CP14RecipeWorkbench
craftTime: 1
requirements:
- !type:StackResource
stack: CP14BirchWoodenPlanks
count: 1
result: CP14FloorTileBirchWoodplanksStairs
resultCount: 4

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