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/Corvax/TTS/TTSSystem.cs b/Content.Client/Corvax/TTS/TTSSystem.cs index fe790e24909..862f198dd86 100644 --- a/Content.Client/Corvax/TTS/TTSSystem.cs +++ b/Content.Client/Corvax/TTS/TTSSystem.cs @@ -82,7 +82,7 @@ private void OnPlayTTS(PlayTTSEvent ev) { var canPlay = false; #if LPP_TTS_play //это предназначено для того, чтобы в случае отсутствия ссылки на ТТС, игра не пыталась выполнить обработку звука - canPlay = true; + // canPlay = true; #endif if (!canPlay) return; 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/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 79192d49b40..8375622c1eb 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -188,7 +188,7 @@ public EntityUid SpawnPlayerMob( _humanoidSystem.LoadProfile(entity.Value, profile); _metaSystem.SetEntityName(entity.Value, profile.Name); if (profile.FlavorText != "" && _configurationManager.GetCVar(CCVars.FlavorText)) - AddComp(entity.Value).Content = profile.FlavorText; + EnsureComp(entity.Value).Content = profile.FlavorText; } DoJobSpecials(job, entity.Value); 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/Chemistry/SharedChemMaster.cs b/Content.Shared/Chemistry/SharedChemMaster.cs index 8fca24fcdb0..0b078aa4b9c 100644 --- a/Content.Shared/Chemistry/SharedChemMaster.cs +++ b/Content.Shared/Chemistry/SharedChemMaster.cs @@ -94,10 +94,10 @@ public enum ChemMasterReagentAmount U1 = 1, U5 = 5, U10 = 10, - U15 = 15, + // U15 = 15, // LPP Перегружено U25 = 25, - U30 = 30, - U45 = 45, + // U30 = 30, // LPP + // U45 = 45, // LPP U50 = 50, U100 = 100, All, 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 0b76c064942..18a6bec22e8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9152,3 +9152,202 @@ 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 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/Locale/ru-RU/cargo/cargo-console-component.ftl b/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl index 64ed331c645..94a958bac71 100644 --- a/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl +++ b/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl @@ -30,7 +30,8 @@ cargo-console-snip-snip = Заказ урезан до вместимости cargo-console-insufficient-funds = Недостаточно средств (требуется { $cost }) cargo-console-unfulfilled = Нет места для выполнения заказа cargo-console-trade-station = Отправить на { $destination } -cargo-console-unlock-approved-order-broadcast = [bold]{ $productName } x{ $orderAmount }[/bold], стоимость которого [bold]{ $cost }[/bold], был одобрен [bold]{ $approverName }, { $approverJob }[/bold] +cargo-console-unlock-approved-order-broadcast = [bold]{ $productName } x{ $orderAmount }[/bold], стоимость которого [bold]{ $cost }[/bold], был одобрен [bold]{ $approver }[/bold] + cargo-console-paper-print-name = Заказ #{ $orderNumber } cargo-console-paper-print-text = Заказ #{ $orderNumber } @@ -38,6 +39,7 @@ cargo-console-paper-print-text = Запросил: { $requester } Причина: { $reason } Одобрил: { $approver } + # Cargo shuttle console cargo-shuttle-console-menu-title = Консоль вызова грузового шаттла cargo-shuttle-console-station-unknown = Неизвестно diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/body/organs/cybernetic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/body/organs/cybernetic.ftl index 6fb3fd46bd5..0b7f4e3f54d 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/body/organs/cybernetic.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/body/organs/cybernetic.ftl @@ -2,7 +2,7 @@ ent-BaseCyberneticEyes = { ent-OrganHumanEyes } .desc = { ent-OrganHumanEyes.desc } ent-BasicCyberneticEyes = Кибернетические глаза .desc = Пара кибернетических глаз, которые улучшают ваше зрение и защищают вас от повреждений глаз. -ent-SecurityCyberneticEyes = cybernetic security eyes +ent-SecurityCyberneticEyes = Кибернетические глаза СБ .desc = Пара кибернетических глаз, которые улучшают ваше зрение, благодаря встроенному сенсору SecHUD. -ent-MedicalCyberneticEyes = cybernetic diagnostic eyes +ent-MedicalCyberneticEyes = Кибернетические мед-глаза .desc = Пара кибернетических глаз, которые улучшают ваше зрение, благодаря встроенному сенсору MedHUD. diff --git a/Resources/Locale/ru-RU/store/categories.ftl b/Resources/Locale/ru-RU/store/categories.ftl index 2c878980cbd..b36d9803d91 100644 --- a/Resources/Locale/ru-RU/store/categories.ftl +++ b/Resources/Locale/ru-RU/store/categories.ftl @@ -5,7 +5,7 @@ store-category-ammo = Боеприпасы store-category-explosives = Взрывчатка store-category-chemicals = Химикаты store-category-misc = Инструментарий -store-category-disruption = Дисрупция +store-category-disruption = Саботаж store-category-bundles = Наборы store-category-allies = Союзники store-category-tools = Инструменты diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml index a0df2d99e07..4b9f4d19eb7 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 3b0998e6a89..4790e0aec45 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -35,6 +35,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -58,6 +59,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -83,6 +85,7 @@ components: - type: StorageFill contents: + - id: ClothingOuterCoatCapTrench - id: NukeDisk - id: PinpointerNuclear - id: CaptainIDCard @@ -364,4 +367,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 eb330fb1300..567c993d603 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 604193c6e5b..1f63830fe17 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml @@ -229,6 +229,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/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 b3003a34697..f11cb930f04 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/hud.yml @@ -11,13 +11,13 @@ - type: Construction graph: PrescriptionMedHud node: prescmedhud + - type: VisionCorrection - type: ShowHealthBars damageContainers: - Biological - type: ShowHealthIcons damageContainers: - Biological - - type: VisionCorrection # LPP - type: Tag tags: - HudMedical @@ -32,10 +32,10 @@ sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi - type: Clothing sprite: DeltaV/Clothing/Eyes/Hud/prescsechud.rsi + - type: VisionCorrection - type: Construction graph: PrescriptionSecHud node: prescsechud - - type: VisionCorrection #LPP - type: Tag tags: - HudSecurity 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/Roles/Jobs/Command/administrative_assistant.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Command/administrative_assistant.yml index fa5e80ee2fa..121b68fdf3b 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/Command/administrative_assistant.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Command/administrative_assistant.yml @@ -4,27 +4,17 @@ description: job-description-admin-assistant playTimeTracker: JobLPPАdjutant # JobAdminAssistant # LPP Адъю трекер requirements: - - !type:DepartmentTimeRequirement + - !type:CharacterAgeRequirement + min: 25 + max: 80 + - !type:CharacterDepartmentTimeRequirement department: Engineering - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement - department: Logistics - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement + min: 36000 + - !type:CharacterDepartmentTimeRequirement department: Medical - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement - department: Civilian - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement - department: Security - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement - department: Justice - min: 10800 # 3 hours - - !type:DepartmentTimeRequirement - department: Epistemics - min: 10800 # 3 hours + min: 36000 + - !type:CharacterOverallTimeRequirement + min: 72000 startingGear: AdminAssistantGear icon: "JobIconAdminAssitant" supervisors: job-supervisors-command @@ -61,8 +51,10 @@ id: AdminAssistantGear equipment: jumpsuit: ClothingUniformJumpsuitAdminAssistant - id: AdminAssistantPDA - ears: ClothingHeadsetAdminAssist + back: ClothingBackpackHOPFilled + neck: LPPADJUCloak + id: LPPAdjutantPDA + ears: ClothingHeadsetCommand shoes: ClothingShoesLeather socks: LPPClothingUnderSocksNormBlue underwear: LPPBoxerBlue diff --git a/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml b/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml index 782163f83cd..daed70454a2 100644 --- a/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml +++ b/Resources/Prototypes/DeltaV/Roles/play_time_trackers.yml @@ -7,5 +7,5 @@ - type: playTimeTracker id: JobCourier -- type: playTimeTracker - id: JobAdminAssistant \ No newline at end of file +# - type: playTimeTracker # LPP It's JobLPPАdjutant +# id: JobAdminAssistant 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 0bb978c3acf..db0d8534f53 100644 --- a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml @@ -43,9 +43,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 62029a5d753..e7e35cd8aaa 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 ae94a723479..7e565aab1a9 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml @@ -60,6 +60,17 @@ tags: - CoatRack +- 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 45e68c3e280..317077d70eb 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -151,7 +151,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/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml index 7be52c11f0a..225519473ea 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml @@ -2,7 +2,7 @@ id: LizardFrillsAquatic bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_aquatic @@ -11,7 +11,7 @@ id: LizardFrillsShort bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_short @@ -20,7 +20,7 @@ id: LizardFrillsSimple bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_simple @@ -29,7 +29,7 @@ id: LizardFrillsDivinity bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_divinity @@ -38,7 +38,7 @@ id: LizardFrillsBig bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_big @@ -47,7 +47,7 @@ id: LizardFrillsAxolotl bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_axolotl @@ -56,7 +56,7 @@ id: LizardFrillsHood bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Lamia] + speciesRestriction: [Reptilian, Lamia] sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: frills_hood_primary @@ -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, 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, 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, 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, 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, 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, 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, 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, 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, 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, Lamia, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_bighorn @@ -298,7 +298,7 @@ id: LizardHornsKoboldEars bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_kobold_ears @@ -307,7 +307,7 @@ id: LizardHornsFloppyKoboldEars bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian, Human, Kobold] # Shitmed Change + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_floppy_kobold_ears @@ -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 4558e872659..2f7bfb9c662 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -93,8 +93,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 29608843188..33d13c2bd1c 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 08e99094b63..54a1c2c0317 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -1173,6 +1173,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/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 5ee7e5c43c6..298e67428d3 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -282,6 +282,7 @@ - type: entity id: SnailMigrationLowPop parent: BaseGameRule + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -300,6 +301,7 @@ - type: entity id: SnailMigration parent: BaseStationEventShortDelay + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 70ccd06f394..8340d7a55fc 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -182,6 +182,7 @@ - type: entity id: TraitorReinforcement parent: Traitor + categories: [ HideSpawnMenu ] components: - type: TraitorRule giveUplink: false diff --git a/Resources/Prototypes/Loadouts/Generic/outerClothing.yml b/Resources/Prototypes/Loadouts/Generic/outerClothing.yml index ad0d3bcc63c..d0d6c0e5e8b 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 c3d3331e919..2c6ff64d507 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 ad1316bd38f..155560b3701 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 abea7f59302..03ff8fea758 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 0131758a8f2..62307856d58 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 9b044b7dfe5..b711234b66f 100644 --- a/Resources/Prototypes/Species/human.yml +++ b/Resources/Prototypes/Species/human.yml @@ -45,9 +45,6 @@ - type: markingPoints id: MobHumanMarkingLimits points: - Face: - points: 1 - required: false Hair: points: 1 required: false @@ -57,14 +54,14 @@ Snout: points: 1 required: false - Tail: # the cat tail joke + Tail: points: 1 required: false - HeadTop: # the cat ear joke + HeadTop: points: 3 required: false HeadSide: - points: 1 + points: 3 required: false Chest: points: 1 diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml index 848c0e8a089..b5b824b1a91 100644 --- a/Resources/Prototypes/Species/moth.yml +++ b/Resources/Prototypes/Species/moth.yml @@ -22,6 +22,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 ab16afa5bb9..44e1c846e56 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: 1 required: false @@ -63,7 +60,7 @@ points: 2 required: false HeadSide: - points: 2 + points: 3 required: false Chest: points: 3 diff --git a/Resources/Prototypes/Species/slime.yml b/Resources/Prototypes/Species/slime.yml index 114133a5425..69cfb9d9860 100644 --- a/Resources/Prototypes/Species/slime.yml +++ b/Resources/Prototypes/Species/slime.yml @@ -39,9 +39,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 d5f94a68a90..d61cae64403 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 248934eaef4..427319a9d06 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 e5f8aaf48a2..c357c9e99af 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -145,6 +145,7 @@ traits: - Sluggish - SnailPaced + - BadKnees - !type:CharacterSpeciesRequirement inverted: true species: @@ -153,10 +154,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/_LostParadise/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/_LostParadise/Entities/Markers/Spawners/jobs.yml index 4c6b187181b..9b1c18f2745 100644 --- a/Resources/Prototypes/_LostParadise/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/_LostParadise/Entities/Markers/Spawners/jobs.yml @@ -1,14 +1,14 @@ -# - type: entity -# id: LPPAdjutantSpawn -# parent: SpawnPointJobBase -# name: adjutant spawn -# components: -# - type: SpawnPoint -# job_id: LPPAdjutant -# - type: Sprite -# layers: -# - state: green -# - state: hop +- type: entity + id: LPPAdjutantSpawn + parent: SpawnPointJobBase + name: adjutant spawn + components: + - type: SpawnPoint + job_id: AdministrativeAssistant # LPPAdjutant # Появился AdministrativeAssistant + - type: Sprite + layers: + - state: green + - state: hop - type: entity id: LPPSpawnSecPilot diff --git a/Resources/Prototypes/_LostParadise/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/_LostParadise/Entities/Objects/Devices/pda.yml index b4cf6e44372..dce690bbffe 100644 --- a/Resources/Prototypes/_LostParadise/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/_LostParadise/Entities/Objects/Devices/pda.yml @@ -37,17 +37,23 @@ - type: HealthAnalyzer scanDelay: 1.2 -# - type: entity -# parent: BasePDA -# id: LPPAdjutantPDA -# name: adjutant PDA -# description: Adjutant PDA. -# components: -# - type: Pda -# id: LPPAdjutantIDCard -# state: pda-clear -# - type: Icon -# state: pda-clear +- type: entity + parent: BasePDA + id: LPPAdjutantPDA + name: adjutant PDA + description: Adjutant PDA. + components: + - type: Pda + id: LPPAdjutantIDCard + state: pda-clear + - type: Icon + state: pda-clear + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - NanoChatCartridge - type: entity parent: BasePDA diff --git a/Resources/Prototypes/_LostParadise/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/_LostParadise/Entities/Objects/Misc/identification_cards.yml index f98a70a5cdb..614022bd922 100644 --- a/Resources/Prototypes/_LostParadise/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/_LostParadise/Entities/Objects/Misc/identification_cards.yml @@ -27,21 +27,22 @@ groups: - AllAccess -# - type: entity -# parent: IDCardStandard -# id: LPPAdjutantIDCard -# name: adjutant ID card -# components: -# - type: Sprite -# layers: -# - state: default -# - state: departmenthead -# color: "#1B67A5" -# - state: subdepartment -# color: "#1B67A5" -# - state: idheadofpersonnel -# - type: PresetIdCard -# job: LPPAdjutant +- type: entity + parent: IDCardStandard + id: LPPAdjutantIDCard + name: adjutant ID card + components: + - type: Sprite + layers: + - state: default + - state: departmenthead + color: "#1B67A5" + - state: subdepartment + color: "#1B67A5" + - sprite: DeltaV/Objects/Misc/id_cards.rsi + state: idadminassistant + - type: PresetIdCard + job: AdministrativeAssistant - type: entity parent: IDCardStandard diff --git a/Resources/Prototypes/_LostParadise/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/_LostParadise/Entities/Structures/Walls/asteroid.yml index 26273dc8e67..850e13f62e2 100644 --- a/Resources/Prototypes/_LostParadise/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/_LostParadise/Entities/Structures/Walls/asteroid.yml @@ -18,7 +18,7 @@ state: rock_asteroid_north - map: [ "enum.EdgeLayer.West" ] state: rock_asteroid_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockOreDiamond @@ -40,7 +40,7 @@ state: rock_north - map: [ "enum.EdgeLayer.West" ] state: rock_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockBasaltOreDiamond @@ -62,7 +62,7 @@ state: rock_wall_north - map: [ "enum.EdgeLayer.West" ] state: rock_wall_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockSnowOreDiamond @@ -84,7 +84,7 @@ state: rock_snow_north - map: [ "enum.EdgeLayer.West" ] state: rock_snow_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockSandOreDiamond @@ -106,7 +106,7 @@ state: rock_sand_north - map: [ "enum.EdgeLayer.West" ] state: rock_sand_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockChromiteOreDiamond @@ -128,7 +128,7 @@ state: rock_chromite_north - map: [ "enum.EdgeLayer.West" ] state: rock_chromite_west - - state: rock_ore_diamond + - state: rock_diamond - type: entity id: LPPWallRockAndesiteOreDiamond @@ -150,4 +150,4 @@ state: rock_andesite_north - map: [ "enum.EdgeLayer.West" ] state: rock_andesite_west - - state: rock_ore_diamond + - state: rock_diamond 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