From 5af0401bd523c2b67cac3d2e98913fd69262f904 Mon Sep 17 00:00:00 2001 From: Kayzel Date: Wed, 27 Mar 2024 14:38:58 +0300 Subject: [PATCH 1/2] done --- .../Commands/Toolshed/AddDiseaseCommand.cs | 36 +++ .../Commands/Toolshed/ChangeSexCommand.cs | 126 +++++++++++ .../Commands/Toolshed/ChangeTTSCommand.cs | 46 ++++ .../Toolshed/MakeFakeFingerprintCommand.cs | 70 ++++++ .../Effects/DiseaseCyborgConversion.cs | 77 +++++++ .../Disease/Effects/DiseasePolymorph.cs | 29 ++- .../Backmen/Disease/Effects/EffectSystem.cs | 1 + .../GameTicking/Rules/PiratesRuleSystem.cs | 4 +- .../Adminbuse/Polymorphs/furry_virus.yml | 210 +++++++++--------- .../Adminbuse/Polymorphs/polymorph.yml | 12 + .../Backmen/Diseases/infectious.yml | 32 ++- .../Backmen/Entities/Mobs/Species/felinid.yml | 6 +- .../Backmen/Entities/Mobs/Species/foxes.yml | 3 + 13 files changed, 539 insertions(+), 113 deletions(-) create mode 100644 Content.Server/Backmen/Administration/Commands/Toolshed/AddDiseaseCommand.cs create mode 100644 Content.Server/Backmen/Administration/Commands/Toolshed/ChangeSexCommand.cs create mode 100644 Content.Server/Backmen/Administration/Commands/Toolshed/ChangeTTSCommand.cs create mode 100644 Content.Server/Backmen/Administration/Commands/Toolshed/MakeFakeFingerprintCommand.cs create mode 100644 Content.Server/Backmen/Disease/Effects/DiseaseCyborgConversion.cs diff --git a/Content.Server/Backmen/Administration/Commands/Toolshed/AddDiseaseCommand.cs b/Content.Server/Backmen/Administration/Commands/Toolshed/AddDiseaseCommand.cs new file mode 100644 index 00000000000..d4bb68e1846 --- /dev/null +++ b/Content.Server/Backmen/Administration/Commands/Toolshed/AddDiseaseCommand.cs @@ -0,0 +1,36 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Backmen.Disease; +using Content.Server.Polymorph.Systems; +using Content.Shared.Administration; +using Content.Shared.Backmen.Disease; +using Content.Shared.Polymorph; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Server.Backmen.Administration.Commands.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Fun)] +public sealed class AddDiseaseCommand : ToolshedCommand +{ + private DiseaseSystem? _diseaseSystem; + + [CommandImplementation] + public EntityUid? AddDisease( + [PipedArgument] EntityUid input, + [CommandArgument] Prototype prototype + ) + { + _diseaseSystem ??= GetSys(); + + _diseaseSystem.TryAddDisease(input, prototype.Id); + return input; + } + + [CommandImplementation] + public IEnumerable AddDisease( + [PipedArgument] IEnumerable input, + [CommandArgument] Prototype prototype + ) + => input.Select(x => AddDisease(x, prototype)).Where(x => x is not null).Select(x => (EntityUid) x!); +} diff --git a/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeSexCommand.cs b/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeSexCommand.cs new file mode 100644 index 00000000000..f0e083e597b --- /dev/null +++ b/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeSexCommand.cs @@ -0,0 +1,126 @@ +using System.Collections; +using System.Diagnostics; +using System.Linq; +using Content.Server.Administration; +using Content.Server.Humanoid; +using Content.Shared.Administration; +using Content.Shared.Humanoid; +using Robust.Shared.Enums; +using Robust.Shared.GameObjects.Components.Localization; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Utility; + +namespace Content.Server.Backmen.Administration.Commands.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Fun)] +public sealed class ChangeSexCommand : ToolshedCommand +{ + private HumanoidAppearanceSystem? _appearanceSystem; + + #region base + + private EntityUid? ChangeSex( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + Sex sex + ) + { + if (!EntityManager.TryGetComponent(input, out var humanoidAppearanceComponent)) + { + ctx.ReportError(new NotHumanoidError()); + return null; + } + + _appearanceSystem ??= GetSys(); + + humanoidAppearanceComponent.Gender = sex switch + { + Sex.Male => Gender.Male, + Sex.Female => Gender.Female, + Sex.Unsexed => Gender.Neuter, + _ => Gender.Epicene + }; + + if (EntityManager.TryGetComponent(input, out var grammarComponent)) + { + grammarComponent.Gender = humanoidAppearanceComponent.Gender; + EntityManager.Dirty(input, grammarComponent); + } + + _appearanceSystem.SetSex(input, sex, humanoid: humanoidAppearanceComponent); + EntityManager.Dirty(input, humanoidAppearanceComponent); + return input; + } + + private IEnumerable ChangeSex( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + Sex sex + ) + => input.Select(x => ChangeSex(ctx, x, sex)).Where(x => x is not null).Select(x => (EntityUid) x!); + + #endregion + + [CommandImplementation("setMale")] + public EntityUid? SetMale( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input) + { + return ChangeSex(ctx, input, Sex.Male); + } + + [CommandImplementation("setMale")] + public IEnumerable SetMale( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input) + { + return ChangeSex(ctx, input, Sex.Male); + } + + [CommandImplementation("setFemale")] + public EntityUid? SetFemale( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input) + { + return ChangeSex(ctx, input, Sex.Female); + } + + [CommandImplementation("setFemale")] + public IEnumerable SetFemale( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input) + { + return ChangeSex(ctx, input, Sex.Female); + } + + [CommandImplementation("setUnsexed")] + public EntityUid? SetUnsexed( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input) + { + return ChangeSex(ctx, input, Sex.Unsexed); + } + + [CommandImplementation("setUnsexed")] + public IEnumerable SetUnsexed( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input) + { + return ChangeSex(ctx, input, Sex.Unsexed); + } +} + +public record struct NotHumanoidError : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromMarkup( + "У сущности нет компонента HumanoidAppearanceComponent."); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} diff --git a/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeTTSCommand.cs b/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeTTSCommand.cs new file mode 100644 index 00000000000..dcf08076806 --- /dev/null +++ b/Content.Server/Backmen/Administration/Commands/Toolshed/ChangeTTSCommand.cs @@ -0,0 +1,46 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Backmen.Disease; +using Content.Server.Corvax.TTS; +using Content.Server.Humanoid; +using Content.Shared.Administration; +using Content.Shared.Backmen.Disease; +using Content.Shared.Corvax.TTS; +using Content.Shared.Humanoid; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Server.Backmen.Administration.Commands.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Fun)] +public sealed class ChangeTTSCommand : ToolshedCommand +{ + private HumanoidAppearanceSystem? _appearanceSystem; + + [CommandImplementation] + public EntityUid? ChangeTTS( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] Prototype prototype + ) + { + if (!EntityManager.TryGetComponent(input, out var humanoidAppearanceComponent)) + { + ctx.ReportError(new NotHumanoidError()); + return null; + } + + _appearanceSystem ??= GetSys(); + + _appearanceSystem.SetTTSVoice(input, prototype.Id, humanoid: humanoidAppearanceComponent); + return input; + } + + [CommandImplementation] + public IEnumerable ChangeTTS( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] Prototype prototype + ) + => input.Select(x => ChangeTTS(ctx, x, prototype)).Where(x => x is not null).Select(x => (EntityUid) x!); +} diff --git a/Content.Server/Backmen/Administration/Commands/Toolshed/MakeFakeFingerprintCommand.cs b/Content.Server/Backmen/Administration/Commands/Toolshed/MakeFakeFingerprintCommand.cs new file mode 100644 index 00000000000..9e110060151 --- /dev/null +++ b/Content.Server/Backmen/Administration/Commands/Toolshed/MakeFakeFingerprintCommand.cs @@ -0,0 +1,70 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Forensics; +using Content.Shared.Administration; +using Content.Shared.Inventory; +using Robust.Shared.Player; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Toolshed.Syntax; + +namespace Content.Server.Backmen.Administration.Commands.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Fun)] +public sealed class MakeFakeFingerprintCommand : ToolshedCommand +{ + private InventorySystem? _inventory; + + [CommandImplementation] + public EntityUid? MakeFakeFingerprint( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid target, + [CommandArgument] ValueRef playerRef + ) + { + var player = playerRef.Evaluate(ctx); + if (player is null || player.AttachedEntity is null) + { + ctx.ReportError(new NotForServerConsoleError()); + return target; + } + + var playerUid = player.AttachedEntity.Value; + + + var f = EntityManager.EnsureComponent(target); + if (EntityManager.TryGetComponent(playerUid, out var dna)) + { + f.DNAs.Add(dna.DNA); + } + + _inventory ??= GetSys(); + if (_inventory.TryGetSlotEntity(playerUid, "gloves", out var gloves)) + { + if (EntityManager.TryGetComponent(gloves, out var fiber) && + !string.IsNullOrEmpty(fiber.FiberMaterial)) + { + f.Fibers.Add(string.IsNullOrEmpty(fiber.FiberColor) + ? Loc.GetString("forensic-fibers", ("material", fiber.FiberMaterial)) + : Loc.GetString("forensic-fibers-colored", ("color", fiber.FiberColor), + ("material", fiber.FiberMaterial))); + } + } + + if (EntityManager.TryGetComponent(playerUid, out var fingerprint)) + { + f.Fingerprints.Add(fingerprint.Fingerprint ?? ""); + } + + return target; + } + + [CommandImplementation] + public IEnumerable MakeFakeFingerprint( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable target, + [CommandArgument] ValueRef playerRef + ) + => target.Select(x => MakeFakeFingerprint(ctx, x, playerRef)).Where(x => x is not null) + .Select(x => (EntityUid) x!); +} diff --git a/Content.Server/Backmen/Disease/Effects/DiseaseCyborgConversion.cs b/Content.Server/Backmen/Disease/Effects/DiseaseCyborgConversion.cs new file mode 100644 index 00000000000..ccce1775a37 --- /dev/null +++ b/Content.Server/Backmen/Disease/Effects/DiseaseCyborgConversion.cs @@ -0,0 +1,77 @@ +using Content.Server.Humanoid; +using Content.Server.Repairable; +using Content.Shared.Backmen.Disease; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Content.Shared.Mobs.Components; +using Content.Shared.Popups; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Server.Backmen.Disease.Effects; + +public sealed partial class DiseaseCyborgConversion : DiseaseEffect +{ + public override object GenerateEvent(Entity ent, ProtoId disease) + { + return new DiseaseEffectArgs(ent, disease, this); + } +} + +public sealed partial class DiseaseEffectSystem +{ + [Dependency] private readonly HumanoidAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + + private void DiseaseCyborgConversion(Entity ent, + ref DiseaseEffectArgs args) + { + if (args.Handled) + return; + args.Handled = true; + + if (TryComp(ent, out var thresholdsComponent)) + { + (thresholdsComponent as dynamic).AllowRevives = true; + } + + var repairableComponent = EnsureComp(ent); + repairableComponent.AllowSelfRepair = true; + repairableComponent.SelfRepairPenalty = 0.45f; + repairableComponent.FuelCost = 10; + repairableComponent.DoAfterDelay = 8; + + _disease.CureDisease(ent, args.Disease); + if (TryComp(ent, out var appearanceComponent)) + { + _appearanceSystem.SetSex(ent, Sex.Female, true, appearanceComponent); + _appearanceSystem.SetSkinColor(ent, Color.Red, true, true, appearanceComponent); + _appearanceSystem.SetTTSVoice(ent, "Baya", appearanceComponent); + if (appearanceComponent.MarkingSet.Markings.TryGetValue(MarkingCategories.Tail, out var tails)) + { + foreach (var marking in tails) + { + _appearanceSystem.RemoveMarking(ent, marking.MarkingId); + } + } + + if (appearanceComponent.MarkingSet.Markings.TryGetValue(MarkingCategories.HeadTop, out var headtop)) + { + foreach (var marking in headtop) + { + _appearanceSystem.RemoveMarking(ent, marking.MarkingId); + } + } + + _appearanceSystem.AddMarking(ent, "MothAntennasFeathery", Color.Red, true, true, appearanceComponent); + _appearanceSystem.AddMarking(ent, "TailSuccubus", Color.Red, true, true, appearanceComponent); + appearanceComponent.Age = 1; + appearanceComponent.EyeColor = Color.Red; + appearanceComponent.Gender = Gender.Epicene; + _metaDataSystem.SetEntityDescription(ent, + "Рободьявол. Кажется, это можно починить сваркой даже если оно умерло"); + Dirty(ent, appearanceComponent); + _popup.PopupPredicted("Кажется у вас в теле что-то поменялось....", ent, null, PopupType.LargeCaution); + } + } +} diff --git a/Content.Server/Backmen/Disease/Effects/DiseasePolymorph.cs b/Content.Server/Backmen/Disease/Effects/DiseasePolymorph.cs index 73ec762b637..039a4d6f050 100644 --- a/Content.Server/Backmen/Disease/Effects/DiseasePolymorph.cs +++ b/Content.Server/Backmen/Disease/Effects/DiseasePolymorph.cs @@ -1,8 +1,10 @@ using Content.Server.Polymorph.Systems; using Content.Shared.Audio; using Content.Shared.Backmen.Disease; +using Content.Shared.Humanoid; using Content.Shared.Polymorph; using Content.Shared.Popups; +using Content.Shared.Preferences; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; @@ -31,6 +33,10 @@ public sealed partial class DiseasePolymorph : DiseaseEffect [ViewVariables(VVAccess.ReadWrite)] public bool CureAfter = true; + [DataField("polymorphRandomAppereance")] + [ViewVariables(VVAccess.ReadOnly)] + public bool PolymorphRandomAppereance = false; + public override object GenerateEvent(Entity ent, ProtoId disease) { return new DiseaseEffectArgs(ent, disease, this); @@ -45,7 +51,7 @@ public sealed partial class DiseaseEffectSystem private void DiseasePolymorph(Entity ent, ref DiseaseEffectArgs args) { - if(args.Handled) + if (args.Handled) return; args.Handled = true; @@ -55,10 +61,27 @@ private void DiseasePolymorph(Entity ent, ref DiseaseEf { _audio.PlayPvs(args.DiseaseEffect.PolymorphSound, polyUid.Value, AudioParams.Default.WithVariation(0.2f)); } + if (args.DiseaseEffect.PolymorphMessage != null && polyUid != null) - _popup.PopupEntity(Loc.GetString(args.DiseaseEffect.PolymorphMessage), polyUid.Value, polyUid.Value, PopupType.Large); + _popup.PopupEntity(Loc.GetString(args.DiseaseEffect.PolymorphMessage), polyUid.Value, polyUid.Value, + PopupType.Large); + + if (polyUid != null && args.DiseaseEffect.PolymorphRandomAppereance && + TryComp(polyUid, out var newHumanoid)) + { + var pref = HumanoidCharacterProfile.RandomWithSpecies(newHumanoid.Species); + if (TryComp(ent, out var humanoid)) + { + // if (oldSpecies.Sex.Contains(humanoid.Sex)) + pref = pref.WithSex(humanoid.Sex); + pref = pref.WithGender(humanoid.Gender); + pref = pref.WithAge(humanoid.Age); + } + + _appearanceSystem.LoadProfile(polyUid.Value, pref); + } - if(args.DiseaseEffect.CureAfter) + if (args.DiseaseEffect.CureAfter) _disease.CureDisease(ent, args.Disease); } } diff --git a/Content.Server/Backmen/Disease/Effects/EffectSystem.cs b/Content.Server/Backmen/Disease/Effects/EffectSystem.cs index 0fe2200a188..bdb1d1dddf4 100644 --- a/Content.Server/Backmen/Disease/Effects/EffectSystem.cs +++ b/Content.Server/Backmen/Disease/Effects/EffectSystem.cs @@ -26,6 +26,7 @@ public override void Initialize() SubscribeLocalEvent>(DiseasePopUp); SubscribeLocalEvent>(DiseaseSnough); SubscribeLocalEvent>(DiseaseVomit); + SubscribeLocalEvent>(DiseaseCyborgConversion); SubscribeLocalEvent(OnSpreadEvent); } diff --git a/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs b/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs index 900554d8241..577687c7bb6 100644 --- a/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs @@ -55,10 +55,10 @@ public sealed class PiratesRuleSystem : GameRuleSystem private const string GameRuleId = "Pirates"; [ValidatePrototypeId] - private const string MobId = "MobHuman"; + private const string MobId = "MobVox"; [ValidatePrototypeId] - private const string SpeciesId = "Human"; + private const string SpeciesId = "Vox"; [ValidatePrototypeId] private const string PirateFactionId = "Syndicate"; diff --git a/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/furry_virus.yml b/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/furry_virus.yml index 6799f82ca65..3c2874aadd5 100644 --- a/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/furry_virus.yml +++ b/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/furry_virus.yml @@ -1,105 +1,109 @@ -#- type: entity -# parent: HandheldHealthAnalyzer -# id: HandheldHealthAnalyzerFurryVirus -# name: анализатор фурри вируса -# components: -# - type: HealthAnalyzer -# fake: true -# disease: FurryVirus +- type: entity + parent: HandheldHealthAnalyzer + id: HandheldHealthAnalyzerFurryVirus + name: анализатор фурри вируса + components: + - type: HealthAnalyzer + fake: true + disease: FurryVirus -#- type: emote -# id: BCatMeow -# category: Vocal -# chatMessages: [meows] +- type: emote + id: BCatMeow + category: Vocal + chatMessages: [meows] -#- type: disease -# id: FurryVirus -# name: disease-proto-furry-virus -# cureResist: 0.7 -# stages: -# - 0 -# - 120 -# - 560 -# effects: -# # compulsion pop ups -# - !type:DiseasePopUp -# probability: 0.015 -# type: Pvs -# message: disease-meow -# visualType: Medium -# stages: -# - 0 -# - 1 -# - !type:DiseasePopUp -# probability: 0.03 -# message: disease-sick-generic -# visualType: Medium -# stages: -# - 0 -# - 1 -# # Screeches - spreads disease -# - !type:DiseaseSnough -# probability: 0.03 -# snoughMessage: disease-screech -# emote: BCatMeow -# stages: -# - 0 -# - !type:DiseaseSnough -# probability: 0.05 -# snoughMessage: disease-screech -# emote: BCatMeow -# stages: -# - 1 -# - !type:DiseaseSnough -# probability: 0.2 -# snoughMessage: disease-screech -# emote: BCatMeow -# stages: -# - 2 -# # asphyxiation damage, probably from all the screeching -# - !type:DiseaseHealthChange -# probability: 0.53 -# damage: -# types: -# Asphyxiation: 1 -# stages: -# - 1 -# - !type:DiseasePolymorph -# polymorphId: BFoxMorph -# polymorphMessage: disease-polymorph -# polymorphSound: -# path: /Audio/Animals/cat_meow.ogg -# stages: -# - 2 -# - !type:DiseaseGenericStatusEffect -# probability: 0.5 -# key: Stutter -# component: OwOAccent -# stages: -# - 1 -# - !type:DiseaseGenericStatusEffect -# probability: 1 -# key: Stutter -# component: OwOAccent -# stages: -# - 2 -# cures: -# - !type:DiseaseJustWaitCure -# maxLength: 800 -# - !type:DiseaseReagentCure -# reagent: Sigynate -# min: 30 -# stages: -# - 2 -# - !type:DiseaseReagentCure -# reagent: Theobromine -# min: 50 -# stages: -# - 0 -# - 1 -# - !type:DiseaseReagentCure -# reagent: WhiteRussian -# min: 90 -# stages: -# - 0 -# - 1 +- type: disease + id: FurryVirus + name: disease-proto-furry-virus + cureResist: 0.7 + stages: + - 0 + - 120 + - 560 + effects: + # compulsion pop ups + - !type:DiseasePopUp + probability: 0.015 + type: Pvs + message: disease-meow + visualType: Medium + stages: + - 0 + - 1 + - !type:DiseasePopUp + probability: 0.03 + message: disease-sick-generic + visualType: Medium + stages: + - 0 + - 1 + # Screeches - spreads disease + - !type:DiseaseSnough + probability: 0.03 + snoughMessage: disease-screech + emote: BCatMeow + stages: + - 0 + - !type:DiseaseSnough + probability: 0.05 + snoughMessage: disease-screech + emote: BCatMeow + stages: + - 1 + - !type:DiseaseSnough + probability: 0.2 + snoughMessage: disease-screech + emote: BCatMeow + stages: + - 2 + # asphyxiation damage, probably from all the screeching + - !type:DiseaseHealthChange + probability: 0.53 + damage: + types: + Asphyxiation: 1 + stages: + - 1 + - !type:DiseasePolymorph + polymorphId: BFoxMorph + polymorphMessage: disease-polymorph + polymorphRandomAppereance: true + polymorphSound: + path: /Audio/Animals/cat_meow.ogg + stages: + - 2 + - !type:DiseaseGenericStatusEffect + probability: 0.5 + key: Stutter + component: OwOAccent + stages: + - 1 + - !type:DiseaseGenericStatusEffect + probability: 1 + key: Stutter + component: OwOAccent + stages: + - 2 + cures: + - !type:DiseaseJustWaitCure + maxLength: 800 + - !type:DiseaseReagentCure + reagent: + ReagentId: Sigynate + min: 30 + stages: + - 2 + - !type:DiseaseReagentCure + reagent: + ReagentId: Theobromine + min: 50 + stages: + - 0 + - 1 + - !type:DiseaseReagentCure + reagent: + ReagentId: WhiteRussian + min: 90 + stages: + - 0 + - 1 diff --git a/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/polymorph.yml b/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/polymorph.yml index 68fd31e40e2..37e4622e8cc 100644 --- a/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Backmen/Adminbuse/Polymorphs/polymorph.yml @@ -43,6 +43,18 @@ inventory: Transfer allowRepeatedMorphs: true +- type: polymorph + id: BNekoMorph + configuration: + entity: MobFelinid + forced: true + transferName: true + transferHumanoidAppearance: false + revertOnCrit: false + revertOnDeath: false + inventory: Transfer + allowRepeatedMorphs: true + - type: polymorph id: BDionaMorph configuration: diff --git a/Resources/Prototypes/Backmen/Diseases/infectious.yml b/Resources/Prototypes/Backmen/Diseases/infectious.yml index 3f26f9d761b..68b6b1fe66c 100644 --- a/Resources/Prototypes/Backmen/Diseases/infectious.yml +++ b/Resources/Prototypes/Backmen/Diseases/infectious.yml @@ -95,27 +95,44 @@ id: VanAusdallsRobovirus name: disease-proto-robovirus cureResist: 0.1 + stages: + - 0 + - 240 effects: - !type:DiseaseAdjustReagent probability: 0.025 reagent: ReagentId: Licoxide amount: 0.5 + stages: + - 0 + - 1 - !type:DiseaseSnough probability: 0.02 emote: RobotBeep + stages: + - 0 + - 1 + - !type:DiseaseCyborgConversion + probability: 0.33 + stages: + - 1 cures: - !type:DiseaseJustWaitCure maxLength: 900 + stages: + - 0 - !type:DiseaseReagentCure reagent: ReagentId: BeepskySmash + stages: + - 0 - type: disease id: AMIV name: disease-proto-amiv - cureResist: 0.10 + cureResist: 0.1 stages: - 0 - 120 @@ -179,7 +196,7 @@ - 2 # possible monkefication if ignored too long - !type:DiseasePolymorph - probability: 0.000427 ## ~5% chance over 120 secs + probability: 0.000427 # ~5% chance over 120 secs polymorphId: AMIVMorph polymorphMessage: disease-polymorph polymorphSound: @@ -268,6 +285,9 @@ id: OwOnavirus name: disease-proto-owonavirus cureResist: 0.25 + stages: + - 0 + - 450 effects: - !type:DiseaseGenericStatusEffect key: Stutter @@ -283,6 +303,14 @@ - !type:DiseaseSnough probability: 0.01 emote: CatHisses + - !type:DiseasePolymorph + polymorphId: BNekoMorph + polymorphMessage: disease-polymorph + polymorphRandomAppereance: true + polymorphSound: + path: /Audio/Animals/cat_meow.ogg + stages: + - 1 cures: - !type:DiseaseBodyTemperatureCure min: 420 ## Reachable with a flamer diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Species/felinid.yml index a5dfac13f61..eca5f969a15 100644 --- a/Resources/Prototypes/Backmen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Backmen/Entities/Mobs/Species/felinid.yml @@ -36,9 +36,9 @@ types: Blunt: 1 Slash: 5 -# - type: DiseaseCarrier -# naturalImmunities: -# - OwOnavirus + - type: DiseaseCarrier + naturalImmunities: + - OwOnavirus - type: Thieving stealthy: true stripTimeReduction: 1 diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Species/foxes.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Species/foxes.yml index 9999ab6bc59..fee0954974f 100644 --- a/Resources/Prototypes/Backmen/Entities/Mobs/Species/foxes.yml +++ b/Resources/Prototypes/Backmen/Entities/Mobs/Species/foxes.yml @@ -26,6 +26,9 @@ damage: types: Slash: 5 + - type: DiseaseCarrier + naturalImmunities: + - FurryVirus - type: Hunger # on 1.5x more thresholds: Overfed: 250 From e983e3e54091fa9b11e68aa528d5dcb8aa6a8922 Mon Sep 17 00:00:00 2001 From: Kayzel Date: Wed, 27 Mar 2024 14:58:17 +0300 Subject: [PATCH 2/2] fixes --- Resources/Locale/ru-RU/backmen/disease/disease.ftl | 6 +++++- Resources/Locale/ru-RU/backmen/toolshed.ftl | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 Resources/Locale/ru-RU/backmen/toolshed.ftl diff --git a/Resources/Locale/ru-RU/backmen/disease/disease.ftl b/Resources/Locale/ru-RU/backmen/disease/disease.ftl index 6e4e581eb8f..960eb2f8b66 100644 --- a/Resources/Locale/ru-RU/backmen/disease/disease.ftl +++ b/Resources/Locale/ru-RU/backmen/disease/disease.ftl @@ -6,4 +6,8 @@ disease-beat-chest-compulsion = {CAPITALIZE(THE($person))} бьёт {POSS-ADJ($p disease-vomit = {CAPITALIZE(THE($person))} рвёт. disease-think = Вы чувствуете, что не можете ясно мыслить. disease-polymorph = Вы чувствуете, как ваше тело скручивается и меняет форму! -disease-sick-stomach = Вы чувствуете, что вас стошнит. \ No newline at end of file +disease-sick-stomach = Вы чувствуете, что вас стошнит. + +#XenoVirus +disease-seizures-compulsion = Всё ваше тело непроизвольно дёргается. +disease-blood-compulsion = Ваша кровь странного цвета... diff --git a/Resources/Locale/ru-RU/backmen/toolshed.ftl b/Resources/Locale/ru-RU/backmen/toolshed.ftl new file mode 100644 index 00000000000..11430ba101a --- /dev/null +++ b/Resources/Locale/ru-RU/backmen/toolshed.ftl @@ -0,0 +1,6 @@ +command-description-adddisease = Добавить заболевание +command-description-changesex-setMale = Сделать мужчиной +command-description-changesex-setFemale = Сделать женщиной +command-description-changesex-setUnsexed = Сделать бесполым +command-description-changetts = Сменить голос +command-description-makefakefingerprint = Добавить fake отпечатки