From da0f192444c6661714a6d2e6391e91a7d1c35452 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Mon, 25 Mar 2024 21:57:32 +0900 Subject: [PATCH] Ling stuff (#245) * - fix: Absorb is transfered on transform. * - fix: Transfer absorbed count on transform. * - fix: Transfer rev roles on transform. * - add: Ling mood effect. * - tweak: Buff armblade. * - fix: Transfer mood on transform. * - tweak: Better absorbed desc. * - add: Hive head. * - remove: No popup. --- .../Changeling/ChangelingRuleSystem.cs | 3 + .../Changeling/ChangelingSystem.Abilities.cs | 86 +++++++++++++++--- Content.Server/Changeling/ChangelingSystem.cs | 3 +- Content.Server/Changeling/HiveHeadSystem.cs | 50 ++++++++++ .../Rules/RevolutionaryRuleSystem.cs | 21 +++++ Content.Server/_White/Mood/MoodSystem.cs | 8 ++ .../Changeling/HiveHeadComponent.cs | 20 ++++ Content.Shared/Changeling/SharedChangeling.cs | 8 ++ .../Changeling/SharedTentacleGun.cs | 18 ++++ .../ru-RU/White/changeling/changeling.ftl | 2 +- .../white/changeling/changeling-entities.ftl | 11 ++- Resources/Prototypes/Actions/changeling.yml | 14 +++ .../Prototypes/Catalog/changeling_catalog.yml | 13 +++ .../Objects/Weapons/Melee/armblade.yml | 5 +- .../Entities/Clothing/Head/hive_head.yml | 46 ++++++++++ .../Actions/changeling.rsi/hive_head.png | Bin 0 -> 570 bytes .../White/Actions/changeling.rsi/meta.json | 3 + .../Head/hive.rsi/equipped-HELMET.png | Bin 0 -> 786 bytes .../White/Clothing/Head/hive.rsi/icon.png | Bin 0 -> 351 bytes .../White/Clothing/Head/hive.rsi/meta.json | 18 ++++ 20 files changed, 310 insertions(+), 19 deletions(-) create mode 100644 Content.Server/Changeling/HiveHeadSystem.cs create mode 100644 Content.Shared/Changeling/HiveHeadComponent.cs create mode 100644 Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml create mode 100644 Resources/Textures/White/Actions/changeling.rsi/hive_head.png create mode 100644 Resources/Textures/White/Clothing/Head/hive.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/White/Clothing/Head/hive.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Head/hive.rsi/meta.json diff --git a/Content.Server/Changeling/ChangelingRuleSystem.cs b/Content.Server/Changeling/ChangelingRuleSystem.cs index ff97fe04a1..7dbc84d47c 100644 --- a/Content.Server/Changeling/ChangelingRuleSystem.cs +++ b/Content.Server/Changeling/ChangelingRuleSystem.cs @@ -9,6 +9,7 @@ using Content.Server.Mind; using Content.Server.NPC.Systems; using Content.Server.Objectives; using Content.Server.Roles; +using Content.Shared._White.Mood; using Content.Shared.Changeling; using Content.Shared.GameTicking; using Content.Shared.Objectives.Components; @@ -191,6 +192,8 @@ public sealed class ChangelingRuleSystem : GameRuleSystem(entity, out var readyChangeling); readyChangeling.HiveName = _nameGenerator.GetName(); diff --git a/Content.Server/Changeling/ChangelingSystem.Abilities.cs b/Content.Server/Changeling/ChangelingSystem.Abilities.cs index 2154870c19..4d5a3f310d 100644 --- a/Content.Server/Changeling/ChangelingSystem.Abilities.cs +++ b/Content.Server/Changeling/ChangelingSystem.Abilities.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server._White.Cult.GameRule; +using Content.Server._White.Mood; using Content.Server.Administration.Systems; using Content.Server.Bible.Components; using Content.Server.Body.Components; @@ -84,6 +85,7 @@ public sealed partial class ChangelingSystem [Dependency] private readonly CuffableSystem _cuffable = default!; [Dependency] private readonly NukeopsRuleSystem _nukeOps = default!; [Dependency] private readonly CultRuleSystem _cult = default!; + [Dependency] private readonly RevolutionaryRuleSystem _rev = default!; [Dependency] private readonly NpcFactionSystem _faction = default!; [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly EmpSystem _empSystem = default!; @@ -91,6 +93,7 @@ public sealed partial class ChangelingSystem [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly ServerBorerSystem _borer = default!; [Dependency] private readonly CarryingSystem _carrying = default!; + [Dependency] private readonly MoodSystem _mood = default!; private void InitializeAbilities() { @@ -116,6 +119,7 @@ public sealed partial class ChangelingSystem SubscribeLocalEvent(OnArmBlade); SubscribeLocalEvent(OnShield); SubscribeLocalEvent(OnArmor); + SubscribeLocalEvent(OnHiveHead); SubscribeLocalEvent(OnTentacleArm); SubscribeLocalEvent(OnTransformDoAfter); @@ -147,6 +151,13 @@ public sealed partial class ChangelingSystem private const string ChangelingArmor = "ActionArmor"; private const string ChangelingTentacleArm = "ActionTentacleArm"; + private const string OuterName = "outerClothing"; + private const string HeadName = "head"; + + private const string ArmorName = "ClothingOuterChangeling"; + private const string HelmetName = "ClothingHeadHelmetLing"; + private const string HiveHeadName = "ClothingHeadHelmetLingHive"; + #endregion #region Handlers @@ -564,15 +575,10 @@ public sealed partial class ChangelingSystem private void OnArmor(EntityUid uid, ChangelingComponent component, ChitinousArmorActionEvent args) { - const string outerName = "outerClothing"; - const string headName = "head"; - const string armorName = "ClothingOuterChangeling"; - const string helmetName = "ClothingHeadHelmetLing"; + _inventorySystem.TryUnequip(uid, OuterName, out var outer, true, true); + _inventorySystem.TryUnequip(uid, HeadName, out var helmet, true, true); - _inventorySystem.TryUnequip(uid, outerName, out var outer, true, true); - _inventorySystem.TryUnequip(uid, headName, out var helmet, true, true); - - if (TryComp(outer, out MetaDataComponent? metaData) && metaData.EntityPrototype is {ID: armorName}) + if (TryComp(outer, out MetaDataComponent? metaData) && metaData.EntityPrototype is {ID: ArmorName}) { args.Handled = true; return; @@ -581,16 +587,49 @@ public sealed partial class ChangelingSystem if (!TakeChemicals(uid, component, 20)) { if (outer != null) - _inventorySystem.TryEquip(uid, outer.Value, outerName, true, true); + _inventorySystem.TryEquip(uid, outer.Value, OuterName, true, true); if (helmet != null) - _inventorySystem.TryEquip(uid, helmet.Value, headName, true, true); + _inventorySystem.TryEquip(uid, helmet.Value, HeadName, true, true); return; } - _inventorySystem.SpawnItemInSlot(uid, outerName, armorName, true, true); - _inventorySystem.SpawnItemInSlot(uid, headName, helmetName, true, true); + _inventorySystem.SpawnItemInSlot(uid, OuterName, ArmorName, true, true); + _inventorySystem.SpawnItemInSlot(uid, HeadName, HelmetName, true, true); + + args.Handled = true; + } + + private void OnHiveHead(EntityUid uid, ChangelingComponent component, HiveHeadActionEvent args) + { + if (!_mobStateSystem.IsAlive(uid)) + return; + + _inventorySystem.TryUnequip(uid, HeadName, out var helmet, true, true); + + if (TryComp(helmet, out MetaDataComponent? metaData) && metaData.EntityPrototype != null) + { + switch (metaData.EntityPrototype.ID) + { + case HiveHeadName: + args.Handled = true; + return; + case HelmetName: + _inventorySystem.TryUnequip(uid, OuterName, out _, true, true); + break; + } + } + + if (!TakeChemicals(uid, component, 15)) + { + if (helmet != null) + _inventorySystem.TryEquip(uid, helmet.Value, HeadName, true, true); + + return; + } + + _inventorySystem.SpawnItemInSlot(uid, HeadName, HiveHeadName, true, true); args.Handled = true; } @@ -783,6 +822,7 @@ public sealed partial class ChangelingSystem ChemicalsBalance = component.ChemicalsBalance, AbsorbedEntities = component.AbsorbedEntities, IsInited = component.IsInited, + AbsorbedCount = component.AbsorbedCount, IsLesserForm = true }; @@ -928,7 +968,8 @@ public sealed partial class ChangelingSystem HiveName = lingComp.HiveName, ChemicalsBalance = lingComp.ChemicalsBalance, AbsorbedEntities = lingComp.AbsorbedEntities, - IsInited = lingComp.IsInited + IsInited = lingComp.IsInited, + AbsorbedCount = lingComp.AbsorbedCount }; EntityManager.AddComponent(polymorphEntity.Value, toAdd); @@ -955,6 +996,9 @@ public sealed partial class ChangelingSystem private void TransferComponents(EntityUid from, EntityUid to) { + if (HasComp(from)) + EnsureComp(to); + if (HasComp(from)) EnsureComp(to); @@ -992,6 +1036,22 @@ public sealed partial class ChangelingSystem } } + if (TryComp(from, out MoodComponent? mood)) + { + var newMood = EnsureComp(to); + foreach (var effect in mood.CategorisedEffects) + { + _mood.ApplyEffect(to, newMood, effect.Value); + } + + foreach (var effect in mood.UncategorisedEffects) + { + _mood.ApplyEffect(to, newMood, effect.Key); + } + } + + _rev.TransferRole(from, to); + _nukeOps.TransferRole(from, to); _cult.TransferRole(from, to); diff --git a/Content.Server/Changeling/ChangelingSystem.cs b/Content.Server/Changeling/ChangelingSystem.cs index 4e07e442bb..94a34a2ba2 100644 --- a/Content.Server/Changeling/ChangelingSystem.cs +++ b/Content.Server/Changeling/ChangelingSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Store.Systems; using Content.Shared.Actions; using Content.Shared.Changeling; using Content.Shared.Examine; +using Content.Shared.IdentityManagement; using Content.Shared.Implants; using Content.Shared.Implants.Components; @@ -41,7 +42,7 @@ public sealed partial class ChangelingSystem : EntitySystem private void OnExamine(EntityUid uid, AbsorbedComponent component, ExaminedEvent args) { - args.PushMarkup(Loc.GetString("changeling-juices-sucked-up")); + args.PushMarkup(Loc.GetString("changeling-juices-sucked-up", ("target", Identity.Entity(uid, EntityManager)))); } #endregion diff --git a/Content.Server/Changeling/HiveHeadSystem.cs b/Content.Server/Changeling/HiveHeadSystem.cs new file mode 100644 index 0000000000..599eac7eff --- /dev/null +++ b/Content.Server/Changeling/HiveHeadSystem.cs @@ -0,0 +1,50 @@ +using Content.Server.Actions; +using Content.Shared.Actions; +using Content.Shared.Changeling; +using Content.Shared.Inventory; + +namespace Content.Server.Changeling; + +public sealed class HiveHeadSystem : EntitySystem +{ + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly ActionContainerSystem _actionContainer = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnGetActions); + SubscribeLocalEvent(OnReleaseBees); + } + + private void OnReleaseBees(Entity ent, ref ReleaseBeesEvent args) + { + args.Handled = true; + + var coords = Transform(args.Performer).Coordinates; + + for (var i = 0; i < ent.Comp.BeesAmount; i++) + { + Spawn(ent.Comp.BeeProto, coords); + } + } + + private void OnGetActions(Entity ent, ref GetItemActionsEvent args) + { + if (args.SlotFlags == SlotFlags.HEAD) + args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.Action); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + _actions.RemoveAction(ent, ent.Comp.ActionEntity); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _actionContainer.EnsureAction(ent, ref ent.Comp.ActionEntity, ent.Comp.Action); + } +} diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index 08d34fc302..29dd5a4214 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -358,4 +358,25 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem(transferFrom)) + { + EnsureComp(transferTo); + RemComp(transferFrom); + } + + if (HasComp(transferFrom)) + { + EnsureComp(transferTo); + RemComp(transferFrom); + } + + if (!HasComp(transferFrom)) + return; + + EnsureComp(transferTo); + RemComp(transferFrom); + } } diff --git a/Content.Server/_White/Mood/MoodSystem.cs b/Content.Server/_White/Mood/MoodSystem.cs index afc97e9664..1beab5742c 100644 --- a/Content.Server/_White/Mood/MoodSystem.cs +++ b/Content.Server/_White/Mood/MoodSystem.cs @@ -80,6 +80,14 @@ public sealed class MoodSystem : EntitySystem ApplyEffect(uid, component, prototype); } + public void ApplyEffect(EntityUid uid, MoodComponent component, string id) + { + if (!_prototypeManager.TryIndex(id, out var prototype)) + return; + + ApplyEffect(uid, component, prototype); + } + private void ApplyEffect(EntityUid uid, MoodComponent component, MoodEffectPrototype prototype) { var amount = component.CurrentMoodLevel; diff --git a/Content.Shared/Changeling/HiveHeadComponent.cs b/Content.Shared/Changeling/HiveHeadComponent.cs new file mode 100644 index 0000000000..6a138c95b7 --- /dev/null +++ b/Content.Shared/Changeling/HiveHeadComponent.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Changeling; + +[RegisterComponent] +public sealed partial class HiveHeadComponent : Component +{ + [DataField] + public int BeesAmount = 4; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string BeeProto = "MobTemporaryAngryBee"; + + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Action = "ActionReleaseBees"; + + [DataField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/Changeling/SharedChangeling.cs b/Content.Shared/Changeling/SharedChangeling.cs index 0c01f1c7a3..5c00fdf2ad 100644 --- a/Content.Shared/Changeling/SharedChangeling.cs +++ b/Content.Shared/Changeling/SharedChangeling.cs @@ -86,6 +86,14 @@ public sealed partial class ChitinousArmorActionEvent : InstantActionEvent { } +public sealed partial class HiveHeadActionEvent : InstantActionEvent +{ +} + +public sealed partial class ReleaseBeesEvent : InstantActionEvent +{ +} + public sealed partial class TentacleArmActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Changeling/SharedTentacleGun.cs b/Content.Shared/Changeling/SharedTentacleGun.cs index eba52ec191..154743fb2c 100644 --- a/Content.Shared/Changeling/SharedTentacleGun.cs +++ b/Content.Shared/Changeling/SharedTentacleGun.cs @@ -1,6 +1,7 @@ using System.Numerics; using Content.Shared.Hands.EntitySystems; using Content.Shared.Humanoid; +using Content.Shared.Mobs.Components; using Content.Shared.Physics; using Content.Shared.Projectiles; using Content.Shared.Stunnable; @@ -11,6 +12,7 @@ using Content.Shared.Weapons.Ranged.Systems; using Robust.Shared.Input; using Robust.Shared.Network; using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Events; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Timing; @@ -36,6 +38,22 @@ public abstract class SharedTentacleGun : EntitySystem SubscribeLocalEvent(OnTentacleShot); SubscribeLocalEvent(OnMapInit); // WD SubscribeLocalEvent(OnTentacleCollide); + SubscribeLocalEvent(PreventCollision); + } + + private void PreventCollision(Entity ent, ref PreventCollideEvent args) + { + if (HasComp(args.OtherEntity) && !HasComp(args.OtherEntity)) + { + args.Cancelled = true; + return; + } + + if (!TryComp(ent, out ProjectileComponent? projectile)) + return; + + if (args.OtherEntity == projectile.Shooter || args.OtherEntity == projectile.Weapon) + args.Cancelled = true; } // WD EDIT START diff --git a/Resources/Locale/ru-RU/White/changeling/changeling.ftl b/Resources/Locale/ru-RU/White/changeling/changeling.ftl index afa6cec777..ea0e539a0e 100644 --- a/Resources/Locale/ru-RU/White/changeling/changeling.ftl +++ b/Resources/Locale/ru-RU/White/changeling/changeling.ftl @@ -2,7 +2,7 @@ chat-manager-changeling-channel-name = УЛЕЙ hud-chatbox-select-channel-Changeling = Улей chat-manager-send-changeling-chat-wrap-message = [bold]\[УЛЕЙ\][/bold] [font size=13][italic][bold]{ $player }[/bold] шипит, "{ $message }"[/italic][/font] -changeling-juices-sucked-up = [color=#A30000]Все его соки были высосаны![/color] +changeling-juices-sucked-up = [color=#A30000]Все { POSS-ADJ($target) } соки были высосаны![/color] changeling-unknown-creature = Неизвестное существо diff --git a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl index 7ea6754f48..27f6c1e246 100644 --- a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl +++ b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl @@ -32,7 +32,7 @@ changeling-ability-transform-sting = Жало трансформации changeling-ability-transform-sting-desc = Вводит в кровь цели вирус, заставляющий её превратиться в другое существо. Стоит 50 химикатов. changeling-ability-extraction-sting = Жало извлечения -changeling-ability-extraction-sting-desc = Безшумно и безопасно извлекает ДНК из цели. Стоит 25 химикатов. +changeling-ability-extraction-sting-desc = Бесшумно и безопасно извлекает ДНК из цели. Стоит 25 химикатов. changeling-ability-tentacle-arm = Рука-щупальце changeling-ability-tentacle-arm-desc = Превращает одну из рук в щупальце, способное притягивать людей или забирать вещи из их рук. Стоит 10 химикатов. @@ -40,6 +40,9 @@ changeling-ability-tentacle-arm-desc = Превращает одну из рук changeling-ability-changeling-armor = Хитиновая броня changeling-ability-changeling-armor-desc = Надувает тело, превращая его в крепкую хитиновую броню. При использовании замедляет регенерацию химикатов на 25%. Стоит 20 химикатов. +changeling-ability-hive = Голова улья +changeling-ability-hive-desc = Хотя голова улья не предоставляет особых возможностей для защиты, она позволяет отправлять пчёл в атаку на цели. Также защищает от вспышек и яркого света. Несовместимо с хитиновой бронёй. Стоит 15 химикатов. + changeling-ability-changeling-shield = Органический щит changeling-ability-changeling-shield-desc = Превращает одну из рук в крепкий органический щит. Стоит 20 химикатов. @@ -49,6 +52,9 @@ changeling-ability-changeling-armblade-desc = Превращает одну из changeling-ability-changeling-lesser-form = Примитивная форма changeling-ability-changeling-lesser-form-desc = Превращает в самую примитивную форму. Полезно для побега из наручников. Стоит 5 химикатов. +changeling-ability-bees = Выпустить пчёл +changeling-ability-bees-desc = Выпускает 4 агрессивных пчелы из улья. + ent-ActionChangelingShop = Эволюции .desc = Эволюционируйте и развивайтесь. @@ -67,6 +73,9 @@ ent-OrganicShield = органический щит ent-ClothingOuterChangeling = хитиновая броня .desc = Броня из хитина и плоти. +ent-ClothingHeadHelmetLingHive = голова улья + .desc = Странное восковое образование, покрывающее голову. Вызывает шум в ушах. + ent-TentacleArmGun = рука-щупальце .desc = Огромное щупальце, способное притягивать людей и вырывать предметы из их рук. diff --git a/Resources/Prototypes/Actions/changeling.yml b/Resources/Prototypes/Actions/changeling.yml index 4786036641..6d8f43f011 100644 --- a/Resources/Prototypes/Actions/changeling.yml +++ b/Resources/Prototypes/Actions/changeling.yml @@ -206,6 +206,20 @@ useDelay: 1 - type: LesserFormRestricted +- type: entity + id: ActionHive + name: changeling-ability-hive + description: changeling-ability-hive-desc + noSpawn: true + components: + - type: InstantAction + itemIconStyle: NoItem + icon: White/Actions/changeling.rsi/hive_head.png + event: !type:HiveHeadActionEvent + useDelay: 1 + checkCanInteract: false + - type: LesserFormRestricted + - type: entity id: ActionTentacleArm name: changeling-ability-tentacle-arm diff --git a/Resources/Prototypes/Catalog/changeling_catalog.yml b/Resources/Prototypes/Catalog/changeling_catalog.yml index 4536dd403e..4185b09665 100644 --- a/Resources/Prototypes/Catalog/changeling_catalog.yml +++ b/Resources/Prototypes/Catalog/changeling_catalog.yml @@ -51,6 +51,19 @@ - !type:ListingLimitedStockCondition stock: 1 +- type: listing + id: ChangelingHive + name: changeling-ability-hive + description: changeling-ability-hive-desc + productAction: ActionHive + cost: + ChangelingPoint: 2 + categories: + - ChangelingAbilities + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - type: listing id: ChangelingTentacleArm name: changeling-ability-tentacle-arm diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml index 99cbebea07..2814c4202c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml @@ -10,11 +10,10 @@ state: icon - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.75 damage: types: - Slash: 17 - Piercing: 17 + Slash: 20 + Piercing: 20 Structural: 45 soundHit: path: /Audio/Weapons/bladeslice.ogg diff --git a/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml b/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml new file mode 100644 index 0000000000..444308352e --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml @@ -0,0 +1,46 @@ +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHelmetLingHive + name: hive head + description: A strange, waxy outer coating covering your head. Gives you tinnitus. + components: + - type: Sprite + sprite: White/Clothing/Head/hive.rsi + - type: Clothing + sprite: White/Clothing/Head/hive.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 + Heat: 0.9 + - type: Unremoveable + deleteOnDrop: true + - type: DeleteOnChangelingRefund + - type: FlashImmunity + - type: EyeProtection + - type: HiveHead + +- type: entity + id: ActionReleaseBees + name: changeling-ability-bees + description: changeling-ability-bees-desc + noSpawn: true + components: + - type: InstantAction + itemIconStyle: NoItem + icon: White/Clothing/Head/hive.rsi/icon.png + event: !type:ReleaseBeesEvent + checkCanInteract: false + useDelay: 30 + +- type: entity + parent: MobAngryBee + id: MobTemporaryAngryBee + components: + - type: TimedDespawn + lifetime: 25.0 + - type: NpcFactionMember + factions: + - Syndicate diff --git a/Resources/Textures/White/Actions/changeling.rsi/hive_head.png b/Resources/Textures/White/Actions/changeling.rsi/hive_head.png new file mode 100644 index 0000000000000000000000000000000000000000..510f56bd4245578b2fad2fc4e8fecf590dbca6f3 GIT binary patch literal 570 zcmV-A0>%A_P)`6pHRCt{2mN82MK@f!}kVY&lEyThD18FQQk`!Vi!9p7eY0{n0P-P%{M|tr(yz522 z(HPeP0%()~Ky!ppO?FO$iRrYY41qX-N>M;mYipAb^xF>D2v5%a3cxIt3ZTmYmEHW8@6RCwr zl>=06()-4iFFliUMP7=QO{d(x7*b=o8(2;2zj zx2X^+bL^;rW^U>&zzuLCf-sS6E=)e-Z(RrQO@O}#!(9L`jB}%A1W@qCq3D1wKsa+P z06jhV+S^xk5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Actions/changeling.rsi/meta.json b/Resources/Textures/White/Actions/changeling.rsi/meta.json index 31d5234cb0..fc8e5acbc5 100644 --- a/Resources/Textures/White/Actions/changeling.rsi/meta.json +++ b/Resources/Textures/White/Actions/changeling.rsi/meta.json @@ -31,6 +31,9 @@ { "name": "organic_suit" }, + { + "name": "hive_head" + }, { "name": "fleshmend" }, diff --git a/Resources/Textures/White/Clothing/Head/hive.rsi/equipped-HELMET.png b/Resources/Textures/White/Clothing/Head/hive.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..26446b2d672ed05243027bc7f84d70e267f2cf9b GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V0$ zPZ!6KiaBp*ozE6_6gj@X)BZw`z+d)n)3PT;=U?hR8tlu<#pb2(H7KV$VvT}^*pg)~ zSHzknm_jv@R&TQn<6jgI^+BORvr5<|+{N?bB-8xIIcCz;Gdefh?)kp+%p2)R@86jB z&*gnD%TnCKqtQ3N=>`K&4-mw^oIStk+jpHS-O?e@$dd!T*|e& z%pNumcl`LWu4(1xwHC4Z`B(Oq&Q@#rnyF*gZ~m-QMMmOfc6!6)bBha>Hodyro%`{4 z=7Y1Zgm1Lv?Wjq=v0ra_bawo{SFf|BH|*WnaPo~}K9AAvFVf8?{xtx66%FosM^$$PY zymw&L-)4u*@avB?c&<3F7EEcFeCEgJ-zT40l+`kR-v0SU<$kW)8h>A=RR1~lM#`vG zujHap!@LdreE&-xvsW2@e`S5Fy|4PCcY5E$tMu3Et9`< zUaqnBEq{RY0;#=DU%77R^=tP|UAxTX$zR5Uyef0LYh|3;|%Wju24YvrML$qjismb(6BI{4QmKvwOLX;tX_`Fp+|TH&ILAh~q?y4`OD oC;VeDaOYttK7xn3A^m|}WR@YLRO8RFVdQ&MBb@09=h~s{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Head/hive.rsi/icon.png b/Resources/Textures/White/Clothing/Head/hive.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1084c6c47b243cfb6230fe848501ff6083303c62 GIT binary patch literal 351 zcmV-l0igbgP)VQ!Pj5=V{0izBe+X0<BSU zmWRZpFhpm~g^MknmJFi)lj;bP9RRXiP5wW_rGv8>%EJ-jApYv3|G@I3ID)JYkT*j*IJ$E+?H!OG$i;B|#40emf9)5B!eAaGS<*5Bd1*jD5YC>U5216b7cfk2O<;I; zXaj8>07~H#**^bgV&-9(wC+7aUXUPIJSTvk;XKfCnrA~0$nQDM2+D3LoVN@v001+_RT3$;;9&p&002ovPDHLkV1ge?iEjV^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Clothing/Head/hive.rsi/meta.json b/Resources/Textures/White/Clothing/Head/hive.rsi/meta.json new file mode 100644 index 0000000000..bc7392dd87 --- /dev/null +++ b/Resources/Textures/White/Clothing/Head/hive.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/94186dcdb93420d617cc6418534556e05fa8a7d8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +}