From 09b79b3c22af2a12f0355b7b28a6c499f95d8780 Mon Sep 17 00:00:00 2001 From: Fluffiest Floofers Date: Sun, 11 Feb 2024 20:40:33 +0100 Subject: [PATCH 01/21] Refill the DIY Holy Water kit (#819) replace the bottle with wine cans --- .../Catalog/Fills/Boxes/general.yml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml index 6f227252cb6..ed839a011dc 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml @@ -60,16 +60,16 @@ id: BoxHolyWater description: This box is filled with everything you need to make homemade holy water. Water not included. components: -# - type: StorageFill -# contents: -# - id: MercuryChemistryBottle -# amount: 3 -# - id: DrinkWineBottleFull -# amount: 1 -# - id: SprayBottle -# amount: 1 - - type: Sprite - layers: - - state: box_science - - sprite: Nyanotrasen/Objects/Storage/boxes.rsi - state: holywater + - type: StorageFill + contents: + - id: DrinkWineCan + amount: 2 + - id: SprayBottle + amount: 1 + - id: MercuryChemistryBottle + amount: 2 + - type: Sprite + layers: + - state: box_science + - sprite: Nyanotrasen/Objects/Storage/boxes.rsi + state: holywater From 40c61f84e48d8e6515b8e4178bbcf26e09007768 Mon Sep 17 00:00:00 2001 From: Adrian16199 <144424013+Adrian16199@users.noreply.github.com> Date: Mon, 12 Feb 2024 21:51:35 +0100 Subject: [PATCH 02/21] Felinid bubble speech. (#808) * Felinid bubble speech. THATS RIGHT. I did something. Felinid wise, again. Im a felinid enjoyer, yes. Dont judge me. =w= * Simplification * Update felinid0.png * The finalle --- .../Prototypes/DeltaV/typing_indicator.yml | 4 ++++ .../Entities/Mobs/Species/felinid.yml | 2 ++ .../Textures/Effects/speech.rsi/felinid0.png | Bin 0 -> 899 bytes .../Textures/Effects/speech.rsi/felinid1.png | Bin 0 -> 721 bytes .../Textures/Effects/speech.rsi/felinid2.png | Bin 0 -> 712 bytes .../Textures/Effects/speech.rsi/meta.json | 17 +++++++++++++++++ 6 files changed, 23 insertions(+) create mode 100644 Resources/Prototypes/DeltaV/typing_indicator.yml create mode 100644 Resources/Textures/Effects/speech.rsi/felinid0.png create mode 100644 Resources/Textures/Effects/speech.rsi/felinid1.png create mode 100644 Resources/Textures/Effects/speech.rsi/felinid2.png diff --git a/Resources/Prototypes/DeltaV/typing_indicator.yml b/Resources/Prototypes/DeltaV/typing_indicator.yml new file mode 100644 index 00000000000..c5372b3cc35 --- /dev/null +++ b/Resources/Prototypes/DeltaV/typing_indicator.yml @@ -0,0 +1,4 @@ +- type: typingIndicator + id: felinid + typingState: felinid0 + offset: 0, 0.2 # 0625 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index e2e15dcfa95..7f1b30a1512 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -47,6 +47,8 @@ Blunt: 1 - type: Stamina critThreshold: 85 + - type: TypingIndicator + proto: felinid - type: PseudoItem shape: - 0,0,5,1 diff --git a/Resources/Textures/Effects/speech.rsi/felinid0.png b/Resources/Textures/Effects/speech.rsi/felinid0.png new file mode 100644 index 0000000000000000000000000000000000000000..586d1e6a343b2f9ed7f295291819c9f9905d7dc6 GIT binary patch literal 899 zcmV-}1AP36P)l(9dr-<1J{FO{Ay^ONFincozR8K8i!|56}a;_!ZCmgf#1*0;L`jS@Do}H1} zCA%AsBnjeZq$#jM9-jfJwq*9VZ}7)A&8m0|c{>zw#gQc^-hNRF($$oj5#5w0Pf_Lm zJ5Mh&JXG%98i&TmAb9P8@HTvvg5dKo2)>S>{sGSIs()2-8hsbNRMlep5Z!>&i>j91 zfwN8Mymxe0|B>othcX#>If1r$XupQYVmYhIImdU9T9;pR1-pCDEBB*I-_bc|^xxnq zzyJUM32;bRa{vGf5&!@T5&_cPe*6Fc0lY~>K~#8N?V7(!12Gteds5KNy_5JCh>MGx z|F45?Lig$-xC-JZZcc&<*EcnhnETOdxvwASb8y^|qbv=YZxT50R^W zKHr{XEbR69XsmVwP0R2{#xfXcrG@Bzn>ov(qw|^cus$`>)kNr2b52%I2!o@F+&*#1MdzTpU1FTkH`h@@lAOHafKmY;|fB*y_009U<00Izz00eeU ZUzcsbCj%Xe(HCX<|QwriLU%imTw_P;d}k z{2KfRx(coef}jW@j?R89QsTK*sEFQha~|G%-^0lp@J|&C(`g(Bv*_CKSX7%!&1=n1 z_z4iCow2mxSksBgB>%4W8+@u>M^vx>@BO)2mokn4z82vT!?ImrnTDxV*HXMG+-2m` zOTzoYVOs_izEHYe<44808ow&Glko}gtDai!2kSrB$lIpyfN;nxl#K6r)RzP^#o2_^ z9@)J(#EB6_L#M;4tVY4lC>N?i->LB~3roYysd z8%{T%`_4++=`X24wm+MN=VNF~LFW|&7HV02pL28z$u;>!m$0)7{c^u!@e>~qXc(-W zx)}ff010qNS#tmY3labT3lag+-G2N4009X}L_t(oN9~g_3&JoEg&QgAP;htj7l?y8 zxcPq_bQ9cL7eR0moQty{6rsM;JE3}%5Hw2wM9D-C;V zMg&8coXMC5<`c?TUyu&S5%yBd+uod6NC?b|!eop{U>aG5qox`t=@JDd;M?;}PY9GA zp2OAqH#9KXBF1bO%R4AG02;KM^4 zBuyQgYT%P@)%Wp>-qceGC;=s)1eAahPy$Ne4+z`=g0EB#V{wto00000NkvXXu0mjf DP!vS` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/speech.rsi/felinid2.png b/Resources/Textures/Effects/speech.rsi/felinid2.png new file mode 100644 index 0000000000000000000000000000000000000000..abb5f04373eeaeb41d4e7946340372195b52cfb1 GIT binary patch literal 712 zcmV;(0yq7MP)zcsbCj%Xe(HCX<|QwriLU%imTw_P;d}k z{2KfRx(coef}jW@j?R89QsTK*sEFQha~|G%-^0lp@J|&C(`g(Bv*_CKSX7%!&1=n1 z_z4iCow2mxSksBgB>%4W8+@u>M^vx>@BO)2mokn4z82vT!?ImrnTDxV*HXMG+-2m` zOTzoYVOs_izEHYe<44808ow&Glko}gtDai!2kSrB$lIpyfN;nxl#K6r)RzP^#o2_^ z9@)J(#EB6_L#M;4tVY4lC>N?i->LB~3roYysd z8%{T%`_4++=`X24wm+MN=VNF~LFW|&7HV02pL28z$u;>!m$0)7{c^u!@e>~qXc(-W zx)}ff010qNS#tmY3labT3lag+-G2N40096=L_t(oN9|KF3IZ_@yvTtTg1x0L5DT@i z^S>6_3HGOrU@KUQA2>LLIEz^c3DF!R2(k+yo9t$0ZZ0W`SL`uXCJ#+p6pmkdT9-TK zgwk3MkZ%GAYt%=r(IXC&rl-L?1WB!ws@!wfr+SuP2OdE0g1iA);SSnIoy4->WMWuA z36dKTb6`E=9Q%E&uUOxcF&iKju!sbnMD|6uu>kJ?zM5V}_Fw_t#j}5br6Tz=Q~*C< zObtn8-vjGDP&zm39p+^!Ye)dc1qr?Nw;L=5ZctATW1NcE#W@9l$q^F7qRzPle8Tna u$1g+(r#K)Ehy&t)I3Ny)1LDB{I`9Oll1NI}FYCwv0000 Date: Mon, 12 Feb 2024 20:51:56 +0000 Subject: [PATCH 03/21] Automatic Changelog Update (#808) --- Resources/Changelog/DeltaVChangelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 60643480570..c5a3db7366d 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1572,3 +1572,9 @@ Entries: message: Fixed glimmer mite being extremely loud for some. id: 236 time: '2024-02-10T23:21:56.0000000+00:00' +- author: Adrian16199 + changes: + - type: Add + message: Added a speech bubble to felinids. Mraow! + id: 237 + time: '2024-02-12T20:51:35.0000000+00:00' From d8df4327ec6efaa9609493f4d88d909d9fd02de9 Mon Sep 17 00:00:00 2001 From: Debug <49997488+DebugOk@users.noreply.github.com> Date: Mon, 12 Feb 2024 21:52:49 +0100 Subject: [PATCH 04/21] Fix PseudoItems (#821) * Fix PseudoItem * Add pain * Cancel attack events --- .../Item/PseudoItem/PseudoItemSystem.cs | 7 + .../Item/PseudoItem/PseudoItemSystem.cs | 206 ++++-------------- Content.Shared/Item/ItemComponent.cs | 5 +- .../PseudoItemComponent.cs | 6 +- .../SharedPseudoItemSystem.Checks.cs | 165 ++++++++++++++ .../Item/PseudoItem/SharedPseudoItemSystem.cs | 165 ++++++++++++++ .../EntitySystems/SharedStorageSystem.cs | 3 +- .../Entities/Mobs/Species/felinid.yml | 5 +- 8 files changed, 393 insertions(+), 169 deletions(-) create mode 100644 Content.Client/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs rename Content.Shared/Nyanotrasen/Item/{Components => PseudoItem}/PseudoItemComponent.cs (84%) create mode 100644 Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.Checks.cs create mode 100644 Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.cs diff --git a/Content.Client/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs b/Content.Client/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs new file mode 100644 index 00000000000..f9427362a66 --- /dev/null +++ b/Content.Client/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared.Nyanotrasen.Item.PseudoItem; + +namespace Content.Client.Nyanotrasen.Item.PseudoItem; + +public sealed class PseudoItemSystem : SharedPseudoItemSystem +{ +} diff --git a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs index 03c494332cf..76cfe7d904b 100644 --- a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs +++ b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs @@ -1,174 +1,56 @@ -using Content.Server.DoAfter; +using Content.Server.DoAfter; +using Content.Server.Item; using Content.Server.Storage.EntitySystems; using Content.Shared.DoAfter; -using Content.Shared.Hands; using Content.Shared.IdentityManagement; using Content.Shared.Item; using Content.Shared.Item.PseudoItem; +using Content.Shared.Nyanotrasen.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.Nyanotrasen.Item.PseudoItem; -public sealed class PseudoItemSystem : EntitySystem +public sealed class PseudoItemSystem : SharedPseudoItemSystem { - // [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); - // SubscribeLocalEvent(OnInsertAttempt); - // } - // - // private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) - // { - // if (!args.CanInteract || !args.CanAccess) - // return; - // - // if (component.Active) - // return; - // - // if (!TryComp(args.Target, out var targetStorage)) - // return; - // - // if (component.Size > targetStorage.StorageCapacityMax - targetStorage.StorageUsed) - // return; - // - // if (Transform(args.Target).ParentUid == uid) - // return; - // - // InnateVerb verb = new() - // { - // Act = () => - // { - // TryInsert(args.Target, uid, component, targetStorage); - // }, - // Text = Loc.GetString("action-name-insert-self"), - // Priority = 2 - // }; - // args.Verbs.Add(verb); - // } - // - // private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) - // { - // if (!args.CanInteract || !args.CanAccess) - // return; - // - // if (args.User == args.Target) - // return; - // - // if (args.Hands == null) - // return; - // - // if (!TryComp(args.Hands.ActiveHandEntity, out var targetStorage)) - // 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); - // } - // - // private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args) - // { - // if (!component.Active) - // return; - // - // RemComp(uid); - // component.Active = false; - // } - // - // private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, - // GettingPickedUpAttemptEvent args) - // { - // if (args.User == args.Item) - // return; - // - // Transform(uid).AttachToGridOrMap(); - // 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; - // - // 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; - // - // if (component.Size > storage.StorageCapacityMax - storage.StorageUsed) - // return false; - // - // var item = EnsureComp(toInsert); - // _tagSystem.TryAddTag(toInsert, PreventTag); - // _itemSystem.SetSize(toInsert, component.Size, item); - // - // if (!_storageSystem.Insert(storageUid, toInsert, out _, null, storage)) - // { - // component.Active = false; - // RemComp(toInsert); - // return false; - // } - // - // component.Active = true; - // return true; - // } - // - // 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) - // { - // 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(); - // } + [Dependency] private readonly StorageSystem _storage = default!; + [Dependency] private readonly ItemSystem _item = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(AddInsertAltVerb); + } + + private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + if (component.Active) + return; + + if (!TryComp(args.Using, out var targetStorage)) + return; + + if (!CheckItemFits((uid, component), (args.Using.Value, targetStorage))) + return; + + if (args.Hands?.ActiveHandEntity == 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); + } } diff --git a/Content.Shared/Item/ItemComponent.cs b/Content.Shared/Item/ItemComponent.cs index 9fadfa0783c..0f599ebdbed 100644 --- a/Content.Shared/Item/ItemComponent.cs +++ b/Content.Shared/Item/ItemComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Hands.Components; +using Content.Shared.Nyanotrasen.Item.PseudoItem; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -12,11 +13,11 @@ namespace Content.Shared.Item; /// [RegisterComponent] [NetworkedComponent] -[Access(typeof(SharedItemSystem)), AutoGenerateComponentState(true)] +[Access(typeof(SharedItemSystem), typeof(SharedPseudoItemSystem)), AutoGenerateComponentState(true)] // DeltaV - Gave PseudoItem access public sealed partial class ItemComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - [Access(typeof(SharedItemSystem))] + [Access(typeof(SharedItemSystem), typeof(SharedPseudoItemSystem))] // DeltaV - Gave PseudoItem access public ProtoId Size = "Small"; [Access(typeof(SharedItemSystem))] diff --git a/Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs b/Content.Shared/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs similarity index 84% rename from Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs rename to Content.Shared/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs index cad826aa6b9..d3774439d36 100644 --- a/Content.Shared/Nyanotrasen/Item/Components/PseudoItemComponent.cs +++ b/Content.Shared/Nyanotrasen/Item/PseudoItem/PseudoItemComponent.cs @@ -1,8 +1,7 @@ - using Content.Shared.Item; using Robust.Shared.Prototypes; -namespace Content.Shared.Nyanotrasen.Item.Components; +namespace Content.Shared.Nyanotrasen.Item.PseudoItem; /// /// For entities that behave like an item under certain conditions, @@ -21,5 +20,8 @@ public sealed partial class PseudoItemComponent : Component [DataField, AutoNetworkedField] public List? Shape; + [DataField, AutoNetworkedField] + public Vector2i StoredOffset; + public bool Active = false; } diff --git a/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.Checks.cs b/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.Checks.cs new file mode 100644 index 00000000000..7000c654048 --- /dev/null +++ b/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.Checks.cs @@ -0,0 +1,165 @@ +using Content.Shared.Item; +using Content.Shared.Storage; + +namespace Content.Shared.Nyanotrasen.Item.PseudoItem; + +/// +/// Almost all of this is code taken from other systems, but adapted to use PseudoItem. +/// I couldn't use the original functions because the resolve would fuck shit up, even if I passed a constructed itemcomp +/// +/// This is horrible, and I hate it. But such is life +/// +public partial class SharedPseudoItemSystem +{ + protected bool CheckItemFits(Entity itemEnt, Entity storageEnt) + { + if (!Resolve(itemEnt, ref itemEnt.Comp) || !Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + if (Transform(itemEnt).Anchored) + return false; + + if (storageEnt.Comp.Whitelist?.IsValid(itemEnt, EntityManager) == false) + return false; + + if (storageEnt.Comp.Blacklist?.IsValid(itemEnt, EntityManager) == true) + return false; + + var maxSize = _storage.GetMaxItemSize(storageEnt); + if (_item.GetSizePrototype(itemEnt.Comp.Size) > maxSize) + return false; + + // The following is shitfucked together straight from TryGetAvailableGridSpace, but eh, it works + + var itemComp = new ItemComponent + { Size = itemEnt.Comp.Size, Shape = itemEnt.Comp.Shape, StoredOffset = itemEnt.Comp.StoredOffset }; + + var storageBounding = storageEnt.Comp.Grid.GetBoundingBox(); + + Angle startAngle; + if (storageEnt.Comp.DefaultStorageOrientation == null) + startAngle = Angle.FromDegrees(-itemComp.StoredRotation); // PseudoItem doesn't support this + else + { + if (storageBounding.Width < storageBounding.Height) + { + startAngle = storageEnt.Comp.DefaultStorageOrientation == StorageDefaultOrientation.Horizontal + ? Angle.Zero + : Angle.FromDegrees(90); + } + else + { + startAngle = storageEnt.Comp.DefaultStorageOrientation == StorageDefaultOrientation.Vertical + ? Angle.Zero + : Angle.FromDegrees(90); + } + } + + for (var y = storageBounding.Bottom; y <= storageBounding.Top; y++) + { + for (var x = storageBounding.Left; x <= storageBounding.Right; x++) + { + for (var angle = startAngle; angle <= Angle.FromDegrees(360 - startAngle); angle += Math.PI / 2f) + { + var location = new ItemStorageLocation(angle, (x, y)); + if (ItemFitsInGridLocation(itemEnt, storageEnt, location.Position, location.Rotation)) + return true; + } + } + } + + return false; + } + + private bool ItemFitsInGridLocation( + Entity itemEnt, + Entity storageEnt, + Vector2i position, + Angle rotation) + { + if (!Resolve(itemEnt, ref itemEnt.Comp) || !Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + var gridBounds = storageEnt.Comp.Grid.GetBoundingBox(); + if (!gridBounds.Contains(position)) + return false; + + var itemShape = GetAdjustedItemShape(itemEnt, rotation, position); + + foreach (var box in itemShape) + { + for (var offsetY = box.Bottom; offsetY <= box.Top; offsetY++) + { + for (var offsetX = box.Left; offsetX <= box.Right; offsetX++) + { + var pos = (offsetX, offsetY); + + if (!IsGridSpaceEmpty(itemEnt, storageEnt, pos, itemShape)) + return false; + } + } + } + + return true; + } + + private IReadOnlyList GetAdjustedItemShape(Entity entity, Angle rotation, + Vector2i position) + { + if (!Resolve(entity, ref entity.Comp)) + return new Box2i[] { }; + + var shapes = entity.Comp.Shape ?? _item.GetSizePrototype(entity.Comp.Size).DefaultShape; + var boundingShape = shapes.GetBoundingBox(); + var boundingCenter = ((Box2) boundingShape).Center; + var matty = Matrix3.CreateTransform(boundingCenter, rotation); + var drift = boundingShape.BottomLeft - matty.TransformBox(boundingShape).BottomLeft; + + var adjustedShapes = new List(); + foreach (var shape in shapes) + { + var transformed = matty.TransformBox(shape).Translated(drift); + var floored = new Box2i(transformed.BottomLeft.Floored(), transformed.TopRight.Floored()); + var translated = floored.Translated(position); + + adjustedShapes.Add(translated); + } + + return adjustedShapes; + } + + private bool IsGridSpaceEmpty(Entity itemEnt, Entity storageEnt, + Vector2i location, IReadOnlyList shape) + { + if (!Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + var validGrid = false; + foreach (var grid in storageEnt.Comp.Grid) + { + if (grid.Contains(location)) + { + validGrid = true; + break; + } + } + + if (!validGrid) + return false; + + foreach (var (ent, storedItem) in storageEnt.Comp.StoredItems) + { + if (ent == itemEnt.Owner) + continue; + + var adjustedShape = shape; + foreach (var box in adjustedShape) + { + if (box.Contains(location)) + return false; + } + } + + return true; + } +} diff --git a/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.cs b/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.cs new file mode 100644 index 00000000000..4b7910746f1 --- /dev/null +++ b/Content.Shared/Nyanotrasen/Item/PseudoItem/SharedPseudoItemSystem.cs @@ -0,0 +1,165 @@ +using Content.Shared.DoAfter; +using Content.Shared.Hands; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction.Events; +using Content.Shared.Item; +using Content.Shared.Item.PseudoItem; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Content.Shared.Tag; +using Content.Shared.Verbs; +using Robust.Shared.Containers; + +namespace Content.Shared.Nyanotrasen.Item.PseudoItem; + +public abstract partial class SharedPseudoItemSystem : EntitySystem +{ + [Dependency] private readonly SharedStorageSystem _storage = default!; + [Dependency] private readonly SharedItemSystem _item = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly TagSystem _tag = default!; + + [ValidatePrototypeId] + private const string PreventTag = "PreventLabel"; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(AddInsertVerb); + SubscribeLocalEvent(OnEntRemoved); + SubscribeLocalEvent(OnGettingPickedUpAttempt); + SubscribeLocalEvent(OnDropAttempt); + SubscribeLocalEvent(OnInsertAttempt); + SubscribeLocalEvent(OnInteractAttempt); + SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent(OnAttackAttempt); + } + + private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + if (component.Active) + return; + + if (!TryComp(args.Target, out var targetStorage)) + return; + + if (!CheckItemFits((uid, component), (args.Target, targetStorage))) + return; + + if (Transform(args.Target).ParentUid == uid) + return; + + InnateVerb verb = new() + { + Act = () => + { + TryInsert(args.Target, uid, component, targetStorage); + }, + Text = Loc.GetString("action-name-insert-self"), + Priority = 2 + }; + args.Verbs.Add(verb); + } + + private bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component, + StorageComponent? storage = null) + { + if (!Resolve(storageUid, ref storage)) + return false; + + if (!CheckItemFits((toInsert, component), (storageUid, storage))) + return false; + + var itemComp = new ItemComponent + { Size = component.Size, Shape = component.Shape, StoredOffset = component.StoredOffset }; + AddComp(toInsert, itemComp); + _item.VisualsChanged(toInsert); + + _tag.TryAddTag(toInsert, PreventTag); + + if (!_storage.Insert(storageUid, toInsert, out _, null, storage)) + { + component.Active = false; + RemComp(toInsert); + return false; + } + + component.Active = true; + return true; + } + + private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args) + { + if (!component.Active) + return; + + RemComp(uid); + component.Active = false; + } + + private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, + GettingPickedUpAttemptEvent args) + { + if (args.User == args.Item) + return; + + Transform(uid).AttachToGridOrMap(); + args.Cancel(); + } + + private void OnDropAttempt(EntityUid uid, PseudoItemComponent component, DropAttemptEvent args) + { + if (component.Active) + args.Cancel(); + } + + 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(); + } + + // Prevents moving within the bag :) + private void OnInteractAttempt(EntityUid uid, PseudoItemComponent component, InteractionAttemptEvent args) + { + if (args.Uid == args.Target && component.Active) + args.Cancel(); + } + + 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); + } + + protected 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) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + NeedHand = true + }; + + _doAfter.TryStartDoAfter(args); + } + + private void OnAttackAttempt(EntityUid uid, PseudoItemComponent component, AttackAttemptEvent args) + { + if (component.Active) + args.Cancel(); + } +} diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index eb81a78e3ef..c00df042653 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -10,9 +10,8 @@ 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.Nyanotrasen.Item.Components; +using Content.Shared.Nyanotrasen.Item.PseudoItem; using Content.Shared.Placeable; using Content.Shared.Popups; using Content.Shared.Stacks; diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index 7f1b30a1512..6cabe87e810 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -50,8 +50,11 @@ - type: TypingIndicator proto: felinid - type: PseudoItem + storedOffset: 0,17 shape: - - 0,0,5,1 + - 0,0,1,4 + - 0,2,3,4 + - 4,0,5,4 - type: Vocal wilhelm: "/Audio/Nyanotrasen/Voice/Felinid/cat_wilhelm.ogg" sounds: From bbd3e76d951afd2d6fa6ecc807bb4fb51ce4189d Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Mon, 12 Feb 2024 20:53:04 +0000 Subject: [PATCH 05/21] Automatic Changelog Update (#821) --- Resources/Changelog/DeltaVChangelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index c5a3db7366d..3f27db154df 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1578,3 +1578,9 @@ Entries: message: Added a speech bubble to felinids. Mraow! id: 237 time: '2024-02-12T20:51:35.0000000+00:00' +- author: DebugOk + changes: + - type: Add + message: Felinids now fit in bags again! + id: 238 + time: '2024-02-12T20:52:49.0000000+00:00' From 0451fc6f6255cc2e9431ceed80971f82f0639c36 Mon Sep 17 00:00:00 2001 From: Guess-My-Name <34919974+Guess-My-Name@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:01:43 +0100 Subject: [PATCH 06/21] Bureaucratic error changes (#532) * reenables bureaucratic error event * change * Update events.yml removed whitespace likely causing test failures Signed-off-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> --------- Signed-off-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> Co-authored-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> --- .../Events/BureaucraticErrorRule.cs | 2 ++ Resources/Prototypes/GameRules/events.yml | 22 +++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs b/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs index b82546a55ba..6415aa4c2af 100644 --- a/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs +++ b/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs @@ -33,12 +33,14 @@ protected override void Started(EntityUid uid, BureaucraticErrorRuleComponent co { var chosenJob = RobustRandom.PickAndTake(jobList); _stationJobs.MakeJobUnlimited(chosenStation.Value, chosenJob); // INFINITE chaos. + /* DeltaV - don't close all other jobs foreach (var job in jobList) { if (_stationJobs.IsJobUnlimited(chosenStation.Value, job)) continue; _stationJobs.TrySetJobSlot(chosenStation.Value, job, 0); } + */ } else { diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 2fbde82b049..83dffda3095 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -43,17 +43,17 @@ minimumPlayers: 15 - type: BreakerFlipRule -# - type: entity -# id: BureaucraticError # DeltaV - Prevent the BureaucraticError event to happen. -# parent: BaseGameRule -# noSpawn: true -# components: -# - type: StationEvent -# startAnnouncement: station-event-bureaucratic-error-announcement -# minimumPlayers: 25 -# weight: 5 -# duration: 1 -# - type: BureaucraticErrorRule +- type: entity + id: BureaucraticError + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: station-event-bureaucratic-error-announcement + minimumPlayers: 25 + weight: 5 + duration: 1 + - type: BureaucraticErrorRule - type: entity id: ClericalError From 961196227d297ec0119bdf096a774a15d3474594 Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Mon, 12 Feb 2024 21:01:59 +0000 Subject: [PATCH 07/21] Automatic Changelog Update (#532) --- Resources/Changelog/DeltaVChangelog.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 3f27db154df..905850e29c8 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1584,3 +1584,11 @@ Entries: message: Felinids now fit in bags again! id: 238 time: '2024-02-12T20:52:49.0000000+00:00' +- author: Guess-My-Name + changes: + - type: Add + message: >- + Some budget cuts were made in HR department, expect more bureaucratic + errors in near future. + id: 239 + time: '2024-02-12T21:01:44.0000000+00:00' From 49d3c45d0d7c499853cc3a1559cb2d9bd1e91e0a Mon Sep 17 00:00:00 2001 From: Adrian16199 <144424013+Adrian16199@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:10:43 +0100 Subject: [PATCH 08/21] Felinid changes. (#666) * Felinid changes. A plan * Just slappin it together for a friend to see and help * Somethin somethin Cos I could be at yours on friday Tonight's at the place we started It's a long way back from sorry But here I go .... How does it feel, how does it feel Just tell me something I don't know what to tell you I don't know what to say I got into my head, i'm sorry i threw it away But i'm so glad you came back, even through all the pain Let me try and mend it, i can promise that i have changed Oh, let me give you all of me Can we just sort it out for real * just makin this less messy.... I guess * Just tell me somethin. How does it feel, how does it feel. * . * cleaning.... * Makes it work. Yey. * just a small change tbh. * okay maybe just a bit. * Hm, maybe.... * This feels bit better. * hopefully fixes yaml linter * Update Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml Co-authored-by: Debug <49997488+DebugOk@users.noreply.github.com> Signed-off-by: Adrian16199 <144424013+Adrian16199@users.noreply.github.com> * Doin the changes. * Renaming. * Renaming notes. --------- Signed-off-by: Adrian16199 <144424013+Adrian16199@users.noreply.github.com> Co-authored-by: Debug <49997488+DebugOk@users.noreply.github.com> --- .../Component/NoShoesSilentFootstepsComponent.cs | 9 +++++++++ .../Movement/Systems/SharedMoverController.cs | 10 ++++++++++ Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml | 3 +++ .../Nyanotrasen/Entities/Mobs/Species/felinid.yml | 10 ++++++---- 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 Content.Shared/DeltaV/StepTrigger/Component/NoShoesSilentFootstepsComponent.cs diff --git a/Content.Shared/DeltaV/StepTrigger/Component/NoShoesSilentFootstepsComponent.cs b/Content.Shared/DeltaV/StepTrigger/Component/NoShoesSilentFootstepsComponent.cs new file mode 100644 index 00000000000..ae2697b0ef0 --- /dev/null +++ b/Content.Shared/DeltaV/StepTrigger/Component/NoShoesSilentFootstepsComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.StepTrigger.Components; + + +[RegisterComponent, NetworkedComponent] +public sealed partial class NoShoesSilentFootstepsComponent : Component +{ +} diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 7d5e24a15b1..49ad40ae596 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -23,6 +23,7 @@ using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; using Robust.Shared.Utility; +using Content.Shared.StepTrigger.Components; // Delta V-NoShoesSilentFootstepsComponent namespace Content.Shared.Movement.Systems { @@ -46,6 +47,7 @@ public abstract partial class SharedMoverController : VirtualController [Dependency] protected readonly SharedPhysicsSystem Physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly TagSystem _tags = default!; + [Dependency] private readonly IEntityManager _entities = default!; // Delta V-NoShoesSilentFootstepsComponent protected EntityQuery MoverQuery; protected EntityQuery MobMoverQuery; @@ -443,6 +445,14 @@ private bool TryGetSound( sound = moverModifier.FootstepSoundCollection; return true; } + + // If got the component in yml and no shoes = no sound. Delta V + if (_entities.TryGetComponent(uid, out NoShoesSilentFootstepsComponent? _) & + !_inventory.TryGetSlotEntity(uid, "shoes", out var _)) + { + return false; + } + // Delta V NoShoesSilentFootsteps till here. if (_inventory.TryGetSlotEntity(uid, "shoes", out var shoes) && TryComp(shoes, out var modifier)) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 3f38b1c2723..396094eeafa 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -274,6 +274,9 @@ guides: - MinorAntagonists - type: FelinidFood # Nyanotrasen - Felinid, ability to eat rat, see Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs + - type: Food + - type: Item + size: Tiny # Delta V - Make them eatable and pickable. - type: weightedRandomEntity id: RatKingLoot diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index 6cabe87e810..d9b25c5dd1b 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -25,6 +25,10 @@ prototype: Felinid - type: Damageable damageModifierSet: Felinid + - type: SlowOnDamage + speedModifierThresholds: + 60: 0.85 # 0.7 is base speed. + 80: 0.75 # 0.5 is base speed. - type: MeleeWeapon soundHit: collection: Punch @@ -36,12 +40,9 @@ # - type: DiseaseCarrier # naturalImmunities: # - OwOnavirus - - type: Thieving - stealthy: true - stripTimeReduction: 1 - type: Speech speechSounds: Alto - - type: DamageOnHighSpeedImpact + - type: DamageOnHighSpeedImpact # Landing on all fours! damage: types: Blunt: 1 @@ -62,6 +63,7 @@ Female: FemaleFelinid Unsexed: MaleFelinid - type: Felinid + - type: NoShoesSilentFootsteps - type: entity save: false From 7a5c18c73a1480ca0f6bfcff4e92e71d556651ba Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Mon, 12 Feb 2024 21:10:56 +0000 Subject: [PATCH 09/21] Automatic Changelog Update (#666) --- Resources/Changelog/DeltaVChangelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 905850e29c8..62f0ea0c355 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1592,3 +1592,9 @@ Entries: errors in near future. id: 239 time: '2024-02-12T21:01:44.0000000+00:00' +- author: Adrian16199 + changes: + - type: Tweak + message: Felinid's thieving gloves have been removed for Soft paws mechanic. + id: 240 + time: '2024-02-12T21:10:44.0000000+00:00' From 3b8c4a4647ff793bb1c8c005cc43b93ddbb923d2 Mon Sep 17 00:00:00 2001 From: Adrian16199 <144424013+Adrian16199@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:11:43 +0100 Subject: [PATCH 10/21] Make felinids scream in agony when sprayed with water. (#556) * Make felinids scream in agony when sprayed with water. Their screams will be heard thro walls and halls. You will hear a felinid scream in a shift atleast once. Their sheer agony. * Giving probability as the best possible implementation as of now --------- Co-authored-by: Debug <49997488+DebugOk@users.noreply.github.com> --- .../Nyanotrasen/Entities/Mobs/Player/felinid.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/felinid.yml index bd6c39db6fd..db7936cc5b4 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/felinid.yml @@ -18,6 +18,21 @@ speechVerb: Felinid - type: MobMover - type: InputMover + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + reactions: + - reagents: [ Water, SpaceCleaner ] + methods: [ Touch ] + effects: + - !type:WashCreamPieReaction + - reagents: [ Water ] + methods: [ Touch ] + effects: + - !type:Emote + emote: Scream + probability: 0.2 - type: Respirator damage: types: From c13e538c0359ddf23f14e043768698e906db30ce Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Mon, 12 Feb 2024 21:11:57 +0000 Subject: [PATCH 11/21] Automatic Changelog Update (#556) --- Resources/Changelog/DeltaVChangelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 62f0ea0c355..f7baad085a5 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1598,3 +1598,9 @@ Entries: message: Felinid's thieving gloves have been removed for Soft paws mechanic. id: 240 time: '2024-02-12T21:10:44.0000000+00:00' +- author: Adrian16199 + changes: + - type: Add + message: Felinids now scream in agony from water. + id: 241 + time: '2024-02-12T21:11:44.0000000+00:00' From 1f3128c6ea0074f5cf3b8b2482612a1ccc609bdf Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 12 Feb 2024 17:25:02 -0500 Subject: [PATCH 12/21] Harpy Visual Rework (#677) * It begins * Delete error.txt * Patch by Debug * HIDING WINGS NOW WORKS * Runs smoother from Shared * Delete HarpyVisualsSystem.cs * The entire clientside script is no longer needed, and the visuals now work correctly. Helmetbug is gone. * Update HarpyVisualsSystem.cs * First completed Harpy Hardsuit * Captain and Atmos tech birdsuits * Update hardsuit-helmets.yml * And more content * Adding new finch tail <3 * whoops * guh * I swear the tail works now, I just need the adhd meds to kick in * birb juggsuit * More stuff * Nukie hardsuits * fixing clipping issues on birb juggsuit * Update meta.json * aaaaaaaaa * two more * Ton of extra harpy sprites * Create equipped-INNERCLOTHING-harpy.png * Harpy Ultravision trait TODO: Optional trait that disables it * Trait that removes Ultravision * Code optimizations * Adding hueshift maps to all harpy markings * No more jumpsuits * 1984 the harpy jumpsuits, they are no longer needed * last 2 * final QA pass * shennanigans related to an earlier merge conflict --------- Signed-off-by: VMSolidus --- .../DeltaV/Harpy/HarpyVisualsComponent.cs | 5 + .../DeltaV/Overlays/UltraVisionOverlay.cs | 44 +++++ .../DeltaV/Overlays/UltraVisionSystem.cs | 31 +++ .../Abilities/DefaultVisionComponent.cs | 8 + .../DeltaV/Abilities/DefaultVisionSystem.cs | 19 ++ .../DeltaV/Abilities/UltraVisionComponent.cs | 8 + .../DeltaV/Harpy/HarpySingerComponent.cs | 1 + .../DeltaV/Harpy/HarpyVisualsSystem.cs | 40 ++++ .../Harpy/SharedHarpyVisualsComponent.cs | 9 + Content.Shared/Roles/StartingGearPrototype.cs | 4 +- .../deltav/chat/managers/chat_manager.ftl | 5 + .../Locale/en-US/deltav/markings/harpy.ftl | 52 +++-- .../Locale/en-US/deltav/traits/traits.ftl | 4 + .../Prototypes/DeltaV/Body/Parts/harpy.yml | 186 ++++++++++++++++++ .../DeltaV/Body/Prototypes/harpy.yml | 26 +-- .../Mobs/Customization/Markings/harpy.yml | 122 +++++++++++- .../DeltaV/Entities/Mobs/Species/harpy.yml | 10 +- .../digitigrade_inventory_template.yml | 119 +++++++++++ .../Prototypes/DeltaV/Shaders/birdvision.yml | 4 + Resources/Prototypes/DeltaV/Species/harpy.yml | 111 ++++++++++- .../Prototypes/DeltaV/Traits/altvision.yml | 13 ++ .../Prototypes/DeltaV/Voice/speech_sounds.yml | 9 + .../Prototypes/DeltaV/Voice/speech_verbs.yml | 8 + Resources/Prototypes/DeltaV/tags.yml | 6 + .../OuterClothing/base_clothingouter.yml | 4 + .../Uniforms/base_clothinguniforms.yml | 3 + .../Mobs/Customization/Markings/gauze.yml | 14 +- .../Mobs/Customization/Markings/scars.yml | 4 +- .../Mobs/Customization/Markings/tattoos.yml | 12 +- .../atmospherics.rsi/equipped-head-harpy.png | Bin 0 -> 559 bytes .../Head/Hardsuits/atmospherics.rsi/meta.json | 4 + .../Head/Hardsuits/capspace.rsi/meta.json | 8 + .../off-equipped-HELMET-harpy.png | Bin 0 -> 1181 bytes .../capspace.rsi/on-equipped-HELMET-harpy.png | Bin 0 -> 1350 bytes .../cybersun.rsi/equipped-HELMET-harpy.png | Bin 0 -> 494 bytes .../Head/Hardsuits/cybersun.rsi/meta.json | 40 ++-- .../Hardsuits/engineering-white.rsi/meta.json | 10 +- .../off-equipped-HELMET-harpy.png | Bin 0 -> 1219 bytes .../on-equipped-HELMET-harpy.png | Bin 0 -> 1623 bytes .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1044 bytes .../Hardsuits/atmospherics.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1068 bytes .../Hardsuits/capspace.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1365 bytes .../Hardsuits/cybersun.rsi/meta.json | 42 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2258 bytes .../Hardsuits/engineering-white.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2226 bytes .../Hardsuits/engineering.rsi/meta.json | 40 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 4020 bytes .../Hardsuits/luxury.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2074 bytes .../Hardsuits/medical.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2577 bytes .../Hardsuits/paramed.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2338 bytes .../Hardsuits/salvage.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 2376 bytes .../Hardsuits/spatio.rsi/meta.json | 40 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1180 bytes .../Hardsuits/syndicate.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1198 bytes .../Hardsuits/syndiecommander.rsi/meta.json | 40 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1208 bytes .../Hardsuits/syndiemedic.rsi/meta.json | 38 ++-- .../Head/Hardsuits/Combat/hos.rsi/meta.json | 56 +++--- .../hos.rsi/off-equipped-HELMET-harpy.png | Bin 0 -> 915 bytes .../hos.rsi/on-equipped-HELMET-harpy.png | Bin 0 -> 1431 bytes .../Hardsuits/Combat/officer.rsi/meta.json | 56 +++--- .../officer.rsi/off-equipped-HELMET-harpy.png | Bin 0 -> 1252 bytes .../officer.rsi/on-equipped-HELMET-harpy.png | Bin 0 -> 1364 bytes .../Hardsuits/Combat/standard.rsi/meta.json | 56 +++--- .../off-equipped-HELMET-harpy.png | Bin 0 -> 1156 bytes .../standard.rsi/on-equipped-HELMET-harpy.png | Bin 0 -> 1252 bytes .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1347 bytes .../Hardsuits/Combat/advanced.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1409 bytes .../Hardsuits/Combat/corpsman.rsi/meta.json | 38 ++-- .../hos.rsi/equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1414 bytes .../Hardsuits/Combat/hos.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1356 bytes .../Hardsuits/Combat/medical.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1403 bytes .../Hardsuits/Combat/officer.rsi/meta.json | 38 ++-- .../riot.rsi/equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1375 bytes .../Hardsuits/Combat/riot.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1339 bytes .../Hardsuits/Combat/standard.rsi/meta.json | 38 ++-- .../equipped-OUTERCLOTHING-harpy.png | Bin 0 -> 1446 bytes .../Hardsuits/Combat/warden.rsi/meta.json | 38 ++-- .../Harpy/harpy_chest.rsi/lower.png | Bin 0 -> 309 bytes .../Harpy/harpy_chest.rsi/meta.json | 19 ++ .../Harpy/harpy_chest.rsi/upper.png | Bin 0 -> 380 bytes .../harpy_ears.rsi/harpy_ears_default.png | Bin 786 -> 640 bytes .../Harpy/harpy_legs.rsi/feet.png | Bin 0 -> 335 bytes .../Harpy/harpy_legs.rsi/meta.json | 23 +++ .../Harpy/harpy_legs.rsi/talons.png | Bin 0 -> 190 bytes .../Harpy/harpy_legs.rsi/thighs.png | Bin 0 -> 2301 bytes .../Harpy/harpy_tails.rsi/meta.json | 3 +- .../Harpy/harpy_tails.rsi/phoenix_tail.png | Bin 1076 -> 773 bytes .../Harpy/harpy_tails.rsi/rooster_tail.png | Bin 1052 -> 754 bytes .../Harpy/harpy_tailsx72.rsi/finch_tail.png | Bin 0 -> 475 bytes .../Harpy/harpy_tailsx72.rsi/meta.json | 15 ++ .../Customization/Harpy/harpy_wingcover.png | Bin 0 -> 438 bytes .../Harpy/harpy_wings.rsi/classicharpy.png | Bin 0 -> 1277 bytes .../Harpy/harpy_wings.rsi/harpy.png | Bin 1365 -> 1033 bytes .../Harpy/harpy_wings.rsi/harpy2tone1.png | Bin 813 -> 734 bytes .../Harpy/harpy_wings.rsi/harpy2tone2.png | Bin 1015 -> 1001 bytes .../Harpy/harpy_wings.rsi/harpy3tone1.png | Bin 820 -> 508 bytes .../Harpy/harpy_wings.rsi/harpy3tone2.png | Bin 493 -> 465 bytes .../Harpy/harpy_wings.rsi/harpy3tone3.png | Bin 791 -> 829 bytes .../Harpy/harpy_wings.rsi/harpyfolded.png | Bin 0 -> 1017 bytes .../Harpy/harpy_wings.rsi/harpyspeckled1.png | Bin 1321 -> 1229 bytes .../Harpy/harpy_wings.rsi/harpyspeckled2.png | Bin 749 -> 732 bytes .../Harpy/harpy_wings.rsi/harpyundertone1.png | Bin 1298 -> 1207 bytes .../Harpy/harpy_wings.rsi/harpyundertone2.png | Bin 356 -> 344 bytes .../Harpy/harpy_wings.rsi/harpywingtip1.png | Bin 1132 -> 1038 bytes .../Harpy/harpy_wings.rsi/harpywingtip2.png | Bin 791 -> 824 bytes .../Harpy/harpy_wings.rsi/meta.json | 10 +- .../Mobs/Species/Harpy/organs.rsi/lung-l.png | Bin 0 -> 279 bytes .../Mobs/Species/Harpy/organs.rsi/lung-r.png | Bin 0 -> 275 bytes .../Mobs/Species/Harpy/organs.rsi/meta.json | 17 ++ .../Mobs/Species/Harpy/parts.rsi/full.png | Bin 0 -> 585 bytes .../Mobs/Species/Harpy/parts.rsi/head_f.png | Bin 0 -> 442 bytes .../Mobs/Species/Harpy/parts.rsi/head_m.png | Bin 0 -> 435 bytes .../Mobs/Species/Harpy/parts.rsi/l_arm.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/l_foot.png | Bin 0 -> 272 bytes .../Mobs/Species/Harpy/parts.rsi/l_hand.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/l_leg.png | Bin 0 -> 2285 bytes .../Mobs/Species/Harpy/parts.rsi/meta.json | 62 ++++++ .../Mobs/Species/Harpy/parts.rsi/r_arm.png | Bin 0 -> 154 bytes .../Mobs/Species/Harpy/parts.rsi/r_foot.png | Bin 0 -> 280 bytes .../Mobs/Species/Harpy/parts.rsi/r_hand.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/r_leg.png | Bin 0 -> 2283 bytes .../Mobs/Species/Harpy/parts.rsi/torso_f.png | Bin 0 -> 646 bytes .../Mobs/Species/Harpy/parts.rsi/torso_m.png | Bin 0 -> 602 bytes .../Textures/DeltaV/Shaders/ultravision.swsl | 14 ++ 137 files changed, 1572 insertions(+), 510 deletions(-) create mode 100644 Content.Client/DeltaV/Harpy/HarpyVisualsComponent.cs create mode 100644 Content.Client/DeltaV/Overlays/UltraVisionOverlay.cs create mode 100644 Content.Client/DeltaV/Overlays/UltraVisionSystem.cs create mode 100644 Content.Shared/DeltaV/Abilities/DefaultVisionComponent.cs create mode 100644 Content.Shared/DeltaV/Abilities/DefaultVisionSystem.cs create mode 100644 Content.Shared/DeltaV/Abilities/UltraVisionComponent.cs create mode 100644 Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs create mode 100644 Content.Shared/DeltaV/Harpy/SharedHarpyVisualsComponent.cs create mode 100644 Resources/Prototypes/DeltaV/Body/Parts/harpy.yml create mode 100644 Resources/Prototypes/DeltaV/InventoryTemplates/digitigrade_inventory_template.yml create mode 100644 Resources/Prototypes/DeltaV/Shaders/birdvision.yml create mode 100644 Resources/Prototypes/DeltaV/Traits/altvision.yml create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-harpy.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/on-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-harpy.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/atmospherics.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/capspace.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/off-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/on-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/officer.rsi/off-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/officer.rsi/on-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/standard.rsi/off-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/standard.rsi/on-equipped-HELMET-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/advanced.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/hos.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/medical.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/officer.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/standard.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/warden.rsi/equipped-OUTERCLOTHING-harpy.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_chest.rsi/lower.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_chest.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_chest.rsi/upper.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi/feet.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi/talons.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi/thighs.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi/finch_tail.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wingcover.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/classicharpy.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyfolded.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-l.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-r.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/full.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/head_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/head_m.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_arm.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_foot.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_hand.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_leg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_arm.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_foot.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_hand.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_leg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/torso_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/torso_m.png create mode 100644 Resources/Textures/DeltaV/Shaders/ultravision.swsl diff --git a/Content.Client/DeltaV/Harpy/HarpyVisualsComponent.cs b/Content.Client/DeltaV/Harpy/HarpyVisualsComponent.cs new file mode 100644 index 00000000000..1c3253c74ef --- /dev/null +++ b/Content.Client/DeltaV/Harpy/HarpyVisualsComponent.cs @@ -0,0 +1,5 @@ +namespace Content.Client.DeltaV.Harpy; + +[RegisterComponent] +public sealed partial class HarpyVisualsComponent : Component +{ } diff --git a/Content.Client/DeltaV/Overlays/UltraVisionOverlay.cs b/Content.Client/DeltaV/Overlays/UltraVisionOverlay.cs new file mode 100644 index 00000000000..73c05e052b6 --- /dev/null +++ b/Content.Client/DeltaV/Overlays/UltraVisionOverlay.cs @@ -0,0 +1,44 @@ +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Content.Shared.Abilities; + +namespace Content.Client.DeltaV.Overlays; + +public sealed partial class UltraVisionOverlay : Overlay +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] IEntityManager _entityManager = default!; + + + public override bool RequestScreenTexture => true; + public override OverlaySpace Space => OverlaySpace.WorldSpace; + private readonly ShaderInstance _ultraVisionShader; + + public UltraVisionOverlay() + { + IoCManager.InjectDependencies(this); + _ultraVisionShader = _prototypeManager.Index("UltraVision").Instance().Duplicate(); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null) + return; + if (_playerManager.LocalPlayer?.ControlledEntity is not {Valid: true} player) + return; + if (!_entityManager.HasComponent(player)) + return; + + _ultraVisionShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + + var worldHandle = args.WorldHandle; + var viewport = args.WorldBounds; + worldHandle.SetTransform(Matrix3.Identity); + worldHandle.UseShader(_ultraVisionShader); + worldHandle.DrawRect(viewport, Color.White); + } +} diff --git a/Content.Client/DeltaV/Overlays/UltraVisionSystem.cs b/Content.Client/DeltaV/Overlays/UltraVisionSystem.cs new file mode 100644 index 00000000000..00a0f362421 --- /dev/null +++ b/Content.Client/DeltaV/Overlays/UltraVisionSystem.cs @@ -0,0 +1,31 @@ +using Content.Shared.Abilities; +using Robust.Client.Graphics; + +namespace Content.Client.DeltaV.Overlays; + +public sealed partial class UltraVisionSystem : EntitySystem +{ + [Dependency] private readonly IOverlayManager _overlayMan = default!; + + private UltraVisionOverlay _overlay = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUltraVisionInit); + SubscribeLocalEvent(OnUltraVisionShutdown); + + _overlay = new(); + } + + private void OnUltraVisionInit(EntityUid uid, UltraVisionComponent component, ComponentInit args) + { + _overlayMan.AddOverlay(_overlay); + } + + private void OnUltraVisionShutdown(EntityUid uid, UltraVisionComponent component, ComponentShutdown args) + { + _overlayMan.RemoveOverlay(_overlay); + } +} diff --git a/Content.Shared/DeltaV/Abilities/DefaultVisionComponent.cs b/Content.Shared/DeltaV/Abilities/DefaultVisionComponent.cs new file mode 100644 index 00000000000..0126450e5d4 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/DefaultVisionComponent.cs @@ -0,0 +1,8 @@ +using Robust.Shared.GameStates; +namespace Content.Shared.DeltaV.Abilities; + +[RegisterComponent] +[NetworkedComponent] + +public sealed partial class DefaultVisionComponent : Component +{} diff --git a/Content.Shared/DeltaV/Abilities/DefaultVisionSystem.cs b/Content.Shared/DeltaV/Abilities/DefaultVisionSystem.cs new file mode 100644 index 00000000000..599fc0db140 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/DefaultVisionSystem.cs @@ -0,0 +1,19 @@ +using Content.Shared.Abilities; +using Content.Shared.DeltaV.Abilities; + +namespace Content.Client.DeltaV.Overlays; + +public sealed partial class DefaultVisionSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDefaultVisionInit); + } + + private void OnDefaultVisionInit(EntityUid uid, DefaultVisionComponent component, ComponentInit args) + { + RemComp(uid); + } +} diff --git a/Content.Shared/DeltaV/Abilities/UltraVisionComponent.cs b/Content.Shared/DeltaV/Abilities/UltraVisionComponent.cs new file mode 100644 index 00000000000..5f631c54f25 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/UltraVisionComponent.cs @@ -0,0 +1,8 @@ +using Robust.Shared.GameStates; +namespace Content.Shared.Abilities; + +[RegisterComponent] +[NetworkedComponent] + +public sealed partial class UltraVisionComponent : Component +{} diff --git a/Content.Shared/DeltaV/Harpy/HarpySingerComponent.cs b/Content.Shared/DeltaV/Harpy/HarpySingerComponent.cs index 1ee3f795d58..f2edeeb8726 100644 --- a/Content.Shared/DeltaV/Harpy/HarpySingerComponent.cs +++ b/Content.Shared/DeltaV/Harpy/HarpySingerComponent.cs @@ -1,6 +1,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Serialization; namespace Content.Shared.DeltaV.Harpy { diff --git a/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs new file mode 100644 index 00000000000..f75fcee8d42 --- /dev/null +++ b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs @@ -0,0 +1,40 @@ +using Content.Shared.Inventory.Events; +using Content.Shared.Tag; +using Content.Shared.Humanoid; + +namespace Content.Shared.DeltaV.Harpy; + +public sealed class HarpyVisualsSystem : EntitySystem +{ + [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidSystem = default!; + + [ValidatePrototypeId] + private const string HarpyWingsTag = "HidesHarpyWings"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDidEquipEvent); + SubscribeLocalEvent(OnDidUnequipEvent); + } + + private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidEquipEvent args) + { + if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag)) + { + _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, false); + _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, false); + } + } + + private void OnDidUnequipEvent(EntityUid uid, HarpySingerComponent component, DidUnequipEvent args) + { + if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag)) + { + _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, true); + _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, true); + } + } +} diff --git a/Content.Shared/DeltaV/Harpy/SharedHarpyVisualsComponent.cs b/Content.Shared/DeltaV/Harpy/SharedHarpyVisualsComponent.cs new file mode 100644 index 00000000000..cc0f7c39354 --- /dev/null +++ b/Content.Shared/DeltaV/Harpy/SharedHarpyVisualsComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.DeltaV.Harpy; + +[Serializable, NetSerializable] +public enum HardsuitWings : byte +{ + Worn +} diff --git a/Content.Shared/Roles/StartingGearPrototype.cs b/Content.Shared/Roles/StartingGearPrototype.cs index 0d4122b6466..1e7881113fe 100644 --- a/Content.Shared/Roles/StartingGearPrototype.cs +++ b/Content.Shared/Roles/StartingGearPrototype.cs @@ -1,3 +1,4 @@ +using Content.Shared.DeltaV.Harpy; using Content.Shared.Preferences; using Robust.Shared.Prototypes; @@ -32,7 +33,8 @@ public string GetGear(string slot, HumanoidCharacterProfile? profile) { if (profile != null) { - if (slot == "jumpsuit" && profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt)) + if (slot == "jumpsuit" && profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt) + || slot == "jumpsuit" && profile.Species == "Harpy" && !string.IsNullOrEmpty(InnerClothingSkirt)) //DeltaV adds this line to prevent Harpies from starting with jumpsuits return InnerClothingSkirt; if (slot == "back" && profile.Backpack == BackpackPreference.Satchel && !string.IsNullOrEmpty(Satchel)) return Satchel; diff --git a/Resources/Locale/en-US/deltav/chat/managers/chat_manager.ftl b/Resources/Locale/en-US/deltav/chat/managers/chat_manager.ftl index bd8719fd56b..fd5635de4a9 100644 --- a/Resources/Locale/en-US/deltav/chat/managers/chat_manager.ftl +++ b/Resources/Locale/en-US/deltav/chat/managers/chat_manager.ftl @@ -7,3 +7,8 @@ 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 + +chat-speech-verb-harpy-1 = chirps +chat-speech-verb-harpy-2 = tweets +chat-speech-verb-harpy-3 = caws +chat-speech-verb-harpy-4 = trills diff --git a/Resources/Locale/en-US/deltav/markings/harpy.ftl b/Resources/Locale/en-US/deltav/markings/harpy.ftl index c2e9beb5c87..3c1a2e3b9b2 100644 --- a/Resources/Locale/en-US/deltav/markings/harpy.ftl +++ b/Resources/Locale/en-US/deltav/markings/harpy.ftl @@ -1,26 +1,32 @@ marking-HarpyWingDefault = Basic Wings marking-HarpyWingDefault-harpy = Wings -marking-HarpyWing2Tone = Two Tone Wings -marking-HarpyWing2Tone-harpy2tone1 = Top Half -marking-HarpyWing2Tone-harpy2tone2 = Bottom Half +marking-HarpyWingFolded = Folded Wings +marking-HarpyWingFolded-harpyfolded = Wings -marking-HarpyWing3Tone = Three Tone Wings -marking-HarpyWing3Tone-harpy3tone1 = Top Third -marking-HarpyWing3Tone-harpy3tone2 = Middle Third -marking-HarpyWing3tone-harpy3tone3 = Bottom Third +marking-HarpyWingClassic = Classic Wings +marking-HarpyWingClassic-classicharpy = Wings -marking-HarpyWingSpeckled = Speckled Wings -marking-HarpyWingSpeckled-harpyspeckled1 = Main -marking-HarpyWingSpeckled-harpyspeckled2 = Speckles +marking-HarpyWing2ToneClassic = Classic Two Tone Wings +marking-HarpyWing2ToneClassic-harpy2tone1 = Top Half +marking-HarpyWing2ToneClassic-harpy2tone2 = Bottom Half -marking-HarpyWingUndertone = Wings with Undertone -marking-HarpyWingUndertone-harpyundertone1 = Front -marking-HarpyWingUndertone-harpyundertone2 = Back +marking-HarpyWing3ToneClassic = Classic Three Tone Wings +marking-HarpyWing3ToneClassic-harpy3tone1 = Top Third +marking-HarpyWing3ToneClassic-harpy3tone2 = Middle Third +marking-HarpyWing3ToneClassic-harpy3tone3 = Bottom Third -marking-HarpyWingTips = Wings with Feather Tips -marking-HarpyWingTips-harpywingtip1 = Main -marking-HarpyWingTips-harpywingtip2 = Feathertips +marking-HarpyWingSpeckledClassic = Speckled Classic Wings +marking-HarpyWingSpeckledClassic-harpyspeckled1 = Main +marking-HarpyWingSpeckledClassic-harpyspeckled2 = Speckles + +marking-HarpyWingUndertoneClassic = Classic Wings with Undertone +marking-HarpyWingUndertoneClassic-harpyundertone1 = Front +marking-HarpyWingUndertoneClassic-harpyundertone2 = Back + +marking-HarpyWingTipsClassic = Classic Wings with Feather Tips +marking-HarpyWingTipsClassic-harpywingtip1 = Main +marking-HarpyWingTipsClassic-harpywingtip2 = Feathertips marking-HarpyEarsDefault = Feather Tufts marking-HarpyEarsDefault-harpy_ears_default = Tufts @@ -30,3 +36,17 @@ marking-HarpyTailPhoenix-phoenix_tail = Tail marking-HarpyTailRooster = Rooster Tail marking-HarpyTailRooster-rooster_tail = Tail + +marking-HarpyTailFinch = Finch Tail +marking-HarpyTailFinch-finch_tail = Tail + +marking-HarpyChestDefault = Wing & Groin Under-Clothes +marking-HarpyChestDefault-upper = Wing Under-Clothes +marking-HarpyChestDefault-lower = Groin Under-Clothes + +marking-HarpyLegsDefault = Avian Legs +marking-HarpyLegsDefault-thighs = Thighs + +marking-HarpyFeetDefault = Avian Feet +marking-HarpyFeetDefault-feet = Feet +marking-HarpyFeetDefault-talons = Talons diff --git a/Resources/Locale/en-US/deltav/traits/traits.ftl b/Resources/Locale/en-US/deltav/traits/traits.ftl index 6698832a8cf..0eaff0408a4 100644 --- a/Resources/Locale/en-US/deltav/traits/traits.ftl +++ b/Resources/Locale/en-US/deltav/traits/traits.ftl @@ -1,5 +1,9 @@ trait-scottish-accent-name = Scottish Accent trait-scottish-accent-desc = Fer tha folk who come frae Hielan clan. +trait-ultravision-desc = Whether through custom bionic eyes, random mutation, + or being a Harpy, you perceive the world with ultraviolet light. + +trait-defaultvision-desc = You lack any vision variation from the norm for a non-human species. trait-uncloneable-name = Uncloneable trait-uncloneable-desc = Cannot be cloned diff --git a/Resources/Prototypes/DeltaV/Body/Parts/harpy.yml b/Resources/Prototypes/DeltaV/Body/Parts/harpy.yml new file mode 100644 index 00000000000..358cb1de11f --- /dev/null +++ b/Resources/Prototypes/DeltaV/Body/Parts/harpy.yml @@ -0,0 +1,186 @@ +- type: entity + id: PartHarpy + parent: BaseItem + name: "harpy body part" + abstract: true + components: + - type: Damageable + damageContainer: Biological + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + - type: StaticPrice #DynamicPrice + price: 100 + - type: Tag + tags: + - Trash + +- type: entity + id: TorsoHarpy + name: "harpy torso" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "torso_m" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "torso_m" + - type: BodyPart + partType: Torso + +- type: entity + id: HeadHarpy + name: "harpy head" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "head_m" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "head_m" + - type: BodyPart + partType: Head + vital: true + - type: Input + context: "ghost" + - type: InputMover + - type: GhostOnMove + - type: Tag + tags: + - Head + +- type: entity + id: LeftArmHarpy + name: "left harpy arm" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_arm" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + +- type: entity + id: RightArmHarpy + name: "right harpy arm" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_arm" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + +- type: entity + id: LeftHandHarpy + name: "left harpy hand" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_hand" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + +- type: entity + id: RightHandHarpy + name: "right harpy hand" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_hand" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + +- type: entity + id: LeftLegHarpy + name: "left harpy leg" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_leg" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + - type: MovementBodyPart + +- type: entity + id: RightLegHarpy + name: "right harpy leg" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_leg" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + - type: MovementBodyPart + +- type: entity + id: LeftFootHarpy + name: "left harpy foot" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_foot" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + +- type: entity + id: RightFootHarpy + name: "right harpy foot" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_foot" + - type: Icon + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right diff --git a/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml b/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml index 65073a778fa..5b3615c55d8 100644 --- a/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml +++ b/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml @@ -4,14 +4,14 @@ root: torso slots: head: - part: HeadHuman + part: HeadHarpy connections: - torso organs: brain: OrganHumanBrain eyes: OrganHumanEyes torso: - part: TorsoHuman + part: TorsoHarpy connections: - left arm - right arm @@ -20,31 +20,31 @@ organs: heart: OrganHumanHeart lungs: OrganHarpyLungs - stomach: OrganHumanStomach - liver: OrganHumanLiver - kidneys: OrganHumanKidneys + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganAnimalKidneys right arm: - part: RightArmHuman + part: RightArmHarpy connections: - right hand left arm: - part: LeftArmHuman + part: LeftArmHarpy connections: - left hand right hand: - part: RightHandHuman + part: RightHandHarpy left hand: - part: LeftHandHuman + part: LeftHandHarpy right leg: - part: RightLegHuman + part: RightLegHarpy connections: - right foot left leg: - part: LeftLegHuman + part: LeftLegHarpy connections: - left foot right foot: - part: RightFootHuman + part: RightFootHarpy left foot: - part: LeftFootHuman + part: LeftFootHarpy diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/harpy.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/harpy.yml index 9ea84c4d0a2..9118692a082 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/harpy.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/harpy.yml @@ -18,6 +18,40 @@ - sprite: DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi state: harpy +- type: marking + id: HarpyWingClassic + bodyPart: RArm + markingCategory: Arms + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi + state: classicharpy + +- type: marking + id: HarpyWingFolded + bodyPart: RArm + markingCategory: Arms + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi + state: harpyfolded + - type: marking id: HarpyEarsDefault bodyPart: Head @@ -57,12 +91,36 @@ bodyPart: Tail markingCategory: Tail speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring sprites: - sprite: DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi - state: rooster_tail + state: rooster_tail + + +- type: marking + id: HarpyTailFinch + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi + state: finch_tail - type: marking - id: HarpyWing2Tone + id: HarpyWing2ToneClassic bodyPart: RArm markingCategory: Arms speciesRestriction: [Harpy] @@ -73,7 +131,7 @@ state: harpy2tone2 - type: marking - id: HarpyWing3Tone + id: HarpyWing3ToneClassic bodyPart: RArm markingCategory: Arms speciesRestriction: [Harpy] @@ -86,7 +144,7 @@ state: harpy3tone3 - type: marking - id: HarpyWingSpeckled + id: HarpyWingSpeckledClassic bodyPart: RArm markingCategory: Arms speciesRestriction: [Harpy] @@ -97,7 +155,7 @@ state: harpyspeckled2 - type: marking - id: HarpyWingUndertone + id: HarpyWingUndertoneClassic bodyPart: RArm markingCategory: Arms speciesRestriction: [Harpy] @@ -108,7 +166,7 @@ state: harpyundertone2 - type: marking - id: HarpyWingTips + id: HarpyWingTipsClassic bodyPart: RArm markingCategory: Arms speciesRestriction: [Harpy] @@ -117,3 +175,55 @@ state: harpywingtip1 - sprite: DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi state: harpywingtip2 + +- type: marking + id: HarpyChestDefault + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_chest.rsi + state: upper + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_chest.rsi + state: lower + +- type: marking + id: HarpyLegsDefault + bodyPart: LLeg + markingCategory: Legs + speciesRestriction: [Harpy] + coloring: + default: + type: + !type:CategoryColoring + category: Hair + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi + state: thighs + +- type: marking + id: HarpyFeetDefault + bodyPart: RFoot + markingCategory: Legs + speciesRestriction: [Harpy] + coloring: + default: + fallbackTypes: + - !type:SimpleColoring + color: "#964b00" + sprites: + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi + state: feet + - sprite: DeltaV/Mobs/Customization/Harpy/harpy_legs.rsi + state: talons diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml index 7548add4969..a4498299c9a 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml @@ -106,7 +106,8 @@ types: Piercing: 5 - type: Speech - speechSounds: Alto + speechSounds: Harpy + speechVerb: Harpy - type: Vocal sounds: Male: SoundsHarpy @@ -121,6 +122,11 @@ - type: MovementSpeedModifier baseWalkSpeed: 2.5 baseSprintSpeed: 5.0 + - type: Inventory + speciesId: harpy + templateId: digitigrade + - type: HarpyVisuals + - type: UltraVision - type: entity save: false @@ -132,6 +138,8 @@ components: - type: HumanoidAppearance species: Harpy + - type: Inventory + speciesId: harpy - type: Sprite scale: 0.9, 0.9 layers: diff --git a/Resources/Prototypes/DeltaV/InventoryTemplates/digitigrade_inventory_template.yml b/Resources/Prototypes/DeltaV/InventoryTemplates/digitigrade_inventory_template.yml new file mode 100644 index 00000000000..158541571aa --- /dev/null +++ b/Resources/Prototypes/DeltaV/InventoryTemplates/digitigrade_inventory_template.yml @@ -0,0 +1,119 @@ +- type: inventoryTemplate + id: digitigrade + slots: + - name: shoes + slotTexture: shoes + slotFlags: FEET + stripTime: 3 + uiWindowPos: 1,0 + strippingWindowPos: 1,3 + displayName: Shoes + - name: jumpsuit + slotTexture: uniform + slotFlags: INNERCLOTHING + stripTime: 6 + uiWindowPos: 0,1 + strippingWindowPos: 0,2 + displayName: Jumpsuit + whitelist: + tags: + - Skirt + - name: outerClothing + slotTexture: suit + slotFlags: OUTERCLOTHING + stripTime: 6 + uiWindowPos: 1,1 + strippingWindowPos: 1,2 + displayName: Suit + - name: gloves + slotTexture: gloves + slotFlags: GLOVES + uiWindowPos: 2,1 + strippingWindowPos: 2,2 + displayName: Gloves + - name: neck + slotTexture: neck + slotFlags: NECK + uiWindowPos: 0,2 + strippingWindowPos: 0,1 + displayName: Neck + - name: mask + slotTexture: mask + slotFlags: MASK + uiWindowPos: 1,2 + strippingWindowPos: 1,1 + displayName: Mask + - name: eyes + slotTexture: glasses + slotFlags: EYES + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,0 + displayName: Eyes + - name: ears + slotTexture: ears + slotFlags: EARS + stripTime: 3 + uiWindowPos: 2,2 + strippingWindowPos: 2,0 + displayName: Ears + - name: head + slotTexture: head + slotFlags: HEAD + uiWindowPos: 1,3 + strippingWindowPos: 1,0 + displayName: Head + - name: pocket1 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,4 + dependsOn: jumpsuit + displayName: Pocket 1 + stripHidden: true + - name: pocket2 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,3 + strippingWindowPos: 1,4 + dependsOn: jumpsuit + displayName: Pocket 2 + stripHidden: true + - name: suitstorage + slotTexture: suit_storage + slotFlags: SUITSTORAGE + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,0 + strippingWindowPos: 2,5 + dependsOn: outerClothing + displayName: Suit Storage + - name: id + slotTexture: id + slotFlags: IDCARD + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 2,1 + strippingWindowPos: 2,4 + dependsOn: jumpsuit + displayName: ID + - name: belt + slotTexture: belt + slotFlags: BELT + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 3,1 + strippingWindowPos: 1,5 + displayName: Belt + - name: back + slotTexture: back + slotFlags: BACK + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 3,0 + strippingWindowPos: 0,5 + displayName: Back diff --git a/Resources/Prototypes/DeltaV/Shaders/birdvision.yml b/Resources/Prototypes/DeltaV/Shaders/birdvision.yml new file mode 100644 index 00000000000..43dc7ae2485 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Shaders/birdvision.yml @@ -0,0 +1,4 @@ +- type: shader + id: UltraVision + kind: source + path: "/Textures/DeltaV/Shaders/ultravision.swsl" diff --git a/Resources/Prototypes/DeltaV/Species/harpy.yml b/Resources/Prototypes/DeltaV/Species/harpy.yml index 0df69e9d729..bcc4dd22c44 100644 --- a/Resources/Prototypes/DeltaV/Species/harpy.yml +++ b/Resources/Prototypes/DeltaV/Species/harpy.yml @@ -3,11 +3,33 @@ name: species-name-harpy roundStart: true prototype: MobHarpy - sprites: MobHumanSprites + sprites: MobHarpySprites markingLimits: MobHarpyMarkingLimits dollPrototype: MobHarpyDummy skinColoration: HumanToned +- type: speciesBaseSprites + id: MobHarpySprites + sprites: + Head: MobHarpyHead + Hair: MobHumanoidAnyMarking + FacialHair: MobHumanoidAnyMarking + Snout: MobHumanoidAnyMarking + Chest: MobHarpyTorso + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Tail: MobHumanoidAnyMarking + Eyes: MobHumanoidEyes + LArm: MobHarpyLArm + RArm: MobHarpyRArm + LHand: MobHarpyLHand + RHand: MobHarpyRHand + LLeg: MobHarpyLLeg + RLeg: MobHarpyRLeg + LFoot: MobHarpyLFoot + RFoot: MobHarpyRFoot + + - type: markingPoints id: MobHarpyMarkingLimits points: @@ -27,7 +49,8 @@ defaultMarkings: [ HarpyEarsDefault ] Chest: points: 1 - required: false + required: true + defaultMarkings: [ HarpyChestDefault ] Legs: points: 2 required: false @@ -35,3 +58,87 @@ points: 1 required: false defaultMarkings: [ HarpyWingDefault ] + +- type: humanoidBaseSprite + id: MobHarpyHead + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobHarpyHeadMale + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobHarpyHeadFemale + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobHarpyTorso + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobHarpyTorsoMale + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobHarpyTorsoFemale + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobHarpyLLeg + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobHarpyLHand + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobHarpyLArm + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobHarpyLFoot + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobHarpyRLeg + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobHarpyRHand + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobHarpyRArm + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobHarpyRFoot + baseSprite: + sprite: DeltaV/Mobs/Species/Harpy/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/DeltaV/Traits/altvision.yml b/Resources/Prototypes/DeltaV/Traits/altvision.yml new file mode 100644 index 00000000000..cb6c1bfa42d --- /dev/null +++ b/Resources/Prototypes/DeltaV/Traits/altvision.yml @@ -0,0 +1,13 @@ +- type: trait + id: UltraVision + name: Ultraviolet Vision + description: trait-ultravision-desc + components: + - type: UltraVision + +- type: trait + id: DefaultVision + name: Normal Vision + description: trait-defaultvision-desc + components: + - type: DefaultVision diff --git a/Resources/Prototypes/DeltaV/Voice/speech_sounds.yml b/Resources/Prototypes/DeltaV/Voice/speech_sounds.yml index c1b56dd28b7..89db03d2fcc 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_sounds.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_sounds.yml @@ -6,3 +6,12 @@ path: /Audio/DeltaV/Voice/Talk/vulp_ask.ogg exclaimSound: path: /Audio/DeltaV/Voice/Talk/vulp_exclaim.ogg + +- type: speechSounds + id: Harpy + saySound: + path: /Audio/DeltaV/Voice/Harpy/chirp1.ogg + askSound: + path: /Audio/DeltaV/Voice/Harpy/chirp1.ogg + exclaimSound: + path: /Audio/DeltaV/Voice/Harpy/chirp1.ogg diff --git a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml index 01288498fe6..9ffa21b8c8e 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml @@ -13,3 +13,11 @@ - chat-speech-verb-felinid-2 - chat-speech-verb-felinid-3 - chat-speech-verb-felinid-4 + +- type: speechVerb + id: Harpy + speechVerbStrings: + - chat-speech-verb-harpy-1 + - chat-speech-verb-harpy-2 + - chat-speech-verb-harpy-3 + - chat-speech-verb-harpy-4 diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index d636db0146d..72181758e38 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -18,6 +18,9 @@ - type: Tag id: HandLabeler +- type: Tag + id: HidesHarpyWings + - type: Tag id: MagazinePistolSpecial # For the .38 special ammo and pistol @@ -38,3 +41,6 @@ - type: Tag id: PaperSlip + +- type: Tag + id: Skirt diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 82df2c21e8f..13524efa9e6 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -92,6 +92,7 @@ tags: - Hardsuit - WhitelistChameleon + - HidesHarpyWings #DeltaV: Used by harpies to help render their hardsuit sprites - type: entity abstract: true @@ -110,6 +111,9 @@ - type: HeldSpeedModifier - type: Item size: Huge + - type: Tag + tags: + - HidesHarpyWings #DeltaV: Used by harpies to help render their hardsuit sprites - type: entity parent: ClothingOuterBase diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml index 0329f82b5b1..9a5e0211f36 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml @@ -59,3 +59,6 @@ - type: Clothing slots: [innerclothing] femaleMask: UniformTop + - type: Tag #DeltaV, needed for species with nonhuman legs/can only wear skirts + tags: + - Skirt diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index 623f7becfc1..c68075dc508 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -2,7 +2,7 @@ id: GauzeLefteyePatch bodyPart: Eyes markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -16,7 +16,7 @@ id: GauzeLefteyeTape bodyPart: Eyes markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -30,7 +30,7 @@ id: GauzeRighteyePatch bodyPart: Eyes markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -44,7 +44,7 @@ id: GauzeRighteyeTape bodyPart: Eyes markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -72,7 +72,7 @@ id: GauzeShoulder bodyPart: Chest markingCategory: Chest - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -86,7 +86,7 @@ id: GauzeStomach bodyPart: Chest markingCategory: Chest - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin + speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin] # Delta V - Felinid, Oni, Vulpkanin coloring: default: type: @@ -291,4 +291,4 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardblindfold \ No newline at end of file + state: gauze_lizardblindfold diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml index 2468b2c5346..cca16443e2c 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml @@ -2,7 +2,7 @@ id: ScarEyeRight bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni] # Delta V - Felinid, Oni, Harpy coloring: default: type: @@ -16,7 +16,7 @@ id: ScarEyeLeft bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + speciesRestriction: [Human, Dwarf, Felinid, Harpy, Oni] # Delta V - Felinid, Oni, Harpy coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index b17fb5d1f3c..b9ffd9ba0d6 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -2,7 +2,7 @@ id: TattooHiveChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: @@ -16,7 +16,7 @@ id: TattooNightlingChest bodyPart: Chest markingCategory: Chest - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: @@ -30,7 +30,7 @@ id: TattooSilverburghLeftLeg bodyPart: LLeg markingCategory: Legs - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: @@ -44,7 +44,7 @@ id: TattooSilverburghRightLeg bodyPart: RLeg markingCategory: Legs - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: @@ -86,7 +86,7 @@ id: TattooCampbellLeftLeg bodyPart: LLeg markingCategory: Legs - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: @@ -100,7 +100,7 @@ id: TattooCampbellRightLeg bodyPart: RLeg markingCategory: Legs - speciesRestriction: [Human, Dwarf, Felinid, Oni, Harpy] # Delta V - Felinid, Oni, Harpy + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni coloring: default: type: diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-harpy.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..8be453ab873feb1de8e22993ece1f304714e9fe3 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1!1o(uwW`{|JteoRHxqVTSn%jidgR^yAI_oS8GZpNuA8s|zoc1~M_UFvc zpCjBA<9)>Z=S|qurVTLGIrL@zTf?Y{T{ic@y&PN z%<25Gzsk75&kNLmPFFkaKAtB(z5c+_P5)Uc&dYRY z8dT5E4m$IKk%7N>oug4>_~S2zy{jq?1y6fB@xZDoCYKGHx%0Nga8FQ*Fl#=zoFHTZnfJbex1K6pATaP5JYD@<);T3K0RSd^_2d8m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json index b0b6e0a2b03..93d9fece1d0 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/meta.json @@ -58,6 +58,10 @@ { "name": "equipped-head-vulpkanin", "directions": 4 + }, + { + "name": "equipped-head-harpy", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json index ac71856cd7a..cc8edd38197 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/meta.json @@ -36,6 +36,14 @@ { "name": "on-inhand-right", "directions": 4 + }, + { + "name": "off-equipped-HELMET-harpy", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-harpy", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-harpy.png b/Resources/Textures/Clothing/Head/Hardsuits/capspace.rsi/off-equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..4c614ca87c7c004d76915f20bcd4aff8f7a66671 GIT binary patch literal 1181 zcmV;O1Y-M%P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1TslPK~#8N?V3$& zOi>ia&-0OCs)K5YMp8yg2%%Ifi0K9s79wo0@R1-kELaF@B0_?NL`0DI*svrM-E>5J zQ$jRUi=?S&M=?616CYRq_r3ePVMgz3=aHE6OJ2@B_ubrc&;Q<;*XeoGAH<{0!fO5# zM5MUi@dsGeHR9$HLEjRl{Rgz4FA|A_kk;zz6NY8A5W#HjMqWy1c(P~ZI#PHE5!WM z^XPU{fSxooNedtS)({E>PV{S6e#JT8%(Xkk^16-G_1Wx#g^zyO(Sw`#S^^le&KVG) zq-wE9CKA-z*g!QEahg_HAuW9L<37ekgTV$Q~4(NdSFfRm#Ur-pJM9K^S3m@RV+xS`ntl9tC zc--{XbSjpk6I_bH$)fO-TC4bGGe z2%$jYKqarpl?d2^8muNoP94#n$1Tp}oj8SXCay%!`3dmij~g%1 z6@XzFhG7_nVHhSa$@^b}TK^OLpJ4$ko42q4md#u8UVyBRL0Nkr=rKWC$*Y^}UBA4pjh3A$O%vgG^=0|K z07~YnK9_4y8|*kST9)9q+*xMzn#rp*0SMtALge=u^6K|TK#8#MR7e&gvD*NPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Ttcvfg^dr@kP1Fjp`j1eLiIsV#5`E~YKe*>`X;5& zfLLM8VXJqbCT&f%R+3F)U9>v;cXX70`|`!VaTl$iO!?U^(8+?jLE z+?{*VbEy)<*b726ZwX?kvEupHDOon+%O?fhOiOtSnEkjxq|<_>>iSoBN)|;9=e?Pj9PYg5RJ$s4b#?iE$XKtOX%LN}%-YSR z{-);V<~bJ6^JsK*l{)FK}92n-jCk1t)A*uexZk3 zQ*?j0l_hla<2>xxo~YeV0Ue^aP+K3O^om?$Naz6PVF!Ee zu)rz-z5RoI<5M$AlS#-uG_ZrcQmexD?g7u7|LR17<>E4nKnJjcy;4hJl>nfF>gmbE zmakpy;5EJd(;U=dI?ejy1CcDL`(YP}$UYlv6L3XIN{8;|U~%NO4FdaW5sSrCD-&$@ z+3er}>`dEIl)P1PAA!8l6~O-~{3nk>b4B$&kdI`1IEV+2LmRBDR1z2+)HAQ03>^9N z-4i^Hzw7Vyg{bB`K%v{&OoSP@UVYp50J}8#;N@a9VVeMl!{Kl^9MxsDy)!tfjk^OJ zj#a~&|7+0tzr_BpxCAJnn~Q<;y65uxSk&=_!OfyJR4bK2NdQPh_#+;xoT5azmN^t@aa^V>JDBn7-z|q%a??SA7+B840v;2f~&+WN9R4AfZWP(xwV3P*XsmaI=xAt zEdTl!Vb;M=Z;W=eZLy~lThG#;dve7`6W+PF}29J+oi75IMz=e7c3FF7E#0VbXHxK7^0Kpz$32c9o&0rk<=D_?W0dvC#leuq3Jlo)b zwP7(f-n%y_Ro69a!6t|@IWTu|@^^8or+`t8&$`~<1jiQUXSo9`|2S5$|5ZtVrtzWu z0xN*F`Aq?^4PH~|dUFnk!{Kl^91e%W;cz${4u`|xaFhknKbp>64^~p~M*si-07*qo IM6N<$g26$L!2kdN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-harpy.png b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..95b5e1fd7f3b957c34bda7bed12f0cdc25c916cf GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e2l#}zT3J~oCnrZnM!LAToHMrg?;pBCLr+ajtw~KGzL`+-*%_-!%3}BUa>Q4$nH@OPU&3_EUYb?BGUUZ8 z)#;Tc>1Xm8RbMUKa_;fG8O8~*acdod?77Ztv41L-GyOi(X^};N4`!S#HZ|;TQd=LE zu+^TgR_5N>Uxw_ijiv$5r!q8sYdL(8XT!>ix2)E)bU4Py^-tk9=gwiRPvG9xaHC0A zVcP?H&K&~JHC2Ue{>C3>o&3qhb)}AWL&k#Jrv5q$x^Bd;+n&wca9{uWZ=tDL1-#e4 zR?I(W{B3eVX2;)SmHObMmyvj6cdR4uvwwSJf-sM Vofl^#F9E}m!PC{xWt~$(69ANJ%7_2} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json index 855e3345c98..f6b86138919 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET-harpy", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json index 4dae2c687da..1ac1729cd2d 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/meta.json @@ -42,7 +42,15 @@ "directions": 4 }, { - "name": "off-equipped-HELMET-vulpkanin", + "name": "off-equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-harpy", + "directions": 4 + }, + { + "name": "off-equipped-HELMET-harpy", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-harpy.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/off-equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..fea5970d5d27770b67296281fef04b92dacc5233 GIT binary patch literal 1219 zcmV;!1U&nRP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T$a=tabZOe%sPNR6ICWDhI~yHF98q#ue1jEcI^2c^D*+7|;A1cUk#DHOeK zQl#|6P%Fs?1V)tD>!S9ghmf~z{&Qz8OWAdI-D}{?50*1CJMNkJ-?KaGp7D@DN;67W zWr-dE9(D|H{>Ft0V`_3T%}rfSPh0O(cUKp!+meUg!vg%n&X|`%o$YPB&8dG&5m0g5 zACW;$9+L*JsLMeCbALA&$iJDP__riL-q8}z;oVy!7fqNjk=xGBu==tN&=37Z)fN8b z|NG}p+z!RRB>|SD%`qAuwQyTlSV~^+Y;h(G>S#Cj6Q^83URR1Rkbi*lcKurtpuVNU zvvg4!)wgy~_U0_guTG@E{2VGvO63-Hv;*Fc_2(6rkp5>SC(*6idlU>l=k4+~L>=uo zZ`Z%&RRGF@7hSKZy>cP#?{B4|{%_o(j&>mXxecycb+Lw*cW>Lp?|T4?I>33m{%x%S z2(5yG0~F}ZAMgKsE%Ut!E9FTv9uzUC}W7cE2`4;u($ak@-VpkQXe;`sZi+=%2;epWQeg&c~Zm(5FkvY4w_nNPZ4rv&7i3 z!l`;Wda1~z6$kR(NNbeDghXbDf;%EpaB1psCd z0Dk$o8&8JdTO!8*-%8VNrbq}3d^y8(#jHUqlLX0OAkRr02IaKk$=Zt065&vY<?W^l@xv#R@DfB?>SHL&`#)dIstX9VnT>xBy9S9{EP7RM*B6|TkU%g?c4Qdnn z1&Tx8czY}dTiqA^C(+nJO${R5?E9SotZ{mPLsN6vluiL%?UWpFfG2KluyS>LL3 zPlopisyyPHEWeHf7)dDqzkn7%SY^=y2&*hw0AZCy3m~krXaR&(7A=6V%Ay4jR#~(F h!YYdvKv+c~`VD^_3znt96SM#T002ovPDHLkV1mdKFg*YO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-harpy.png b/Resources/Textures/Clothing/Head/Hardsuits/engineering-white.rsi/on-equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..614b148f17ac980596e87543dc6034d92ccc1620 GIT binary patch literal 1623 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 F{{y+NSPB3D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json index 7786f981121..1cfa2a9cfe4 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json @@ -1,26 +1,30 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite made by emisse for ss14", + "copyright": "Sprite made by Gtheglorious based on the sprite made by emisse for ss14, harpy variant by VMSolidus", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..865364771e158b9351af19fe71f688b6f7ea059c GIT binary patch literal 2258 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 g07*qoM6N<$f?dT_0ssI2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json index e482264df5f..ef5e62cca40 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering-white.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..2510e35db9f1d6d3582d926ab1c151425c2eaf2e GIT binary patch literal 2226 zcmV;j2u=5iP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2uDdoK~#8N?V4+B zT*Vc~=Qgb4jcn6AY!h5NghyP=BMAtLrWHt0n+O6@N<}JFDh1IBz8J(aQd>ZL=(j%9 z)5h<3g$j zGT=OV=ob@T#t-JppVt9D-ur$3(6KX8?>f9+N&u-I3O$cL*NHGs%*Fri3;X8HA1eZw zcW=J?sdP;JMBktst5#G+b=o;EdO^LIu=xReVBj4oBDoO$ITt~DF4>(j-)dLZn5tz- zGkz{((nF)N2q|HPhBrup$r;(+m~ zgy=P2xx$G*Zv<@p_H|Mo{VZ5yf{q{jUe+cCO$1N^+BuINU@>~_m&eTI9Ul}l6`tGl z(hS$rPXHNwWo4yVzI?fy2O0r@cFqTSBCFl`kk9YgIe-4V85tP~C1b9*Bdi3Vo%0IY?zxcH0Xpw*T$6py=8FLI00y*A z-)o+q*eS9rxQ^=wPNxvPAhc)f2w>{rAWEPSz!W$V*sJSBKFsL=2CjGY_S-hZiU8Hq z1!+F87v7*>FHQu&KOM+oLvZ9n-UtA6dUew`q6qlKk80)4>jH?Z5rAIggy1N25$riU zu|)d_`K2H3bfT(GcpHAUQA%Wu4CRlDIUT@)rh|WB_p4&eul|ybqCmqRnRd>jr$*?4 zSO|7M_`!_L|MTCzEbZKBjRNJj+t732&-*Q~arY*_uCC5xG8qZ6o375j2iT829*aDd zj&u*pJWM8&qCYk^W z+F_aZ3|bFl+HK5t@IbHE0c(Bf(xp;YAkz-eqaK&v*#W#~x30-Z1dN=^euW_y`~BYr zchvLZ`4T+*b7bx|C9*ohmES2f#<#yd_gR7aQsbtvt}1#L zpw0eKQf$D_v;#FYHD+{lG%CUJWyYD`c?vK{j_&^Kic6_&3jqenp@XK>wn7lw0Y5qL zsK2YN#c*V1DtY91Jw>)B zKl|!P^wy<7rk(TX7265)_dx3@;rRRURblIF(9U`ET=?^@0d$s5U;MJFt*td(U0tT5 zqeHH}{D~_}OG}HtZrwVQtM|&Cf0*}rVDr-_P<{~tC_k`u4u?1)B)z%eg8ULASz2mnLbh)(`x6u!NQPq5&8yR5qn$I% z2j>W|^X@Av`h~c$KDpo#04Lno@Y=OIWiP_(&m9vTm$bZ71OVnePJn!9vO(?ucjJE% z0dQjjV9+w~U_>Q}fP-%gdVBwsl=-G<@BfzwU@yTRQ@6{p_fQhG*yD<=2&Si}qq)y< z-TG~_B7k)H5ANO?Y8M~(-@PSD$!i3t4Z0{}V{o%#KZ%?iFgZCH*0LZCty2MD7;UA( zRZWe;0pNrizL{VcdQ)<3%!k--g8cn$Zf^ETN$=S5Eg@zv06Vt8LtCoN{tr{;-~FEH zJaJN7!0T-Nb18l*jii!%6UEt(^&dyHpEKacTMJAiA z9XN5stX@?q^tdychjt29GrhRxVOSJ<*}fD>+PP`J*2 z5ZeLGYp)7kTx+57hU9;^Q3Oh#mT@TCGAaKQ;THXvgYwqc`71jKfLdNtvn zkDkSfTzMgIDI2g2sI76}ya;BdFEbBqtv5@O*-cTD$k(rL6?q{5*QIR0Hdi=101Tf! zW5&nFB`r;f{M~B?&GzlvOZO5G0uHz?WkVrwS_DB;QD$}eoqxD~8Q@muvNyoyWAL^;y}i8-i?A{O1tLVA2$BjzcK`qY07*qoM6N<$f)Yeb AMF0Q* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json index e482264df5f..cbf3391af71 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/engineering.rsi/meta.json @@ -1,26 +1,30 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, harpy version by VMSolidus", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..38403243634e396c1de9c019fbf6df117c2545ed GIT binary patch literal 4020 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json index d977572f2ab..0261a0564f1 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/luxury.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..2d682adeae078ea1290624e14d3ef56604d56c37 GIT binary patch literal 2074 zcmV+#2<7*QP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2d_y)K~#8N?V4R| z6-5-sPx&lRsx<-$lv+W)CDxz`fd?^IjWJ4_@Ip*Pz$ReZAi)4NklK{UM>I$%YJymN z@kNnRBcc?+2Lz)eMFc68kJN%G7z>4#LM_+(o9@|cuch5-@0LXOpKNB%%-s2(bLPzK z?ma6ZLWBqrB1DJ~A^xXGaLO)GQc@Cess?#^dG2pJ>x(C1c{)NM+z^ARsw%gnO)qad z@S~_LVtMXVx8?5Rl$~PKs8MqI^l2GCe!P^GmC4DICrz7P$h6bXINIU~jLOW+bmxbU z>(S9EZe8_boQ)H@bU@a$QIQK5E|@w-#$xj1$@1wRNv70(#`8NP^bk6a8c7L?@)t1Q0{;|b=|xxG4U9g^(S+MKTaHvF9) z7~W9QNuOF!U_u<@6&OF`c2&DEitZjt#Z&H2NLljcZAUb7|9U;i)bsQ6<-_%>O$202 zoFT8QS}R+&Y%zV4lCE3vcNqb>xw)qNxqhHKv3grCjK?YTGY;tQx{Ea@{xr_lc`!aP zF;P-dQrt5}BLJCp`qfE(`TIHL9pT;gcpapV7$WH-2b(%Lf3Zo<*EO~Y1MV{g`!OEy z&ePo7Y_5;j<{3G+u|YDTC33xExT2%;sw4Q?0)!t1KlIE}*ZbZrpa&0;@!Qv%jYBkA zdU9Wm2c#@4v{l(GN@EmQvZUVT0VbaYLR=i!O!*f2W$XZ11Q!B zvBq-}vrid+?b@{-JAe}YOP4Mg2M__&hYlUuj)yTs01i-n{qS2mfO{}|&OP;`z$%{)({}-4MOy zsqsC%?{@|kAR)n@FB!*pzp!?|l`B^yJ3Ctn-uv9hl*qIPiRjCo8{VuoVD$kq?esIw z23H_VnboF5R%h7qTPc~5dT(UT zqNS$Jek?65mF3HqOH)&mY1_ShvsBhziHqSK0e-d}NKQ_chK2^WG;O#3vgWsTfK!zl zLq-@+6MBOh>zq~z+yPG2oIeT-R|LkNm6a7ac<^9k@7}$U=>5OlMnk5Ze#SY?aRu|% z)YO=Nd^+N%oqk(>Uxy%*E?&G?PMkO)#l^)=YkSa6KjY%<1m>GRf4-ELmpd&TgMP-@ z@OK$5Om_M5Wk+gz+>Ac`{p)wEf69UBk+5FtW@ z2oWMgh!Fo(SU)Q6+O@00=j`n4>|TBByeoR}H#x-Kd^|FsypvM#gz_k7tS)}D!V2Gi ziFqg1JUu0#9(`#s_1*wnnlg*k1=u*jw*xYN`oWaneYC>l-IN%R8=wuvf{X&Q!cmSF z->-0!F={;g=mu0*Kk)4U5|Myxi#h=%lr;J}>N+GyU_9WX47k<#)X@#7u72SAz}On8 zjf^b&(UICRvYNN^CQU(52a!e>#*>mK5eqPU{^}A_2N$y*m)wL@UpiPvfbMmS$M7c> zZgkURdIbfYzi@V%;e;C$N5}c*_k9Q|&bJOTE06JfGe8I`yov<{F9+P{fG+5yUy0bj zIs!;b_wC!)q@zej6A^%PIhkV0pt3V$hLnR6U^GclQe>^IttM4&69LxX9N;2vk3$X| zIN*Mx3-rULAmHVI6K-@s7uCxd>KoQu01qoBO`2rN#>PgI6(U9MJ(1%L=7s|S62rb{t7tYf)j3ZKo@jEH*|D{#uqzx?lcp#-*)WS5z$mNrC06^ z#B!>v-xH~>eqeoCLgqc~V`XPppopgq_J?5dNO^T#sSJ5wiYssU;r$fo}si;DQrwbU+t$@}}qg!a8Ij zB=-(@`|^_V?STF@6@6Qb>vmA*cE-uK0f!D9vfvf@2QsLe86n09)c^nh07*qoM6N<$ Ef;rgbD*ylh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json index e482264df5f..ef5e62cca40 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/medical.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccba9f1fca4cdb516c318fd5fd8c6cf15cafe3f GIT binary patch literal 2577 zcmc&#c~nzZ9)2uQOxP5{8X<-R0x@|3!j>k;o&*U544aA=lK@Z1(&PaVw4zwly1<|! z1X-$1nTqj2xASmR!-eW$0y06zi5cw+=yKqHs6kt92Ul_?ec=^I7#_lkd{~1&8zE5Sy@C_ zf5;IRn!K_wIkV8$*VoXyI+jEt=GWth5ng#(j=|zwT*RV9i{8y#U!RoZ11=}{#Sxcs z$@ByUiNrNnXqbWS?(RV(5=B;@n~<;=X~b|Gahahv3rb9kqS0g>BR=rq7!rw1BrjzM zO)>gtNa;oON4E-o%^Zf?%b&OSaqfq{WePEJ8V zL1Z%7!9B!_!eKBNVPRn&9v-2gp;#=ILZSHi`Qh<+PEt;IY-UJEh<^yj*&}G-!iBtA zy|uOV#I@9^n`vWLQ~4nwO9YCz#Py3D91OQs#n*Om#w>NwYzjlbd2Q*dY$SjFHHXc1 zbab?`U+PVZCy_{=o}THVjo#kgyyUzPc9LJ|v89_@19qQXvc8@Ym^9Chg7{D9pX@}s z4RA{0iueDg2K-(4m9a1uD7l$x0I)q|e9Y$WU-1k8EMQ2O0cY?Nm|}&DCXy)DNog9H z5ph_-KVniVvpIX>of9 zk{o7AOx$cbGGY_*U|7in!Q$d#T5%vvp~?mQk#h#=0boD?6+uwd8|1J^LzSz&K9J1P z#7Na*6{LhAg&c3B6|GYg!fXPfz$8r~{z$DXR27(rC1OxoAeBkwup0EI`5V=murQSK zrx3Y%)-1#}&^UuY=^vpyB`jtjCd6uxwPvLwBE%+sH7o(=0Kfn`J(Nlhpaz72e@I8f zOT161e~tK*>Cbgj@`Wg(kaaE&I#) z4-6j+oKsvM3fJT`Qn|>81%A8+#?i;CB$XrgM}=Gzz^u9x`F-}|#Y74-IAb-xi66wc z^!z-;*3;z9%UNefN?Omje5upgNRLo=W&x*l|4go%P)uL(N0Wb@+H^llyS$(LlcK8y ze7v!#x8>mS`vaJpn@8FQU9q=czwJYT$I`xDutSuvvKzmz$Z4`V(ie3)qYpK5yY3+6 zNm|YEbSGDni z$8dY6n+n}J@Ay{`+adJC(*ixJ_Y^In6}q_hR^UJpzprp$!@|CcuRrK+`*iU1X{)GH6;oRvttZpw`n5BS3vL{st{d7gsIg5rRVe+1RsA!y zyFYl9uBLs=b=ByD67LJ~+#V=vTy^D+e$-_Cwrbg{d?Auo50Jx;hne@7@_ziJgO+ctKrxP`)g`rUBq`6*jhy}r4lzw)rv z^ZD~JaaD%$j9bZ@iBjC{iOLH66Hmk2w#p`9#fUj8^~l2a+bZLx&JXz>b$&g3B>f+w z=EL%tH*ZeL8h)qW5oe4IJRC^Kau8hhYI{+AXH8EFJ?Cs2^ql&=+HC5}!6&LEla#FT zolsWC!*9&Fb-xOm1x*`koBQ+~L+yj_y{Cm|lk~aAVj23E$2OszFju(MVDGrZX6vSt z`4zMsX-j*#2dy^i(<`L9nCw<+jKf9;-O+jdzo((p)8`t-v%N!|hqG&>f;7LA!67!i zFAbL_Qp;X>?bw1gyARI9##?81eOKx@q(xVCSw&nlOjsJK%RKM40{1MP#SgIiz9VIO4W>4_&F*R&+MZt()493-f;>Qm5&{_SRXrrZ(XEbI z%KfxOZnkf#dGyfGJ@A;)7#noGz*X|AYS1|+iM6y7i>;GTzNp9pRpN@#BdCs>zGbAM zgdHvX$YdqMYVY>oAF|)|RG*w#YgbuXzVFmRqK^+*1Dq4|2U@v%G~-#x{SIhz(E9rD z66;>e47bX1foB=5jA+{vJ#Sig)4H=_8n@lQsNrxWF!bhyy$73CXMSi~PvzQa`tF}W z^6uux-V5~UzR=&!luEt0HzqQA(tR;ZM@xg9R?smLmB`x#`Rv&W5L*U!rC4CY1vHF$ pwPS*2QgUw+ulweJBNoq_^wHNd(WPV8FvkC8UTk8_iKw+({|!|)D^maf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json index 31ae448b3ed..64b98f1e798 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..229b19e724d307cdaebb1acb4602fb26c6ada67c GIT binary patch literal 2338 zcmV+-3ElRIP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2)9W@K~#8N?V5dT zSJfHEpK5=!bWmD(X=?`yFF~kF1&nrDM&-XdcdCqfR&dF%od|J{OR|IL=V%z{hnzk4>K#-;_#tjgpX^U|K1ZmpB=}qwQ zZGZOuG5Hm_>FQ=#fAd=zfmk*isPO*w@ie)i<6H8?y_G}qs1fF0bJwy!Dzg2xeR8U^ zNM<&!apt!+z^l6&ypmOq%IgOjguyPFTM*QU9652uD0Ropv!rgY4O%E8zGUuz1cVP!)x!BUsgOJRf|M+9uZl%ewoyt{I{vgomSw)KjLGM z!Ku5QZ}JHUJ}ASWnF$>{a-i+FkNcBBn4iJtWM|2={5-??%&{#}_WLa+W$h!UUX5hS z@BAJ>#GO9fU;nIqKpA!J|f|GtK(f3#goSwC6qzh+{>VfA8CejEtG)I`GdU z<_SQmGC(^Q{t+L8Q)&uj!JN-|MT2X-yQjyv*yO1*Ox@yng(d~>9QXU^IDgix!<>l| zP5ZWvPC5AC!7)Du%bqJUk3smG1`QpH#mr2TpE7yUFdo`qgucE$legt}ehM(~?(S}> zJ$ll(7%AnjK|r#D2YSB_So7IgSthTbj2zI8ye+@80eHTam(G#i-d^Kkq?Gk}oeD6c z85wrAq#f;T;cNgNFT7wZzp=!WNhwG5*!yqrJa5Rod*lA|9ybS+kyB4Q7mOMM0C9kn zHMq2_)X4t2|FC#{amk2f$?Z#*7#RT&CBTO#|267&hAlJ}09^{WcwX*gX>IQqCR5lh zKPv-(d9w<<;(~mM$Nd2|w{{K&#Y=-h?@F1L=PQtv6_ds@Epoi!j3JN80E+83U*~0J zW}CbYUQ^KD-z$e|-nCmR0i2cqgJa-a7uq`IVqd>WRYrZP!63PG(4;CG3#<)LFms-~ zSW{{)@)z2=GEO}9VFqbpT`KUMw|?N!e`Q&oOqev)EHS+(Bd4Br!7Wy>GC+BGxwmn3 zj`8DeyrIbvPgY75f08E znKArN8X!tIzX<)mVcY;gnzk4>K#-;_#tjgpX^XTsfc1;eeQ&PuUS6@?yn=EbfXzq1 zeti^sfUa1%qYBOe&LjXfQ1#40Sl7|u>;VjZ&goa=&Y9nr8*krc_5<0&3-9Bl8gMO| zTQC4OI-mX`&|L8q}8 z!O8%TKKaN)X6LuQ?Xc|5SztbW^{_K(@H{)Vd(&?;0iQfo{NMGOP^1@e{V7*aOrHLM}j=@9|XQgV|4;6fQV{ z>JiorUD4SFRt6xVatsCNzB@z&A@&40mSVFP9~Iz&6K-@s7i79O5$I|)HtQvDY{MsK z7|Z|hSdsY)W3v;REH*9PYSuMeaKf!#7zVlyPFl1vVA-=(a_DHiYU-x+i~S)*!@sPT;8*wtwQMWfY)K`UY^p2{$^ZK6*e(b+v)D0Tj3x>r4+U{Nkr; z<;6`uHZDjMMv+v3zTtoiPPhTOpi|a_38w4SzmR4`7WcHa=1<&F5PrI~EHhmk)5ljSh;iZnm&CK;ll%GwW-lyQf!< zy!XER>5Vt#p4E5BYrFSIXIFR7B6`p_9B{!2H#(q87%sa~*8c+tLUc@^VXbB5<{SAf zrL*Pjqo+(Buuh-<&92BdT;PA;+p9c%0)a4hyuHPE0OthRs+McSH~Rh664*;np%bp&Mlv53n`>9h0&TkK1+i`s?lW*2m>STl-M? zasVzk;np%b=@|jl)dtQ%@QUmyQW)PWR~5}M<>J{3WK#2AWNyjzrhGX77o2bdbU`O{ zbA_`306!p_nwq4dqQWDk{BT8=R904|>^ndK2V9?~!&u-H1i}3I^SzQ1|AbgwU7Zva z6-j=+9}p>P-LETNh%^@Hp@%R>OG}F}LRg>r`g+4_H!hL?0B~rZpjWtFqyPW_07*qo IM6N<$f~cZ)c>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json index e482264df5f..ef5e62cca40 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/salvage.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/spatio.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..43af6d982d916551a39e02afd57c99a0722a3439 GIT binary patch literal 2376 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json index 40d49ce92f7..80c2af9eba2 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6a1dabfb68e80fcd4020dda7975f81381b9c77 GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1Q2l#}zCNVSDt7~Vvx|=AeT(?m7ceD((wAm`hm*?rr(BQ!EpJBbZ)luJI z4+BGWb#)~rC4GH;3k!>MoX)JY%d8 z$jo`nQ1hUHPPU**kC;M_n4E@`OpUOTq=0xNGnc87YO=Gt6BD0|kTB3KRkQ2f0V&;* zAiv=MBmjn`@45d1HF6esL>4nJ@ErkR#;MwT(hLmD<(@8%ArbCxr#&oMtRT|rsIkPC zCHM8aZOc5jvdr#%|G%bsovZ8Ow`bm+e>=1DVD-b#1*t68{w?0e_+PPMqLX#To~Hp# z|68Qw7j{~t`%IAN{>6LVDZc2a3iF+ivmkt+^M+xWufPx%s*Qb4mXJZ#8!5#&0Em z+~xQ#`Es!r+O1+de&->>)&;W#-n%Y5=s4#+oI>yVh{eZ9%< zvg?ys5_>`2WdVmny0VOaL01IxgM!9j9!-}8oy=B| zAI{4rgfBiE)ZrlbfbZ*37W?uBz87WUN*C@h_G!+yK47-@9Ye!iZxmTT1)Kn4}_zh34yXLgj#Im;=Uaddn&a+*P9`Z|Mz2~2RrQdFa=CgypYLcuypOK?aq7S+1|W9936YJ zvr*y!!wSEBEB8dRS;U+E3t@cV#L*>d5j<~Cb-d(#!FzMaTW7e07-%L?y4E#h40F}*u`!W%usE8B8^v+q5k@k-*;q@%!m$>8bg=d#Wzp$Pzz8w-B` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json index 7863947d1cc..4aa4d60ccb8 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiecommander.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} \ No newline at end of file + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..01080df27ddfc2c5e68ea64ee33ef9c8983eccb4 GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1Q1o(uwCNVQ-y1IKhTKGF!nkcEXwzkfkIrEjO)K)pZdUfqBTeh4#ckcG> z+o6^=>&>l>`UYROP?wUD@-Q$|Qc}{_*H>3pXJ~M+u&`kG&!DNPX<%R=EiEl3CMGB- zXl-p>UzD08r>v{1yI4~4jIl-_Gv`4A9Std&9x;V%L6v}j02v`+phJq?cbx%JIwe7V z!T*T|49Bl=_5k&97I;J!GcfQS24TkI`72Tw7?@iCo;_Pj;F#e#0YgRc z2{UfZ%e|9#_ua3*`|nqJb~a7VJzxCq_2uuLd(QCKv$;rK{O|vl^-m?k#D^39nx{$a zJ-I1IcwK$4phL$Tv)Q~GryQK*<)yYh=E&Z@>q*fXu1zUBZ|e&_sSEeIv?Mg}$lbQ$ z`|^FuojNBcFj(A3GGypc)GD=-YvPq+(CKSERkF}n;D^kb#pimyxuxG)@kryCh<;;cJ7?HGS#NmvDo;Z8>#WzdTbQU+pY)&O!~4k#^;4dd@Y=YDy_L?M>@LIn;m=w78OLvkalhBH zI{sVg-TSVltKTvTjE=AUl{v#>?zVlJx&9mLSysG#_`vp6L4?YJ+7Ie2j31tu?(8y+ zI&JiF{xSUvV9>eDpCoXm`=M~>S+8mVv;7Pl9QUuTe^|C`{f{R`B6;t-7*)32 zSornLWV;TJ3TR?u5xKNe=7`)32QT>N!PrDvyJ> zPQV<;=TTdhKgsoF5$9OjeQUX7#JgX7|3fR&kC*8-?|c2=czq~0qviwAe~*+I=GbWj zF$LJiS%2N*_o6HP>fV1IazV2WUKXy)&%gV-dV@<<{rh|O-Z2KU*Z$YfZ!>ptUAl=E Qm`fQvUHx3vIVCg!093;!xBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json index 373d282410c..90e3c14bb5e 100644 --- a/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json +++ b/Resources/Textures/Clothing/OuterClothing/Hardsuits/syndiemedic.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/meta.json index 58442928cec..41acd5c4fd5 100644 --- a/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/meta.json @@ -6,28 +6,36 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "icon-flash" - }, - { - "name": "off-equipped-HELMET", - "directions": 4 - }, - { - "name": "on-equipped-HELMET", - "directions": 4 - }, - { - "name": "off-equipped-HELMET-vulpkanin", - "directions": 4 - }, - { - "name": "on-equipped-HELMET-vulpkanin", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "icon-flash" + }, + { + "name": "off-equipped-HELMET", + "directions": 4 + }, + { + "name": "on-equipped-HELMET", + "directions": 4 + }, + { + "name": "off-equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-vulpkanin", + "directions": 4 + }, + { + "name": "off-equipped-HELMET-harpy", + "directions": 4 + }, + { + "name": "on-equipped-HELMET-harpy", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/off-equipped-HELMET-harpy.png b/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/off-equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b4c824221b8bf50d91e48923a5b4fde9ee6dda GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz*wH?>>S|f?5q$_l%JNFlghxL zaenH=z21i%B#zCm^H>^YwL(E@#=e{vX!J~iz zf!IG%fA~v8V?N6wEdmNN^*bH;xB5m|8Zarr@;`E!@i`jT1_}A}Sgyl6b9TR94KIa`XMZl*`*2xGE)Tb*~&a8R#@~PhrsN zE1^qQO1b>EjL$1a}zR{>Syy zh8eXUsl-;~GCH6rLw?xf`6g~5$47&T5F|J?kkk9yHH{&7gxUjXgbM7$z zJ^nr<>a%aWfLT&0>#8#+*#)!g{ZOYB&o#B8wRqxCKF&u|6e!A}~F8dAc};M7Y15b~mrtfT#6s zOTvx#-4icdcaQ zuiA!|iuPyD^M!u@In}>0KIO&7>@M~y8J82!#hH~J39>0G8|Cs|5mD-zbb2?RM}onE zVJukEp9bhd$1jYa}O`P>|j2^Zj!z`w5{<6^sU%%wG)x z_`Q-Qy>@V4EjFjDfw_URYxUKK>)&&1yVJFVdQ&MBb@02RNT4FCWD literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/on-equipped-HELMET-harpy.png b/Resources/Textures/DeltaV/Clothing/Head/Hardsuits/Combat/hos.rsi/on-equipped-HELMET-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddb6b20116c7192ea22128115f8c877bc9021e4 GIT binary patch literal 1431 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 FV1o9hUXB0& literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/advanced.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/advanced.rsi/meta.json index 1253f8b4e63..4844e816bd1 100644 --- a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/advanced.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/advanced.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5a7508a9adaaa0cf4ee425851af507f7b06b4d GIT binary patch literal 1409 zcmV-{1%CR8P)4Tx04UFuk-ba9Kp4iKen_QOI;bEbn4yY83q?U3rGj0mLtDYBOL9$GAxXm} zMT)E7;!to9UHlsS4|Ek=6$C*MMBLo{TBOAHnnH`{;2oFu$8&jJ?w$ku8J!t+FbNo@ z!?Wp>v{YD@LN5qo1R(@5AT!&V&&}oW=lHyXPt@Cl=!O4{o}y|qz}HPY#Vqa+&k$$U z9ZT>waX%}|MdCx^IHv;=UkP3D_*rnt<9ES4pPi+6B8?OzD5zo$IvgaZnv~h^zGTz4fC_mSeJ#|$$x%X?ym3;i)K#Ub zk*?CzQ4_iU%+uB;C%o>F6wvkLx^JUEXa{K2UH9wAbsNV(;1Rem+x`mWH2pz(y{*L# zfaoT0cG=dHUEq8R7<{l~E;pqBEx)D#uctt70qDB{!Yf`@t$m!_1NjYlqHADp9~h(m zqpRP^u4nP+sZ%rn003Z6OjJcIE-)D#CJ+-DUuJS4Cp1k_S5O=su)WGJbhvLlL;#=2 zDKJ4~F*H~uC;+kGIz2-nCo=$$wjClZC@(%QI7$HM{{Wr;A}KZ~Fh3U?BN7%J4iOe6 zEjwRkW*#Cc0001>A4UqT+a?v zb`rOB;`e{cu87VCA7s+$-|Wm8p@p^hGCJD+6W;>g0)kB7Fzc%D8f&d7`K(t*)}pi) z)`zQr@VzmnFZtc1&XFNB@P=GPA@RPa9<6fzX3@hVn6B$C7nF|=XNA~ zT|qcE3}mi!?k_w#j{b=Pgff1&Fuq;|V98{ZNc?~ZT*==Ah>SH9ATTED9D?vM4*n;( z7;}CX=!g+x2%|SW->(Baahg*E^As~)4SIeiHkOFIw}uhthkpk=F~$)Q1eDVJMriTk z2+NFRxOgmdRe+}1kC?-G0{?Onz!Aao;?DXA#m_F0S+NrLhv5X7y_&R2Jno*U+IdcRMfudgpZpTD+nC|ILfM<>~ z3o}QwtqWj>qQ8T{xxXk(kzXP3%5ma@F9a~vvVwJidD#V)j4uVqFg9630KxM#rDsh5 zF-DxYUpQ$oi|_zr5EC!*$oWG6HqOa!?1kKygBbl6=7KK-FoZuCLQ{Ys!6!beU>}p+ zund*&k)X~WHrCG}dif?)6&n0*A~L~V-a-9Z?5Mr#pYSd4Eg&ca@MTx)6X3h4RzhBp zV}cYyYgHh>XdWgxEddv2u*Dm4cq?~Ds2?VnssH&68Ax)6q|gw+_vDJ(O%81pGz=Z} zNFy4j@yVipN;294lBQgZeNqo_A3?xK)N=xj0|wcS0KrT0f%{h-cfjSG@|e~n;?hsa zNn60D22Ftlx3=7EEd}xyxqitl>Ja2@*OVmSUO30G7C1<{Yxq@Pk0n>j1?SAB1NAq=3V^#-fv!04{IzHSPYQVDQ5YuXP}A z{Vpl+7X;{CtAf0BN}-LzpQ08LnPu8QErO;3CgAf34ydPqQUdjC+qV4$(R_-DDZ*>Q P00000NkvXXu0mjfKJtEZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/meta.json index 1253f8b4e63..4844e816bd1 100644 --- a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/corpsman.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/hos.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/hos.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..c87fddc15feb19e2cb35b37f757a40bf5b981f6e GIT binary patch literal 1414 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 JPDHLkV1j~3b8r9v literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/officer.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/officer.rsi/meta.json index 1253f8b4e63..4844e816bd1 100644 --- a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/officer.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/officer.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..16687721a7fa4c1a40f99c6d3f1938255bfa4b37 GIT binary patch literal 1375 zcmV-l1)%zgP)4Tx04UFuk-ba9Kp4iKen_QOI;bEbn4yY83q?U3rGj0mLtDYBOL9$GAxXm} zMT)E7;!to9UHlsS4|Ek=6$C*MMBLo{TBOAHnnH`{;2oFu$8&jJ?w$ku8J!t+FbNo@ z!?Wp>v{YD@LN5qo1R(@5AT!&V&&}oW=lHyXPt@Cl=!O4{o}y|qz}HPY#Vqa+&k$$U z9ZT>waX%}|MdCx^IHv;=UkP3D_*rnt<9ES4pPi+6B8?OzD5zo$IvgaZnv~h^zGTz4fC_mSeJ#|$$x%X?ym3;i)K#Ub zk*?CzQ4_iU%+uB;C%o>F6wvkLx^JUEXa{K2UH9wAbsNV(;1Rem+x`mWH2pz(y{*L# zfaoT0cG=dHUEq8R7<{l~E;pqBEx)D#uctt70qDB{!Yf`@t$m!_1NjYlqHADp9~h(m zqpRP^u4nP+sZ%rn002l(OjJcIE-(-i8DC~{O;J}F9VR+GLm?+L&&ygVFhT$Pp6}{c zA}28(A}T2_J25y$Bq=j0FgzF=A`=!H4-pmb>R2Z&IA3OF0001FzVMg;000HHryG2p41yo_e4c>U*uQBmO8)eK=tDr7 z3(2~B;JX+dA-EVz-a4wAF!OwdrrSCwAE!BoFi)}IcL8#g2ruw_NAH?N-1J?Wlq0%=ZhPRh)Y zvCjgeMmGZj*ZHb2#q@!|M~YKA`AR@!NCOc(3e3wPuoV0?1a^~#@FalqX`1r&NdO-s zOYohAh=qqI5}pYRrV3n)qfcG&%sb_3NxHOX3_ zn?3kkBQ()<`pSMj3wlg=6=(%vh8uE$5m0CeFn`QNf>|!ewZo_i4FNE`iUhMv4Ypr`~EzRbi|)E^}%QpgjZ@YobsmlS_Fg79XkfcM`0ifLI}0^7R&jljB^ zA)^wAYhttE>9ar%p-+_qrGOwn26dY>a==#Ok3co+gv8b5V)4-dbwO)Lx5jFcwLm1X zMSXLAR`6{3)Hscs*19TSw-0y;NLj#C-sr=9@7o?gsvFfLYZdB&*AQAc&=7Qf(}NRc hsbG}CEZeqizX2xH9gqBlrJeu)002ovPDHLkV1fmhd8_~c literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/meta.json index 1253f8b4e63..4844e816bd1 100644 --- a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/riot.rsi/meta.json @@ -6,21 +6,25 @@ "x": 32, "y": 32 }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-OUTERCLOTHING", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-harpy", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/standard.rsi/equipped-OUTERCLOTHING-harpy.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/Hardsuits/Combat/standard.rsi/equipped-OUTERCLOTHING-harpy.png new file mode 100644 index 0000000000000000000000000000000000000000..1af2f8defa69d95f6e75ce122c6a42bb0114dd3f GIT binary patch literal 1339 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 KKbLh*2~7a+$(4Qp literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_default.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_ears.rsi/harpy_ears_default.png index fa27e2b74a63f4fe460360508f78c5a595514d0d..00ddb37abd93a1869f7bf05c598a5b675368ff82 100644 GIT binary patch delta 626 zcmV-&0*(EW27m>S8Gi!+005o0f$RVP0e5LbLr_UWLm*IcZ)Rz1WdHyu&y|tAOT$1I z#-FxIrB*tqAmWgribD&oE~nzTZahD(YRSHZ=h;2^sAHTWOsD!3{L zf+C2xx%;(9iSIRq7SX{w?%p3y^1R$V2lz8OGwiMeV3-cirhik?QejyNz92+%5R*vC z%(mupb9wwZKJVZY^)@bg;eVsIsM-wh^$<@ni#xefp>43yn zLRUO~7F_c9T`#2XU$cX!s{MR z0o_lo`!)&$cYsFSb-#{Ww{Z*v9)Sz9?XOTy(;uYQ+gkJhh-?C9mu*ei1@@pFKdJ6Ovfc_gGwBlve`i_%(AiqIRbPeq71Ak-me`NI=WnpMJ`QjhK0000C zP)t-s-QBvcuYbV6jsO4v4bGBa00004bW%=J|Ns90Kq{&900009a7bBm001r`001r` z0jlENk^lezhe1Fbo5m^#6aRk=hba92FSo;F~N=PO!PukL)Dysz?j^ zFh=*NKWnq-$VH_m59pmtw1@B>_5N$d^Y|Y0UhoPEC@?6Xz@UHvV=KV}7r0tBfTK15 zmJ|i;gJzf;BB3bU2UX^VNKnc4!KI72y|VPz85B@pP(Xn}!T*9<53^@4gH`4zv;Y7A M07*qoM6N<$f`@h-Y-ulHdG ziDUD(bp>h5h6og%2spa1H7QVLX;bVf=jem0yo-FJ6g>~Cx^}I8@F<`_Aoh>cAN~^2 z7*Q5SL6y$cqZ!s{VK1cW?{ExOx@vV<0@nLg)4iW`yG`fv$P{u zC2u*FsN5_vX~Kd9O};M*1QurnrOmDV*p@Gu`pMu|)QYCbi#voW7cU80vDzzCId)l?tJ z`JwECPs^5SvLCprXYecMWK5n1V^p0lvz=bUK^ub-ewOQd*Ub7~_>bkuwwImn8V)Nb zO#0St{*NIwF~ic=txpjc1)K#Qk;M!QddeWoSh3W;3>YDLo-U3d6>)EGo#t&e5O58g z%%{;HDjK*_JIR%Cii5aYa&b(&F{EOPtRrh_ozPJ7V*B76*r>&{weRj^kf7a7;ay8uyOdJXg*a(N@M)Qp` p*LAZ_UY8FHPQKI#&op0O1}z|)1BgN3Qt)ID<>~6@vd$@?2>`acOk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yPMjEEWt9;bS>)qWR9>DaD5wIIDb#n^4W!shg8YL2g8_q-H?td1 zh_k>WvY3HEPacFBE8aE60|hsDx;TbJxWAotk?WWOhg)#;`~N3`#hslKKivOY!=Bap z?!mRz-ml664haqnjf{*e$M$owy>!_-+4kJ|G~vzd6-^~VX#`ugtArf*m81luh5|2KQPJVb(F##g?&QUS`D z%BgHB6gqog%^lPW_WImNVbJ&S!GndJJEulQrZlY#?zw$^EZkOlZn`U!o0;p7GI zJZKN^bVH%=)AU-gYHk0OP-xYAMq$F6$c|{(s)dnm6-l^JvjH6nCAKwegeQr|6iL}I zlkCl}FR+ZEC)rn{Ss`l=kcu%p>yZ5HXaUboVpV6iz0kKh(a?aQMm)qcYE{$K8c8-F z*5H}Cd6o$v-ei)U$mW;<%OQ*$mcs%!*f6F=7DyN-;pio8JiVhu0#=f(c%H5Cyzl#A zUkY1JnUAQd$_pYdiX0#~cgFNkgEQTYO_CN(nz-08Y|pSvhSH*+1YF-(sWxrgl_T;Wb=`*z}IRWwCfE{ z|Fh1LXtyw96MmeyR^7p5aGIFj#`a=%weEJWRd)$>1-VxB5)WwxE4J}NnQX3ur(G)> zH9J64WE-X94#uuK)!@C3c~T`cSlk81NCyjX9q^LrQ&Q-NmbP%6hG)`AmaeMl7B+M( zc$B1=u3{N+iXiBmti}~iRTY(!N;rme5)-jrZ1ZGH*Fz>Iln0o@29PK+BJns8AwEJl zIVu-9RYVdOrM!YD6-y-EjvsRj&@QTW=R)paSyyLJ%xt=qVS$6qLL?oKp9R?=LnOU4$o=kPQT5YHrOfb|M!t^IdvM!n? zI@@yM3Np(Cc1#$cCd^nu&k;pcN^-o!#fvcvI*gULqAJEYH7Y5BT2e$Yg4^+~Rq}k~ zkW?9l3uFPK7080w+*0C}Hqx&UDlY?m6K3ZCwW-L)m?J^~}W zxD5%q*Jv3k(tO>vs|Inp`VmMCXu8M~{QpFBv9*N0e6qy>O|AjUo`Gqvcw@e~%+&4@ z(&QU4FfmO_31zm2Rlho>*wZsIuIB=4Fcbb14PT{#sI#rk$ z`s4k%^=~o{r4N60XMy)W7NYCsr{?k1)VrG=xwZd?H%|6!vR};Ice-cc(Mvb3&+oxM zetY@y+{?R%PW^W5gE+o&ee?wTX$(ETgMBvl>pMR^{K-n~1iJX-HXDSp`dvw!QQYuDZR(QE5Yzm@;Rx_0j9U-cus2ezbc^0yxw-SFk(-%IpA OMP_g`eWri+{=WgCF3rgR literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json index b795894cae1..bf58e418285 100644 --- a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json +++ b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Phoenix and Rooster by @leonardo_dabepis", + "copyright": "Phoenix and Rooster by @leonardo_dabepis, Finch by @stillxicarus", "size": { "x": 32, "y": 32 @@ -15,6 +15,5 @@ "name": "rooster_tail", "directions": 4 } - ] } diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/phoenix_tail.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/phoenix_tail.png index e3aace5e8c7665792834d708291eed6429296dd7..0254b0fe3e20ba9cfed369d5bf1ae009d04282d1 100644 GIT binary patch delta 760 zcmVoE~nzTZahD(YRSHZ=h;2^sAHTWOsD!3{L zf+C2xx%;(9iSIRq7SX{w?%p3y^1R$V2lz8OGwiMeV3-cirhik?QejyNz92+%5R*vC z%(mupb9wwZKJVZY^)@bg;eVsIsM-wh^$<@ni#xefp>43yn zLRUO~7F_c9T`#2XU$cX!s{MR z0o_lo`!)&$cYsFSb-#{Ww{Z*v9)Sz9?XOTy(;uYQ+gkJhh-?C9mu*ei1@@pFKdJ6Ovfc_gGwBlve`i_%(AiqIRbPeq71Ak-me`NI=WnpMJ`QjhK0000C zP)t-s-Q9`6z@e|N%m4rYEIQ(Z00004bW%=J|Ns90Kq{&900009a7bBm001r`001r` z0jlENk^le!3`s;mR9HvtmfH@)FbG2l`Tu{OA?`KO6sLXJ6i-v>6i#jSK&?L10{kMN zJO6ut!hh>75n$!sAOS1^*A~rzm2$VB0UQpTHKhPbbvW?rAQgZYEBWPpN{WDPgt%tV z01gNK000a4u%@&bc<9j#x_&i6h&81Fg1~B%2w*cM38&kFgz$b0wj(G_% zm7#691av!lNNvSr>y!nqSpW=x2@3{5cIVQa0dXJ!jH45O!bFBh5Fz5xv9e_gXgLkB zm}((9wjtsw6WD)5z`a6<%(T$5AL_AX+sCX}K80000a$U8+M{!KzDgOAb-sf%pf5%+gi#l=FoNg zJi;gHLrnDQzOUmLD5y3AeEr0;%;FC5JaKx|iC53`b7AU+|EaylUKtDMR@#`AxIsKc95M6?Yo15kB&3=vS*l~S#$h9a6q1mjpn^^4a1f(v zQf8ff@rG|1WqUx$f_&>(YKm-^GbX_-Wjr(Wo1nkcX0P_m=eZM(; zItRGC_kW@-|AX@?7<2%f%G}1cYD1&}U@QN4JZh}E*&kCw{nIuSJ?@900Wt3Xx8% z7msTkxW>3$mn=l~dm*kPqBZ_iT#h#{;Mzek#C zP7x3R5fA|p5CIVo0TB=Z5fA}N0{HYy8Tf*rQ`%qPoHwU$0swn}%+b;ywm&q6m8Dr-z^X2`Vc>i|pJ{6caFBJAn5K9ico7#uzyz>P zY16?st-EEev7y3Gkt?B3DPV6%VGSM+f`1(2FTy+V;oD#~1&qAC7ce=&#K-S6DHqHd zB&^0}X30>Ka>R! zmYi)82H}Vig0WyYKm?9L;18(rgCUQsXp{f|03!}% kSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f)LT#*Z=?k diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/rooster_tail.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tails.rsi/rooster_tail.png index 1cbca989d199294dc78f92597f300b889c7a9256..e6a4e00271d766311760f8c3db426a8386a53afb 100644 GIT binary patch delta 741 zcmVoE~nzTZahD(YRSHZ=h;2^sAHTWOsD!3{L zf+C2xx%;(9iSIRq7SX{w?%p3y^1R$V2lz8OGwiMeV3-cirhik?QejyNz92+%5R*vC z%(mupb9wwZKJVZY^)@bg;eVsIsM-wh^$<@ni#xefp>43yn zLRUO~7F_c9T`#2XU$cX!s{MR z0o_lo`!)&$cYsFSb-#{Ww{Z*v9)Sz9?XOTy(;uYQ+gkJhh-?C9mu*ei1@@pFKdJ6Ovfc_gGwBlve`i_%(AiqIRbPeq71Ak-me`NI=WnpMJ`QjhK0000C zP)t-sz`%;Hug=}wc>n+aC}Umv00004bW%=J|Ns90Kq{&900009a7bBm001r`001r` z0jlENk^lez`AI}UR9HvtmEjJ;AP|EOc>i~{y@L(ZEL8k?jVvy+-xXX^Yllie0;m~a zrGI&rEq_C&o6Rs*7s96NmRYT5fVvWX02DC#4Wt4X0EGLvbpQzS|0M!Ez!{(zJktxK z0(gMs08k7G&H%HS5&`RUN(Fo<0STZIkO1mG09zY-Pu;`|+GZ)-Ee#VE%VO!v9l>CQ zCVbG8Y%GZo29z8C=sEVCb_|Hj`QCG=%E-{4ZC)wnyO{|0s|kDu(X_aFAVFaWGncxD zYd+2FyT}j^cXZ7M3#(^P0AqdtdIn_+WBvemZ7YDga$U8+M{!KzDgOAb-sf%pf5%+gi#l=FoNg zJi;gHLrnDQzOUmLD5y3AeEr0;%;FC5JaKx|iC53`b7AU+|EaylUKtDMR@#`AxIsKc95M6?Yo15kB&3=vS*l~S#$h9a6q1mjpn^^4a1f(v zQf8ff@rG|1WqUx$f_&>(Zc2+PUcx+|^ z@EF~@Erc%_8oI^3Cks9T0EA<1A_PwWss?~aGx~ksKOo@QIF4C!LDc{lX$t{!l_wLb z1z@AkA>c`UwyhQb1#s+Rd1mB2-zrrDfMAS$3xC6#1=RvTlyO}y7q8~0_SFI~Do%vK zuhfHnt*#1G@?|b{xl7*m9>}5yh=2%)fCz|y2#A0Ph=2%)fCz|y2#7#^1b&s0ZC&lC z1yL{Ncbc96u-L#3u|6>%nbO3fYz_h`!ufao~=sVe|rX$cR}FdhbbI9sBR zRQlTrGWtx`2JM7sDVA`ugiSjErY63ZeSg}qAI}LKGbJ3}+9u~QJLWm|<2vHo>TtX? zZtZAEd#=dGj-)c7rj-D`(%)B+r{-h^@MDORBmb9-*w(gV-&da*sHp~T&JAqMRrW+c z1VlgtL_h>YKm$+pD%Q20q9Y zZn-4O)48aNzr!M+rK0nSuF)Goj(gwl>P~X7xuqKPKf^8f%EXedOguW)(#dC)^`A@! z+M=0d?3%l5#o7OYH;eW=etj`pBk-@{zcz=JA=2|*PRuK?p2VAT=#oKuhptFalvj1L z>QV>!b-pTMevdaMyUyXXU2YYlQ>4Vnc(Lq>pjfwtdgq;a9^NxbOYeMpcxRWF&d=)G zZl62WyquMNd=uA2@5pIqXPw(wCKmQKRPgVd{c5Lvvi86DGWqfz7f|3ac)I$ztaD0e F0swFy&(;6{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi/meta.json new file mode 100644 index 00000000000..8284a502d40 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_tailsx72.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Finch by @stillxicarus", + "size": { + "x": 36, + "y": 32 + }, + "states": [ + { + "name": "finch_tail", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wingcover.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wingcover.png new file mode 100644 index 0000000000000000000000000000000000000000..dd870ea01de19f0be125401c82b89be583d67358 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=ys;jFjDJkje>swe@XliO27#K)PON)t#2?`48>gobjMIO+U1ybB4 zL4Lvi;ef%*pYan=n6tnmvY3H^?+^$xifVW@04-(rba4!caDO{3kngYphlArQv%UWt z*}b%^*1nxqYw}T5SocTUzbyjwDV)(kESl-qd zS{&$Qm2NsbDW7%HOYRfzneso0v)r+Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TTaK~#8N?V8O? zR8bhl?-aC%l$2D01k;^@D}z}oRNyLH3GMSAa3S;u1TOpsY|$=oCAkr*h0B3j3Axh( zgHQuO1Bn*Xea_tH_TKlNbLQT0oEho-VCH_F_kEuCe9UJQ2m}IwKp+qZ1OmOt&d#fP zvRjIx?JCLE$^QPj2{bXW)bw7`N*fJg93K8mj-qIG_GRH%(){S?J+BVu1)2a9a(X%z zEi62Dw%Oc#TOSzsX7-Volr6-{%KQ5K{O9DT0dfQ6kMmUGZLWurA6sf5+uJkI>grRg zh8xK?0|X?y8S{WiG(6AyWbes%&9Ip#EWXV=aCHvixisVofE$;V8Wn^I7@{dwRu@56 zo^4nJ#4Az+nwO(T<}ZqFgLtkYWC}n5V0ZV92?A4m6hYpP_J{*~y+ANbF1Q2O}d4bGbb_B>yka4As zbjK$EAh6FoK@n`Dz$E~1^dU#BmYuIGU^DYX7D4)0UmuIA)yCQe7|T5Q1QZ>*#5I*% z0wnANLi3tA$PZ(3jB8+LCx+y^4M=q0_ z_+qC8=#~JWW6O02TqZZs8VXH;P6{Abk(>B5q&wXb0A%iV=G8!lRRaXzL7`U#;xkur zDzjjAk~DAE1q1?tKp+qZ1OkCTAkcBz`sKsM#=G<*?&9LJYZ1F}Abfs5JG&qC_x~`* z@>^nv8yWeM95pyPnrfTSBJuhC0yP%>7Tfy&02>Hgtv*PO{`H7W9Kbo*YpqfwzRUxS z&{`B{0a#INx3=EY5qNL!letE4-X^Y7AU8B5hX!bbR-Bg}%tZ^%0$>QSAp#B!JvQg@ zLkET*l21+j$^GylX~z`s#XxRofEH+?7HH*Yg$Lhs$Q9uD_=D+jSv8vH(3+V!N|VW7 zk0idrl*JW`xp5tu05wuGfERdzx8zicwKDof20J)-ZMHUaA*f4`N#sWg#jt$!-Sg$)e^v z-Rmwm8d@nrW(~j}8Tro2W*qdIc|a|`R|NoX`p=rF2~?5q_s`G2CTH_Od&#&B-}{BW zzK7;zQGQs$+ugg9laJu?CQg90wYvFNrwrEX#x+_ydVYC1W1${@ZWye@tN!o!;Few; n8Q{7Z*SLJx-WCV`KceU_?kAg<0Dn=!00000NkvXXu0mjf!#O*b literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpy.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpy.png index ce932f0df5f3627c5a80937ab9f05092f9ed96e3..4ed888072fa1d599556eab8afd421c5d48041574 100644 GIT binary patch delta 994 zcmV<810DR;3W*4i83+Ra005o0f$WhXAb&YfOjJd{z=WftyRx#L>FKt2cf3taeBIrc zkB`W|zlHz*|9X1AV`HMPucelj#$jQf%F2L;hsWybxc~qF7g?}U0000JbW%=J|NsC0 z|NsC0|NsC0|NsC0|Nj88ecT8D000SaNLh0L01m(a01m(bYSxJf0009zNklr2Ldf_g-U4p{;=dD^6BR$= zPWw{QsKAMQD-B4WPTq!Q1{gu!~G||?NflL-_H0R+>Wq6L-H9Yr&^N zvvTnr!syWhRd0HDO^JScO4Sc-t}73F*)Qc{l#V`@`O9E|9X$#(Z&eNhbAJiA9a3TC zbPDv`j1D*wkT3x*Sj+t?!1YzKd+~@7U(cfSAtuPyPisg(+G2b|jJ4U>H;m!u-qo-% zUa*gWtvLFookxQLxpI%(mw>~EQfpoUaKRWr9E1S&kwL_6Fz$N$)&8iRND@qAI1PaK%@_)lNZ;{uCD8J%A zv;K^GYX2qP0&fB0E$}}R_?(}Ym&h7iQ;7!wUcsJz z%k-e51NW;)%29>a?0+v1WjQAi-1KC@3x?29HB`@zm!9SF+Jk~R?AlKxqU?+!a?q8D zv4%GVYA!9$z(S2_^jI~r5FSvD9yR^&S2<)B{eyfcKq5To9ehJlP(syu;_K`=w5D!~ zx{9P56ne+o0>B#uI{+0;>k0e}IdK+CGZ)3vC~}~SZe_emAy1)cFxrrasSv;uZSq-z zf5VRnOxRRFM{di1QNo|%E-@tdd@`)DKLiP(5Og$`{U2cR@bdX4z9}%q-^W(${!Ais Q=l}o!07*qoM6N<$f@ksEmjD0& delta 1329 zcmV-11sdXlS9MprW9Ih6;#; z1O-av+`rlXGB-E7w`ZSiqUw=W{!)TcC?~O3<>+7pK-`(9U$DW;?xoh+D^X`0WYb!Z!3bDD#uo}Mj_bB)G_k-o- zWq%e2{m|c^j*K>MQJ62yvR`T?G-ior9v>f*SAfat_xnk!V1aotC&Ap;*VnzHqoZKV z!^6YD#>Pfj1pr!NI)W7d0n$9N%zp#f&i*n+8(>7vNnj4h6_@b31aT10pVlxFAO}zg zSD!1bVLSUt12F*_^xfIn@n=<-YJXLy(YICT zHsg52LtJbBs3brNfPuBOHGgF|FdlJY0yL-=tQcMxD}hn$?%dS47vLQ2IuRJpScq#; z6BNoOOvn|H_nW*WIH^T!HkLi3X+LuMOumE!f`AYLVw1x#+iZSARtAAc3L2lzyvf2AkqNm1#<4T6(AQu#+5qC zJpck|9v!855;G6vb&g{!#N{0Bf&jwNAARt!BS|$6a2@>s#}ULue9R-O-34R=2BD+e zFk}Ln1c1=3baHay9#kmMilvhS!K5kq61gXFA&IWS%83@x);tL%0e@JxffNiVnh9uQ zo-n44MHtilGfe@y9~otC5{q3XU|Irzj?D_}Vs4@}B;5j&6hOu?H;HK|52hsm$ho_m zR|6fU1_;25LdON-b1vUh*)S(bIq%d3WHOmdCX>lzGMUU2X#J<>>FH_tN6g;d-q`+h zZNn&?Vzx|T$`7hQdj7h*1Uvzp&cIR$6u}x{S^54_;BycXbKQI zj)x<}Y?D}OriTz_0`T#I*Y@_dJLl>*C8F!Hw`iJ!8mSo`=*KlEYQg0FFE&eQQ1FXEJUPdtR8Gopm3J z@{c9_!t#6ZsQa@x{)z^0e0=PF)hUC0cHruaNt`UgW^&7$4s&7|0+(t>D`e5 n{x##8kRA`~u{iVp(d+#Nk>Dg~@AHrF00000NkvXXu0mjfj7@FV diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpy2tone1.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpy2tone1.png index 2030ff8cf2dc36c1f600ec256d459b11b938e46a..3edaf057e7bb004a80b8f2e3facfff439395e87b 100644 GIT binary patch delta 673 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 WFIwX-$2=4O0000VGd z00B-(L_t(oN9~otlEfegL}O->|NrC>MQ9L>wX=uaD*GZr^MY0?IqomD0UJR2Rlrd< zymXShF+dy}M36;;hA9akC5}M$u>j*0`a^=7O1BC?>Jb2t0J|1oe?%~4+;WhPvj(iw z5nMkc+IqSPEU)X=f0R`4koLeNxZx_9uoaTIc)KGxq;5Iz9UZ}qpjV_5prd;cY#9wQ z!N^e5A4xK`Z(<kI6o@a zN(RggPbzotjW%EdNE`6i054u2g+>Itd3_Wb0q|a*00;nBa_%=)1-vf$1`fW^BC4nR zQi1}m42b?=PQ{bGO>l&ZYE&L8|8tA99{~lvGy$3rP^uga1gh5XaXk(m9aADUi}6 zT?#|#1}W(8W+VWunrfLGt;<(298e|Vi0(}J_D(^)jj%Xg^E ztB^j*6d*yM@(jF7oc&t`UIj&nm}J}i$<1Tyxg?E2AAj=8A_iyT#*t?PD0&4T#dZt> zP?i8tWUy-o2d8Kf$0<|5yvAlC)<-|6rDunzm;0e{-vhbpHB!WICNE zW@Y8UEq`BP9YYXomT0x^n?`^w)`D@saQM}h{^B~H3ic7eW9)f9I?n>@1!?D3;%jo? z=H@4*YinIfs~!lck2SLoNyILRgM;T}WNYgwE&sE#9@WEW)wcp>UFyX)I6i()<(-|k z5$%x*x&Pt3q%P+Gf?%_RJPW+f0T^MbyzG;JW_gLN_QUoe>gYT(brA3xi#+*({i?P| zU*Mbj!eqD~aB1Mn!f5oZ&=)1j06}Or?-{=2@#StIaQtp?@cr7@ctp;F{ryjr{!6e= y@DaWSKL3XAjUe+qs9&7=mQ-`x+ph9|V$2`lxLHp!OWOwk00008y{y08oQYr&Cb{ zFGB5~2{1w3;c%#P=>U7y8c;Fml{bMs8v&@ZUavFhA9f=(Z~^oAJQWeJV=chNrp_yb z+4T)^RHPx;YPAwg12|4|dAVFV)9EzQ7G3?M(~tAarmui1gEU0g+QSIZNfmgIX8(Lq z?f3hhT`yq@NPqhZgb6S~-R*X((xcHRu?CvT-EP-@1iVuKL01ZWN7aoB`2@Rw+x8N9 z2>>+u&gZkU*=(%Vinw5H>-Bn0yU%sKoA5$5ClOG1VIpl!cwOH?{cpp4Je8@E*6W@MHHI352`ROX!vsD0$`)xcVGT^ zJl^qmtX8Y(lIKrziwt-Ea=AEoG}ml4AAAXP3_;LIMWfMhDlR%(3hpka(@E#PF`bVD z^9bNJ_J6x?ohO0xf~fT?^fftfyWP~W-EOO6(F4Ktk!JECjKCo=o6VGw!C;_<|9-z$ zi~kFlM22TSg!*xLKJz}hXKtTU2KPL zqbQ^EMC>5oH5R_|1AVHra9`k?`NE_(AFyel%~Qhldd>7ji9A3Ms@1A`2MU`!Z*%85 z{^>4!|FHPc$BfcX06uXa-OqpcUU3tD-SdB9?~+Omf}oSaFUE1c0FyU)m*v^8rT_o{ M07*qoM6N<$f}AK>5dZ)H diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyfolded.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyfolded.png new file mode 100644 index 0000000000000000000000000000000000000000..32dde55ffdb3c313cad74e00f5b5fcb60d1dc6e2 GIT binary patch literal 1017 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 delta 668 zcmV;N0%QH$1?>fpNq@os01m0jFf%ctoEa3N7){5kUXz_h$u7$NPocrNVFl87fP<5 zY4%YgwR0KA_3sr2T}eEUjf8#eEr6ZWsr7vVPBoL$fM1Ka)GGV6+JIw(@nFDfp>+ZU zFCHT&rs>w)oPu^^WIQvDCr~R6f7Zt02BC=B<^#*m8^8h#u(lS?z@Ou4SQ8t8jAu5J zy9OuIA;5~m@%VF9vXw}GZfbArsg&eKCDqGXB2Hww7gu(ik!RQ;>#-cWo1VG0st$f zmsfWaAnFC;t2v{1z~A=Xf2~8#L-RpU?zET4ETB1j>IM043IVY~=o8^4U@ffrhbRL` z-Z^=OZvtc0;G#J}U<)@u%dxr<^7j%>pIo#Ba+ZaM{{^IhR`e%a`3NmXS&Q0)`xnIb zWBbAuinj1_zt{YO&DXL~*mCh8Xu{^}OZwRDegW{V7DE-{LVExJ3IG5}MNUMnLSTYP C=0gPl diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyundertone1.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyundertone1.png index 7a792111c50484da1fc227cfc6f2635405275079..4410790851d2aee72b419f0b7f9fad068353283c 100644 GIT binary patch delta 1149 zcmV-@1cLjL3bzT6Nq@fp01m$aI0aKA000C`Nkl`dk!k z_MAcr*x&zR&d0|;lgY`K-aacU&r6-1*Ufcb-)(aS0|Sq|eL{h4oNJAbb5)DR|fV9^LwS?snPEsAWnSO>@1y{mF=d2p%EG_UI2g0Cw|cf-l?j{^HwjeElU=0l*Bc zt$i~y4*^3%ckP|}K!4bQJ=o2g0eS`@bbWoHr1un*QLh6Lk^!j(zG&*@;93Fzg5?G% zsdqD^eb^owoAug25L`<%i%JHdGY+|V5nZQ^>$1-V$A7R@xj|rk6NGwS;Il|Y35K|C zxdi0wXGK=d6rGW_S}_AEjTl)tEZ06~6NW>K!dW;9)nCp5zUJSprObIJvob zW^QOGsusR>unYTK3br~EiU%R$fov!H`=~Oi*B56WggOAEK)o*Onf=gomW1{-H+7_# zs$9Q~IDepRky4ZL#isqumjYJ}mNF)-8L?V$$M13RFD9g*wDj#vD zre0kN+rftL`TgYNH0kJQH)Z)PF`Vn|?Xso69Df}AD9q6i`}}@^K8Aja?fid$3m6_5 zd2CDnX2j(jK%JbmdI_;F$AORVH56|E7*U*8S6`H1cxUImxkpg%a;{lmZ1`Y{2KWeH zQ7<)^n+`J5gdGP5A0*w~can{bMe{?)*49TeIDhnzKcGnR{Fsu3PkH%2^!`@}=I7LRl+ z8g0`xE}_5h9U7>|-mW6^DR6f7+ngEE5Pyn%{7GOlPhjaYHTZA_0FMUwqri242 z{=CvY3(Tl|2XSqRG7xQL>}3_s%24smo^>D0hI)cfwFlsjjC`|l2?wnv9?+Mpr*;B> zHvMPKiU>rJ@B62xUu|vLXe$YKk@ddN-hRtG7UhQ}{KN7_`BnFO`T8mY_ P00000NkvXXu0mjfHdrDo delta 1241 zcmV;~1Sb2p36ctsNq@lr01m+cxRGn^000E1Nkl! zj)IDU4k#(9cmrO5f@h%M1$YB0BpO=iD5xmtprHazLV^NawU^)LKR21!j=jk)dpdto zlw|CT=O2%~S(YM`$z(E_OeT|Q=koG$h{N922(?W!1AA_T;(uOWU(NmQ?r!z$+1Z(C zo12?6_gh^^h1Ap+Zz<Kt zvOk`O9{|6pmEfy3y{vr8%=f&c zmH^Dq#l?l0c?eirTeB^rf#=}|{@^#Y0`v?*C_au?R)1EEy%cE9xQAUQBBlZw9eml; z%fYn-00jF!G8uR(^bg;mcMK%KwM0Wy6@Z6v$jysrn|7}6eLgsbH6;^z$ACTdT}4tQ z0GY)BCs?;!yQD3%w96_1^aZ~h!!{*@B>Jidc30xtsGKpg2v)9rI)$*9vO>9{RDqlk z={IF5#DA7QNnHk}0$BP8()Tt+QEmA8!7u!CDOht5xwphtj_fC&_fd1I*Ox4*l+u*~ z^|~Bo_G4yJ6Z@=b)R|(bV#Yw10JJaC=Cg}<660f_10`L=lTm&5A)d7Psu|@*2>J{l zb_48FJc;rN@i@?#5A+3natv#3(D%3+uYW1tnt#SZOcEwemp8L6eAc*`OeT}bWHOmd zCIgbcbDy4`R$pTF_V#-F&fbMCF(q}@-{78}o<2PZ5Wl#%Xz%`z^7qTyPh)MYuCCfE zHwcD@HT6cU@3t5<(V4>RzrDQ`v$M0-@;B26O3y-{)zRi(RwiSNt%B$ZfMfX&2nYbU zf`0?Bwar!xG5#3~K#Yhr7H;Y|f|x$-=@yBPQn_fQ~rugC@j7xKBKUYw>bZ>I?1DH7;Sih#eZJ z$2QjpehPeie3&yc8Uq3y$IB6XrX-dzQ-cp@0`T#IV|#ns+;jHZ647_ryJ#DOF@G{< zXrLZrP&Ay$^)ELPpqGIx!AXdh$UQ;t2YRC9UZ9tPH|SxBy=({vQvA5eJ_Ke|zJs_n zMVW{}iM_1hG{%ab^sM_}HH?yk+8%&^WaOKbOE{P|@qn>}J{178>3`O&L?DZN-+zC9 zx7Mc9X%g-t^u91NGh;p$<(DP=hf?MD@>Ta|dHodzaD04h{;N|un|9$E9Xn?J;NZYo z48!tO`NyE#^?#K&-}LTC2mhLIjZcT`wK((tQ53%c+nbTPV1g={00000NkvXXu0mjf D4Af#N diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyundertone2.png b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/harpyundertone2.png index 8a753996b721c068ba7c405e784e1de89b24afc3..ace8b76f08701a55757527cc7e284fe4802d49aa 100644 GIT binary patch delta 256 zcmV+b0ssEw0@wnOND++P-MDvmbg!>{00001iKADMSsZ`C000ib0l1NC?EnA(!AV3x zR9HvtkHHeeAP7T2{QqxWB06rZMRs~za!`!q4N!fl1SA0ZC&0CFzJdTI`tH;hkFwvs ziY68Sm0sHAtL0ZfCqw{+bc0?G=?+GSPSC5VUnZ!`e49W$E86Kw*Hyr^(JXke2}G6= z2$ogtbj4&Ww;iy7x~R->L?mS_Jf%(%>=2j$&1-&|XMm`-0DJ@hNN@5sLIj}N=7${s zJmmYw8St35uOq;3pvVfo5|98W0SSN-kN_wF34mS#YW)Dl>pm=JcePXi0000(SsZ`E000id0mpBsWB>pF%}GQ- zR9Hvtk3kZ|AP59O{r{Vn3Ah@QAX};06McvjIvt?)k`$x>{8K>v?Y97N!4#VfVZr&g zlg!QyOpAcHmv;ITNh|^?R_ft%L1X621k%&u_`1lt zA~-+P7J6{832I$NAhfhPzAnu5vI91dE-Gy}5Y^Hb9!RHD>=2j$kJtQY?gdr272qNu zK>8-HBSZwkZN9eyf``0a>;;c`z1j-=2NYSsCj}`0DM$fGK?*<$QUG2GTKfR8{XPUv SkHr=M0000or!5r^Vhk}cRwjlRUw}8DBB9dQQ1}9_H8fN}A`u^80tg zz4z>$nQ!LIIT!Xej^j9v<2a7vIL@4MeEez9o)%Ga|AY3JgntgNu6{S$+aIDfhllS5 zi;EA#`PSB(BHuY=Y>1lhY6_0Fr_eB*jk&@_yLIIwl9&Ht<6a911td1vsMChAU5N&BQ0Ol-0y!6*U$kCxwvKr zz(^aWk_Q~uU1Iqv!J0J`BjyX^vI9tJ_Ca(B&`>(9d4CMiE+@c3+OVLQ(cE&v_v}D9 z5%9OW``XkoQUKg&iI!_Bg>_#_fCXon?F>ry5_uo(;csv6vuPi73ej@*O9cS=>@8V` z66_^h>r5cmc^2H0q%X_QNC&`>9e_5%rzUxT`)Lc{uk`PME|LedqaXU!j5ufVlL`QO z7D_vTc7Kz^CS&=6QR$53sP)xlY*OX(E(LTQSCjRB=K>tZaU92S9LI4S$C(8a|Kub& zICy*e|NhR-$9v(s+7W;8l|Ph1+{()1_Ua$!=f64=TH@c*RYLT|NDj`3B@SRr&f2(? z_@5+BRRQGh{ov^6y(w;1AT~6#mjSIYM{xlLH-F%W7aeFn1mDZ13LF1P)S|Q`^f*2hcg|T<}Y}awBK32{v7}S002ovPDHLkV1h49 B*|`7! delta 1074 zcmV-21kL-72fC7mNgnY(dG?|P&&*logloJcw#A4M}K7wxE>+-h*JQy+8&5|E1(hpo9K_ zr=i*b5CF#vo_~gAuz+Kp=bC60EM(&8KZ;!AX(%QDLBR-u;wOT<9_w|oqSQ9Nr>Ca{ zn|e&JesBjMfaBxiJQ@bpM-!((PlzLXqN&5m6B^769K zit>JxRfg03{rx=p7MH(OF?!d9L#W zSjaW9rM(Re=h=a>5U_W7d1>lcN&qgjMANW`bzMz>1*^<<243()UdQ#YcXf4Tt}hye zXj%QJ0DmB#y^;G+g1vHsWc2cV7cX$c<{Maqa)OfKI2=>2x}s zPN&o9Y=-6^9ByuI=Ks-MTwJXDgT)xEqN(X({ePbA_4W0~lYrp&_V)7Vo0gyOia(26 zc!nW{pFA}hQQNJ*Up7}yb^)D1l&-><-Qn4{G(~CZ00{&DOB}$QSFH#U`_wXorUd9c z;O_3u6t^kh8yfO3p*4Dh6EK~DBVKeM<8Xd-bhPvmR5HdbP_qHw&;TvaL@m@Bp_%|> z6Mr8X{QUe(^Cu@Kb7$5INl;5nDjq}h1s1cf}KTQ;HEA;mEHr?6TN#CEJpVQGo zC!%#T^3Z|Q5`1uQkdE)~?~~o#-Kq}v7Jvaz3Lb&$;8)p{N@$ywUjnVr>;(@7KLtua z=sNy5g3Wa#)=dEJCB83YYn2$g?JYbX)PD%gAPp*1jcEh=Hjpj2iQpx2Ptf~;E);Hu z{B?0Nq@lr01m+cxRGn^0008bNkl0m=6W8VD%^QT!ev1O%HSl@=+kRl&~6?iz_HL=-OjALcD{yED79yR$d9 zoA-meeY-dF=Ktos+1=Ya!7vQNFbu;m3^R>fULK8HhNY6+EE+@aL=n4UxUP(s6}+xd=cTm$EGi{K2nD!`KX?0cLAy>0Rl}n}C4( z`+su;EFg)E<`8POa1r~+4i`lS2Fd=i`g*a#&c z2`23N`nR-qcfVKGad!4qj=Q$DX-q)sz@!BbR4EucuWeB%Cin%q@7M?>08n*2Jp2)Z z!L!@Rssu>J;^Km|sS4$rF2G0DZI}e;P!fRe1Sm7*cYkargaAOx1k{}XWya&kw~zwp zm~DCZgc5<}7*9Yb0U$Zq^m!c`oP47ZHS|rM?>fgOGRFuhU=m{!#<4;Q&~K0?Njz?F z0Sv=148t%C!!QiPOfC5Set!OK>c7K7W07YKx&II$9v}aT_4SWxZ+d}7Xsry*B4vI! zylTu79DiulD{*rdqkFlu_&~Y&MDdy+j*77TH z2#`ox!pTG$1JujCX_-$_DHg0FFsVo8K7nSCcjd~w3Oqf%$nEm-j@&j0(o8YfFqXvW z=@&U`+uNU7u>>wIPNcoJ_ahZc>Oh;;KamxaHFQ9%A7zS8gfbh2OAN+?Z3vzy6bt^# zM`wO@s5Kxa#FqTOVtf_A&BDgUoV;0Rde%)KCd7sq^;=^ZXmpZzjW)Be+j8Qwp`8#% tQLHna=)iNd^QP^AC(*AA%>RoJ{{YyZK?Ef=()9oU002ovPDHLkV1n{oZk7N5 delta 730 zcmV<00ww*p2A2kqNq@rt01m?e$8V@)00084NklxB!&Y6m(Q{G)OdPrIpw`%M*DW+r;_7keyEonK<_NjmHilBw`qb zVHk#C7>2QNJRa}Z?w6w|8vvFcUs)8gg%ig6Z{o4}a?tdD`f}$LVwu_GmQn z_Co{E>2#brKIA@ynn~Y4sJ`mMhxvS7D0o2a;0OLhp#kFns15RFQElfEpo6-T$wb(B zgD0px{AJdFig`0|M30BNTD{y7LC0MIf4RVP52Nk8HvqyQ?jEsrvxM1Np8CIb*k0MG}U&R3x!lW$a_ zie>Z2ca?n;&OSm4ct+oZv9FK<)ElH{lJpx~0K+g0!!QiPFbu=IHs|yC<$uEZYP7x| zpo8DvIhRg$Sy~VP&U=R+6gRotH#->i7A=Xi|*{tMW;t(K_w1o9U8Us|P`@3acr%)_d zN8nkH%*zCt0b-CvMx5UQx7$tZyWOtXzZ0aHVz6PH63gXMjM{iSuEi4AY&OE4&1R`s zQU!Hd|AZ?hYk*ik(u^80(tInj#9%C}L-2%GEK_)wkFNZ(s5T%b#HPQmn2d<)W}zf<(SKR~GQNJ0O|4S780*pa*-7)>;+yDRo M07*qoM6N<$f{ANj+5i9m diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json index 0785ff1aaa6..4f2afaec699 100644 --- a/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json +++ b/Resources/Textures/DeltaV/Mobs/Customization/Harpy/harpy_wings.rsi/meta.json @@ -5,12 +5,16 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from S.P.L.U.R.T at commit https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/285f6f86ac41a6246f250993486effeab8581c2c, edited by @raistlin_jag", + "copyright": "Taken from S.P.L.U.R.T at commit https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/285f6f86ac41a6246f250993486effeab8581c2c, edited by @raistlin_jag | harpyfolded by @stillxicarus", "states": [ { "name": "harpy", "directions": 4 }, + { + "name": "harpyfolded", + "directions": 4 + }, { "name": "harpy2tone1", "directions": 4 @@ -54,6 +58,10 @@ { "name": "harpywingtip2", "directions": 4 + }, + { + "name": "classicharpy", + "directions": 4 } ] } diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-l.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-l.png new file mode 100644 index 0000000000000000000000000000000000000000..32aca484b9fc08665323556abb5a3aab1e6e7cf7 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJd!8G4U-!7ULw@2AMbS?e{IeA*r(@YTh(izN9AEkB>i_cgZ@G za2(M2|Nk2=^A$m!{C#^C&u4aENU`kMW;QM9$DgOhwK5GNUwF>P?@dS$5lghF`X+gF zn($i&wiW9gr+IgI8rbZvW7R49tvC15f!o*5ORl@Sk8hjIGmZ%nf0t_aloT@X9MECE zc!kNu+F?SxK%S-PCwm@&SiT0G+J8?pnc4NlZx{k4k0&mk$LDp_x%Y=W#3zmHJUl!M Yt2&}y|Bvjb1p1W0)78&qol`;+06lANPXGV_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-r.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/lung-r.png new file mode 100644 index 0000000000000000000000000000000000000000..7e29649ccd8886c45fc090f4fb039498612cc5d2 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJTb?eCArY;~60D08M0%POd6!x2 z{^1*B%{+K3f-A?8<3PqPO9qy{d9}w5Xy_dJ@aHPG!Tc)$3r;X@ zfA4hZz~lS?Wl6FzQ?> zU|3_rV436~qi{l>qwL6Mb$>~Vik%*pPJ8gOo4k6tU`bWLtp#m6!F~vIs6KGu00YB* Xk4V|}u5V9)zGU!p^>bP0l+XkK4fJs$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/meta.json new file mode 100644 index 00000000000..e639085d8d0 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Species/Harpy/organs.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "lung-l" + }, + { + "name": "lung-r" + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/full.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..e358746ec8b05d4b8fe06de36c6fdf5d517d86b7 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikF1AIbU@7}$8Ys;qp|NpOFzy83115b~gPE1Vn_4WPv?$ft>&&$ip7cXA? z^5x4{H}7oPv}ynT{XRZEk&%%TCr-4ovJw;&1R4Vbdk#J{0#f27L4LtNqp$#mXAaNe zfJ!(EJR*x382Ao>Fr%o3R|C+IS)MMAAr}5?C*~G6D+sjs@6fRPc*^_G|Nkpv1tykQ zUDmfXI=Sh0is;f$$N#8bxUxyddH!cj@noKklXJGDuCnAvx@~)gCEDy+W9qXSrfX-d zE>F9A?OkHp0-bk1D|RjY!{iZ}df3;heNWD&Lzc^#s|9Z!-Tl~NPP>rB^OysAyT7_* zD0~vzJ^#S2cPBWPAKAYCw($;z)OD5YCyZZ9nmky2BCh!1HHGP&sm>D?6w=&!IDUl0egv6S?+` ztvp4m-Y$(}k2*WE&xXzgdIzyrtaN zZ5Bd|f3j7tGPl0}_;UO0cUs3QPyIRc-9k6^%>489b7RT{Tc7!>$Mdy`-?!=#*mpeW z)NbAhL0V7iPgfmyzI(~_S)OgVf`Sthqo=eO*1F0^I@_v0tlq;>Jg% z2A6+v#N20H75?AdRi^y+=j9!)A9ma}HWr^G5A+HQJkWglsg7adKgrsKKm9)+T$J|Z zx^mIn%_n!OuP=6+K9Bp^#g^$dU0#P~Y@4jmAHaXpkICzh#qo}S?#>B4 zu|c;eYVPcGWB)_nZ)BDNxmwXvKmY5U5o{u>eKaJ?;cVtTl{LG0rM_10-zBm0ZC>V; z_knkFW8U;HOI~H^yL84(=?B|(FRkXBY_M!qrk3bL*Q+M^dH*l7Ui|03pqkO=xu1SZ gg(DNp#S9M|@2}~*sLTGs!W$&!>FVdQ&MBb@08Z1!#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/head_m.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..e555d030beac914816bddf07bb4242dd747b2584 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV65_VaSW-L^Y+&HRZR{eY#$!S zZsF#tVb!ggdZt}ee!*1TELqFHjbckfA|zP1S(X=Su8E0xeol7fKKT|^i~AK3?jYr{f@V zJm_b9D*ui*{Vpyk+oH>Fzy7yfy{3P&%G1wEk3tQe07)Ist#(ZP<&AHy{=clUNo8;C zstA_NDyeDfROEqfhk*yGnw9nq9`*hEF4a7&-ou$b_3I1y=qIxamg(<*@uc+Ii%+$V zqOKZu<@Aeg%4eE$hVp#X-tD<*m<}N=Fwb}3W!58u3%C`%9zb2HFe{!)GUy@k5G+x5pMTGB9v3FZlWY;^rSsyh1=8 k2>iHKwhqE#U^vj8!uU~x>Hmh)R-Pa+Pgg&ebxsLQ0OtTG+W-In literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_foot.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..a03b643ad62fd7e3f72bdeb8643eedd61e873d43 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwT3K27`1nkmI59FZ5-27pC|F)z4rCmTQ>_G293?@1!T%wE;a>Az zkQ&YckH}&M20bMZW?c2??j)dKuBVG*NQC>_YmR&k3Op_sr!npQ-@A1qcZ*`yopbS~ zjB+}H|0Nlj1fhtfW7?c&E(c3F40J@Q*>{Ak)_uM(ZIxvo#A r#(y7HWFFqN`|gTe~DWM4fT0>T} literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_hand.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0ec001ce2acc03b55ba45dd8bfc5c1550308ba GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|N0w$B>G+x5pMTGB9v3FZlWY;^rSsyh1=8 k2t0_qy^{&TWH`{B!ub9#)BlK>Pklf_p00i_>zopr0P?gcvj6}9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_leg.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..a70f92524b61c9295b6660ff966f106df153b26b GIT binary patch literal 2285 zcma)8U2NM_6m}uq+QESRzylP?ctUIsjvd=^Vk_B5oBm`ZZPjF>)dt#)eUq3bwy~Wi zEfaqd5)&ZSv1$_n386_tJWNb`0EtOu+Ju0IJpd9fAO;UeNc?CB9x6>L=Q>UZrDKic z*ys2=-#zE#JNM?;F#Qg1T<;vYK~!hhGo)(78R|!mt-IhKS6k-4L89N z@Dtl-cRiiUfFVIa0N@0kkF&hM3JR&ARb0)^H$3;x zI_sj{!n}>SDePKxN5jK&*z|U_7qhE%w|lL+i;2t6wW^mmNYh`jjUUbACOdf2wX#vO zeKbL~QM%T_*mbAszt=SmS8)v%cY!g|!9rXIyl(o06gr}&Ev-(%GwCElR#kONGj!E| z6vddXXcA&&p4VAPiOZ~_$O4KHOwjaVnaHp12YhrIJu&WjQLbl2FoFq(qA>j>@u# zMOhZ2QHCZ>R8y0gBqN0Rz?`fiuVgtj7zM-Bt%e);3q}p+Jw%!mi7GKc6optUCW~@J z3J?deD1 zgHvS~E|3L`mM;r>cc8>QZDgZ@iOhI`XJOZh2!)8KMkQ5@FW42ipy?t{aQ_q0#TE#C<78_CT3kbxJrC1f@g^GP22;C9 zNQ*CPXxMbEjTN~D-0EuAx#Jht^1`787Ie9NP7O3~M^wG5|2M-*0|MU*wYV-5nFYn%y>VI|n$xn7)Iu*L|g$Vp`)+%F`r>cf?z#3?YM^KE`kOr`&MfwwD9`bGULNIs3cYgj zozO`C{v#)^S-mUfcbA?KcZ_{|Y5a{3nqP&qo_&p@-#;;7bI0YKl?!*id-mZ6LdUO% zK9yhkW@P8#=d4YKA3444t ANB{r; literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/meta.json new file mode 100644 index 00000000000..4073a762e89 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf, Legs and lower torso parts made by @ps3moira, Full reference with parts made by @Still-Icarus", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_arm.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47ac86071eaafad7c79e62c192bba707eac520 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL48jb$B>G+x5qZ}G8k|$Z}{?m@!?Ct0+Vem jfs$Zw`_{gADD#1nkw7uie_xsX0U!}iS3j3^P6k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwPMkQ=$H&LY$|^E4QczG3C|q7%4kX!DRRKu`j*=k1;QtW7aIbl9 zBv6dAz$3Dlfk96Rgc(;ox;qIdSnBEG7!u+B_S$Z~1_O@PhfHht{FlBx*+4}9>Wayh z|COBo`t0)fI9*VofkVK7g+qZ!Qe%+_xWzIr49a;m4RpUXO@ GgeCyQl3&sQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_hand.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..2c16b27041ce35dffc7426a51b2fb81978f59491 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|N0w$B>G+x5pMTGB9v3FZlWY;^rSsyh1=8 i7~I=BR~yPa(44~fa6Qw1NvHb7AR$jzKbLh*2~7ad4=6SO literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_leg.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdd3b855667042c8522f4a9564720ea38bea55e GIT binary patch literal 2283 zcma)8U2NM_6!x@s8y!VkwTChdWV}6W2**Eh65C3)W=-2fOWLT3x|RtE$G%BT;~#9N zNh>tA3BiB?D$@3Xc$n0O@j$m}{7f68>k|@4u$PH<_B6zg5Ii7JDCas(2&H3<C`yf2k^CHD}2BI>FFQfw#6MEIZ7;jz3)C4U6o`m zNf1}x*}1B8gWZ?U7KiHf`qb3a!oor}o0Vl5+^>Z8m*KX}8y_vK;SX_bd2ty$kJ#xc zmmoq<;cLtG6RT?kvHiSWob)DhSy{D=kfK>76lxeYpa~*=q+u)S4D!els_15d`uXNE zMe16DIv&ZfIeQRI>*;w173N2a>imoItD4$q{XY6Ju z(ua6632HKzCkHJDkwQoavGhgcwoTPBHVm6BES5)|a&CkSuUp$0eter)^f zuBR~>Fa#(F01VHvBF*wNFX0-R#Tj-k*N!yZpoh>+rlHsj7h)O1XroFsYVW>;%&=UO!vVV9q4RVy=)roUnfKa$Di+j!iyif-6G8Y5dM zO>JZBnp5@PYbt}P$biLNVC33Zh--s4Odpd%N92^H)^KWRX5uN!Aw1j_1{5l&ZOhjEoWxT87sYjRByAa z4+?AZj>8t^dd^&C)8%gv5pQZY4NR6Zw?4N5da=V5w4th#{!q(`ihqIxShP5(CnJaOiXN{*t0ZDXOD@Oz#Ohr;#@vc?&>WYJs6&Nm% z1&o$23-Vx~#6vA)eHvkzu{=w|uEp_1E-Xg`nH8uGH9!>%-Vr-%i{pI+MtFT2;&`u- zGgzdBnr&BggFa>dq7B&FRQD_ zbgj)5xenayYR9?b7uWQ{p#~Ooxphurt9{lY6XfE+NqTAT!H?k-zMM%Vi<2WiUO3is zihZ>E*STA3=Z!0G4!=cD>^g9*r|*kzZ=^3h^X{2F{fE-07tYkXg+uCh6OZ3Ig@#uS zEDW6e=q~s4*}h`r&iDNTyLOQAlgpo6{muCE18(>2uBES@d#^BZee1riv2?QM+@8hT z=@q8ii=9~deD=g<5NG9kdC literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/torso_f.png b/Resources/Textures/DeltaV/Mobs/Species/Harpy/parts.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..23dde35cd8e6bbbeac71797415290fd86daf724f GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~;1^9%xmY0{meEIU{yHBrf-tqPIO-xKYaNxklTetuJ|G$3y`nz}U{{H=Y z@#4jQ{`|SMWz)}}KmYyv=i}oO85uco;>0V<76FYB(>PcOqDq4Nf`Pg)0R!Wu15bb| zI14-?iy0XB4uUY_j)~cCfeu{l>Eaj?;r@2o-MqsJJZ?WZkEqJ}dVK!3e%JYl%N@HG zXWl+)@-$>A>zn4;aS5CMPVg?^oDnZ7@p{kqb6S@ak4%*5HRRcJDCD5|Y$2wgP3DoA z8=RMTw3N%NS<~p>=ve2(a4e6vY=Okd&kHz&d{3zNtW;m%P`=3gkc7uI2hpq=wK)zq zzkgEP!S2pq^y3Q4B2I?qE3s!t%mLI#%!9wJW~U+UVv=*3JoeYo}+j zpa0#N<*a+)r=g1Xs)Lh#8yBaX+tOsQ;H-u4g6|RnYQ@hK6ig!9fA3bZE=gR%J@3vu z1(#*A3!dve(+qy5QJ~KHMs0IT$yH5R`)WfsQ2U(vv`QkE-9B4=@v)dE409P!{; ztFkt14{k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1!1o(uwmY0{meEIU{yHBrf-tqPIO-xKYaNxlI|NqyoUw`-R-Ea4vFJ8R( z_wV1gwru+M@1Kv4Ph@1|#EBEHEL#LLVA1}qe}I%oNswPKPzyR>@b`Z%2$bh6@Q5sC zVBk9l!i+m6X1@hGtliVaF(ktM?X=r@hZT6*co}1^Emb`Gd;jaY^l5FkEv>hRUp_Lu zImJL;#oR2H--yLo!6wu}(eJWIv%2rjf+v$EAG41Aq ze4RS;<2zwHj!y4N%~o5+uvH6Qb+j7K|0(L9CM#IQI90M~=Y=)OV&|Us)GOr63jUHe z^A~KgsNGk0yC`i=L-DnW<6Il&-4s3ZA$~*i%>OGL-np}UYX709%ZyuFt-&n7Ie^v8^)B18~^23!(Z~6EAVu}7=eNc(% z({JXRjeM-UmwTh^(+-G4aTqSo|B58 Date: Mon, 12 Feb 2024 22:25:15 +0000 Subject: [PATCH 13/21] Automatic Changelog Update (#677) --- Resources/Changelog/DeltaVChangelog.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index f7baad085a5..97edd4e23f9 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1604,3 +1604,21 @@ Entries: message: Felinids now scream in agony from water. id: 241 time: '2024-02-12T21:11:44.0000000+00:00' +- author: VMSolidus + changes: + - type: Add + message: >- + Harpies have received a full visual rework. Featuring clothing sprites, + new markings, a complete overhaul of their layering, as well as visual + systems. + - type: Add + message: Harpies now have bird related speech verbs + - type: Add + message: >- + Two new traits have been added related to birds. Harpies now start by + default with the new Ultraviolet Vision trait, letting them see a whole + new spectrum of colors. This trait can be taken by other curious people. + Harpies that wish to see in RGB colors can instead take the new Normal + Vision trait. + id: 242 + time: '2024-02-12T22:25:02.0000000+00:00' From 7c62f5e0ec96dd8e4aa1dd3fb756f719b0f1ca26 Mon Sep 17 00:00:00 2001 From: Debug <49997488+DebugOk@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:59:01 +0100 Subject: [PATCH 14/21] Prevent probers from being unachored by gorilla gauntlets (#824) * Fix being able to punt probers to unachor them * Fix my wacky comment --- .../Psionics/Glimmer/GlimmerReactiveSystem.cs | 23 +++++++++++++++++++ .../Components/MeleeThrowOnHitComponent.cs | 3 ++- .../Weapons/Melee/MeleeThrowOnHitSystem.cs | 9 ++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs index ddd5ac11585..da3b07d6dab 100644 --- a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs +++ b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs @@ -16,6 +16,9 @@ using Content.Shared.Damage; using Content.Shared.Destructible; using Content.Shared.Construction.Components; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; +using Content.Shared.Weapons.Melee.Components; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; @@ -62,6 +65,7 @@ public override void Initialize() SubscribeLocalEvent(OnDamageChanged); SubscribeLocalEvent(OnDestroyed); SubscribeLocalEvent(OnUnanchorAttempt); + SubscribeLocalEvent(OnMeleeThrowOnHitAttempt); } /// @@ -314,6 +318,25 @@ private void AnchorOrExplode(EntityUid uid) _destructibleSystem.DestroyEntity(uid); } + private void OnMeleeThrowOnHitAttempt(Entity ent, ref AttemptMeleeThrowOnHitEvent args) + { + var (uid, _) = ent; + + if (_glimmerSystem.GetGlimmerTier() < GlimmerTier.Dangerous) + return; + + args.Cancelled = true; + args.Handled = true; + + _lightning.ShootRandomLightnings(uid, 10, 2, "SuperchargedLightning", 2, false); + + // Check if the parent of the user is alive, which will be the case if the user is an item and is being held. + var zapTarget = _transformSystem.GetParentUid(args.User); + if (TryComp(zapTarget, out _)) + _electrocutionSystem.TryDoElectrocution(zapTarget, uid, 5, TimeSpan.FromSeconds(3), true, + ignoreInsulation: true); + } + private void Reset(RoundRestartCleanupEvent args) { Accumulator = 0; diff --git a/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs b/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs index 82ffc5e51fc..559d58298ba 100644 --- a/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs +++ b/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs @@ -101,9 +101,10 @@ public sealed partial class MeleeThrownComponent : Component /// /// Event raised before an entity is thrown by to see if a throw is allowed. /// If not handled, the enabled field on the component will be used instead. +/// Delta-V modification: Added User field, since it is now also raised on the entity being hit /// [ByRefEvent] -public record struct AttemptMeleeThrowOnHitEvent(EntityUid Hit, bool Cancelled = false, bool Handled = false); +public record struct AttemptMeleeThrowOnHitEvent(EntityUid Hit, Entity User, bool Cancelled = false, bool Handled = false); [ByRefEvent] public record struct MeleeThrowOnHitStartEvent(EntityUid User, EntityUid Used); diff --git a/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs b/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs index fc364286549..e840bd1ddd5 100644 --- a/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs +++ b/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs @@ -104,9 +104,14 @@ public bool CanThrowOnHit(Entity ent, EntityUid target { var (uid, comp) = ent; - var ev = new AttemptMeleeThrowOnHitEvent(target); - RaiseLocalEvent(uid, ref ev); + var ev = new AttemptMeleeThrowOnHitEvent(target, ent); + // Delta-V modification: Also raise on the entity being hit, in case it wants to object + RaiseLocalEvent(target, ref ev); + if (ev.Handled) + return !ev.Cancelled; + + RaiseLocalEvent(uid, ref ev); if (ev.Handled) return !ev.Cancelled; From 0fa44ba7a88c99e19c1eef55739e62948b87f996 Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Tue, 13 Feb 2024 00:59:17 +0000 Subject: [PATCH 15/21] Automatic Changelog Update (#824) --- Resources/Changelog/DeltaVChangelog.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 97edd4e23f9..731c238cbc7 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1622,3 +1622,11 @@ Entries: Vision trait. id: 242 time: '2024-02-12T22:25:02.0000000+00:00' +- author: DebugOk + changes: + - type: Tweak + message: >- + Glimmer probers now react violently to being hit by gorilla gauntlets if + glimmer is above 500 + id: 243 + time: '2024-02-13T00:59:01.0000000+00:00' From 84bad278e26c9be5108fac809ecd2200cad9110d Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Tue, 13 Feb 2024 08:29:36 -0500 Subject: [PATCH 16/21] Nerf ear destroyers (#827) --- Resources/Audio/DeltaV/Voice/Harpy/chirp1.ogg | Bin 6456 -> 6331 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Audio/DeltaV/Voice/Harpy/chirp1.ogg b/Resources/Audio/DeltaV/Voice/Harpy/chirp1.ogg index 07303b6626c89630aa752e4c1a514837c5ff6fa3..5eeea546775ec0ee1490ac56e237b1c81ec82565 100644 GIT binary patch delta 2447 zcmV;A32^qfGP^MvPiJRS00IC200000003fG00000003!0leUo>E(~H=00031008l< zgHN$k9uI$FSO5S50002plH?5%H8U$JGc`3k=g-sM*SojNyj}eGu2-3&mF_P=3e>*C zzT$Ln#fMEN=atjg8D?|nr*}>|z@$EBTM*i$SY>v^Rk&G-xqJZp@ZMyIR@o~76KV3l z?-A82-c8LlrtfPm+AaGOiNB0PaOy~e$95QRn*o3ONSm4`i39+=@Sc@yn)I(dfrfYe z0vEj5{$O_5@RqGt8Y0jy5yMAeweMGHnmKqRXyG9inx2f&tXNUlNG`^aOWEy*vyIaTTo4)VRKaLRKp=)%Uk|qDr6YOIt(; zv*Zcyc78IQ<8eO+NZ~_NqY~=^07M;k2;Pv5>wf(b@EIk~?}v;5R@)BHeuJr+`IgAdVQ06 z|LNKE&eTMCVw^q={7SbRvrR5W*3CRaCc++{J(P@N04M;b|5hJ@_3r1`n(%+Ilca`^ zg()!?2ZJxPF2b_~fm~plC;YeHdacNIvjBkGRREx0@&I7imxdAY>*$c3&jFDJ7XB^P zxa{*bdCj}_VxS641$M`Awq~@{zTsG}rUFPOO_+`1(BR5&+;P7dn5gbz~aSP(Bcq z$Pg}ZmgvZ_L82RRfoZ&&Bcj~E17_a93k4B*{O@AukIHo;0Jfm20}NoOMqb^7QPJMh z%qvJP6MAhno;BRK?fBnS@R#6yc_meOuZX)8?(l>JY;YAa0F`SF03aA7Atu=Zu!yvc zcjo2yYVPO#&DReY*@J%>*Cm@-Yr`ic4b|+J_uAhK!;M-BFEKXTwFK%40N%6vKW4Id z#(DD2LxWf9LjwRH&&Jl0`c>V``Tj3Cb!2b?03eTF9S#@zpgzS?!Xo|Qe649Xw|YWt zIOUJ}DR(CN$eIVp20%*;bq!1%0FGY1_S?H+|3`EH0PrQ$0oH#Sr}x1_QI8JuRbK7U zMw0+kt1}NmR-5aNyo@z=7XZ z00TftH}HV4pg!(-6aa+N-Z1*!pTyz3`1Rj8ev;!dqn^Jgi+I$~h3w?$TXM|by%eCR z_Sx!vYD8teFm!*x4g(H9^$p|e{X<6rU0vY41!2uXD?88_MB@Tr<>?~#8E8!YOf8mk zwFUqHpy}Y)%Q5&;ICL7Tc5xZ6jR~#h0AwpGWefuHs}e0fi!N61{64?FW_73t<1eC! z!#V)e0Q9>KFa{|~Mkdm8-21M=7@H+P!IPu`*wx^c0{(x-+_;}n-$xt&uGRZL#FWsc z>H*;Z4*+llV9J!xfWS3QbhN~zsnZ80GtWg!D; z$pvUF9@KL=6M!c8YNaSkocOVLVE%jBhcWnvqE^b7T(aid_H@&QSH(o*BVkCIGf_Ne zp2b1xN+f@Py=U-%u0jB=j+=TB{zq_`gAC>*b#H8qCKF}h15%WUOw?PBTohnrbUE#Y=yPo*S;N1R1>d$~IR3VDY6{lv_Ilg=fMb|MF0%}BmhbP03iE&tO>qF+{DME|09jR zGoye1oRGqoLp_)Xzy`QU8zM9Su!USch-PJ`0QdR3+j+e7^YKvf{g=8j@=nQ&Wq5Ip zr(O(VpBFEd#*t#`a6+UY0001>x5Lqe zzTUUZJSvhww4i@Sbv?A&|Lg-+*F!V4@j^dnZ|AG4bfmxiWd0M4Zu;!U0Tg4;k0i<) N0MP%hYSjSHF91LHseS+e delta 2573 zcmV+o3i9>4F}N}sPiJRS00IC200000005ym00000006CbEG>~5E)1bL00031006wK z$S|=~9uI$^IRF3x0002&2iq1AH8w0QI5{}!+uY&f$->devh?sic#KwhZyZV<`zo9c zuJ*O{g)v+^jh$gOhkknJq!)QrpR+9pZL+V*?1-yyvlR0$0|4~!KBOC}%t;_<>c4M? zDz%pqbB*Z-H5cuceTo!+8E?Vcq*?_hwmi##(4v2-6N4q(`bJd%0Nn82mCS~Jvy7JpFiXcjd;skDuIJ)egGh0@;=^by)g3Yhieo?1rdC?Z zlJ|d|liX-o14#S6$diJpBChDND^iDO-Om)VmR11t7_U)!*=(X{U@J5}U0*>3U{;7ODxeelXDSvoW|UdLul_ssSWBO#Kp$Q2^!Z6qAHh6CZJeJqg`*r>dz zC)q>ak~WtOrsQShzR9z+Fq}OEA$WS;&lGwDUoPcJYChiMXJ5U)zE0}aCKupv`2>FeuxL*% z0l@rziDBIIHW&t<@tHw@r1i)@5$~F3QK(Z+D__ND;%^!@EVGowk-$IR0| zrC~p+13ZD=+%Y}>Z>DW#%GkM$2Sn3N-=M>L<`aI(Ma{(a#4=Zngj}!jt-QJa^Kqkr z01#+(@yW%=M-T`h9sQVQbQw{G8SdH`_o6hwB1dZhmvMqXFvX=$?Z1Dov+JBg>74~# zP)KlTX&LVyk3|;B@=Tuqx}cZgPGcSA|IJ>m|ov-J`*VqmD5pZuu(A`~AC<=wpj5MeAdK?FP(a}UIhRE002O~#BEo-rIP?VbQZQgjY_X_vI~j?*!zFqiA{p?Hj0ABap#9x!%H@x`w<2?LhEn+HiPM8in6L4UN3kx7kq#L*j5Eirm;GV|- zpu~*f!O8jEytLaaS2v}}x2yNeG`DeLW*CujnEz${+P`PjC;(K=k3XhjGR)p&o3ioi z<&nh2%?fZS%*=m#%$Po#p0^s8CyShgi*oOttSglxX7 zr^A!fLjeE)CZBF`@o!+Sw#e-RuVAIfYfcT27yvSeZ4q%`UisBBvQnPz?gIg!24LRb z0nlIu$78u{cs#<_f(aZnfOX_i5P<6$SPuan0GD z19nRSFl8zUda zcS_BWoA_`_Ujn-8o$alcLqKIjL-lk7o)_Kt??vA`XGOnL^q&*YRPDgDyi?!+AAl(V zB{Tr=RIKv{puhqw%ai~BFp=Crp5FN{=6!w)e+Pg0aQ&UK*W&qiAiMY65FpT5YKJe0pSG;+NV zJIgjEWu?^UV!UcF`C#x9pul&=DGmUF>|Jbt2B5yUgMW*&ax=C&)4lnE(K&`V~|F{#D$J`z#PX5%@VP`xh}OUD_YrL;yBGPAen{+(pg>(FF)BQ$SyI z<6sJ}jCcQ@ZM#3&KW5-z%6L|7HJ5s|G%DW;y?yZy6pe9dlw7M!H0S+s3RTl@E4#ePT>Fm zcx~3{R?pL00*}oXq5z&n+{A7Fohf)q@8Z+PHQ?%ZXv2~Q7`xO;0xqp9=`1M#i1UA6 zrXG8C^ovjN#bG|a-Oe{RnMi$_=EZcNivh0mpx&ad53}opgUOvYvES~yn+en@mY;od zfX|1ud#jCfgR7_2Ki8vI8w2ck2PtUPb%e7yjb-hNt>pSg%32;7g^SSyJj(z8`^aQC zsRW1q?y6wQdMo`OWH?AB9}xAjR8fDkiX6n*mM`7L*#PL1IbTgLI(z|)9ej7SCivBn zi<9mph7-c80N!O(KCXV@Ie2zi0^iigi&W!IkMa=%#`BD1|8 z(xLvW+$FQ}+g9(05B}siIN(Fh3~7J%*a4#+gD3Jwq5xPTsJ~A=Z@ZWQl$Cx70EF#_ jbZE4!!u>Pald(p;M*;xAyz^;=mPe8U0D$tCcya&$CEoKJ From 2db9e9e60431e7639cf507178e1bce152815096b Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Tue, 13 Feb 2024 13:29:52 +0000 Subject: [PATCH 17/21] Automatic Changelog Update (#827) --- Resources/Changelog/DeltaVChangelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 731c238cbc7..d6365fb37d0 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1630,3 +1630,9 @@ Entries: glimmer is above 500 id: 243 time: '2024-02-13T00:59:01.0000000+00:00' +- author: VMSolidus + changes: + - type: Fix + message: Removed the ability of Harpies to destroy people's ears. + id: 244 + time: '2024-02-13T13:29:37.0000000+00:00' From 02b13528c14d99be3b4b997b81cea535d9249fd5 Mon Sep 17 00:00:00 2001 From: rosieposie <52761126+rosieposieeee@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:45:27 -0500 Subject: [PATCH 18/21] Signage For Meee (#799) signey --- .../Structures/Wallmounts/Signs/signs.yml | 40 ++++++++++++++++++ .../Wallmounts/signs.rsi/barbershop.png | Bin 0 -> 444 bytes .../Wallmounts/signs.rsi/direction_exam.png | Bin 0 -> 505 bytes .../Wallmounts/signs.rsi/direction_icu.png | Bin 0 -> 488 bytes .../Wallmounts/signs.rsi/laundromat.png | Bin 0 -> 397 bytes .../Structures/Wallmounts/signs.rsi/meta.json | 26 +++++++++++- 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/barbershop.png create mode 100644 Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_exam.png create mode 100644 Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_icu.png create mode 100644 Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/laundromat.png diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml index 6129ff6c413..2b0048f1a48 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml @@ -17,3 +17,43 @@ - type: Sprite sprite: DeltaV/Structures/Wallmounts/signs.rsi state: direction_mail + +- type: entity + parent: BaseSignDirectional + id: SignDirectionalExam + name: examination room sign + description: A direction sign, pointing out which way the examination rooms are. + components: + - type: Sprite + sprite: DeltaV/Structures/Wallmounts/signs.rsi + state: direction_exam + +- type: entity + parent: BaseSignDirectional + id: SignDirectionalICU + name: intensive care unit sign + description: A direction sign, pointing out which way the Intensive Care Unit is. + components: + - type: Sprite + sprite: DeltaV/Structures/Wallmounts/signs.rsi + state: direction_icu + +- type: entity + parent: BaseSign + id: SignLaundromat + name: laundromat sign + description: A sign indicating the laundromat. + components: + - type: Sprite + sprite: DeltaV/Structures/Wallmounts/signs.rsi + state: laundromat + +- type: entity + parent: BaseSign + id: SignBarbershop + name: barbershop sign + description: A sign indicating the barbershop. + components: + - type: Sprite + sprite: DeltaV/Structures/Wallmounts/signs.rsi + state: barbershop \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/barbershop.png b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/barbershop.png new file mode 100644 index 0000000000000000000000000000000000000000..d196072a32b0e63fa87efd8d4abe329dc2e4701d GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP*A$W zHKHUqKdq!Zu_%?nIW?!avREOwq%> zc!}@BWQo;x#qxXA7#`H_wfV(&=mp1WQ3ZWd)iRs#GrBeWC$7eM#c(+Iq6cM>UqhmFO+8KJ$uCACtm!;I@WMqSu{%` z%WWe@hnSFC41LcJZS$Gf66g6vSNYdmy<1af)iuOyv2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{I107+XAD978JRyuD@Uci2Io z_2F~wfPCkpiW(DkG;o)5XhmtYv;>?Ji1g^_n#Scay@^{Puz*9$eBDk5jR|MfKB|?O z-P8Q!|2SpxNxRx@lRW0-*v-$Lugwg!e~s}BF(AdzP|9|h2}p}E&M98pd8Kr2Zk7M5 zzt)Vee(kNTEBd_feEa38$uCNu7s<}`S6LZ5eaZXlnfVPeqo zz0`u0ub<1?#>suLvzq=o=a-V_+g&Pqef75e;*+SZuVeio4|LTvNgr;ID-T#TXEK5q z5$OiHAe!Md&oWjJoiO*{7KR7sE_8fmtmB=@&++~EQ!hLD2jBU2THm=7`_1^zSD=8I z{Db)`eHnK#9QwO)r_eceo$pbxjM2;{qQ&+1)+>HyeE4ri%o%nA`3+GZBT;O9YkNTd WZUyJM8A;Q!L2{n1elF{r5}E)B&Btc| literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_icu.png b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_icu.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d2e4cd5762be87ebe0539d27f4bf984f365749 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{I107>hk!978JRyuG#2?@)lq zv5)KZAKYo}Y%fsw$SQM(!*88W+mQ)&&dDAOrqWlwy4ycq z+xDI3&;FIROYa=+SDSEW@|4t-#ePgc>m$A=NC7DZhSzdF%s}c7o5$r6lZlHoChdwlO(lHwx!SGU--LaxdA;uH>xB%4*Pn+s{AXlfNVwaa33l9?Y6D&nqoI_48Bm;o zVZ*zFCLo&On(YiWhO#!dIs7Y@zpiO`|8HNd>wNxCP*&T&9SVBfC!2OYxMRlmmXsA*Na zc$xp4*@deMb8{`~f2*~*_}g3bzT Date: Tue, 13 Feb 2024 15:55:35 +0000 Subject: [PATCH 19/21] bring back paradox anomaly (#825) * refactor and add log * add api needed for objective * backport LastProfileLoaded * fix midround antag rule * evil twin spawning code * evil twin yml and stuff * m * hopefully fully rename it * fixy --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Components/ParadoxAnomalySpawner.cs | 17 ++ .../Systems/ParadoxAnomalySystem.cs | 164 ++++++++++++++++++ .../GenericAntag/GenericAntagSystem.cs | 8 + .../Systems/HumanoidAppearanceSystem.cs | 2 + .../Components/MidRoundAntagRuleComponent.cs | 9 +- .../StationEvents/Events/MidRoundAntagRule.cs | 27 ++- .../Terminator/Systems/TerminatorSystem.cs | 11 +- .../Humanoid/HumanoidAppearanceComponent.cs | 7 + .../SharedHumanoidAppearanceSystem.cs | 2 + .../game-rules/rule-paradox-anomaly.ftl | 5 + .../ghost/roles/ghost-role-component.ftl | 4 + .../objectives/conditions/paradox-anomaly.ftl | 2 + .../game-rules/rule-terminator.ftl | 6 +- .../Locale/en-US/prototypes/roles/antags.ftl | 4 +- .../Entities/Markers/Spawners/ghost_roles.yml | 17 +- .../Prototypes/DeltaV/GameRules/midround.yml | 11 ++ .../DeltaV/Objectives/paradox_anomaly.yml | 52 ++++++ Resources/Prototypes/GameRules/events.yml | 2 +- 18 files changed, 325 insertions(+), 25 deletions(-) create mode 100644 Content.Server/DeltaV/ParadoxAnomaly/Components/ParadoxAnomalySpawner.cs create mode 100644 Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs create mode 100644 Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-paradox-anomaly.ftl create mode 100644 Resources/Locale/en-US/deltav/objectives/conditions/paradox-anomaly.ftl create mode 100644 Resources/Prototypes/DeltaV/GameRules/midround.yml create mode 100644 Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml diff --git a/Content.Server/DeltaV/ParadoxAnomaly/Components/ParadoxAnomalySpawner.cs b/Content.Server/DeltaV/ParadoxAnomaly/Components/ParadoxAnomalySpawner.cs new file mode 100644 index 00000000000..c3264584a1c --- /dev/null +++ b/Content.Server/DeltaV/ParadoxAnomaly/Components/ParadoxAnomalySpawner.cs @@ -0,0 +1,17 @@ +using Content.Server.DeltaV.ParadoxAnomaly.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Server.DeltaV.ParadoxAnomaly.Components; + +/// +/// Creates a random paradox anomaly and tranfers mind to it when taken by a player. +/// +[RegisterComponent, Access(typeof(ParadoxAnomalySystem))] +public sealed partial class ParadoxAnomalySpawnerComponent : Component +{ + /// + /// Antag game rule to start for the paradox anomaly. + /// + [DataField] + public EntProtoId Rule = "ParadoxAnomaly"; +} diff --git a/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs b/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs new file mode 100644 index 00000000000..62d994dac34 --- /dev/null +++ b/Content.Server/DeltaV/ParadoxAnomaly/Systems/ParadoxAnomalySystem.cs @@ -0,0 +1,164 @@ +using Content.Server.DeltaV.ParadoxAnomaly.Components; +using Content.Server.DetailExaminable; +using Content.Server.GenericAntag; +using Content.Server.Ghost.Roles; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Psionics; +using Content.Server.Spawners.Components; +using Content.Server.Station.Systems; +using Content.Server.Terminator.Systems; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; +using Content.Shared.Preferences; +using Content.Shared.Roles; +using Content.Shared.Roles.Jobs; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; + +namespace Content.Server.DeltaV.ParadoxAnomaly.Systems; + +/// +/// 90% of the work is done by exterminator since its a reskin. +/// All the logic here is spawning since thats tricky. +/// +public sealed class ParadoxAnomalySystem : EntitySystem +{ + [Dependency] private readonly GenericAntagSystem _genericAntag = default!; + [Dependency] private readonly GhostRoleSystem _ghostRole = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly PsionicsSystem _psionics = default!; + [Dependency] private readonly SharedHumanoidAppearanceSystem _humanoid = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; + [Dependency] private readonly TerminatorSystem _terminator = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTakeGhostRole); + } + + private void OnTakeGhostRole(Entity ent, ref TakeGhostRoleEvent args) + { + Log.Info($"Using paradox anomaly spawner {ent}"); + if (!TrySpawnParadoxAnomaly(ent.Comp.Rule, out var twin)) + return; + + Log.Info($"Created paradox anomaly {ToPrettyString(twin):twin}"); + var role = Comp(ent); + _ghostRole.GhostRoleInternalCreateMindAndTransfer(args.Player, ent, twin.Value, role); + _ghostRole.UnregisterGhostRole((ent.Owner, role)); + + args.TookRole = true; + QueueDel(ent); + } + + private bool TrySpawnParadoxAnomaly(string rule, [NotNullWhen(true)] out EntityUid? twin) + { + twin = null; + + // Get a list of potential candidates + var candidates = new List<(EntityUid, EntityUid, SpeciesPrototype, HumanoidCharacterProfile)>(); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var mindContainer, out var humanoid)) + { + if (humanoid.LastProfileLoaded is not {} profile) + continue; + + if (!_proto.TryIndex(humanoid.Species, out var species)) + continue; + + if (_mind.GetMind(uid, mindContainer) is not {} mindId || !HasComp(mindId)) + continue; + + if (_role.MindIsAntagonist(mindId)) + continue; + + // TODO: when metempsychosis real skip whoever has Karma + + candidates.Add((uid, mindId, species, profile)); + } + + twin = SpawnParadoxAnomaly(candidates, rule); + return twin != null; + } + + private EntityUid? SpawnParadoxAnomaly(List<(EntityUid, EntityUid, SpeciesPrototype, HumanoidCharacterProfile)> candidates, string rule) + { + // Select a candidate. + if (candidates.Count == 0) + return null; + + var (uid, mindId, species, profile) = _random.Pick(candidates); + var jobId = Comp(mindId).Prototype; + var job = _proto.Index(jobId!); + + // Find a suitable spawn point. + var station = _station.GetOwningStation(uid); + var latejoins = new List(); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var spawnUid, out var spawnPoint)) + { + if (spawnPoint.SpawnType != SpawnPointType.LateJoin) + continue; + + if (_station.GetOwningStation(spawnUid) == station) + latejoins.Add(spawnUid); + } + + if (latejoins.Count == 0) + return null; + + // Spawn the twin. + var destination = Transform(_random.Pick(latejoins)).Coordinates; + var spawned = Spawn(species.Prototype, destination); + + // Set the kill target to the chosen player + _terminator.SetTarget(spawned, mindId); + _genericAntag.MakeAntag(spawned, rule); + + ////////////////////////// + // /!\ WARNING /!\ // + // MAJOR SHITCODE BELOW // + // /!\ WARNING /!\ // + ////////////////////////// + + // Copy the details. + _humanoid.LoadProfile(spawned, profile); + _metaData.SetEntityName(spawned, Name(uid)); + + if (TryComp(uid, out var detail)) + { + var detailCopy = EnsureComp(spawned); + detailCopy.Content = detail.Content; + } + + if (job.StartingGear != null && _proto.TryIndex(job.StartingGear, out var gear)) + { + _stationSpawning.EquipStartingGear(spawned, gear, profile); + _stationSpawning.EquipIdCard(spawned, + profile.Name, + job, + station); + } + + foreach (var special in job.Special) + { + special.AfterEquip(spawned); + } + + var psi = EnsureComp(spawned); + _psionics.RollPsionics(spawned, psi, false, 100); + + return spawned; + } +} diff --git a/Content.Server/GenericAntag/GenericAntagSystem.cs b/Content.Server/GenericAntag/GenericAntagSystem.cs index 6b1774159c1..8b7a16a4cb2 100644 --- a/Content.Server/GenericAntag/GenericAntagSystem.cs +++ b/Content.Server/GenericAntag/GenericAntagSystem.cs @@ -57,6 +57,14 @@ public void MakeAntag(EntityUid uid, EntityUid mindId, GenericAntagComponent? co _mind.TryAddObjective(mindId, mind, id); } } + + /// + /// DeltaV - used by paradox anomaly + /// + public void MakeAntag(EntityUid uid, string rule) + { + AddComp(uid).Rule = rule; + } } /// diff --git a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs index 36ab038562b..770e9fc39b3 100644 --- a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs +++ b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs @@ -64,6 +64,8 @@ public void CloneAppearance(EntityUid source, EntityUid target, HumanoidAppearan grammar.Gender = sourceHumanoid.Gender; } + targetHumanoid.LastProfileLoaded = sourceHumanoid.LastProfileLoaded; // DeltaV - let paradox anomaly be cloned + Dirty(targetHumanoid); } diff --git a/Content.Server/Nyanotrasen/StationEvents/Components/MidRoundAntagRuleComponent.cs b/Content.Server/Nyanotrasen/StationEvents/Components/MidRoundAntagRuleComponent.cs index 429db920dca..df8b687c3e1 100644 --- a/Content.Server/Nyanotrasen/StationEvents/Components/MidRoundAntagRuleComponent.cs +++ b/Content.Server/Nyanotrasen/StationEvents/Components/MidRoundAntagRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Server.StationEvents.Events; +using Robust.Shared.Prototypes; namespace Content.Server.StationEvents.Components; @@ -6,11 +7,11 @@ namespace Content.Server.StationEvents.Components; public sealed partial class MidRoundAntagRuleComponent : Component { [DataField("antags")] - public IReadOnlyList MidRoundAntags = new[] + public List MidRoundAntags = new() { "SpawnPointGhostRatKing", - "SpawnPointGhostVampSpider", - "SpawnPointGhostFugitive", - "MobEvilTwinSpawn" + //"SpawnPointGhostVampSpider", + //"SpawnPointGhostFugitive", + "SpawnPointGhostParadoxAnomaly" }; } diff --git a/Content.Server/Nyanotrasen/StationEvents/Events/MidRoundAntagRule.cs b/Content.Server/Nyanotrasen/StationEvents/Events/MidRoundAntagRule.cs index bf307737601..169f7575490 100644 --- a/Content.Server/Nyanotrasen/StationEvents/Events/MidRoundAntagRule.cs +++ b/Content.Server/Nyanotrasen/StationEvents/Events/MidRoundAntagRule.cs @@ -1,41 +1,38 @@ -using System.Linq; -using Robust.Shared.Random; using Content.Server.GameTicking.Rules.Components; using Content.Server.StationEvents.Components; +using Robust.Shared.Random; +using System.Linq; namespace Content.Server.StationEvents.Events; -internal sealed class MidRoundAntagRule : StationEventSystem +public sealed class MidRoundAntagRule : StationEventSystem { - [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly IRobustRandom _random = default!; protected override void Started(EntityUid uid, MidRoundAntagRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); - var spawnLocations = EntityManager.EntityQuery().ToList(); - var backupSpawnLocations = EntityManager.EntityQuery().ToList(); + var spawnLocations = EntityQuery().ToList(); + var backupSpawnLocations = EntityQuery().ToList(); TransformComponent? spawn = new(); if (spawnLocations.Count > 0) { - var spawnLoc = _robustRandom.Pick(spawnLocations); + var spawnLoc = _random.Pick(spawnLocations); spawn = spawnLoc.Item2; } else if (backupSpawnLocations.Count > 0) { - var spawnLoc = _robustRandom.Pick(backupSpawnLocations); + var spawnLoc = _random.Pick(backupSpawnLocations); spawn = spawnLoc.Item2; } - if (spawn == null) + if (spawn?.GridUid == null) return; - if (spawn.GridUid == null) - { - return; - } - - Spawn(_robustRandom.Pick(component.MidRoundAntags), spawn.Coordinates); + var proto = _random.Pick(component.MidRoundAntags); + Log.Info($"Spawning midround antag {proto} at {spawn.Coordinates}"); + Spawn(proto, spawn.Coordinates); } } diff --git a/Content.Server/Terminator/Systems/TerminatorSystem.cs b/Content.Server/Terminator/Systems/TerminatorSystem.cs index b6699352779..837778d3c41 100644 --- a/Content.Server/Terminator/Systems/TerminatorSystem.cs +++ b/Content.Server/Terminator/Systems/TerminatorSystem.cs @@ -24,7 +24,7 @@ public override void Initialize() private void OnMapInit(EntityUid uid, TerminatorComponent comp, MapInitEvent args) { // cyborg doesn't need to breathe - RemComp(uid); + //RemComp(uid); // DeltaV - paradox anomaly does actually need to breathe } private void OnSpawned(EntityUid uid, TerminatorComponent comp, GhostRoleSpawnerUsedEvent args) @@ -47,6 +47,15 @@ private void OnCreated(EntityUid uid, TerminatorComponent comp, ref GenericAntag _role.MindAddRole(mindId, new TerminatorRoleComponent(), mind); } + /// + /// DeltaV - used for paradox anomaly. + /// + public void SetTarget(Entity ent, EntityUid mindId) + { + ent.Comp ??= EnsureComp(ent); + ent.Comp.Target = mindId; + } + /// /// Create a spawner at a position and return it. /// diff --git a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs index 82d6964522c..b0bc0eb9a0c 100644 --- a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs +++ b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Preferences; // DeltaV using Robust.Shared.Enums; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -82,6 +83,12 @@ public sealed partial class HumanoidAppearanceComponent : Component /// [ViewVariables(VVAccess.ReadOnly)] public Color? CachedFacialHairColor; + + /// + /// DeltaV - let paradox anomaly be cloned + /// + [ViewVariables] + public HumanoidCharacterProfile? LastProfileLoaded; } [DataDefinition] diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index 597afcbda2a..4974e283dd5 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -329,6 +329,8 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile profile, humanoid.Age = profile.Age; + humanoid.LastProfileLoaded = profile; // DeltaV - let paradox anomaly be cloned + Dirty(humanoid); } diff --git a/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-paradox-anomaly.ftl b/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-paradox-anomaly.ftl new file mode 100644 index 00000000000..45bd554deef --- /dev/null +++ b/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-paradox-anomaly.ftl @@ -0,0 +1,5 @@ +paradox-anomaly-round-end-agent-name = Paradox Anomaly + +objective-issuer-self = [color=#1708EC]Self[/color] + +# briefing is in terminator ftl diff --git a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl index f2e9238dfbf..977a5f47bcb 100644 --- a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl @@ -6,3 +6,7 @@ ghost-role-information-nukie-mouse-rules = Normal syndicate antagonist rules app ghost-role-information-listeningop-name = Listening Post Operative ghost-role-information-listeningop-description = You are a Listening Post operative. Get into range, observe the station, intercept communications and assist any operatives in the area! ghost-role-information-listeningop-rules = You are a Syndicate Operative tasked with the continuous reporting and monitoring of the station and its activities, as well as assisting any fellow operatives who may be aboard the station. As an antagonist, do whatever is required for you to complete this task. Make sure your station doesn't fall into enemy hands and DO NOT abandon your station! Hide your existence at any cost! + +ghost-role-information-paradox-anomaly-name = Paradox Anomaly +ghost-role-information-paradox-anomaly-description = Replace your double, or befriend them. +ghost-role-information-paradox-anomaly-rules = Try and replace your twin with this funny roleplay antag rather than plasma flooding the station or something. You can also just befriend them. diff --git a/Resources/Locale/en-US/deltav/objectives/conditions/paradox-anomaly.ftl b/Resources/Locale/en-US/deltav/objectives/conditions/paradox-anomaly.ftl new file mode 100644 index 00000000000..2eac3339bf4 --- /dev/null +++ b/Resources/Locale/en-US/deltav/objectives/conditions/paradox-anomaly.ftl @@ -0,0 +1,2 @@ +objective-paradox-anomaly-kill-title = Kill this universe's {$targetName} +objective-paradox-anomaly-friend-title = Keep your new friend {$targetName} alive diff --git a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl b/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl index 41237a5c10d..2e167431773 100644 --- a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl +++ b/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl @@ -8,7 +8,11 @@ terminator-role-greeting = Use any means at your disposal to complete the mission. Glory to Cybersun. -terminator-role-briefing = Kill the target at all costs. +# DeltaV - paradox anomaly +terminator-role-briefing = + You are a bluespace anomaly that looks and sound identical to someone from this reality. + Kill them and assume their identity, or talk it out and become friends. + Your objectives support either playstyle (and you obviously can't do both). terminator-endoskeleton-gib-popup = All the battered flesh falls apart, revealing a titanium endoskeleton! terminator-endoskeleton-burn-popup = The seared flesh is burned to a crisp, revealing a titanium endoskeleton! diff --git a/Resources/Locale/en-US/prototypes/roles/antags.ftl b/Resources/Locale/en-US/prototypes/roles/antags.ftl index d12f70cda25..40f2c9a6820 100644 --- a/Resources/Locale/en-US/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/prototypes/roles/antags.ftl @@ -31,5 +31,5 @@ roles-antag-space-ninja-objective = Use your stealth to sabotage the station, no roles-antag-thief-name = Thief roles-antag-thief-objective = Add some NT property to your personal collection without using violence. -roles-antag-terminator-name = Exterminator -roles-antag-terminator-objective = Kill the target at all costs, the future depends on it. +roles-antag-terminator-name = Paradox Anomaly # DeltaV - paradox anomaly +roles-antag-terminator-objective = Replace your double, or befriend them. # DeltaV - paradox anomaly diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml index b43f50890c2..88a2488db09 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml @@ -44,4 +44,19 @@ layers: - state: green - sprite: Structures/Wallmounts/signs.rsi - state: radiation \ No newline at end of file + state: radiation + +- type: entity + parent: MarkerBase + id: SpawnPointGhostParadoxAnomaly + name: paradox anomaly spawn point + components: + - type: GhostRole + name: ghost-role-information-paradox-anomaly-name + description: ghost-role-information-paradox-anomaly-description + rules: ghost-role-information-paradox-anomaly-rules + - type: ParadoxAnomalySpawner + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green diff --git a/Resources/Prototypes/DeltaV/GameRules/midround.yml b/Resources/Prototypes/DeltaV/GameRules/midround.yml new file mode 100644 index 00000000000..82b47c05718 --- /dev/null +++ b/Resources/Prototypes/DeltaV/GameRules/midround.yml @@ -0,0 +1,11 @@ +- type: entity + noSpawn: true + parent: BaseGameRule + id: ParadoxAnomaly + components: + - type: GenericAntagRule + agentName: paradox-anomaly-round-end-agent-name + objectives: + - ParadoxAnomalyKillObjective + - ParadoxAnomalyFriendObjective + - ParadoxAnomalyEscapeObjective diff --git a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml new file mode 100644 index 00000000000..dd0b74c4616 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml @@ -0,0 +1,52 @@ +- type: entity + abstract: true + parent: BaseTerminatorObjective # mrp terminator real + id: BaseParadoxAnomalyObjective + components: + - type: Objective + issuer: self + +# not using base kill/keep alive objectives since these intentionally conflict with eachother +- type: entity + noSpawn: true + parent: BaseParadoxAnomalyObjective + id: ParadoxAnomalyKillObjective + description: This universe doesn't have room for both of us. + components: + - type: Objective + icon: + sprite: Objects/Weapons/Guns/Pistols/viper.rsi + state: icon + - type: TargetObjective + title: objective-paradox-anomaly-kill-title + - type: TerminatorTargetOverride + - type: KillPersonCondition + requireDead: true + +- type: entity + noSpawn: true + parent: BaseParadoxAnomalyObjective + id: ParadoxAnomalyFriendObjective + description: Perhaps there is room, as friends. + components: + - type: Objective + icon: + sprite: Objects/Misc/bureaucracy.rsi + state: folder-white + - type: TargetObjective + title: objective-paradox-anomaly-friend-title + - type: TerminatorTargetOverride + - type: KeepAliveCondition + +- type: entity + noSpawn: true + parent: [BaseParadoxAnomalyObjective, BaseLivingObjective] + id: ParadoxAnomalyEscapeObjective + name: Escape to centcom alive and unrestrained. + description: This is your universe now. + components: + - type: Objective + icon: + sprite: Structures/Furniture/chairs.rsi + state: shuttle + - type: EscapeShuttleCondition diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 83dffda3095..2dcf3603cf9 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -280,7 +280,7 @@ lightBreakChancePerSecond: 0.0003 doorToggleChancePerSecond: 0.001 -# - type: entity +# - type: entity # DeltaV - replaced terminator with paradox anomaly in midroundantag rule # parent: BaseGameRule # id: TerminatorSpawn # noSpawn: true From 87d45e4ef14ea441de078c6f1a3d8a1f9a95d56b Mon Sep 17 00:00:00 2001 From: DeltaV-Bot Date: Tue, 13 Feb 2024 15:55:49 +0000 Subject: [PATCH 20/21] Automatic Changelog Update (#825) --- Resources/Changelog/DeltaVChangelog.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index d6365fb37d0..baab23e24cc 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1636,3 +1636,11 @@ Entries: message: Removed the ability of Harpies to destroy people's ears. id: 244 time: '2024-02-13T13:29:37.0000000+00:00' +- author: deltanedas + changes: + - type: Add + message: >- + Brought back paradox anomalies. Beware anyone that looks *just* like + you! + id: 245 + time: '2024-02-13T15:55:35.0000000+00:00' From 6687a3187faaeac78153e17d1f4298365efda7a2 Mon Sep 17 00:00:00 2001 From: Debug <49997488+DebugOk@users.noreply.github.com> Date: Tue, 13 Feb 2024 17:12:37 +0100 Subject: [PATCH 21/21] Prevent action runners from being wasted on DeltaV-Bot (#831) Stop actions from running on our bot --- .github/workflows/build-map-renderer.yml | 2 +- .github/workflows/build-test-debug.yml | 2 +- .github/workflows/conflict-labeler.yml | 2 +- .github/workflows/labeler-pr.yml | 2 +- .github/workflows/test-packaging.yml | 2 +- .github/workflows/validate-rgas.yml | 2 +- .github/workflows/validate_mapfiles.yml | 2 +- .github/workflows/yaml-linter.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-map-renderer.yml b/.github/workflows/build-map-renderer.yml index 35aed1a7f7f..01575f64b9b 100644 --- a/.github/workflows/build-map-renderer.yml +++ b/.github/workflows/build-map-renderer.yml @@ -10,7 +10,7 @@ on: jobs: build: - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' strategy: matrix: os: [ubuntu-latest] diff --git a/.github/workflows/build-test-debug.yml b/.github/workflows/build-test-debug.yml index 47f9fd1a514..519f5af6f49 100644 --- a/.github/workflows/build-test-debug.yml +++ b/.github/workflows/build-test-debug.yml @@ -10,7 +10,7 @@ on: jobs: build: - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' strategy: matrix: os: [ubuntu-latest] diff --git a/.github/workflows/conflict-labeler.yml b/.github/workflows/conflict-labeler.yml index 1a9b91601dc..a47965334c5 100644 --- a/.github/workflows/conflict-labeler.yml +++ b/.github/workflows/conflict-labeler.yml @@ -8,7 +8,7 @@ on: jobs: Label: - if: github.actor != 'PJBot' + if: github.actor != 'PJBot' && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: - name: Check for Merge Conflicts diff --git a/.github/workflows/labeler-pr.yml b/.github/workflows/labeler-pr.yml index 711eb0ccac0..e1755aa26e3 100644 --- a/.github/workflows/labeler-pr.yml +++ b/.github/workflows/labeler-pr.yml @@ -5,7 +5,7 @@ on: jobs: labeler: - if: github.actor != 'PJBot' + if: github.actor != 'PJBot' && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: - uses: actions/labeler@v3 diff --git a/.github/workflows/test-packaging.yml b/.github/workflows/test-packaging.yml index 2dce502697d..ccece69adb6 100644 --- a/.github/workflows/test-packaging.yml +++ b/.github/workflows/test-packaging.yml @@ -29,7 +29,7 @@ on: jobs: build: name: Test Packaging - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/validate-rgas.yml b/.github/workflows/validate-rgas.yml index 2c4bb40fdf3..0ed04021ebd 100644 --- a/.github/workflows/validate-rgas.yml +++ b/.github/workflows/validate-rgas.yml @@ -9,7 +9,7 @@ on: jobs: yaml-schema-validation: name: YAML RGA schema validator - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.6.0 diff --git a/.github/workflows/validate_mapfiles.yml b/.github/workflows/validate_mapfiles.yml index fb11e1a4697..43d77841a86 100644 --- a/.github/workflows/validate_mapfiles.yml +++ b/.github/workflows/validate_mapfiles.yml @@ -9,7 +9,7 @@ on: jobs: yaml-schema-validation: name: YAML map schema validator - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.6.0 diff --git a/.github/workflows/yaml-linter.yml b/.github/workflows/yaml-linter.yml index 691eb29f1de..796795b234d 100644 --- a/.github/workflows/yaml-linter.yml +++ b/.github/workflows/yaml-linter.yml @@ -10,7 +10,7 @@ on: jobs: build: name: YAML Linter - if: github.actor != 'PJBot' && github.event.pull_request.draft == false + if: github.actor != 'PJBot' && github.event.pull_request.draft == false && github.actor != 'DeltaV-Bot' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.6.0