diff --git a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs
deleted file mode 100644
index 73ff83f0d1d..00000000000
--- a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-
-using Content.Shared._NF.Cloning;
-
-namespace Content.Server.Item.PseudoItem
-{
- ///
- /// For entities that behave like an item under certain conditions,
- /// but not under most conditions.
- ///
- [RegisterComponent]
- public sealed partial class PseudoItemComponent : Component, ITransferredByCloning
- {
- [DataField("size")]
- public int Size = 120;
-
- public bool Active = false;
- }
-}
diff --git a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs
index 579366b1451..9f5bd596d76 100644
--- a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs
+++ b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs
@@ -1,159 +1,174 @@
-using System.Threading;
-using Content.Shared.Verbs;
-using Content.Shared.Item;
-using Content.Shared.Hands;
+using Content.Server.DoAfter;
+using Content.Server.Storage.EntitySystems;
using Content.Shared.DoAfter;
+using Content.Shared.Hands;
using Content.Shared.IdentityManagement;
-using Content.Shared.Pseudo;
-using Content.Server.Storage.Components;
-using Content.Server.Storage.EntitySystems;
-using Content.Server.DoAfter;
+using Content.Shared.Item;
+using Content.Shared.Item.PseudoItem;
using Content.Shared.Storage;
using Content.Shared.Tag;
+using Content.Shared.Verbs;
using Robust.Shared.Containers;
-namespace Content.Server.Item.PseudoItem
+namespace Content.Server.Item.PseudoItem;
+
+public sealed class PseudoItemSystem : EntitySystem
{
- public sealed class PseudoItemSystem : EntitySystem
- {
- [Dependency] private readonly StorageSystem _storageSystem = default!;
- [Dependency] private readonly ItemSystem _itemSystem = default!;
- [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
- [Dependency] private readonly TagSystem _tagSystem = default!;
+ [Dependency] private readonly StorageSystem _storageSystem = default!;
+ [Dependency] private readonly ItemSystem _itemSystem = default!;
+ [Dependency] private readonly DoAfterSystem _doAfter = default!;
+ [Dependency] private readonly TagSystem _tagSystem = default!;
[ValidatePrototypeId]
- private const string PreventTag = "PreventLabel";public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent>(AddInsertVerb);
- SubscribeLocalEvent>(AddInsertAltVerb);
- SubscribeLocalEvent(OnEntRemoved);
- SubscribeLocalEvent(OnGettingPickedUpAttempt);
- SubscribeLocalEvent(OnDropAttempt);
- SubscribeLocalEvent(OnDoAfter);
- }
+ private const string PreventTag = "PreventLabel";
- private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args)
- {
- if (!args.CanInteract || !args.CanAccess)
- return;
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent>(AddInsertVerb);
+ SubscribeLocalEvent>(AddInsertAltVerb);
+ SubscribeLocalEvent(OnEntRemoved);
+ SubscribeLocalEvent(OnGettingPickedUpAttempt);
+ SubscribeLocalEvent(OnDropAttempt);
+ SubscribeLocalEvent(OnDoAfter);
+ SubscribeLocalEvent(OnInsertAttempt);
+ }
- if (component.Active)
- return;
+ private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanInteract || !args.CanAccess)
+ return;
- if (!TryComp(args.Target, out var targetStorage))
- return;
+ if (component.Active)
+ return;
- if (component.Size > targetStorage.StorageCapacityMax - targetStorage.StorageUsed)
- return;
+ if (!TryComp(args.Target, out var targetStorage))
+ return;
- if (Transform(args.Target).ParentUid == uid)
- return;
+ if (component.Size > targetStorage.StorageCapacityMax - targetStorage.StorageUsed)
+ return;
- InnateVerb verb = new()
- {
- Act = () =>
- {
- TryInsert(args.Target, uid, component, targetStorage);
- },
- Text = Loc.GetString("action-name-insert-self"),
- Priority = 2
- };
- args.Verbs.Add(verb);
- }
+ if (Transform(args.Target).ParentUid == uid)
+ return;
- private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args)
+ InnateVerb verb = new()
{
- if (!args.CanInteract || !args.CanAccess)
- return;
+ Act = () =>
+ {
+ TryInsert(args.Target, uid, component, targetStorage);
+ },
+ Text = Loc.GetString("action-name-insert-self"),
+ Priority = 2
+ };
+ args.Verbs.Add(verb);
+ }
- if (args.User == args.Target)
- return;
+ private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanInteract || !args.CanAccess)
+ return;
- if (args.Hands == null)
- return;
+ if (args.User == args.Target)
+ return;
- if (!TryComp(args.Hands.ActiveHandEntity, out var targetStorage))
- return;
+ if (args.Hands == null)
+ return;
- AlternativeVerb verb = new()
- {
- Act = () =>
- {
- StartInsertDoAfter(args.User, uid, args.Hands.ActiveHandEntity.Value, component);
- },
- Text = Loc.GetString("action-name-insert-other", ("target", Identity.Entity(args.Target, EntityManager))),
- Priority = 2
- };
- args.Verbs.Add(verb);
- }
+ if (!TryComp(args.Hands.ActiveHandEntity, out var targetStorage))
+ return;
- private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args)
+ AlternativeVerb verb = new()
{
- if (!component.Active)
- return;
+ Act = () =>
+ {
+ StartInsertDoAfter(args.User, uid, args.Hands.ActiveHandEntity.Value, component);
+ },
+ Text = Loc.GetString("action-name-insert-other", ("target", Identity.Entity(args.Target, EntityManager))),
+ Priority = 2
+ };
+ args.Verbs.Add(verb);
+ }
- RemComp(uid);
- component.Active = false;
- }
+ private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args)
+ {
+ if (!component.Active)
+ return;
- private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, GettingPickedUpAttemptEvent args)
- {
- if (args.User == args.Item)
- return;
+ RemComp(uid);
+ component.Active = false;
+ }
+
+ private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component,
+ GettingPickedUpAttemptEvent args)
+ {
+ if (args.User == args.Item)
+ return;
- Transform(uid).AttachToGridOrMap();
+ Transform(uid).AttachToGridOrMap();
+ args.Cancel();
+ }
+
+ private void OnDropAttempt(EntityUid uid, PseudoItemComponent component, DropAttemptEvent args)
+ {
+ if (component.Active)
args.Cancel();
- }
+ }
- private void OnDropAttempt(EntityUid uid, PseudoItemComponent component, DropAttemptEvent args)
- {
- if (component.Active)
- args.Cancel();
- }
- private void OnDoAfter(EntityUid uid, PseudoItemComponent component, DoAfterEvent args)
- {
- if (args.Handled || args.Cancelled || args.Args.Used == null)
- return;
+ private void OnDoAfter(EntityUid uid, PseudoItemComponent component, DoAfterEvent args)
+ {
+ if (args.Handled || args.Cancelled || args.Args.Used == null)
+ return;
- args.Handled = TryInsert(args.Args.Used.Value, uid, component);
- }
+ args.Handled = TryInsert(args.Args.Used.Value, uid, component);
+ }
- public bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component, StorageComponent? storage = null)
- {
- if (!Resolve(storageUid, ref storage))
- return false;
+ public bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component,
+ StorageComponent? storage = null)
+ {
+ if (!Resolve(storageUid, ref storage))
+ return false;
- if (component.Size > storage.StorageCapacityMax - storage.StorageUsed)
- return false;
+ if (component.Size > storage.StorageCapacityMax - storage.StorageUsed)
+ return false;
- var item = EnsureComp(toInsert);
- _tagSystem.TryAddTag(toInsert, PreventTag);
+ var item = EnsureComp(toInsert);
+ _tagSystem.TryAddTag(toInsert, PreventTag);
_itemSystem.SetSize(toInsert, component.Size, item);
- if (!_storageSystem.Insert(storageUid, toInsert, out _, storageComp: storage))
- {
- component.Active = false;
- RemComp(toInsert);
- return false;
- }
+ if (!_storageSystem.Insert(storageUid, toInsert, out _, null, storage))
+ {
+ component.Active = false;
+ RemComp(toInsert);
+ return false;
+ }
- component.Active = true;
- Transform(storageUid).AttachToGridOrMap();
- return true;
+ component.Active = true;
+ return true;
+ }
- }
- private void StartInsertDoAfter(EntityUid inserter, EntityUid toInsert, EntityUid storageEntity, PseudoItemComponent? pseudoItem = null)
+ private void StartInsertDoAfter(EntityUid inserter, EntityUid toInsert, EntityUid storageEntity,
+ PseudoItemComponent? pseudoItem = null)
+ {
+ if (!Resolve(toInsert, ref pseudoItem))
+ return;
+
+ var ev = new PseudoItemInsertDoAfterEvent();
+ var args = new DoAfterArgs(EntityManager, inserter, 5f, ev, toInsert, toInsert, storageEntity)
{
- if (!Resolve(toInsert, ref pseudoItem))
- return;
+ BreakOnTargetMove = true,
+ BreakOnUserMove = true,
+ NeedHand = true
+ };
- _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, inserter, 5f, new PseudoDoAfterEvent(), toInsert, target: toInsert, used: storageEntity)
- {
- BreakOnTargetMove = true,
- BreakOnUserMove = true,
- NeedHand = true
- });
- }
+ _doAfter.TryStartDoAfter(args);
+ }
+
+ private void OnInsertAttempt(EntityUid uid, PseudoItemComponent component,
+ ContainerGettingInsertedAttemptEvent args)
+ {
+ if (!component.Active)
+ return;
+ // This hopefully shouldn't trigger, but this is a failsafe just in case so we dont bluespace them cats
+ args.Cancel();
}
}
diff --git a/Content.Server/_NF/SizeAttribute/SizeAttributeSystem.cs b/Content.Server/_NF/SizeAttribute/SizeAttributeSystem.cs
index 34a865d8b78..1dbd2da4c08 100644
--- a/Content.Server/_NF/SizeAttribute/SizeAttributeSystem.cs
+++ b/Content.Server/_NF/SizeAttribute/SizeAttributeSystem.cs
@@ -3,7 +3,7 @@
using Robust.Shared.Physics;
using Robust.Shared.Physics.Collision.Shapes;
using Robust.Shared.Physics.Systems;
-using Content.Server.Item.PseudoItem;
+using Content.Shared.Item.PseudoItem;
namespace Content.Server.SizeAttribute
{
diff --git a/Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs b/Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs
new file mode 100644
index 00000000000..4505e365fdf
--- /dev/null
+++ b/Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs
@@ -0,0 +1,15 @@
+using Content.Shared._NF.Cloning;
+
+namespace Content.Shared.Item.PseudoItem;
+///
+/// For entities that behave like an item under certain conditions,
+/// but not under most conditions.
+///
+[RegisterComponent]
+public sealed partial class PseudoItemComponent : Component, ITransferredByCloning
+{
+ [DataField("size")]
+ public int Size = 120;
+
+ public bool Active = false;
+}
diff --git a/Content.Shared/Nyanotrasen/Item/PseudoItemInsertDoAfterEvent.cs b/Content.Shared/Nyanotrasen/Item/PseudoItemInsertDoAfterEvent.cs
new file mode 100644
index 00000000000..4b34118f377
--- /dev/null
+++ b/Content.Shared/Nyanotrasen/Item/PseudoItemInsertDoAfterEvent.cs
@@ -0,0 +1,10 @@
+using Robust.Shared.Serialization;
+using Content.Shared.DoAfter;
+
+namespace Content.Shared.Item.PseudoItem;
+
+
+[Serializable, NetSerializable]
+public sealed partial class PseudoItemInsertDoAfterEvent : SimpleDoAfterEvent
+{
+}
diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
index 5faec99fd5b..efd77b1e91a 100644
--- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
@@ -10,6 +10,7 @@
using Content.Shared.Implants.Components;
using Content.Shared.Interaction;
using Content.Shared.Item;
+using Content.Shared.Item.PseudoItem;
using Content.Shared.Lock;
using Content.Shared.Placeable;
using Content.Shared.Popups;
@@ -439,6 +440,9 @@ public void TransferEntities(EntityUid source, EntityUid target, EntityUid? user
foreach (var entity in entities.ToArray())
{
+ if (HasComp(entity)) // Nyanotrasen - They dont transfer properly
+ continue;
+
Insert(target, entity, out _, user: user, targetComp, playSound: false);
}
diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
index 6f764bb9f4e..d0adcccf2ee 100644
--- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
+++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
@@ -10,6 +10,7 @@
using Content.Shared.Gravity;
using Content.Shared.Hands;
using Content.Shared.Hands.Components;
+using Content.Shared.Item; // Delta-V: Felinids in duffelbags can't shoot.
using Content.Shared.Popups;
using Content.Shared.Projectiles;
using Content.Shared.Tag;
@@ -128,7 +129,8 @@ private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args)
if (user == null ||
!_combatMode.IsInCombatMode(user) ||
- !TryGetGun(user.Value, out var ent, out var gun))
+ !TryGetGun(user.Value, out var ent, out var gun) ||
+ HasComp(user)) // Delta-V: Felinids in duffelbags can't shoot.
{
return;
}
diff --git a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl
index ba803dc651c..9d71e720e80 100644
--- a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl
+++ b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl
@@ -1,4 +1,10 @@
chat-speech-verb-vulpkanin-1 = rawrs
chat-speech-verb-vulpkanin-2 = barks
chat-speech-verb-vulpkanin-3 = rurs
-chat-speech-verb-vulpkanin-4 = yeeps
+chat-speech-verb-vulpkanin-4 = yaps
+chat-speech-verb-vulpkanin-5 = yeeps
+
+chat-speech-verb-felinid-1 = mraows
+chat-speech-verb-felinid-2 = mews
+chat-speech-verb-felinid-3 = meows
+chat-speech-verb-felinid-4 = purrs out
diff --git a/Resources/Locale/en-US/_Nyano/felinid.ftl b/Resources/Locale/en-US/_Nyano/abilities/felinid.ftl
similarity index 63%
rename from Resources/Locale/en-US/_Nyano/felinid.ftl
rename to Resources/Locale/en-US/_Nyano/abilities/felinid.ftl
index 62d4469e687..92181194167 100644
--- a/Resources/Locale/en-US/_Nyano/felinid.ftl
+++ b/Resources/Locale/en-US/_Nyano/abilities/felinid.ftl
@@ -1,5 +1,6 @@
-hairball-action = Cough Up Hairball
-hairball-action-desc = Purge some of your chemstream, and gain a cool hairball to throw at people.
+action-name-hairball = Cough Up Hairball
+action-description-hairball = Purge some of your chemstream, and gain a cool hairball to throw at people.
+
hairball-mask = Take off your {$mask} first.
hairball-cough = {CAPITALIZE(THE($name))} starts coughing up a hairball!
diff --git a/Resources/Locale/en-US/_Nyano/oni.ftl b/Resources/Locale/en-US/_Nyano/abilities/oni.ftl
similarity index 100%
rename from Resources/Locale/en-US/_Nyano/oni.ftl
rename to Resources/Locale/en-US/_Nyano/abilities/oni.ftl
diff --git a/Resources/Locale/en-US/deltav/markings/felinid.ftl b/Resources/Locale/en-US/deltav/markings/felinid.ftl
new file mode 100644
index 00000000000..89f4d43bd4e
--- /dev/null
+++ b/Resources/Locale/en-US/deltav/markings/felinid.ftl
@@ -0,0 +1,5 @@
+marking-FelinidFluffyTail-Felinid_fluffy_tail_full = Fluffy Tail
+marking-FelinidFluffyTailRings-Felinid_fluffy_tail_full = Fluffy tail
+marking-FelinidFluffyTailRings-felinid_fluffy_tail_rings = Fluffy Tail Rings
+marking-FelinidFluffyTail = Fluffy Tail
+marking-FelinidFluffyTailRings = Fluffy Tail with rings
diff --git a/Resources/Locale/en-US/markings/felinid.ftl b/Resources/Locale/en-US/markings/felinid.ftl
new file mode 100644
index 00000000000..d2e7abae4f7
--- /dev/null
+++ b/Resources/Locale/en-US/markings/felinid.ftl
@@ -0,0 +1,56 @@
+marking-FelinidEarsBasic = Basic Ears
+marking-FelinidEarsBasic-basic_outer = Outer ear
+marking-FelinidEarsBasic-basic_inner = Inner ear
+
+marking-FelinidEarsCurled = Curled Ears
+marking-FelinidEarsCurled-curled_outer = Outer ear
+marking-FelinidEarsCurled-curled_inner = Inner ear
+
+marking-FelinidEarsDroopy = Droopy Ears
+marking-FelinidEarsDroopy-droopy_outer = Outer ear
+marking-FelinidEarsDroopy-droopy_inner = Inner ear
+
+marking-FelinidEarsFuzzy = Fuzzy Ears
+marking-FelinidEarsFuzzy-basic_outer = Outer ear
+marking-FelinidEarsFuzzy-fuzzy_inner = Ear fuzz
+
+marking-FelinidEarsStubby = Stubby Ears
+marking-FelinidEarsStubby-stubby_outer = Outer ear
+marking-FelinidEarsStubby-stubby_inner = Inner ear
+
+marking-FelinidEarsTall = Tall Ears
+marking-FelinidEarsTall-tall_outer = Outer ear
+marking-FelinidEarsTall-tall_inner = Inner ear
+marking-FelinidEarsTall-tall_fuzz = Ear fuzz
+
+marking-FelinidEarsTorn = Torn Ears
+marking-FelinidEarsTorn-torn_outer = Outer ear
+marking-FelinidEarsTorn-torn_inner = Inner ear
+
+marking-FelinidEarsWide = Wide Ears
+marking-FelinidEarsWide-wide_outer = Outer ear
+marking-FelinidEarsWide-wide_inner = Inner ear
+
+marking-FelinidTailBasic = Basic Tail
+marking-FelinidTailBasic-basic_tail_tip = Tail tip
+marking-FelinidTailBasic-basic_tail_stripes_even = Tail stripes, even
+marking-FelinidTailBasic-basic_tail_stripes_odd = Tail stripes, odd
+
+marking-FelinidTailBasicWithBow = Basic Tail with Bow
+marking-FelinidTailBasicWithBow-basic_tail_tip = Tail tip
+marking-FelinidTailBasicWithBow-basic_tail_stripes_even = Tail stripes, even
+marking-FelinidTailBasicWithBow-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBow-basic_bow = Bow
+
+marking-FelinidTailBasicWithBell = Basic Tail with Bell
+marking-FelinidTailBasicWithBell-basic_tail_tip = Tail tip
+marking-FelinidTailBasicWithBell-basic_tail_stripes_even = Tail stripes, even
+marking-FelinidTailBasicWithBell-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBell-basic_bell = Bell
+
+marking-FelinidTailBasicWithBowAndBell = Basic Tail with Bow & Bell
+marking-FelinidTailBasicWithBowAndBell-basic_tail_tip = Tail tip
+marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_even = Tail stripes, even
+marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBowAndBell-basic_bow = Bow
+marking-FelinidTailBasicWithBowAndBell-basic_bell = Bell
diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml
new file mode 100644
index 00000000000..1d386dd9363
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/felinid.yml
@@ -0,0 +1,20 @@
+- type: marking
+ id: FelinidFluffyTailRings
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Felinid]
+ sprites:
+ - sprite: DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi
+ state: Felinid_fluffy_tail_full
+ - sprite: DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi
+ state: felinid_fluffy_tail_rings
+
+- type: marking
+ id: FelinidFluffyTail
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Felinid]
+ sprites:
+ - sprite: DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi
+ state: Felinid_fluffy_tail_full
+
diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml
index 5b807620c55..ab0df74bdc0 100644
--- a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml
@@ -7,6 +7,16 @@
collection: VulpkaninScreams
Laugh:
collection: MaleLaugh
+ Sneeze:
+ collection: MaleSneezes
+ Cough:
+ collection: MaleCoughs
+ Crying:
+ collection: MaleCry
+ Whistle:
+ collection: Whistles
+ Sigh:
+ collection: MaleSigh
Growl:
collection: VulpkaninGrowls
Howl:
@@ -23,6 +33,16 @@
collection: VulpkaninScreams
Laugh:
collection: FemaleLaugh
+ Sneeze:
+ collection: FemaleSneezes
+ Cough:
+ collection: FemaleCoughs
+ Crying:
+ collection: FemaleCry
+ Whistle:
+ collection: Whistles
+ Sigh:
+ collection: FemaleSigh
Growl:
collection: VulpkaninGrowls
Howl:
diff --git a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml
index 246b9883798..20c04e130cb 100644
--- a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml
+++ b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml
@@ -5,3 +5,12 @@
- chat-speech-verb-vulpkanin-2
- chat-speech-verb-vulpkanin-3
- chat-speech-verb-vulpkanin-4
+ - chat-speech-verb-vulpkanin-5
+
+- type: speechVerb
+ id: Felinid
+ speechVerbStrings:
+ - chat-speech-verb-felinid-1
+ - chat-speech-verb-felinid-2
+ - chat-speech-verb-felinid-3
+ - chat-speech-verb-felinid-4
diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml
index 2fff0480689..b5a5440ec79 100644
--- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml
+++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml
@@ -2,7 +2,7 @@
id: TattooHiveChest
bodyPart: Chest
markingCategory: Chest
- speciesRestriction: [Human, Oni, Felinid, Dwarf, Oni]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -16,7 +16,7 @@
id: TattooNightlingChest
bodyPart: Chest
markingCategory: Chest
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -30,7 +30,7 @@
id: TattooSilverburghLeftLeg
bodyPart: LLeg
markingCategory: Legs
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -44,7 +44,7 @@
id: TattooSilverburghRightLeg
bodyPart: RLeg
markingCategory: Legs
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -58,7 +58,7 @@
id: TattooCampbellLeftArm
bodyPart: LArm
markingCategory: Arms
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -72,7 +72,7 @@
id: TattooCampbellRightArm
bodyPart: RArm
markingCategory: Arms
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -86,7 +86,7 @@
id: TattooCampbellLeftLeg
bodyPart: LLeg
markingCategory: Legs
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -100,7 +100,7 @@
id: TattooCampbellRightLeg
bodyPart: RLeg
markingCategory: Legs
- speciesRestriction: [Human, Dwarf, Oni, Felinid]
+ speciesRestriction: [Human, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -114,7 +114,7 @@
id: TattooEyeRight
bodyPart: Eyes
markingCategory: Head
- speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Oni, Felinid, Reptilian]
+ speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni]
coloring:
default:
type:
@@ -128,7 +128,7 @@
id: TattooEyeLeft
bodyPart: Eyes
markingCategory: Head
- speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Oni, Felinid, Reptilian]
+ speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Felinid, Oni]
coloring:
default:
type:
diff --git a/Resources/Prototypes/_NF/Voice/speech_emote_sounds.yml b/Resources/Prototypes/_NF/Voice/speech_emote_sounds.yml
index 29dca329596..4d15e37a25d 100644
--- a/Resources/Prototypes/_NF/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/_NF/Voice/speech_emote_sounds.yml
@@ -17,6 +17,8 @@
collection: FelinidGrowls
Purr:
collection: FelinidPurrs
+ Sigh:
+ collection: MaleSigh
- type: emoteSounds
id: FemaleFelinid
@@ -37,6 +39,8 @@
collection: FelinidGrowls
Purr:
collection: FelinidPurrs
+ Sigh:
+ collection: FemaleSigh
- type: emoteSounds
id: MaleMoth
diff --git a/Resources/Prototypes/_Nyano/Actions/types.yml b/Resources/Prototypes/_Nyano/Actions/types.yml
index 12f65c4d284..6668bc07238 100644
--- a/Resources/Prototypes/_Nyano/Actions/types.yml
+++ b/Resources/Prototypes/_Nyano/Actions/types.yml
@@ -12,8 +12,8 @@
- type: entity
id: ActionHairball
- name: hairball-action
- description: hairball-action-desc
+ name: action-name-hairball
+ description: action-description-hairball
noSpawn: true
components:
- type: InstantAction
diff --git a/Resources/Prototypes/_Nyano/Entities/Mobs/Player/felinid.yml b/Resources/Prototypes/_Nyano/Entities/Mobs/Player/felinid.yml
index 6147037ced1..c2f033becc4 100644
--- a/Resources/Prototypes/_Nyano/Entities/Mobs/Player/felinid.yml
+++ b/Resources/Prototypes/_Nyano/Entities/Mobs/Player/felinid.yml
@@ -3,3 +3,6 @@
name: Urist McFelinid
parent: [MobFelinidBase, BaseMob]
id: MobFelinid
+ components:
+ - type: Speech
+ speechVerb: Felinid
diff --git a/Resources/Prototypes/_Nyano/Voice/speech_emotes.yml b/Resources/Prototypes/_Nyano/Voice/speech_emotes.yml
index 21bb428029d..32b2a9716a0 100644
--- a/Resources/Prototypes/_Nyano/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/_Nyano/Voice/speech_emotes.yml
@@ -4,65 +4,70 @@
category: Vocal
chatMessages: [hisses.]
chatTriggers:
- - hiss
- - hisses
+ - hiss.
- hisses.
- hisses!
- - hissing
- - hissed
+ - hissing.
+ - hissed.
- type: emote
id: Meow
category: Vocal
chatMessages: [meows.]
chatTriggers:
- - meow
- - meows
+ - meow.
+ - meow!
- meows.
+ - meows~
- meows!
- - meowing
- - meowed
- - miau
- - miaus
+ - meowing.
+ - meowed.
+ - miau.
- miaus.
- miaus!
- - nya
- - nyas
+ - nya.
- nyas.
- nyas!
+ - mraow.
+ - mraow!
+ - mraow~
+ - mraows.
+ - mraows!
+ - mraows~
- type: emote
id: Mew
category: Vocal
chatMessages: [mews.]
chatTriggers:
- - mew
- - mews
+ - mew.
+ - mew!
+ - mew~
- mews.
- mews!
- - mewing
- - mewed
+ - mews~
+ - mewing.
+ - mewed.
- type: emote
id: Growl
category: Vocal
chatMessages: [growls.]
chatTriggers:
- - growl
- - growls
+ - growl.
- growls.
- growls!
- - growling
- - growled
+ - growling.
+ - growled.
- type: emote
id: Purr
category: Vocal
chatMessages: [purrs.]
chatTriggers:
- - purr
- - purrs
+ - purr.
- purrs.
+ - purrs~
- purrs!
- - purring
- - purred
+ - purring.
+ - purred.
\ No newline at end of file
diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/Felinid_fluffy_tail_full.png b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/Felinid_fluffy_tail_full.png
new file mode 100644
index 00000000000..d699f1035a4
Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/Felinid_fluffy_tail_full.png differ
diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/felinid_fluffy_tail_rings.png b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/felinid_fluffy_tail_rings.png
new file mode 100644
index 00000000000..4e6a6d8dc0d
Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/felinid_fluffy_tail_rings.png differ
diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/meta.json
new file mode 100644
index 00000000000..fad9883e7e8
--- /dev/null
+++ b/Resources/Textures/DeltaV/Mobs/Customization/Felinid/felinid_tails.rsi/meta.json
@@ -0,0 +1,111 @@
+{
+ "version": 1,
+ "copyright": "Made by Adrian16199",
+ "license": "CC-BY-SA-4.0",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "felinid_fluffy_tail_rings",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "Felinid_fluffy_tail_full",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ }
+ ]
+}