diff --git a/Content.Client/Instruments/MidiParser/MidiParser.cs b/Content.Client/Instruments/MidiParser/MidiParser.cs
index 937384e439..0b65e472fc 100644
--- a/Content.Client/Instruments/MidiParser/MidiParser.cs
+++ b/Content.Client/Instruments/MidiParser/MidiParser.cs
@@ -102,6 +102,8 @@ public static class MidiParser
// 0x03 is TrackName,
// 0x04 is InstrumentName
+ // This string can potentially contain control characters, including 0x00 which can cause problems if it ends up in database entries via admin logs
+ // we sanitize TrackName and InstrumentName after they have been send to the server
var text = Encoding.ASCII.GetString(metaData, 0, (int)metaLength);
switch (metaType)
{
diff --git a/Content.Server/Instruments/InstrumentSystem.cs b/Content.Server/Instruments/InstrumentSystem.cs
index 420bd44737..f6a2162271 100644
--- a/Content.Server/Instruments/InstrumentSystem.cs
+++ b/Content.Server/Instruments/InstrumentSystem.cs
@@ -156,6 +156,15 @@ public sealed partial class InstrumentSystem : SharedInstrumentSystem
return;
}
+
+ foreach (var t in msg.Tracks)
+ {
+ // Remove any control characters that may be part of the midi file so they don't end up in the admin logs.
+ t?.SanitizeFields();
+ // Truncate any track names too long.
+ t?.TruncateFields(_cfg.GetCVar(CCVars.MidiMaxChannelNameLength));
+ }
+
var tracksString = string.Join("\n",
msg.Tracks
.Where(t => t != null)
@@ -166,12 +175,6 @@ public sealed partial class InstrumentSystem : SharedInstrumentSystem
LogImpact.Low,
$"{ToPrettyString(args.SenderSession.AttachedEntity)} set the midi channels for {ToPrettyString(uid)} to {tracksString}");
- // Truncate any track names too long.
- foreach (var t in msg.Tracks)
- {
- t?.TruncateFields(_cfg.GetCVar(CCVars.MidiMaxChannelNameLength));
- }
-
activeInstrument.Tracks = msg.Tracks;
Dirty(uid, activeInstrument);
diff --git a/Content.Server/NameIdentifier/NameIdentifierSystem.cs b/Content.Server/NameIdentifier/NameIdentifierSystem.cs
index 0a9f87557a..1e5ed67a63 100644
--- a/Content.Server/NameIdentifier/NameIdentifierSystem.cs
+++ b/Content.Server/NameIdentifier/NameIdentifierSystem.cs
@@ -20,7 +20,7 @@ public sealed class NameIdentifierSystem : EntitySystem
/// Free IDs available per .
///
[ViewVariables]
- public readonly Dictionary> CurrentIds = new();
+ public readonly Dictionary> CurrentIds = [];
public override void Initialize()
{
@@ -35,18 +35,22 @@ public sealed class NameIdentifierSystem : EntitySystem
InitialSetupPrototypes();
}
- private void OnComponentShutdown(EntityUid uid, NameIdentifierComponent component, ComponentShutdown args)
+ private void OnComponentShutdown(Entity ent, ref ComponentShutdown args)
{
- if (CurrentIds.TryGetValue(component.Group, out var ids))
+ if (ent.Comp.Group is null)
+ return;
+
+ if (CurrentIds.TryGetValue(ent.Comp.Group, out var ids) && ids.Count > 0)
{
// Avoid inserting the value right back at the end or shuffling in place:
// just pick a random spot to put it and then move that one to the end.
var randomIndex = _robustRandom.Next(ids.Count);
var random = ids[randomIndex];
- ids[randomIndex] = component.Identifier;
+ ids[randomIndex] = ent.Comp.Identifier;
ids.Add(random);
}
- _nameModifier.RefreshNameModifiers(uid);
+
+ _nameModifier.RefreshNameModifiers(ent.Owner);
}
///
@@ -83,46 +87,53 @@ public sealed class NameIdentifierSystem : EntitySystem
: $"{randomVal}";
}
- private void OnMapInit(EntityUid uid, NameIdentifierComponent component, MapInitEvent args)
+ private void OnMapInit(Entity ent, ref MapInitEvent args)
{
- if (!_prototypeManager.TryIndex(component.Group, out var group))
+ if (ent.Comp.Group is null)
+ return;
+
+ if (!_prototypeManager.TryIndex(ent.Comp.Group, out var group))
return;
int id;
string uniqueName;
// If it has an existing valid identifier then use that, otherwise generate a new one.
- if (component.Identifier != -1 &&
- CurrentIds.TryGetValue(component.Group, out var ids) &&
- ids.Remove(component.Identifier))
+ if (ent.Comp.Identifier != -1 &&
+ CurrentIds.TryGetValue(ent.Comp.Group, out var ids) &&
+ ids.Remove(ent.Comp.Identifier))
{
- id = component.Identifier;
+ id = ent.Comp.Identifier;
uniqueName = group.Prefix is not null
? $"{group.Prefix}-{id}"
: $"{id}";
}
else
{
- uniqueName = GenerateUniqueName(uid, group, out id);
- component.Identifier = id;
+ uniqueName = GenerateUniqueName(ent, group, out id);
+ ent.Comp.Identifier = id;
}
- component.FullIdentifier = group.FullName
+ ent.Comp.FullIdentifier = group.FullName
? uniqueName
: $"({uniqueName})";
- Dirty(uid, component);
- _nameModifier.RefreshNameModifiers(uid);
+ Dirty(ent);
+ _nameModifier.RefreshNameModifiers(ent.Owner);
}
private void OnRefreshNameModifiers(Entity ent, ref RefreshNameModifiersEvent args)
{
+ if (ent.Comp.Group is null)
+ return;
+
// Don't apply the modifier if the component is being removed
if (ent.Comp.LifeStage > ComponentLifeStage.Running)
return;
- if (!_prototypeManager.TryIndex(ent.Comp.Group, out var group))
+ if (!_prototypeManager.TryIndex(ent.Comp.Group, out var group))
return;
+
var format = group.FullName ? "name-identifier-format-full" : "name-identifier-format-append";
// We apply the modifier with a low priority to keep it near the base name
// "Beep (Si-4562) the zombie" instead of "Beep the zombie (Si-4562)"
@@ -188,13 +199,13 @@ public sealed class NameIdentifierSystem : EntitySystem
foreach (var proto in set.Modified.Values)
{
- var name_proto = (NameIdentifierGroupPrototype) proto;
+ var name_proto = (NameIdentifierGroupPrototype)proto;
// Only bother adding new ones.
if (CurrentIds.ContainsKey(proto.ID))
continue;
- var ids = GetOrCreateIdList(name_proto);
+ var ids = GetOrCreateIdList(name_proto);
FillGroup(name_proto, ids);
}
}
diff --git a/Content.Shared/Instruments/SharedInstrumentComponent.cs b/Content.Shared/Instruments/SharedInstrumentComponent.cs
index 97eef752eb..41bef64902 100644
--- a/Content.Shared/Instruments/SharedInstrumentComponent.cs
+++ b/Content.Shared/Instruments/SharedInstrumentComponent.cs
@@ -1,4 +1,5 @@
using System.Collections;
+using System.Text;
using Robust.Shared.Audio.Midi;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
@@ -207,6 +208,18 @@ public sealed class MidiTrack
ProgramName = Truncate(ProgramName, limit);
}
+ public void SanitizeFields()
+ {
+ if (InstrumentName != null)
+ InstrumentName = Sanitize(InstrumentName);
+
+ if (TrackName != null)
+ TrackName = Sanitize(TrackName);
+
+ if (ProgramName != null)
+ ProgramName = Sanitize(ProgramName);
+ }
+
private const string Postfix = "…";
// TODO: Make a general method to use in RT? idk if we have that.
private string Truncate(string input, int limit)
@@ -218,4 +231,17 @@ public sealed class MidiTrack
return input.Substring(0, truncatedLength) + Postfix;
}
+
+ private static string Sanitize(string input)
+ {
+ var sanitized = new StringBuilder(input.Length);
+
+ foreach (char c in input)
+ {
+ if (!char.IsControl(c) && c <= 127) // no control characters, only ASCII
+ sanitized.Append(c);
+ }
+
+ return sanitized.ToString();
+ }
}
diff --git a/Content.Shared/NameIdentifier/NameIdentifierComponent.cs b/Content.Shared/NameIdentifier/NameIdentifierComponent.cs
index 49be08a6a3..f9f9eef49b 100644
--- a/Content.Shared/NameIdentifier/NameIdentifierComponent.cs
+++ b/Content.Shared/NameIdentifier/NameIdentifierComponent.cs
@@ -1,5 +1,5 @@
using Robust.Shared.GameStates;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.Prototypes;
namespace Content.Shared.NameIdentifier;
@@ -9,18 +9,18 @@ namespace Content.Shared.NameIdentifier;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class NameIdentifierComponent : Component
{
- [DataField("group", required: true, customTypeSerializer:typeof(PrototypeIdSerializer))]
- public string Group = string.Empty;
+ [DataField]
+ public ProtoId? Group;
///
/// The randomly generated ID for this entity.
///
- [DataField("identifier"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public int Identifier = -1;
///
/// The full name identifier for this entity.
///
- [DataField("fullIdentifier"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public string FullIdentifier = string.Empty;
}
diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml
index 0ee9d52336..5dcafecdd1 100644
--- a/Resources/Changelog/Changelog.yml
+++ b/Resources/Changelog/Changelog.yml
@@ -3565,15 +3565,6 @@
id: 8704
time: '2025-06-21T22:23:39.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/38486
-- author: keronshb
- changes:
- - message: Added the Hypereutactic Blade back to the Traitor Uplink
- type: Add
- - message: Added the Hypereutatic Blade to the Nukie uplink
- type: Add
- id: 8705
- time: '2025-06-22T16:50:59.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/37182
- author: Cojoke-dot
changes:
- message: Pacifists can now use the Staff of Healing
diff --git a/Resources/Locale/en-US/datasets/names/scurret_first.ftl b/Resources/Locale/en-US/datasets/names/scurret_first.ftl
index 4bbbf943f0..a01a6db8bb 100644
--- a/Resources/Locale/en-US/datasets/names/scurret_first.ftl
+++ b/Resources/Locale/en-US/datasets/names/scurret_first.ftl
@@ -1,3 +1,19 @@
+# Scurrets from Planet Wawa have two parts to their name - a 'chosen' and 'qualitative' name.
+
+# The chosen name is picked by the scurret themselves,
+# encompassing a trait or value they hold themselves
+# to or have a high value for. Scurrets sometimes change this
+# name to denote an important moment in their life.
+
+# It appears to be common for scurret sets to share the same
+# chosen name, with the gaining of a pup's own chosen name
+# signalling their transition to adulthood in the community.
+
+# Given the scurret language is untranslated, these names are
+# usually guessed via charades or Pictionary.
+
+# When all else fails, to NT and her crews, Wa is as good a name as any.
+
names-scurret-first-dataset-1 = Wa
names-scurret-first-dataset-2 = Calm
names-scurret-first-dataset-3 = Contented
@@ -34,3 +50,18 @@ names-scurret-first-dataset-33 = Wise
names-scurret-first-dataset-34 = Alert
names-scurret-first-dataset-35 = Uplifting
names-scurret-first-dataset-36 = Considerate
+names-scurret-first-dataset-37 = Surviving
+names-scurret-first-dataset-38 = Meditating
+names-scurret-first-dataset-39 = Hunting
+names-scurret-first-dataset-40 = Watching
+names-scurret-first-dataset-41 = Resting
+names-scurret-first-dataset-42 = Delivering
+names-scurret-first-dataset-43 = Swimming
+names-scurret-first-dataset-44 = Swinging
+names-scurret-first-dataset-45 = Exploding
+names-scurret-first-dataset-46 = Romancing
+names-scurret-first-dataset-47 = Far-Seeing
+names-scurret-first-dataset-48 = Loyal
+names-scurret-first-dataset-49 = Inquisitive
+# After consulting with lawyers, NT added this one to the dictionary.
+names-scurret-first-dataset-50 = Legally Distinct
diff --git a/Resources/Locale/en-US/datasets/names/scurret_last.ftl b/Resources/Locale/en-US/datasets/names/scurret_last.ftl
index effe2180f0..bac9b818d1 100644
--- a/Resources/Locale/en-US/datasets/names/scurret_last.ftl
+++ b/Resources/Locale/en-US/datasets/names/scurret_last.ftl
@@ -1,3 +1,19 @@
+# Scurrets from Planet Wawa have two parts to their name - a 'chosen' and 'qualitative' name.
+
+# The qualitative name is usually related to an important feature
+# of Wawa's wetland habitats that the scurret is associated with
+# by their community.
+
+# Scurret pups, due to both their quantity and complete lack
+# of any survival instinct, lack a qualitative name entirely.
+# Researchers believe their parents simply give them a number.
+
+# Given that the scurret language is untranslated, these names are
+# usually deduced via the showing of photographs, annoyed and
+# repeated pointing at nearby objects, or games of Pictionary.
+
+# When all else fails, to NT and her crews, Wa is as good a name as any.
+
names-scurret-last-dataset-1 = Wa
names-scurret-last-dataset-2 = Trees
names-scurret-last-dataset-3 = Plants
@@ -6,12 +22,12 @@ names-scurret-last-dataset-5 = Rivers
names-scurret-last-dataset-6 = Groves
names-scurret-last-dataset-7 = Lakes
names-scurret-last-dataset-8 = Marshes
-names-scurret-last-dataset-9 = Spring
+names-scurret-last-dataset-9 = Springs
names-scurret-last-dataset-10 = Reeds
names-scurret-last-dataset-11 = Sunshine
names-scurret-last-dataset-12 = Rain
names-scurret-last-dataset-13 = Clouds
-names-scurret-last-dataset-14 = Snowfall
+names-scurret-last-dataset-14 = Snowfalls
names-scurret-last-dataset-15 = Stones
names-scurret-last-dataset-16 = Pebbles
names-scurret-last-dataset-17 = Fishes
@@ -25,7 +41,7 @@ names-scurret-last-dataset-24 = Alders
names-scurret-last-dataset-25 = Birches
names-scurret-last-dataset-26 = Poplars
names-scurret-last-dataset-27 = Marigolds
-names-scurret-last-dataset-28 = Robins
+names-scurret-last-dataset-28 = Rowans
names-scurret-last-dataset-29 = Orchids
names-scurret-last-dataset-30 = Rushes
names-scurret-last-dataset-31 = Lillies
@@ -33,4 +49,20 @@ names-scurret-last-dataset-32 = Violets
names-scurret-last-dataset-33 = Maples
names-scurret-last-dataset-34 = Oaks
names-scurret-last-dataset-35 = Hazels
+# AND SIR GIDEON OFNIR
names-scurret-last-dataset-36 = the All-Knowing
+names-scurret-last-dataset-37 = Tarns
+names-scurret-last-dataset-38 = Waters
+names-scurret-last-dataset-39 = Reservoirs
+names-scurret-last-dataset-40 = Dams
+names-scurret-last-dataset-41 = Moors
+names-scurret-last-dataset-42 = Fens
+names-scurret-last-dataset-43 = Temples
+names-scurret-last-dataset-44 = Hills
+names-scurret-last-dataset-45 = Copses
+names-scurret-last-dataset-46 = Fields
+names-scurret-last-dataset-47 = Ancestors
+names-scurret-last-dataset-48 = Forests
+names-scurret-last-dataset-49 = Secrets
+# Nobody's quite sure how this one is in the dictionary.
+names-scurret-last-dataset-50 = Space Ferret
diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl
index 6aa07ce9da..3c7218b69c 100644
--- a/Resources/Locale/en-US/store/uplink-catalog.ftl
+++ b/Resources/Locale/en-US/store/uplink-catalog.ftl
@@ -23,9 +23,6 @@ uplink-esword-double-desc = A much more expensive counter part to the normal ene
uplink-hypereutactic-blade-name = Hypereutactic Blade
uplink-hypereutactic-blade-desc = A gigantic energy sword with power that matches its looks. Requires two hands. Slow and unwieldy, yet pretty adept at reflecting. Previously made infamous by an operative wearing a joy mask. You wouldn't want to see this coming at you down the hall!
-uplink-hypereutatic-blade-name = Hypereutatic Blade
-uplink-hypereutatic-blade-desc = A gigantic off-brand energy sword. Requires two hands. Slow and unwieldy, can reflect decently. Often mistaken for the Hypereutactic Blade.
-
uplink-edagger-name = Energy Dagger
uplink-edagger-desc = A small energy blade conveniently disguised in the form of a pen.
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
index 237b8a4748..e111b51cff 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml
@@ -50,7 +50,6 @@
- type: StorageFill
contents:
- id: ClothingHeadHatHopcap
- - id: ClothingHeadHatBeretHop
- id: ClothingOuterWinterHoP
- id: ClothingEyesGlasses
- id: ClothingNeckCloakHop
diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml
index 653a17e5f8..2095edabff 100644
--- a/Resources/Prototypes/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/Catalog/uplink_catalog.yml
@@ -66,52 +66,6 @@
categories:
- UplinkWeaponry
-- type: listing
- id: UplinkHyperEutacticBlade
- name: uplink-hypereutactic-blade-name
- description: uplink-hypereutactic-blade-desc
- icon: { sprite: /Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi, state: icon }
- discountCategory: veryRareDiscounts
- discountDownTo:
- Telecrystal: 15
- productEntity: HyperEutacticBlade
- cost:
- Telecrystal: 18
- categories:
- - UplinkWeaponry
- conditions:
- - !type:BuyerWhitelistCondition
- blacklist:
- components:
- - SurplusBundle
- - !type:StoreWhitelistCondition
- blacklist:
- tags:
- - NukeOpsUplink
-
-- type: listing
- id: UplinkHyperEutaticBlade
- name: uplink-hypereutatic-blade-name
- description: uplink-hypereutatic-blade-desc
- icon: { sprite: /Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi, state: icon }
- discountCategory: veryRareDiscounts
- discountDownTo:
- Telecrystal: 13
- productEntity: HyperEutaticBlade
- cost:
- Telecrystal: 16
- categories:
- - UplinkWeaponry
- conditions:
- - !type:BuyerWhitelistCondition
- blacklist:
- components:
- - SurplusBundle
- - !type:StoreWhitelistCondition
- whitelist:
- tags:
- - NukeOpsUplink
-
- type: listing
id: UplinkEnergyDagger
name: uplink-edagger-name
diff --git a/Resources/Prototypes/Datasets/Names/scurret.yml b/Resources/Prototypes/Datasets/Names/scurret.yml
index b3ac08e2ad..9e23557b38 100644
--- a/Resources/Prototypes/Datasets/Names/scurret.yml
+++ b/Resources/Prototypes/Datasets/Names/scurret.yml
@@ -2,10 +2,10 @@
id: NamesFirstScurret
values:
prefix: names-scurret-first-dataset-
- count: 36
+ count: 50
- type: localizedDataset
id: NamesLastScurret
values:
prefix: names-scurret-last-dataset-
- count: 36
+ count: 50
diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
index 26e0c6aba2..ec7801802b 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
@@ -1360,20 +1360,3 @@
path: /Audio/Items/flashlight_on.ogg
soundDeactivate:
path: /Audio/Items/flashlight_off.ogg
-
-- type: entity
- parent: ClothingHeadBase
- id: ClothingHeadHatBeretHop
- name: head of personnel's beret
- description: A dark blue beret with a ruby inserted in the center, for true connoisseurs of bureaucracy!
- components:
- - type: Sprite
- sprite: Clothing/Head/Hats/beret_hop.rsi
- - type: Clothing
- sprite: Clothing/Head/Hats/beret_hop.rsi
- - type: Tag
- tags:
- - HamsterWearable
- - ClothMade
- - Recyclable
- - WhitelistChameleon
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/scurret.yml b/Resources/Prototypes/Entities/Mobs/NPCs/scurret.yml
index 19ba323a0a..6d328014db 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/scurret.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/scurret.yml
@@ -104,6 +104,38 @@
32:
sprite: Mobs/Animals/scurret/displacement.rsi
state: neck
+ ears:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: ears
+ eyes:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: eyes
+ head:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: head
+ mask:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: mask
+ back:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: back
+ - type: Hands
+ leftHandDisplacement:
+ sizeMaps:
+ 32:
+ sprite: Mobs/Animals/scurret/displacement.rsi
+ state: hand
+
- type: InventorySlots
- type: Food
- type: Hunger
@@ -139,6 +171,14 @@
available:
- enum.DamageStateVisualLayers.Base:
scurret: ScurretColors
+ # They are of a mysterious gender.
+ - type: Grammar
+ attributes:
+ gender: epicene
+ proper: true
+ # Strips the name identifier from them, so they're just "Confident Waters" rather than "Confident Waters (123)"
+ - type: NameIdentifier
+ group: null
# Emotional Support Scurrets have a ghost role and equipment. At the moment, these are intended to be used for admemes, but
# feel free to hook them into random content.
@@ -169,4 +209,4 @@
name: Emotional Support Scurret
id: MobEmotionalSupportScurret
parent: [MobScurret, MobBaseEmotionalSupportScurret]
- description: Commonly known as Wawa, from the wetlands of Planet Wawa, these critters make up the bulk of Arnolds's Pizza's "loyal workforce". This one is here as a temp.
+ description: Commonly known as Wawa, from the wetlands of Planet Wawa, these critters make up the bulk of Arnold's Pizza's "loyal workforce". This one is here as a temp.
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml
index 21554eba07..f879e2891e 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml
@@ -296,12 +296,11 @@
Slash: 12
Heat: 12
Structural: 15
- # Disabled until the wield active sfx no longer stacks
- #- type: ItemToggleActiveSound
- # activeSound:
- # path: /Audio/Weapons/ebladehum.ogg
- # params:
- # volume: 3
+ - type: ItemToggleActiveSound
+ activeSound:
+ path: /Audio/Weapons/ebladehum.ogg
+ params:
+ volume: 3
- type: ComponentToggler
components:
- type: Sharp
@@ -387,17 +386,6 @@
reflectProb: 1.0
spread: 75
-# Nukie variant, reduced reflection rate.
-- type: entity
- parent: HyperEutacticBlade
- id: HyperEutaticBlade
- name: hypereutatic-blade
- description: Often mistaken for the Hypereutactic Blade. This mass produced, off-brand, knockoff gets the same job done but with less reflection.
- components:
- - type: Reflect
- reflectProb: 0.75
- spread: 75
-
# Borgs
- type: entity
suffix: One-Handed, For Borgs
diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml
index 0855100e61..45223bea14 100644
--- a/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml
@@ -35,11 +35,6 @@
equipment:
head: ClothingHeadHatHopcap
-- type: loadout
- id: HoPBeret
- equipment:
- head: ClothingHeadHatBeretHop
-
# Neck
- type: loadout
id: HoPCloak
diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml
index b3c8aa8129..39b6be2b04 100644
--- a/Resources/Prototypes/Loadouts/loadout_groups.yml
+++ b/Resources/Prototypes/Loadouts/loadout_groups.yml
@@ -153,7 +153,6 @@
minLimit: 0
loadouts:
- HoPHead
- - HoPBeret
- type: loadoutGroup
id: HoPJumpsuit
diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
index 808f1c680a..aa95781729 100644
--- a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
+++ b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml
@@ -33,7 +33,6 @@
- ClothingUniformJumpskirtCapFormalDress
# HoP
- ClothingHeadHatHopcap
- - ClothingHeadHatBeretHop
- ClothingUniformJumpsuitHoP
- ClothingUniformJumpskirtHoP
# Generic
diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml
index cf6e082b64..c5f81153e2 100644
--- a/Resources/Prototypes/Recipes/Lathes/clothing.yml
+++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml
@@ -810,11 +810,6 @@
id: ClothingHeadHatHopcap
result: ClothingHeadHatHopcap
-- type: latheRecipe
- parent: BaseCommandHatRecipe
- id: ClothingHeadHatBeretHop
- result: ClothingHeadHatBeretHop
-
- type: latheRecipe
parent: BaseCommandHatRecipe
id: ClothingHeadHatQMsoft
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET-hamster.png b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET-hamster.png
deleted file mode 100644
index b55441dd02..0000000000
Binary files a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET-hamster.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET.png
deleted file mode 100644
index 1b491f4c1e..0000000000
Binary files a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/equipped-HELMET.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/icon.png
deleted file mode 100644
index 09a41f2964..0000000000
Binary files a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/icon.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-left.png
deleted file mode 100644
index d1612bc9e9..0000000000
Binary files a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-left.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-right.png
deleted file mode 100644
index 28035a49ac..0000000000
Binary files a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/inhand-right.png and /dev/null differ
diff --git a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/meta.json
deleted file mode 100644
index b5ca3514c5..0000000000
--- a/Resources/Textures/Clothing/Head/Hats/beret_hop.rsi/meta.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "version": 1,
- "license": "CC-BY-SA-3.0",
- "copyright": "Sprited by upnostnote (Discord), resprite by 96flo (Discord)",
- "size": {
- "x": 32,
- "y": 32
- },
- "states": [
- {
- "name": "icon"
- },
- {
- "name": "equipped-HELMET",
- "directions": 4
- },
- {
- "name": "equipped-HELMET-hamster",
- "directions": 4
- },
- {
- "name": "inhand-left",
- "directions": 4
- },
- {
- "name": "inhand-right",
- "directions": 4
- }
- ]
-}
\ No newline at end of file
diff --git a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/back.png b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/back.png
new file mode 100644
index 0000000000..1105557383
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/back.png differ
diff --git a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/hand.png b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/hand.png
index 4611d66f51..e77bdd4d22 100644
Binary files a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/hand.png and b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/hand.png differ
diff --git a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/jumpsuit.png b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/jumpsuit.png
index 2481e38540..41d1e4589d 100644
Binary files a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/jumpsuit.png and b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/jumpsuit.png differ
diff --git a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json
index 1af00995c1..6d148c7cc5 100644
--- a/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json
+++ b/Resources/Textures/Mobs/Animals/scurret/displacement.rsi/meta.json
@@ -45,6 +45,10 @@
{
"name": "hand",
"directions": 4
+ },
+ {
+ "name": "back",
+ "directions": 4
}
]
}