From 0a035a1f936915066f4564aa467fa35e8be3448b Mon Sep 17 00:00:00 2001 From: Schrodinger71 Date: Wed, 3 Jan 2024 01:58:49 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=84=D0=B5=D0=BB=D0=B8=D0=BD=D0=B8=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Felinid/CoughingUpHairballComponent.cs | 11 + .../ADT/Abilities/Felinid/FelinidComponent.cs | 20 ++ .../Abilities/Felinid/FelinidFoodComponent.cs | 5 + .../ADT/Abilities/Felinid/FelinidSystem.cs | 197 ++++++++++++++++++ .../Abilities/Felinid/HairballComponent.cs | 7 + Content.Server/Clothing/MaskSystem.cs | 124 +++++++++++ Content.Shared/ADT/Psionics/Events.cs | 52 +++++ .../ADT/Psionics/PsychokinesisComponent.cs | 18 ++ Resources/Audio/ADT/Felinid/hairball.ogg | Bin 0 -> 52260 bytes Resources/Audio/ADT/Felinid/license.txt | 1 + .../ADT/Felinid/Mobs/Species/felinid.yml | 3 +- Resources/Prototypes/ADT/test.yml | 47 +++++ .../Textures/ADT/Icons/verbiconfangs.png | Bin 0 -> 710 bytes .../ADT/Objects/Specific/felinid.rsi/icon.png | Bin 0 -> 238 bytes .../Objects/Specific/felinid.rsi/meta.json | 14 ++ 15 files changed, 498 insertions(+), 1 deletion(-) create mode 100644 Content.Server/ADT/Abilities/Felinid/CoughingUpHairballComponent.cs create mode 100644 Content.Server/ADT/Abilities/Felinid/FelinidComponent.cs create mode 100644 Content.Server/ADT/Abilities/Felinid/FelinidFoodComponent.cs create mode 100644 Content.Server/ADT/Abilities/Felinid/FelinidSystem.cs create mode 100644 Content.Server/ADT/Abilities/Felinid/HairballComponent.cs create mode 100644 Content.Server/Clothing/MaskSystem.cs create mode 100644 Content.Shared/ADT/Psionics/Events.cs create mode 100644 Content.Shared/ADT/Psionics/PsychokinesisComponent.cs create mode 100644 Resources/Audio/ADT/Felinid/hairball.ogg create mode 100644 Resources/Audio/ADT/Felinid/license.txt create mode 100644 Resources/Prototypes/ADT/test.yml create mode 100644 Resources/Textures/ADT/Icons/verbiconfangs.png create mode 100644 Resources/Textures/ADT/Objects/Specific/felinid.rsi/icon.png create mode 100644 Resources/Textures/ADT/Objects/Specific/felinid.rsi/meta.json diff --git a/Content.Server/ADT/Abilities/Felinid/CoughingUpHairballComponent.cs b/Content.Server/ADT/Abilities/Felinid/CoughingUpHairballComponent.cs new file mode 100644 index 00000000000..9e97f837deb --- /dev/null +++ b/Content.Server/ADT/Abilities/Felinid/CoughingUpHairballComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.ADT.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class CoughingUpHairballComponent : Component +{ + [DataField("accumulator")] + public float Accumulator = 0f; + + [DataField("coughUpTime")] + public TimeSpan CoughUpTime = TimeSpan.FromSeconds(2.15); // length of hairball.ogg +} diff --git a/Content.Server/ADT/Abilities/Felinid/FelinidComponent.cs b/Content.Server/ADT/Abilities/Felinid/FelinidComponent.cs new file mode 100644 index 00000000000..c953034595d --- /dev/null +++ b/Content.Server/ADT/Abilities/Felinid/FelinidComponent.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Prototypes; + +namespace Content.Server.ADT.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class FelinidComponent : Component +{ + /// + /// The hairball prototype to use. + /// + [DataField("hairballPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string HairballPrototype = "Hairball"; + + public EntityUid? HairballAction = null; + + public EntityUid? EatMouse = null; + + public EntityUid? PotentialTarget = null; +} diff --git a/Content.Server/ADT/Abilities/Felinid/FelinidFoodComponent.cs b/Content.Server/ADT/Abilities/Felinid/FelinidFoodComponent.cs new file mode 100644 index 00000000000..3bb3fff9317 --- /dev/null +++ b/Content.Server/ADT/Abilities/Felinid/FelinidFoodComponent.cs @@ -0,0 +1,5 @@ +namespace Content.Server.ADT.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class FelinidFoodComponent : Component +{} diff --git a/Content.Server/ADT/Abilities/Felinid/FelinidSystem.cs b/Content.Server/ADT/Abilities/Felinid/FelinidSystem.cs new file mode 100644 index 00000000000..bc8469faac7 --- /dev/null +++ b/Content.Server/ADT/Abilities/Felinid/FelinidSystem.cs @@ -0,0 +1,197 @@ +using Content.Server.Actions; +using Content.Shared.Actions; +using Content.Shared.StatusEffect; +using Content.Shared.Throwing; +using Content.Shared.Item; +using Content.Shared.Inventory; +using Content.Shared.Hands; +using Content.Shared.IdentityManagement; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Content.Server.Body.Components; +using Content.Server.Medical; +using Content.Server.Nutrition.EntitySystems; +using Content.Server.Popups; +using Content.Shared.ADT.Psionics.Events; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using Content.Server.Clothing; + +namespace Content.Server.ADT.Abilities.Felinid; + +public sealed class FelinidSystem : EntitySystem +{ + + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly HungerSystem _hungerSystem = default!; + [Dependency] private readonly VomitSystem _vomitSystem = default!; + [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnHairball); + SubscribeLocalEvent(OnEatMouse); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnHairballHit); + SubscribeLocalEvent(OnHairballPickupAttempt); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var entityUid, out var hairballComp, out var catComp)) + { + hairballComp.Accumulator += frameTime; + if (hairballComp.Accumulator < hairballComp.CoughUpTime.TotalSeconds) + continue; + + hairballComp.Accumulator = 0; + SpawnHairball(entityUid, catComp); + RemCompDeferred(entityUid); + } + } + + [ValidatePrototypeId] private const string ActionHairball = "ActionHairball"; + [ValidatePrototypeId] private const string ActionEatMouse = "ActionEatMouse"; + + private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args) + { + _actions.AddAction(uid, ref component.HairballAction, ActionHairball); + + if (_actions.TryGetActionData(component.HairballAction, out var action) && action?.UseDelay != null) + { + _actions.SetCooldown(component.HairballAction, + _gameTiming.CurTime, _gameTiming.CurTime + (TimeSpan) action?.UseDelay!); + } + } + + private void OnEquipped(EntityUid uid, FelinidComponent component, DidEquipHandEvent args) + { + if (!HasComp(args.Equipped)) + return; + + component.PotentialTarget = args.Equipped; + + _actions.AddAction(uid, ref component.EatMouse, ActionEatMouse); + } + + private void OnUnequipped(EntityUid uid, FelinidComponent component, DidUnequipHandEvent args) + { + if (args.Unequipped == component.PotentialTarget) + { + component.PotentialTarget = null; + + _actions.RemoveAction(uid, component.EatMouse); + } + } + + private static readonly SoundSpecifier HairballPlay = new SoundPathSpecifier("/Audio/ADT/Felinid/hairball.ogg", + AudioParams.Default.WithVariation(0.15f)); + + private void OnHairball(EntityUid uid, FelinidComponent component, HairballActionEvent args) + { + //if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && + // EntityManager.TryGetComponent(maskUid, out var blocker) && + // blocker.Enabled) + //{ + // _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid); + // return; + //} + + _popupSystem.PopupEntity(Loc.GetString("hairball-cough", ("name", Identity.Entity(uid, EntityManager))), uid); + _audio.PlayPredicted(HairballPlay, uid, null); + + EnsureComp(uid); + args.Handled = true; + } + + private static readonly SoundSpecifier EatMousePlay = new SoundPathSpecifier("/Audio/Items/eatfood.ogg", + AudioParams.Default.WithVariation(0.15f)); + + private void OnEatMouse(EntityUid uid, FelinidComponent component, EatMouseActionEvent args) + { + if (component.PotentialTarget == null) + return; + + if (!TryComp(uid, out var hunger)) + return; + + if (hunger.CurrentThreshold == Shared.Nutrition.Components.HungerThreshold.Overfed) + { + _popupSystem.PopupEntity(Loc.GetString("food-system-you-cannot-eat-any-more"), uid, uid, Shared.Popups.PopupType.SmallCaution); + return; + } + + //if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && + // EntityManager.TryGetComponent(maskUid, out var blocker) && + // blocker.Enabled) + //{ + // _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid, Shared.Popups.PopupType.SmallCaution); + // return; + //} + + if (component.HairballAction != null && _actions.TryGetActionData(component.HairballAction, out var skill)) + { + _actionsSystem.SetCharges(component.HairballAction, skill?.Charges + 1); + _actionsSystem.SetEnabled(component.HairballAction, true); + } + Del(component.PotentialTarget.Value); + component.PotentialTarget = null; + + _audio.PlayPredicted(EatMousePlay, uid, null); + + _hungerSystem.ModifyHunger(uid, 70f, hunger); + + _actions.RemoveAction(uid, component.EatMouse); + } + + private void SpawnHairball(EntityUid uid, FelinidComponent component) + { + var hairball = EntityManager.SpawnEntity(component.HairballPrototype, Transform(uid).Coordinates); + var hairballComp = Comp(hairball); + + if (TryComp(uid, out var bloodstream)) + { + var temp = bloodstream.ChemicalSolution.SplitSolution(20); + + if (_solutionSystem.TryGetSolution(hairball, hairballComp.SolutionName, out var hairballSolution)) + { + _solutionSystem.TryAddSolution(hairball, hairballSolution, temp); + } + } + } + private void OnHairballHit(EntityUid uid, HairballComponent component, ThrowDoHitEvent args) + { + if (HasComp(args.Target) || !HasComp(args.Target)) + return; + if (_robustRandom.Prob(0.2f)) + _vomitSystem.Vomit(args.Target); + } + + private void OnHairballPickupAttempt(EntityUid uid, HairballComponent component, GettingPickedUpAttemptEvent args) + { + if (HasComp(args.User) || !HasComp(args.User)) + return; + + if (_robustRandom.Prob(0.2f)) + { + _vomitSystem.Vomit(args.User); + args.Cancel(); + } + } +} diff --git a/Content.Server/ADT/Abilities/Felinid/HairballComponent.cs b/Content.Server/ADT/Abilities/Felinid/HairballComponent.cs new file mode 100644 index 00000000000..82f02db2ec2 --- /dev/null +++ b/Content.Server/ADT/Abilities/Felinid/HairballComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.ADT.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class HairballComponent : Component +{ + public string SolutionName = "hairball"; +} diff --git a/Content.Server/Clothing/MaskSystem.cs b/Content.Server/Clothing/MaskSystem.cs new file mode 100644 index 00000000000..2154f3b5765 --- /dev/null +++ b/Content.Server/Clothing/MaskSystem.cs @@ -0,0 +1,124 @@ +//using Content.Server.Actions; +//using Content.Server.Atmos.Components; +//using Content.Server.Atmos.EntitySystems; +//using Content.Server.Body.Components; +//using Content.Server.Body.Systems; +//using Content.Server.Clothing.Components; +//using Content.Server.IdentityManagement; +//using Content.Server.Nutrition.EntitySystems; +//using Content.Server.Popups; +//using Content.Server.VoiceMask; +//using Content.Shared.Actions; +//using Content.Shared.Clothing; +//using Content.Shared.Clothing.Components; +//using Content.Shared.Clothing.EntitySystems; +//using Content.Shared.IdentityManagement.Components; +//using Content.Shared.Inventory; +//using Content.Shared.Inventory.Events; + +//namespace Content.Server.Clothing +//{ +// public sealed class MaskSystem : EntitySystem +// { +// [Dependency] private readonly ActionsSystem _actionSystem = default!; +// [Dependency] private readonly AtmosphereSystem _atmos = default!; +// [Dependency] private readonly InternalsSystem _internals = default!; +// [Dependency] private readonly InventorySystem _inventorySystem = default!; +// [Dependency] private readonly PopupSystem _popupSystem = default!; +// [Dependency] private readonly IdentitySystem _identity = default!; +// [Dependency] private readonly ClothingSystem _clothing = default!; + +// public override void Initialize() +// { +// base.Initialize(); + +// SubscribeLocalEvent(OnToggleMask); +// SubscribeLocalEvent(OnGetActions); +// SubscribeLocalEvent(OnGotUnequipped); +// } + +// private void OnGetActions(EntityUid uid, MaskComponent component, GetItemActionsEvent args) +// { +// if (!args.InHands) +// args.AddAction(ref component.ToggleActionEntity, component.ToggleAction); +// } + +// private void OnToggleMask(Entity ent, ref ToggleMaskEvent args) +// { +// var (uid, mask) = ent; +// if (mask.ToggleActionEntity == null) +// return; + +// if (!_inventorySystem.TryGetSlotEntity(args.Performer, "mask", out var existing) || !uid.Equals(existing)) +// return; + +// //mask.IsToggled ^= true; +// //_actionSystem.SetToggled(mask.ToggleActionEntity, mask.IsToggled); + +// // Pulling mask down can change identity, so we want to update that +// _identity.QueueIdentityUpdate(args.Performer); + +// if (mask.IsToggled) +// _popupSystem.PopupEntity(Loc.GetString("action-mask-pull-down-popup-message", ("mask", uid)), args.Performer, args.Performer); +// else +// _popupSystem.PopupEntity(Loc.GetString("action-mask-pull-up-popup-message", ("mask", uid)), args.Performer, args.Performer); + +// ToggleMaskComponents(uid, mask, args.Performer); +// } + +// // set to untoggled when unequipped, so it isn't left in a 'pulled down' state +// private void OnGotUnequipped(EntityUid uid, MaskComponent mask, GotUnequippedEvent args) +// { +// if (mask.ToggleActionEntity == null) +// return; + +// //mask.IsToggled = false; +// //_actionSystem.SetToggled(mask.ToggleActionEntity, mask.IsToggled); + +// ToggleMaskComponents(uid, mask, args.Equipee, true); +// } + +// private void ToggleMaskComponents(EntityUid uid, MaskComponent mask, EntityUid wearer, bool isEquip = false) +// { +// // toggle visuals +// if (TryComp(uid, out var clothing)) +// { +// //TODO: sprites for 'pulled down' state. defaults to invisible due to no sprite with this prefix +// _clothing.SetEquippedPrefix(uid, mask.IsToggled ? "toggled" : null, clothing); +// } + +// // shouldn't this be an event? + +// // toggle ingestion blocking +// if (TryComp(uid, out var blocker)) +// blocker.Enabled = !mask.IsToggled; + +// // toggle identity +// if (TryComp(uid, out var identity)) +// identity.Enabled = !mask.IsToggled; + +// // toggle voice masking +// if (TryComp(wearer, out var voiceMask)) +// voiceMask.Enabled = !mask.IsToggled; + +// // toggle breath tool connection (skip during equip since that is handled in LungSystem) +// if (isEquip || !TryComp(uid, out var breathTool)) +// return; + +// if (mask.IsToggled) +// { +// _atmos.DisconnectInternals(breathTool); +// } +// else +// { +// breathTool.IsFunctional = true; + +// if (TryComp(wearer, out InternalsComponent? internals)) +// { +// breathTool.ConnectedInternalsEntity = wearer; +// _internals.ConnectBreathTool((wearer, internals), uid); +// } +// } +// } +// } +//} diff --git a/Content.Shared/ADT/Psionics/Events.cs b/Content.Shared/ADT/Psionics/Events.cs new file mode 100644 index 00000000000..1a475afe4ad --- /dev/null +++ b/Content.Shared/ADT/Psionics/Events.cs @@ -0,0 +1,52 @@ +using Content.Shared.Actions; +using Robust.Shared.Serialization; +using Content.Shared.DoAfter; + +namespace Content.Shared.ADT.Psionics.Events; + +[Serializable, NetSerializable] +public sealed partial class PsionicRegenerationDoAfterEvent : DoAfterEvent +{ + [DataField("startedAt", required: true)] + public TimeSpan StartedAt; + + private PsionicRegenerationDoAfterEvent() + { + } + + public PsionicRegenerationDoAfterEvent(TimeSpan startedAt) + { + StartedAt = startedAt; + } + + public override DoAfterEvent Clone() => this; +} + +[Serializable, NetSerializable] +public sealed partial class GlimmerWispDrainDoAfterEvent : SimpleDoAfterEvent +{ +} + +public sealed partial class PsionicInvisibilityPowerActionEvent : InstantActionEvent {} +public sealed partial class PsionicInvisibilityPowerOffActionEvent : InstantActionEvent {} +public sealed partial class HairballActionEvent : InstantActionEvent {} +public sealed partial class EatMouseActionEvent : InstantActionEvent {} +public sealed partial class MetapsionicPowerActionEvent : InstantActionEvent {} +public sealed partial class TelegnosisPowerReturnActionEvent : InstantActionEvent {} +public sealed partial class TelegnosisPowerActionEvent : InstantActionEvent {} +public sealed partial class PsionicRegenerationPowerActionEvent : InstantActionEvent {} +public sealed partial class NoosphericZapPowerActionEvent : EntityTargetActionEvent {} +public sealed partial class DispelPowerActionEvent : EntityTargetActionEvent {} + +public sealed partial class DispelledEvent : HandledEntityEventArgs {} +public sealed partial class MindSwapPowerActionEvent : EntityTargetActionEvent +{ + +} + +public sealed partial class MindSwapPowerReturnActionEvent : InstantActionEvent +{ + +} +public sealed partial class PyrokinesisPowerActionEvent : EntityTargetActionEvent {} +public sealed partial class PsychokinesisPowerActionEvent : WorldTargetActionEvent {} diff --git a/Content.Shared/ADT/Psionics/PsychokinesisComponent.cs b/Content.Shared/ADT/Psionics/PsychokinesisComponent.cs new file mode 100644 index 00000000000..674a3d28e16 --- /dev/null +++ b/Content.Shared/ADT/Psionics/PsychokinesisComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Audio; + +namespace Content.Shared.ADT.Abilities.Psionics; + +[RegisterComponent] +public sealed partial class PsychokinesisPowerComponent : Component +{ + public EntityUid? PsychokinesisPowerAction = null; + + [DataField("waveSound")] + public SoundSpecifier WaveSound = new SoundPathSpecifier("/Audio/Nyanotrasen/Mobs/SilverGolem/wave.ogg"); + + /// + /// Volume control for the spell. + /// + [DataField("waveVolume")] + public float WaveVolume = 5f; +} diff --git a/Resources/Audio/ADT/Felinid/hairball.ogg b/Resources/Audio/ADT/Felinid/hairball.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f7fb40de60866459f9115eb1b5b6c353209f8c91 GIT binary patch literal 52260 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/ADT/Felinid/license.txt b/Resources/Audio/ADT/Felinid/license.txt new file mode 100644 index 00000000000..0370cf25c61 --- /dev/null +++ b/Resources/Audio/ADT/Felinid/license.txt @@ -0,0 +1 @@ +hairball.ogg taken from https://en.wikipedia.org/wiki/File:Common_house_cat_coughing_hairball.ogv CC-BY-SA-3.0 diff --git a/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml b/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml index 734fd1dfc72..be938d32878 100644 --- a/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml @@ -5,11 +5,12 @@ id: MobFelinidBase abstract: true components: + - type: Felinid - type: Sprite netsync: false noRot: true drawdepth: Mobs - scale: 0.8, 0.8 + scale: 0.95, 0.95 layers: - map: [ "enum.HumanoidVisualLayers.Chest" ] - map: [ "enum.HumanoidVisualLayers.Head" ] diff --git a/Resources/Prototypes/ADT/test.yml b/Resources/Prototypes/ADT/test.yml new file mode 100644 index 00000000000..bd92c163c7f --- /dev/null +++ b/Resources/Prototypes/ADT/test.yml @@ -0,0 +1,47 @@ +- type: entity + parent: BaseItem + id: Hairball + name: hairball + description: Felinids, man... Placeholder sprite. + components: + - type: Sprite + sprite: ADT/Objects/Specific/felinid.rsi + state: icon + - type: Hairball + - type: SolutionContainerManager + solutions: + hairball: + maxVol: 25 + reagents: + - ReagentId: Protein + Quantity: 2 + - type: Extractable + grindableSolutionName: hairball + # - type: Tag + # tags: + # - Recyclable + # - Trash + +- type: entity + id: ActionHairball + name: hairball-action + description: hairball-action-desc + noSpawn: true + components: + - type: InstantAction +# icon: { sprite: Backmen/Structures/web.rsi, state: web1 } + priority: -10 + event: !type:HairballActionEvent + charges: 100 + useDelay: 30 + +- type: entity + id: ActionEatMouse + name: action-name-eat-mouse + description: action-description-eat-mouse + noSpawn: true + components: + - type: InstantAction + useDelay: 10 + icon: ADT/Icons/verbiconfangs.png + event: !type:EatMouseActionEvent diff --git a/Resources/Textures/ADT/Icons/verbiconfangs.png b/Resources/Textures/ADT/Icons/verbiconfangs.png new file mode 100644 index 0000000000000000000000000000000000000000..4511cbd21fd097f871e7108291fe0dd2a1eae2c5 GIT binary patch literal 710 zcmV;%0y+JOP)EX>4Tx04R}tkv&MmKpe$iQ%gmv4(%Y~kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}+*71FB{j z=|o)2ga5(rZq4H4gqswK1A!OY{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1C`nQ3L>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2g0{N&#K#7Yagc%K$f~%x&aOj zfsqnruX((?yR)}{&$Rmc0bv|+px1XgZU6uP24YJ`L;$(~0001^G^@%0000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&MA6)yp%*g)a{006>CL_t(o!|jy85yT(}MKJ}K z-t8d8aHJU0z~2)yhQVxHvp3!;6X65;l_*J)ByqIX001I_)*9Z>6A=J-rl+bfR23ou zA|ey%*P?);cx$D6f=KZW~Zl%odwzYTx%u&CLfL#}Ovl zL{AGv@sajdADDR}4@BR+fk&Qsd=m`s=H6)Dp#AOfLrk4lFZ%15N6mV+(E>A1o%@|1 sn0f6{TG@f+$81I5jh8e@k|g;%AKqC_gmCBwWdHyG07*qoM6N<$g2eMRN&o-= literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Objects/Specific/felinid.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/felinid.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f9483ac80fc5ba1b84dd9ee04200af4a3fe19d34 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij?1AIbUEsW)p?bs5$)a#Quwk=OBinajCs9rb!45Zjgg8YL2g8_q-H?td1 zh_k>WvY3H^?+^$xifVW@00sR$T^vI!{NJ84 Date: Wed, 3 Jan 2024 02:20:50 +0300 Subject: [PATCH 2/2] Fix --- .../ru-RU/ADT/Felinid/abilities/felinid.ftl | 8 +++ .../ADT/Felinid/Mobs/Species/felinid.yml | 49 +++++++++++++++++++ Resources/Prototypes/ADT/test.yml | 47 ------------------ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 1 + .../Entities/Mobs/NPCs/regalrat.yml | 1 + 5 files changed, 59 insertions(+), 47 deletions(-) create mode 100644 Resources/Locale/ru-RU/ADT/Felinid/abilities/felinid.ftl delete mode 100644 Resources/Prototypes/ADT/test.yml diff --git a/Resources/Locale/ru-RU/ADT/Felinid/abilities/felinid.ftl b/Resources/Locale/ru-RU/ADT/Felinid/abilities/felinid.ftl new file mode 100644 index 00000000000..5a4df0fbd42 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/Felinid/abilities/felinid.ftl @@ -0,0 +1,8 @@ +hairball-action = Откашляться +hairball-action-desc = Очистите свою пищеварительную систему и получите крутой комок волос, который можно бросить в людей. +#hairball-mask = Снемите свою { $mask } для начала. +#hairball-cough = { CAPITALIZE(THE($name)) } начинает кашлять комком шерсти! +ent-Hairball = комок шерсти + .desc = Фелиниды, чувак... +action-name-eat-mouse = Сожрать мышку +action-description-eat-mouse = Съешьте мышь, которую держите в руке, и получите питательные вещества и заряд шерсти. diff --git a/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml b/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml index be938d32878..ce93ceb6e9e 100644 --- a/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/ADT/Felinid/Mobs/Species/felinid.yml @@ -168,3 +168,52 @@ - map: [ "head" ] - map: [ "pocket1" ] - map: [ "pocket2" ] + + +- type: entity + parent: BaseItem + id: Hairball + name: hairball + description: Felinids, man... Placeholder sprite. + components: + - type: Sprite + sprite: ADT/Objects/Specific/felinid.rsi + state: icon + - type: Hairball + - type: SolutionContainerManager + solutions: + hairball: + maxVol: 25 + reagents: + - ReagentId: Protein + Quantity: 2 + - type: Extractable + grindableSolutionName: hairball + # - type: Tag + # tags: + # - Recyclable + # - Trash + +- type: entity + id: ActionHairball + name: hairball-action + description: hairball-action-desc + noSpawn: true + components: + - type: InstantAction +# icon: { sprite: Backmen/Structures/web.rsi, state: web1 } + priority: -10 + event: !type:HairballActionEvent + charges: 100 #костыль + useDelay: 30 + +- type: entity + id: ActionEatMouse + name: action-name-eat-mouse + description: action-description-eat-mouse + noSpawn: true + components: + - type: InstantAction + useDelay: 10 + icon: ADT/Icons/verbiconfangs.png + event: !type:EatMouseActionEvent diff --git a/Resources/Prototypes/ADT/test.yml b/Resources/Prototypes/ADT/test.yml deleted file mode 100644 index bd92c163c7f..00000000000 --- a/Resources/Prototypes/ADT/test.yml +++ /dev/null @@ -1,47 +0,0 @@ -- type: entity - parent: BaseItem - id: Hairball - name: hairball - description: Felinids, man... Placeholder sprite. - components: - - type: Sprite - sprite: ADT/Objects/Specific/felinid.rsi - state: icon - - type: Hairball - - type: SolutionContainerManager - solutions: - hairball: - maxVol: 25 - reagents: - - ReagentId: Protein - Quantity: 2 - - type: Extractable - grindableSolutionName: hairball - # - type: Tag - # tags: - # - Recyclable - # - Trash - -- type: entity - id: ActionHairball - name: hairball-action - description: hairball-action-desc - noSpawn: true - components: - - type: InstantAction -# icon: { sprite: Backmen/Structures/web.rsi, state: web1 } - priority: -10 - event: !type:HairballActionEvent - charges: 100 - useDelay: 30 - -- type: entity - id: ActionEatMouse - name: action-name-eat-mouse - description: action-description-eat-mouse - noSpawn: true - components: - - type: InstantAction - useDelay: 10 - icon: ADT/Icons/verbiconfangs.png - event: !type:EatMouseActionEvent diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 16683b56644..88e6451f0ad 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1175,6 +1175,7 @@ id: MobMouse description: Squeak! components: + - type: FelinidFood - type: Body prototype: Mouse - type: GhostRole diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 5e691fb3e23..5f02d2e062b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -155,6 +155,7 @@ description: He's da mini rat. He don't make da roolz. noSpawn: true #Must be configured to a King or the AI breaks. components: + - type: FelinidFood - type: CombatMode - type: MovementSpeedModifier baseWalkSpeed : 2.5 #Value was 3.5 (Nerf since 20.12.2022)