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 + ] + ] + } + ] +}