diff --git a/.vscode/launch.json b/.vscode/launch.json index 5390b914093..f849354936f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,7 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + // CLIENT CONFIGS { "name": "Client", "type": "coreclr", @@ -14,7 +15,28 @@ "stopAtEntry": false }, { - "name": "Client (Compatibility renderer)", + "name": "Client (Tools)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Tools)", + "program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll", + "args": [], + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": "Client (Release)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Release)", + "program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll", + "args": [], + "console": "internalConsole", + "stopAtEntry": false + }, + // COMPATABILITY RENDERERS + { + "name": "Client (Compatibility Renderer)", "type": "coreclr", "request": "launch", "program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll", @@ -22,6 +44,27 @@ "console": "internalConsole", "stopAtEntry": false }, + { + "name": "Client (Tools) - (Compatability Renderer)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Tools)", + "program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll", + "args": ["--cvar display.compat=true"], + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": "Client (Release) - (Compatability Renderer)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Release)", + "program": "${workspaceFolder}/bin/Debug/Content.Client/Content.Client.dll", + "args": ["--cvar display.compat=true"], + "console": "internalConsole", + "stopAtEntry": false + }, + // SERVER CONFIGS { "name": "Server", "type": "coreclr", @@ -31,6 +74,27 @@ "console": "integratedTerminal", "stopAtEntry": false }, + { + "name": "Server (Tools)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Tools)", + "program": "${workspaceFolder}/bin/Content.Server/Content.Server.dll", + "args": [], + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": "Server (Release)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build (Release)", + "program": "${workspaceFolder}/bin/Content.Server/Content.Server.dll", + "args": [], + "console": "internalConsole", + "stopAtEntry": false + }, + // LINTER { "name": "YAML Linter", "type": "coreclr", @@ -50,6 +114,22 @@ "Client" ], "preLaunchTask": "build" + }, + { + "name": "Server/Client (Tools)", + "configurations": [ + "Server (Tools)", + "Client (Tools)" + ], + "preLaunchTask": "build (Tools)" + }, + { + "name": "Server/Client (Release)", + "configurations": [ + "Server (Release)", + "Client (Release)" + ], + "preLaunchTask": "build (Release)" } ] -} \ No newline at end of file +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2865cc0fbfa..f51933bac0e 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -21,6 +21,46 @@ }, "problemMatcher": "$msCompile" }, + { + "label": "build (Tools)", + "command": "dotnet", + "type": "shell", + "args": [ + "build", + "--configuration", + "Tools", + "/property:GenerateFullPaths=true", // Ask dotnet build to generate full paths for file names. + "/consoleloggerparameters:NoSummary" // Do not generate summary otherwise it leads to duplicate errors in Problems panel + ], + "group": { + "kind": "build", + "isDefault": false + }, + "presentation": { + "reveal": "silent" + }, + "problemMatcher": "$msCompile" + }, + { + "label": "build (Release)", + "command": "dotnet", + "type": "shell", + "args": [ + "build", + "--configuration", + "Release", + "/property:GenerateFullPaths=true", // Ask dotnet build to generate full paths for file names. + "/consoleloggerparameters:NoSummary" // Do not generate summary otherwise it leads to duplicate errors in Problems panel + ], + "group": { + "kind": "build", + "isDefault": false + }, + "presentation": { + "reveal": "silent" + }, + "problemMatcher": "$msCompile" + }, { "label": "build-yaml-linter", "command": "dotnet", @@ -34,4 +74,4 @@ "problemMatcher": "$msCompile" } ] -} \ No newline at end of file +} diff --git a/Content.Client/Guidebook/Richtext/Box.cs b/Content.Client/Guidebook/Richtext/Box.cs index ecf6cb21f70..6e18ad9c575 100644 --- a/Content.Client/Guidebook/Richtext/Box.cs +++ b/Content.Client/Guidebook/Richtext/Box.cs @@ -11,6 +11,9 @@ public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out HorizontalExpand = true; control = this; + if (args.TryGetValue("Margin", out var margin)) + Margin = new Thickness(float.Parse(margin)); + if (args.TryGetValue("Orientation", out var orientation)) Orientation = Enum.Parse(orientation); else diff --git a/Content.Client/Guidebook/Richtext/ColorBox.cs b/Content.Client/Guidebook/Richtext/ColorBox.cs new file mode 100644 index 00000000000..84de300d6e0 --- /dev/null +++ b/Content.Client/Guidebook/Richtext/ColorBox.cs @@ -0,0 +1,49 @@ +using System.Diagnostics.CodeAnalysis; +using JetBrains.Annotations; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.Guidebook.Richtext; + +[UsedImplicitly] +public sealed class ColorBox : PanelContainer, IDocumentTag +{ + public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control) + { + HorizontalExpand = true; + VerticalExpand = true; + control = this; + + if (args.TryGetValue("Margin", out var margin)) + Margin = new Thickness(float.Parse(margin)); + + if (args.TryGetValue("HorizontalAlignment", out var halign)) + HorizontalAlignment = Enum.Parse(halign); + else + HorizontalAlignment = HAlignment.Stretch; + + if (args.TryGetValue("VerticalAlignment", out var valign)) + VerticalAlignment = Enum.Parse(valign); + else + VerticalAlignment = VAlignment.Stretch; + + var styleBox = new StyleBoxFlat(); + if (args.TryGetValue("Color", out var color)) + styleBox.BackgroundColor = Color.FromHex(color); + + if (args.TryGetValue("OutlineThickness", out var outlineThickness)) + styleBox.BorderThickness = new Thickness(float.Parse(outlineThickness)); + else + styleBox.BorderThickness = new Thickness(1); + + if (args.TryGetValue("OutlineColor", out var outlineColor)) + styleBox.BorderColor = Color.FromHex(outlineColor); + else + styleBox.BorderColor = Color.White; + + PanelOverride = styleBox; + + return true; + } +} diff --git a/Content.Client/Guidebook/Richtext/Table.cs b/Content.Client/Guidebook/Richtext/Table.cs new file mode 100644 index 00000000000..b6923c3698e --- /dev/null +++ b/Content.Client/Guidebook/Richtext/Table.cs @@ -0,0 +1,27 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Client.UserInterface.Controls; +using JetBrains.Annotations; +using Robust.Client.UserInterface; + +namespace Content.Client.Guidebook.Richtext; + +[UsedImplicitly] +public sealed class Table : TableContainer, IDocumentTag +{ + public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control) + { + HorizontalExpand = true; + control = this; + + if (!args.TryGetValue("Columns", out var columns) || !int.TryParse(columns, out var columnsCount)) + { + Logger.Error("Guidebook tag \"Table\" does not specify required property \"Columns.\""); + control = null; + return false; + } + + Columns = columnsCount; + + return true; + } +} diff --git a/Content.Client/UserInterface/Controls/TableContainer.cs b/Content.Client/UserInterface/Controls/TableContainer.cs new file mode 100644 index 00000000000..3e8d4760015 --- /dev/null +++ b/Content.Client/UserInterface/Controls/TableContainer.cs @@ -0,0 +1,285 @@ +using System.Numerics; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.UserInterface.Controls; + +// This control is not part of engine because I quickly wrote it in 2 hours at 2 AM and don't want to deal with +// API stabilization and/or figuring out relation to GridContainer. +// Grid layout is a complicated problem and I don't want to commit another half-baked thing into the engine. +// It's probably sufficient for its use case (RichTextLabel tables for rules/guidebook). +// Despite that, it's still better comment the shit half of you write on a regular basis. +// +// EMO: thank you PJB i was going to kill myself. + +/// +/// Displays children in a tabular grid. Unlike , +/// properly handles layout constraints so putting word-wrapping in it should work. +/// +/// +/// All children are automatically laid out in columns. +/// The first control is in the top left, laid out per row from there. +/// +[Virtual] +public class TableContainer : Container +{ + private int _columns = 1; + + /// + /// The absolute minimum width a column can be forced to. + /// + /// + /// + /// If a column *asks* for less width than this (small contents), it can still be smaller. + /// But if it asks for more it cannot go below this width. + /// + /// + public float MinForcedColumnWidth { get; set; } = 50; + + // Scratch space used while calculating layout, cached to avoid regular allocations during layout pass. + private ColumnData[] _columnDataCache = []; + private RowData[] _rowDataCache = []; + + /// + /// How many columns should be displayed. + /// + public int Columns + { + get => _columns; + set + { + ArgumentOutOfRangeException.ThrowIfLessThan(value, 1, nameof(value)); + + _columns = value; + } + } + + protected override Vector2 MeasureOverride(Vector2 availableSize) + { + ResetCachedArrays(); + + // Do a first pass measuring all child controls as if they're given infinite space. + // This gives us a maximum width the columns want, which we use to proportion them later. + var columnIdx = 0; + foreach (var child in Children) + { + ref var column = ref _columnDataCache[columnIdx]; + + child.Measure(new Vector2(float.PositiveInfinity, float.PositiveInfinity)); + column.MaxWidth = Math.Max(column.MaxWidth, child.DesiredSize.X); + + columnIdx += 1; + if (columnIdx == _columns) + columnIdx = 0; + } + + // Calculate Slack and MinWidth for all columns. Also calculate sums for all columns. + var totalMinWidth = 0f; + var totalMaxWidth = 0f; + var totalSlack = 0f; + + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + column.MinWidth = Math.Min(column.MaxWidth, MinForcedColumnWidth); + column.Slack = column.MaxWidth - column.MinWidth; + + totalMinWidth += column.MinWidth; + totalMaxWidth += column.MaxWidth; + totalSlack += column.Slack; + } + + if (totalMaxWidth <= availableSize.X) + { + // We want less horizontal space than we're given. Huh, that's convenient. + // Just set assigned width to be however much they asked for. + // We could probably skip the second measure pass in this scenario, + // but that's just an optimization, so I don't care right now. + // + // There's probably a very clever way to make this behavior work with the else block of logic, + // just by fiddling with the math. + // I'm dumb, it's 4:30 AM. Yeah, I *started* at 2 AM. + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + + column.AssignedWidth = column.MaxWidth; + } + } + else + { + // We don't have enough horizontal space, + // at least without causing *some* sort of word wrapping (assuming text contents). + // + // Assign horizontal space proportional to the wanted maximum size of the columns. + var assignableWidth = Math.Max(0, availableSize.X - totalMinWidth); + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + + var slackRatio = column.Slack / totalSlack; + column.AssignedWidth = column.MinWidth + slackRatio * assignableWidth; + } + } + + // Go over controls for a second measuring pass, this time giving them their assigned measure width. + // This will give us a height to slot into per-row data. + // We still measure assuming infinite vertical space. + // This control can't properly handle being constrained on the Y axis. + columnIdx = 0; + var rowIdx = 0; + foreach (var child in Children) + { + ref var column = ref _columnDataCache[columnIdx]; + ref var row = ref _rowDataCache[rowIdx]; + + child.Measure(new Vector2(column.AssignedWidth, float.PositiveInfinity)); + row.MeasuredHeight = Math.Max(row.MeasuredHeight, child.DesiredSize.Y); + + columnIdx += 1; + if (columnIdx == _columns) + { + columnIdx = 0; + rowIdx += 1; + } + } + + // Sum up height of all rows to get final measured table height. + var totalHeight = 0f; + for (var r = 0; r < _rowDataCache.Length; r++) + { + ref var row = ref _rowDataCache[r]; + totalHeight += row.MeasuredHeight; + } + + return new Vector2(Math.Min(availableSize.X, totalMaxWidth), totalHeight); + } + + protected override Vector2 ArrangeOverride(Vector2 finalSize) + { + // TODO: Expand to fit given vertical space. + + // Calculate MinWidth and Slack sums again from column data. + // We could've cached these from measure but whatever. + var totalMinWidth = 0f; + var totalSlack = 0f; + + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + totalMinWidth += column.MinWidth; + totalSlack += column.Slack; + } + + // Calculate new width based on final given size, also assign horizontal positions of all columns. + var assignableWidth = Math.Max(0, finalSize.X - totalMinWidth); + var xPos = 0f; + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + + var slackRatio = column.Slack / totalSlack; + column.ArrangedWidth = column.MinWidth + slackRatio * assignableWidth; + column.ArrangedX = xPos; + + xPos += column.ArrangedWidth; + } + + // Do actual arrangement row-by-row. + var arrangeY = 0f; + for (var r = 0; r < _rowDataCache.Length; r++) + { + ref var row = ref _rowDataCache[r]; + + for (var c = 0; c < _columns; c++) + { + ref var column = ref _columnDataCache[c]; + var index = c + r * _columns; + + if (index >= ChildCount) // Quit early if we don't actually fill out the row. + break; + var child = GetChild(c + r * _columns); + + child.Arrange(UIBox2.FromDimensions(column.ArrangedX, arrangeY, column.ArrangedWidth, row.MeasuredHeight)); + } + + arrangeY += row.MeasuredHeight; + } + + return finalSize with { Y = arrangeY }; + } + + /// + /// Ensure cached array space is allocated to correct size and is reset to a clean slate. + /// + private void ResetCachedArrays() + { + // 1-argument Array.Clear() is not currently available in sandbox (added in .NET 6). + + if (_columnDataCache.Length != _columns) + _columnDataCache = new ColumnData[_columns]; + + Array.Clear(_columnDataCache, 0, _columnDataCache.Length); + + var rowCount = ChildCount / _columns; + if (ChildCount % _columns != 0) + rowCount += 1; + + if (rowCount != _rowDataCache.Length) + _rowDataCache = new RowData[rowCount]; + + Array.Clear(_rowDataCache, 0, _rowDataCache.Length); + } + + /// + /// Per-column data used during layout. + /// + private struct ColumnData + { + // Measure data. + + /// + /// The maximum width any control in this column wants, if given infinite space. + /// Maximum of all controls on the column. + /// + public float MaxWidth; + + /// + /// The minimum width this column may be given. + /// This is either or . + /// + public float MinWidth; + + /// + /// Difference between max and min width; how much this column can expand from its minimum. + /// + public float Slack; + + /// + /// How much horizontal space this column was assigned at measure time. + /// + public float AssignedWidth; + + // Arrange data. + + /// + /// How much horizontal space this column was assigned at arrange time. + /// + public float ArrangedWidth; + + /// + /// The horizontal position this column was assigned at arrange time. + /// + public float ArrangedX; + } + + private struct RowData + { + // Measure data. + + /// + /// How much height the tallest control on this row was measured at, + /// measuring for infinite vertical space but assigned column width. + /// + public float MeasuredHeight; + } +} diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index 2ffd66fe068..0dc9808dc1d 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Camera; +using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; @@ -11,6 +12,7 @@ using Content.Shared.Popups; using Content.Shared.Throwing; using Content.Shared.Weapons.Melee; +using Content.Server.Weapons.Melee; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Physics.Components; @@ -30,13 +32,13 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnBeforeThrow); - SubscribeLocalEvent(OnDamageExamine); + SubscribeLocalEvent(OnBeforeThrow, after: [typeof(PacificationSystem)]); + SubscribeLocalEvent(OnDamageExamine, after: [typeof(MeleeWeaponSystem)]); } private void OnBeforeThrow(EntityUid uid, StaminaComponent component, ref BeforeThrowEvent args) { - if (!TryComp(args.ItemUid, out var damage)) + if (args.Cancelled || !TryComp(args.ItemUid, out var damage)) return; if (component.CritThreshold - component.StaminaDamage <= damage.StaminaCost) diff --git a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.Footprints.cs b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.Footprints.cs new file mode 100644 index 00000000000..50b5b7a6601 --- /dev/null +++ b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.Footprints.cs @@ -0,0 +1,41 @@ +using System.Linq; +using Content.Shared.Chemistry.Components; +using Content.Shared.Fluids; +using Content.Shared.FootPrint; + +namespace Content.Server.Fluids.EntitySystems; + +public sealed partial class AbsorbentSystem +{ + [Dependency] private readonly EntityLookupSystem _lookup = default!; + + /// + /// Tries to clean a number of footprints in a range determined by the component. Returns the number of cleaned footprints. + /// + private int TryCleanNearbyFootprints(EntityUid user, EntityUid used, Entity target, Entity absorbentSoln) + { + var footprintQuery = GetEntityQuery(); + var targetCoords = Transform(target).Coordinates; + var entities = _lookup.GetEntitiesInRange(targetCoords, target.Comp.FootprintCleaningRange, LookupFlags.Uncontained); + + // Take up to [MaxCleanedFootprints] footprints closest to the target + var cleaned = entities.AsEnumerable() + .Select(uid => (uid, dst: Transform(uid).Coordinates.TryDistance(EntityManager, _transform, targetCoords, out var dst) ? dst : 0f)) + .Where(ent => ent.dst > 0f) + .OrderBy(ent => ent.dst) + .Select(ent => (ent.uid, comp: footprintQuery.GetComponent(ent.uid))); + + // And try to interact with each one of them, ignoring useDelay + var processed = 0; + foreach (var (uid, footprintComp) in cleaned) + { + if (TryPuddleInteract(user, used, uid, target.Comp, useDelay: null, absorbentSoln)) + processed++; + + if (processed >= target.Comp.MaxCleanedFootprints) + break; + } + + return processed; + } +} diff --git a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs index 52afdcf8b49..1f8c44a2409 100644 --- a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs +++ b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs @@ -1,5 +1,4 @@ using System.Numerics; -using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Popups; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; @@ -18,7 +17,7 @@ namespace Content.Server.Fluids.EntitySystems; /// -public sealed class AbsorbentSystem : SharedAbsorbentSystem +public sealed partial class AbsorbentSystem : SharedAbsorbentSystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly AudioSystem _audio = default!; @@ -26,7 +25,7 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem [Dependency] private readonly PuddleSystem _puddleSystem = default!; [Dependency] private readonly SharedMeleeWeaponSystem _melee = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly MapSystem _mapSystem = default!; @@ -119,6 +118,8 @@ public void Mop(EntityUid user, EntityUid target, EntityUid used, AbsorbentCompo if (!TryRefillableInteract(user, used, target, component, useDelay, absorberSoln.Value)) return; } + + TryCleanNearbyFootprints(user, used, (target, component), absorberSoln.Value); } /// diff --git a/Content.Server/FootPrint/FootPrintsSystem.cs b/Content.Server/FootPrint/FootPrintsSystem.cs index 0e45acff5cc..524fcd1cec0 100644 --- a/Content.Server/FootPrint/FootPrintsSystem.cs +++ b/Content.Server/FootPrint/FootPrintsSystem.cs @@ -1,39 +1,39 @@ +using System.Linq; using Content.Server.Atmos.Components; using Content.Shared.Inventory; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; using Content.Shared.FootPrint; using Content.Shared.Standing; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Forensics; using Robust.Shared.Map; +using Robust.Shared.Physics.Components; +using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.FootPrint; + public sealed class FootPrintsSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly IMapManager _map = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; - private EntityQuery _transformQuery; - private EntityQuery _mobThresholdQuery; private EntityQuery _appearanceQuery; - private EntityQuery _layingQuery; + private EntityQuery _standingStateQuery; public override void Initialize() { base.Initialize(); - _transformQuery = GetEntityQuery(); - _mobThresholdQuery = GetEntityQuery(); _appearanceQuery = GetEntityQuery(); - _layingQuery = GetEntityQuery(); + _standingStateQuery = GetEntityQuery(); SubscribeLocalEvent(OnStartupComponent); SubscribeLocalEvent(OnMove); @@ -46,62 +46,72 @@ private void OnStartupComponent(EntityUid uid, FootPrintsComponent component, Co private void OnMove(EntityUid uid, FootPrintsComponent component, ref MoveEvent args) { - if (component.PrintsColor.A <= 0f - || !_transformQuery.TryComp(uid, out var transform) - || !_mobThresholdQuery.TryComp(uid, out var mobThreshHolds) - || !_map.TryFindGridAt(_transform.GetMapCoordinates((uid, transform)), out var gridUid, out _)) + if (component.ContainedSolution.Volume <= 0 + || TryComp(uid, out var physics) && physics.BodyStatus != BodyStatus.OnGround + || args.Entity.Comp1.GridUid is not {} gridUid) return; - var dragging = mobThreshHolds.CurrentThresholdState is MobState.Critical or MobState.Dead - || _layingQuery.TryComp(uid, out var laying) && laying.IsCrawlingUnder; - var distance = (transform.LocalPosition - component.StepPos).Length(); + var newPos = _transform.ToMapCoordinates(args.NewPosition).Position; + var dragging = _standingStateQuery.TryComp(uid, out var standing) && standing.CurrentState == StandingState.Lying; + var distance = (newPos - component.LastStepPos).Length(); var stepSize = dragging ? component.DragSize : component.StepSize; - if (!(distance > stepSize)) + if (distance < stepSize) return; - component.RightStep = !component.RightStep; + // are we on a puddle? we exit, ideally we would exchange liquid and DNA with the puddle but meh, too lazy to do that now. + var entities = _lookup.GetEntitiesIntersecting(uid, LookupFlags.All); + if (entities.Any(HasComp)) + return; + + // Spawn the footprint + var footprintUid = Spawn(component.StepProtoId, CalcCoords(gridUid, component, args.Component, dragging)); + var stepTransform = Transform(footprintUid); + var footPrintComponent = EnsureComp(footprintUid); - var entity = Spawn(component.StepProtoId, CalcCoords(gridUid, component, transform, dragging)); - var footPrintComponent = EnsureComp(entity); + // transfer owner DNA into the footsteps + var forensics = EntityManager.EnsureComponent(footprintUid); + if (TryComp(uid, out var ownerForensics)) + forensics.DNAs.UnionWith(ownerForensics.DNAs); footPrintComponent.PrintOwner = uid; - Dirty(entity, footPrintComponent); + Dirty(footprintUid, footPrintComponent); - if (_appearanceQuery.TryComp(entity, out var appearance)) + if (_appearanceQuery.TryComp(footprintUid, out var appearance)) { - _appearance.SetData(entity, FootPrintVisualState.State, PickState(uid, dragging), appearance); - _appearance.SetData(entity, FootPrintVisualState.Color, component.PrintsColor, appearance); - } + var color = component.ContainedSolution.GetColor(_protoMan); + color.A = Math.Max(0.3f, component.ContainedSolution.FillFraction); - if (!_transformQuery.TryComp(entity, out var stepTransform)) - return; + _appearance.SetData(footprintUid, FootPrintVisualState.State, PickState(uid, dragging), appearance); + _appearance.SetData(footprintUid, FootPrintVisualState.Color, color, appearance); + } stepTransform.LocalRotation = dragging - ? (transform.LocalPosition - component.StepPos).ToAngle() + Angle.FromDegrees(-90f) - : transform.LocalRotation + Angle.FromDegrees(180f); + ? (newPos - component.LastStepPos).ToAngle() + Angle.FromDegrees(-90f) + : args.Component.LocalRotation + Angle.FromDegrees(180f); - component.PrintsColor = component.PrintsColor.WithAlpha(Math.Max(0f, component.PrintsColor.A - component.ColorReduceAlpha)); - component.StepPos = transform.LocalPosition; - - if (!TryComp(entity, out var solutionContainer) - || !_solution.ResolveSolution((entity, solutionContainer), footPrintComponent.SolutionName, ref footPrintComponent.Solution, out var solution) - || string.IsNullOrWhiteSpace(component.ReagentToTransfer) || solution.Volume >= 1) + if (!TryComp(footprintUid, out var solutionContainer) + || !_solution.ResolveSolution((footprintUid, solutionContainer), footPrintComponent.SolutionName, ref footPrintComponent.Solution, out var solution)) return; - _solution.TryAddReagent(footPrintComponent.Solution.Value, component.ReagentToTransfer, 1, out _); + // Transfer from the component to the footprint + var removedReagents = component.ContainedSolution.SplitSolution(component.FootprintVolume); + _solution.ForceAddSolution(footPrintComponent.Solution.Value, removedReagents); + + component.RightStep = !component.RightStep; + component.LastStepPos = newPos; } private EntityCoordinates CalcCoords(EntityUid uid, FootPrintsComponent component, TransformComponent transform, bool state) { if (state) - return new EntityCoordinates(uid, transform.LocalPosition); + return new(uid, transform.LocalPosition); var offset = component.RightStep ? new Angle(Angle.FromDegrees(180f) + transform.LocalRotation).RotateVec(component.OffsetPrint) : new Angle(transform.LocalRotation).RotateVec(component.OffsetPrint); - return new EntityCoordinates(uid, transform.LocalPosition + offset); + return new(uid, transform.LocalPosition + offset); } private FootPrintVisuals PickState(EntityUid uid, bool dragging) diff --git a/Content.Server/FootPrint/PuddleFootPrintsSystem.cs b/Content.Server/FootPrint/PuddleFootPrintsSystem.cs index 706ba25359d..a778bcf2c7d 100644 --- a/Content.Server/FootPrint/PuddleFootPrintsSystem.cs +++ b/Content.Server/FootPrint/PuddleFootPrintsSystem.cs @@ -1,16 +1,17 @@ -using System.Linq; using Content.Shared.FootPrint; -using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Fluids; +using Content.Shared.FixedPoint; using Content.Shared.Fluids.Components; +using Content.Shared.Forensics; using Robust.Shared.Physics.Events; +using Robust.Shared.Prototypes; + namespace Content.Server.FootPrint; public sealed class PuddleFootPrintsSystem : EntitySystem { - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; public override void Initialize() @@ -21,32 +22,27 @@ public override void Initialize() private void OnStepTrigger(EntityUid uid, PuddleFootPrintsComponent component, ref EndCollideEvent args) { - if (!TryComp(uid, out var appearance) - || !TryComp(uid, out var puddle) - || !TryComp(args.OtherEntity, out var tripper) - || !TryComp(uid, out var solutionManager) - || !_solutionContainer.ResolveSolution((uid, solutionManager), puddle.SolutionName, ref puddle.Solution, out var solutions)) - return; - - var totalSolutionQuantity = solutions.Contents.Sum(sol => (float) sol.Quantity); - var waterQuantity = (from sol in solutions.Contents where sol.Reagent.Prototype == "Water" select (float) sol.Quantity).FirstOrDefault(); - - if (waterQuantity / (totalSolutionQuantity / 100f) > component.OffPercent || solutions.Contents.Count <= 0) + if (!TryComp(uid, out var puddle) || !TryComp(args.OtherEntity, out var tripper)) return; - tripper.ReagentToTransfer = - solutions.Contents.Aggregate((l, r) => l.Quantity > r.Quantity ? l : r).Reagent.Prototype; + // Transfer DNAs from the puddle to the tripper + if (TryComp(uid, out var puddleForensics)) + { + tripper.DNAs.UnionWith(puddleForensics.DNAs); + if(TryComp(args.OtherEntity, out var tripperForensics)) + tripperForensics.DNAs.UnionWith(puddleForensics.DNAs); + } - if (_appearance.TryGetData(uid, PuddleVisuals.SolutionColor, out var color, appearance) - && _appearance.TryGetData(uid, PuddleVisuals.CurrentVolume, out var volume, appearance)) - AddColor((Color) color, (float) volume * component.SizeRatio, tripper); + // Transfer reagents from the puddle to the tripper. + // Ideally it should be a two-way process, but that is too hard to simulate and will have very little effect outside of potassium-water spills. + var quantity = puddle.Solution?.Comp?.Solution?.Volume ?? 0; + var footprintsCapacity = tripper.ContainedSolution.AvailableVolume; - _solutionContainer.RemoveEachReagent(puddle.Solution.Value, 1); - } + if (quantity <= 0 || footprintsCapacity <= 0) + return; - private void AddColor(Color col, float quantity, FootPrintsComponent component) - { - component.PrintsColor = component.ColorQuantity == 0f ? col : Color.InterpolateBetween(component.PrintsColor, col, component.ColorInterpolationFactor); - component.ColorQuantity += quantity; + var transferAmount = FixedPoint2.Min(footprintsCapacity, quantity * component.SizeRatio); + var transferred = _solutionContainer.SplitSolution(puddle.Solution!.Value, transferAmount); + tripper.ContainedSolution.AddSolution(transferred, _protoMan); } } diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs index 436221103d2..28dbc32e05d 100644 --- a/Content.Server/Projectiles/ProjectileSystem.cs +++ b/Content.Server/Projectiles/ProjectileSystem.cs @@ -1,12 +1,15 @@ using Content.Server.Administration.Logs; +using Content.Server.Damage.Systems; using Content.Server.Effects; using Content.Server.Weapons.Ranged.Systems; using Content.Shared.Camera; using Content.Shared.Damage; +using Content.Shared.Damage.Events; using Content.Shared.Database; using Content.Shared.Projectiles; using Robust.Shared.Physics.Events; using Robust.Shared.Player; +using Robust.Shared.Utility; namespace Content.Server.Projectiles; @@ -22,6 +25,7 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnStartCollide); + SubscribeLocalEvent(OnDamageExamine, after: [typeof(DamageOtherOnHitSystem)]); } private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref StartCollideEvent args) @@ -75,4 +79,21 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St if (component.ImpactEffect != null && TryComp(uid, out TransformComponent? xform)) RaiseNetworkEvent(new ImpactEffectEvent(component.ImpactEffect, GetNetCoordinates(xform.Coordinates)), Filter.Pvs(xform.Coordinates, entityMan: EntityManager)); } + + private void OnDamageExamine(EntityUid uid, EmbeddableProjectileComponent component, ref DamageExamineEvent args) + { + if (!component.EmbedOnThrow) + return; + + if (!args.Message.IsEmpty) + args.Message.PushNewline(); + + var isHarmful = TryComp(uid, out var passiveDamage) && passiveDamage.Damage.AnyPositive(); + var loc = isHarmful + ? "damage-examine-embeddable-harmful" + : "damage-examine-embeddable"; + + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow(Loc.GetString(loc)); + args.Message.AddMessage(staminaCostMarkup); + } } diff --git a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs index 518d6409bf5..7e5a0ac24e1 100644 --- a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs +++ b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs @@ -1,18 +1,18 @@ using Robust.Server.GameObjects; using Robust.Server.Maps; using Robust.Shared.Configuration; +using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Server.GameTicking; using Content.Server.StationEvents.Components; -using Content.Shared.Salvage; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Shared.CCVar; +using Content.Shared.GameTicking.Components; using Content.Shared.Random.Helpers; +using Content.Shared.Salvage; using System.Linq; -using Content.Shared.GameTicking.Components; -using Content.Shared.CCVar; -using Robust.Shared.Serialization.Manager; -using Content.Shared.Parallax.Biomes; -using Robust.Shared.Map; namespace Content.Server.StationEvents.Events; @@ -24,30 +24,28 @@ public sealed class PirateRadioSpawnRule : StationEventSystem(Transform(station).MapUid)) - stations.Remove(station); + var stationGrids = new HashSet(); + foreach (var stations in station) + { + if (TryComp(stations, out var data) && _station.GetLargestGrid(data) is { } grid) + stationGrids.Add(grid); + } // _random forces Test Fails if given an empty list. which is guaranteed to happen during Tests. - if (stations.Count <= 0) + if (stationGrids.Count <= 0) return; - var targetStation = _random.Pick(stations); + var targetStation = _random.Pick(stationGrids); var targetMapId = Transform(targetStation).MapID; if (!_mapSystem.MapExists(targetMapId)) diff --git a/Content.Server/Traits/TraitSystem.Functions.cs b/Content.Server/Traits/TraitSystem.Functions.cs index 8e53ff69a55..29ab1512ae6 100644 --- a/Content.Server/Traits/TraitSystem.Functions.cs +++ b/Content.Server/Traits/TraitSystem.Functions.cs @@ -1,3 +1,4 @@ +using Content.Shared.FixedPoint; using Content.Shared.Traits; using JetBrains.Annotations; using Robust.Shared.Prototypes; @@ -11,6 +12,7 @@ using Content.Shared.Mood; using Content.Shared.Traits.Assorted.Components; using Content.Shared.Damage; +using Content.Shared.Damage.Components; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Mobs.Components; @@ -547,3 +549,39 @@ public override void OnPlayerSpawn(EntityUid uid, staminaComponent.Cooldown += CooldownModifier; } } + +/// +/// Used for traits that modify SlowOnDamageComponent. +/// +[UsedImplicitly] +public sealed partial class TraitModifySlowOnDamage : TraitFunction +{ + // + // A flat modifier to add to all damage threshold keys. + // + [DataField, AlwaysPushInheritance] + public float DamageThresholdsModifier; + + // + // A multiplier applied to all speed modifier values. + // The higher the multiplier, the stronger the slowdown. + // + [DataField, AlwaysPushInheritance] + public float SpeedModifierMultiplier = 1f; + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + if (!entityManager.TryGetComponent(uid, out var slowOnDamage)) + return; + + var newSpeedModifierThresholds = new Dictionary(); + + foreach (var (damageThreshold, speedModifier) in slowOnDamage.SpeedModifierThresholds) + newSpeedModifierThresholds[damageThreshold + DamageThresholdsModifier] = 1 - (1 - speedModifier) * SpeedModifierMultiplier; + + slowOnDamage.SpeedModifierThresholds = newSpeedModifierThresholds; + } +} diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index 26f0c20608e..3ed47945082 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Chat.Systems; using Content.Server.CombatMode.Disarm; using Content.Server.Movement.Systems; +using Content.Server.Weapons.Ranged.Systems; using Content.Shared.Actions.Events; using Content.Shared.Administration.Components; using Content.Shared.CombatMode; @@ -44,7 +45,7 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnSpeechHit); - SubscribeLocalEvent(OnMeleeExamineDamage); + SubscribeLocalEvent(OnMeleeExamineDamage, after: [typeof(GunSystem)]); } private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, ref DamageExamineEvent args) diff --git a/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs b/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs index 8b3d29d7349..e9e786a8179 100644 --- a/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs +++ b/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Administration.Logs; using Content.Shared.Camera; +using Content.Shared.CombatMode.Pacification; using Content.Shared.Contests; using Content.Shared.Damage; using Content.Shared.Damage.Components; @@ -39,6 +40,7 @@ public override void Initialize() SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnDoHit); SubscribeLocalEvent(OnThrown); + SubscribeLocalEvent(OnAttemptPacifiedThrow); SubscribeLocalEvent(OnItemToggleMapInit); SubscribeLocalEvent(OnItemToggle); @@ -49,19 +51,19 @@ public override void Initialize() /// private void OnMapInit(EntityUid uid, DamageOtherOnHitComponent component, MapInitEvent args) { - if (!TryComp(uid, out var melee)) - return; - - if (component.Damage.Empty) - component.Damage = melee.Damage * component.MeleeDamageMultiplier; - if (component.SoundHit == null) - component.SoundHit = melee.SoundHit; - if (component.SoundNoDamage == null) + if (TryComp(uid, out var melee)) { - if (melee.SoundNoDamage != null) - component.SoundNoDamage = melee.SoundNoDamage; - else - component.SoundNoDamage = new SoundCollectionSpecifier("WeakHit"); + if (component.Damage.Empty) + component.Damage = melee.Damage * component.MeleeDamageMultiplier; + if (component.SoundHit == null) + component.SoundHit = melee.SoundHit; + if (component.SoundNoDamage == null) + { + if (melee.SoundNoDamage != null) + component.SoundNoDamage = melee.SoundNoDamage; + else + component.SoundNoDamage = new SoundCollectionSpecifier("WeakHit"); + } } RaiseLocalEvent(uid, new DamageOtherOnHitStartupEvent((uid, component))); @@ -181,6 +183,16 @@ private void OnThrown(EntityUid uid, DamageOtherOnHitComponent component, Thrown component.HitQuantity = 0; } + /// + /// Prevent Pacified entities from throwing damaging items. + /// + private void OnAttemptPacifiedThrow(EntityUid uid, DamageOtherOnHitComponent comp, ref AttemptPacifiedThrowEvent args) + { + // Allow healing projectiles, forbid any that do damage + if (comp.Damage.AnyPositive()) + args.Cancel("pacified-cannot-throw"); + } + /// /// Gets the total damage a throwing weapon does. /// diff --git a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs index 3e50ee35572..78650ec5cfb 100644 --- a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs +++ b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs @@ -61,17 +61,13 @@ private void OnDamageChanged(EntityUid uid, SlowOnDamageComponent component, Dam private void OnModifySpeed(Entity ent, ref InventoryRelayedEvent args) { - var dif = 1 - args.Args.Speed; - if (dif <= 0) - return; - // reduces the slowness modifier by the given coefficient - args.Args.Speed += dif * ent.Comp.Modifier; + args.Args.Speed = 1 - (1 - args.Args.Speed) * ent.Comp.Modifier; } private void OnExamined(Entity ent, ref ExaminedEvent args) { - var msg = Loc.GetString("slow-on-damage-modifier-examine", ("mod", (1 - ent.Comp.Modifier) * 100)); + var msg = Loc.GetString("slow-on-damage-modifier-examine", ("mod", Math.Round((1 - ent.Comp.Modifier) * 100))); args.PushMarkup(msg); } diff --git a/Content.Shared/Fluids/AbsorbentComponent.cs b/Content.Shared/Fluids/AbsorbentComponent.cs index 450ecc0df6d..6cda88a72d6 100644 --- a/Content.Shared/Fluids/AbsorbentComponent.cs +++ b/Content.Shared/Fluids/AbsorbentComponent.cs @@ -38,4 +38,13 @@ public sealed partial class AbsorbentComponent : Component { Params = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(-3f), }; + + [DataField] + public float FootprintCleaningRange = 0.2f; + + /// + /// How many footprints within can be cleaned at once. + /// + [DataField] + public int MaxCleanedFootprints = 5; } diff --git a/Content.Shared/Footprint/FootPrintsComponent.cs b/Content.Shared/Footprint/FootPrintsComponent.cs index 2b2c4ed66ed..99aa2106cf6 100644 --- a/Content.Shared/Footprint/FootPrintsComponent.cs +++ b/Content.Shared/Footprint/FootPrintsComponent.cs @@ -1,4 +1,6 @@ using System.Numerics; +using Content.Shared.Chemistry.Components; +using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -7,23 +9,17 @@ namespace Content.Shared.FootPrint; [RegisterComponent] public sealed partial class FootPrintsComponent : Component { - [ViewVariables(VVAccess.ReadOnly), DataField] + [DataField] public ResPath RsiPath = new("/Textures/Effects/footprints.rsi"); - // all of those are set as a layer - [ViewVariables(VVAccess.ReadOnly), DataField] - public string LeftBarePrint = "footprint-left-bare-human"; - - [ViewVariables(VVAccess.ReadOnly), DataField] - public string RightBarePrint = "footprint-right-bare-human"; - - [ViewVariables(VVAccess.ReadOnly), DataField] - public string ShoesPrint = "footprint-shoes"; - - [ViewVariables(VVAccess.ReadOnly), DataField] - public string SuitPrint = "footprint-suit"; + [DataField] + public string + LeftBarePrint = "footprint-left-bare-human", + RightBarePrint = "footprint-right-bare-human", + ShoesPrint = "footprint-shoes", + SuitPrint = "footprint-suit"; - [ViewVariables(VVAccess.ReadOnly), DataField] + [DataField] public string[] DraggingPrint = [ "dragging-1", @@ -32,14 +28,10 @@ public sealed partial class FootPrintsComponent : Component "dragging-4", "dragging-5", ]; - // yea, those - [ViewVariables(VVAccess.ReadOnly), DataField] + [DataField] public EntProtoId StepProtoId = "Footstep"; - [ViewVariables(VVAccess.ReadOnly), DataField] - public Color PrintsColor = Color.FromHex("#00000000"); - /// /// The size scaling factor for footprint steps. Must be positive. /// @@ -53,20 +45,8 @@ public sealed partial class FootPrintsComponent : Component public float DragSize = 0.5f; /// - /// The amount of color to transfer from the source (e.g., puddle) to the footprint. - /// - [DataField] - public float ColorQuantity; - - /// - /// The factor by which the alpha channel is reduced in subsequent footprints. + /// Horizontal offset of the created footprints relative to the center. /// - [DataField] - public float ColorReduceAlpha = 0.1f; - - [DataField] - public string? ReagentToTransfer; - [DataField] public Vector2 OffsetPrint = new(0.1f, 0f); @@ -78,11 +58,20 @@ public sealed partial class FootPrintsComponent : Component /// /// The position of the last footprint in world coordinates. /// - public Vector2 StepPos = Vector2.Zero; + public Vector2 LastStepPos = Vector2.Zero; + + [DataField] + public HashSet DNAs = new(); /// - /// Controls how quickly the footprint color transitions between steps. - /// Value between 0 and 1, where higher values mean faster color changes. + /// Reagent volume used for footprints. /// - public float ColorInterpolationFactor = 0.2f; + [DataField] + public Solution ContainedSolution = new(3) { CanReact = true, MaxVolume = 5f, }; + + /// + /// Amount of reagents used per footprint. + /// + [DataField] + public FixedPoint2 FootprintVolume = 1f; } diff --git a/Content.Shared/Footprint/PuddleFootPrintsComponent.cs b/Content.Shared/Footprint/PuddleFootPrintsComponent.cs index 0e2ddfe3836..bea2b6b7a15 100644 --- a/Content.Shared/Footprint/PuddleFootPrintsComponent.cs +++ b/Content.Shared/Footprint/PuddleFootPrintsComponent.cs @@ -1,11 +1,14 @@ +using Content.Shared.FixedPoint; + + namespace Content.Shared.FootPrint; [RegisterComponent] public sealed partial class PuddleFootPrintsComponent : Component { + /// + /// Ratio between puddle volume and the amount of reagents that can be transferred from it. + /// [ViewVariables(VVAccess.ReadWrite)] - public float SizeRatio = 0.2f; - - [ViewVariables(VVAccess.ReadWrite)] - public float OffPercent = 80f; + public FixedPoint2 SizeRatio = 0.15f; } diff --git a/Content.Shared/Movement/Components/SpeedModifiedByContactModifierComponent.cs b/Content.Shared/Movement/Components/SpeedModifiedByContactModifierComponent.cs new file mode 100644 index 00000000000..9a32d3453d3 --- /dev/null +++ b/Content.Shared/Movement/Components/SpeedModifiedByContactModifierComponent.cs @@ -0,0 +1,37 @@ +using Content.Shared.Movement.Systems; +using Robust.Shared.GameStates; + +namespace Content.Shared.Movement.Components; + +// +// This is used to modify how much an entity is affected by speed modifier contacts. +// +[NetworkedComponent, RegisterComponent] +[AutoGenerateComponentState] +[Access(typeof(SpeedModifierContactsSystem))] +public sealed partial class SpeedModifiedByContactModifierComponent : Component +{ + // + // Numbers greater than 1 amplify the walk speed modifier, and lower numbers lessen the effect. + // + [DataField, AutoNetworkedField] + public float WalkModifierEffectiveness = 1.0f; + + // + // Numbers greater than 1 amplify the sprint speed modifier, and lower numbers lessen the effect. + // + [DataField, AutoNetworkedField] + public float SprintModifierEffectiveness = 1.0f; + + // + // The minimum walk speed multiplier. + // + [DataField, AutoNetworkedField] + public float MinWalkMultiplier = 0.1f; + + // + // The minimum sprint speed multiplier. + // + [DataField, AutoNetworkedField] + public float MinSprintMultiplier = 0.1f; +} diff --git a/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs index 6e1b3a29aec..94becab9d2a 100644 --- a/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs +++ b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs @@ -102,6 +102,16 @@ private void MovementSpeedCheck(EntityUid uid, SpeedModifiedByContactComponent c walkSpeed /= entries; sprintSpeed /= entries; + if (TryComp(uid, out var modifier)) + { + walkSpeed = Math.Max(Math.Min(modifier.MinWalkMultiplier, walkSpeed), + // Similar to the formula for movement slow resist in Deadlock + 1 - (1 - walkSpeed) * modifier.WalkModifierEffectiveness); + + sprintSpeed = Math.Max(Math.Min(modifier.MinSprintMultiplier, sprintSpeed), + 1 - (1 - sprintSpeed) * modifier.SprintModifierEffectiveness); + } + args.ModifySpeed(walkSpeed, sprintSpeed); } diff --git a/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs b/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs index 55733ac5bb3..589abf305c5 100644 --- a/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs +++ b/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; @@ -24,6 +25,7 @@ public override void Initialize() SubscribeLocalEvent(OnEmbed); SubscribeLocalEvent(OnRemoveEmbed); SubscribeLocalEvent(OnItemToggle); + SubscribeLocalEvent(OnAttemptPacifiedThrow); } /// @@ -92,6 +94,16 @@ private void OnItemToggle(EntityUid uid, EmbedPassiveDamageComponent component, component.Damage = deactivatedDamage; } + /// + /// Prevent Pacified entities from throwing items that deal passive damage when embedded. + /// + private void OnAttemptPacifiedThrow(EntityUid uid, EmbedPassiveDamageComponent comp, ref AttemptPacifiedThrowEvent args) + { + // Allow healing projectiles, forbid any that do damage + if (comp.Damage.AnyPositive()) + args.Cancel("pacified-cannot-throw"); + } + public override void Update(float frameTime) { base.Update(frameTime); diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index f5d2a915dc7..a32575c0eea 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -1,6 +1,5 @@ using System.Numerics; using Content.Shared.Body.Systems; -using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.Examine; @@ -47,7 +46,6 @@ public override void Initialize() SubscribeLocalEvent(OnEmbedThrowDoHit); SubscribeLocalEvent(OnEmbedActivate); SubscribeLocalEvent(OnEmbedRemove); - SubscribeLocalEvent(OnAttemptPacifiedThrow); SubscribeLocalEvent(OnExamined); } @@ -211,14 +209,6 @@ public void SetShooter(EntityUid id, ProjectileComponent component, EntityUid sh Dirty(id, component); } - /// - /// Prevent players with the Pacified status effect from throwing embeddable projectiles. - /// - private void OnAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) - { - args.Cancel("pacified-cannot-throw-embed"); - } - private void OnExamined(EntityUid uid, EmbeddableProjectileComponent component, ExaminedEvent args) { if (!(component.Target is {} target)) diff --git a/Content.Shared/Slippery/SlippableModifierComponent.cs b/Content.Shared/Slippery/SlippableModifierComponent.cs new file mode 100644 index 00000000000..9a5a22e3a2e --- /dev/null +++ b/Content.Shared/Slippery/SlippableModifierComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameStates; +namespace Content.Shared.Slippery; + +/// +/// Modifies the duration of slip paralysis on an entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SlippableModifierComponent : Component +{ + /// + /// What to multiply the paralyze time by. + /// + [DataField, AutoNetworkedField] + public float ParalyzeTimeMultiplier = 1f; +} diff --git a/Content.Shared/Slippery/SlipperySystem.cs b/Content.Shared/Slippery/SlipperySystem.cs index 0b52cdde92e..4d6c4fe342a 100644 --- a/Content.Shared/Slippery/SlipperySystem.cs +++ b/Content.Shared/Slippery/SlipperySystem.cs @@ -37,6 +37,7 @@ public override void Initialize() SubscribeLocalEvent(OnThrownSlipAttempt); // as long as slip-resistant mice are never added, this should be fine (otherwise a mouse-hat will transfer it's power to the wearer). SubscribeLocalEvent>((e, c, ev) => OnNoSlipAttempt(e, c, ev.Args)); + SubscribeLocalEvent(OnSlippableModifierSlipped); } private void HandleStepTrigger(EntityUid uid, SlipperyComponent component, ref StepTriggeredOffEvent args) @@ -62,6 +63,11 @@ private void OnThrownSlipAttempt(EntityUid uid, ThrownItemComponent comp, ref Sl args.Cancelled = true; } + private void OnSlippableModifierSlipped(EntityUid uid, SlippableModifierComponent comp, ref SlippedEvent args) + { + args.ParalyzeTime *= comp.ParalyzeTimeMultiplier; + } + private bool CanSlip(EntityUid uid, EntityUid toSlip) { return !_container.IsEntityInContainer(uid) @@ -86,6 +92,9 @@ private void TrySlip(EntityUid uid, SlipperyComponent component, EntityUid other var ev = new SlipEvent(other); RaiseLocalEvent(uid, ref ev); + var slippedEv = new SlippedEvent(uid, component.ParalyzeTime); + RaiseLocalEvent(other, ref slippedEv); + if (TryComp(other, out PhysicsComponent? physics) && !HasComp(other)) { _physics.SetLinearVelocity(other, physics.LinearVelocity * component.LaunchForwardsMultiplier, body: physics); @@ -100,7 +109,7 @@ private void TrySlip(EntityUid uid, SlipperyComponent component, EntityUid other var playSound = !_statusEffects.HasStatusEffect(other, "KnockedDown"); - _stun.TryParalyze(other, TimeSpan.FromSeconds(component.ParalyzeTime), true); + _stun.TryParalyze(other, TimeSpan.FromSeconds(slippedEv.ParalyzeTime), true); RaiseLocalEvent(other, new MoodEffectEvent("MobSlipped")); @@ -134,3 +143,19 @@ public record struct SlipCausingAttemptEvent (bool Cancelled); /// The entity being slipped [ByRefEvent] public readonly record struct SlipEvent(EntityUid Slipped); + +/// Raised on an entity that slipped. +/// The entity that caused the slip +/// How many seconds the entity will be paralyzed for, modifiable with this event. +[ByRefEvent] +public record struct SlippedEvent +{ + public readonly EntityUid Slipper; + public float ParalyzeTime; + + public SlippedEvent(EntityUid slipper, float paralyzeTime) + { + Slipper = slipper; + ParalyzeTime = paralyzeTime; + } +} diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs index 5bb303cf517..6635e331b5c 100644 --- a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Gravity; using Content.Shared.StepTrigger.Components; +using Content.Shared.Traits.Assorted.Components; using Content.Shared.Whitelist; using Robust.Shared.Map.Components; using Robust.Shared.Physics; @@ -97,7 +98,11 @@ private void UpdateColliding(EntityUid uid, StepTriggerComponent component, Tran // this is hard to explain var intersect = Box2.Area(otherAabb.Intersect(ourAabb)); var ratio = Math.Max(intersect / Box2.Area(otherAabb), intersect / Box2.Area(ourAabb)); - if (otherPhysics.LinearVelocity.Length() < component.RequiredTriggeredSpeed + var requiredTriggeredSpeed = component.RequiredTriggeredSpeed; + if (TryComp(otherUid, out var speedModifier)) + requiredTriggeredSpeed *= speedModifier.RequiredTriggeredSpeedModifier; + + if (otherPhysics.LinearVelocity.Length() < requiredTriggeredSpeed || component.CurrentlySteppedOn.Contains(otherUid) || ratio < component.IntersectRatio || !CanTrigger(uid, otherUid, component)) diff --git a/Content.Shared/Traits/Assorted/Components/TraitSpeedModifierComponent.cs b/Content.Shared/Traits/Assorted/Components/TraitSpeedModifierComponent.cs index 85dc52a21f5..c0d79c83755 100644 --- a/Content.Shared/Traits/Assorted/Components/TraitSpeedModifierComponent.cs +++ b/Content.Shared/Traits/Assorted/Components/TraitSpeedModifierComponent.cs @@ -13,4 +13,10 @@ public sealed partial class TraitSpeedModifierComponent : Component [DataField, AutoNetworkedField] public float SprintModifier = 1.0f; + + // + // Multiplied with the required trigger speed for step triggers that this entity collides with. + // + [DataField, AutoNetworkedField] + public float RequiredTriggeredSpeedModifier = 1.0f; } diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d0165af7f11..5d6dbb72446 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -4051,7 +4051,7 @@ Entries: - type: Add message: >- Glass/Crystal shards and floor tiles now deal damage and embed in - victims when colliding with them. + victims when colliding with them. id: 6107 time: '2024-05-11T01:23:00.0000000+00:00' - author: FoxxoTrystan @@ -4262,7 +4262,7 @@ Entries: - type: Fix message: >- Spent bullet casings now fly away from a shooter in a cinematic manner, - rather than fall at their feet. + rather than fall at their feet. id: 6133 time: '2024-07-01T22:37:29.0000000+00:00' - author: WarMechanic @@ -4458,7 +4458,7 @@ Entries: - type: Add message: >- Cablecuffs and Zipties are now easier to escape out of if you're - smaller. + smaller. id: 6158 time: '2024-07-13T08:05:52.0000000+00:00' - author: FoxxoTrystan @@ -4526,7 +4526,7 @@ Entries: - type: Fix message: >- Harpies can no longer buy Loadout items that are impossible for them to - wear due to having digitigrade legs. + wear due to having digitigrade legs. id: 6168 time: '2024-07-18T02:34:52.0000000+00:00' - author: Mnemotechnician @@ -4585,7 +4585,7 @@ Entries: - type: Add message: >- Camera Shake is now affected by character mass. Small characters - experience more camera shake. Large characters experience less. + experience more camera shake. Large characters experience less. id: 6176 time: '2024-07-21T06:50:25.0000000+00:00' - author: VMSolidus @@ -4593,7 +4593,7 @@ Entries: - type: Add message: >- The Head Of Personnel can now hire people onto basic roles for each - department by vending PDAs. + department by vending PDAs. id: 6177 time: '2024-07-22T19:12:01.0000000+00:00' - author: VMSolidus @@ -4700,7 +4700,7 @@ Entries: - type: Fix message: >- Fixed Tools, Drink Containers, Lockers, and all base items having - inconsistent sound settings. + inconsistent sound settings. id: 6191 time: '2024-07-31T22:47:01.0000000+00:00' - author: VMSolidus @@ -4808,7 +4808,7 @@ Entries: - type: Add message: >- Added a 1-point combat knife to Loadouts for Felinid/Harpy security - jobs. + jobs. - type: Tweak message: Made the security belt and security webbing able to hold combat knives. - type: Tweak @@ -4858,7 +4858,7 @@ Entries: Due to budget cuts, Nanotrasen has ceased stocking Clothesmate vendors with more clothing than the average cargo tech can afford. Civilians are advised to bring their own clothes to the station if they wish to wear - anything other than grey. + anything other than grey. id: 6208 time: '2024-08-04T00:23:53.0000000+00:00' - author: VMSolidus @@ -4866,7 +4866,7 @@ Entries: - type: Add message: >- SweatMAX, "hot foods", Mars Mart, and Nippon-tan vendors have all been - added to vendor spawners. + added to vendor spawners. id: 6209 time: '2024-08-04T06:26:34.0000000+00:00' - author: Skubman @@ -4925,7 +4925,7 @@ Entries: The Carrying system has been reworked as a means of better supporting having extremely large species and characters. 10kg Harpies should no longer be oppressed by 2000kg Lamia with infinitely short carry - attempts. + attempts. id: 6216 time: '2024-08-05T17:11:37.0000000+00:00' - author: Rane @@ -4953,11 +4953,11 @@ Entries: - type: Add message: >- CPR has been added to the game. People with CPR training can now perform - CPR on anyone who is in either crit or dead states. + CPR on anyone who is in either crit or dead states. - type: Add message: >- CPR Training has been added to the game as a new positive trait. All - medical staff start with this trait for free. + medical staff start with this trait for free. id: 6220 time: '2024-08-06T05:28:54.0000000+00:00' - author: Skubman @@ -5144,7 +5144,7 @@ Entries: - type: Fix message: >- Sluggish and Snail-Paced will now properly apply their movement - penalties upon joining. + penalties upon joining. id: 6244 time: '2024-08-09T17:28:01.0000000+00:00' - author: ODJ @@ -5160,7 +5160,7 @@ Entries: - type: Tweak message: >- Renamed "Psionic Mantis" to "Mantis", as it was originally going to be - called. + called. id: 6246 time: '2024-08-10T12:03:12.0000000+00:00' - author: Skubman @@ -5448,7 +5448,7 @@ Entries: - type: Tweak message: >- Chaplain, Mantis, & Mystagogue all receive the Latent Psychic trait for - free, automatically. + free, automatically. id: 6273 time: '2024-08-20T18:42:44.0000000+00:00' - author: VMSolidus @@ -5466,7 +5466,7 @@ Entries: Actions no longer need to hardcode in target blacklists, and can now blacklist entities in YML. This is notably useful for Psionic powers, which all share a common feature that they can't target people with - Psionic Insulation (Or have been Mindbroken). + Psionic Insulation (Or have been Mindbroken). id: 6275 time: '2024-08-21T09:08:40.0000000+00:00' - author: VMSolidus @@ -5535,7 +5535,7 @@ Entries: message: >- Gaining a new Psionic Power can now display messages to alert the player, both as a short popup, and optionally a lengthier message sent - to the user's Chat window. + to the user's Chat window. id: 6284 time: '2024-08-22T17:12:26.0000000+00:00' - author: DEATHB4DEFEAT @@ -5652,7 +5652,7 @@ Entries: message: >- Natural Telepath has returned from Psionic-Refactor V1, now using new functionality from the trait system that allows traits to buy psionic - powers directly. + powers directly. - type: Add message: >- Latent Psychics who have neither bought Natural Telepath, nor acquired @@ -5730,7 +5730,7 @@ Entries: message: >- InnatePsionicPowers now operates on MapInitEvent instead of ComponentStartup, meaning that it can now be safely used on entities - that are mapped in instead of spawned. + that are mapped in instead of spawned. - type: Add message: >- Oracle and Sophia are now recognized as Divine, and as such are @@ -5783,7 +5783,7 @@ Entries: Psionic(But cannot gain powers randomly). This is due to their status as "Magical And/Or Extraplanar Creatures", which makes them valid targets for anti-psychic abilities such as the Psionic Mantis' Anti-Psychic - Knife. + Knife. - type: Add message: Some Reagent Slimes can now contain Lotophagoi Oil. id: 6310 @@ -5800,7 +5800,7 @@ Entries: message: >- "Clone Soup" scales directly with the mass of the entity you're attempting to clone. Fail to clone a Lamia, and you'll be greeted with - an Olympic swimming pool worth of blood when the machine opens. + an Olympic swimming pool worth of blood when the machine opens. - type: Add message: >- Cloning will fail if at any point during the procedure, the machine is @@ -5809,7 +5809,7 @@ Entries: message: >- Clones come out of the machine with severe Cellular damage. Consider using Doxarubixadone in a Cryo tube as an affordable means of - "Finishing" clones. + "Finishing" clones. - type: Tweak message: >- Cloning Time is now increased proportionally if an entity being cloned @@ -5867,7 +5867,7 @@ Entries: - type: Add message: >- Several new tips have been added to the game, many of which reference - new content available on Einstein-Engines. + new content available on Einstein-Engines. id: 6315 time: '2024-09-05T00:00:21.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/844 @@ -5885,7 +5885,7 @@ Entries: Due to NUMEROUS complaints, NanoTrasen has swapped the sticker labels on all colored jumpskirts to correctly state that they are infact, "Skirts", so now they can legally be worn by Harpies, Lamia, and - Arachne. + Arachne. id: 6317 time: '2024-09-05T00:19:49.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/848 @@ -5949,7 +5949,7 @@ Entries: message: >- All non-job specific uniforms have had their points reduced drastically, almost all of them down to 0 points, with only a tiny handful at 2 - points, and the rest as 1. + points, and the rest as 1. id: 6321 time: '2024-09-07T00:53:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/872 @@ -6126,7 +6126,7 @@ Entries: - type: Add message: >- The Antag Refactor has been once again added back in. More antags will - be coming soon. + be coming soon. id: 6340 time: '2024-09-09T14:21:56.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/794 @@ -6234,7 +6234,7 @@ Entries: - type: Add message: >- added rcds to the list of possible re and ported over the re update from - delta + delta - type: Tweak message: >- tweaked the costs of boards re-machine boards to be more consistent with @@ -6425,7 +6425,7 @@ Entries: - type: Fix message: >- Cloning Consoles will now correctly state when a body has the - Uncloneable trait. + Uncloneable trait. id: 6368 time: '2024-09-18T04:30:39.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/926 @@ -6544,7 +6544,7 @@ Entries: - type: Add message: >- All "Long-arms", Rifles, Light Machine Guns, Shotguns, now require - wielding to use. + wielding to use. id: 6378 time: '2024-09-20T20:35:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/913 @@ -6562,7 +6562,7 @@ Entries: - type: Add message: >- Tau-Ceti Basic, Tradeband, Freespeak, Elyran Standard, Sol Common, and - Sign Language have been added to the Languages tab. + Sign Language have been added to the Languages tab. id: 6380 time: '2024-09-20T21:46:47.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/936 @@ -6572,7 +6572,7 @@ Entries: message: >- Removed the "Become Psionic" traitor objective. It was literally impossible to fail if you took the Latent Psychic trait, and literally - impossible to greentext if you didn't. + impossible to greentext if you didn't. id: 6381 time: '2024-09-20T21:47:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/940 @@ -6643,7 +6643,7 @@ Entries: message: >- The Do-After bar for Breath of Life and Healing Word is now hidden if glimmer is low enough. The threshold for which scales with your - Dampening stat. More Dampening = stealthier casting. + Dampening stat. More Dampening = stealthier casting. id: 6386 time: '2024-09-24T00:56:34.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/949 @@ -6683,7 +6683,7 @@ Entries: - type: Remove message: >- The button for "Suit/Skirt Preference" has also been removed. Suit - selection is done via Loadouts. + selection is done via Loadouts. id: 6390 time: '2024-09-28T00:46:19.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/957 @@ -6789,7 +6789,7 @@ Entries: message: >- Nerfed the fuck out of Reagent Slimes. They have 1/3rd as much HP, spawn half as many during reagent slime vents, deal significantly less damage, - and inject a lot less chems when biting people. + and inject a lot less chems when biting people. id: 6401 time: '2024-09-29T17:42:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/977 @@ -6836,7 +6836,7 @@ Entries: message: >- Oni now have a built-in negative trait that acts as a more severe version of Low Psi-Potential. Oni now have significant penalties to - generating new Psionic Powers. + generating new Psionic Powers. id: 6406 time: '2024-09-30T18:28:31.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/983 @@ -6987,7 +6987,7 @@ Entries: message: >- Nerfed Lotophagoi Moodlets so that both the positive and negative moodlets only last for 10 minutes. The total mood modification has been - left untouched. + left untouched. id: 6423 time: '2024-10-07T15:29:05.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1013 @@ -7005,7 +7005,7 @@ Entries: - type: Add message: >- The Salvage Shittle has been replaced with the Pathfinder Expedition - Vessel from Frontier. + Vessel from Frontier. id: 6425 time: '2024-10-09T01:17:11.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1027 @@ -7208,7 +7208,7 @@ Entries: message: >- Added 8 new Physical Traits. These are, Cyber-Eyes Basic System(Plus 4 different modular options), Bionic Arm, Dermal Armor, and Platelet - Factories. + Factories. id: 6445 time: '2024-10-13T19:25:05.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1035 @@ -7220,7 +7220,7 @@ Entries: station staff. New loadout items for corporate contractors are now available for Bartender, Botanist, Cataloguer, Chef, and Janitor. Currently there are no jumpskirt versions of these uniforms. We are - looking for people willing to make skirt variations of each of these. + looking for people willing to make skirt variations of each of these. id: 6446 time: '2024-10-13T19:26:23.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1041 @@ -7286,7 +7286,7 @@ Entries: - type: Tweak message: >- Psionic Rolls should now generate larger, random amounts of Potentia. - This should make it a lot easier to obtain powers. + This should make it a lot easier to obtain powers. id: 6453 time: '2024-10-15T23:13:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1047 @@ -7384,7 +7384,7 @@ Entries: message: >- The Syndicate has significantly expanded their Listening Outpost operations, featuring larger, better defended outposts. These new - outposts also serve as supply depots for Syndicate agents in the field. + outposts also serve as supply depots for Syndicate agents in the field. id: 6465 time: '2024-10-19T08:45:44.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1065 @@ -7591,7 +7591,7 @@ Entries: message: >- The Syndicate Listening Post now has a custom communications console, which no longer can recall Nanotrasen shuttles, and doesn't sign its - messages as Nuclear Operatives. + messages as Nuclear Operatives. id: 6490 time: '2024-10-27T15:31:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1143 @@ -7646,12 +7646,12 @@ Entries: New psi-power "Summon Imp", as the first new Psi Familiar. Imps are small motes of living flame that follow and protect their summoner. Imps also emit an incredibly bright light, and can natively cast Pyrokinetic - Flare. + Flare. - type: Add message: >- Remilia has been updated to be a Psi Familiar, and no longer requires the Bible to summon. Chaplains now start with a Power that lets them - summon Remilia once every 2 minutes. + summon Remilia once every 2 minutes. id: 6495 time: '2024-10-27T16:51:18.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1146 @@ -7690,7 +7690,7 @@ Entries: - type: Tweak message: >- Literally doubled the power output of solar panels, to make them - actually worthwhile to setup. + actually worthwhile to setup. id: 6498 time: '2024-11-02T00:40:50.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1170 @@ -7744,7 +7744,7 @@ Entries: - type: Add message: >- lockers for Syndicate Agent (for mapping), Janitor and Bartender have - been added. + been added. - type: Add message: a new wall variant has been added for the radiation closet - type: Add @@ -7781,7 +7781,7 @@ Entries: message: >- Communications Consoles that are marked as "Can't Recall The Shuttle" now can't recall the shuttle. Previously they were still able to recall - it. + it. id: 6506 time: '2024-11-05T04:12:36.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1180 @@ -7829,7 +7829,7 @@ Entries: - type: Remove message: >- Shadowkin have been temporarily disabled pending significant reworks and - balance updates. + balance updates. id: 6512 time: '2024-11-08T19:33:53.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1187 @@ -7849,7 +7849,7 @@ Entries: - type: Fix message: >- Fixed AddTrait and ReplaceTrait functions giving players an unmodified, - completely default component. + completely default component. id: 6514 time: '2024-11-10T15:22:47.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1195 @@ -7991,7 +7991,7 @@ Entries: - type: Add message: >- The stamina cost of an object's power attack can now be revealed by - examining its damage values. + examining its damage values. - type: Tweak message: >- Power attacks can't be done if your stamina is too low, so you can't @@ -8056,12 +8056,12 @@ Entries: - type: Tweak message: >- CyberEyes Basic System has been split, now Flash Protection is a - separate module. + separate module. - type: Add message: >- Dermal Armor no longer replaces your original species damage resistances. It now stacks multiplicatively with your original - resistances. + resistances. - type: Tweak message: Dermal Armor can now be taken by any species, not just Humans. - type: Add @@ -8234,7 +8234,7 @@ Entries: - type: Fix message: >- Fixed biosynthetic and other printable parts not allowing you to attach - body parts to them. + body parts to them. - type: Fix message: Fixed fire being able to destroy your chest. - type: Fix @@ -8260,7 +8260,7 @@ Entries: - type: Tweak message: >- Unbound shitmed targeting doll keybinds by default (did you know we have - those). + those). id: 6546 time: '2024-11-30T16:06:56.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1271 @@ -8270,7 +8270,7 @@ Entries: message: >- All engineering roles have had their equipment loadouts significantly expanded upon. Engineers can now buy construction materials with their - loadout points. + loadout points. - type: Fix message: All engineering jobs now have their Suit/Skirt selection via loadouts. - type: Add @@ -8289,7 +8289,7 @@ Entries: - type: Add message: >- Added various articles of religious headgear to loadouts, such as Hijab, - Kippah, and Turban. All of these are set to allow custom colors. + Kippah, and Turban. All of these are set to allow custom colors. id: 6548 time: '2024-11-30T18:52:35.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1297 @@ -8372,7 +8372,7 @@ Entries: - type: Fix message: >- Enabled the "Mend brain tissue" surgical procedure on a lobotomized - target. + target. - type: Fix message: >- The lobotomized effect is now stored in the brain instead of the body. @@ -8505,7 +8505,7 @@ Entries: message: >- Examining the damage values of an item now shows its throwing damage, throwing stamina cost, whether or not it embeds on a throw, and if the - embed deals damage over time. + embed deals damage over time. - type: Add message: Examining an embedded item now shows what body part it's embedded in. - type: Tweak @@ -8661,7 +8661,7 @@ Entries: - type: Add message: >- Added a variety of Pointy Ears markings for Harpy and Arachne - characters. + characters. id: 6578 time: '2024-12-15T19:13:50.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1348 @@ -8729,7 +8729,7 @@ Entries: - type: Remove message: >- Removed all 'specific color' variants of colorable items from Loadouts, - such as "Blue Jumpsuit" when a colorable jumpsuit exists. + such as "Blue Jumpsuit" when a colorable jumpsuit exists. id: 6585 time: '2024-12-21T18:02:28.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1364 @@ -8837,7 +8837,7 @@ Entries: message: >- Tweaked arrivals to reduce the playable area, and some concessions have been made to prevent access to admeme items that were on display. These - changes are pending a later update where we port Arrivals Job Spawns. + changes are pending a later update where we port Arrivals Job Spawns. id: 6597 time: '2024-12-30T21:15:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1371 @@ -9152,3 +9152,211 @@ Entries: id: 6628 time: '2025-01-04T16:59:01.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1417 +- author: CerberusWolfie + changes: + - type: Add + message: Added and identifiers. Go wild in SOP! + id: 6629 + time: '2025-01-05T16:01:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1427 +- author: Skubman + changes: + - type: Add + message: >- + Lamiae can now be male, no longer being a female-only species. They can + now wear facial hair as well. + - type: Add + message: >- + The Lamia species can now select markings above the leg, including + cybernetics, makeup, tattoos, noses, earrings, heterochromia, bracelets, + reptilian horns and frills, pointy ears, and more! + - type: Fix + message: Added text for the Lamia tail marking. + id: 6630 + time: '2025-01-05T18:09:37.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1440 +- author: Skubman + changes: + - type: Fix + message: >- + Fixed embeddable damage over time not showing when examining an item's + damage values. + - type: Fix + message: 'Fixed the emag not dealing passive damage when embedded on a target. ' + - type: Tweak + message: >- + Examining an item's damage values now shows values in a sorted order. + From top to bottom: gun damage, melee damage, throwing damage, embedded + damage. + - type: Tweak + message: >- + Spears now have a 6 stamina cost when thrown, and they no longer break + when thrown enough times. + - type: Tweak + message: Floor tiles now break when thrown 10 times instead of 4 times. + - type: Tweak + message: >- + Closets, lockers and crates now play the proper sound effect when thrown + (by Space Wind). + id: 6631 + time: '2025-01-05T18:10:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1434 +- author: Skubman + changes: + - type: Add + message: >- + Added two new traits: Steadfast and Feeble that decrease or increase the + effect of slows from injuries. + - type: Tweak + message: >- + Injury slows for most species has been slightly increased, but this can + be mitigated with the Steadfast trait. + - type: Tweak + message: >- + The jackboots' injury slow resistance has been decreased from 50% to + 20%. + - type: Tweak + message: Combat boots now add resistance to injury slows like jackboots. + id: 6632 + time: '2025-01-05T18:24:29.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1431 +- author: VMSolidus + changes: + - type: Add + message: >- + Footprints are now cleaned in a small radius around the mouse cursor + when mopping them. + id: 6633 + time: '2025-01-05T18:27:12.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1439 +- author: Skubman + changes: + - type: Fix + message: >- + Pacified characters (Pacifist trait and thieves) can no longer throw + items that deal throwing damage. + id: 6634 + time: '2025-01-05T18:30:15.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1433 +- author: Skubman + changes: + - type: Tweak + message: >- + The Parkour Training trait has been reworked. It no longer makes you lie + down or get up faster, but grants you 30% shorter slip stuns and 50% + resistance against slows in difficult terrain. + - type: Tweak + message: >- + The Sluggish and Snail-Paced traits now only reduce your movement speed + with no other effects. The speed reductions have been slightly increased + from 15% to 16% for Sluggish, and 30% to 32% for Snail-Paced. + - type: Add + message: >- + Added a new 3-point negative trait called Bad Knees. It is the opposite + of Parkour Training and it makes you climb tables slower, stunned for + longer against slip stuns, and move more slowly in difficult terrain. + - type: Tweak + message: Snail-Paced no longer prevents you from slipping when running. + id: 6635 + time: '2025-01-05T18:31:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1432 +- author: Skubman + changes: + - type: Fix + message: >- + The Face marking category now has unlimited markings for all species + apart from IPCs. + - type: Fix + message: >- + Moth People can now apply Moth makeup markings again in the Face + category. + - type: Tweak + message: >- + Unathi now have 3 'Head (Side)' marking points available, so they can + use frills and both left and right-side earrings. + id: 6636 + time: '2025-01-05T18:35:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1435 +- author: VMSolidus + changes: + - type: Fix + message: >- + Lamia now make drag marks when moving through puddles instead of regular + footprints. + id: 6637 + time: '2025-01-05T18:37:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1425 +- author: VMSolidus + changes: + - type: Fix + message: 'Confiscated Pun Pun''s blackface. ' + id: 6638 + time: '2025-01-05T19:21:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1437 +- author: VMSolidus + changes: + - type: Tweak + message: 'Mimes can no longer take the Muted or Foreigner traits. ' + - type: Tweak + message: >- + "Rare" languages like Sinta'Azaziba, Valyrian Standard, now cost points + instead of giving points. + - type: Tweak + message: Sign Language now costs points. + id: 6639 + time: '2025-01-05T19:45:18.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1441 +- author: VMSolidus + changes: + - type: Add + message: Ported a ton of new clothing items from Frontier + id: 6640 + time: '2025-01-05T19:45:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1388 +- author: VMSolidus + changes: + - type: Fix + message: Fixed the Syndicate Listening Post not correctly spawning. + id: 6641 + time: '2025-01-05T19:45:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1438 +- author: The Den Contributors + changes: + - type: Fix + message: >- + Put actual prescription lenses in the prescription medhuds and sechuds + (by KyuPolaris) + - type: Add + message: >- + Added the CMO turtleneck and head mirror to the CMO loadouts. (by + sleepyyapril, KyuPolaris) + - type: Add + message: >- + Added an armored trenchcoat for the Captain. Enjoy your swag! (by + Rosycup) + - type: Fix + message: Fixed uneven pants leg on summer security uniforms. (by Rosycup) + - type: Add + message: >- + Added the Captain's Combat Gas Mask, for those more fond of close + encounters. (by Rosycup) + - type: Tweak + message: >- + Added the Captain's Trenchcoat to the other captain locker variants. (by + Rosycup) + - type: Fix + message: >- + Fixed they/them pronouns being displayed for it/its characters in the + character preview. (by Azzy) + id: 6642 + time: '2025-01-05T20:46:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1443 +- author: TwoDucksOnnaPlane + changes: + - type: Fix + message: >- + Fixed Syndicate Elite hardsuit being one singular Telecrystal. Cybersun + will never recover from this financial blunder. + id: 6643 + time: '2025-01-07T01:21:34.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1449 diff --git a/Resources/Locale/en-US/damage/stamina.ftl b/Resources/Locale/en-US/damage/stamina.ftl index 09f9164497a..777101f93e4 100644 --- a/Resources/Locale/en-US/damage/stamina.ftl +++ b/Resources/Locale/en-US/damage/stamina.ftl @@ -1,5 +1,5 @@ melee-stamina = Not enough stamina -slow-on-damage-modifier-examine = Slowness from injuries is reduced by [color=yellow]{$mod}%[/color] +slow-on-damage-modifier-examine = Slowness from injuries is reduced by [color=yellow]{$mod}%[/color]. throw-no-stamina = You don't have enough stamina to throw the {$item}! diff --git a/Resources/Locale/en-US/markings/lamia.ftl b/Resources/Locale/en-US/markings/lamia.ftl new file mode 100644 index 00000000000..6e32e2fe364 --- /dev/null +++ b/Resources/Locale/en-US/markings/lamia.ftl @@ -0,0 +1,4 @@ +marking-LamiaBottom = Lamia Tail +marking-LamiaBottom-bottom3tone1 = Lamia Tail Bottom +marking-LamiaBottom-bottom3tone2 = Lamia Tail Middle +marking-LamiaBottom-bottom3tone3 = Lamia Tail Top diff --git a/Resources/Locale/en-US/preferences/humanoid-character-profile.ftl b/Resources/Locale/en-US/preferences/humanoid-character-profile.ftl index 800da35ba52..9058f8d2b63 100644 --- a/Resources/Locale/en-US/preferences/humanoid-character-profile.ftl +++ b/Resources/Locale/en-US/preferences/humanoid-character-profile.ftl @@ -5,5 +5,6 @@ humanoid-character-profile-summary = This is {$name}. {$gender -> [male] He is [female] She is + [neuter] It is *[other] They are -} {$age} years old. \ No newline at end of file +} {$age} years old. diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 25188ca851b..37de6238d7e 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -163,6 +163,20 @@ trait-description-LowPainTolerance = Your tolerance for pain is far below average, and its effects are more inhibiting. Your melee/throwing damage is penalized by up to an additional 15% when taking stamina damage. +trait-name-Steadfast = Steadfast +trait-description-Steadfast = + When others would buckle from the weight of your injuries, you still march forward unrelentingly. + For most species [color=gray](excluding IPC/Shadowkin)[/color], this trait modifies: + - [color=yellow]25%[/color] movement slow at [color=red]60[/color] damage ➔ [color=yellow]17%[/color] movement slow at [color=red]70[/color] damage + - [color=yellow]45%[/color] movement slow at [color=red]80[/color] damage ➔ [color=yellow]30%[/color] movement slow at [color=red]90[/color] damage + +trait-name-Feeble = Feeble +trait-description-Feeble = + Your body responds poorly to injuries, making damage affect your movement more severely. + For most species [color=gray](excluding IPC/Shadowkin)[/color], this trait modifies: + - [color=yellow]25%[/color] movement slow at [color=red]60[/color] damage ➔ [color=yellow]30%[/color] movement slow at [color=red]45[/color] damage + - [color=yellow]45%[/color] movement slow at [color=red]80[/color] damage ➔ [color=yellow]54%[/color] movement slow at [color=red]65[/color] damage + trait-name-MartialArtist = Martial Artist trait-description-MartialArtist = You have received formal training in unarmed combat, whether with Fists, Feet, or Claws. @@ -210,20 +224,32 @@ trait-description-Voracious = Nothing gets between you and your food. Your endless consumption of food and drinks is twice as fast. +-terrain-example = [color=gray](e.g. spider web, slime puddle, kudzu, space glue)[/color] +-slippery-example = [color=gray](e.g. banana peel, water puddle, soap, space lube)[/color] + trait-name-ParkourTraining = Parkour Training trait-description-ParkourTraining = Whether as a hobby, lifestyle, or professional training, you are trained in the discipline of parkour. - You're faster with climbing, crawling, lying down, and getting up. + You climb structures like tables [color=yellow]50%[/color] faster. + Slipping leaves you stunned for [color=yellow]30%[/color] shorter. { -slippery-example } + You gain a [color=yellow]50%[/color] resistance to slows from difficult terrain. { -terrain-example } + +trait-name-BadKnees = Bad Knees +trait-description-BadKnees = + Whether due to injury, age, or wear and tear, your knees aren't particularly strong or flexible. + You climb structures like tables [color=yellow]50%[/color] slower. + Slipping leaves you stunned for [color=yellow]40%[/color] longer. { -slippery-example } + Difficult terrain slows you down [color=yellow]35%[/color] more. { -terrain-example } trait-name-Sluggish = Sluggish trait-description-Sluggish = You navigate the world slower than others, perhaps due to a medical condition, inactivity, or age. - You move slower, and it takes longer for you to climb, lie down and get up. + Your movement speed is decreased by [color=yellow]16%[/color]. trait-name-SnailPaced = Snail-Paced trait-description-SnailPaced = You walk at a snail's pace, perhaps due to a medical condition, mobility impairment, or age. - You move substantially slower, and it takes far longer for you to climb, lie down and get up. + Your movement speed is decreased by [color=yellow]32%[/color]. trait-name-LightStep = Light Step trait-description-LightStep = diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml index 937ee63b504..8ff4a819eee 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml @@ -43,7 +43,7 @@ sprite: Objects/Specific/Service/vending_machine_restock.rsi state: base product: CrateVendingMachineRestockAutoDrobeFilled - cost: 1730 + cost: 3500 category: cargoproduct-category-name-service group: market diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml index 94e10d76eea..b1a92711584 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml @@ -39,7 +39,10 @@ - id: ClothingNeckMantleCMO - id: ClothingCloakCmo - id: ClothingOuterCoatLabCmo + - id: ClothingUniformJumpsuitCMOTurtle + - id: ClothingUniformJumpskirtCMOTurtle - id: ClothingHeadHatBeretCmo + - id: ClothingHeadMirror - id: ClothingEyesGlasses - id: ClothingOuterWinterCMO diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index fec4f3ffcf0..664da15f653 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -33,6 +33,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -54,6 +55,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -74,6 +76,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -331,4 +334,4 @@ - id: JetpackBlue - id: SpaceCash1000 - id: BeachBall - - id: BikeHorn \ No newline at end of file + - id: BikeHorn diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml b/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml index f2177916830..e7a367c454c 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/medical.yml @@ -45,6 +45,8 @@ contents: - id: HandheldHealthAnalyzer prob: 0.6 + - id: ClothingHeadMirror + prob: 0.1 - id: ClothingHandsGlovesLatex - id: ClothingHeadsetMedical - id: ClothingEyesHudMedical diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml index 734bd485a2e..94ef753c789 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml @@ -228,6 +228,7 @@ - id: OxygenTankFilled - id: ClothingOuterHardsuitCap - id: ClothingMaskGasCaptain + - id: ClothingMaskGasCaptainCombat - type: AccessReader access: [["Captain"]] diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml index 6f1b813a8f5..21c0eb011e6 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml @@ -1,21 +1,26 @@ - type: vendingMachineInventory id: PietyVendInventory startingInventory: - ClothingUniformJumpsuitChaplain: 2 - ClothingUniformJumpskirtChaplain: 2 - ClothingUniformJumpsuitMonasticRobeDark: 1 - ClothingUniformJumpsuitMonasticRobeLight: 1 + ClothingUniformJumpsuitChaplain: 3 + ClothingUniformJumpskirtChaplain: 3 + ClothingUniformJumpsuitMonasticRobeDark: 3 + ClothingUniformJumpsuitMonasticRobeLight: 3 + ClothingOuterHoodieChaplain: 3 + ClothingOuterHoodieBlack: 3 + ClothingHeadHatHoodNunHood: 3 + ClothingOuterNunRobe: 3 + ClothingHeadHatFez: 3 + ClothingHeadHatPlaguedoctor: 3 + ClothingHeadHatWitch: 3 + ClothingHeadHatWitch1: 3 + ClothingOuterPlagueSuit: 3 + ClothingMaskPlague: 3 + ClothingNeckScarfChaplainStole: 3 + ClothingHeadsetService: 4 + RubberStampChaplain: 3 + Bible: 3 + ClothingNeckCrucifix: 3 ClothingNeckStoleChaplain: 1 - ClothingOuterHoodieChaplain: 1 - ClothingOuterHoodieBlack: 1 - ClothingHeadHatHoodNunHood: 1 - ClothingOuterNunRobe: 1 - ClothingHeadHatFez: 1 - ClothingHeadHatPlaguedoctor: 1 - ClothingHeadHatWitch: 1 - ClothingHeadHatWitch1: 1 - ClothingOuterPlagueSuit: 1 - ClothingMaskPlague: 1 #ClothingHeadsetService: 2 # Delta-V - Chaplain is no longer service dept BoxCandle: 2 BoxCandleSmall: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 9a1566dab99..ff8b4087abe 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -88,6 +88,50 @@ ClothingShoesBootsCowboyBlack: 1 ClothingShoesBootsCowboyWhite: 1 ClothingMaskNeckGaiterRed: 2 + ClothingUniformJumpskirtPerformer: 2 + ClothingShoesBootsPerformer: 2 + ClothingNeckCloakMoth: 2 + ClothingUniformJumpskirtJanimaid: 2 + ClothingNeckCloakVoid: 2 + ClothingHeadBandRed: 1 + ClothingHeadHatPirate: 1 + ClothingOuterCoatPirate: 1 + ClothingUniformJumpsuitPirate: 1 + ClothingShoesBootsLaceup: 2 + FoamCutlass: 2 + ClothingHeadSafari: 2 # Frontier + ClothingUniformJumpsuitSafari: 2 # Frontier + ClothingUniformRandomArmlessNoSkirt: 6 # Frontier + ClothingUniformRandomArmless: 6 # Frontier + ClothingUniformRandomStandard: 6 # Frontier + ClothingUniformRandomBra: 6 # Frontier + ClothingUniformRandomShorts: 6 # Frontier + ClothingUniformRandomShirt: 6 # Frontier + ClothingHandsGlovesBoxingRed: 2 + ClothingHandsGlovesBoxingBlue: 2 + ClothingHandsGlovesBoxingYellow: 2 + ClothingHandsGlovesBoxingGreen: 2 + UniformShortsRed: 4 + UniformShortsRedWithTop: 4 + ClothingBackpackClownFilled: 2 + ClothingBackpackSatchelClown: 2 + ClothingBackpackDuffelClown: 2 + ClothingMaskClown: 2 + ClothingShoesClown: 2 + ClothingUniformJumpsuitClown: 2 + RubberStampClown: 1 + ClothingBackpackMime: 2 + ClothingBackpackSatchelMime: 2 + ClothingBackpackDuffelMime: 2 + ClothingHeadHatMimesoft: 2 + ClothingMaskMime: 2 + ClothingUniformJumpsuitMime: 2 + ClothingUniformJumpskirtMime: 2 + ClothingBeltSuspenders: 2 + RubberStampMime: 1 + contrabandInventory: # Frontier - Hidden inventory + ClothingHeadHatMimesoftFlipped: 1 + BarberScissors: 1 ClothingNeckBellCollar: 2 ClothingOuterUnathiRobe: 1 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 0bc47d74eb7..7f9088a3d06 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -1495,7 +1495,7 @@ discountDownTo: Telecrystal: 7 cost: - Telecrystal: 1 + Telecrystal: 12 categories: - UplinkWearables @@ -1850,4 +1850,4 @@ cost: Telecrystal: 1 categories: - - UplinkWearables \ No newline at end of file + - UplinkWearables diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml index 50eb4dc8bed..033a52c6bdb 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml @@ -69,3 +69,31 @@ id: LoadoutOuterCoatInspector - type: loadout id: LoadoutOuterCoatOvercoat + - type: loadout + id: LoadoutOuterBomberAerostatic + - type: loadout + id: LoadoutOuterBomberPunkRed + - type: loadout + id: LoadingOuterCoatJacketLeather + - type: loadout + id: LoadoutOuterJacketBiker + - type: loadout + id: LoadoutOuterJacketJamrock + - type: loadout + id: LoadoutOuterJacketLettermanBlue + - type: loadout + id: LoadoutOuterJacketLettermanBrown + - type: loadout + id: LoadoutOuterJacketLettermanMagenta + - type: loadout + id: LoadoutOuterJacketLettermanRed + - type: loadout + id: LoadoutOuterCoatAcidRaincoat + - type: loadout + id: LoadoutOuterCoatAcidRaincoatBlue + - type: loadout + id: LoadoutOuterCoatAcidRaincoatGreen + - type: loadout + id: LoadoutOuterCoatAcidRaincoatMagenta + - type: loadout + id: LoadoutOuterCoatAcidRaincoatYellow diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml index 57df945ec91..842c285909b 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml @@ -107,6 +107,8 @@ items: - type: loadout id: LoadoutCommandCapMaskGas + - type: loadout + id: LoadoutCommandCapMaskGasCombat - type: characterItemGroup id: LoadoutCaptainOuter @@ -116,6 +118,8 @@ id: LoadoutCommandCapOuterWinter - type: loadout id: LoadoutCaptainOuterCarapace + - type: loadout + id: LoadoutCaptainOuterTrench - type: characterItemGroup id: LoadoutCaptainShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml index 6e9bd02b4f6..77f6b3f26e9 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml @@ -46,6 +46,8 @@ items: - type: loadout id: LoadoutChiefMedicalOfficerNTPDA + - type: loadout + id: LoadoutClothingHeadMirror - type: characterItemGroup id: LoadoutChiefMedicalOfficerNeck @@ -91,3 +93,7 @@ id: LoadoutChiefMedicalOfficerJumpsuit - type: loadout id: LoadoutChiefMedicalOfficerJumpskirt + - type: loadout + id: LoadoutChiefMedicalOfficerTurtleskirt + - type: loadout + id: LoadoutChiefMedicalOfficerTurtlesuit diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml index 1e8a64b0df4..f11cb930f04 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml @@ -11,6 +11,7 @@ - type: Construction graph: PrescriptionMedHud node: prescmedhud + - type: VisionCorrection - type: ShowHealthBars damageContainers: - Biological @@ -31,6 +32,7 @@ sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi - type: Clothing sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi + - type: VisionCorrection - type: Construction graph: PrescriptionSecHud node: prescsechud diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/lamia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/lamia.yml index 38601f21b54..9d7a85f97dd 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/lamia.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/lamia.yml @@ -106,14 +106,19 @@ - map: [ "belt2" ] - map: [ "neck" ] - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.Face" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] - map: [ "enum.HumanoidVisualLayers.Hair" ] - state: bald - sprite: Mobs/Customization/human_hair.rsi + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] - map: [ "mask" ] - map: [ "head" ] - map: [ "pocket1" ] - map: [ "pocket2" ] - - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false - type: Damageable damageContainer: Biological damageModifierSet: Scale #TODO: make a new damage modifier set @@ -216,6 +221,11 @@ types: Bloodloss: -1 - type: PortalExempt + - type: FootPrints + leftBarePrint: "dragging-1" + rightBarePrint: "dragging-1" + shoesPrint: "dragging-1" + suitPrint: "dragging-1" - type: entity save: false @@ -273,14 +283,15 @@ - map: [ "belt" ] - map: [ "neck" ] - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.Face" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] - map: [ "enum.HumanoidVisualLayers.Hair" ] - state: bald - sprite: Mobs/Customization/human_hair.rsi + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] - map: [ "mask" ] - map: [ "head" ] - map: [ "pocket1" ] - map: [ "pocket2" ] - - map: [ "enum.HumanoidVisualLayers.HeadTop" ] - map: [ "enum.HumanoidVisualLayers.Tail" ] - type: Inventory templateId: lamia diff --git a/Resources/Prototypes/DeltaV/Species/lamia.yml b/Resources/Prototypes/DeltaV/Species/lamia.yml index 1f7da8306d2..2e58a1681c2 100644 --- a/Resources/Prototypes/DeltaV/Species/lamia.yml +++ b/Resources/Prototypes/DeltaV/Species/lamia.yml @@ -10,8 +10,6 @@ maleFirstNames: names_cyno_male femaleFirstNames: names_cyno_female lastNames: names_cyno_last - sexes: - - Female - type: markingPoints id: MobLamiaMarkingLimits @@ -19,17 +17,49 @@ Hair: points: 1 required: false + FacialHair: + points: 1 + required: false + Snout: + points: 1 + required: false + HeadTop: + points: 2 + required: false + HeadSide: + points: 3 + required: false Tail: points: 1 required: true defaultMarkings: [ LamiaBottom ] + Chest: + points: 1 + required: false + RightArm: + points: 2 + required: false + RightHand: + points: 3 + required: false + LeftArm: + points: 2 + required: false + LeftHand: + points: 3 + required: false - type: speciesBaseSprites id: MobLamiaSprites sprites: Head: MobHumanHead + Face: MobHumanoidAnyMarking + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking Hair: MobHumanoidAnyMarking + FacialHair: MobHumanoidAnyMarking + Snout: MobHumanoidAnyMarking Chest: MobHumanTorso Eyes: MobHumanoidEyes LArm: MobHumanLArm diff --git a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml index 4c276a3346a..0ad6519c764 100644 --- a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml @@ -37,9 +37,6 @@ - type: markingPoints id: MobVulpkaninMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index bd7899d75f8..0138d8aee47 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -86,6 +86,17 @@ - type: Clothing sprite: Clothing/Head/Misc/pwig.rsi +- type: entity + parent: ClothingHeadBase + id: ClothingHeadMirror + name: head mirror + description: I doubt even the CMO knows how to use this thing. + components: + - type: Sprite + sprite: Clothing/Head/Misc/head_mirror.rsi + - type: Clothing + sprite: Clothing/Head/Misc/head_mirror.rsi + - type: entity parent: ClothingHeadBase id: ClothingHeadHatRichard diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 383e32e99d6..c5b34a7a67f 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -88,6 +88,17 @@ - type: BreathMask - type: IngestionBlocker +- type: entity + parent: ClothingMaskGasExplorer + id: ClothingMaskGasCaptainCombat + name: captain's combat gas mask + description: A military-grade gas mask that can be connected to an air supply, painted and outfitted with an emblem befitting its wearer. Issued only to the station's finest. + components: + - type: Sprite + sprite: Clothing/Mask/gascaptaincombat.rsi + - type: Clothing + sprite: Clothing/Mask/gascaptaincombat.rsi + - type: entity parent: ClothingMaskGasAtmos id: ClothingMaskGasCentcom diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml index dc5454d597b..07fe385478a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml @@ -51,6 +51,17 @@ - type: Clothing sprite: Clothing/OuterClothing/Coats/gentlecoat.rsi +- type: entity + parent: [ClothingOuterArmorCaptainCarapace, ClothingOuterStorageBase] + id: ClothingOuterCoatCapTrench + name: captain's armored trenchcoat + description: A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence, outfitted with emblems and decor befitting its wearer. Issued only to the station's finest. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Coats/cap_trenchcoat.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Coats/cap_trenchcoat.rsi + - type: entity abstract: true parent: AllowSuitStorageClothing diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml index 069555c836a..01576a1f932 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml @@ -21,7 +21,7 @@ - type: Clothing sprite: Clothing/Shoes/Boots/jackboots.rsi - type: ClothingSlowOnDamageModifier - modifier: 0.5 + modifier: 0.8 - type: entity parent: ClothingShoesMilitaryBase @@ -67,6 +67,8 @@ sprite: Clothing/Shoes/Boots/combatboots.rsi - type: Clothing sprite: Clothing/Shoes/Boots/combatboots.rsi + - type: ClothingSlowOnDamageModifier + modifier: 0.8 - type: entity parent: ClothingShoesMilitaryBase @@ -93,6 +95,8 @@ sprite: Clothing/Shoes/Boots/mercboots.rsi - type: Clothing sprite: Clothing/Shoes/Boots/mercboots.rsi + - type: ClothingSlowOnDamageModifier + modifier: 0.6 - type: entity parent: ClothingShoesBaseButcherable diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 3ec17e2bbe4..e9ea1239285 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -137,7 +137,7 @@ - type: Clothing sprite: Clothing/Shoes/Specific/swat.rsi - type: ClothingSlowOnDamageModifier - modifier: 0.5 + modifier: 0.7 - type: entity parent: ClothingShoesBaseButcherable diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml index 18266dc4988..7f6d59c9a49 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml @@ -132,6 +132,17 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpskirt/cmo.rsi +- type: entity + parent: ClothingUniformSkirtBase + id: ClothingUniformJumpskirtCMOTurtle + name: chief medical officer's turtleneck jumpskirt + description: It's a turtleneck worn by those with the experience to be Chief Medical Officer. It provides minor biological protection. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpskirt/cmo_turtle.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpskirt/cmo_turtle.rsi + - type: entity parent: ClothingUniformSkirtBase id: ClothingUniformJumpskirtDetective diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index d2339764f88..3ada362ce0b 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -350,6 +350,17 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/cmo.rsi +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitCMOTurtle + name: chief medical officer's turtleneck jumpsuit + description: It's a turtleneck worn by those with the experience to be Chief Medical Officer. It provides minor biological protection. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/cmo_turtle.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/cmo_turtle.rsi + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitDetective diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index 7f6125e73d3..988b06de226 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -205,3 +205,13 @@ - type: Puddle solution: step - type: Appearance + - type: Drink + delay: 3 + transferAmount: 1 + solution: step + examinable: false + - type: ExaminableSolution + solution: step + - type: DrawableSolution + solution: step + - type: BadDrink diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/earrings.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/earrings.yml index cf98e96cff8..77b0ba3d0e9 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/earrings.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/earrings.yml @@ -2,7 +2,7 @@ id: EarringsStudLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -16,7 +16,7 @@ id: EarringsStudRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -30,7 +30,7 @@ id: EarringsHeavyLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -44,7 +44,7 @@ id: EarringsHeavyRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -58,7 +58,7 @@ id: EarringsDropBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -72,7 +72,7 @@ id: EarringsDropBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -86,7 +86,7 @@ id: EarringsDropColoredLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -102,7 +102,7 @@ id: EarringsDropColoredRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -118,7 +118,7 @@ id: EarringsDropLongLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -134,7 +134,7 @@ id: EarringsDropLongRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -150,7 +150,7 @@ id: EarringsCrescentLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -164,7 +164,7 @@ id: EarringsCrescentRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -178,7 +178,7 @@ id: EarringsBangleLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -192,7 +192,7 @@ id: EarringsBangleRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -206,7 +206,7 @@ id: EarringsHoopBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -220,7 +220,7 @@ id: EarringsHoopBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -234,7 +234,7 @@ id: EarringsHoopMiniLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -248,7 +248,7 @@ id: EarringsHoopMiniRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -262,7 +262,7 @@ id: EarringsCrossBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -276,7 +276,7 @@ id: EarringsCrossBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -290,7 +290,7 @@ id: EarringsCrossSaintPeterLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -304,7 +304,7 @@ id: EarringsCrossSaintPeterRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -318,7 +318,7 @@ id: EarringsGemstoneBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -334,7 +334,7 @@ id: EarringsGemstoneBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -350,7 +350,7 @@ id: EarringsGemstoneLongLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -366,7 +366,7 @@ id: EarringsGemstoneLongRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -382,7 +382,7 @@ id: EarringsGemstoneDoubleLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -400,7 +400,7 @@ id: EarringsGemstoneDoubleRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -418,7 +418,7 @@ id: EarringsDangleBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -434,7 +434,7 @@ id: EarringsDangleBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -450,7 +450,7 @@ id: EarringsDangleLongLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -466,7 +466,7 @@ id: EarringsDangleLongRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -482,7 +482,7 @@ id: EarringsEightLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -496,7 +496,7 @@ id: EarringsEightRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -510,7 +510,7 @@ id: EarringsCrystalBasicLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -526,7 +526,7 @@ id: EarringsCrystalBasicRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -542,7 +542,7 @@ id: EarringsCrystalLongLeft bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -558,7 +558,7 @@ id: EarringsCrystalLongRight bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Arachnid, Reptilian, Diona, Oni, Felinid, Vulpkanin, Harpy, Gingerbread, Arachne, Lamia] coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/face.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/face.yml index 2276c0a2378..eb1723eb23e 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/face.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/face.yml @@ -2,7 +2,7 @@ id: FaceBindi bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -16,7 +16,7 @@ id: FaceFullblush bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -30,7 +30,7 @@ id: FaceCheekspotRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -44,7 +44,7 @@ id: FaceCheekspotLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -58,7 +58,7 @@ id: FaceChesireRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -72,7 +72,7 @@ id: FaceChesireLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -86,7 +86,7 @@ id: FaceCrowRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -100,7 +100,7 @@ id: FaceCrowLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -114,7 +114,7 @@ id: FaceEarRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -128,7 +128,7 @@ id: FaceEarLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -142,7 +142,7 @@ id: FaceEyebrowRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -157,7 +157,7 @@ id: FaceEyebrowLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -172,7 +172,7 @@ id: FaceEyebrows bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -186,7 +186,7 @@ id: FaceEyecornerRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -200,7 +200,7 @@ id: FaceEyecornerLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -214,7 +214,7 @@ id: FaceEyelashRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -228,7 +228,7 @@ id: FaceEyelashLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -242,7 +242,7 @@ id: FaceEyestripe bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -256,7 +256,7 @@ id: FaceLipcornerRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -270,7 +270,7 @@ id: FaceLipcornerLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -284,7 +284,7 @@ id: FaceGlabella bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -298,7 +298,7 @@ id: FaceLowercheekRight bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -312,7 +312,7 @@ id: FaceLowercheekLeft bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -326,7 +326,7 @@ id: FaceNosetape bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -340,7 +340,7 @@ id: FaceNosetip bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -355,7 +355,7 @@ id: FaceNosestripe bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] coloring: default: type: @@ -369,7 +369,7 @@ id: FaceUnibrow bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] coloring: default: type: @@ -383,7 +383,7 @@ id: FaceNeckSlim bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] followSkinColor: true sprites: - sprite: Mobs/Customization/face.rsi @@ -393,7 +393,7 @@ id: FaceNeckWide bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] followSkinColor: true sprites: - sprite: Mobs/Customization/face.rsi @@ -403,7 +403,7 @@ id: FaceNeckSlimThick bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] followSkinColor: true sprites: - sprite: Mobs/Customization/face.rsi @@ -413,7 +413,7 @@ id: FaceNeckWideThick bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne] + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Reptilian, Vulpkanin, Arachne, Lamia] followSkinColor: true sprites: - sprite: Mobs/Customization/face.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index 6e8f7dc8194..c304e9c5314 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -2,7 +2,7 @@ id: GauzeLefteyePatch bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -16,7 +16,7 @@ id: GauzeLefteyePad bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -30,7 +30,7 @@ id: GauzeRighteyePatch bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -44,7 +44,7 @@ id: GauzeRighteyePad bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -58,7 +58,7 @@ id: GauzeBlindfold bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Harpy, Vulpkanin coloring: default: type: @@ -72,7 +72,7 @@ id: GauzeShoulder bodyPart: Chest markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -86,7 +86,7 @@ id: GauzeStomach bodyPart: Chest markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -100,7 +100,7 @@ id: GauzeUpperArmRight bodyPart: RArm markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -114,7 +114,7 @@ id: GauzeLowerArmRight bodyPart: RArm, RHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -198,7 +198,7 @@ id: GauzeBoxerWrapRight bodyPart: RHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -212,7 +212,7 @@ id: GauzeBoxerWrapLeft bodyPart: LHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_noses.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_noses.yml index a6ea6a6a422..1319e4f539e 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_noses.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_noses.yml @@ -4,7 +4,7 @@ markingCategory: Snout followSkinColor: true forcedColoring: true - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/human_noses.rsi state: schnozz @@ -15,7 +15,7 @@ markingCategory: Snout followSkinColor: true forcedColoring: true - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/human_noses.rsi state: nubby @@ -26,7 +26,7 @@ markingCategory: Snout followSkinColor: true forcedColoring: true - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/human_noses.rsi state: droop @@ -37,7 +37,7 @@ markingCategory: Snout followSkinColor: true forcedColoring: true - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/human_noses.rsi state: blob @@ -48,7 +48,7 @@ markingCategory: Snout followSkinColor: true forcedColoring: true - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/human_noses.rsi state: uppie diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/makeup.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/makeup.yml index 9ec2022b057..ec954a5655a 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/makeup.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/makeup.yml @@ -2,7 +2,7 @@ id: MakeupLips bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Dwarf, Human, SlimePerson, Felinid, Oni, Harpy, Arachne, Lamia] # Delta V - Felinid, Oni, Harpy coloring: default: type: @@ -16,7 +16,7 @@ id: MakeupBlush bodyPart: Face markingCategory: Face - speciesRestriction: [Dwarf, Human, Reptilian, SlimePerson, Felinid, Oni, Vulpkanin, Harpy, Arachne] # Delta V - Felinid, Oni, Vulpkanin, Harpy + speciesRestriction: [Dwarf, Human, Reptilian, SlimePerson, Felinid, Oni, Vulpkanin, Harpy, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin, Harpy coloring: default: type: @@ -30,7 +30,7 @@ id: MakeupNailPolishRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -44,7 +44,7 @@ id: MakeupNailPolishLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne] # Delta V - Felinid, Oni, Vulpkanin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -73,7 +73,7 @@ - type: marking id: MakeupMothBlush bodyPart: Face - markingCategory: Overlay + markingCategory: Face speciesRestriction: [Moth] coloring: default: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/pointy_ears.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/pointy_ears.yml index 237275e4193..53a0beac3f4 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/pointy_ears.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/pointy_ears.yml @@ -3,7 +3,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_standard @@ -13,7 +13,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_wide @@ -23,7 +23,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_small @@ -33,7 +33,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_upwards @@ -43,7 +43,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_tall @@ -53,7 +53,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_slanted @@ -63,7 +63,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_thin @@ -73,7 +73,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_large @@ -83,7 +83,7 @@ bodyPart: HeadSide markingCategory: HeadSide forcedColoring: true - speciesRestriction: [Oni, Harpy, Arachne] + speciesRestriction: [Oni, Harpy, Arachne, Lamia] sprites: - sprite: Mobs/Customization/pointy_ears.rsi state: pointy_ears_none diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml index 7be52c11f0a..0ba3ecc695b 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml @@ -67,7 +67,7 @@ id: LizardFrillsNeckfull bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_neckfull @@ -76,7 +76,7 @@ id: LizardHornsAngler bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_angler @@ -85,7 +85,7 @@ id: LizardHornsCurled bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_curled @@ -94,7 +94,7 @@ id: LizardHornsRam bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_ram @@ -103,7 +103,7 @@ id: LizardHornsShort bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_short @@ -112,7 +112,7 @@ id: LizardHornsSimple bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_simple @@ -121,7 +121,7 @@ id: LizardHornsDouble bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_double @@ -208,7 +208,7 @@ id: LizardChestTiger bodyPart: Chest markingCategory: Chest - speciesRestriction: [Reptilian, Shadowkin] + speciesRestriction: [Reptilian, Shadowkin, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: body_tiger @@ -226,7 +226,7 @@ id: LizardLArmTiger bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: l_arm_tiger @@ -244,7 +244,7 @@ id: LizardRArmTiger bodyPart: RArm markingCategory: RightArm - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: r_arm_tiger @@ -262,7 +262,7 @@ id: LizardHornsArgali bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_argali @@ -271,7 +271,7 @@ id: LizardHornsAyrshire bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_ayrshire @@ -280,7 +280,7 @@ id: LizardHornsMyrsore bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_myrsore @@ -289,7 +289,7 @@ id: LizardHornsBighorn bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Human, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_bighorn @@ -325,7 +325,7 @@ id: LizardChestBackspikes bodyPart: Chest markingCategory: Chest - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: body_backspikes diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml index c9050975aa3..150c6278d00 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml @@ -2,7 +2,7 @@ id: ScarEyeRight bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni, Arachne] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni, Arachne, Lamia] # Delta V - Felinid, Oni, Harpy followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi @@ -12,7 +12,7 @@ id: ScarEyeLeft bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni, Arachne] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni, Arachne, Lamia] # Delta V - Felinid, Oni, Harpy followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi @@ -22,7 +22,7 @@ id: ScarTopSurgeryShort bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne, Lamia] sexRestriction: [Male] followSkinColor: true sprites: @@ -33,7 +33,7 @@ id: ScarTopSurgeryLong bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne, Lamia] sexRestriction: [Male] followSkinColor: true sprites: @@ -44,7 +44,7 @@ id: ScarChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne] + speciesRestriction: [Human, Dwarf, Felinid, Oni, Arachne, Lamia] followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index 8b659885669..5aaf5d4870f 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -2,7 +2,7 @@ id: TattooHiveChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne, Lamia] # Delta V - Felinid, Oni coloring: default: type: @@ -16,7 +16,7 @@ id: TattooNightlingChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne, Lamia] # Delta V - Felinid, Oni coloring: default: type: @@ -58,7 +58,7 @@ id: TattooCampbellLeftArm bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne, Lamia] # Delta V - Felinid, Oni coloring: default: type: @@ -72,7 +72,7 @@ id: TattooCampbellRightArm bodyPart: RArm markingCategory: RightArm - speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Oni, Shadowkin, Arachne, Lamia] # Delta V - Felinid, Oni coloring: default: type: @@ -114,7 +114,7 @@ id: TattooEyeRight bodyPart: Eyes markingCategory: Head - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni, Harpy, Lamia] # Delta V - Felinid, Oni, Harpy coloring: default: type: @@ -128,7 +128,7 @@ id: TattooEyeLeft bodyPart: Eyes markingCategory: Head - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni, Harpy, Lamia] # Delta V - Felinid, Oni, Harpy coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/wrist.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/wrist.yml index 0e2f9be912a..01bd1cf85a0 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/wrist.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/wrist.yml @@ -2,7 +2,7 @@ id: WristBraceletRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -17,7 +17,7 @@ id: WristBraceletLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -31,7 +31,7 @@ id: WristBraceletArmRight bodyPart: RArm markingCategory: RightArm - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -45,7 +45,7 @@ id: WristBraceletArmLeft bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -59,7 +59,7 @@ id: WristWatchRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -73,7 +73,7 @@ id: WristWatchLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -87,7 +87,7 @@ id: WristWatchSilverRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -101,7 +101,7 @@ id: WristWatchSilverLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -115,7 +115,7 @@ id: WristWatchGoldRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -129,7 +129,7 @@ id: WristWatchGoldLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -143,7 +143,7 @@ id: WristWatchHoloRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -157,7 +157,7 @@ id: WristWatchHoloLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -171,7 +171,7 @@ id: WristWatchLeatherRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -185,7 +185,7 @@ id: WristWatchLeatherLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -199,7 +199,7 @@ id: WristWatchColorableRight bodyPart: RHand markingCategory: RightHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Diona, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: @@ -215,7 +215,7 @@ id: WristWatchColorableLeft bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne] + speciesRestriction: [Human, Dwarf, SlimePerson, Arachnid, Reptilian, Felinid, Oni, Vulpkanin, Gingerbread, Arachne, Lamia] coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/bishop.yml b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/bishop.yml index 2ae4bc6d62f..b491d9b9188 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/bishop.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/bishop.yml @@ -42,7 +42,7 @@ id: CyberLimbsMarkingBishopLArm bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/bishop/bishop_main.rsi state: l_arm-primary @@ -55,7 +55,7 @@ id: CyberLimbsMarkingBishopLHand bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/bishop/bishop_main.rsi state: l_hand @@ -87,7 +87,7 @@ id: CyberLimbsMarkingBishopRArm bodyPart: RArm markingCategory: RightArm - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/bishop/bishop_main.rsi state: r_arm-primary @@ -101,7 +101,7 @@ id: CyberLimbsMarkingBishopRHand bodyPart: RHand markingCategory: RightHand - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/bishop/bishop_main.rsi state: r_hand diff --git a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml index d6e2194bf36..e9079751166 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/cyberlimbs/hesphiastos.yml @@ -37,7 +37,7 @@ id: CyberLimbsMarkingHesphiastosLArm bodyPart: LArm markingCategory: LeftArm - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi state: l_arm-1 @@ -48,7 +48,7 @@ id: CyberLimbsMarkingHesphiastosLHand bodyPart: LHand markingCategory: LeftHand - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi state: l_hand-1 @@ -84,7 +84,7 @@ id: CyberLimbsMarkingHesphiastosRArm bodyPart: RArm markingCategory: RightArm - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi state: r_arm-1 @@ -96,7 +96,7 @@ id: CyberLimbsMarkingHesphiastosRHand bodyPart: RHand markingCategory: RightHand - speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne] + speciesRestriction: [IPC, Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, HumanoidFoxes, Reptilian, Arachne, Lamia] sprites: - sprite: Mobs/Customization/cyberlimbs/hesphiastos/hesphiastos_main.rsi state: r_hand-1 diff --git a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml index 54c157cc3e0..816f6a6a3c7 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml @@ -58,7 +58,7 @@ - !type:GibBehavior { } - type: SlowOnDamage speedModifierThresholds: - 60: 0.7 + 60: 0.75 90: 0.5 120: 0.3 - type: SiliconDownOnDead @@ -142,4 +142,4 @@ - type: HumanoidAppearance species: IPC - type: Inventory - templateId: ipc \ No newline at end of file + templateId: ipc diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index f740b89f424..a9d96ecde54 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -90,8 +90,8 @@ species: Human - type: SlowOnDamage speedModifierThresholds: - 60: 0.8 # DV - Was 0.7 - 80: 0.6 # DV - Was 0.5 + 60: 0.75 + 80: 0.55 - type: Fixtures fixtures: # TODO: This needs a second fixture just for mob collisions. fix1: diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 3d3675dd33d..1eff8f9fc91 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -45,7 +45,7 @@ - type: DamageOnLand damage: types: - Blunt: 5 + Blunt: 2 - type: entity name: steel tile diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index cb556c7d4d9..468acc38517 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -37,6 +37,8 @@ size: Large sprite: Objects/Specific/Janitorial/mop.rsi - type: Absorbent + footprintCleaningRange: 0.45 + maxCleanedFootprints: 25 - type: SolutionContainerManager solutions: absorbed: @@ -94,6 +96,8 @@ sprite: Objects/Specific/Janitorial/advmop.rsi - type: Absorbent pickupAmount: 100 + footprintCleaningRange: 0.75 + maxCleanedFootprints: 25 - type: UseDelay delay: 1.0 - type: SolutionRegeneration diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index da67b5a5928..d79e637eef1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -116,6 +116,7 @@ - type: Tag tags: - Trash + - Ash # Frontier - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index dcfd1537c79..6321e5a0007 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -55,6 +55,7 @@ damage: types: Piercing: 10 + staminaCost: 6 - type: Item size: Ginormous - type: Clothing @@ -112,10 +113,6 @@ max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] - - type: DamageOnLand - damage: - types: - Blunt: 5 - type: UseDelay - type: Appearance - type: SolutionContainerVisuals diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index d65d652ff42..8c3eeab6fa6 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -47,7 +47,7 @@ sound: collection: MetalBreak - type: StaticPrice - price: 10 + price: 25 - type: RequireProjectileTarget #Starts unanchored, cannot be rotated while anchored diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 75b593fbcc0..adf6bd94aa8 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -1106,6 +1106,8 @@ - ClothingHeadHatBeretCmo - ClothingUniformJumpsuitCMO - ClothingUniformJumpskirtCMO + - ClothingUniformJumpsuitCMOTurtle + - ClothingUniformJumpskirtCMOTurtle - ClothingUniformJumpsuitDetective - ClothingUniformJumpskirtDetective - ClothingUniformJumpsuitEngineering diff --git a/Resources/Prototypes/Entities/Structures/base_structure.yml b/Resources/Prototypes/Entities/Structures/base_structure.yml index 207881894b8..d143151deb4 100644 --- a/Resources/Prototypes/Entities/Structures/base_structure.yml +++ b/Resources/Prototypes/Entities/Structures/base_structure.yml @@ -28,8 +28,10 @@ - type: DamageOtherOnHit damage: types: - Blunt: 8 + Blunt: 9 staminaCost: 50 + soundHit: + collection: MetalThud - type: entity # This means that it's not anchored on spawn. diff --git a/Resources/Prototypes/Loadouts/Generic/outerClothing.yml b/Resources/Prototypes/Loadouts/Generic/outerClothing.yml index 57f8b35132a..029c90c8e32 100644 --- a/Resources/Prototypes/Loadouts/Generic/outerClothing.yml +++ b/Resources/Prototypes/Loadouts/Generic/outerClothing.yml @@ -351,3 +351,153 @@ requirements: - !type:CharacterItemGroupRequirement group: LoadoutOuter + +- type: loadout + id: LoadoutOuterBomberAerostatic + category: Outer + cost: 0 + items: + - ClothingOuterCoatBomberAerostatic + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterBomberPunkRed + category: Outer + cost: 0 + items: + - ClothingOuterCoatBomberPunkRed + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketLeather + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketLeather + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketBiker + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketBiker + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketJamrock + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketJamrock + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketLettermanBlue + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketLettermanBlue + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketLettermanBrown + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketLettermanBrown + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketLettermanMagenta + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketLettermanMagenta + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterJacketLettermanRed + category: Outer + cost: 0 + items: + - ClothingOuterCoatJacketLettermanRed + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterBomberPinkSleeves + category: Outer + cost: 0 + items: + - ClothingOuterCoatBomberPinkSleeves + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterCoatAcidRaincoat + category: Outer + cost: 0 + items: + - ClothingOuterCoatAcidRaincoat + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterCoatAcidRaincoatBlue + category: Outer + cost: 0 + items: + - ClothingOuterCoatAcidRaincoatBlue + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterCoatAcidRaincoatGreen + category: Outer + cost: 0 + items: + - ClothingOuterCoatAcidRaincoatGreen + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterCoatAcidRaincoatMagenta + category: Outer + cost: 0 + items: + - ClothingOuterCoatAcidRaincoatMagenta + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter + +- type: loadout + id: LoadoutOuterCoatAcidRaincoatYellow + category: Outer + cost: 0 + items: + - ClothingOuterCoatAcidRaincoatYellow + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutOuter diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml index b64ad384ef4..02ed0324e3b 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml @@ -355,6 +355,19 @@ items: - ClothingMaskGasCaptain +- type: loadout + id: LoadoutCommandCapMaskGasCombat + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainMask + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingMaskGasCaptainCombat + # Outer - type: loadout id: LoadoutCommandCapOuterWinter @@ -382,6 +395,21 @@ items: - ClothingOuterArmorCaptainCarapace +- type: loadout + id: LoadoutCaptainOuterTrench + category: JobsCommandCaptain + cost: 0 + exclusive: true + canBeHeirloom: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainOuter + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingOuterCoatCapTrench + # Shoes - type: loadout id: LoadoutCaptainShoesLaceup diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml index b5e82749cec..3910e7b9bbf 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml @@ -53,6 +53,19 @@ items: - ClothingHeadHatBeretCmo +- type: loadout + id: LoadoutClothingHeadMirror + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerHead + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingHeadMirror + # Id - type: loadout id: LoadoutChiefMedicalOfficerNTPDA @@ -212,3 +225,29 @@ - ChiefMedicalOfficer items: - ClothingUniformJumpskirtCMO + +- type: loadout + id: LoadoutChiefMedicalOfficerTurtleskirt + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingUniformJumpskirtCMOTurtle + +- type: loadout + id: LoadoutChiefMedicalOfficerTurtlesuit + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingUniformJumpsuitCMOTurtle diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Resources/Prototypes/Nyanotrasen/Species/Oni.yml b/Resources/Prototypes/Nyanotrasen/Species/Oni.yml index 160c1f3bec6..79d7e2b86f8 100644 --- a/Resources/Prototypes/Nyanotrasen/Species/Oni.yml +++ b/Resources/Prototypes/Nyanotrasen/Species/Oni.yml @@ -21,9 +21,6 @@ - type: markingPoints id: MobOniMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Nyanotrasen/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Species/felinid.yml index 31c224b37a1..ad92ea8046f 100644 --- a/Resources/Prototypes/Nyanotrasen/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Species/felinid.yml @@ -17,9 +17,6 @@ - type: markingPoints id: MobFelinidMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml index 729f20e9795..98cb1a3d51c 100644 --- a/Resources/Prototypes/Recipes/Lathes/clothing.yml +++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml @@ -217,6 +217,22 @@ Cloth: 300 Durathread: 100 +- type: latheRecipe + id: ClothingUniformJumpsuitCMOTurtle + result: ClothingUniformJumpsuitCMOTurtle + completetime: 4 + materials: + Cloth: 300 + Durathread: 100 + +- type: latheRecipe + id: ClothingUniformJumpskirtCMOTurtle + result: ClothingUniformJumpskirtCMOTurtle + completetime: 4 + materials: + Cloth: 300 + Durathread: 100 + - type: latheRecipe id: ClothingUniformJumpsuitDetective result: ClothingUniformJumpsuitDetective diff --git a/Resources/Prototypes/Species/arachne.yml b/Resources/Prototypes/Species/arachne.yml index 72e73fcf7f4..fff75454fcb 100644 --- a/Resources/Prototypes/Species/arachne.yml +++ b/Resources/Prototypes/Species/arachne.yml @@ -15,9 +15,6 @@ - type: markingPoints id: MobArachneMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Species/harpy.yml b/Resources/Prototypes/Species/harpy.yml index a131b23a7aa..1b61ebdd76f 100644 --- a/Resources/Prototypes/Species/harpy.yml +++ b/Resources/Prototypes/Species/harpy.yml @@ -40,9 +40,6 @@ - type: markingPoints id: MobHarpyMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Species/human.yml b/Resources/Prototypes/Species/human.yml index 6979bbcf91b..cc304a6eeb1 100644 --- a/Resources/Prototypes/Species/human.yml +++ b/Resources/Prototypes/Species/human.yml @@ -39,9 +39,6 @@ - type: markingPoints id: MobHumanMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml index 511f22394e0..5bba1b41d4b 100644 --- a/Resources/Prototypes/Species/moth.yml +++ b/Resources/Prototypes/Species/moth.yml @@ -16,6 +16,7 @@ id: MobMothSprites sprites: Head: MobMothHead + Face: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking Chest: MobMothTorso HeadTop: MobHumanoidAnyMarking diff --git a/Resources/Prototypes/Species/reptilian.yml b/Resources/Prototypes/Species/reptilian.yml index 99ea7f297a3..c4ed49401b0 100644 --- a/Resources/Prototypes/Species/reptilian.yml +++ b/Resources/Prototypes/Species/reptilian.yml @@ -42,9 +42,6 @@ id: MobReptilianMarkingLimits onlyWhitelisted: true points: - Face: - points: 1 - required: false Hair: points: 0 required: false @@ -63,7 +60,7 @@ points: 2 required: false HeadSide: - points: 2 + points: 3 required: false Chest: points: 1 diff --git a/Resources/Prototypes/Species/slime.yml b/Resources/Prototypes/Species/slime.yml index ada69c7500e..f0f383e75a1 100644 --- a/Resources/Prototypes/Species/slime.yml +++ b/Resources/Prototypes/Species/slime.yml @@ -31,9 +31,6 @@ - type: markingPoints id: MobSlimeMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml index 68877b01d27..04c128eb8a7 100644 --- a/Resources/Prototypes/Traits/disabilities.yml +++ b/Resources/Prototypes/Traits/disabilities.yml @@ -83,6 +83,7 @@ jobs: - Borg - MedicalBorg + - Mime functions: - !type:TraitAddComponent components: @@ -141,6 +142,30 @@ components: - type: Snoring +- type: trait + id: BadKnees + category: Physical + points: 3 + requirements: + - !type:CharacterTraitRequirement + inverted: true + traits: + - ParkourTraining + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Diona + functions: + - !type:TraitAddComponent + components: + - type: ClimbDelayModifier + climbDelayMultiplier: 1.5 + - type: SlippableModifier + paralyzeTimeMultiplier: 1.4 + - type: SpeedModifiedByContactModifier + walkModifierEffectiveness: 1.35 + sprintModifierEffectiveness: 1.35 + - type: trait id: Sluggish category: Physical @@ -159,12 +184,9 @@ - !type:TraitAddComponent components: - type: TraitSpeedModifier - sprintModifier: 0.85 - walkModifier: 0.85 - - type: ClimbDelayModifier - climbDelayMultiplier: 1.35 - - type: LayingDownModifier - layingDownCooldownMultiplier: 1.2 + sprintModifier: 0.84 + walkModifier: 0.84 + requiredTriggeredSpeedModifier: 0.84 - type: trait id: SnailPaced @@ -184,12 +206,9 @@ - !type:TraitAddComponent components: - type: TraitSpeedModifier - sprintModifier: 0.7 - walkModifier: 0.7 - - type: ClimbDelayModifier - climbDelayMultiplier: 1.66 - - type: LayingDownModifier - layingDownCooldownMultiplier: 1.6 + sprintModifier: 0.68 + walkModifier: 0.68 + requiredTriggeredSpeedModifier: 0.68 # Still slip against normal slips with the new sprint speed - type: trait id: BloodDeficiency diff --git a/Resources/Prototypes/Traits/inconveniences.yml b/Resources/Prototypes/Traits/inconveniences.yml index 57d166d3e38..62e13c2533f 100644 --- a/Resources/Prototypes/Traits/inconveniences.yml +++ b/Resources/Prototypes/Traits/inconveniences.yml @@ -52,6 +52,11 @@ inverted: true traits: - Foreigner + - Muted + - !type:CharacterJobRequirement + inverted: true + jobs: + - Mime functions: - !type:TraitAddComponent components: @@ -68,6 +73,11 @@ inverted: true traits: - ForeignerLight + - Muted + - !type:CharacterJobRequirement + inverted: true + jobs: + - Mime functions: - !type:TraitAddComponent components: diff --git a/Resources/Prototypes/Traits/languages.yml b/Resources/Prototypes/Traits/languages.yml index a8bdeff4683..44a487cecdd 100644 --- a/Resources/Prototypes/Traits/languages.yml +++ b/Resources/Prototypes/Traits/languages.yml @@ -1,7 +1,7 @@ - type: trait id: SignLanguage category: TraitsSpeechLanguages - points: 0 + points: -2 requirements: - !type:CharacterItemGroupRequirement group: TraitsLanguagesBasic @@ -79,7 +79,7 @@ - type: trait id: ValyrianStandard category: TraitsSpeechLanguages - points: 1 + points: -1 requirements: - !type:CharacterItemGroupRequirement group: TraitsLanguagesBasic @@ -93,7 +93,7 @@ - type: trait id: Azaziba category: TraitsSpeechLanguages - points: 1 + points: -1 requirements: - !type:CharacterSpeciesRequirement species: diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index f2f071a309d..3f3d460f999 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -235,6 +235,52 @@ - type: PainTolerance rangeModifier: 0.6 +- type: trait + id: Steadfast + category: Physical + points: -4 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid + - !type:CharacterTraitRequirement + inverted: true + traits: + - Feeble + functions: + - !type:TraitModifySlowOnDamage + damageThresholdsModifier: 10 + speedModifierMultiplier: 0.68 + +- type: trait + id: Feeble + category: Physical + points: 3 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - !type:CharacterSpeciesRequirement + inverted: true + species: + - Felinid + - !type:CharacterTraitRequirement + inverted: true + traits: + - Steadfast + functions: + - !type:TraitModifySlowOnDamage + damageThresholdsModifier: -15 + speedModifierMultiplier: 1.2 + - type: trait id: MartialArtist category: Physical diff --git a/Resources/Prototypes/Traits/skills.yml b/Resources/Prototypes/Traits/skills.yml index 25603c7347d..8a035d24f6d 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -135,6 +135,7 @@ traits: - Sluggish - SnailPaced + - BadKnees - !type:CharacterSpeciesRequirement inverted: true species: @@ -143,10 +144,12 @@ - !type:TraitReplaceComponent components: - type: ClimbDelayModifier - climbDelayMultiplier: 0.35 - - type: LayingDownModifier - layingDownCooldownMultiplier: 0.5 - downedSpeedMultiplierMultiplier: 1.65 + climbDelayMultiplier: 0.5 + - type: SlippableModifier + paralyzeTimeMultiplier: 0.7 + - type: SpeedModifiedByContactModifier + walkModifierEffectiveness: 0.5 + sprintModifierEffectiveness: 0.5 - type: trait id: LightStep diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Belt/belts_punk.yml b/Resources/Prototypes/_NF/Entities/Clothing/Belt/belts_punk.yml new file mode 100644 index 00000000000..5dcaa8b8c85 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Belt/belts_punk.yml @@ -0,0 +1,45 @@ + +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltPunkRandomized + name: punk belt + description: A webbing with functional pockets. + suffix: Random visuals + components: + - type: Sprite + sprite: _NF/Clothing/Belt/punk.rsi + layers: + - state: base_belt_01 + map: [ "belt_main" ] + scale: 1.8, 1.8 + offset: 0,0.1 + - state: decor_base_belt_01 + map: [ "belt_decor" ] + scale: 1.8, 1.8 + offset: 0,0.1 + - state: mask_null + map: [ "belt_overlay" ] + scale: 1.8, 1.8 + offset: 0,0.1 + - type: Clothing + sprite: _NF/Clothing/Belt/punk.rsi + clothingVisuals: + belt: + - state: base_belt_01 + map: [ "belt_main" ] + - state: decor_base_belt_01 + map: [ "belt_decor" ] + - state: mask_null + map: [ "belt_overlay" ] + - type: RandomSprite + available: + - belt_main: + base_belt_01: CyberpunkDark + belt_decor: + decor_base_belt_01: CyberpunkDark + belt_overlay: + decor_base_belt_02: CyberpunkDark + decor_base_belt_03: CyberpunkDark + decor_base_belt_04: CyberpunkDark + decor_base_belt_05: CyberpunkDark + mask_null: "" diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Eyes/punk_glasses.yml b/Resources/Prototypes/_NF/Entities/Clothing/Eyes/punk_glasses.yml new file mode 100644 index 00000000000..34e58e89040 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Eyes/punk_glasses.yml @@ -0,0 +1,78 @@ +# Glasses +- type: entity + parent: ClothingEyesGlassesMeson + id: ClothingEyesPunkGoggles + name: punk goggles + description: How can you see anything in this with all the lights? + components: + - type: VisionCorrection + - type: Sprite + sprite: _NF/Clothing/Eyes/Glasses/punk_glasses.rsi + layers: + - state: base_glasses_01 + map: [ "glasses_main" ] + scale: 2.5, 2.5 + offset: 0,-0.6 + - state: decor_base_glasses_01 + map: [ "glasses_decor" ] + scale: 2.5, 2.5 + offset: 0,-0.6 + shader: unshaded + - type: Clothing + sprite: _NF/Clothing/Eyes/Glasses/punk_glasses.rsi + clothingVisuals: + eyes: + - state: base_glasses_01 + map: [ "glasses_main" ] + - state: decor_base_glasses_01 + map: [ "glasses_decor" ] + shader: unshaded + - type: RandomSprite + available: + - glasses_main: + base_glasses_01: CyberpunkDark + glasses_decor: + decor_base_glasses_01: CyberpunkDark + +# HUDs +- type: entity + parent: ClothingEyesHudMedical + id: ClothingEyesPunkInfoShades + name: punk infoshades + description: How can you see anything in this with all the lights? + components: + - type: Sprite + sprite: _NF/Clothing/Eyes/Glasses/punk_glasses.rsi + layers: + - state: base_glasses_02 + map: [ "infoshades_main" ] + scale: 2.5, 2.5 + offset: 0,-0.6 + - state: decor_base_glasses_02 + map: [ "infoshades_decor" ] + scale: 2.5, 2.5 + offset: 0,-0.6 + shader: unshaded + - type: Clothing + sprite: _NF/Clothing/Eyes/Glasses/punk_glasses.rsi + clothingVisuals: + eyes: + - state: base_glasses_02 + map: [ "infoshades_main" ] + - state: decor_base_glasses_02 + map: [ "infoshades_decor" ] + shader: unshaded + - type: RandomSprite + available: + - infoshades_main: + base_glasses_02: CyberpunkNeon + infoshades_decor: + decor_base_glasses_02: CyberpunkNeon + - type: ShowHealthBars + damageContainers: + - Inorganic + - Silicon + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Head/headwear_punks.yml b/Resources/Prototypes/_NF/Entities/Clothing/Head/headwear_punks.yml new file mode 100644 index 00000000000..9bade6e0f17 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Head/headwear_punks.yml @@ -0,0 +1,59 @@ +# Acid raincoat hoods +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatHoodAcidRaincoat + categories: [ HideSpawnMenu ] + name: acid raincoat hood + description: Mostly transparent raincoat hood made out of acid resistant polymers. + components: + - type: Sprite + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat.rsi + - type: Clothing + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat.rsi + - type: Armor + modifiers: + coefficients: + Caustic: 0.9 + - type: HideLayerClothing + slots: + - Hair + +- type: entity + parent: ClothingHeadHatHoodAcidRaincoat + id: ClothingHeadHatHoodAcidRaincoatBlue + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_blue.rsi + - type: Clothing + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_blue.rsi + +- type: entity + parent: ClothingHeadHatHoodAcidRaincoat + id: ClothingHeadHatHoodAcidRaincoatGreen + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_green.rsi + - type: Clothing + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_green.rsi + +- type: entity + parent: ClothingHeadHatHoodAcidRaincoat + id: ClothingHeadHatHoodAcidRaincoatMagenta + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_magenta.rsi + - type: Clothing + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_magenta.rsi + +- type: entity + parent: ClothingHeadHatHoodAcidRaincoat + id: ClothingHeadHatHoodAcidRaincoatYellow + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_yellow.rsi + - type: Clothing + sprite: _NF/Clothing/Head/Hoods/Coat/acid_raincoat_yellow.rsi diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Masks/masks_punk.yml b/Resources/Prototypes/_NF/Entities/Clothing/Masks/masks_punk.yml new file mode 100644 index 00000000000..3b05bbd48c6 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Masks/masks_punk.yml @@ -0,0 +1,36 @@ + +- type: entity + parent: ClothingMaskPullableBase + id: ClothingMaskPunkHalf + name: punk halfmask + description: A close-fitting breathing mask with gamer lights! + suffix: Random visuals + components: + - type: BreathMask + - type: Sprite + sprite: _NF/Clothing/Mask/punkhalfmask.rsi + layers: + - state: base_halfmask_01 + map: [ "mask_main" ] + scale: 2, 2 + offset: 0,-0.6 + - state: decor_base_halfmask_01 + map: [ "mask_decor" ] + shader: unshaded + scale: 2, 2 + offset: 0,-0.6 + - type: Clothing + sprite: _NF/Clothing/Mask/punkhalfmask.rsi + clothingVisuals: + mask: + - state: base_halfmask_01 + map: [ "mask_main" ] + - state: decor_base_halfmask_01 + map: [ "mask_decor" ] + shader: unshaded + - type: RandomSprite + available: + - mask_main: + base_halfmask_01: CyberpunkDark + mask_decor: + decor_base_halfmask_01: CyberpunkNeon diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Neck/misc.yml b/Resources/Prototypes/_NF/Entities/Clothing/Neck/misc.yml new file mode 100644 index 00000000000..097994e97d0 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Neck/misc.yml @@ -0,0 +1,17 @@ +- type: entity + parent: ClothingNeckBase + id: ClothingNeckCrucifix + name: crucifix + description: Damn, it feels good to be so pious. + components: + - type: Item + size: Small + - type: Sprite + sprite: _NF/Clothing/Neck/Misc/crucifix.rsi + - type: Clothing + sprite: _NF/Clothing/Neck/Misc/crucifix.rsi + - type: ReactionMixer # I'm assuming that this is used to make holy water + mixMessage: "bible-mixing-success" + reactionTypes: + - Holy + - type: Tag diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Neck/scarfs.yml b/Resources/Prototypes/_NF/Entities/Clothing/Neck/scarfs.yml new file mode 100644 index 00000000000..bed54cc70d2 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/Neck/scarfs.yml @@ -0,0 +1,10 @@ +- type: entity + parent: ClothingNeckBase + id: ClothingNeckScarfChaplainStole + name: chaplain's stole + description: A necessary evil for ordained priests outfit. Gives at least +2 to your holiness. + components: + - type: Sprite + sprite: _NF/Clothing/Neck/Scarfs/chaplain_stole.rsi + - type: Clothing + sprite: _NF/Clothing/Neck/Scarfs/chaplain_stole.rsi diff --git a/Resources/Prototypes/_NF/Entities/Clothing/OuterClothing/armor_punk.yml b/Resources/Prototypes/_NF/Entities/Clothing/OuterClothing/armor_punk.yml new file mode 100644 index 00000000000..94f06de3c85 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Clothing/OuterClothing/armor_punk.yml @@ -0,0 +1,141 @@ +#Mercenary web vest +- type: entity + parent: [ClothingOuterStorageBase, AllowSuitStorageClothing] #web vest so it should have some pockets for ammo # Frontier: ClothingOuterVestWeb