Compare commits

...
Author SHA1 Message Date
Vanessa dfb21057b2 Revert "traitors get 30 tc (#6275)"
This reverts commit 00d1991154.
2026-07-27 20:43:56 -05:00
Delta-V bot 809525b1bd Automatic changelog update 2026-07-27 21:26:57 +02:00
CalliganSierreandpre-commit-ci[bot] b81ccd4f15 Ported Shadekin Audio Revamp (#6370)
* Port TheDen Shadowkin voice noises for Shadekin

Bring over TheDen's Shadowkin scream, laugh, and talk audio, wire them into Shadekin emote sound collections and speech sounds so Shadekin no longer use generic human laughs/speech.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Move TheDen Shadowkin voice prototypes to _DEN

Restore Starlight shadekin sound collections and emote sounds to their original state. Keep TheDen scream, laugh, and talk wiring under _DEN and point MobShadekin at those prototypes.

* Clean up comments on Shadekin voice port

Remove unnecessary inline notes from MobShadekin wiring and drop the extra header on sound collections. Keep a single provenance comment on the TheDen emote sound block.

* Cleaned up unneccessary comments

* Added gulps, i guess lol

* Removed custom laugh emotes for shadekin, reverted to normal human laugh.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-27 21:26:37 +02:00
Delta-V bot c50871e76b Automatic changelog update 2026-07-27 18:43:40 +02:00
Stxcking 1206fca623 Feat: Departmental Bomber Jackets (#6220)
* Sprites

* bombers.yml

* drobes changes

* loadouts

* armor values (dread) + fixes

* updated sprites

* Suggestions
2026-07-27 11:43:19 -05:00
140be08fbb Health analyzer plus (#6230)
* Add medtek+ cart, healthanalyzer+ gui, research target

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Make new health analyzer default, remove research

* Remove bloodlevel unit count, center damage/reagents

* Accidentally pushed wording change, reverting

* Added unknown reagent category. Fixed some issues with FixedPoint2 showing 100x the damage.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <vanessalouwagie@gmail.com>
2026-07-27 14:02:14 +00:00
Delta-V bot b218279e7f Automatic changelog update 2026-07-27 15:48:35 +02:00
Vanessa 5664d6746d Revert "PORT: Selectable Cyborg Chassis from CosmicDrift (#5712)" (#6385)
This reverts commit 4e2dce4414.
2026-07-27 08:48:14 -05:00
github-actions[bot]andDeltaV-Bot ac747032ce Update Credits (#6383)
Co-authored-by: DeltaV-Bot <github@deltav.gay>
2026-07-26 04:09:10 +02:00
Delta-V bot 42db88fa74 Automatic changelog update 2026-07-24 19:39:38 +02:00
a52809279e Nerf & Fix NT-3 (#5653)
* One Commit ops

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Implement requested changes

Co-Authored-By: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Well Well Well

* Fix Pierce Mechanic

* Include it in comment

* Implement requested changes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
2026-07-24 12:39:18 -05:00
Delta-V bot 07f73179cd Automatic changelog update 2026-07-24 19:35:07 +02:00
freezer dog d1c4e94499 giving the wt a little love not like a whole lot like a pat on the shoulder or somethin (#6364)
* i cant think of anything funny to say yknow just like yep its like yknow and like yeah

* deletin this, also saw literally nothing attached to this to begin with i guess? gonna double check but yeah
2026-07-24 12:34:47 -05:00
Delta-V bot 481335487e Automatic changelog update 2026-07-24 19:29:07 +02:00
pootslapandpre-commit-ci[bot] ef0e8497ce Monkey emote sounds (#5928)
* pitch change ops

adding the params to emoteSounds overrides every individual emote which sucks

* lower gulps and blinking

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update speech_emote_sounds.yml

Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Signed-off-by: pootslap <211648338+pootslap@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-24 12:28:47 -05:00
Delta-V bot 06c5917dbf Automatic changelog update 2026-07-24 19:28:20 +02:00
Manoob f0d1f668fe FIX: Emergency access doesn't change the BOLT/Emergency permissions on a door using remote control (#6141)
AA doesnt change the BOLT/AA permissions on a door using remote control!
2026-07-24 12:28:00 -05:00
Vanessa 583eb39799 ADMIN: Move common QUERY commands to DEBUG (#6351)
ADMIN: Move entities command to DEBUG
2026-07-24 12:27:47 -05:00
Delta-V bot a0ebf263e3 Automatic changelog update 2026-07-23 22:07:23 +02:00
VanessaandSir Warock 898101b18e Buckle Bugfix + Dynamic CPR Prio (#6375)
* Fix long-time carrying bug with buckling. Also change CPR priority

* remove TODO comment

* small nitpick

Refactor OnRemoved method and improve code formatting.

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>

---------

Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
Co-authored-by: Sir Warock <67167466+SirWarock@users.noreply.github.com>
2026-07-23 20:07:03 +00:00
Delta-V bot 25f4ffda47 Automatic changelog update 2026-07-23 18:29:49 +02:00
turtlemutt 796e6e4405 Lighthouse Tweaks (#6088)
* Update lighthouse.yml

* Update lighthouse.yml
2026-07-23 18:29:29 +02:00
Delta-V bot 5a4e73574d Automatic changelog update 2026-07-23 05:17:21 +02:00
Astra e4e3f30b84 Shrink entropic blades (#6371)
Resize entropic blade
2026-07-23 00:17:01 -03:00
William Lemonandpre-commit-ci[bot] b15639af05 Fixed Motorkind (#6347)
* Fixed Motorkind

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Gave the hand sprites human hand sprites

I'm not making motorkind hand sprites. Please god don't make me

* Tiny fixes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-21 23:51:35 +00:00
Delta-V bot 009371129a Automatic changelog update 2026-07-21 20:45:08 +02:00
Coryn 09553d6b8e Add back Felinid Rootable (#6358) 2026-07-21 18:44:48 +00:00
Delta-V bot d736537261 Automatic changelog update 2026-07-21 09:59:15 +02:00
Coryn c0fbc4f262 Shadekin fixes (#6357)
* Fix Shadekin Emote availablity for everyone else

* Add Shadekin Bloodstream, so meds work
2026-07-21 03:58:55 -04:00
Delta-V bot cc33dc08e8 Automatic changelog update 2026-07-21 04:20:49 +02:00
Stxcking f6558cef8e Fix: Yip missing string (#6354)
yips
2026-07-21 02:20:29 +00:00
261 changed files with 2061 additions and 2516 deletions
@@ -59,9 +59,12 @@
<Label Text="{Loc 'health-analyzer-window-entity-temperature-text'}" />
<Label Name="TemperatureLabel" />
<Label Text="{Loc 'health-analyzer-window-entity-blood-level-text'}" />
<Label Name="BloodLabel" />
<Label Text="{Loc 'health-analyzer-window-entity-damage-total-text'}" />
<Label Name="DamageLabel" />
<!-- Begin DeltaV - Health Analyzer Plus -->
<Label Name="BloodLevelLabel" />
<!-- Label Name="BloodLabel" / -->
<!-- Label Text="{Loc 'health-analyzer-window-entity-damage-total-text'}" / -->
<!-- Label Name="DamageLabel" / -->
<!-- End DeltaV - Health Analyzer Plus -->
</GridContainer>
</BoxContainer>
@@ -73,10 +76,41 @@
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer
Name="GroupsContainer"
Margin="0 5 0 5"
Orientation="Vertical">
</BoxContainer>
<!-- Begin DeltaV - Health Analyzer Plus -->
<!-- BoxContainer Name="GroupsContainer" Margin="0 5 0 5" Orientation="Vertical" -->
<!-- /BoxContainer -->
<GridContainer Margin="0 5 0 5" Columns="3" HorizontalAlignment="Center">
<BoxContainer Name="DamageBox" Margin="5 5 5 5" Orientation="Vertical">
<Label Name="TotalDamageLabel" HorizontalAlignment="Center" />
<PanelContainer Name="DamageGroupsDivider" StyleClasses="LowDivider" />
<Label
Name="NoDamageLabel"
HorizontalAlignment="Center"
Text="{Loc 'health-analyzer-plus-window-no-damage-text'}"
FontColorOverride="DeepSkyBlue"
Margin="0 5 0 5" />
<BoxContainer HorizontalAlignment="Center">
<BoxContainer Name="DamageGroupsContainer" Margin="0 5 0 5" Orientation="Vertical" />
</BoxContainer>
</BoxContainer>
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Name="BloodstreamBox" Margin="5 5 5 5" Orientation="Vertical">
<Label Name="TotalReagentQuantityLabel" HorizontalAlignment="Center" />
<PanelContainer Name="BloodstreamReagentsDivider" StyleClasses="LowDivider" />
<Label
Name="NoReagentsLabel"
HorizontalAlignment="Center"
Text="{Loc 'health-analyzer-plus-window-no-reagents-text'}"
FontColorOverride="DeepSkyBlue"
Margin="0 5 0 5" />
<BoxContainer HorizontalAlignment="Center">
<BoxContainer Name="BloodstreamReagentListContainer" Orientation="Vertical" Margin="0 5 0 5" />
</BoxContainer>
</BoxContainer>
</GridContainer>
<!-- End DeltaV - Health Analyzer Plus -->
</BoxContainer>
@@ -19,12 +19,25 @@ using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
// BEGIN DeltaV
using Content.Client._DV.Traits.Assorted;
using Content.Shared._DV.Traits.Assorted;
using Content.Shared._DV.Medical; // Uncloneable
using Content.Shared._DV.MedicalRecords; // Medical Records
// Health Analyzer Plus
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Body.Systems;
using Content.Client.Body.Systems;
using Content.Shared.Chemistry.EntitySystems;
using Content.Client.Chemistry.Containers.EntitySystems;
using Content.Shared.Body.Components;
// END DeltaV
namespace Content.Client.HealthAnalyzer.UI;
using Content.Client._DV.Traits.Assorted; // DeltaV
using Content.Shared._DV.Traits.Assorted; // DeltaV
using Content.Shared._DV.Medical; // DeltaV - Uncloneable
using Content.Shared._DV.MedicalRecords; // DeltaV - Medical Records
// Health analyzer UI is split from its window because it's used by both the
// health analyzer item and the cryo pod UI.
@@ -32,6 +45,8 @@ using Content.Shared._DV.MedicalRecords; // DeltaV - Medical Records
[GenerateTypedNameReferences]
public sealed partial class HealthAnalyzerControl : BoxContainer
{
private const string REAGENT_GROUP_MEDICINE = "Medicine"; // DeltaV - Health Analyzer
private readonly IEntityManager _entityManager;
private readonly SpriteSystem _spriteSystem;
private readonly IPrototypeManager _prototypes;
@@ -41,6 +56,8 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
private readonly UnborgableSystem _unborgable; // DeltaV
private readonly RedshirtSystem _redshirt; // DeltaV
private readonly UncloneableSystem _uncloneable; // DeltaV
private readonly SharedBloodstreamSystem _bloodstream; // DeltaV
private readonly SharedSolutionContainerSystem _solutionContainer; // DeltaV
// Begin DeltaV - Medical Records
private readonly ButtonGroup _triageStatusGroup = new();
@@ -66,6 +83,8 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
_unborgable = _entityManager.System<UnborgableSystem>(); // DeltaV
_redshirt = _entityManager.System<RedshirtSystem>(); // DeltaV
_uncloneable = _entityManager.System<UncloneableSystem>(); // DeltaV
_bloodstream = _entityManager.System<BloodstreamSystem>(); // DeltaV
_solutionContainer = _entityManager.System<SolutionContainerSystem>(); // DeltaV
// Begin DeltaV - Medical Records
foreach (var item in Enum.GetValues<TriageStatus>())
@@ -138,9 +157,13 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
? $"{state.Temperature - Atmospherics.T0C:F1} °C ({state.Temperature:F1} K)"
: Loc.GetString("health-analyzer-window-entity-unknown-value-text");
// Begin DeltaV - Health Analyzer Plus
/*
BloodLabel.Text = !float.IsNaN(state.BloodLevel)
? $"{state.BloodLevel * 100:F1} %"
: Loc.GetString("health-analyzer-window-entity-unknown-value-text");
*/
// End DeltaV - Health Analyzer Plus
StatusLabel.Text =
_entityManager.TryGetComponent<MobStateComponent>(target.Value, out var mobStateComponent)
@@ -149,7 +172,7 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
// Total Damage
DamageLabel.Text = _damageable.GetTotalDamage(target.Value).ToString();
// DamageLabel.Text = _damageable.GetTotalDamage(target.Value).ToString(); // DeltaV - Health Analyzer Plus
// Alerts
// DeltaV traits - This is going to be horrid if we just keep adding things like this.
@@ -216,6 +239,7 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
var damagePerType = _damageable.GetAllDamage(target.Value).DamageDict;
DrawDiagnosticGroups(damageSortedGroups, damagePerType);
DrawBloodstreamInfo(target.Value, state.BloodSolution, state.BloodLevel); // End DeltaV - Health Analyzer Plus
// Begin DeltaV - Medical Records
if (state.MedicalRecord is not { } records)
@@ -254,7 +278,15 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
Dictionary<ProtoId<DamageGroupPrototype>, FixedPoint2> groups,
IReadOnlyDictionary<ProtoId<DamageTypePrototype>, FixedPoint2> damageDict)
{
GroupsContainer.RemoveAllChildren();
// Begin DeltaV - Health Analyzer Plus
// GroupsContainer.RemoveAllChildren();
DamageGroupsContainer.RemoveAllChildren();
// Begin DeltaV - Health Analyzer Plus
var totalDamage = damageDict.Sum(x => x.Value.Double());
TotalDamageLabel.Text = Loc.GetString("health-analyzer-plus-window-entity-total-damage-text", ("amount", Math.Round(totalDamage, 2)));
NoDamageLabel.Visible = totalDamage == 0;
// End DeltaV - Health Analyzer Plus
foreach (var (damageGroupId, damageAmount) in groups)
{
@@ -275,7 +307,8 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
groupContainer.AddChild(CreateDiagnosticGroupTitle(groupTitleText, damageGroupId));
GroupsContainer.AddChild(groupContainer);
// GroupsContainer.AddChild(groupContainer); // DeltaV - Health Analyzer Plus
DamageGroupsContainer.AddChild(groupContainer); // DeltaV - Health Analyzer Plus
// Show the damage for each type in that group.
var group = _prototypes.Index(damageGroupId);
@@ -296,6 +329,116 @@ public sealed partial class HealthAnalyzerControl : BoxContainer
}
}
// Begin DeltaV - Health Analyzer Plus
private void DrawBloodstreamInfo(EntityUid target, Solution? bloodSolution, float bloodlevel)
{
BloodstreamReagentListContainer.RemoveAllChildren();
List<ReagentQuantity> bloodstream = new();
double totalReagentQuantity = 0;
double unknownReagents = 0;
// Make sure we can access the bloodtype and reagents before trying to use them
if (bloodSolution is not null)
{
if (!_entityManager.TryGetComponent<BloodstreamComponent>(target, out var bloodstreamComp) ||
!_solutionContainer.ResolveSolution(target, bloodstreamComp.BloodSolutionName, ref bloodstreamComp.BloodSolution, out var bloodReagentSolution))
return;
// Get the blood reagent IDs to ignore in the scan
var bloodReagentIds = bloodstreamComp.BloodReferenceSolution.Select(b => b.Reagent);
// Get all of the medicines in the bloodstream
foreach (var reagent in bloodSolution!.Contents)
{
if (bloodReagentIds.Contains(reagent.Reagent))
continue;
if (_prototypes.Index<ReagentPrototype>(reagent.Reagent.Prototype).Group == REAGENT_GROUP_MEDICINE)
{
bloodstream.Add(reagent);
totalReagentQuantity += reagent.Quantity.Double();
}
else
{
unknownReagents += reagent.Quantity.Double();
}
}
}
var bloodQuantityPercent = !float.IsNaN(bloodlevel)
? $"{bloodlevel * 100:F1} %"
: Loc.GetString("health-analyzer-window-entity-unknown-value-text");
// Display the percent and amount of blood in the system
// Normal health scanner is percent only, this one adds the actual units too
BloodLevelLabel.Text = Loc.GetString(
"health-analyzer-plus-window-entity-blood-level-quantity-text",
("percent", bloodQuantityPercent)
);
// Display the total amount of reagents in the bloodstream, 0 is valid
TotalReagentQuantityLabel.Text = Loc.GetString(
"health-analyzer-plus-window-entity-total-reagents-text",
("amount", Math.Round(totalReagentQuantity, 1).ToString("0.0"))
);
// If the bloodstream was empty, display a message instead to fill the space with something
NoReagentsLabel.Visible = bloodstream.Count == 0 && unknownReagents == 0;
// For each of the reagents in the bloodstream, add them to the list of reagents
// If there are none, this loop will simply do nothing
foreach (var (reagentID, reagentQuantity) in bloodstream)
{
var reagentPrototype = _prototypes.Index<ReagentPrototype>(reagentID.Prototype);
// Make a new container for each reagent we add to the list
var reagentContainer = new BoxContainer
{
Align = AlignMode.Begin,
Orientation = LayoutOrientation.Vertical
};
// Add the string "[] <reagent_name>: <reagent_amount>u" for the current reagent
// The [] is a unicode block character, and is colored with the reagent color
// to make it easier to identify
reagentContainer.AddChild(
new RichTextLabel
{
Text = Loc.GetString("health-analyzer-plus-window-reagent-text",
("reagentColor", reagentPrototype.SubstanceColor),
("reagentName", reagentPrototype.LocalizedName),
("amount", Math.Round(reagentQuantity.Double(), 1).ToString("0.0"))
)
}
);
BloodstreamReagentListContainer.AddChild(reagentContainer);
}
// Add unknown reagents (if any)
if (unknownReagents > 0)
{
var unknownReagentContainer = new BoxContainer
{
Align = AlignMode.Begin,
Orientation = LayoutOrientation.Vertical
};
unknownReagentContainer.AddChild(
new RichTextLabel
{
Text = Loc.GetString("health-analyzer-plus-window-unknown-reagents-text",
("amount", Math.Round(unknownReagents, 1).ToString("0.0"))
)
}
);
BloodstreamReagentListContainer.AddChild(unknownReagentContainer);
}
return;
}
// End DeltaV - Health Analyzer Plus
private Texture GetTexture(string texture)
{
var rsiPath = new ResPath("/Textures/Objects/Devices/health_analyzer.rsi");
@@ -7,7 +7,9 @@
<ScrollContainer
Margin="5 5 5 5"
ReturnMeasure="True"
VerticalExpand="True">
VerticalExpand="True"
VScrollBarHidden="True"
HScrollBarHidden="True"> <!-- DeltaV - Hide the scroll bars -->
<ui:HealthAnalyzerControl
Name="HealthAnalyzer"
@@ -88,9 +88,9 @@ public sealed partial class CryoPodWindow : FancyWindow
// Health analyzer
var maybePatient = _entityManager.GetEntity(msg.Health.TargetEntity);
var hasPatient = msg.Health.TargetEntity.HasValue;
var hasDamage = hasPatient && msg.HasDamage;
// var hasDamage = hasPatient && msg.HasDamage; // DeltaV - Health Analyzer Plus
NoDamageText.Visible = (hasPatient && !hasDamage);
NoDamageText.Visible = false; //(hasPatient && !hasDamage); // DeltaV - Health Analyzer Plus
HealthSection.Visible = hasPatient;
EjectPatientButton.Disabled = !hasPatient;
@@ -1,9 +1,8 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:chassisSpriteControls="clr-namespace:Content.Client._CD.Silicons.Borgs.UI"
Title="{Loc 'borg-select-type-menu-title'}"
SetSize="600 480">
SetSize="550 300">
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal" VerticalExpand="True">
<!-- Left pane: selection of borg type -->
@@ -30,9 +29,6 @@
<RichTextLabel Name="DescriptionLabel" VerticalExpand="True" VerticalAlignment="Top" />
</BoxContainer>
</Control>
<chassisSpriteControls:ChassisSpriteSelection Name="ChassisSpriteSelection"/> <!-- CD change -->
<controls:ConfirmButton Name="ConfirmTypeButton" Text="{Loc 'borg-select-type-menu-confirm'}"
Disabled="True" HorizontalAlignment="Right"
MinWidth="200" />
@@ -1,7 +1,6 @@
using System.Linq;
using Content.Client.UserInterface.Controls;
using Content.Client.UserInterface.Systems.Guidebook;
using Content.Shared._CD.Silicons; // CosmicDrift
using Content.Shared.Guidebook;
using Content.Shared.Silicons.Borgs;
using Content.Shared.Silicons.Borgs.Components;
@@ -30,7 +29,6 @@ public sealed partial class BorgSelectTypeMenu : FancyWindow
private BorgTypePrototype? _selectedBorgType;
public event Action<ProtoId<BorgTypePrototype>>? ConfirmedBorgType;
public event Action<EntityPrototype?>? ConfirmedBorgSubtype; // CosmicDrift event - borg subtypes
private static readonly List<ProtoId<GuideEntryPrototype>> GuidebookEntries = new() { "Cyborgs", "Robotics" };
@@ -58,13 +56,6 @@ public sealed partial class BorgSelectTypeMenu : FancyWindow
ConfirmTypeButton.OnPressed += ConfirmButtonPressed;
HelpGuidebookIds = GuidebookEntries;
// Start CosmicDrift Changes - borg subtypes
ChassisSpriteSelection.SubtypeSelected += () =>
{
ConfirmTypeButton.Disabled = false;
};
// End CosmicDrift Changes - borg subtypes
}
private void UpdateInformation(BorgTypePrototype prototype)
@@ -96,14 +87,6 @@ public sealed partial class BorgSelectTypeMenu : FancyWindow
NameLabel.Text = PrototypeName(prototype);
DescriptionLabel.Text = Loc.GetString($"borg-type-{prototype.ID}-desc");
ChassisView.SetPrototype(prototype.DummyPrototype);
// Start CosmicDrift Changes - borg subtypes
if (_selectedBorgType != null)
{
ConfirmTypeButton.Disabled = true;
ChassisSpriteSelection.Update(_selectedBorgType);
}
// End CosmicDrift Changes - borg subtypes
}
private void ConfirmButtonPressed(BaseButton.ButtonEventArgs obj)
@@ -111,7 +94,6 @@ public sealed partial class BorgSelectTypeMenu : FancyWindow
if (_selectedBorgType == null)
return;
ConfirmedBorgSubtype?.Invoke(ChassisSpriteSelection.SubtypePrototype); // CosmicDrift
ConfirmedBorgType?.Invoke(_selectedBorgType);
}
@@ -1,6 +1,4 @@
using Content.Shared._CD.Silicons; // CosmicDrift
using Content.Shared._CD.Silicons.Borgs; // CosmicDrift
using Content.Shared.Silicons.Borgs.Components;
using Content.Shared.Silicons.Borgs.Components;
using JetBrains.Annotations;
using Robust.Client.UserInterface;
@@ -28,6 +26,5 @@ public sealed class BorgSelectTypeUserInterface : BoundUserInterface
_menu = this.CreateWindow<BorgSelectTypeMenu>();
_menu.ConfirmedBorgType += prototype => SendPredictedMessage(new BorgSelectTypeMessage(prototype));
_menu.ConfirmedBorgSubtype += subtypePrototype => SendPredictedMessage(new BorgSelectSubtypeMessage(subtypePrototype?.ID)); // CosmicDrift - borg subtypes
}
}
@@ -1,12 +1,9 @@
using Content.Client.PDA; // DeltaV
using Content.Shared._CD.Silicons.Borgs; // CosmicDrift
using Content.Client.PDA; // DeltaV
using Content.Shared.Movement.Components;
using Content.Shared.Silicons.Borgs;
using Content.Shared.Silicons.Borgs.Components;
using Robust.Client.GameObjects;
using Robust.Client.ResourceManagement; // CosmicDrift
using Robust.Shared.Serialization.TypeSerializers.Implementations; // CosmicDrift
using Robust.Shared.Timing; // CosmicDrift
using Robust.Shared.Serialization; // DeltaV
namespace Content.Client.Silicons.Borgs;
@@ -20,7 +17,6 @@ public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeS
[Dependency] private readonly BorgSystem _borgSystem = default!;
[Dependency] private readonly AppearanceSystem _appearance = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
[Dependency] private readonly IGameTiming _timing = default!; // CosmicDrift - borg subtypes
public override void Initialize()
{
@@ -44,20 +40,15 @@ public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeS
Entity<BorgSwitchableTypeComponent> entity,
BorgTypePrototype prototype)
{
// Begin Afterlight Addition - added checks to stop sprite state errors
if (!_timing.IsFirstTimePredicted)
return;
if (TryComp<BorgSwitchableSubtypeComponent>(entity, out var subtype) &&
subtype.BorgSubtype != null)
{
var ev = new TypeTryingToUpdateVisualsEvent();
RaiseLocalEvent(entity, ref ev);
return;
}
// End Afterlight Additions - added checks to stop sprite state errors
// Begin DeltaV Additions
if (prototype.ClientComponents is {} add)
EntityManager.AddComponents(entity, add);
// End DeltaV Additions
if (TryComp(entity, out SpriteComponent? sprite))
{
// Begin DeltaV Additions - work around engine bug with AddComponents
((ISerializationHooks) sprite).AfterDeserialization();
// End DeltaV Additions
_sprite.LayerSetRsiState((entity, sprite), BorgVisualLayers.Body, prototype.SpriteBodyState);
_sprite.LayerSetRsiState((entity, sprite), BorgVisualLayers.LightStatus, prototype.SpriteToggleLightState);
}
@@ -85,26 +76,6 @@ public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeS
}
// DeltaV - borg pdas
// Start CosmicDrift Changes - borg subtypes
if (prototype.SpriteBodyMovementState is { } movementState)
{
var spriteMovement = EnsureComp<SpriteMovementComponent>(entity);
spriteMovement.NoMovementLayers.Clear();
spriteMovement.NoMovementLayers["movement"] = new PrototypeLayerData
{
State = prototype.SpriteBodyState,
};
spriteMovement.MovementLayers.Clear();
spriteMovement.MovementLayers["movement"] = new PrototypeLayerData
{
State = movementState,
};
}
else
{
RemComp<SpriteMovementComponent>(entity);
}
// End CosmicDrift Changes - borg subtypes
base.UpdateEntityAppearance(entity, prototype);
}
}
@@ -1,102 +0,0 @@
using System.Linq;
using Content.Client.Silicons.Borgs;
using Content.Shared._CD.Silicons.Borgs;
using Content.Shared.Movement.Components;
using Content.Shared.Silicons.Borgs.Components;
using Robust.Client.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Client._CD.Silicons.Borgs;
/// <summary>
/// Primarily handles the appearance aspects of the borg subtype.
/// </summary>
public sealed class BorgSwitchableSubtypeSystem : SharedBorgSwitchableSubtypeSystem
{
[Dependency] private readonly SpriteSystem _sprite = default!;
[Dependency] private readonly BorgSystem _borg = default!;
[Dependency] private readonly AppearanceSystem _appearance = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<BorgSwitchableSubtypeComponent, ComponentStartup>(OnComponentStartup);
SubscribeLocalEvent<BorgSwitchableSubtypeComponent, AfterAutoHandleStateEvent>(OnAutoHandleEvent);
}
private void OnAutoHandleEvent(Entity<BorgSwitchableSubtypeComponent> ent, ref AfterAutoHandleStateEvent args)
{
SelectBorgSubtype(ent);
}
private void OnComponentStartup(Entity<BorgSwitchableSubtypeComponent> ent, ref ComponentStartup args)
{
SelectBorgSubtype(ent);
}
protected override void UpdateEntityAppearance(Entity<BorgSwitchableSubtypeComponent> entity, EntityPrototype borgSubtypePrototype)
{
// LOT of copy pasted code from BorgSwitchableTypeSystem, but is probably necessary unless the upstream code
// is refactored
if (!borgSubtypePrototype.TryGetComponent<BorgSubtypeDefinitionComponent>(out var borgSubtype, ComponentFactory))
return;
// get our required components
var (owner, _) = entity;
if (!TryComp<SpriteComponent>(entity, out var chassisSprite))
return;
// remove all existing layers
for (int i = chassisSprite.AllLayers.Count() - 1; i >= 0; i--)
{
_sprite.RemoveLayer((entity, chassisSprite), i);
}
for (int i = 0; i < borgSubtype.LayerData.Length; i++)
{
var layerData = borgSubtype.LayerData[i];
layerData.RsiPath = borgSubtype.SpritePath?.ToString();
if (borgSubtype.Offset != null)
layerData.Offset = borgSubtype.Offset;
_sprite.AddLayer((owner, chassisSprite), layerData, i);
}
if (TryComp<BorgChassisComponent>(entity, out var chassis))
{
_borg.SetMindStates(
(entity.Owner, chassis),
borgSubtype.SpriteHasMindState,
borgSubtype.SpriteNoMindState);
if (TryComp(entity, out AppearanceComponent? appearance))
{
// Queue update so state changes apply.
_appearance.QueueUpdate(entity, appearance);
}
}
if (borgSubtype.SpriteBodyMovementState is { } movementState)
{
var spriteMovement = EnsureComp<SpriteMovementComponent>(entity);
spriteMovement.NoMovementLayers.Clear();
spriteMovement.NoMovementLayers["movement"] = new PrototypeLayerData
{
State = borgSubtype.SpriteBodyState,
};
spriteMovement.MovementLayers.Clear();
spriteMovement.MovementLayers["movement"] = new PrototypeLayerData
{
State = movementState,
};
}
else
{
RemComp<SpriteMovementComponent>(entity);
}
base.UpdateEntityAppearance(entity, borgSubtypePrototype);
}
}
@@ -1,23 +0,0 @@
<Control xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls">
<BoxContainer Name="MainContainer"
Orientation="Vertical"
SeparationOverride="4"
Visible="False">
<controls:StripeBack>
<Label Text="{Loc 'cd-borg-select-subtype-flavour-text'}"
StyleClasses="LabelSubText"
HorizontalAlignment="Center"
Margin="0 12"/>
</controls:StripeBack>
<ScrollContainer Name="OptionsScrollContainer"
HScrollEnabled="True"
VScrollEnabled="False"
MinHeight="96">
<BoxContainer Name="OptionsContainer"
Orientation="Horizontal"
SeparationOverride="4"/>
</ScrollContainer>
</BoxContainer>
</Control>
@@ -1,99 +0,0 @@
using Content.Shared.Silicons.Borgs;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client._CD.Silicons.Borgs.UI;
[GenerateTypedNameReferences]
public sealed partial class ChassisSpriteSelection : Control
{
[Dependency] private readonly IComponentFactory _componentFactory = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
public EntityPrototype? SubtypePrototype;
public event Action? SubtypeSelected;
private const int PrototypeViewSize = 2;
private static readonly ProtoId<EntityCategoryPrototype> _borgSubtypeCategory = "BorgSubtype";
public ChassisSpriteSelection()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
}
public void Update(BorgTypePrototype borgTypePrototype)
{
MainContainer.Visible = true;
OptionsContainer.RemoveAllChildren();
var buttonGroup = new ButtonGroup();
List<Button> buttons = new List<Button>();
buttons.Add(CreateDefaultSubtypeButton(borgTypePrototype, buttonGroup));
foreach (var ent in _prototype.Categories.GetValueRefOrNullRef(_borgSubtypeCategory))
{
if (!ent.TryGetComponent<Shared._CD.Silicons.Borgs.BorgSubtypeDefinitionComponent>(out var subtype, _componentFactory))
continue;
// Only add subtypes of the current selected 'main' borg type (engineering, medical, etc.)
if (subtype.ParentType != borgTypePrototype.ID)
continue;
var button = new Button
{
ToolTip = Loc.GetString($"al-borg-{borgTypePrototype.ID}-subtype-{ent.Name.Replace(' ', '-').ToLower()}-name"),
Group = buttonGroup,
MinHeight = 32,
};
button.OnPressed += _ =>
{
SubtypePrototype = ent;
SubtypeSelected?.Invoke();
};
button.AddChild(CreateEntityPrototypeView(subtype.DummyPrototype));
buttons.Add(button);
}
foreach (var button in buttons)
{
OptionsContainer.AddChild(button);
}
}
private Button CreateDefaultSubtypeButton(BorgTypePrototype borgTypePrototype, ButtonGroup group)
{
var button = new Button
{
ToolTip = "default",
Group = group,
MinHeight = 32,
};
button.OnPressed += _ =>
{
SubtypePrototype = null;
SubtypeSelected?.Invoke();
};
button.AddChild(CreateEntityPrototypeView(borgTypePrototype.DummyPrototype));
return button;
}
private EntityPrototypeView CreateEntityPrototypeView(EntProtoId entProtoId)
{
var entPrototypeView = new EntityPrototypeView();
entPrototypeView.SetPrototype(entProtoId);
entPrototypeView.Scale *= PrototypeViewSize;
return entPrototypeView;
}
}
@@ -23,6 +23,7 @@ using Content.Server.Body.Systems;
// Begin DeltaV
using Content.Server._DV.MedicalRecords;
using Content.Shared._DV.MedicalRecords;
using Content.Shared.Chemistry.Components;
// End DeltaV
namespace Content.Server.Medical;
@@ -269,9 +270,11 @@ public sealed partial class HealthAnalyzerSystem : EntitySystem // DeltaV - Made
var bleeding = false;
var unrevivable = false;
Solution? bloodSolution = null; // DeltaV - Health Analyzer Plus
if (TryComp<BloodstreamComponent>(entity, out var bloodstream) &&
_solutionContainerSystem.ResolveSolution(entity, bloodstream.BloodSolutionName,
ref bloodstream.BloodSolution, out var bloodSolution))
ref bloodstream.BloodSolution, out bloodSolution)) // DeltaV - Health Analyzer Plus
{
bloodAmount = _bloodstreamSystem.GetBloodLevel(entity);
bleeding = bloodstream.BleedAmount > 0;
@@ -287,6 +290,7 @@ public sealed partial class HealthAnalyzerSystem : EntitySystem // DeltaV - Made
null,
bleeding,
unrevivable,
bloodSolution, // DeltaV - Health Analyzer Plus
_medicalRecords.GetMedicalRecords(entity) // DeltaV - Medical Records
);
}
@@ -125,12 +125,12 @@ public sealed class ProjectileSystem : SharedProjectileSystem
RaiseLocalEvent(projectile, ref pierceEv);
// If the object won't be destroyed, it "tanks" the penetration hit.
if (damage.GetTotal() < damageRequired)
if (damage.GetTotal() < damageRequired && !pierceEv.Pierced) // DeltaV - Addition of the NT-3
{
return false;
}
if (!projectile.Comp.ProjectileSpent)
if (!projectile.Comp.ProjectileSpent && !pierceEv.Pierced) // DeltaV - Addition of the NT-3
{
projectile.Comp.PenetrationAmount += damageRequired;
// The projectile has dealt enough damage to be spent.
@@ -139,7 +139,7 @@ public sealed class ProjectileSystem : SharedProjectileSystem
return false;
}
if (projectile.Comp.ProjectileSpent && pierceEv.Pierced) // DeltaV - Addition of the NT-3
if (projectile.Comp.ProjectileSpent)
{
return true;
}
@@ -1,43 +0,0 @@
using Content.Shared._CD.Silicons.Borgs;
using Content.Shared.Inventory;
namespace Content.Server._CD.Silicons.Borgs;
/// <summary>
/// Server-side logic that shouldn't be exposed to the client.
/// </summary>
public sealed class BorgSwitchableSubstypeSystem : SharedBorgSwitchableSubtypeSystem
{
[Dependency] private readonly InventorySystem _inventorySystem = default!;
protected override void SelectBorgSubtype(Entity<BorgSwitchableSubtypeComponent> ent)
{
if (ent.Comp.BorgSubtype == null)
return;
if (!Prototypes.Index(ent.Comp.BorgSubtype.Value)
.TryGetComponent<BorgSubtypeDefinitionComponent>(out var borgSubtype, ComponentFactory))
return;
// Configure special components
if (Prototypes.TryIndex(ent.Comp.BorgSubtype, out var previousPrototype) &&
previousPrototype.TryGetComponent<BorgSubtypeDefinitionComponent>(out var previousSubtype, ComponentFactory))
{
if (previousSubtype.AddComponents is { } removeComponents)
EntityManager.RemoveComponents(ent, removeComponents);
}
if (borgSubtype.AddComponents is { } addComponents)
{
EntityManager.AddComponents(ent, addComponents);
}
// inventory template configuration (hats spacing)
if (TryComp(ent, out InventoryComponent? inventory))
{
_inventorySystem.SetTemplateId((ent.Owner, inventory), borgSubtype.InventoryTemplateId);
}
base.SelectBorgSubtype(ent);
}
}
@@ -1,4 +1,5 @@
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
namespace Content.Server._DV.Projectiles.Components;
@@ -21,10 +22,14 @@ public sealed partial class PiercingProjectileComponent : Component
public float PierceCounter;
/// <summary>
/// The tag that will cause the piercing bullet to increment it's <see cref="PierceCounter"/>.
/// The whitelist for checking what increments the <see cref="PierceCounter"/>.
/// </summary>
/// <example>
/// If this has the tag "Wall" in it, any entity with the tag "Wall" will increment <see cref="PierceCounter"/>
/// upon being hit.
/// </example>
[DataField]
public List<ProtoId<TagPrototype>> PierceBlockTag = ["Wall", "Window"];
public EntityWhitelist PierceCounterWhitelist;
/// <summary>
/// The number of entities it is allowed to pierce before being deleted.
@@ -3,7 +3,7 @@ using Content.Shared.FixedPoint;
namespace Content.Server._DV.Projectiles.Events;
/// <summary>
/// Raised when a piercing projectile hits an entity that doesn't follow upstream piercing rules.
/// Raised when a piercing projectile that doesn't follow upstream piercing rules hits an entity.
/// </summary>
[ByRefEvent]
public record struct ProjectilePierceEvent(EntityUid Target, FixedPoint2 RequiredDamage, bool Pierced = false);
@@ -1,29 +1,33 @@
using Content.Server._DV.Projectiles.Components;
using Content.Server._DV.Projectiles.Events;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
namespace Content.Server._DV.Projectiles.Systems;
public sealed class PiercingProjectileSystem : EntitySystem
{
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
// Mobs return a required Damage amount of Float.MaxValue. Therefore, we need to check for absurdly high values.
private readonly int _indestructibleNumber = 20000000;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PiercingProjectileComponent, ProjectilePierceEvent>(OnPierce);
}
private void OnPierce(Entity<PiercingProjectileComponent> bullet, ref ProjectilePierceEvent args)
{
// If the target doesn't have any tags to stop the bullet from piercing, it's automatically true.
if (!_tagSystem.HasAnyTag(args.Target, bullet.Comp.PierceBlockTag))
if (_whitelist.IsWhitelistFail(bullet.Comp.PierceCounterWhitelist, args.Target))
{
args.Pierced = true;
return;
}
// If it does have the tag to stop it and enough health to count as "strongly armored", it'll block the bullet.
if (bullet.Comp.HealthThreshold < args.RequiredDamage)
if (bullet.Comp.HealthThreshold < args.RequiredDamage && args.RequiredDamage < _indestructibleNumber)
return;
if (bullet.Comp.Direction == null) // Get the direction of the bullet to determine which walls count.
@@ -392,7 +392,6 @@ public abstract partial class SharedBuckleSystem
if (TryComp<PhysicsComponent>(buckle, out var physics))
_physics.ResetDynamics(buckle, physics);
// TOOD: DV - This fails when you try to buckle the entity you're carrying to something. Figure out why later.
DebugTools.AssertEqual(xform.ParentUid, strap.Owner);
}
@@ -2,8 +2,7 @@ using Content.Shared.Armor; // DeltaV - Addition of HandHeldArmor
using Content.Shared.Atmos;
using Content.Shared.Camera;
using Content.Shared.Cuffs;
using Content.Shared.Damage; // DeltaV End - Addition of HandHeldArmor
using Content.Shared.Damage.Systems; // DeltaV End - Addition of HandHeldArmor
using Content.Shared.Damage.Systems; // DeltaV - Addition of HandHeldArmor
using Content.Shared.Hands.Components;
using Content.Shared.Movement.Systems;
using Content.Shared.Projectiles;
@@ -1,4 +1,4 @@
using Content.Shared._DV.Overlays;
using Content.Shared._DV.Overlays; // DeltaV
using Content.Shared._DV.Psionics.Events; // DeltaV
using Content.Shared.Armor;
using Content.Shared.Atmos;
@@ -85,13 +85,15 @@ public partial class InventorySystem
SubscribeLocalEvent<InventoryComponent, WieldAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, UnwieldAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, IngestionAttemptEvent>(RefRelayInventoryEvent);
// DeltaV Start - Psionic Events
// DeltaV Start
// Psionic Events
SubscribeLocalEvent<InventoryComponent, DispelledEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, PsionicPowerUseAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, TargetedByPsionicPowerEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, NoosphericFryEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, WeightlessnessChangedEvent>(RefRelayInventoryEvent); // Heavy Clothing
// DeltaV End - Psionic Events
// Heavy Clothing
SubscribeLocalEvent<InventoryComponent, WeightlessnessChangedEvent>(RefRelayInventoryEvent);
// DeltaV End
// Eye/vision events
SubscribeLocalEvent<InventoryComponent, CanSeeAttemptEvent>(RelayInventoryEvent);
@@ -1,4 +1,5 @@
using Content.Shared._DV.MedicalRecords; // DeltaV - Medical Records
using Content.Shared.Chemistry.Components; // DeltaV - Health Analyzer Plus
using Robust.Shared.Serialization;
namespace Content.Shared.MedicalScanner;
@@ -29,11 +30,12 @@ public struct HealthAnalyzerUiState
public bool? ScanMode;
public bool? Bleeding;
public bool? Unrevivable;
public readonly Solution? BloodSolution; // DeltaV - Health Analyzer Plus
public MedicalRecord? MedicalRecord; // DeltaV - Medical Records
public HealthAnalyzerUiState() {}
public HealthAnalyzerUiState(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable, MedicalRecord? medicalRecord = null) // DeltaV - Medical Records
public HealthAnalyzerUiState(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable, Solution? bloodSolution, MedicalRecord? medicalRecord = null) // DeltaV - Health Analyzer Plus, Medical Records
{
TargetEntity = targetEntity;
Temperature = temperature;
@@ -41,6 +43,7 @@ public struct HealthAnalyzerUiState
ScanMode = scanMode;
Bleeding = bleeding;
Unrevivable = unrevivable;
BloodSolution = bloodSolution; // DeltaV - Health Analyzer Plus
MedicalRecord = medicalRecord; // DeltaV - Medical Records
}
}
@@ -1,4 +1,5 @@
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems; // DeltaV
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Content.Shared.Doors.Components;
@@ -19,6 +20,7 @@ namespace Content.Shared.Remotes.EntitySystems;
public abstract class SharedDoorRemoteSystem : EntitySystem
{
[Dependency] private readonly SharedAirlockSystem _airlock = default!;
[Dependency] private readonly AccessReaderSystem _accessReader = default!; // DeltaV
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedDoorSystem _doorSystem = default!;
[Dependency] private readonly SharedElectrocutionSystem _electrify = default!;
@@ -96,6 +98,19 @@ public abstract class SharedDoorRemoteSystem : EntitySystem
else if (entity.Comp.RequireTagWhitelist)
return;
// Begin DeltaV - Emergency access only bypasses open/close; bolting and toggling emergency access still require actual access.
if (entity.Comp.Mode != OperatingMode.OpenClose
&& accessComponent != null
&& !_accessReader.IsAllowed(accessTarget, args.Target.Value, accessComponent))
{
if (isAirlock)
_doorSystem.Deny(args.Target.Value, doorComp, user: args.User, predicted: true);
_popup.PopupClient(Loc.GetString("door-remote-denied"), args.User, args.User);
return;
}
// End DeltaV
switch (entity.Comp.Mode)
{
case OperatingMode.OpenClose:
@@ -1,4 +1,3 @@
using Content.Shared._CD.Silicons.Borgs; // CosmicDrift - borg subtypes
using Content.Shared.Actions;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Components;
@@ -97,10 +96,6 @@ public abstract partial class SharedBorgSwitchableTypeSystem : EntitySystem // D
_userInterface.CloseUi((ent.Owner, null), BorgSwitchableTypeUiKey.SelectBorgType);
UpdateEntityAppearance(ent);
// AL - event for subtype system, always runs at end of borg type code
var ev = new AfterBorgTypeSelectEvent();
RaiseLocalEvent(ent, ref ev);
}
protected void UpdateEntityAppearance(Entity<BorgSwitchableTypeComponent> entity)
@@ -125,25 +120,24 @@ public abstract partial class SharedBorgSwitchableTypeSystem : EntitySystem // D
{
footstepModifier.FootstepSoundCollection = prototype.FootstepCollection;
}
// Start CosmicDrift Changes - Moved to BorgSwitchableTypeSystem.cs
// if (prototype.SpriteBodyMovementState is { } movementState)
// {
// var spriteMovement = EnsureComp<SpriteMovementComponent>(entity);
// spriteMovement.NoMovementLayers.Clear();
// spriteMovement.NoMovementLayers["movement"] = new PrototypeLayerData
// {
// State = prototype.SpriteBodyState,
// };
// spriteMovement.MovementLayers.Clear();
// spriteMovement.MovementLayers["movement"] = new PrototypeLayerData
// {
// State = movementState,
// };
// }
// else
// {
// RemComp<SpriteMovementComponent>(entity);
// }
// End CosmicDrift Changes - Moved to BorgSwitchableTypeSystem.cs
if (prototype.SpriteBodyMovementState is { } movementState)
{
var spriteMovement = EnsureComp<SpriteMovementComponent>(entity);
spriteMovement.NoMovementLayers.Clear();
spriteMovement.NoMovementLayers["movement"] = new PrototypeLayerData
{
State = prototype.SpriteBodyState,
};
spriteMovement.MovementLayers.Clear();
spriteMovement.MovementLayers["movement"] = new PrototypeLayerData
{
State = movementState,
};
}
else
{
RemComp<SpriteMovementComponent>(entity);
}
}
}
@@ -1,6 +1,5 @@
using Content.Shared.Examine;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Systems;
using Content.Shared.Stealth.Components;
using Robust.Shared.GameStates;
using Robust.Shared.Timing;
@@ -1,28 +0,0 @@
using Content.Shared.Prototypes;
using Robust.Shared.Prototypes;
namespace Content.Shared._CD.Prototypes;
public sealed class ALPrototypeSystem : EntitySystem
{
[Dependency] private readonly IComponentFactory _compFactory = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
public IEnumerable<(EntityPrototype Prototype, T Component)> EnumerateComponents<T>() where T : IComponent, new()
{
foreach (var entity in _prototype.EnumeratePrototypes<EntityPrototype>())
{
if (entity.TryGetComponent(out T? comp, _compFactory))
yield return (entity, comp);
}
}
public IEnumerable<EntityPrototype> EnumerateEntities<T>() where T : IComponent, new()
{
foreach (var entity in _prototype.EnumeratePrototypes<EntityPrototype>())
{
if (entity.HasComponent<T>(_compFactory))
yield return entity;
}
}
}
@@ -1,77 +0,0 @@
using System.Numerics;
using Content.Shared.Inventory;
using Content.Shared.Silicons.Borgs;
using Content.Shared.Silicons.Borgs.Components;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._CD.Silicons.Borgs;
/// <summary>
/// Information relating to a borg's subtype. Should be mostly cosmetic.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
[EntityCategory("BorgSubtype")]
public sealed partial class BorgSubtypeDefinitionComponent : Component
{
private static ProtoId<SoundCollectionPrototype> DefaultFootsteps = new("FootstepBorg"); // DeltaV - Removed Readonly
/// <summary>
/// <inheritdoc cref="BorgTypePrototype.InventoryTemplateId"/>
/// </summary>
[DataField, AutoNetworkedField] public ProtoId<InventoryTemplatePrototype> InventoryTemplateId = "borgShort";
/// <summary>
/// The parent borg type of this subtype.
/// </summary>
[DataField(required: true), AutoNetworkedField]
public string ParentType;
/// <summary>
/// <inheritdoc cref="BorgTypePrototype.AddComponents"/>
/// </summary>
[DataField] public ComponentRegistry? AddComponents;
/// <summary>
/// Sprite path that the prototype's layer data will reference.
/// </summary>
[DataField, AutoNetworkedField] public ResPath? SpritePath;
/// <summary>
/// The visual layer data for the subtype.
/// At the minimum should have definitions for each value of <see cref="BorgVisualLayers"/>.
/// </summary>
[DataField(required: true), AutoNetworkedField]
public PrototypeLayerData[] LayerData;
[DataField(required: true), AutoNetworkedField]
public string SpriteHasMindState;
[DataField(required: true), AutoNetworkedField]
public string SpriteNoMindState;
[DataField, AutoNetworkedField] public string? SpriteBodyState;
[DataField, AutoNetworkedField] public Vector2? Offset;
[DataField(required: true), AutoNetworkedField]
public EntProtoId DummyPrototype;
[DataField, AutoNetworkedField] public string PetSuccessString = "petting-success-generic-cyborg";
[DataField, AutoNetworkedField] public string PetFailureString = "petting-failure-generic-cyborg";
/// <summary>
/// Sound specifier for footstep sounds created by this subtype.
/// </summary>
[DataField, AutoNetworkedField]
public SoundSpecifier FootstepCollection { get; set; } = new SoundCollectionSpecifier(DefaultFootsteps);
/// <summary>
/// <inheritdoc cref="BorgTypePrototype.SpriteBodyMovementState"/>
/// </summary>
[DataField, AutoNetworkedField]
public string? SpriteBodyMovementState { get; set; }
}
@@ -1,18 +0,0 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CD.Silicons.Borgs;
/// <summary>
/// Component given to borgs that should be able to select subtypes inside of the borg type selection menu.
/// </summary>
[RegisterComponent, NetworkedComponent]
[AutoGenerateComponentState(true)]
public sealed partial class BorgSwitchableSubtypeComponent : Component
{
/// <summary>
/// The <see cref="BorgSubtypeDefinitionComponent"/> of this chassis.
/// </summary>
[DataField, AutoNetworkedField]
public ProtoId<EntityPrototype>? BorgSubtype;
}
@@ -1,100 +0,0 @@
using Content.Shared.Interaction;
using Content.Shared.Interaction.Components;
using Content.Shared.Movement.Components;
using Content.Shared.Silicons.Borgs;
using Content.Shared.Silicons.Borgs.Components;
using Robust.Shared.Prototypes;
namespace Content.Shared._CD.Silicons.Borgs;
/// <summary>
/// Shared behaviour for borg switchable subtype logic.
/// Essentially a reimplementation of <see cref="SharedBorgSwitchableTypeSystem"/> specifically for cosmetic functions.
/// </summary>
public abstract class SharedBorgSwitchableSubtypeSystem : EntitySystem
{
[Dependency] private readonly InteractionPopupSystem _interactionPopup = default!;
[Dependency] protected readonly IPrototypeManager Prototypes = default!;
[Dependency] protected readonly IComponentFactory ComponentFactory = default!;
public override void Initialize()
{
SubscribeLocalEvent<BorgSwitchableSubtypeComponent, MapInitEvent>(OnMapInit); // make sure that our subtype is selected first
SubscribeLocalEvent<BorgSwitchableSubtypeComponent, AfterBorgTypeSelectEvent>(OnBorgTypeSelect);
SubscribeLocalEvent<BorgSwitchableSubtypeComponent, TypeTryingToUpdateVisualsEvent>(OnBorgTypeUpdatingVisuals);
Subs.BuiEvents<BorgSwitchableTypeComponent>(BorgSwitchableTypeUiKey.SelectBorgType,
sub =>
{
sub.Event<BorgSelectSubtypeMessage>(SelectSubtypeMessageHandler);
});
base.Initialize();
}
private void OnBorgTypeUpdatingVisuals(Entity<BorgSwitchableSubtypeComponent> ent, ref TypeTryingToUpdateVisualsEvent args)
{
if (!ent.Comp.BorgSubtype.HasValue)
return;
Dirty(ent);
SelectBorgSubtype(ent);
}
private void OnMapInit(Entity<BorgSwitchableSubtypeComponent> ent, ref MapInitEvent args)
{
if (ent.Comp.BorgSubtype != null)
{
SelectBorgSubtype(ent);
}
}
private void OnBorgTypeSelect(Entity<BorgSwitchableSubtypeComponent> ent, ref AfterBorgTypeSelectEvent args)
{
if (!ent.Comp.BorgSubtype.HasValue)
return;
UpdateEntityAppearance(ent);
Dirty(ent);
}
protected virtual void SelectBorgSubtype(Entity<BorgSwitchableSubtypeComponent> ent)
{
UpdateEntityAppearance(ent);
}
private void UpdateEntityAppearance(Entity<BorgSwitchableSubtypeComponent> entity)
{
if (!Prototypes.TryIndex(entity.Comp.BorgSubtype, out var subtypePrototype))
return;
UpdateEntityAppearance(entity, subtypePrototype);
}
protected virtual void UpdateEntityAppearance(Entity<BorgSwitchableSubtypeComponent> entity,
EntityPrototype borgSubtypePrototype)
{
if (!borgSubtypePrototype.TryGetComponent<BorgSubtypeDefinitionComponent>(out var borgSubtype, ComponentFactory))
return;
if (TryComp(entity, out InteractionPopupComponent? popup))
{
_interactionPopup.SetInteractSuccessString((entity.Owner, popup), borgSubtype.PetSuccessString);
_interactionPopup.SetInteractFailureString((entity.Owner, popup), borgSubtype.PetFailureString);
}
if (TryComp(entity, out FootstepModifierComponent? footstepModifier))
{
footstepModifier.FootstepSoundCollection = borgSubtype.FootstepCollection;
}
}
private void SelectSubtypeMessageHandler(EntityUid uid, BorgSwitchableTypeComponent borgSwitchableTypeComponent, BorgSelectSubtypeMessage args)
{
if (!TryComp<BorgSwitchableSubtypeComponent>(uid, out var subtypeComp))
return;
subtypeComp.BorgSubtype = args.Subtype;
Dirty(uid, subtypeComp);
}
}
@@ -1,16 +0,0 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared._CD.Silicons.Borgs;
[Serializable, NetSerializable]
public sealed class BorgSelectSubtypeMessage(ProtoId<EntityPrototype>? subtype) : BoundUserInterfaceMessage
{
public ProtoId<EntityPrototype>? Subtype = subtype;
}
[ByRefEvent]
public record struct AfterBorgTypeSelectEvent;
[ByRefEvent]
public record struct TypeTryingToUpdateVisualsEvent;
+3 -1
View File
@@ -1,5 +1,6 @@
using Content.Shared._DV.Body.Components;
using Content.Shared._DV.Body.Events;
using Content.Shared.Buckle;
using Content.Shared.DoAfter;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
@@ -13,6 +14,7 @@ public sealed class CPRSystem : EntitySystem
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly SharedBuckleSystem _buckle = default!;
public override void Initialize()
{
@@ -85,7 +87,7 @@ public sealed class CPRSystem : EntitySystem
{
Act = () => StartCPR(user, target, cprComp.TimeLength),
Text = Loc.GetString("cpr-verb-start"),
Priority = 2,
Priority = _buckle.IsBuckled(target) ? 3 : 1, // Higher priority if they are buckled. Otherwise, this conflicts with trying to carry.
Disabled = alreadyAffected,
Message = alreadyAffected ? Loc.GetString("cpr-verb-disabled-description") : Loc.GetString("cpr-verb-description"),
};
+16 -5
View File
@@ -30,6 +30,7 @@ using System.Numerics;
using Content.Shared._DV.Polymorph;
using Content.Shared._Floof.OfferItem;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Buckle;
namespace Content.Shared._DV.Carrying;
@@ -70,7 +71,7 @@ public sealed class CarryingSystem : EntitySystem
SubscribeLocalEvent<BeingCarriedComponent, GettingInteractedWithAttemptEvent>(OnInteractedWith);
SubscribeLocalEvent<BeingCarriedComponent, PullAttemptEvent>(OnPullAttempt);
SubscribeLocalEvent<BeingCarriedComponent, StartClimbEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, BuckledEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, BuckledEvent>(OnBuckle);
SubscribeLocalEvent<BeingCarriedComponent, UnbuckledEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, StrappedEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, UnstrappedEvent>(OnDrop);
@@ -220,6 +221,13 @@ public sealed class CarryingSystem : EntitySystem
DropCarried(ent.Comp.Carrier, ent);
}
private void OnBuckle(Entity<BeingCarriedComponent> ent, ref BuckledEvent args)
{
// Buckling to a bed already handles the reparenting to the entity that the carried
// entity is buckled to, and then relays the BuckledEvent, so don't reparent to the grid.
DropCarried(ent.Comp.Carrier, ent, attachToGrid: false);
}
private void OnRemoved(Entity<BeingCarriedComponent> ent, ref ComponentRemove args)
{
/*
@@ -327,9 +335,9 @@ public sealed class CarryingSystem : EntitySystem
return true;
}
public void DropCarried(EntityUid carrier, EntityUid carried)
public void DropCarried(EntityUid carrier, EntityUid carried, bool attachToGrid = true)
{
Drop(carried);
Drop(carried, attachToGrid);
CleanupCarrier(carrier, carried);
}
@@ -341,12 +349,15 @@ public sealed class CarryingSystem : EntitySystem
_movementSpeed.RefreshMovementSpeedModifiers(carrier);
}
private void Drop(EntityUid carried)
private void Drop(EntityUid carried, bool attachToGrid = true)
{
RemComp<BeingCarriedComponent>(carried);
RemComp<KnockedDownComponent>(carried); // TODO SHITMED: make sure this doesnt let you make someone with no legs walk
_actionBlocker.UpdateCanMove(carried);
_transform.AttachToGridOrMap(carried);
// Some systems will handle re-parenting and then throw an event, and this changes the parent when it should not
if (attachToGrid)
_transform.AttachToGridOrMap(carried);
_standingState.Stand(carried);
}
@@ -0,0 +1,9 @@
- files: ["shadowkin_female_scream.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Edited and composited by MajorMoth. Re-encoded to Ogg Vorbis."
source: "https://freesound.org/people/AlesiaDavina/sounds/722718/"
- files: ["shadowkin_male_scream.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Edited and composited by MajorMoth. Re-encoded to Ogg Vorbis."
source: "https://freesound.org/people/AlesiaDavina/sounds/722718/"
@@ -0,0 +1,14 @@
- files: ["shadowkin_speak_say.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Edited and composited by MajorMoth. Re-encoded to Ogg Vorbis."
source: "https://freesound.org/people/JKata/sounds/632414/"
- files: ["shadowkin_speak_ask.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Edited and composited by MajorMoth. Re-encoded to Ogg Vorbis."
source: "https://freesound.org/people/templeofhades/sounds/95516/"
- files: ["shadowkin_speak_exclaim.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Edited and composited by MajorMoth. Re-encoded to Ogg Vorbis."
source: "https://freesound.org/people/taure/sounds/376392/"
+8
View File
@@ -348,5 +348,13 @@ Entries:
id: 38
time: '2026-07-19T16:18:47.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6317
- author: ShepardToTheStars
changes:
- message: '`entities` and a lot of other basic QUERY commare are now a DEBUG-level
commands.'
type: Tweak
id: 39
time: '2026-07-24T17:27:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6351
Name: DeltaVAdmin
Order: 5
+111 -113
View File
@@ -1,117 +1,4 @@
Entries:
- author: ShepardToTheStars, foxcumberland
changes:
- message: Added fashionable longcoats for command, security, and crew. Find them
in the loadouts for command, security, and passengers, or in the ClothesMate
on station!
type: Add
id: 2089
time: '2026-01-21T16:23:14.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5235
- author: Apachito
changes:
- message: Made tide breaker actually craftable
type: Fix
id: 2090
time: '2026-01-21T16:28:54.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5239
- author: ShepardToTheStars
changes:
- message: Certain painkillers are more long-lasting than others, based on how strong
they are.
type: Tweak
- message: Players with the chronic pain trait start with ~5 minutes of suppressed
pain before they start feeling the effects.
type: Tweak
- message: Fixed chronic pain's effects from pulsing continuously.
type: Fix
id: 2091
time: '2026-01-23T10:24:32.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5180
- author: snowywinters
changes:
- message: Captain's armored winter coat a alternative to the carapace
type: Add
- message: Changed the defense of captain's EVA suit and carapace
type: Tweak
id: 2092
time: '2026-01-23T19:31:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5227
- author: pootslap
changes:
- message: Listening Post Operatives only have the ability to hear binary comms
now. They can no longer talk on binary.
type: Tweak
id: 2093
time: '2026-01-23T19:35:58.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5243
- author: MilonPL
changes:
- message: The traits points bar will now show up correctly.
type: Fix
id: 2094
time: '2026-01-24T20:55:31.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5275
- author: MilonPL
changes:
- message: The uncloneable trait no longer prevents your character from getting
revived by defibrillators.
type: Fix
id: 2095
time: '2026-01-24T21:29:58.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5273
- author: Halo3moth
changes:
- message: The energy magnums "magnum" rounds no longer pierce windows
type: Fix
id: 2096
time: '2026-01-25T13:48:54.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5270
- author: Toby222
changes:
- message: Added buttons for build info and credits to the escape menu
type: Tweak
id: 2097
time: '2026-01-25T14:42:09.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5260
- author: MilonPL
changes:
- message: Added the "Marked as Protected" trait which makes you immune to becoming
a target objective.
type: Add
id: 2098
time: '2026-01-25T16:30:18.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5274
- author: AeraAuling
changes:
- message: Shadow damage no longer removes all your blood immediately
type: Tweak
id: 2099
time: '2026-01-25T16:31:20.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5268
- author: ShepardToTheStars
changes:
- message: You can now toggle your hardsuit helmet on over your hat or beret!
type: Add
id: 2100
time: '2026-01-25T16:31:55.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5263
- author: Pharaz4
changes:
- message: Bingus can no longer drink the **ENTIRE** keg.
type: Fix
- message: You can eat rice dishes with chopsticks now.
type: Add
- message: Fixed Smartfridge visuals always showing their wire panels open.
type: Fix
- message: Projectiles and Mr. Butlertion are now insulated against wizardry.
type: Fix
- message: Wording fix to initial infected's prompt. It now states that they can
explicitly kill people.
type: Fix
id: 2101
time: '2026-01-25T16:31:39.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5278
- author: MantasDab360, whatston3, ShepardToTheStars
changes:
- message: Chemical Dispenser can now toggle between auto labeling!
@@ -4365,4 +4252,115 @@
id: 2589
time: '2026-07-21T00:05:09.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6201
- author: Stxcking
changes:
- message: Vulps can yip properly now.
type: Fix
id: 2590
time: '2026-07-21T02:20:30.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6354
- author: Coryler
changes:
- message: Shadekin meds working on them
type: Fix
- message: Shadekin emotes being available to other species
type: Fix
id: 2591
time: '2026-07-21T07:58:56.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6357
- author: Coryler
changes:
- message: Add back Felinid root ability
type: Add
id: 2592
time: '2026-07-21T18:44:49.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6358
- author: EmberAstra
changes:
- message: Cosmic Cult's Entropic Blades are now smaller (2x4 spaces)
type: Tweak
id: 2593
time: '2026-07-23T03:17:02.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6371
- author: turtlemutt
changes:
- message: Gave Lighthouse new doorbells and pagers. Have fun harassing departments!
type: Tweak
id: 2594
time: '2026-07-23T16:29:30.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6088
- author: ShepardToTheStars
changes:
- message: Buckling someone while they are being carried should work as intended
now.
type: Fix
- message: Picking someone up that is criticla will have priority over CPR unless
they are buckled to something.
type: Tweak
id: 2595
time: '2026-07-23T20:07:04.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6375
- author: ManuDemoen
changes:
- message: Emergency access no longer allows anyone with a remote to bolt the door
and checks if the remote has access to bolt.
type: Fix
id: 2596
time: '2026-07-24T17:28:01.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6141
- author: pootslap
changes:
- message: Monkeys now make sounds when using emotes!
type: Add
id: 2597
time: '2026-07-24T17:28:47.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5928
- author: keekee38
changes:
- message: The WT550 once again fires at 5.5 rounds a second and has 30-round magazines.
type: Tweak
id: 2598
time: '2026-07-24T17:34:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6364
- author: SirWarock
changes:
- message: The NT-3 cannot be parcel-wrapped anymore!
type: Tweak
- message: Adjusted the wielding sprites of the NT-3 to look less wrong.
type: Fix
- message: The NT-3 can pierce things again.
type: Fix
id: 2599
time: '2026-07-24T17:39:18.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5653
- author: ShepardToTheStars
changes:
- message: The additional borg chassis from Cosmic Drift has been reverted due to
implementation issues.
type: Remove
id: 2600
time: '2026-07-27T13:48:14.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6385
- author: JustAnOrange, Stxcking
changes:
- message: Added 6 departmental bomber jackets and 3 non-departmental ones, they're
zippable! They can be found in your loadout option or in the clothing drobes!
type: Add
id: 2601
time: '2026-07-27T16:43:20.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6220
- author: CalliganSierre
changes:
- message: Ported TheDen Shadowkin scream, laugh, and talk sounds for Shadekin.
(CC-BY-SA-3.0 MajorMoth)
type: Add
- message: Shadekin now use custom laughs and speech voice instead of Slime-person
sounds for those lines.
type: Tweak
- message: Shadekin are assigned Felinid Growl, Hiss, and Purr emotes as is consistent
with most other servers.
type: Tweak
id: 2602
time: '2026-07-27T19:26:38.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6370
Order: 1
File diff suppressed because one or more lines are too long
@@ -1,4 +0,0 @@
cd-borg-select-subtype-flavour-text = Available cosmetic subtypes
# medical
al-borg-medical-subtype-qualified-doctor-name = qualified doctor
@@ -1,33 +0,0 @@
# engineering
al-borg-engineering-subtype-standard-engineering-cyborg-name = standard engineering
al-borg-engineering-subtype-generic-engineering-cyborg-name = generic engineering
al-borg-engineering-subtype-antique-engineering-cyborg-name = antique engineering
# generic
al-borg-generic-subtype-generic-cyborg-name = generic
# janitor
al-borg-janitor-subtype-standard-janitor-cyborg-name = standard janitor
al-borg-janitor-subtype-generic-janitor-cyborg-name = generic janitor
al-borg-janitor-subtype-mopbot-cyborg-name = mopbot
al-borg-janitor-subtype-vest-janitor-cyborg-name = janitor vest
# medical
al-borg-medical-subtype-generic-medical-cyborg-name = generic medical
al-borg-medical-subtype-standard-medical-cyborg-name = standard medical
al-borg-medical-subtype-doctor-medical-cyborg-name = doctor
# salvage
al-borg-mining-subtype-standard-salvage-cyborg-name = standard salvage
al-borg-mining-subtype-generic-salvage-cyborg-name = generic salvage
# security
al-borg-security-subtype-standard-security-cyborg-name = standard security
al-borg-security-subtype-generic-security-cyborg-name = generic security
# service
al-borg-service-subtype-standard-service-cyborg-name = standard service
al-borg-service-subtype-generic-service-cyborg-name = generic service
al-borg-service-subtype-waitress-service-cyborg-name = waitress
al-borg-service-subtype-brobot-service-cyborg-name = brobot
al-borg-service-subtype-maximilium-service-cyborg-name = maximilium
@@ -17,3 +17,5 @@ delta-chat-emote-name-quack = Quack
delta-chat-emote-name-squawk = Squawk
delta-chat-emote-name-horn = Horn
delta-chat-emote-name-yip = Yip
delta-chat-emote-msg-yip = yips.
@@ -0,0 +1,10 @@
health-analyzer-plus-window-entity-blood-level-quantity-text = {$percent}
health-analyzer-plus-window-entity-total-damage-text = Total Damage: {$amount}
health-analyzer-plus-window-entity-total-reagents-text = Bloodstream: {$amount}u
health-analyzer-plus-window-reagent-text = [color={$reagentColor}]█[/color] {$reagentName}: {$amount}u
health-analyzer-plus-window-unknown-reagents-text = Unknown Reagents: {$amount}u
health-analyzer-plus-window-no-damage-text = No damage detected
health-analyzer-plus-window-no-reagents-text = No reagents detected
@@ -1,2 +0,0 @@
ent-MagazinePistolSubMachineGunTopMounted =
.desc = Unconventional 20-round top feeding magazine for the WT550 SMG. Intended to hold general-purpose kinetic ammunition.
File diff suppressed because it is too large Load Diff
@@ -21,6 +21,7 @@
ClothingHeadsetCargo: 3
ClothingOuterWinterCargo: 2
ClothingOuterWinterMiner: 2
ClothingOuterCoatBomberLogistic: 2 # DeltaV - Department Bombers
ClothingNeckScarfStripedBrown: 3
ClothingShoesBootsWinterCargo: 2
ClothingShoesBootsSalvage: 3 # DeltaV - Cargo clothing expansion
@@ -15,6 +15,7 @@
ClothingHeadHatHardhatOrange: 3
ClothingHeadsetEngineering: 3
ClothingOuterWinterEngi: 2
ClothingOuterCoatBomberEngineering: 2 # DeltaV - Department Bombers
ClothingNeckScarfStripedOrange: 3
ClothingShoesBootsWinterEngi: 2
contrabandInventory:
@@ -12,6 +12,7 @@
ClothingHeadBandBotany: 3
ClothingHeadsetService: 2
ClothingOuterWinterHydro: 2
ClothingOuterCoatBomberService: 2 # DeltaV - Department Bombers
ClothingShoesBootsWinterHydro: 2 # DeltaV - Add departmental winter boots
contrabandInventory:
ToyFigurineBotanist: 1
@@ -9,7 +9,7 @@
ClothingBeltMedical: 4
ClothingHeadHatBeretMedic: 4
ClothingHeadNurseHat: 4
# Begin Delta-V additions
# Begin DeltaV additions
ClothingHeadHatBeretMedical: 4
ClothingHeadHatBeretParamedic: 2
ClothingUniformMedicalApron: 2
@@ -21,11 +21,12 @@
ClothingUniformParamedicJumper: 2
ClothingUniformJumpskirtParamedicJumper: 2
ClothingOuterCoatParamedicJacket: 1
ClothingOuterCoatBomberMedical: 2
ClothingOuterExplorerCoat: 1
ClothingOuterCoatLabMedical: 2
ClothingOuterCoatLabLong: 4
ClothingOuterCoatLabLongMedical: 2
# End Delta-V additions
# End DeltaV additions
ClothingOuterCoatLab: 4
ClothingShoesColorWhite: 4
ClothingHandsGlovesLatex: 4
@@ -36,30 +37,30 @@
UniformScrubsColorGreen: 4
UniformScrubsColorBlue: 4
UniformScrubsColorPurple: 4
# Begin Delta-V additions
# Begin DeltaV additions
UniformScrubsColorBlack: 4
UniformScrubsColorCyan: 4
UniformScrubsColorPink: 4
UniformScrubsColorRainbow: 4
UniformScrubsColorWhite: 4
# End Delta-v additions
# End DeltaV additions
ClothingHeadHatSurgcapGreen: 4
ClothingHeadHatSurgcapBlue: 4
ClothingHeadHatSurgcapPurple: 4
# Begin Delta-V additions
# Begin DeltaV additions
ClothingHeadHatSurgcapBlack: 4
ClothingHeadHatSurgcapCyan: 4
ClothingHeadHatSurgcapPink: 4
ClothingHeadHatSurgcapRainbow: 4
ClothingHeadHatSurgcapWhite: 4
# End Delta-v additions
# End DeltaV additions
ClothingShoesBootsWinterMed: 2
contrabandInventory:
# Begin Delta-V additions
# Begin DeltaV additions
UniformScrubsColorCybersun: 1
ClothingHeadHatSurgcapCybersun: 1
ClothingOuterCoatCybersunWindbreaker: 1
# End Delta-V additions
# End DeltaV additions
ClothingUniformJumpskirtOfLife: 1
ToyFigurineMedicalDoctor: 1
ToyFigurineParamedic: 1
@@ -19,7 +19,8 @@
ClothingHeadHatBeretRND: 3 # DeltaV - Remove Specific Role Timers
ClothingHeadTinfoil: 2 # Nyanotrasen - Tinfoil hats for Epistemics
ClothingShoesBootsWinterSci: 2
ClothingOuterCoatBomberEpistemic: 2 # DeltaV - Department Bombers
ClothingOuterExplorerCoat: 3 # DeltaV
contrabandInventory:
ClothingUniformCybersunRND: 1 # DeltaV
ToyFigurineResearchDirector: 1
ToyFigurineResearchDirector: 1
@@ -4,54 +4,59 @@
ClothingBackpackSecurity: 3
ClothingBackpackSatchelSecurity: 3
ClothingBackpackDuffelSecurity: 3
# ClothingUniformJumpsuitSec: 3 # DeltaV - moved*
# ClothingUniformJumpsuitSec: 3 # DeltaV - *Moved
ClothingShoesBootsJack: 3
ClothingHeadHatBeretSecurity: 3
ClothingHeadHatBeretSecurityGrey: 3 # DeltaV - add grey security beret to secdrobe
ClothingHeadHatBeretCadet: 3 # DeltaV - add cadet beret to secdrobe
ClothingHeadHatCapSec: 3 # DeltaV - add security cap to secdrobe
ClothingMaskNeckGaiter: 3 # DeltaV - add neck gaiters to secdrobe
# ClothingMaskGasSecurity: 3 # DeltaV - 1984 secmasks from secdrobe, you can make them in the lathe now.
# ClothingHeadHatSecsoft: 3 # DeltaV - removed from SecDrobe due to inconsistency with art direction
# ClothingHeadBandRed: 3 # DeltaV - removed for incongruency
# ClothingMaskNeckGaiterRed: 3 # DeltaV - removed
# Begin DeltaV Additions
ClothingHeadHatBeretSecurityGrey: 3
ClothingHeadHatBeretCorpsman: 3
ClothingHeadHatBeretCadet: 3
ClothingHeadHatCapSec: 3
ClothingMaskNeckGaiter: 3
# End DeltaV Additions
# Begin DeltaV Removal
# ClothingHeadHatSecsoft: 3
# ClothingHeadBandRed: 3
# ClothingMaskNeckGaiterRed: 3
# End DeltaV Removal
ClothingHandsGlovesColorBlack: 3
ClothingHandsGlovesFingerless: 3
ClothingUniformJumpsuitSec: 3 # DeltaV - *moved
ClothingUniformJumpskirtSec: 3
ClothingUniformJumpskirtSec: 3 # DeltaV - *Moved
ClothingUniformJumpsuitSecGrey: 3
ClothingUniformJumpskirtSecGrey: 3
ClothingUniformJumpsuitSecWhite: 3 # DeltaV - Was ClothingUniformJumpsuitSecBlue
ClothingUniformJumpsuitSecSummer: 3 # DeltaV - add summer security uniform
ClothingUniformJumpskirtSecWhite: 3 # DeltaV - new skirt sprited, added to secdrobe. Was ClothingUniformJumpskirtSecBlue
ClothingUniformJumpsuitSecFormal: 1 # DeltaV - add formal uniform to secdrobe
ClothingUniformJumpskirtSecFormal: 1 # DeltaV - add formal uniform to secdrobe
# ClothingUniformJumpsuitSecBlue: 3 # DelatV - Replaced by ClothingUniformJumpsuitSecWhite
# Begin DeltaV Additions
ClothingUniformJumpsuitSecWhite: 3
ClothingUniformJumpskirtSecWhite: 3
ClothingUniformJumpsuitSecSummer: 3
ClothingUniformJumpsuitSecFormal: 1
ClothingUniformJumpskirtSecFormal: 1
ClothingUniformJumpsuitBrigmedic: 2
ClothingUniformJumpskirtBrigmedic: 2
ClothingUniformJumpsuitBrigmedicTurtle: 2
ClothingUniformJumpskirtBrigmedicTurtle: 2
ClothingOuterStasecSweater: 2
ClothingOuterCoatBomberSecurity: 2
ClothingLongcoatSecurity: 2
ClothingLongcoatBrigmedic: 2
ClothingOuterCoatStasec: 2
ClothingOuterCoatStasecCorpsman: 2
ClothingUniformJumpsuitPrisoner: 3
ClothingUniformJumpskirtPrisoner: 3
ClothingHeadsetPrison: 3
# End DeltaV Additions
ClothingHeadsetSecurity: 3
ClothingHeadHatBeretCorpsman: 2 # DeltaV - added corpsman uniform to secdrobe
ClothingUniformJumpsuitBrigmedic: 2 # DeltaV - added corpsman uniform to secdrobe
ClothingUniformJumpskirtBrigmedic: 2 # DeltaV - added corpsman uniform to secdrobe
ClothingUniformJumpsuitBrigmedicTurtle: 2 # DeltaV - added corpsman uniform to secdrobe
ClothingUniformJumpskirtBrigmedicTurtle: 2 # DeltaV - added corpsman uniform to secdrobe
ClothingUniformJumpsuitPrisoner: 3 # DeltaV - added prison jumpsuits
ClothingUniformJumpskirtPrisoner: 3 # DeltaV - added prison jumpskirts
ClothingHeadsetPrison: 3 # DeltaV - prison headsets in secdrobe
ClothingOuterStasecSweater: 2 # DeltaV - add sweaters to secdrobe
ClothingLongcoatSecurity: 2 # DeltaV - Longcoats
ClothingLongcoatBrigmedic: 2 # DeltaV - Longcoats
ClothingOuterCoatStasec: 2 # DeltaV - replace ClothingOuterWinterSec
ClothingOuterCoatStasecCorpsman: 2 # DeltaV - added corpsman uniform to secdrobe
# ClothingOuterWinterSec: 2 # DeltaV - removed this
## ClothingOuterArmorBasic: 2 # DeltaV - moved body armour from SecDrobe to SecTech
## ClothingOuterArmorBasicSlim: 2
ClothingNeckScarfStripedBlue: 3 # DeltaV - blue instead of red scarf. Was ClothingNeckScarfStripedRed
# ClothingOuterArmorBasicSlim: 2 # DeltaV - this was gone at one point no idea where it went
# ClothingOuterWinterSec: 2 # DeltaV - Replaced by ClothingOuterCoatStasec
# ClothingOuterArmorBasic: 2 # DeltaV - Moved to SecTech
ClothingNeckScarfStripedBlue: 3 # DeltaV - Was ClothingNeckScarfStripedRed
# ClothingOuterArmorBasicSlim: 2 # DeltaV - Removed
ClothingEyesBlindfold: 1
ClothingShoesBootsCombat: 1
ClothingShoesBootsWinterSec: 2
# ClothingHeadHelmetJustice: 1 # DeltaV - lrp
# ClothingHeadHelmetJustice: 1 # DeltaV - Removed
contrabandInventory:
# ClothingMaskClownSecurity: 1 # DeltaV - removed for incongruency
# ClothingMaskMimeSecurity: 1 # DeltaV - removed for same reasons as above
# ClothingMaskClownSecurity: 1 # DeltaV - Removed for incongruency
# ClothingMaskMimeSecurity: 1 # DeltaV - Removed for incongruency
ToyFigurineSecurity: 1
ToyFigurineWarden: 1
ToyFigurineHeadOfSecurity: 1
@@ -16,6 +16,7 @@
ClothingOuterFlannelBlue: 2
ClothingOuterFlannelGreen: 2
ClothingOuterCoatBomber: 3
ClothingOuterCoatBomberCheckered: 3 # DeltaV
ClothingHeadHatCanadaBeanie: 4
ClothingHeadHatSantahat: 2
ClothingHeadHatXmasCrown: 2
@@ -65,3 +66,7 @@
emaggedInventory:
ClothingNeckScarfStripedSyndieGreen: 3
ClothingNeckScarfStripedSyndieRed: 3
# Begin DeltaV additions
ClothingOuterCoatBomberSyndicate: 1
ClothingOuterCoatBomberCybersun: 1
# End DeltaV additions
@@ -282,7 +282,6 @@
requiredMobState:
- Critical
- Dead
- type: BorgSwitchableSubtype # CosmicDrift
- type: entity
abstract: true
@@ -1613,6 +1613,16 @@
Blunt: 1
clumsySound:
path: /Audio/Animals/monkey_scream.ogg
#Begin DeltaV additions
- type: Vocal
sounds:
Male: MonkeySounds
Female: MonkeySounds
Unsexed: MonkeySounds
wilhelmProbability: 0.01
- type: BodyEmotes
soundsId: MonkeySounds
#End DeltaV additions
- type: entity
@@ -1647,6 +1657,16 @@
- type: GhostTakeoverAvailable
- type: Loadout
prototypes: [SyndicateOperativeGearMonkey]
#Begin DeltaV additions
- type: Vocal
sounds:
Male: MonkeySounds
Female: MonkeySounds
Unsexed: MonkeySounds
wilhelmProbability: 0.01
- type: BodyEmotes
soundsId: MonkeySounds
#End DeltaV additions
- type: entity
id: MobMonkeySyndicateAgent
@@ -115,7 +115,7 @@
whitelist:
tags:
- CartridgePistol
capacity: 20 # DeltaV
capacity: 30
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag_top_mounted.rsi
layers:
@@ -246,7 +246,7 @@
- type: ChamberMagazineAmmoProvider
boltClosed: null
- type: Gun
fireRate: 5 # DeltaV - Was 5.5
fireRate: 5.5
minAngle: 2 # DeltaV - Was 1
maxAngle: 16 # DeltaV - Was 6
angleIncrease: 1.5
@@ -245,7 +245,6 @@
id: BaseTraitorRule
components:
- type: TraitorRule
startingBalance: 30 # DeltaV - more TC for traitors
# TODO: codewords in yml
# TODO: uplink in yml
- type: AntagRandomObjectives
@@ -270,8 +269,8 @@
selectionTime: IntraPlayerSpawn
definitions:
- prefRoles: [ Traitor ]
max: 10 # DeltaV - raised from 8
playerRatio: 9 # DeltaV - lowered from 10
max: 12 # DeltaV - raised from 8
playerRatio: 8 # DeltaV - lowered from 10
blacklist:
components:
- AntagImmune
@@ -395,6 +395,8 @@
- LongcoatBlack
- LongcoatBrown
- LongcoatNanoTrasen
- BomberJacket
- BomberCheckered
- BlackWinterCoat
- PurpleWinterCoat
- RedWinterCoat
@@ -724,6 +726,7 @@
loadouts:
- BotanistApron
- BotanistWintercoat
- BomberService # DeltaV
- type: loadoutGroup
id: BotanistJobTrinkets
@@ -968,6 +971,7 @@
loadouts:
- QuartermasterLongcoat # DeltaV - Longcoats
- QuartermasterWintercoat
- BomberLogistic # DeltaV
- type: loadoutGroup
id: QuartermasterShoes
@@ -1016,6 +1020,7 @@
minLimit: 0
loadouts:
- CargoTechnicianWintercoat
- BomberLogistic # DeltaV
- type: loadoutGroup
id: CargoTechnicianShoes
@@ -1102,6 +1107,7 @@
loadouts:
- ChiefEngineerLongcoat # DeltaV - Longcoats
- ChiefEngineerWintercoat
- BomberEngineering # DeltaV
- type: loadoutGroup
id: ChiefEngineerShoes
@@ -1176,6 +1182,7 @@
loadouts:
- StationEngineerOuterVest
- StationEngineerWintercoat
- BomberEngineering # DeltaV
- type: loadoutGroup
id: StationEngineerShoes
@@ -1223,6 +1230,7 @@
minLimit: 0
loadouts:
- AtmosphericTechnicianWintercoat
- BomberEngineering # DeltaV
- type: loadoutGroup
id: AtmosphericTechnicianBackpack
@@ -1302,6 +1310,7 @@
- MystaLabCoat # DeltaV
- ResearchDirectorLongcoat # DeltaV - Longcoats
- ResearchDirectorWintercoat
- BomberEpistemic # DeltaV
- type: loadoutGroup
id: ResearchDirectorShoes
@@ -1367,6 +1376,7 @@
- LongLabCoat # DeltaV
- ScienceLabCoat
- ScienceWintercoat
- BomberEpistemic # DeltaV
- SeniorResearcherLabCoat
- type: loadoutGroup
@@ -1704,6 +1714,7 @@
- ChiefMedicalOfficerLongcoat # DeltaV - Longcoats
- ChiefMedicalOfficerLongLabCoat # DeltaV - Medical Clothing Overhaul
- ChiefMedicalOfficerWintercoat
- BomberMedical # DeltaV
- type: loadoutGroup
id: ChiefMedicalOfficerNeck
@@ -1799,6 +1810,7 @@
- LongLabCoat # DeltaV - Medical Clothing Overhaul
- MedicalLongLabCoat # DeltaV - Medical Clothing Overhaul
- MedicalDoctorWintercoat
- BomberMedical # DeltaV
- SeniorPhysicianLabCoat
- type: loadoutGroup
+1 -1
View File
@@ -66,7 +66,7 @@
- Vocal
tags:
- Honker # DeltaV - let borgs, bots, and IPCs use it (And Motorkind)
- SiliconEmotes
# - SiliconEmotes # DeltaV - Honker does this.
chatMessages: ["chat-emote-msg-honk"]
chatTriggers:
- honk
@@ -1,142 +0,0 @@
# use these base subtypes to avoid some boilerplate
- type: entity
abstract: true
id: BorgSubtypeBase
name: borg subtype base
description: Default state for other subtypes to use.
categories: [ "BorgSubtype" ]
components:
- type: BorgSubtypeDefinition
# Visuals
layerData:
- state: borg
map: [ "enum.BorgVisualLayers.Body", "movement" ]
- state: borg_e
map: [ "enum.BorgVisualLayers.Light" ]
shader: unshaded
visible: false
- state: borg_l
shader: unshaded
map: [ "light","enum.BorgVisualLayers.LightStatus" ]
visible: false
spriteBodyState: borg
spriteHasMindState: borg_e
# if rsi has a specific no mind state sprite, use that instead (i.e. borg_e_r)
spriteNoMindState: borg_e
footstepCollection:
collection: FootstepBorg
# generic
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgGenericSubtypeBase
name: borg generic subtype
components:
- type: BorgSubtypeDefinition
parentType: generic
dummyPrototype: BorgChassisGeneric
# mining (salvage)
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgMiningSubtypeBase
name: borg mining subtype
components:
- type: BorgSubtypeDefinition
parentType: mining
# Entity prototype for preview in selection menu
dummyPrototype: BorgChassisMining
# engineering
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgEngineerSubtypeBase
name: borg engineering subtype
components:
- type: BorgSubtypeDefinition
parentType: engineering
# Entity prototype for preview in selection menu
dummyPrototype: BorgChassisEngineer
# janitor
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgJanitorSubtypeBase
name: borg janitor subtype
components:
- type: BorgSubtypeDefinition
parentType: janitor
# Entity prototype for preview in selection menu
dummyPrototype: BorgChassisJanitor
# medical
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgMedicalSubtypeBase
name: borg medical subtype
components:
- type: BorgSubtypeDefinition
parentType: medical
# Description
dummyPrototype: BorgChassisMedical
# service
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgServiceSubtypeBase
name: borg service subtype
components:
- type: BorgSubtypeDefinition
parentType: service
# Description
dummyPrototype: BorgChassisService
## Begin DeltaV Additions
# security
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgSecuritySubtypeBase
name: borg security subtype
components:
- type: BorgSubtypeDefinition
parentType: security
# Description
dummyPrototype: BorgChassisSecurity
# salvage
- type: entity
parent: BorgSubtypeBase
abstract: true
id: BorgSalvageSubtypeBase
name: borg salvage subtype
components:
- type: BorgSubtypeDefinition
parentType: mining
# Description
dummyPrototype: BorgChassisSalvage
## End DeltaV Additions
- type: entityCategory
id: BorgSubtype
name: al-borg-subtypes
hideSpawnMenu: true
@@ -1,10 +0,0 @@
# Actual entity prototypes used for UI visuals and admin spawning
- type: entity
id: BorgChassisQualifiedDoctor
parent: BorgChassisSelectable
name: qualified doctor cyborg
components:
- type: BorgSwitchableType
selectedBorgType: medical
- type: BorgSwitchableSubtype
borgSubtype: MedicalQualifiedDoctorSubtype
@@ -1,11 +0,0 @@
# medical
- type: entity
parent: BorgMedicalSubtypeBase
id: MedicalQualifiedDoctorSubtype
name: qualified doctor
description: "A board-certified cyborg for all your medical needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisQualifiedDoctor
spritePath: _CD/Mobs/Silicon/Borg/Medical/qualified_doctor.rsi
@@ -0,0 +1,9 @@
- type: soundCollection
id: ShadowkinMaleScreams
files:
- /Audio/_DEN/Voice/Shadowkin/Emotes/shadowkin_male_scream.ogg
- type: soundCollection
id: ShadowkinFemaleScreams
files:
- /Audio/_DEN/Voice/Shadowkin/Emotes/shadowkin_female_scream.ogg
@@ -66,3 +66,87 @@
collection: Moo
Gulp: # Goob
path: /Audio/_Goobstation/Voice/Human/gulp.ogg
- type: emoteSounds
id: MaleShadowkin
params:
variation: 0.125
sounds:
Scream:
collection: ShadowkinMaleScreams
Laugh:
collection: MaleLaugh
Sneeze:
collection: MaleSneezes
Cough:
collection: MaleCoughs
Yawn:
collection: MaleYawn
Snore:
collection: Snores
Sigh:
collection: MaleSigh
Crying:
collection: MaleCry
Whistle:
collection: Whistles
Weh:
collection: Weh
Gasp:
collection: MaleGasp
DefaultDeathgasp:
collection: MaleDeathGasp
Marr:
path: /Audio/_Starlight/Voice/Shadekin/mar.ogg
Wurble:
path: /Audio/_Starlight/Voice/Shadekin/wurble.ogg
Hiss:
collection: FelinidHisses
Purr:
collection: FelinidPurrs
Growl:
collection: FelinidGrowls
Gulp: # Goob
path: /Audio/_Goobstation/Voice/Human/gulp.ogg
- type: emoteSounds
id: FemaleShadowkin
params:
variation: 0.125
sounds:
Scream:
collection: ShadowkinFemaleScreams
Laugh:
collection: FemaleLaugh
Sneeze:
collection: FemaleSneezes
Cough:
collection: FemaleCoughs
Yawn:
collection: FemaleYawn
Snore:
collection: Snores
Sigh:
collection: FemaleSigh
Crying:
collection: FemaleCry
Whistle:
collection: Whistles
Weh:
collection: Weh
Gasp:
collection: FemaleGasp
DefaultDeathgasp:
collection: FemaleDeathGasp
Marr:
path: /Audio/_Starlight/Voice/Shadekin/mar.ogg
Wurble:
path: /Audio/_Starlight/Voice/Shadekin/wurble.ogg
Hiss:
collection: FelinidHisses
Purr:
collection: FelinidPurrs
Growl:
collection: FelinidGrowls
Gulp: # Goob
path: /Audio/_Goobstation/Voice/Human/gulp.ogg
@@ -0,0 +1,8 @@
- type: speechSounds
id: Shadekin
saySound:
path: /Audio/_DEN/Voice/Shadowkin/Talk/shadowkin_speak_say.ogg
askSound:
path: /Audio/_DEN/Voice/Shadowkin/Talk/shadowkin_speak_ask.ogg
exclaimSound:
path: /Audio/_DEN/Voice/Shadowkin/Talk/shadowkin_speak_exclaim.ogg
@@ -126,6 +126,11 @@
coughPopup: hairball-cough
- type: Felinid
- type: NoShoesSilentFootsteps
- type: Rootable # DeltaV - add rooting claws
action: "ActionToggleRootableFelinid"
transferRate: 0
speedModifier: 0.1
rootSound: "/Audio/Nyanotrasen/Voice/Felinid/cat_growl1.ogg"
- type: entity
@@ -96,8 +96,8 @@
Head: OrganMotorkindHead
ArmLeft: OrganMotorkindFrontLeft
ArmRight: OrganMotorkindFrontRight
# HandRight: OrganHumanHandRight
# HandLeft: OrganHumanHandLeft
HandRight: OrganMotorkindHandRight
HandLeft: OrganMotorkindHandLeft
LegLeft: OrganMotorkindBackLeft
LegRight: OrganMotorkindBackRight
# FootLeft: OrganHumanFootLeft
@@ -115,7 +115,7 @@
- type: HumanoidProfile
species: Motorkind
- type: ScaleVisuals
scale: 2, 2
speciesScale: 2, 2
- type: entity
name: Urist McQueen
@@ -328,8 +328,8 @@
- state: windshield
- type: VisualOrgan
data:
sprite: _DV/Mobs/Species/Motorkind/organs.rsi
state: windshield
sprite: _DV/Mobs/Species/Motorkind/parts.rsi
state: eyes
- type: entity
parent: [ OrganMotorkindInternal ]
@@ -387,3 +387,46 @@
heldPrefix: lungs
- type: Metabolizer
metabolizerTypes: [ Fuel ]
- type: entity
abstract: true
parent: OrganBase
id: OrganBaseInvisibleHand
name: invisible hand
components:
- type: Organ
category: HandRight
- type: HandOrgan
handID: right
data:
location: Right
- type: Sprite
state: r_hand
- type: entity
parent: [ OrganBaseInvisibleHand ]
id: OrganMotorkindHandLeft
components:
- type: Organ
category: HandLeft
- type: HandOrgan
handID: left
data:
location: Left
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: l_hand
- type: entity
parent: [ OrganBaseInvisibleHand ]
id: OrganMotorkindHandRight
components:
- type: Organ
category: HandRight
- type: HandOrgan
handID: right
data:
location: Right
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: r_hand
@@ -85,6 +85,7 @@
parent:
- AppearanceShadekin
- BaseSpeciesMob
- MobBloodstream
id: MobShadekin
components:
- type: Shadekin
@@ -101,11 +102,12 @@
state: full
- type: Speech
allowedEmotes: ["Marr", "Wurble", "Hiss", "Growl", "Purr"]
speechSounds: Shadekin
- type: Vocal
sounds:
Male: MaleShadekin
Female: FemaleShadekin
Unsexed: MaleShadekin
Male: MaleShadowkin
Female: FemaleShadowkin
Unsexed: MaleShadowkin
- type: MeleeWeapon
soundHit:
collection: AlienClaw
@@ -65,6 +65,8 @@
- type: DisarmMalus
- type: Item
size: Huge
shape:
- 0,0,1,3
sprite: _DV/CosmicCult/Objects/cosmicsword-inhands.rsi
inhandVisuals:
left:
@@ -0,0 +1,175 @@
# Non-Departmental
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberCheckered
name: checkered bomber jacket
description: A thick, well-worn vintage leather bomber jacket. It's dark blue, brandishing a checkerboard pattern on the back.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/checkered.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/checkered.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberCheckered ]
id: ClothingOuterCoatBomberCheckeredOpened
categories: [ HideSpawnMenu ]
# Engineering
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberEngineering
name: engineering bomber jacket
description: A thick, well-worn vintage leather bomber jacket brandishing engineering flair. It features a singularity patch on the back.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/engi.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/engi.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberEngineering ]
id: ClothingOuterCoatBomberEngineeringOpened
categories: [ HideSpawnMenu ]
# Epistemic
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberEpistemic
name: epistemic bomber jacket
description: A thick, well-worn vintage leather bomber jacket brandishing epistemics flair. It features an alien patch on the back.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/epi.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/epi.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberEpistemic ]
id: ClothingOuterCoatBomberEpistemicOpened
categories: [ HideSpawnMenu ]
# Logistic
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberLogistic
name: logistic bomber jacket
description: A thick, well-worn vintage leather bomber jacket brandishing logistics flair. It features a yellow band around the chest.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/logi.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/logi.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberEpistemic ]
id: ClothingOuterCoatBomberLogisticOpened
categories: [ HideSpawnMenu ]
# Medical
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberMedical
name: medical bomber jacket
description: A thick, well-worn vintage leather bomber jacket brandishing medical flair. It features a medical Cross patch on the back.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/med.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/med.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberMedical ]
id: ClothingOuterCoatBomberMedicalOpened
categories: [ HideSpawnMenu ]
# Security
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterArmoredWinterCoat ]
id: ClothingOuterCoatBomberSecurity
name: security bomber jacket
description: An armored, well-worn vintage leather bomber jacket brandishing security flair. It features a shield patch on the back.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/sec.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/sec.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberSecurity ]
id: ClothingOuterCoatBomberSecurityOpened
categories: [ HideSpawnMenu ]
# Service
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberService
name: service bomber jacket
description: A thick, well-worn vintage leather bomber jacket brandishing service flair. It features blue hook-and-loop fastener around the waist, but it seems to be non-functional.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/service.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/service.rsi
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberService ]
id: ClothingOuterCoatBomberServiceOpened
categories: [ HideSpawnMenu ]
# Syndicate
- type: entity
parent: [ ClothingOuterStorageFoldableBase, ClothingOuterWinterCoat ]
id: ClothingOuterCoatBomberSyndicate
name: syndicate bomber jacket
description: A sturdy, well-worn vintage leather bomber jacket brandishing syndicate flair. It's totally legal, officer! I swear!
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/syndi.rsi
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/syndi.rsi
- type: Armor # Same as Cybersun Windbreaker but cold instead of heat
modifiers:
coefficients:
Blunt: 0.95
Slash: 0.95
Piercing: 0.95
Cold: 0.75
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberSyndicate ]
id: ClothingOuterCoatBomberSyndicateOpened
categories: [ HideSpawnMenu ]
- type: entity
parent: ClothingOuterCoatBomberSyndicate
id: ClothingOuterCoatBomberCybersun
name: cybersun bomber jacket
description: A sturdy, well-worn vintage leather bomber jacket brandishing Cybersun flair. The fur seems to be glowing. The wonders of modern science.
components:
- type: Sprite
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/cybersun.rsi
layers:
- state: icon
- state: icon-unshaded
shader: unshaded
- type: Clothing
sprite: _DV/Clothing/OuterClothing/Coats/Bombers/cybersun.rsi
clothingVisuals:
outerClothing:
- state: equipped-OUTERCLOTHING
- state: unshaded
shader: unshaded
- type: entity
parent: [ ClothingOuterStorageFoldableBaseOpened, ClothingOuterCoatBomberCybersun ]
id: ClothingOuterCoatBomberCybersunOpened
categories: [ HideSpawnMenu ]
@@ -1,213 +0,0 @@
# region Engineering
- type: entity
parent: BorgEngineerSubtypeBase
id: EngineerStandardSubtype
name: standard engineering cyborg
description: "A standard cyborg for all your engineering needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisEngineeringStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Engineering/standard.rsi
- type: entity
parent: BorgEngineerSubtypeBase
id: EngineerGenericSubtype
name: generic engineering cyborg
description: "A generic cyborg for all your engineering needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisEngineeringGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Engineering/generic.rsi
- type: entity
parent: BorgEngineerSubtypeBase
id: EngineerAntiqueSubtype
name: antique engineering cyborg
description: "An antique engineering cyborg, looks like it has patched up hundreds of meteor holes."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisEngineeringAntique
spritePath: _DV/Mobs/Silicon/Cyborgs/Engineering/antique.rsi
# region Generic
- type: entity
parent: BorgGenericSubtypeBase
id: GenericGenericSubtype
name: generic cyborg
description: "A generic cyborg, it's extra generic looking."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisGenericGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Generic/generic.rsi
# region Janitor
- type: entity
parent: BorgJanitorSubtypeBase
id: JanitorStandardSubtype
name: standard janitor cyborg
description: "A standard cyborg for all your janitorial needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisJanitorStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Janitor/standard.rsi
- type: entity
parent: BorgJanitorSubtypeBase
id: JanitorGenericSubtype
name: generic janitor cyborg
description: "A generic cyborg for all your janitorial needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisJanitorGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Janitor/generic.rsi
- type: entity
parent: BorgJanitorSubtypeBase
id: JanitorMopbotSubtype
name: mopbot cyborg
description: "A bot with a mop, call it Mopbot."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisJanitorMopbot
spritePath: _DV/Mobs/Silicon/Cyborgs/Janitor/mopbot.rsi
- type: entity
parent: BorgJanitorSubtypeBase
id: JanitorVestSubtype
name: vest janitor cyborg
description: "A janitor cyborg with a high-visibility vest."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisJanitorVest
spritePath: _DV/Mobs/Silicon/Cyborgs/Janitor/vest.rsi
# region Medical
- type: entity
parent: BorgMedicalSubtypeBase
id: MedicalStandardSubtype
name: standard medical cyborg
description: "A standard cyborg for all your medical needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisMedicalStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Medical/standard.rsi
- type: entity
parent: BorgMedicalSubtypeBase
id: MedicalGenericSubtype
name: generic medical cyborg
description: "A generic cyborg for all your medical needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisMedicalGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Medical/generic.rsi
- type: entity
parent: BorgMedicalSubtypeBase
id: MedicalDoctorSubtype
name: doctor medical cyborg
description: "A cyborg in a white coat for all your medical needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisMedicalDoctor
spritePath: _DV/Mobs/Silicon/Cyborgs/Medical/doctor.rsi
# region Salvage
- type: entity
parent: BorgSalvageSubtypeBase
id: SalvageStandardSubtype
name: standard salvage cyborg
description: "A standard cyborg for all your salvage needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisSalvageStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Salvage/standard.rsi
- type: entity
parent: BorgSalvageSubtypeBase
id: SalvageGenericSubtype
name: generic salvage cyborg
description: "A generic cyborg for all your salvage needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisSalvageGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Salvage/generic.rsi
# region Security
- type: entity
parent: BorgSecuritySubtypeBase
id: SecurityStandardSubtype
name: standard security cyborg
description: "A standard cyborg for all your security needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisSecurityStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Security/standard.rsi
- type: entity
parent: BorgSecuritySubtypeBase
id: SecurityGenericSubtype
name: generic security cyborg
description: "A generic cyborg for all your security needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisSecurityGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Security/generic.rsi
# region Service
- type: entity
parent: BorgServiceSubtypeBase
id: ServiceStandardSubtype
name: standard service cyborg
description: "A standard cyborg for all your service needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisServiceStandard
spritePath: _DV/Mobs/Silicon/Cyborgs/Service/standard.rsi
- type: entity
parent: BorgServiceSubtypeBase
id: ServiceGenericSubtype
name: generic service cyborg
description: "A generic cyborg for all your service needs."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisServiceGeneric
spritePath: _DV/Mobs/Silicon/Cyborgs/Service/generic.rsi
- type: entity
parent: BorgServiceSubtypeBase
id: ServiceWaitressSubtype
name: waitress service cyborg
description: "A service cyborg in a waitress uniform."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisServiceWaitress
spritePath: _DV/Mobs/Silicon/Cyborgs/Service/waitress.rsi
- type: entity
parent: BorgServiceSubtypeBase
id: ServiceBrobotSubtype
name: brobot service cyborg
description: "Suh dude!?"
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisServiceBrobot
spritePath: _DV/Mobs/Silicon/Cyborgs/Service/brobot.rsi
- type: entity
parent: BorgServiceSubtypeBase
id: ServiceMaximiliumSubtype
name: maximilium service cyborg
description: "A rather distinguished service cyborg."
components:
- type: BorgSubtypeDefinition
dummyPrototype: BorgChassisServiceMaximilium
spritePath: _DV/Mobs/Silicon/Cyborgs/Service/maximilium.rsi
@@ -1,216 +0,0 @@
# region Engineering
- type: entity
id: BorgChassisEngineeringStandard
parent: BorgChassisSelectable
name: standard engineering cyborg
components:
- type: ShowAccessReaderSettings
- type: BorgSwitchableType
selectedBorgType: engineering
- type: BorgSwitchableSubtype
borgSubtype: EngineerStandardSubtype
- type: entity
id: BorgChassisEngineeringGeneric
parent: BorgChassisSelectable
name: generic engineering cyborg
components:
- type: ShowAccessReaderSettings
- type: BorgSwitchableType
selectedBorgType: engineering
- type: BorgSwitchableSubtype
borgSubtype: EngineerGenericSubtype
- type: entity
id: BorgChassisEngineeringAntique
parent: BorgChassisSelectable
name: antique engineering cyborg
components:
- type: ShowAccessReaderSettings
- type: BorgSwitchableType
selectedBorgType: engineering
- type: BorgSwitchableSubtype
borgSubtype: EngineerAntiqueSubtype
# region Generic
- type: entity
id: BorgChassisGenericGeneric
parent: BorgChassisSelectable
name: generic cyborg
components:
- type: BorgSwitchableType
selectedBorgType: generic
- type: BorgSwitchableSubtype
borgSubtype: GenericGenericSubtype
# region Janitor
- type: entity
id: BorgChassisJanitorStandard
parent: BorgChassisSelectable
name: standard janitor cyborg
components:
- type: BorgSwitchableType
selectedBorgType: janitor
- type: BorgSwitchableSubtype
borgSubtype: JanitorStandardSubtype
- type: entity
id: BorgChassisJanitorGeneric
parent: BorgChassisSelectable
name: generic janitor cyborg
components:
- type: BorgSwitchableType
selectedBorgType: janitor
- type: BorgSwitchableSubtype
borgSubtype: JanitorGenericSubtype
- type: entity
id: BorgChassisJanitorMopbot
parent: BorgChassisSelectable
name: mopbot cyborg
components:
- type: BorgSwitchableType
selectedBorgType: janitor
- type: BorgSwitchableSubtype
borgSubtype: JanitorMopbotSubtype
- type: entity
id: BorgChassisJanitorVest
parent: BorgChassisSelectable
name: vest janitor cyborg
components:
- type: BorgSwitchableType
selectedBorgType: janitor
- type: BorgSwitchableSubtype
borgSubtype: JanitorVestSubtype
# region Medical
- type: entity
id: BorgChassisMedicalStandard
parent: BorgChassisSelectable
name: standard medical cyborg
components:
- type: BorgSwitchableType
selectedBorgType: medical
- type: BorgSwitchableSubtype
borgSubtype: MedicalStandardSubtype
- type: entity
id: BorgChassisMedicalGeneric
parent: BorgChassisSelectable
name: generic medical cyborg
components:
- type: BorgSwitchableType
selectedBorgType: medical
- type: BorgSwitchableSubtype
borgSubtype: MedicalGenericSubtype
- type: entity
id: BorgChassisMedicalDoctor
parent: BorgChassisSelectable
name: doctor medical cyborg
components:
- type: BorgSwitchableType
selectedBorgType: medical
- type: BorgSwitchableSubtype
borgSubtype: MedicalDoctorSubtype
# region Salvage
- type: entity
id: BorgChassisSalvageStandard
parent: BorgChassisSelectable
name: standard salvage cyborg
components:
- type: BorgSwitchableType
selectedBorgType: mining
- type: BorgSwitchableSubtype
borgSubtype: SalvageStandardSubtype
- type: entity
id: BorgChassisSalvageGeneric
parent: BorgChassisSelectable
name: generic salvage cyborg
components:
- type: BorgSwitchableType
selectedBorgType: mining
- type: BorgSwitchableSubtype
borgSubtype: SalvageGenericSubtype
# region Security
- type: entity
id: BorgChassisSecurityStandard
parent: BorgChassisSelectable
name: standard security cyborg
components:
- type: BorgSwitchableType
selectedBorgType: security
- type: BorgSwitchableSubtype
borgSubtype: SecurityStandardSubtype
- type: entity
id: BorgChassisSecurityGeneric
parent: BorgChassisSelectable
name: generic security cyborg
components:
- type: BorgSwitchableType
selectedBorgType: security
- type: BorgSwitchableSubtype
borgSubtype: SecurityGenericSubtype
# region Service
- type: entity
id: BorgChassisServiceStandard
parent: BorgChassisSelectable
name: standard service cyborg
components:
- type: BorgSwitchableType
selectedBorgType: service
- type: BorgSwitchableSubtype
borgSubtype: ServiceStandardSubtype
- type: entity
id: BorgChassisServiceGeneric
parent: BorgChassisSelectable
name: generic service cyborg
components:
- type: BorgSwitchableType
selectedBorgType: service
- type: BorgSwitchableSubtype
borgSubtype: ServiceGenericSubtype
- type: entity
id: BorgChassisServiceWaitress
parent: BorgChassisSelectable
name: waitress service cyborg
components:
- type: BorgSwitchableType
selectedBorgType: service
- type: BorgSwitchableSubtype
borgSubtype: ServiceWaitressSubtype
- type: entity
id: BorgChassisServiceBrobot
parent: BorgChassisSelectable
name: brobot service cyborg
components:
- type: BorgSwitchableType
selectedBorgType: service
- type: BorgSwitchableSubtype
borgSubtype: ServiceBrobotSubtype
- type: entity
id: BorgChassisServiceMaximilium
parent: BorgChassisSelectable
name: maximilium service cyborg
components:
- type: BorgSwitchableType
selectedBorgType: service
- type: BorgSwitchableSubtype
borgSubtype: ServiceMaximiliumSubtype
@@ -11,4 +11,8 @@
Structural: 20
penetrationThreshold: 200 # This is irrelevant - As long as it's above 0.
- type: PiercingProjectile
pierceCounterWhitelist:
tags:
- Wall
- Window
healthThreshold: 200 # Normal walls have a threshold of 200.
@@ -1,7 +1,7 @@
- type: entity
name: NT-3
parent: BaseItem # The base LightMachineGun had unwanted components.
id: WeaponLightMachinegGunNT3
name: NT-3
description: An ancient weapon from the old wars, refurbished and rebranded for NT's strongest stations.
components:
- type: Sprite
@@ -18,7 +18,7 @@
- type: Item
size: Ginormous
shape:
- 0,0,4,3
- 0,0,6,3
- type: Clothing
sprite: _DV/Objects/Weapons/Guns/LMGs/NT-3.rsi
quickEquip: false
@@ -44,6 +44,7 @@
soundEmpty:
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
- type: GunBipod
setupDelay: 2
minAngle: -12
maxAngle: -20
angleDecay: 4
@@ -78,3 +79,6 @@
price: 500
- type: UseDelay
delay: 1
- type: Tag
tags:
- ParcelWrapBlacklist
@@ -35,3 +35,9 @@
id: InventoryAssociatePDA
equipment:
id: InventoryAssociatePDA
# OuterClothing
- type: loadout
id: BomberLogistic
equipment:
outerClothing: ClothingOuterCoatBomberLogistic
@@ -3,3 +3,9 @@
id: BotanistJumpskirtOveralls
equipment:
jumpsuit: ClothingUniformJumpskirtOveralls
# OuterClothing
- type: loadout
id: BomberService
equipment:
outerClothing: ClothingOuterCoatBomberService
@@ -678,6 +678,16 @@
equipment:
outerClothing: ClothingOuterFlannelGreen
- type: loadout
id: BomberJacket
equipment:
outerClothing: ClothingOuterCoatBomberCheckered
- type: loadout
id: BomberCheckered
equipment:
outerClothing: ClothingOuterCoatBomber
# Shoes
## Green Shoes
- type: loadout
@@ -19,3 +19,8 @@
id: StationEngineerWintercoat
equipment:
outerClothing: ClothingOuterWinterEngi
- type: loadout
id: BomberEngineering
equipment:
outerClothing: ClothingOuterCoatBomberEngineering
@@ -26,7 +26,6 @@
head: ClothingHeadHatBeretMedical
# Jumpsuit
- type: loadout
id: MedicalApronJumpsuit
equipment:
@@ -58,7 +57,6 @@
jumpsuit: ClothingUniformJumpskirtMedicalVest
# OuterClothing
- type: loadout
id: MedicalLabCoat
equipment:
@@ -73,3 +71,8 @@
id: LongLabCoat
equipment:
outerClothing: ClothingOuterCoatLabLong
- type: loadout
id: BomberMedical
equipment:
outerClothing: ClothingOuterCoatBomberMedical
@@ -10,7 +10,6 @@
id: XenoarchPDA
# Jumpsuits
- type: loadout
id: FormalScientistJumpsuit
equipment:
@@ -20,3 +19,9 @@
id: FormalScientistJumpskirt
equipment:
jumpsuit: ClothingUniformJumpskirtScientistFormal
# OuterClothing
- type: loadout
id: BomberEpistemic
equipment:
outerClothing: ClothingOuterCoatBomberEpistemic
@@ -150,6 +150,11 @@
equipment:
outerClothing: ClothingLongcoatSecurity
- type: loadout
id: BomberSecurity
equipment:
outerClothing: ClothingOuterCoatBomberSecurity
# Gloves
- type: loadout
@@ -232,6 +232,7 @@
minLimit: 0
loadouts:
- CargoTechnicianWintercoat
- BomberLogistic
- type: loadoutGroup
id: CargoAssistantShoes
@@ -300,6 +301,7 @@
loadouts:
- LongcoatBrigmedic
- StasecWinterCoatCorpsman
- BomberSecurity
- PlateCarrier
- DuraVest
- ArmorVestSlim
@@ -491,6 +493,7 @@
- StasecSweater
- LongcoatSecurity
- StasecWinterCoat
- BomberSecurity
- ArmorVestSlim
## Warden
@@ -502,6 +505,7 @@
- DuraVest
- WardenLongcoat
- StasecWinterCoatWarden
- BomberSecurity
- ArmorVestSlim
# - WardenArmoredWinterCoat #Disabled during bluesec testing
@@ -517,6 +521,7 @@
- HeadOfSecurityTrenchcoat
- ArmorVestSlim
- HeadofSecurityWinterCoat
- BomberSecurity
## Detective
- type: loadoutGroup
@@ -538,6 +543,7 @@
loadouts:
- LongcoatSecurity
- StasecWinterCoatDet
- BomberSecurity
- PlateCarrier
- DuraVest
- DetPlatedCoat
@@ -565,6 +571,7 @@
- PsychologistWinterCoat
- WinterCoatPlaid
- PsychologistCoatBomber
- BomberMedical
- PsychologistSweater
- type: loadoutGroup
@@ -739,6 +739,70 @@
Mew:
collection: FelinidMews
- type: emoteSounds
id: MonkeySounds
sounds:
Clap:
collection: Claps
params:
pitch: 1.3
ClapSingle:
collection: ClapSingle
Snap:
collection: Snaps
Salute:
collection: Salutes
Laugh:
path: /Audio/Animals/ferret_happy.ogg
params:
variation: 0.125
Cough:
path: /Audio/Effects/Diseases/monkey2.ogg
params:
pitch: 0.9
variation: 0.125
Whistle:
collection: Whistles
Sigh:
collection: MaleSigh
params:
variation: 0.125
Scream:
path: /Audio/Animals/monkey_scream.ogg
params:
variation: 0.125
Yawn:
path: /Audio/Animals/monkey_scream.ogg
params:
pitch: 0.6
variation: 0.125
volume: -4
Crying:
path: /Audio/Animals/ferret_happy.ogg
params:
pitch: 0.8
Snore:
collection: Snores
Weh:
collection: Weh
Hew:
collection: Hew
Honk:
collection: BikeHorn
Gasp:
collection: MaleGasp
params:
pitch: 1.3
DefaultDeathgasp:
collection: DeathGasp
Gulp:
path: /Audio/_Goobstation/Voice/Human/gulp.ogg
params:
pitch: 1.3
variation: 0.125
Blink: # Imp
collection: Blinks # Imp
- type: emoteSounds
id: SyntheticEmoteSounds
params:
@@ -2,6 +2,7 @@
id: Marr
name: chat-emote-name-marr
category: Vocal
available: false
whitelist:
components:
- Vocal
@@ -23,6 +24,7 @@
id: Wurble
name: chat-emote-name-wurble
category: Vocal
available: false
whitelist:
components:
- Vocal
Binary file not shown.

Before

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 B

@@ -1,27 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from https://github.com/tgstation/tgstation/blob/master/icons/mob/silicon/robots.dmi",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "borg",
"directions": 4
},
{
"name": "borg_e",
"directions": 4
},
{
"name": "borg_e_r",
"directions": 4
},
{
"name": "borg_l",
"directions": 4
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

@@ -0,0 +1,33 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, departmental bombers by JustAnOrange",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "icon-open"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
},
{
"name": "open-equipped-OUTERCLOTHING",
"directions": 4
},
{
"name": "inland-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

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