diff --git a/Content.Client/Backmen/Blob/BlobObserverSystem.cs b/Content.Client/Backmen/Blob/BlobObserverSystem.cs index 99b8ed92f6a..29ba7704bfb 100644 --- a/Content.Client/Backmen/Blob/BlobObserverSystem.cs +++ b/Content.Client/Backmen/Blob/BlobObserverSystem.cs @@ -1,9 +1,6 @@ -using Content.Shared.Antag; -using Content.Shared.Backmen.Blob; +using Content.Shared.Backmen.Blob; using Content.Shared.Backmen.Blob.Components; -using Content.Shared.Backmen.Flesh; using Content.Shared.GameTicking; -using Content.Shared.Ghost; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; using Robust.Client.Graphics; diff --git a/Content.Client/Backmen/Flesh/FleshCultist.cs b/Content.Client/Backmen/Flesh/FleshCultist.cs deleted file mode 100644 index 28b7854311f..00000000000 --- a/Content.Client/Backmen/Flesh/FleshCultist.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.Antag; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Ghost; -using Content.Shared.StatusIcon; -using Content.Shared.StatusIcon.Components; -using Content.Shared.Tag; -using Robust.Shared.Prototypes; - -namespace Content.Client.Backmen.Flesh; - -public sealed class FleshCultistSystem : EntitySystem -{ - [Dependency] private readonly IPrototypeManager _prototype = default!; - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnShowCultIcon); - } - - [ValidatePrototypeId] - private const string FleshcultistFaction = "FleshcultistFaction"; - - private void OnShowCultIcon(Entity ent, ref GetStatusIconsEvent args) - { - args.StatusIcons.Add(_prototype.Index(FleshcultistFaction)); - } -} diff --git a/Content.Client/Backmen/Flesh/FleshHeartComponent.cs b/Content.Client/Backmen/Flesh/FleshHeartComponent.cs deleted file mode 100644 index f5a6e910861..00000000000 --- a/Content.Client/Backmen/Flesh/FleshHeartComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Content.Shared.Backmen.Flesh; - -namespace Content.Client.Backmen.Flesh; - -[RegisterComponent] -public sealed partial class FleshHeartComponent : Component -{ - [DataField("finalState")] - public string? FinalState = "underpowered"; -} diff --git a/Content.Client/Backmen/Flesh/FleshHeartVisualSystem.cs b/Content.Client/Backmen/Flesh/FleshHeartVisualSystem.cs deleted file mode 100644 index 395fd6465b6..00000000000 --- a/Content.Client/Backmen/Flesh/FleshHeartVisualSystem.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Content.Shared.Backmen.Flesh; -using Robust.Client.GameObjects; - -namespace Content.Client.Backmen.Flesh; - -public sealed class FleshHeartSystem : VisualizerSystem -{ - protected override void OnAppearanceChange(EntityUid uid, FleshHeartComponent component, ref AppearanceChangeEvent args) - { - if (args.Sprite == null) - return; - - if (!AppearanceSystem.TryGetData(uid, FleshHeartVisuals.State, out var state, args.Component)) - return; - var layer = args.Sprite.LayerMapGet(FleshHeartLayers.Base); - - if (state == FleshHeartStatus.Active) - { - args.Sprite.LayerSetState(layer, component.FinalState); - } - } -} diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs index 6f2b98983c6..d117fd99b0f 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs @@ -100,42 +100,6 @@ private void AddAntagVerbs(GetVerbsEvent args) }; args.Verbs.Add(vampireAntag); - Verb fleshLeaderCultist = new() - { - Text = Loc.GetString("admin-verb-text-make-flesh-leader-cultist"), - Category = VerbCategory.Antag, - Icon = new SpriteSpecifier.Rsi(new("/Textures/Structures/flesh_heart.rsi"), "base_heart"), - Act = () => - { - if (!TryComp(args.Target, out var actor)) - return; - - EntityManager.System() - .MakeCultist(actor.PlayerSession); - }, - Impact = LogImpact.High, - Message = Loc.GetString("admin-verb-text-make-flesh-leader-cultist"), - }; - args.Verbs.Add(fleshLeaderCultist); - - Verb fleshCultist = new() - { - Text = Loc.GetString("admin-verb-text-make-flesh-cultist"), - Category = VerbCategory.Antag, - Icon = new SpriteSpecifier.Rsi(new("/Textures/Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi"), "worm"), - Act = () => - { - if (!TryComp(args.Target, out var actor)) - return; - - EntityManager.System() - .MakeCultist(actor.PlayerSession); - }, - Impact = LogImpact.High, - Message = Loc.GetString("admin-verb-text-make-flesh-cultist"), - }; - args.Verbs.Add(fleshCultist); - Verb EvilTwin = new() { Text = "Make EvilTwin", diff --git a/Content.Server/Backmen/Flesh/FleshCultistObjectiveSystem.cs b/Content.Server/Backmen/Flesh/FleshCultistObjectiveSystem.cs deleted file mode 100644 index ce58087e728..00000000000 --- a/Content.Server/Backmen/Flesh/FleshCultistObjectiveSystem.cs +++ /dev/null @@ -1,90 +0,0 @@ -using Content.Server.Backmen.GameTicking.Rules.Components; -using Content.Server.Backmen.Objectives; -using Content.Server.Chat.Managers; -using Content.Server.Mind; -using Content.Shared.GameTicking.Components; -using Content.Shared.Objectives.Components; -using Robust.Shared.Player; - -namespace Content.Server.Backmen.Flesh; - -public sealed class FleshCultistObjectiveSystem : EntitySystem -{ - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly IChatManager _chatManager = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnCreateFleshHeartAssigned); - SubscribeLocalEvent(OnFleshHeartProgress); - - SubscribeLocalEvent(OnCreateFleshCultistSurvivalAssigned); - SubscribeLocalEvent(OnFleshCultistSurvivalProgress); - - SubscribeLocalEvent(OnAssigned); - } - - private void OnAssigned(EntityUid mindId, FleshCultistRoleComponent component, MapInitEvent args) - { - if (!_mindSystem.TryGetSession(mindId, out var session)) - { - return; - } - - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var cult, out var _)) - { - if (component.IsLeader) - { - GreetCultistLeader(session, cult.CultistsNames); - continue; - } - - GreetCultist(session, cult.CultistsNames); - } - } - private void GreetCultist(ICommonSession session, List cultistsNames) - { - _chatManager.DispatchServerMessage(session, Loc.GetString("flesh-cult-role-greeting")); - _chatManager.DispatchServerMessage(session, Loc.GetString("flesh-cult-role-cult-members", ("cultMembers", string.Join(", ", cultistsNames)))); - } - - private void GreetCultistLeader(ICommonSession session, List cultistsNames) - { - _chatManager.DispatchServerMessage(session, Loc.GetString("flesh-cult-role-greeting-leader")); - _chatManager.DispatchServerMessage(session, Loc.GetString("flesh-cult-role-cult-members", ("cultMembers", string.Join(", ", cultistsNames)))); - } - - private void OnFleshCultistSurvivalProgress(EntityUid uid, FleshCultistSurvivalConditionComponent component, ref ObjectiveGetProgressEvent args) - { - args.Progress = !_mindSystem.IsCharacterDeadIc(args.Mind) ? 1: 0; - } - - private void OnCreateFleshCultistSurvivalAssigned(EntityUid uid, FleshCultistSurvivalConditionComponent component, ref ObjectiveAssignedEvent args) - { - - } - - private void OnFleshHeartProgress(EntityUid uid, CreateFleshHeartConditionComponent component, ref ObjectiveGetProgressEvent args) - { - var fleshHeartFinale = false; - - foreach (var fleshHeartComp in EntityQuery()) - { - Log.Info("Find flesh heart"); - if (!component.IsFleshHeartFinale(fleshHeartComp)) - continue; - fleshHeartFinale = true; - break; - } - - args.Progress = fleshHeartFinale ? 1f : 0f; - } - - private void OnCreateFleshHeartAssigned(EntityUid uid, CreateFleshHeartConditionComponent component, ref ObjectiveAssignedEvent args) - { - - } -} diff --git a/Content.Server/Backmen/Flesh/FleshCultistRole.cs b/Content.Server/Backmen/Flesh/FleshCultistRole.cs deleted file mode 100644 index 243f06e2743..00000000000 --- a/Content.Server/Backmen/Flesh/FleshCultistRole.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Content.Shared.Roles; - -namespace Content.Server.Backmen.Flesh; - -[RegisterComponent] -public sealed partial class FleshCultistRoleComponent : BaseMindRoleComponent -{ - [DataField] - public bool IsLeader = false; -} diff --git a/Content.Server/Backmen/Flesh/FleshCultistSystem.Abilities.cs b/Content.Server/Backmen/Flesh/FleshCultistSystem.Abilities.cs deleted file mode 100644 index 8c47a0c5203..00000000000 --- a/Content.Server/Backmen/Flesh/FleshCultistSystem.Abilities.cs +++ /dev/null @@ -1,644 +0,0 @@ -using System.Linq; -using System.Numerics; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Construction.Components; -using Content.Server.Cuffs; -using Content.Server.Salvage.Expeditions; -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Server.Warps; -using Content.Shared.Chemistry.Components; -using Content.Shared.Cuffs.Components; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Cargo.Components; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Coordinates.Helpers; -using Content.Shared.Hands.Components; -using Content.Shared.Hands.EntitySystems; -using Content.Shared.Inventory; -using Content.Shared.Maps; -using Content.Shared.Mobs.Components; -using Content.Shared.Movement.Systems; -using Content.Shared.Physics; -using Content.Shared.Popups; -using Content.Shared.SubFloor; -using Robust.Server.GameObjects; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Physics.Components; -using Robust.Shared.Player; - -namespace Content.Server.Backmen.Flesh; - -public sealed partial class FleshCultistSystem -{ - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly CuffableSystem _cuffable = default!; - [Dependency] private readonly MapSystem _map = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly SharedTransformSystem _sharedTransform = default!; - [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; - - private void InitializeAbilities() - { - SubscribeLocalEvent(OnBladeActionEvent); - SubscribeLocalEvent(OnClawActionEvent); - SubscribeLocalEvent(OnFistActionEvent); - SubscribeLocalEvent(OnSpikeHandGunActionEvent); - SubscribeLocalEvent(OnArmorActionEvent); - SubscribeLocalEvent(OnSpiderLegsActionEvent); - SubscribeLocalEvent(OnBreakCuffsActionEvent); - SubscribeLocalEvent(OnAdrenalinActionEvent); - SubscribeLocalEvent(OnCreateFleshHeartActionEvent); - SubscribeLocalEvent(OnThrowWorm); - SubscribeLocalEvent(OnAcidSpit); - } - - private void OnAcidSpit(EntityUid uid, FleshCultistComponent component, FleshCultistAcidSpitActionEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - - var xform = Transform(uid); - var acidBullet = Spawn(component.BulletAcidSpawnId, xform.Coordinates); - - var mapCoords = _sharedTransform.ToMapCoordinates(args.Target); - var direction = mapCoords.Position - _sharedTransform.GetMapCoordinates(xform).Position; - var userVelocity = _physics.GetMapLinearVelocity(uid); - - _gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - } - - private void OnBladeActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistBladeActionEvent args) - { - if (args.Handled) - return; - var hands = _handsSystem.EnumerateHands(uid); - var enumerateHands = hands as Hand[] ?? hands.ToArray(); - foreach (var enumerateHand in enumerateHands) - { - if (enumerateHand.Container == null) - continue; - foreach (var containerContainedEntity in enumerateHand.Container.ContainedEntities) - { - if (!TryComp(containerContainedEntity, out MetaDataComponent? metaData)) - continue; - if (metaData.EntityPrototype == null) - continue; - if (!(metaData.EntityPrototype.ID == component.BladeSpawnId || - metaData.EntityPrototype.ID == component.ClawSpawnId || - metaData.EntityPrototype.ID == component.SpikeHandGunSpawnId || - metaData.EntityPrototype.ID == component.FistSpawnId)) - { - if (enumerateHand != enumerateHands.First()) - continue; - var isDrop = _handsSystem.TryDrop(uid, checkActionBlocker: false); - if (metaData.EntityPrototype.ID == component.BladeSpawnId) - continue; - if (isDrop) - continue; - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - return; - } - { - if (enumerateHand != enumerateHands.First()) - { - if (metaData.EntityPrototype.ID != component.BladeSpawnId) - continue; - QueueDel(containerContainedEntity); - } - else - { - if (metaData.EntityPrototype.ID != component.BladeSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - } - else - { - QueueDel(containerContainedEntity); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-blade-in-hand", - ("Entity", uid)), uid, PopupType.LargeCaution); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - EnsureComp(uid); - args.Handled = true; - } - - return; - } - } - } - } - - var blade = Spawn(component.BladeSpawnId, Transform(uid).Coordinates); - var isPickup = _handsSystem.TryPickup(uid, blade, checkActionBlocker: false, - animateUser: false, animate: false); - if (isPickup) - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-hand-in-blade", ("Entity", uid)), - uid, PopupType.LargeCaution); - if (TryComp(uid, out var cuffableComponent)) - { - RemComp(uid); - } - } - else - { - Log.Error("Failed to equip blade to hand, removing blade"); - QueueDel(blade); - } - args.Handled = true; - } - - private void OnClawActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistClawActionEvent args) - { - if (args.Handled) - return; - - var hands = _handsSystem.EnumerateHands(uid); - var enumerateHands = hands as Hand[] ?? hands.ToArray(); - foreach (var enumerateHand in enumerateHands) - { - if (enumerateHand.Container == null) - continue; - foreach (var containerContainedEntity in enumerateHand.Container.ContainedEntities) - { - if (!TryComp(containerContainedEntity, out MetaDataComponent? metaData)) - continue; - if (metaData.EntityPrototype == null) - continue; - if (!(metaData.EntityPrototype.ID == component.BladeSpawnId || - metaData.EntityPrototype.ID == component.ClawSpawnId || - metaData.EntityPrototype.ID == component.SpikeHandGunSpawnId || - metaData.EntityPrototype.ID == component.FistSpawnId)) - { - if (enumerateHand != enumerateHands.First()) - continue; - var isDrop = _handsSystem.TryDrop(uid, checkActionBlocker: false); - if (metaData.EntityPrototype.ID == component.ClawSpawnId) - continue; - if (isDrop) - continue; - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - return; - } - { - if (enumerateHand != enumerateHands.First()) - { - if (metaData.EntityPrototype.ID != component.ClawSpawnId) - continue; - QueueDel(containerContainedEntity); - } - else - { - if (metaData.EntityPrototype.ID != component.ClawSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - } - else - { - QueueDel(containerContainedEntity); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-claw-in-hand", - ("Entity", uid)), uid, PopupType.LargeCaution); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - EnsureComp(uid); - args.Handled = true; - } - return; - } - } - } - } - - var claw = Spawn(component.ClawSpawnId, Transform(uid).Coordinates); - var isPickup = _handsSystem.TryPickup(uid, claw, checkActionBlocker: false, - animateUser: false, animate: false); - if (isPickup) - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-hand-in-claw", ("Entity", uid)), - uid, PopupType.LargeCaution); - if (TryComp(uid, out var cuffableComponent)) - { - RemComp(uid); - } - } - else - { - QueueDel(claw); - } - args.Handled = true; - } - - - private void OnFistActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistFistActionEvent args) - { - if (args.Handled) - return; - - var hands = _handsSystem.EnumerateHands(uid); - var enumerateHands = hands as Hand[] ?? hands.ToArray(); - foreach (var enumerateHand in enumerateHands) - { - if (enumerateHand.Container == null) - continue; - foreach (var containerContainedEntity in enumerateHand.Container.ContainedEntities) - { - if (!TryComp(containerContainedEntity, out MetaDataComponent? metaData)) - continue; - if (metaData.EntityPrototype == null) - continue; - if (!(metaData.EntityPrototype.ID == component.BladeSpawnId || - metaData.EntityPrototype.ID == component.ClawSpawnId || - metaData.EntityPrototype.ID == component.SpikeHandGunSpawnId || - metaData.EntityPrototype.ID == component.FistSpawnId)) - { - if (enumerateHand != enumerateHands.First()) - continue; - var isDrop = _handsSystem.TryDrop(uid, checkActionBlocker: false); - if (metaData.EntityPrototype.ID == component.FistSpawnId) - continue; - if (isDrop) - continue; - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - return; - } - { - if (enumerateHand != enumerateHands.First()) - { - if (metaData.EntityPrototype.ID != component.FistSpawnId) - continue; - QueueDel(containerContainedEntity); - } - else - { - if (metaData.EntityPrototype.ID != component.FistSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - } - else - { - QueueDel(containerContainedEntity); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-claw-in-hand", - ("Entity", uid)), uid, PopupType.LargeCaution); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - EnsureComp(uid); - args.Handled = true; - } - return; - } - } - } - } - - var fist = Spawn(component.FistSpawnId, Transform(uid).Coordinates); - var isPickup = _handsSystem.TryPickup(uid, fist, checkActionBlocker: false, - animateUser: false, animate: false); - if (isPickup) - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-hand-in-claw", ("Entity", uid)), - uid, PopupType.LargeCaution); - if (TryComp(uid, out var cuffableComponent)) - { - EntityManager.RemoveComponent(uid); - } - } - else - { - QueueDel(fist); - } - args.Handled = true; - } - - private void OnSpikeHandGunActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistSpikeHandGunActionEvent args) - { - if (args.Handled) - return; - - var hands = _handsSystem.EnumerateHands(uid); - var enumerateHands = hands as Hand[] ?? hands.ToArray(); - foreach (var enumerateHand in enumerateHands) - { - if (enumerateHand.Container == null) - continue; - foreach (var containerContainedEntity in enumerateHand.Container.ContainedEntities) - { - if (!TryComp(containerContainedEntity, out MetaDataComponent? metaData)) - continue; - if (metaData.EntityPrototype == null) - continue; - if (!(metaData.EntityPrototype.ID == component.BladeSpawnId || - metaData.EntityPrototype.ID == component.ClawSpawnId || - metaData.EntityPrototype.ID == component.SpikeHandGunSpawnId || - metaData.EntityPrototype.ID == component.FistSpawnId)) - { - if (enumerateHand != enumerateHands.First()) - continue; - var isDrop = _handsSystem.TryDrop(uid, checkActionBlocker: false); - if (metaData.EntityPrototype.ID == component.SpikeHandGunSpawnId) - continue; - if (isDrop) - continue; - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - return; - } - { - if (enumerateHand != enumerateHands.First()) - { - if (metaData.EntityPrototype.ID != component.SpikeHandGunSpawnId) - continue; - QueueDel(containerContainedEntity); - } - else - { - if (metaData.EntityPrototype.ID != component.SpikeHandGunSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-user-hand-blocked"), - uid, uid, PopupType.Large); - } - else - { - QueueDel(containerContainedEntity); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-spike-gun-in-hand", - ("Entity", uid)), uid, PopupType.LargeCaution); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - EnsureComp(uid); - args.Handled = true; - } - return; - } - } - } - } - - var claw = Spawn(component.SpikeHandGunSpawnId, Transform(uid).Coordinates); - var isPickup = _handsSystem.TryPickup(uid, claw, checkActionBlocker: false, - animateUser: false, animate: false); - if (isPickup) - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-hand-in-spike-gun", ("Entity", uid)), - uid, PopupType.LargeCaution); - if (TryComp(uid, out var cuffableComponent)) - { - RemComp(uid); - } - } - else - { - QueueDel(claw); - } - args.Handled = true; - } - - private void OnArmorActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistArmorActionEvent args) - { - _inventory.TryGetSlotEntity(uid, "shoes", out var shoes); - _inventory.TryGetSlotEntity(uid, "outerClothing", out var outerClothing); - if (shoes != null) - { - if (!TryComp(shoes, out MetaDataComponent? metaData)) - return; - if (metaData.EntityPrototype == null) - return; - if (metaData.EntityPrototype.ID == component.SpiderLegsSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-armor-blocked"), - uid, uid, PopupType.Large); - return; - } - } - if (outerClothing != null) - { - if (!TryComp(outerClothing, out MetaDataComponent? metaData)) - return; - if (metaData.EntityPrototype == null) - return; - if (metaData.EntityPrototype.ID != component.ArmorSpawnId) - { - _inventory.TryUnequip(uid, "outerClothing", true, true); - var armor = Spawn(component.ArmorSpawnId, Transform(uid).Coordinates); - var equipped = _inventory.TryEquip(uid, armor, "outerClothing", true); - if (!equipped) - { - QueueDel(armor); - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-armor-on", - ("Entity", uid)), uid, PopupType.LargeCaution); - args.Handled = true; - } - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-armor-off", - ("Entity", uid)), uid, PopupType.LargeCaution); - EntityManager.DeleteEntity(outerClothing.Value); - _movement.RefreshMovementSpeedModifiers(uid); - args.Handled = true; - } - } - else - { - var armor = Spawn(component.ArmorSpawnId, Transform(uid).Coordinates); - var equipped = _inventory.TryEquip(uid, armor, "outerClothing", true); - if (!equipped) - { - QueueDel(armor); - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-armor-on", - ("Entity", uid)), uid, PopupType.LargeCaution); - args.Handled = true; - } - } - } - - private void OnSpiderLegsActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistSpiderLegsActionEvent args) - { - _inventory.TryGetSlotEntity(uid, "shoes", out var shoes); - _inventory.TryGetSlotEntity(uid, "outerClothing", out var outerClothing); - if (outerClothing != null) - { - if (!TryComp(shoes, out MetaDataComponent? metaData)) - return; - if (metaData.EntityPrototype == null) - return; - if (metaData.EntityPrototype.ID == component.ArmorSpawnId) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-spider-legs-blocked"), - uid, uid, PopupType.Large); - return; - } - } - if (shoes != null) - { - if (!TryComp(shoes, out MetaDataComponent? metaData)) - return; - if (metaData.EntityPrototype == null) - return; - if (metaData.EntityPrototype.ID != component.SpiderLegsSpawnId) - { - _inventory.TryUnequip(uid, "outerClothing", true, true); - _inventory.TryUnequip(uid, "shoes", true, true); - var armor = Spawn(component.SpiderLegsSpawnId, Transform(uid).Coordinates); - var equipped = _inventory.TryEquip(uid, armor, "shoes", true); - if (!equipped) - { - QueueDel(armor); - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-spider-legs-on", - ("Entity", uid)), uid, PopupType.LargeCaution); - args.Handled = true; - } - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-spider-legs-off", - ("Entity", uid)), uid, PopupType.LargeCaution); - EntityManager.DeleteEntity(shoes.Value); - _movement.RefreshMovementSpeedModifiers(uid); - args.Handled = true; - } - } - else - { - _inventory.TryUnequip(uid, "outerClothing", true, true); - var spiderLegs = Spawn(component.SpiderLegsSpawnId, Transform(uid).Coordinates); - var equipped = _inventory.TryEquip(uid, spiderLegs, "shoes", true); - if (!equipped) - { - QueueDel(spiderLegs); - } - else - { - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-transform-spider-legs-on", - ("Entity", uid)), uid, PopupType.LargeCaution); - args.Handled = true; - } - } - } - - private void OnBreakCuffsActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistBreakCuffsActionEvent args) - { - if (!TryComp(uid, out var cuffs) || cuffs.Container.ContainedEntities.Count < 1) - return; - - _cuffable.Uncuff(uid, cuffs.LastAddedCuffs, cuffs.LastAddedCuffs); - args.Handled = true; - } - - private void OnAdrenalinActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistAdrenalinActionEvent args) - { - if (!_solutionContainerSystem.TryGetInjectableSolution(uid, out var soln, out var injectableSolution)) - return; - var transferSolution = new Solution(); - foreach (var reagent in component.AdrenalinReagents) - { - transferSolution.AddReagent(reagent.Reagent, reagent.Quantity); - } - _solutionContainerSystem.TryAddSolution(soln.Value, transferSolution); - args.Handled = true; - } - - private void OnCreateFleshHeartActionEvent(EntityUid uid, FleshCultistComponent component, FleshCultistCreateFleshHeartActionEvent args) - { - var xform = Transform(uid); - var radius = 1.5f; - if (!TryComp(xform.GridUid, out var grid)) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-cant-spawn-flesh-heart", - ("Entity", uid)), - uid, - PopupType.Large); - return; - } - - var station = _stationSystem.GetOwningStation(xform.GridUid.Value); - var isCargo = HasComp(xform.GridUid.Value) || - HasComp(xform.GridUid.Value); - if (station == null || !HasComp(station) || isCargo || !HasComp(xform.GridUid.Value)) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-cant-spawn-flesh-heart", - ("Entity", uid)), - uid, - PopupType.Large); - return; - } - - var offsetValue = xform.LocalRotation.ToWorldVec(); - var targetCord = xform.Coordinates.Offset(offsetValue).SnapToGrid(EntityManager); - var tilerefs = new Box2(targetCord.Position + new Vector2(-radius, -radius), targetCord.Position + new Vector2(radius, radius)); - - foreach (var entity in _lookupSystem.GetEntitiesIntersecting(xform.GridUid.Value, tilerefs, LookupFlags.Uncontained)) - { - if(entity == uid) - continue; - - if(HasComp(entity)) - continue; - - if(HasComp(entity)) - continue; - - if (HasComp(entity) || // Is it a mob? - !TryComp(entity, out var physics) || (physics.CollisionLayer & (int) CollisionGroup.Impassable) != 0 || - HasComp(entity)) // Is construction? - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-cant-spawn-flesh-heart-here", - ("Entity", entity)), - uid, - PopupType.Large); - return; - } - } - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - Spawn(component.FleshHeartId, targetCord); - args.Handled = true; - } - - private void OnThrowWorm(EntityUid uid, FleshCultistComponent component, FleshCultistThrowWormActionEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - var worm = Spawn(component.WormMobSpawnId, Transform(uid).Coordinates); - _handsSystem.TryPickup(uid, worm, checkActionBlocker: false, animateUser: false, animate: false); - if (component.SoundThrowWorm != null) - { - _audioSystem.PlayPvs(component.SoundThrowWorm, uid, component.SoundThrowWorm.Params); - } - _popup.PopupEntity(Loc.GetString("flesh-cultist-throw-worm"), uid, uid, - PopupType.LargeCaution); - _popup.PopupEntity(Loc.GetString("flesh-cultist-throw-worm-others", ("Entity", uid)), - uid, Filter.PvsExcept(uid), true, PopupType.LargeCaution); - } - -} diff --git a/Content.Server/Backmen/Flesh/FleshCultistSystem.cs b/Content.Server/Backmen/Flesh/FleshCultistSystem.cs deleted file mode 100644 index 51096586525..00000000000 --- a/Content.Server/Backmen/Flesh/FleshCultistSystem.cs +++ /dev/null @@ -1,718 +0,0 @@ -using System.Linq; -using Content.Server.Actions; -using Content.Server.Atmos.Components; -using Content.Server.Backmen.Language; -using Content.Server.Body.Components; -using Content.Server.Body.Systems; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Flash.Components; -using Content.Server.Fluids.EntitySystems; -using Content.Server.Forensics; -using Content.Server.Humanoid; -using Content.Server.Mind; -using Content.Server.Popups; -using Content.Server.Store.Components; -using Content.Server.Store.Systems; -using Content.Server.Temperature.Components; -using Content.Server.Weapons.Ranged.Systems; -using Content.Shared.Alert; -using Content.Shared.Body.Components; -using Content.Shared.Body.Part; -using Content.Shared.Chemistry.Components; -using Content.Shared.Cuffs.Components; -using Content.Shared.Damage; -using Content.Shared.DoAfter; -using Content.Shared.Electrocution; -using Content.Shared.FixedPoint; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Backmen.Language; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Cloning; -using Content.Shared.Fluids.Components; -using Content.Shared.Hands.Components; -using Content.Shared.Humanoid; -using Content.Shared.Humanoid.Prototypes; -using Content.Shared.Interaction.Components; -using Content.Shared.Inventory.Events; -using Content.Shared.Mind.Components; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Popups; -using Content.Shared.Random; -using Content.Shared.Store.Components; -using Content.Shared.Tag; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Collections; -using Robust.Shared.Containers; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; - -namespace Content.Server.Backmen.Flesh; - -public sealed partial class FleshCultistSystem : EntitySystem -{ - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly ActionsSystem _action = default!; - [Dependency] private readonly AlertsSystem _alerts = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly StoreSystem _store = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly PuddleSystem _puddleSystem = default!; - [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionSystem = default!; - [Dependency] private readonly HumanoidAppearanceSystem _sharedHuApp = default!; - [Dependency] private readonly SharedAppearanceSystem _sharedAppearance = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; - [Dependency] private readonly BodySystem _body = default!; - [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; - [Dependency] private readonly GunSystem _gunSystem = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - [Dependency] private readonly RandomHelperSystem _randomHelper = default!; - [Dependency] private readonly IPrototypeManager _prototype = default!; - [Dependency] private readonly SharedTransformSystem _transformSystem = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly LanguageSystem _language = default!; - - [ValidatePrototypeId] - private const string FleshLang = "Flesh"; - - public override void Initialize() - { - base.Initialize(); - - - SubscribeLocalEvent(OnGetLanguage); - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnShop); - SubscribeLocalEvent(OnInsulatedImmunityMutation); - SubscribeLocalEvent(OnPressureImmunityMutation); - SubscribeLocalEvent(OnFlashImmunityMutation); - SubscribeLocalEvent(OnColdTempImmunityMutation); - SubscribeLocalEvent(OnDevourAction); - SubscribeLocalEvent(OnDevourDoAfter); - SubscribeLocalEvent(OnBeingEquippedAttempt); - SubscribeLocalEvent(OnMobStateChanged); - SubscribeLocalEvent(OnAbsormBloodPoolActionEvent); - SubscribeLocalEvent(OnCultistCloning); - - InitializeAbilities(); - } - - private void OnGetLanguage(Entity ent, ref DetermineEntityLanguagesEvent args) - { - args.UnderstoodLanguages.Add(FleshLang); - args.SpokenLanguages.Add(FleshLang); - } - - private void OnCultistCloning(EntityUid uid, FleshCultistComponent component, ref CloningEvent args) - { - // If the cultist ate the body we need to visually reset it after cloning - if (!TryComp(args.Target, out var huAppComponent)) - return; - - var speciesProto = _prototype.Index(huAppComponent.Species); - var skeletonSprites = _prototype.Index(speciesProto.SpriteSet); - foreach (var (key, id) in skeletonSprites.Sprites) - { - _sharedHuApp.SetBaseLayerId(args.Target, key, id, humanoid: huAppComponent); - } - } - - private void OnMobStateChanged(EntityUid uid, FleshCultistComponent component, MobStateChangedEvent args) - { - switch (args.NewMobState) - { - case MobState.Critical: - { - EnsureComp(uid); - var hands = _handsSystem.EnumerateHands(uid); - var enumerateHands = hands as Hand[] ?? hands.ToArray(); - foreach (var enumerateHand in enumerateHands) - { - if (enumerateHand.Container == null) - continue; - foreach (var containerContainedEntity in enumerateHand.Container.ContainedEntities) - { - if (!TryComp(containerContainedEntity, out MetaDataComponent? metaData)) - continue; - if (metaData.EntityPrototype == null) - continue; - if (metaData.EntityPrototype.ID != component.BladeSpawnId && - metaData.EntityPrototype.ID != component.ClawSpawnId && - metaData.EntityPrototype.ID != component.SpikeHandGunSpawnId && - metaData.EntityPrototype.ID != component.FistSpawnId) - continue; - QueueDel(containerContainedEntity); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - } - } - - break; - } - case MobState.Dead: - { - _inventory.TryGetSlotEntity(uid, "shoes", out var shoes); - if (shoes != null) - { - if (TryComp(shoes, out MetaDataComponent? metaData)) - { - if (metaData.EntityPrototype != null) - { - if (metaData.EntityPrototype.ID == component.SpiderLegsSpawnId) - { - EntityManager.DeleteEntity(shoes.Value); - _movement.RefreshMovementSpeedModifiers(uid); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - } - } - } - } - - _inventory.TryGetSlotEntity(uid, "outerClothing", out var outerClothing); - if (outerClothing != null) - { - if (TryComp(outerClothing, out MetaDataComponent? metaData)) - { - if (metaData.EntityPrototype != null) - { - if (metaData.EntityPrototype.ID == component.ArmorSpawnId) - { - EntityManager.DeleteEntity(outerClothing.Value); - _movement.RefreshMovementSpeedModifiers(uid); - _audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params); - } - } - } - } - - ParasiteComesOut(uid, component); - break; - } - } - } - - private void OnBeingEquippedAttempt(EntityUid uid, FleshCultistComponent component, IsEquippingAttemptEvent args) - { - if (args.Slot is not "outerClothing") - return; - _inventory.TryGetSlotEntity(uid, "shoes", out var shoes); - if (shoes == null) - return; - if (!TryComp(shoes, out MetaDataComponent? metaData)) - return; - if (metaData.EntityPrototype == null) - return; - if (metaData.EntityPrototype.ID != component.SpiderLegsSpawnId) - return; - if (!_tagSystem.HasTag(args.Equipment, "FullBodyOuter")) - return; - _popup.PopupEntity(Loc.GetString("flesh-cultist-equiped-outer-clothing-blocked", - ("Entity", uid)), uid, PopupType.LargeCaution); - args.Cancel(); - } - - [ValidatePrototypeId] private const string FleshCultistShop = "FleshCultistShop"; - [ValidatePrototypeId] private const string FleshCultistDevour = "FleshCultistDevour"; - [ValidatePrototypeId] private const string FleshCultistAbsorbBloodPool = "FleshCultistAbsorbBloodPool"; - - private void OnStartup(EntityUid uid, FleshCultistComponent component, MapInitEvent args) - { - EnsureComp(uid); - //update the icon - ChangeParasiteHunger(uid, 0, component); - - - - _store.TryAddCurrency(new Dictionary { {component.StolenCurrencyPrototype, component.StartingEvolutionPoint} }, uid); - - - _action.AddAction(uid, ref component.FleshCultistShop, FleshCultistShop); - _action.AddAction(uid, ref component.FleshCultistDevour, FleshCultistDevour); - _action.AddAction(uid, ref component.FleshCultistAbsorbBloodPool, FleshCultistAbsorbBloodPool); - - _language.UpdateEntityLanguages(uid); - } - - private void OnInsulatedImmunityMutation(EntityUid uid, FleshCultistComponent component, - FleshCultistInsulatedImmunityMutationEvent args) - { - EnsureComp(uid); - } - - - private void OnPressureImmunityMutation(EntityUid uid, FleshCultistComponent component, - FleshCultistPressureImmunityMutationEvent args) - { - EnsureComp(uid); - } - - private void OnFlashImmunityMutation(EntityUid uid, FleshCultistComponent component, - FleshCultistFlashImmunityMutationEvent args) - { - EnsureComp(uid); - } - - private void OnColdTempImmunityMutation(EntityUid uid, FleshCultistComponent component, - FleshCultistColdTempImmunityMutationEvent args) - { - if (TryComp(uid, out var tempComponent)) - { - tempComponent.ColdDamageThreshold = 0; - } - } - - private void OnShop(EntityUid uid, FleshCultistComponent component, FleshCultistShopActionEvent args) - { - if (!TryComp(uid, out var store)) - return; - _store.ToggleUi(uid, uid, store); - } - - [ValidatePrototypeId] - private const string MutationPoint = "MutationPoint"; - - private void ChangeParasiteHunger(EntityUid uid, FixedPoint2 amount, FleshCultistComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - component.Hunger += amount; - - if (TryComp(uid, out var store)) - _store.UpdateUserInterface(uid, uid, store); - - _alerts.ShowAlert(uid, MutationPoint, (short) Math.Clamp(Math.Round(component.Hunger.Float() / 10f), 0, 16)); - } - - private void OnDevourAction(EntityUid uid, FleshCultistComponent component, FleshCultistDevourActionEvent args) - { - if (args.Handled) - return; - - var target = args.Target; - - if (!TryComp(target, out var targetState)) - return; - if (!TryComp(target, out var bloodstream)) - return; - var hasAppearance = false; - { - switch (targetState.CurrentState) - { - case MobState.Dead: - if (EntityManager.TryGetComponent(target, out HumanoidAppearanceComponent? humanoidAppearance)) - { - if (!component.SpeciesWhitelist.Contains(humanoidAppearance.Species)) - { - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-target-not-have-flesh"), - uid, uid); - return; - } - - if (TryComp(target, out var fixturesComponent)) - { - if (fixturesComponent.Fixtures["fix1"].Density <= 60) - { - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-target-invalid"), - uid, uid); - return; - } - } - - hasAppearance = true; - } - else - { - if (bloodstream.BloodReagent != "Blood") - { - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-target-not-have-flesh"), - uid, uid); - return; - } - if (bloodstream.BloodMaxVolume < 30) - { - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-target-invalid"), - uid, uid); - return; - } - } - var saturation = MatchSaturation(bloodstream.BloodMaxVolume.Value / 100, hasAppearance); - if (component.Hunger + saturation >= component.MaxHunger) - { - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-not-hungry"), - uid, uid); - return; - } - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.DevourTime, - new FleshCultistDevourDoAfterEvent(), uid, target: target, used: uid) - { - BreakOnMove = true, - }); - args.Handled = true; - break; - - case MobState.Invalid: - case MobState.Critical: - case MobState.Alive: - default: - _popupSystem.PopupEntity( - Loc.GetString("flesh-cultist-devout-target-alive"), - uid, uid); - break; - } - } - } - - private void OnDevourDoAfter(EntityUid uid, FleshCultistComponent component, FleshCultistDevourDoAfterEvent args) - { - if (args.Handled || args.Cancelled) - return; - - if (args.Args.Target == null) - return; - - if (!TryComp(args.Args.Target.Value, out var bloodstream)) - return; - - var hasAppearance = false; - - var xform = Transform(args.Args.Target.Value); - var coordinates = xform.Coordinates; - var audio = AudioParams.Default.WithVariation(0.025f); - _audio.PlayPvs(component.DevourSound, args.Args.Target.Value, audio); - _popupSystem.PopupEntity(Loc.GetString("flesh-cultist-devour-target", - ("Entity", uid), ("Target", args.Args.Target)), uid); - - if (TryComp(args.Args.Target, out var humanoidAppearanceComponent)) - { - if (TryComp(args.Args.Target.Value, out var container)) - { - foreach (var cont in _container.GetAllContainers(args.Args.Target.Value,container).ToArray()) - { - foreach (var ent in cont.ContainedEntities.ToArray()) - { - if (HasComp(ent)) - { - continue; - } - - _container.Remove(ent, cont, force: true, destination: coordinates); - //cont.Remove(ent, EntityManager, force: true); - //_transformSystem.SetCoordinates(ent, coordinates); - _randomHelper.RandomOffset(ent, 0.25f); - } - } - } - - if (TryComp(args.Args.Target, out var bodyComponent)) - { - var parts = _body.GetBodyChildren(args.Args.Target, bodyComponent).ToArray(); - - foreach (var part in parts) - { - if (part.Component.PartType == BodyPartType.Head) - continue; - - if (part.Component.PartType == BodyPartType.Torso) - { - foreach (var organ in _body.GetPartOrgans(part.Id, part.Component)) - { - _body.RemoveOrgan(organ.Id, organ.Component); - } - } - else - { - QueueDel(part.Id); - } - } - } - - _bloodstreamSystem.TryModifyBloodLevel(args.Args.Target.Value, -300); - - var skeletonSprites = _proto.Index("MobSkeletonSprites"); - foreach (var (key, id) in skeletonSprites.Sprites) - { - if (key != HumanoidVisualLayers.Head) - { - _sharedHuApp.SetBaseLayerId(args.Args.Target.Value, key, id, humanoid: humanoidAppearanceComponent); - } - } - - if (TryComp(args.Args.Target, out var fixturesComponent)) - { - _physics.SetDensity(args.Args.Target.Value, "fix1", fixturesComponent.Fixtures["fix1"], 50); - } - - if (TryComp(args.Args.Target, out var appComponent)) - { - _sharedAppearance.SetData(args.Args.Target.Value, DamageVisualizerKeys.Disabled, true, appComponent); - _damageableSystem.TryChangeDamage(args.Args.Target.Value, new DamageSpecifier(){DamageDict = {{"Slash", 100}}}); - } - - hasAppearance = true; - } - - var saturation = MatchSaturation(bloodstream.BloodMaxVolume.Value / 100, hasAppearance); - var evolutionPoint = MatchEvolutionPoint(bloodstream.BloodMaxVolume.Value / 100, hasAppearance); - var healPoint = MatchHealPoint(bloodstream.BloodMaxVolume.Value / 100, hasAppearance); - var tempSol = new Solution() { MaxVolume = 5 }; - - var bloodstreamSol = bloodstream.BloodSolution ?? bloodstream.ChemicalSolution ?? bloodstream.TemporarySolution; - if(bloodstreamSol != null) - tempSol.AddSolution(bloodstreamSol.Value.Comp.Solution, _proto); - - if (_puddleSystem.TrySpillAt(args.Args.Target.Value, tempSol.SplitSolution(50), out var puddleUid)) - { - if (TryComp(args.Args.Target.Value, out var dna)) - { - var comp = EnsureComp(puddleUid); - comp.DNAs.Add(dna.DNA); - } - } - - if (!hasAppearance) - { - QueueDel(args.Args.Target.Value); - } - - if (_solutionSystem.TryGetInjectableSolution(uid, out var injectableSolution, out _)) - { - var transferSolution = new Solution(); - foreach (var reagent in component.HealDevourReagents) - { - transferSolution.AddReagent(reagent.Reagent, reagent.Quantity * healPoint); - } - _solutionSystem.TryAddSolution(injectableSolution.Value, transferSolution); - } - - component.Hunger += saturation; - _store.TryAddCurrency(new Dictionary - { {component.StolenCurrencyPrototype, evolutionPoint} }, uid); - } - - private int MatchSaturation(int bloodVolume, bool hasAppearance) - { - if (hasAppearance) - { - return 80; - } - return bloodVolume switch - { - >= 300 => 60, - >= 150 => 45, - >= 100 => 40, - _ => 15 - }; - } - - private int MatchEvolutionPoint(int bloodVolume, bool hasAppearance) - { - if (hasAppearance) - { - return 30; - } - return bloodVolume switch - { - >= 300 => 20, - >= 150 => 15, - >= 100 => 10, - _ => 5 - }; - } - - private float MatchHealPoint(int bloodVolume, bool hasAppearance) - { - if (hasAppearance) - { - return 1; - } - return bloodVolume switch - { - >= 300 => 0.8f, - >= 150 => 0.6f, - >= 100 => 0.4f, - _ => 0.2f - }; - } - - private void ParasiteComesOut(EntityUid uid, FleshCultistComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - var xform = Transform(uid); - var coordinates = xform.Coordinates; - - var abommob = Spawn(component.FleshMutationMobId, coordinates); - if (TryComp(uid, out var mindComp) && mindComp.HasMind) - EntityManager.System().TransferTo(mindComp.Mind!.Value, abommob, true); - //mindComp.Mind?.TransferTo(abommob, ghostCheckOverride: true); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-transform-user", ("EntityTransform", uid)), - uid, uid, PopupType.LargeCaution); - _popup.PopupEntity(Loc.GetString("flesh-pudge-transform-others", - ("Entity", uid), ("EntityTransform", abommob)), abommob, Filter.PvsExcept(abommob), - true, PopupType.LargeCaution); - - var audio = AudioParams.Default.WithVariation(0.025f); - _audio.PlayPvs(component.SoundMutation, uid, audio); - - if (TryComp(uid, out var container)) - { - foreach (var cont in _container.GetAllContainers(uid,container).ToArray()) - { - foreach (var ent in cont.ContainedEntities.ToArray()) - { - { - if (HasComp(ent)) - continue; - if (HasComp(ent)) - continue; - _container.Remove(ent, cont, force: true, destination: coordinates); - //cont.Remove(ent, EntityManager, force: true); - //_transformSystem.SetCoordinates(ent, coordinates); - _randomHelper.RandomOffset(ent, 0.25f); - } - } - } - } - - if (TryComp(uid, out var bloodstream) && bloodstream.BloodSolution != null) - { - var tempSol = new Solution() { MaxVolume = 5 }; - - tempSol.AddSolution(bloodstream.BloodSolution.Value.Comp.Solution, _proto); - - if (_puddleSystem.TrySpillAt(uid, tempSol.SplitSolution(50), out var puddleUid)) - { - if (TryComp(uid, out var dna)) - { - var comp = EnsureComp(puddleUid); - comp.DNAs.Add(dna.DNA); - } - } - } - - QueueDel(uid); - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var q = EntityQueryEnumerator(); - while (q.MoveNext(out var owner, out var rev)) - { - rev.Accumulator += frameTime; - - if (rev.Accumulator <= 1) - continue; - - rev.Accumulator -= 1; - - if (rev.Hunger <= 40) - { - rev.AccumulatorStarveNotify += 1; - if (rev.AccumulatorStarveNotify > 30) - { - rev.AccumulatorStarveNotify = 0; - _popup.PopupEntity(Loc.GetString("flesh-cultist-hungry"), - owner, owner, PopupType.Large); - } - } - - if (rev.Hunger < 0) - { - ParasiteComesOut(owner, rev); - } - - ChangeParasiteHunger(owner, rev.HungerСonsumption, rev); - } - } - - private void OnAbsormBloodPoolActionEvent(EntityUid uid, FleshCultistComponent component, - FleshCultistAbsorbBloodPoolActionEvent args) - { - if (args.Handled) - return; - - var xform = _transformSystem.GetMapCoordinates(uid); - var puddles = new ValueList<(EntityUid Entity, string Solution)>(); - puddles.Clear(); - - foreach (var entity in _lookup.GetEntitiesInRange(xform, 0.5f)) - { - if (TryComp(entity, out var puddle)) - { - puddles.Add((entity, puddle.SolutionName)); - } - } - - if (puddles.Count == 0) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-not-find-puddles"), - uid, uid, PopupType.Large); - return; - } - - var totalBloodQuantity = new float(); - - foreach (var (puddle, solution) in puddles) - { - if (!_solutionSystem.TryGetSolution(puddle, solution, out _, out var puddleSolution)) - { - continue; - } - var hasImpurities = false; - var pudleBloodQuantity = new FixedPoint2(); - foreach (var puddleSolutionContent in puddleSolution.Contents.ToArray()) - { - if (puddleSolutionContent.Reagent.Prototype != "Blood") - { - hasImpurities = true; - } - else - { - pudleBloodQuantity += puddleSolutionContent.Quantity; - } - } - if (hasImpurities) - continue; - totalBloodQuantity += pudleBloodQuantity.Float(); - QueueDel(puddle); - } - - if (totalBloodQuantity == 0) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-cant-absorb-puddle"), - uid, uid, PopupType.Large); - return; - } - - _audioSystem.PlayPvs(component.BloodAbsorbSound, uid, component.BloodAbsorbSound.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-absorb-puddle", ("Entity", uid)), - uid, uid, PopupType.Large); - - var transferSolution = new Solution(); - foreach (var reagent in component.HealBloodAbsorbReagents.ToArray()) - { - transferSolution.AddReagent(reagent.Reagent, reagent.Quantity * (totalBloodQuantity / 10)); - } - if (_solutionSystem.TryGetInjectableSolution(uid, out var injectableSolution, out _)) - { - _solutionSystem.TryAddSolution(injectableSolution.Value, transferSolution); - } - args.Handled = true; - } -} diff --git a/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshComponent.cs b/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshComponent.cs deleted file mode 100644 index e4d838578dd..00000000000 --- a/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshComponent.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace Content.Server.Backmen.Flesh.FleshGrowth; - -/// -/// Component for rapidly spreading objects, like Kudzu. -/// ONLY USE THIS FOR ANCHORED OBJECTS. An error will be logged if not anchored/static. -/// Currently does not support growing in space. -/// -[RegisterComponent, Access(typeof(SpreaderFleshSystem))] -public sealed partial class SpreaderFleshComponent : Component -{ - /// - /// Chance for it to grow on any given tick, after the normal growth rate-limit (if it doesn't grow, SpreaderSystem will pick another one.). - /// - [DataField("chance", required: true)] - public float Chance; - - /// - /// Maximum number of edges that can grow out every interval. - /// - private const int GrowthsPerInterval = 1; - - /// - /// Prototype spawned on growth success. - /// - [DataField("growthResult", required: true)] - public string GrowthResult = default!; - - /// - /// Prototype spawned on growth success. - /// - [DataField("wallResult", required: true)] - public string WallResult = default!; - - [DataField("enabled")] - public bool Enabled = true; -} diff --git a/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshSystem.cs b/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshSystem.cs deleted file mode 100644 index 6fdd3fdb8d6..00000000000 --- a/Content.Server/Backmen/Flesh/FleshGrowth/SpreaderFleshSystem.cs +++ /dev/null @@ -1,211 +0,0 @@ -using System.Linq; -using Content.Server.Atmos.Components; -using Content.Server.Atmos.EntitySystems; -using Content.Shared.Atmos; -using Content.Shared.Tag; -using Robust.Shared.Map; -using Robust.Shared.Random; -using Content.Server.Destructible; -using Content.Server.Destructible.Thresholds; -using Content.Server.Destructible.Thresholds.Behaviors; -using Content.Server.Destructible.Thresholds.Triggers; -using Content.Shared.Destructible.Thresholds; -using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; - -namespace Content.Server.Backmen.Flesh.FleshGrowth; - -// Future work includes making the growths per interval thing not global, but instead per "group" -public sealed class SpreaderFleshSystem : EntitySystem -{ - [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly SharedMapSystem _mapSystem = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - - /// - /// Maximum number of edges that can grow out every interval. - /// - private const int GrowthsPerInterval = 6; - - private float _accumulatedFrameTime = 0.0f; - - private readonly HashSet _edgeGrowths = new(); - - public override void Initialize() - { - SubscribeLocalEvent(SpreaderAddHandler); - SubscribeLocalEvent(OnAirtightChanged); - } - - private void OnAirtightChanged(ref AirtightChanged ev) - { - UpdateNearbySpreaders(ev.Entity, ev.Airtight); - } - - private void SpreaderAddHandler(EntityUid uid, SpreaderFleshComponent component, ComponentAdd args) - { - if (component.Enabled) - _edgeGrowths.Add(uid); // ez - } - - public void UpdateNearbySpreaders(EntityUid blocker, AirtightComponent comp) - { - if (!EntityManager.TryGetComponent(blocker, out var transform)) - return; // how did we get here? - - if (!TryComp(transform.GridUid, out var grid)) - return; - - var spreaderQuery = GetEntityQuery(); - - var tile = _mapSystem.TileIndicesFor(transform.GridUid.Value, grid,transform.Coordinates); - - for (var i = 0; i < Atmospherics.Directions; i++) - { - var direction = (AtmosDirection) (1 << i); - if (!comp.AirBlockedDirection.IsFlagSet(direction)) - continue; - - var directionEnumerator = _mapSystem.GetAnchoredEntitiesEnumerator( - transform.GridUid.Value, - grid, - SharedMapSystem.GetDirection(tile, direction.ToDirection()) - ); - - while (directionEnumerator.MoveNext(out var ent)) - { - if (spreaderQuery.TryGetComponent(ent, out var s) && s.Enabled) - _edgeGrowths.Add(ent.Value); - } - } - } - - public override void Update(float frameTime) - { - _accumulatedFrameTime += frameTime; - - if (!(_accumulatedFrameTime >= 1.0f)) - return; - - _accumulatedFrameTime -= 1.0f; - - var growthList = _edgeGrowths.ToList(); - _robustRandom.Shuffle(growthList); - - var successes = 0; - foreach (var entity in growthList) - { - if (!TryGrow(entity)) - continue; - - successes += 1; - if (successes >= GrowthsPerInterval) - break; - } - } - - private bool TryGrow(EntityUid ent, TransformComponent? transform = null, SpreaderFleshComponent? spreader = null) - { - if (!Resolve(ent, ref transform, ref spreader, false)) - return false; - - if (spreader.Enabled == false) - return false; - - if (!TryComp(transform.GridUid, out var grid)) - return false; - - var didGrow = false; - - for (var i = 0; i < 4; i++) - { - var direction = (DirectionFlag) (1 << i); - var coords = transform.Coordinates.Offset(direction.AsDir().ToVec()); - if (_mapSystem.GetTileRef(transform.GridUid.Value, grid, coords).Tile.IsEmpty || _robustRandom.Prob(1 - spreader.Chance)) - continue; - - var ents = _mapSystem.GetLocal(transform.GridUid.Value, grid, coords); - - var entityUids = ents as EntityUid[] ?? ents.ToArray(); - if (entityUids.Any(x => IsTileBlockedFrom(x, direction))) - continue; - - var canSpawnWall = true; - var canSpawnFloor = true; - string entityStrucrureId = String.Empty; - foreach (var entityUid in entityUids) - { - if (_tagSystem.HasAnyTag(entityUid, "Wall", "Window")) - { - if (!_tagSystem.HasAnyTag(entityUid, "Directional")) - { - if (TryComp(entityUid, out MetaDataComponent? metaData)) - { - if (metaData.EntityPrototype != null) - entityStrucrureId = metaData.EntityPrototype.ID; - } - - canSpawnFloor = false; - } - } - - if (_tagSystem.HasAnyTag(entityUid, "Flesh", "Directional")) - { - canSpawnWall = false; - } - } - - if (canSpawnFloor) - { - didGrow = true; - EntityManager.SpawnEntity(spreader.GrowthResult, - transform.Coordinates.Offset(direction.AsDir().ToVec())); - } - else - { - if (!canSpawnWall) - continue; - didGrow = true; - var uid = EntityManager.SpawnEntity(spreader.WallResult, - transform.Coordinates.Offset(direction.AsDir().ToVec())); - if (EntityManager.TryGetComponent(uid, out DestructibleComponent? destructible)) - { - destructible.Thresholds.Clear(); - var damageThreshold = new DamageThreshold - { - Trigger = new DamageTrigger { Damage = 5 } - }; - damageThreshold.AddBehavior(new SpawnEntitiesBehavior - { - Spawn = new Dictionary { { entityStrucrureId, new MinMax{Min = 1, Max = 1} } }, - Offset = 0f - }); - damageThreshold.AddBehavior(new DoActsBehavior - { - Acts = ThresholdActs.Destruction - }); - destructible.Thresholds.Add(damageThreshold); - } - - foreach (var entityUid in entityUids) - { - if (_tagSystem.HasAnyTag(entityUid, "Wall", "Window")) - EntityManager.DeleteEntity(entityUid); - } - } - } - - return didGrow; - } - - private bool IsTileBlockedFrom(EntityUid ent, DirectionFlag dir) - { - if (EntityManager.TryGetComponent(ent, out _)) - return true; - - if (EntityManager.TryGetComponent(ent, out var airtight)) - return true; - - return false; - } -} diff --git a/Content.Server/Backmen/Flesh/FleshHeartComponent.cs b/Content.Server/Backmen/Flesh/FleshHeartComponent.cs deleted file mode 100644 index 4299c080147..00000000000 --- a/Content.Server/Backmen/Flesh/FleshHeartComponent.cs +++ /dev/null @@ -1,92 +0,0 @@ -using Content.Shared.Damage; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Components; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.Flesh; - -[RegisterComponent] -[Access(typeof(FleshHeartSystem))] -public sealed partial class FleshHeartComponent : Component -{ - [DataField("transformSound")] public SoundSpecifier TransformSound = new SoundCollectionSpecifier("gib"); - - [ViewVariables(VVAccess.ReadWrite), DataField("speciesWhitelist")] - public List SpeciesWhitelist = new() - { - "Human", - "Reptilian", - "Dwarf", - "Oni", - "Vox", - "HumanoidFoxes", - "Shadowkin", - "Harpy", - }; - - [DataField("alertLevelOnActivate")] public string AlertLevelOnActivate = "red"; - - [DataField("alertLevelOnDeactivate")] public string AlertLevelOnDeactivate = "green"; - - public Entity? AmbientAudioStream = default; - - [DataField("bodyToFinalStage"), ViewVariables(VVAccess.ReadWrite)] - public int BodyToFinalStage = 3; // default 3 - - [DataField("timeLiveFinalHeartToWin"), ViewVariables(VVAccess.ReadWrite)] - public int TimeLiveFinalHeartToWin = 1200; // default 600 - - [DataField("spawnObjectsFrequency"), ViewVariables(VVAccess.ReadWrite)] - public float SpawnObjectsFrequency = 60; - - [DataField("spawnObjectsAmount"), ViewVariables(VVAccess.ReadWrite)] - public int SpawnObjectsAmount = 6; - - [DataField("spawnObjectsRadius"), ViewVariables(VVAccess.ReadWrite)] - public float SpawnObjectsRadius = 5; - - [DataField("fleshTileId", customTypeSerializer: typeof(PrototypeIdSerializer)), - ViewVariables(VVAccess.ReadWrite)] - public string FleshTileId = "Flesh"; - - [DataField("fleshBlockerId", customTypeSerializer: typeof(PrototypeIdSerializer)), - ViewVariables(VVAccess.ReadWrite)] - public string FleshBlockerId = "FleshBlocker"; - - [DataField("spawns"), ViewVariables(VVAccess.ReadWrite)] - public Dictionary Spawns = new(); - - [DataField("spawnMobsFrequency"), ViewVariables(VVAccess.ReadWrite)] - public float SpawnMobsFrequency = 120; - - [DataField("spawnMobsAmount"), ViewVariables(VVAccess.ReadWrite)] - public int SpawnMobsAmount = 4; - - [DataField("spawnMobsRadius"), ViewVariables(VVAccess.ReadWrite)] - public float SpawnMobsRadius = 3; - - [ViewVariables] - public float Accumulator = 0; - - [ViewVariables] - public float SpawnMobsAccumulator = 0; - - [ViewVariables] - public float SpawnObjectsAccumulator = 0; - - [ViewVariables] - public float FinalStageAccumulator = 0; - - [ViewVariables] - public FleshHeartSystem.HeartStates State = FleshHeartSystem.HeartStates.Base; - - public readonly HashSet EdgeMobs = new(); - - public Container BodyContainer = default!; - - [DataField("damageMobsIfHeartDestruct", required: true)] - [ViewVariables(VVAccess.ReadWrite)] - public DamageSpecifier DamageMobsIfHeartDestruct = default!; -} diff --git a/Content.Server/Backmen/Flesh/FleshHeartSystem.cs b/Content.Server/Backmen/Flesh/FleshHeartSystem.cs deleted file mode 100644 index a828402f31e..00000000000 --- a/Content.Server/Backmen/Flesh/FleshHeartSystem.cs +++ /dev/null @@ -1,431 +0,0 @@ -using System.Linq; -using System.Numerics; -using Content.Server.AlertLevel; -using Content.Server.Body.Systems; -using Content.Server.Chat.Systems; -using Content.Server.Backmen.Flesh.FleshGrowth; -using Content.Server.Humanoid; -using Content.Server.Popups; -using Content.Server.RoundEnd; -using Content.Server.Station.Systems; -using Content.Shared.Body.Components; -using Content.Shared.Body.Part; -using Content.Shared.Damage; -using Content.Shared.Destructible; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Climbing.Events; -using Content.Shared.Humanoid; -using Content.Shared.Humanoid.Prototypes; -using Content.Shared.Mind.Components; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Physics; -using Content.Shared.Popups; -using Content.Shared.Random; -using Content.Shared.Random.Helpers; -using Content.Shared.Tag; -using Robust.Server.Containers; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Components; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Server.Backmen.Flesh; - -public sealed class FleshHeartSystem : EntitySystem -{ - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly ContainerSystem _containerSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly IMapManager _map = default!; - [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; - [Dependency] private readonly BodySystem _body = default!; - [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; - [Dependency] private readonly HumanoidAppearanceSystem _sharedHuApp = default!; - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly SharedAppearanceSystem _sharedAppearance = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly AlertLevelSystem _alertLevel = default!; - [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; - [Dependency] private readonly RandomHelperSystem _randomHelper = default!; - [Dependency] private readonly MapSystem _mapSystem = default!; - [Dependency] private readonly TransformSystem _transform = default!; - - public enum HeartStates - { - Base, - Active, - Disable - } - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnDestruction); - SubscribeLocalEvent(OnClimbedOn); - } - - private void OnShutdown(EntityUid uid, FleshHeartComponent component, ComponentShutdown args) - { - _audioSystem.Stop(component.AmbientAudioStream, component.AmbientAudioStream); - } - - private void OnDestruction(EntityUid uid, FleshHeartComponent component, DestructionEventArgs args) - { - _audioSystem.Stop(component.AmbientAudioStream, component.AmbientAudioStream); - var stationUid = _stationSystem.GetOwningStation(uid); - if (stationUid != null) - { - _alertLevel.SetLevel(stationUid.Value, component.AlertLevelOnDeactivate, true, - true, true); - } - - var xform = Transform(uid); - var coordinates = xform.Coordinates; - foreach (var ent in component.BodyContainer.ContainedEntities.ToArray()) - { - _containerSystem.Remove(ent, component.BodyContainer, force: true, destination: coordinates); - _randomHelper.RandomOffset(ent, 1f); - } - - var fleshTilesQuery = EntityQueryEnumerator(); - while (fleshTilesQuery.MoveNext(out var ent, out var comp)) - { - QueueDel(ent); - } - - var fleshWallsQuery = EntityQueryEnumerator(); - while (fleshWallsQuery.MoveNext(out var ent, out var comp)) - { - if (_tagSystem.HasAllTags(comp, "Wall", "Flesh")) - { - _damageableSystem.TryChangeDamage(ent, component.DamageMobsIfHeartDestruct); - } - } - - foreach (var mob in component.EdgeMobs.ToArray()) - { - _damageableSystem.TryChangeDamage(mob, component.DamageMobsIfHeartDestruct); - } - } - - private void SetHeartActive(Entity ent) - { - ent.Comp1.State = HeartStates.Active; - - var location = _transform.GetMapCoordinates(ent); - - _chat.DispatchGlobalAnnouncement( - Loc.GetString("flesh-heart-activate-warning", ("location", location.Position)), - playSound: false, colorOverride: Color.Red); - // _audioSystem.PlayGlobal("/Audio/Misc/notice1.ogg", Filter.Broadcast(), true); - var stationUid = _stationSystem.GetOwningStation(ent); - if (stationUid != null) - { - _alertLevel.SetLevel(stationUid.Value, ent.Comp1.AlertLevelOnActivate, false, - false, true, true); - } - - _audioSystem.PlayGlobal( - "/Audio/Announcements/flesh_heart_activate.ogg", Filter.Broadcast(), true, - AudioParams.Default); - SpawnFleshFloorOnOpenTiles(ent.Comp1, Transform(ent), 1); - _roundEndSystem.CancelRoundEndCountdown(stationUid); - _audioSystem.PlayPvs(ent.Comp1.TransformSound, ent, ent.Comp1.TransformSound.Params); - ent.Comp1.AmbientAudioStream = _audioSystem.PlayGlobal( - "/Audio/Ambience/Objects/flesh_heart.ogg", Filter.Broadcast(), true, - AudioParams.Default.WithLoop(true).WithVolume(-3f)); - _appearance.SetData(ent, FleshHeartVisuals.State, FleshHeartStatus.Active); - } - - private void HeartActiveTick(Entity ent, float frameTime) - { - ent.Comp1.SpawnMobsAccumulator += frameTime; - ent.Comp1.SpawnObjectsAccumulator += frameTime; - ent.Comp1.FinalStageAccumulator += frameTime; - if (ent.Comp1.SpawnMobsAccumulator >= ent.Comp1.SpawnMobsFrequency) - { - ent.Comp1.SpawnMobsAccumulator = 0; - SpawnMonstersOnOpenTiles(ent.Comp1, ent.Comp2, ent.Comp1.SpawnMobsAmount, ent.Comp1.SpawnMobsRadius); - } - - if (ent.Comp1.SpawnObjectsAccumulator >= ent.Comp1.SpawnObjectsFrequency) - { - ent.Comp1.SpawnObjectsAccumulator = 0; - // SpawnObjectsOnOpenTiles(comp, xform, comp.SpawnObjectsAmount, comp.SpawnObjectsRadius); - } - - if (ent.Comp1.FinalStageAccumulator >= ent.Comp1.TimeLiveFinalHeartToWin) - { - ent.Comp1.State = HeartStates.Disable; - RaiseLocalEvent(new FleshHeartFinalEvent() - { - OwningStation = ent.Comp2.GridUid, - }); - } - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - var fleshHeartQuery = EntityQueryEnumerator(); - while (fleshHeartQuery.MoveNext(out var ent, out var comp, out var xform)) - { - comp.Accumulator += frameTime; - - if (comp.Accumulator <= 1) - continue; - comp.Accumulator -= 1; - - switch (comp.State) - { - case HeartStates.Base when (comp.BodyContainer.ContainedEntities.Count >= comp.BodyToFinalStage): - { - SetHeartActive((ent, comp, xform)); - - break; - } - case HeartStates.Active: - { - HeartActiveTick((ent, comp, xform), frameTime); - - break; - } - } - } - } - - private void OnStartup(EntityUid uid, FleshHeartComponent component, MapInitEvent args) - { - component.BodyContainer = _containerSystem.EnsureContainer(uid, "bodyContainer"); - } - - private void OnClimbedOn(EntityUid uid, FleshHeartComponent component, ref ClimbedOnEvent args) - { - if (!CanAbsorb(uid, args.Climber, component)) - { - _popup.PopupEntity(Loc.GetString("flesh-heart-cant-absorb-targer"), - args.Instigator, PopupType.Large); - return; - } - - if (!TryComp(args.Climber, out var fixturesComponent)) - { - _popup.PopupEntity(Loc.GetString("flesh-heart-cant-absorb-targer"), - args.Instigator, PopupType.Large); - return; - } - - if (fixturesComponent.Fixtures["fix1"].Density <= 60) - { - _popup.PopupEntity( - Loc.GetString("flesh-heart-cant-absorb-targer"), - uid, PopupType.Large); - return; - } - - var xform = Transform(args.Climber); - - if (TryComp(args.Climber, out ContainerManagerComponent? container)) - { - foreach (var cont in _containerSystem.GetAllContainers(args.Climber, container).ToArray()) - { - foreach (var ent in cont.ContainedEntities.ToArray()) - { - { - if (HasComp(ent)) - { - continue; - } - - _containerSystem.Remove(ent, cont, force: true, destination: xform.Coordinates); - _randomHelper.RandomOffset(ent, 0.25f); - } - } - } - } - - if ( - TryComp(args.Climber, out var huAppComponent) && - TryComp(args.Climber, out var bodyComponent)) - { - var parts = _body.GetBodyChildren(args.Climber, bodyComponent).ToArray(); - - foreach (var part in parts) - { - if (part.Component.PartType == BodyPartType.Head) - continue; - - if (part.Component.PartType == BodyPartType.Torso) - { - foreach (var organ in _body.GetPartOrgans(part.Id, part.Component)) - { - _body.RemoveOrgan(organ.Id, organ.Component); - } - } - else - { - QueueDel(part.Id); - } - } - - - _bloodstreamSystem.TryModifyBloodLevel(args.Climber, -300); - - var skeletonSprites = _proto.Index("MobSkeletonSprites"); - foreach (var (key, id) in skeletonSprites.Sprites) - { - if (key != HumanoidVisualLayers.Head) - { - _sharedHuApp.SetBaseLayerId(args.Climber, key, id, humanoid: huAppComponent); - } - } - - _physics.SetDensity(args.Climber, "fix1", fixturesComponent.Fixtures["fix1"], 50); - - if (TryComp(args.Climber, out var appComponent)) - { - _sharedAppearance.SetData(args.Climber, DamageVisualizerKeys.Disabled, true, appComponent); - _damageableSystem.TryChangeDamage(args.Climber, - new DamageSpecifier() { DamageDict = { { "Slash", 100 } } }); - } - - _containerSystem.Insert(args.Climber, component.BodyContainer); - _audioSystem.PlayPvs(component.TransformSound, uid, component.TransformSound.Params); - } - } - - private bool CanAbsorb(EntityUid uid, EntityUid dragged, FleshHeartComponent component) - { - if (!TryComp(dragged, out var stateComponent)) - return false; - - if (stateComponent.CurrentState != MobState.Dead) - return false; - - if (!Transform(uid).Anchored) - return false; - - if (!TryComp(dragged, out var humanoidAppearance)) - return false; - - if (!(component.SpeciesWhitelist.Contains(humanoidAppearance.Species))) - return false; - - return !HasComp(dragged) || true; // TODO: wtf? - } -/* - private void SpawnObjectsOnOpenTiles(FleshHeartComponent component, TransformComponent xform, int amount, - float radius) - { - if (!TryComp(xform.GridUid, out var grid)) - return; - - var localpos = xform.Coordinates.Position; - var tilerefs = _mapSystem.GetLocalTilesIntersecting(xform.GridUid.Value, grid, - new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray(); - foreach (var tileref in tilerefs) - { - var canSpawnBlocker = true; - foreach (var ent in _mapSystem.GetAnchoredEntities(xform.GridUid.Value, grid, tileref.GridIndices).ToList()) - { - if (_tagSystem.HasAnyTag(ent, "FleshBlocker", "Wall", "Window")) - { - canSpawnBlocker = false; - } - } - - if (canSpawnBlocker && _random.Prob(0.01f)) - { - Spawn(component.FleshBlockerId, - _mapSystem.ToCoordinates(xform.GridUid.Value, tileref.GridIndices, grid)); - } - } - } -*/ - private void SpawnFleshFloorOnOpenTiles(FleshHeartComponent component, TransformComponent xform, float radius) - { - if (!TryComp(xform.GridUid, out var grid)) - return; - - var localpos = xform.Coordinates.Position; - var tilerefs = _mapSystem.GetLocalTilesIntersecting(xform.GridUid.Value, grid, - new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray(); - foreach (var tileref in tilerefs) - { - var canSpawnFloor = true; - foreach (var ent in _mapSystem.GetAnchoredEntities(xform.GridUid.Value, grid, tileref.GridIndices).ToList()) - { - if (_tagSystem.HasAnyTag(ent, "Wall", "Window", "Flesh")) - canSpawnFloor = false; - } - - if (canSpawnFloor) - { - Spawn(component.FleshTileId, - _mapSystem.ToCoordinates(xform.GridUid.Value, tileref.GridIndices, grid)); - } - } - } - - private void SpawnMonstersOnOpenTiles(FleshHeartComponent component, TransformComponent xform, int amount, - float radius) - { - if (!TryComp(xform.GridUid, out var grid)) - return; - - var localpos = xform.Coordinates.Position; - var tilerefs = _mapSystem.GetLocalTilesIntersecting(xform.GridUid.Value, grid, - new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray(); - _random.Shuffle(tilerefs); - var physQuery = GetEntityQuery(); - var amountCounter = 0; - foreach (var tileref in tilerefs) - { - var valid = true; - foreach (var ent in _mapSystem.GetAnchoredEntities(xform.GridUid.Value, grid, tileref.GridIndices)) - { - if (!physQuery.TryGetComponent(ent, out var body)) - continue; - if (body.BodyType != BodyType.Static || - !body.Hard || - (body.CollisionLayer & (int) CollisionGroup.Impassable) == 0) - continue; - valid = false; - break; - } - - if (!valid) - continue; - amountCounter++; - - var randomMob = _random.Pick(component.Spawns); - var mob = Spawn(randomMob, - _mapSystem.ToCoordinates(xform.GridUid.Value, tileref.GridIndices, grid)); - component.EdgeMobs.Add(mob); - if (amountCounter >= amount) - return; - } - } - - public sealed class FleshHeartFinalEvent : EntityEventArgs - { - public EntityUid? OwningStation; - } -} diff --git a/Content.Server/Backmen/Flesh/FleshMobComponent.cs b/Content.Server/Backmen/Flesh/FleshMobComponent.cs deleted file mode 100644 index d18a3923324..00000000000 --- a/Content.Server/Backmen/Flesh/FleshMobComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.Flesh; - -[RegisterComponent] -public sealed partial class FleshMobComponent : Component -{ - - [ViewVariables(VVAccess.ReadWrite), DataField("soundDeath")] - public SoundSpecifier? SoundDeath = new SoundPathSpecifier("/Audio/Animals/Flesh/flesh_pudge_dead.ogg"); - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("deathMobSpawnId")] - public EntProtoId? DeathMobSpawnId; - - [DataField("deathMobSpawnCount"), ViewVariables(VVAccess.ReadWrite)] - public int DeathMobSpawnCount = 0; -} diff --git a/Content.Server/Backmen/Flesh/FleshMobSystem.cs b/Content.Server/Backmen/Flesh/FleshMobSystem.cs deleted file mode 100644 index 8b6bf51b03e..00000000000 --- a/Content.Server/Backmen/Flesh/FleshMobSystem.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Numerics; -using Content.Server.Popups; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Interaction.Events; -using Content.Shared.Mobs; -using Content.Shared.Popups; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Map; -using Robust.Shared.Random; - -namespace Content.Server.Backmen.Flesh; - -public sealed class FleshMobSystem : EntitySystem -{ - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly IRobustRandom _random = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnMobStateChanged); - SubscribeLocalEvent(OnAttackAttempt); - - } - - private void OnAttackAttempt(EntityUid uid, FleshMobComponent component, AttackAttemptEvent args) - { - if (args.Cancelled) - return; - - if (HasComp(args.Target)) - { - _popup.PopupCursor(Loc.GetString("flesh-mob-cant-atack-flesh-mob"), uid, - PopupType.LargeCaution); - args.Cancel(); - } - if (HasComp(args.Target)) - { - _popup.PopupCursor(Loc.GetString("flesh-mob-cant-atack-flesh-cultist"), uid, - PopupType.LargeCaution); - args.Cancel(); - } - - if (HasComp(args.Target)) - { - _popup.PopupCursor(Loc.GetString("flesh-mob-cant-atack-flesh-heart"), uid, - PopupType.LargeCaution); - args.Cancel(); - } - } - - private const float SpawnDistance = 0.25f; - private void OnMobStateChanged(EntityUid uid, FleshMobComponent component, MobStateChangedEvent args) - { - if (args.NewMobState != MobState.Dead) - return; - - if (component.SoundDeath != null) - _audioSystem.PlayPvs(component.SoundDeath, uid, component.SoundDeath.Params); - - if (component.DeathMobSpawnId == null) - return; - - var pos = Transform(uid); - - for (var i = 0; i < component.DeathMobSpawnCount; i++) - { - var coords = new EntityCoordinates( - pos.Coordinates.EntityId, - pos.Coordinates.Position with - { - X = pos.Coordinates.Position.X + _random.NextFloat(-SpawnDistance,SpawnDistance), - Y = pos.Coordinates.Position.Y + _random.NextFloat(-SpawnDistance,SpawnDistance), - } - ); - Spawn(component.DeathMobSpawnId, coords); - } - } -} - diff --git a/Content.Server/Backmen/Flesh/FleshPudgeComponent.cs b/Content.Server/Backmen/Flesh/FleshPudgeComponent.cs deleted file mode 100644 index fab8f95d290..00000000000 --- a/Content.Server/Backmen/Flesh/FleshPudgeComponent.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.Flesh; - -[RegisterComponent] -public sealed partial class FleshPudgeComponent : Component -{ - /// - /// WorldTargetAction - /// - [DataField("actionThrowWorm", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ActionThrowWorm = "ActionThrowWorm"; - - public EntityUid? ThrowWormAction; - - /// - /// WorldTargetAction - /// - [DataField("actionAcidSpit", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ActionAcidSpit = "ActionAcidSpit"; - public EntityUid? AcidSpitAction; - - /// - /// InstantAction - /// - [DataField("actionAbsorbBloodPool", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ActionAbsorbBloodPool = "ActionAbsorbBloodPool"; - public EntityUid? AbsorbBloodPoolAction; - - [ViewVariables(VVAccess.ReadWrite), DataField("soundThrowWorm")] - public SoundSpecifier? SoundThrowWorm = new SoundPathSpecifier("/Audio/Animals/Flesh/throw_worm.ogg"); - - [ViewVariables(VVAccess.ReadWrite), - DataField("wormMobSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string WormMobSpawnId = "MobFleshWorm"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("bulletAcidSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string BulletAcidSpawnId = "BulletSplashAcid"; - - [DataField("healBloodAbsorbReagents")] public List HealBloodAbsorbReagents = new() - { - new ReagentQuantity("Omnizine", 1, null), - new ReagentQuantity("DexalinPlus", 0.50, null), - new ReagentQuantity("Iron", 0.50, null) - }; - - [DataField("bloodAbsorbSound")] - public SoundSpecifier BloodAbsorbSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg"); -} diff --git a/Content.Server/Backmen/Flesh/FleshPudgeSystem.cs b/Content.Server/Backmen/Flesh/FleshPudgeSystem.cs deleted file mode 100644 index e934f7c928c..00000000000 --- a/Content.Server/Backmen/Flesh/FleshPudgeSystem.cs +++ /dev/null @@ -1,152 +0,0 @@ -using Content.Server.Actions; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Popups; -using Content.Server.Weapons.Ranged.Systems; -using Content.Shared.Backmen.Flesh; -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.FixedPoint; -using Content.Shared.Fluids.Components; -using Content.Shared.Popups; -using Content.Shared.Throwing; -using Robust.Server.GameObjects; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Collections; - -namespace Content.Server.Backmen.Flesh; - -public sealed class FleshPudgeSystem : EntitySystem -{ - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly ActionsSystem _action = default!; - [Dependency] private readonly ThrowingSystem _throwing = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionSystem = default!; - [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly GunSystem _gunSystem = default!; - [Dependency] private readonly PhysicsSystem _physics = default!; - [Dependency] private readonly SharedTransformSystem _transform = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnThrowWorm); - SubscribeLocalEvent(OnAbsorbBloodPoolActionEvent); - SubscribeLocalEvent(OnAcidSpit); - } - private void OnThrowWorm(EntityUid uid, FleshPudgeComponent component, FleshPudgeThrowWormActionEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - var xform = Transform(uid); - var worm = Spawn(component.WormMobSpawnId, xform.Coordinates); - - var mapCoords = _transform.ToMapCoordinates(args.Target); - var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; - - _throwing.TryThrow(worm, direction, 7F, uid, 10F); - if (component.SoundThrowWorm != null) - { - _audioSystem.PlayPvs(component.SoundThrowWorm, uid, component.SoundThrowWorm.Params); - } - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-popup"), uid, PopupType.LargeCaution); - } - - private void OnAcidSpit(EntityUid uid, FleshPudgeComponent component, FleshPudgeAcidSpitActionEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - var xform = Transform(uid); - var acidBullet = Spawn(component.BulletAcidSpawnId, xform.Coordinates); - var mapCoords = _transform.ToMapCoordinates(args.Target); - var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; - var userVelocity = _physics.GetMapLinearVelocity(uid); - - _gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid); - _audioSystem.PlayPvs(component.BloodAbsorbSound, uid, component.BloodAbsorbSound.Params); - } - - private void OnAbsorbBloodPoolActionEvent(EntityUid uid, FleshPudgeComponent component, - FleshPudgeAbsorbBloodPoolActionEvent args) - { - if (args.Handled) - return; - - var xform = Transform(uid); - var puddles = new ValueList<(EntityUid Entity, string Solution)>(); - puddles.Clear(); - foreach (var entity in _lookup.GetEntitiesInRange(xform.Coordinates, 0.5f)) - { - puddles.Add((entity, entity.Comp.SolutionName)); - } - - if (puddles.Count == 0) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-not-find-puddles"), - uid, uid, PopupType.Large); - return; - } - - var totalBloodQuantity = 0f; - - foreach (var (puddle, solution) in puddles) - { - if (!_solutionSystem.TryGetSolution(puddle, solution, out _, out var puddleSolution)) - { - continue; - } - var hasImpurities = false; - FixedPoint2 puddleBloodQuantity = 0; - foreach (var puddleSolutionContent in puddleSolution.Contents.ToArray()) - { - if (puddleSolutionContent.Reagent.Prototype != "Blood") - { - hasImpurities = true; - } - else - { - puddleBloodQuantity += puddleSolutionContent.Quantity; - } - } - if (hasImpurities) - continue; - totalBloodQuantity += puddleBloodQuantity.Float(); - QueueDel(puddle); - } - - if (totalBloodQuantity == 0) - { - _popup.PopupEntity(Loc.GetString("flesh-cultist-cant-absorb-puddle"), - uid, uid, PopupType.Large); - return; - } - - _audioSystem.PlayPvs(component.BloodAbsorbSound, uid, component.BloodAbsorbSound.Params); - _popup.PopupEntity(Loc.GetString("flesh-cultist-absorb-puddle", ("Entity", uid)), - uid, uid, PopupType.Large); - - var transferSolution = new Solution(); - foreach (var reagent in component.HealBloodAbsorbReagents.ToArray()) - { - transferSolution.AddReagent(reagent.Reagent, reagent.Quantity * (totalBloodQuantity / 10)); - } - if (_solutionSystem.TryGetInjectableSolution(uid, out var injectableSolution, out _)) - { - _solutionSystem.TryAddSolution(injectableSolution.Value, transferSolution); - } - args.Handled = true; - } - - private void OnStartup(EntityUid uid, FleshPudgeComponent component, ComponentStartup args) - { - _action.AddAction(uid, ref component.AcidSpitAction, component.ActionAcidSpit); - _action.AddAction(uid, ref component.ThrowWormAction, component.ActionThrowWorm); - _action.AddAction(uid, ref component.AbsorbBloodPoolAction, component.ActionAbsorbBloodPool); - } -} diff --git a/Content.Server/Backmen/Flesh/FleshWormComponent.cs b/Content.Server/Backmen/Flesh/FleshWormComponent.cs deleted file mode 100644 index df92d0e7470..00000000000 --- a/Content.Server/Backmen/Flesh/FleshWormComponent.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Content.Shared.Damage; -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.Flesh; - -[Access(typeof(FleshWormSystem))] -[RegisterComponent] -public sealed partial class FleshWormComponent : Component -{ - /// - /// WorldTargetAction - /// - [DataField("actionWormJump", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ActionWormJump = "ActionWormJump"; - - public EntityUid? WormJumpAction; - - [DataField("paralyzeTime"), ViewVariables(VVAccess.ReadWrite)] - public float ParalyzeTime = 3f; - - [DataField("chansePounce"), ViewVariables(VVAccess.ReadWrite)] - public int ChansePounce = 33; - - [DataField("damage", required: true)] - [ViewVariables(VVAccess.ReadWrite)] - public DamageSpecifier Damage = default!; - - public bool IsDeath = false; - - public EntityUid EquipedOn; - - [ViewVariables] public float Accumulator = 0; - - [DataField("damageFrequency"), ViewVariables(VVAccess.ReadWrite)] - public float DamageFrequency = 5; - - [ViewVariables(VVAccess.ReadWrite), DataField("soundWormJump")] - public SoundSpecifier? SoundWormJump = new SoundPathSpecifier("/Audio/Animals/Flesh/flesh_worm_scream.ogg"); - -} diff --git a/Content.Server/Backmen/Flesh/FleshWormSystem.cs b/Content.Server/Backmen/Flesh/FleshWormSystem.cs deleted file mode 100644 index e4dc1d66b02..00000000000 --- a/Content.Server/Backmen/Flesh/FleshWormSystem.cs +++ /dev/null @@ -1,250 +0,0 @@ -using System.Linq; -using Content.Server.Actions; -using Content.Server.NPC.Components; -using Content.Server.Nutrition.Components; -using Content.Server.Nutrition.EntitySystems; -using Content.Server.Popups; -using Content.Shared.CombatMode; -using Content.Shared.Damage; -using Content.Shared.Backmen.Flesh; -using Content.Shared.CombatMode.Pacification; -using Content.Shared.Hands; -using Content.Shared.Humanoid; -using Content.Shared.Inventory; -using Content.Shared.Inventory.Events; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Popups; -using Content.Shared.Stunnable; -using Content.Shared.Throwing; -using Content.Shared.Weapons.Melee.Events; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; -using Robust.Shared.Random; - -namespace Content.Server.Backmen.Flesh; - -public sealed partial class FleshWormSystem : EntitySystem -{ - [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly SharedStunSystem _stunSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly SharedCombatModeSystem _combat = default!; - [Dependency] private readonly ThrowingSystem _throwing = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly ActionsSystem _action = default!; - [Dependency] private readonly IRobustRandom _random = default!; - - public override void Initialize() - { - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnMeleeHit); - SubscribeLocalEvent(OnWormDoHit); - SubscribeLocalEvent(OnGotEquipped); - SubscribeLocalEvent(OnGotUnequipped); - SubscribeLocalEvent(OnGotEquippedHand); - SubscribeLocalEvent(OnMobStateChanged); - SubscribeLocalEvent(OnUnequipAttempt); - SubscribeLocalEvent(OnJumpWorm); - } - - private void OnStartup(EntityUid uid, FleshWormComponent component, ComponentStartup args) - { - _action.AddAction(uid, ref component.WormJumpAction, component.ActionWormJump); - } - - private void OnWormDoHit(EntityUid uid, FleshWormComponent component, ThrowDoHitEvent args) - { - if (component.IsDeath) - return; - if (HasComp(args.Target)) - return; - if (!HasComp(args.Target)) - return; - if (TryComp(args.Target, out MobStateComponent? mobState)) - { - if (mobState.CurrentState is not MobState.Alive) - { - return; - } - } - - _inventory.TryGetSlotEntity(args.Target, "head", out var headItem); - if (HasComp(headItem)) - return; - - if (!_inventory.TryEquip(args.Target, uid, "mask", true)) - return; - - component.EquipedOn = args.Target; - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-hit-user"), - args.Target, args.Target, PopupType.LargeCaution); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-hit-mob", - ("entity", args.Target)), - uid, uid, PopupType.LargeCaution); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-eat-face-others", - ("entity", args.Target)), args.Target, Filter.PvsExcept(uid), true, PopupType.Large); - - EnsureComp(uid); - _stunSystem.TryParalyze(args.Target, TimeSpan.FromSeconds(component.ParalyzeTime), true); - _damageableSystem.TryChangeDamage(args.Target, component.Damage); - } - - private void OnGotEquipped(EntityUid uid, FleshWormComponent component, GotEquippedEvent args) - { - if (args.Slot != "mask") - return; - component.EquipedOn = args.Equipee; - EnsureComp(uid); - } - - private void OnUnequipAttempt(EntityUid uid, FleshWormComponent component, BeingUnequippedAttemptEvent args) - { - if (args.Slot != "mask") - return; - if (component.EquipedOn != args.Unequipee) - return; - if (HasComp(args.Unequipee)) - return; - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-try-unequip"), - args.Unequipee, args.Unequipee, PopupType.Large); - args.Cancel(); - } - - private void OnGotEquippedHand(EntityUid uid, FleshWormComponent component, GotEquippedHandEvent args) - { - if (HasComp(args.User)) - return; - if (HasComp(args.User)) - return; - if (component.IsDeath) - return; - // _handsSystem.TryDrop(args.User, uid, checkActionBlocker: false); - _damageableSystem.TryChangeDamage(args.User, component.Damage); - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-bite-user"), - args.User, args.User); - } - - private void OnGotUnequipped(EntityUid uid, FleshWormComponent component, GotUnequippedEvent args) - { - if (args.Slot != "mask") - return; - component.EquipedOn = EntityUid.Invalid; - RemCompDeferred(uid); - var combatMode = EnsureComp(uid); - _combat.SetInCombatMode(uid, true, combatMode); - EnsureComp(uid); - } - - private void OnMeleeHit(EntityUid uid, FleshWormComponent component, MeleeHitEvent args) - { - if (!args.HitEntities.Any()) - return; - - foreach (var entity in args.HitEntities) - { - if (!HasComp(entity)) - return; - - if (TryComp(entity, out MobStateComponent? mobState)) - { - if (mobState.CurrentState is not MobState.Alive) - { - return; - } - } - - _inventory.TryGetSlotEntity(entity, "head", out var headItem); - if (HasComp(headItem)) - return; - - - var shouldEquip = _random.Next(1, 101) <= component.ChansePounce; - if (!shouldEquip) - return; - - var equipped = _inventory.TryEquip(entity, uid, "mask", true); - if (!equipped) - return; - - component.EquipedOn = entity; - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-hit-user"), - entity, entity, PopupType.LargeCaution); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-hit-mob", ("entity", entity)), - uid, uid, PopupType.LargeCaution); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-eat-face-others", - ("entity", entity)), entity, Filter.PvsExcept(entity), true, PopupType.Large); - - EnsureComp(uid); - _stunSystem.TryParalyze(entity, TimeSpan.FromSeconds(component.ParalyzeTime), true); - _damageableSystem.TryChangeDamage(entity, component.Damage, origin: entity); - break; - } - } - - private static void OnMobStateChanged(EntityUid uid, FleshWormComponent component, MobStateChangedEvent args) - { - if (args.NewMobState == MobState.Dead) - { - component.IsDeath = true; - } - } - private void OnJumpWorm(EntityUid uid, FleshWormComponent component, FleshWormJumpActionEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - var xform = Transform(uid); - var mapCoords = _transform.ToMapCoordinates(args.Target); - var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; - - _throwing.TryThrow(uid, direction, 7F, uid, 10F); - if (component.SoundWormJump != null) - { - _audioSystem.PlayPvs(component.SoundWormJump, uid, component.SoundWormJump.Params); - } - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - foreach (var comp in EntityQuery()) - { - comp.Accumulator += frameTime; - - if (comp.Accumulator <= comp.DamageFrequency) - continue; - - comp.Accumulator = 0; - - if (comp.EquipedOn is not { Valid: true } targetId) - continue; - if (HasComp(comp.EquipedOn)) - return; - if (TryComp(targetId, out MobStateComponent? mobState)) - { - if (mobState.CurrentState is not MobState.Alive) - { - _inventory.TryUnequip(targetId, "mask", true, true); - comp.EquipedOn = EntityUid.Invalid; - return; - } - } - _damageableSystem.TryChangeDamage(targetId, comp.Damage); - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-eat-face-user"), - targetId, targetId, PopupType.LargeCaution); - _popup.PopupEntity(Loc.GetString("flesh-pudge-throw-worm-eat-face-others", - ("entity", targetId)), targetId, Filter.PvsExcept(targetId), true); - } - } -} diff --git a/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathComponent.cs b/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathComponent.cs deleted file mode 100644 index 82b38638aaa..00000000000 --- a/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathComponent.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.Flesh; - -[RegisterComponent] -public sealed partial class TransformInFleshPudgeOnDeathComponent : Component -{ - - [ViewVariables(VVAccess.ReadWrite), - DataField("fleshPudgeId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string FleshPudgeId = "MobFleshPudge"; - - [DataField("transformSound")] - public SoundSpecifier TransformSound = new SoundCollectionSpecifier("gib"); - -} diff --git a/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathSystem.cs b/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathSystem.cs deleted file mode 100644 index 713d447e0d5..00000000000 --- a/Content.Server/Backmen/Flesh/TransformInFleshPudgeOnDeathSystem.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Linq; -using Content.Server.Body.Components; -using Content.Server.Fluids.EntitySystems; -using Content.Server.Forensics; -using Content.Server.Mind; -using Content.Server.Popups; -using Content.Shared.Body.Part; -using Content.Shared.Chemistry.Components; -using Content.Shared.Humanoid; -using Content.Shared.Mind; -using Content.Shared.Mind.Components; -using Content.Shared.Mobs; -using Content.Shared.Popups; -using Content.Shared.Random; -using Content.Shared.Zombies; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; - -namespace Content.Server.Backmen.Flesh; - -public sealed class TransformInFleshPudgeOnDeathSystem : EntitySystem -{ - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly PuddleSystem _puddleSystem = default!; - [Dependency] private readonly RandomHelperSystem _randomHelper = default!; - //[Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnDamageChanged); - } - - - private void OnDamageChanged(EntityUid uid, TransformInFleshPudgeOnDeathComponent component, MobStateChangedEvent args) - { - if (args.NewMobState is not (MobState.Dead or MobState.Critical)) - return; - - if (HasComp(uid)) - return; - - if (TryComp(uid, out var huApComp)) - { - var golem = Spawn(component.FleshPudgeId, Transform(uid).Coordinates); - if (TryComp(uid, out var mindComp)) - _mindSystem.TransferTo(mindComp.Mind!.Value, golem, false); - //mindComp.Mind?.TransferTo(golem, ghostCheckOverride: true); - - _popup.PopupEntity(Loc.GetString("flesh-pudge-transform-user", ("EntityTransform", golem)), - golem, golem, PopupType.LargeCaution); - _popup.PopupEntity(Loc.GetString("flesh-pudge-transform-others", - ("Entity", uid), ("EntityTransform", golem)), golem, Filter.PvsExcept(golem), - true, PopupType.LargeCaution); - - var xform = Transform(uid); - var coordinates = xform.Coordinates; - var audio = AudioParams.Default.WithVariation(0.025f); - _audio.PlayPvs(component.TransformSound, uid, audio); - - if (TryComp(uid, out var container)) - { - foreach (var cont in _container.GetAllContainers(uid, container).ToArray()) - { - foreach (var ent in cont.ContainedEntities.ToArray()) - { - { - if (HasComp(ent)) - continue; - - _container.Remove(ent, cont, force: true, destination: coordinates); - //cont.Remove(ent, EntityManager, force: true); - //_transform.SetCoordinates(ent, coordinates); - _randomHelper.RandomOffset(ent, 0.25f); - } - } - } - } - - if (TryComp(uid, out var bloodstream) && bloodstream.BloodSolution != null) - { - var tempSol = new Solution() { MaxVolume = 5 }; - - tempSol.AddSolution(bloodstream.BloodSolution.Value.Comp.Solution, _prototypeManager); - - if (_puddleSystem.TrySpillAt(uid, tempSol.SplitSolution(50), out var puddleUid)) - { - if (TryComp(uid, out var dna)) - { - var comp = EnsureComp(puddleUid); - comp.DNAs.Add(dna.DNA); - } - } - } - - QueueDel(uid); - - } - } -} diff --git a/Content.Server/Backmen/GameTicking/Rules/Components/FleshCultRuleComponent.cs b/Content.Server/Backmen/GameTicking/Rules/Components/FleshCultRuleComponent.cs deleted file mode 100644 index b3aef4bde2f..00000000000 --- a/Content.Server/Backmen/GameTicking/Rules/Components/FleshCultRuleComponent.cs +++ /dev/null @@ -1,65 +0,0 @@ -using Content.Shared.Mind; -using Content.Shared.NPC.Prototypes; -using Content.Shared.Preferences; -using Content.Shared.Roles; -using Robust.Shared.Audio; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Backmen.GameTicking.Rules.Components; - -[RegisterComponent, Access(typeof(FleshCultRuleSystem))] -public sealed partial class FleshCultRuleComponent : Component -{ - public SoundSpecifier AddedSound = new SoundPathSpecifier( - "/Audio/Animals/Flesh/flesh_culstis_greeting.ogg"); - - public SoundSpecifier BuySuccesSound = new SoundPathSpecifier( - "/Audio/Animals/Flesh/flesh_cultist_buy_succes.ogg"); - - public List<(EntityUid mindId, MindComponent mind)> Cultists = new(); - - [DataField("fleshCultistPrototypeId")] - public EntProtoId FleshCultistMindRolePrototypeId = "MindRoleFlesh"; - - [DataField("fleshCultistLeaderPrototypeID")] - public EntProtoId FleshCultistLeaderMindRolePrototypeId = "MindRoleFleshLeader"; - - [DataField("faction")] - public ProtoId Faction = default!; - - public int TotalCultists => Cultists.Count; - - public readonly List CultistsNames = new(); - - public WinTypes WinType = WinTypes.Fail; - - public EntityUid? TargetStation; - - public List SpeciesWhitelist = new() - { - "Human", - "Reptilian", - "Dwarf", - "Oni", - "Vox", - "HumanoidFoxes", - }; - - public enum WinTypes - { - FleshHeartFinal, - Fail - } - - public enum SelectionState - { - WaitingForSpawn = 0, - ReadyToSelect = 1, - SelectionMade = 2, - } - - public SelectionState SelectionStatus = SelectionState.WaitingForSpawn; - public Dictionary StartCandidates = new(); -} diff --git a/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs b/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs deleted file mode 100644 index dda79052317..00000000000 --- a/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs +++ /dev/null @@ -1,628 +0,0 @@ -using System.Linq; -using Content.Server.Backmen.Flesh; -using Content.Server.Backmen.GameTicking.Rules.Components; -using Content.Server.Chat.Managers; -using Content.Server.GameTicking; -using Content.Server.GameTicking.Rules; -using Content.Server.Mind; -using Content.Server.NPC.Systems; -using Content.Server.Objectives; -using Content.Server.Radio.Components; -using Content.Server.Roles; -using Content.Server.RoundEnd; -using Content.Server.Shuttles.Components; -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Server.Store.Components; -using Content.Shared.Backmen.Abilities.Psionics; -using Content.Shared.Backmen.CCVar; -using Content.Shared.Backmen.Flesh; -using Content.Shared.GameTicking; -using Content.Shared.GameTicking.Components; -using Content.Shared.Humanoid; -using Content.Shared.Mind; -using Content.Shared.NPC.Systems; -using Content.Shared.Objectives.Components; -using Content.Shared.Players; -using Content.Shared.Preferences; -using Content.Shared.Radio; -using Content.Shared.Roles; -using Content.Shared.Roles.Jobs; -using Content.Shared.Store.Components; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Configuration; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Robust.Shared.Utility; - -namespace Content.Server.Backmen.GameTicking.Rules; - -public sealed class FleshCultRuleSystem : GameRuleSystem -{ - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly IChatManager _chatManager = default!; - [Dependency] private readonly NpcFactionSystem _faction = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly ISharedPlayerManager _actorSystem = default!; - [Dependency] private readonly RoleSystem _roleSystem = default!; - [Dependency] private readonly SharedJobSystem _jobs = default!; - [Dependency] private readonly ObjectivesSystem _objectivesSystem = default!; - [Dependency] private readonly IComponentFactory _componentFactory = default!; - - private ISawmill _sawmill = default!; - - private int PlayersPerCultist => _cfg.GetCVar(CCVars.FleshCultPlayersPerCultist); - private int MaxCultists => _cfg.GetCVar(CCVars.FleshCultMaxCultist); - - public override void Initialize() - { - base.Initialize(); - - _sawmill = Logger.GetSawmill("preset"); - - SubscribeLocalEvent(OnPlayersSpawned); - SubscribeLocalEvent(HandleLatejoin); - SubscribeLocalEvent(OnFleshHeartFinal); - SubscribeLocalEvent(OnGetBriefing); - } - - - private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) - { - var q = EntityQueryEnumerator(); - while (q.MoveNext(out var rule)) - { - args.Append(Loc.GetString("flesh-cult-role-cult-members", - ("cultMembers", string.Join(", ", rule.CultistsNames)))); - } - } - - private void OnFleshHeartFinal(FleshHeartSystem.FleshHeartFinalEvent ev) - { - var query = EntityQueryEnumerator(); - _sawmill.Info("Get FleshHeartFinalEvent"); - while (query.MoveNext(out var uid, out var fleshCult, out var gameRule)) - { - if (!GameTicker.IsGameRuleAdded(uid, gameRule)) - { - _sawmill.Info("FleshCultRule not added"); - continue; - } - - if (ev.OwningStation == null) - { - _sawmill.Info("OwningStation is null"); - return; - } - - if (fleshCult.TargetStation == null) - { - _sawmill.Info("TargetStation is null"); - return; - } - - _sawmill.Info(fleshCult.TargetStation.Value.ToString()); - - if (!TryComp(fleshCult.TargetStation, out StationDataComponent? data)) - { - _sawmill.Info("TargetStation not have StationDataComponent"); - return; - } - foreach (var grid in data.Grids) - { - if (grid != ev.OwningStation) - { - _sawmill.Info("grid not be TargetStation"); - continue; - } - - _sawmill.Info("FleshHeart Win"); - fleshCult.WinType = FleshCultRuleComponent.WinTypes.FleshHeartFinal; - _roundEndSystem.EndRound(); - return; - } - } - } - - private void DoCultistStart(FleshCultRuleComponent component) - { - if (!component.StartCandidates.Any()) - { - _sawmill.Error("Tried to start FleshCult mode without any candidates."); - return; - } - - component.TargetStation = _stationSystem.GetStations().FirstOrNull(HasComp); - - if (component.TargetStation == null) - { - _sawmill.Error("No found target station for flesh cult."); - return; - } - - var numCultists = MathHelper.Clamp(component.StartCandidates.Count / PlayersPerCultist, 1, MaxCultists); - - ICommonSession? cultistsLeader = null; - var cultistsLeaderPool = FindPotentialCultistsLeader(component.StartCandidates, component); - if (cultistsLeaderPool.Count != 0) - { - cultistsLeader = _random.PickAndTake(cultistsLeaderPool); - numCultists += -1; - } - - var cultistsPool = FindPotentialCultists(component.StartCandidates, component); - var selectedCultists = PickCultists(numCultists, cultistsPool); - if (cultistsLeader != null) - { - selectedCultists.Remove(cultistsLeader); - } - - if (cultistsLeader != null) - { - MakeCultistLeader(cultistsLeader); - } - - foreach (var cultist in selectedCultists) - { - MakeCultist(cultist); - } - - component.SelectionStatus = FleshCultRuleComponent.SelectionState.SelectionMade; - } - - private void OnPlayersSpawned(RulePlayerJobsAssignedEvent ev) - { - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var fleshCult, out var gameRule)) - { - - if (!GameTicker.IsGameRuleAdded(uid, gameRule)) - continue; - foreach (var player in ev.Players) - { - if (!ev.Profiles.ContainsKey(player.UserId)) - continue; - - fleshCult.StartCandidates[player] = ev.Profiles[player.UserId]; - } - - DoCultistStart(fleshCult); - - fleshCult.SelectionStatus = FleshCultRuleComponent.SelectionState.ReadyToSelect; - } - } - - public List FindPotentialCultists(in Dictionary candidates, FleshCultRuleComponent component) - { - var list = new List(); - var pendingQuery = GetEntityQuery(); - - foreach (var player in candidates.Keys) - { - var mindId = player.Data.ContentData()?.Mind; - if (mindId == null || !TryComp(mindId, out var mind)) - { - continue; - } - - if (_roleSystem.MindIsAntagonist(mindId.Value)) - { - continue; - } - - // Role prevents antag. - if (!_jobs.CanBeAntag(player)) - { - continue; - } - - if (TryComp(mind.OwnedEntity, out var appearanceComponent)) - { - if (!component.SpeciesWhitelist.Contains(appearanceComponent.Species)) - continue; - } - - // Latejoin - if (player.AttachedEntity != null && pendingQuery.HasComponent(player.AttachedEntity.Value)) - continue; - - list.Add(player); - } - - var prefList = new List(); - - _prototypeManager.Index(component.FleshCultistLeaderMindRolePrototypeId) - .TryGetComponent(out var roleComponent, _componentFactory); - foreach (var player in list) - { - var profile = candidates[player]; - if (profile.AntagPreferences.Contains(roleComponent!.AntagPrototype!.Value)) - { - prefList.Add(player); - } - } - if (prefList.Count == 0) - { - _sawmill.Info("Insufficient preferred traitors, picking at random."); - prefList = list; - } - return prefList; - } - - public List FindPotentialCultistsLeader(in Dictionary candidates, FleshCultRuleComponent component) - { - var list = new List(); - var pendingQuery = GetEntityQuery(); - - foreach (var player in candidates.Keys) - { - var mindId = player.Data.ContentData()?.Mind; - if (mindId == null || !TryComp(mindId, out var mind)) - { - continue; - } - - if (_roleSystem.MindIsAntagonist(mindId.Value) || !_jobs.CanBeAntag(player)) - { - continue; - } - - // Role prevents antag. - if (!_jobs.CanBeAntag(player)) - { - continue; - } - - if (TryComp(mind.OwnedEntity, out var appearanceComponent)) - { - if (!component.SpeciesWhitelist.Contains(appearanceComponent.Species)) - continue; - } - - // Latejoin - if (player.AttachedEntity != null && pendingQuery.HasComponent(player.AttachedEntity.Value)) - continue; - - list.Add(player); - } - - var prefList = new List(); - _prototypeManager.Index(component.FleshCultistLeaderMindRolePrototypeId) - .TryGetComponent(out var roleComponent, _componentFactory); - - foreach (var player in list) - { - var profile = candidates[player]; - - if (profile.AntagPreferences.Contains(roleComponent!.AntagPrototype!.Value)) - { - prefList.Add(player); - } - } - if (prefList.Count == 0) - { - _sawmill.Info("Insufficient preferred traitors, picking at random."); - prefList = list; - } - return prefList; - } - - public List PickCultists(int cultistCount, List prefList) - { - cultistCount = Math.Max(0, cultistCount); - var results = new List(cultistCount); - if (prefList.Count == 0 || cultistCount == 0) - { - _sawmill.Info("Insufficient ready players to fill up with traitors, stopping the selection."); - return results; - } - - for (var i = 0; i < cultistCount; i++) - { - if (prefList.Count == 0) - { - break; - } - results.Add(_random.PickAndTake(prefList)); - _sawmill.Info("Selected a preferred traitor."); - } - return results; - } - - [ValidatePrototypeId] - public const string FleshChannel = "Flesh"; - - [ValidatePrototypeId] - public const string CreateFleshHeartObjective = "CreateFleshHeartObjective"; - - [ValidatePrototypeId] - public const string FleshCultistSurvivalObjective = "FleshCultistSurvivalObjective"; - - private bool BaseMakeCultist(ICommonSession traitor, FleshCultRuleComponent fleshCultRule, EntityUid mindId, MindComponent mind, EntProtoId role) - { - if (mind.OwnedEntity is not { } entity) - { - _sawmill.Error("Mind picked for traitor did not have an attached entity."); - return false; - } - - DebugTools.AssertNotNull(mind.OwnedEntity); - - if (_actorSystem.TryGetSessionById(traitor.Data.UserId, out var sess) && sess.AttachedEntity != null && sess.AttachedEntity.Value.IsValid()) - { - fleshCultRule.CultistsNames.Add(MetaData(sess.AttachedEntity!.Value).EntityName); - } - - if (!HasComp(mindId)) - { - _roleSystem.MindAddRole(mindId, role.Id); - } - - if (fleshCultRule.Cultists.All(z => z.mindId != mindId)) - { - fleshCultRule.Cultists.Add((mindId, mind)); - } - - _faction.RemoveFaction(entity, "NanoTrasen", false); - _faction.AddFaction(entity, "Flesh"); - - var storeComp = EnsureComp(mind.OwnedEntity.Value); - - EnsureComp(mind.OwnedEntity.Value); - var radio = EnsureComp(mind.OwnedEntity.Value); - radio.Channels.Add(FleshChannel); - var transmitter = EnsureComp(mind.OwnedEntity.Value); - transmitter.Channels.Add(FleshChannel); - - storeComp.Categories.Add("FleshCultistAbilities"); - storeComp.CurrencyWhitelist.Add("StolenMutationPoint"); - storeComp.BuySuccessSound = fleshCultRule.BuySuccesSound; - - EnsureComp(mind.OwnedEntity.Value); - - if (_prototypeManager.TryIndex(FleshChannel, out var fleshChannel)) - { - var hiveMind = EnsureComp(mind.OwnedEntity.Value); - hiveMind.Channel = FleshChannel; - hiveMind.Removable = false; - hiveMind.ChannelColor = fleshChannel.Color; - } - - _mindSystem.TryAddObjective(mindId, mind, CreateFleshHeartObjective); - _mindSystem.TryAddObjective(mindId, mind, FleshCultistSurvivalObjective); - - _audioSystem.PlayGlobal(fleshCultRule.AddedSound, Filter.SinglePlayer(traitor), false, AudioParams.Default); - return true; - } - - public bool MakeCultist(ICommonSession traitor) - { - var fleshCultRule = EntityQuery().FirstOrDefault(); - if (fleshCultRule == null) - { - //todo fuck me this shit is awful - GameTicker.StartGameRule("FleshCult", out var ruleEntity); - fleshCultRule = EntityManager.GetComponent(ruleEntity); - } - - var mindId = traitor.Data.ContentData()?.Mind; - if (mindId == null || !TryComp(mindId, out var mind)) - { - _sawmill.Info("Failed getting mind for picked cultist."); - return false; - } - - return BaseMakeCultist(traitor, fleshCultRule, mindId.Value, mind, fleshCultRule.FleshCultistMindRolePrototypeId); - } - - public bool MakeCultistLeader(ICommonSession traitor) - { - var fleshCultRule = EntityQuery().FirstOrDefault(); - if (fleshCultRule == null) - { - //todo fuck me this shit is awful - GameTicker.StartGameRule("FleshCult", out var ruleEntity); - fleshCultRule = EntityManager.GetComponent(ruleEntity); - } - - var mindId = traitor.Data.ContentData()?.Mind; - if (mindId == null || !TryComp(mindId, out var mind)) - { - _sawmill.Info("Failed getting mind for picked cultist."); - return false; - } - - return BaseMakeCultist(traitor, fleshCultRule, mindId.Value, mind, fleshCultRule.FleshCultistLeaderMindRolePrototypeId); - } - - private void HandleLatejoin(PlayerSpawnCompleteEvent ev) - { - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var fleshCult, out var gameRule)) - { - if (!GameTicker.IsGameRuleAdded(uid, gameRule)) - continue; - if (fleshCult.TotalCultists >= MaxCultists) - return; - if (!ev.LateJoin) - return; - - - _prototypeManager.Index(fleshCult.FleshCultistLeaderMindRolePrototypeId) - .TryGetComponent(out var roleComponent, _componentFactory); - if (!ev.Profile.AntagPreferences.Contains(roleComponent!.AntagPrototype!.Value)) - return; - - - if (ev.JobId == null || !_prototypeManager.TryIndex(ev.JobId, out var job)) - return; - - if (!job.CanBeAntag) - return; - - // Before the announcement is made, late-joiners are considered the same as players who readied. - if (fleshCult.SelectionStatus < FleshCultRuleComponent.SelectionState.SelectionMade) - { - fleshCult.StartCandidates[ev.Player] = ev.Profile; - return; - } - - // the nth player we adjust our probabilities around - int target = ((PlayersPerCultist * fleshCult.TotalCultists) + 1); - - float chance = (1f / PlayersPerCultist); - - // If we have too many traitors, divide by how many players below target for next traitor we are. - if (ev.JoinOrder < target) - { - chance /= (target - ev.JoinOrder); - } - else // Tick up towards 100% chance. - { - chance *= ((ev.JoinOrder + 1) - target); - } - - if (chance > 1) - chance = 1; - - // Now that we've calculated our chance, roll and make them a traitor if we roll under. - // You get one shot. - if (_random.Prob(chance)) - { - MakeCultist(ev.Player); - } - } - } - - protected override void AppendRoundEndText(EntityUid uid, FleshCultRuleComponent fleshCult, GameRuleComponent gameRule, - ref RoundEndTextAppendEvent ev) - { - - var result = Loc.GetString("flesh-cult-round-end-result", ("cultistsCount", - fleshCult.Cultists.Count)); - - if (fleshCult.WinType is FleshCultRuleComponent.WinTypes.FleshHeartFinal) - { - result += "\n" + Loc.GetString("flesh-cult-round-end-flesh-heart-succes"); - } - else - { - result += "\n" + Loc.GetString("flesh-cult-round-end-flesh-heart-fail"); - } - - // result += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", Codewords))) + "\n"; - - foreach (var (mindId, mind) in fleshCult.Cultists) - { - var name = mind.CharacterName; - _mindSystem.TryGetSession(mind, out var session); - var username = session?.Name; - - var objectives = mind.AllObjectives.ToArray(); - - var leader = ""; - if (_roleSystem.MindHasRole(mindId, out var cultist) && - Prototype(cultist.Value)?.ID == fleshCult.FleshCultistLeaderMindRolePrototypeId.Id) - { - leader = "-leader"; - } - - if (objectives.Length == 0) - { - if (username != null) - { - if (name == null) - { - result += "\n" + Loc.GetString($"flesh-cult-user-was-a-cultist{leader}", - ("user", username)); - } - else - { - result += "\n" + Loc.GetString($"flesh-cult-user-was-a-cultist{leader}-named", - ("user", username), ("name", name)); - } - } - else if (name != null) - result += "\n" + Loc.GetString($"flesh-cult-was-a-cultist{leader}-named", ("name", name)); - - continue; - } - - if (username != null) - { - if (name == null) - { - result += "\n" + Loc.GetString($"flesh-cult-user-was-a-cultist{leader}-with-objectives", - ("user", username)); - } - else - { - result += "\n" + Loc.GetString($"flesh-cult-user-was-a-cultist{leader}-with-objectives-named", - ("user", username), ("name", name)); - } - } - else if (name != null) - { - result += "\n" + Loc.GetString($"flesh-cult-was-a-cultist{leader}-with-objectives-named", - ("name", name)); - } - - foreach (var objectiveGroup in objectives.Select(x=>(Entity)(x, Comp(x))) - .GroupBy(o => o.Comp.LocIssuer)) - { - var hasTitle = false; - - foreach (var objective in objectiveGroup) - { - if(objective.Comp.HideFromTotal) - continue; - - var info = _objectivesSystem.GetInfo(objective, mindId); - if (info == null) - continue; - - if (!hasTitle) - { - result += "\n" + Loc.GetString($"preset-flesh-cult-objective-issuer-{objectiveGroup.Key}"); - hasTitle = true; - } - - - var objectiveTitle = info.Value.Title; - var progress = info.Value.Progress; - if (progress > 0.99f) - { - result += "\n- " + Loc.GetString( - "flesh-cult-objective-condition-success", - ("condition", objectiveTitle), - ("markupColor", "green") - ); - } - else - { - result += "\n- " + Loc.GetString( - "flesh-cult-objective-condition-fail", - ("condition", objectiveTitle), - ("progress", (int) (progress * 100)), - ("markupColor", "red") - ); - } - - } - } - } - result += "\n" + - "\n"; - - ev.AddLine(result); - } -} diff --git a/Content.Server/Backmen/Objectives/CreateFleshHeartCondition.cs b/Content.Server/Backmen/Objectives/CreateFleshHeartCondition.cs deleted file mode 100644 index eacf5cf5402..00000000000 --- a/Content.Server/Backmen/Objectives/CreateFleshHeartCondition.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Server.Backmen.Flesh; - -namespace Content.Server.Backmen.Objectives; - -[RegisterComponent] -public sealed partial class CreateFleshHeartConditionComponent : Component -{ - public bool IsFleshHeartFinale(FleshHeartComponent comp) - { - return comp.State == FleshHeartSystem.HeartStates.Disable; - } -} diff --git a/Content.Server/Backmen/Objectives/FleshCultistSurvivalCondition.cs b/Content.Server/Backmen/Objectives/FleshCultistSurvivalCondition.cs deleted file mode 100644 index 7bcf50bbd08..00000000000 --- a/Content.Server/Backmen/Objectives/FleshCultistSurvivalCondition.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Server.Backmen.Objectives; - -[RegisterComponent] -public sealed partial class FleshCultistSurvivalConditionComponent : Component -{ - -} diff --git a/Content.Shared/Backmen/CCVar/CCVars.cs b/Content.Shared/Backmen/CCVar/CCVars.cs index c712dde4b02..30756ca70d7 100644 --- a/Content.Shared/Backmen/CCVar/CCVars.cs +++ b/Content.Shared/Backmen/CCVar/CCVars.cs @@ -125,19 +125,6 @@ public static readonly CVarDef CVarDef.Create("shipwrecked.max_players", 15); /* - * FleshCult - */ - - public static readonly CVarDef FleshCultMinPlayers = - CVarDef.Create("fleshcult.min_players", 25, CVar.SERVERONLY); - - public static readonly CVarDef FleshCultMaxCultist = - CVarDef.Create("fleshcult.max_cultist", 6, CVar.SERVERONLY); - - public static readonly CVarDef FleshCultPlayersPerCultist = - CVarDef.Create("fleshcult.players_per_cultist", 7, CVar.SERVERONLY); - - /* * bloodsucker */ diff --git a/Content.Shared/Backmen/Flesh/FleshCultistComponent.cs b/Content.Shared/Backmen/Flesh/FleshCultistComponent.cs deleted file mode 100644 index 4b6fac317ab..00000000000 --- a/Content.Shared/Backmen/Flesh/FleshCultistComponent.cs +++ /dev/null @@ -1,126 +0,0 @@ -using Content.Shared.Antag; -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Content.Shared.Maps; -using Content.Shared.StatusIcon; -using Content.Shared.Store; -using Robust.Shared.Audio; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.Backmen.Flesh; - -[RegisterComponent, NetworkedComponent] -public sealed partial class FleshCultistComponent : Component -{ - [ViewVariables(VVAccess.ReadWrite)] public FixedPoint2 Hunger = 140; - - [ViewVariables(VVAccess.ReadWrite), DataField("hungerСonsumption")] - public FixedPoint2 HungerСonsumption = -0.07; // 80 hunger in 30 minutes - - [ViewVariables(VVAccess.ReadWrite), DataField("maxHunger")] - public FixedPoint2 MaxHunger = 200; - - [ViewVariables(VVAccess.ReadWrite), DataField("startingEvolutionPoint")] - public FixedPoint2 StartingEvolutionPoint = 30; - - [ViewVariables(VVAccess.ReadWrite), - DataField("bulletAcidSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string BulletAcidSpawnId = "BulletSplashAcid"; - - [ViewVariables(VVAccess.ReadWrite), DataField("speciesWhitelist")] - public List SpeciesWhitelist = new() - { - "Human", - "Reptilian", - "Dwarf", - "Oni", - "Vox", - "HumanoidFoxes", - "Shadowkin", - "Harpy", - }; - - [DataField("adrenalinReagents")] public List AdrenalinReagents = new() - { - new ReagentQuantity("Ephedrine", 10, null), - }; - - [DataField("healDevourReagents")] public List HealDevourReagents = new() - { - new ReagentQuantity("Omnizine", 15, null), - new ReagentQuantity("DexalinPlus", 5, null), - new ReagentQuantity("Iron", 5, null) - }; - - [DataField("healBloodAbsorbReagents")] public List HealBloodAbsorbReagents = new() - { - new ReagentQuantity("Omnizine", 1, null), - new ReagentQuantity("DexalinPlus", 0.50, null), - new ReagentQuantity("Iron", 0.50, null) - }; - - [DataField("bloodAbsorbSound")] - public SoundSpecifier BloodAbsorbSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg"); - - [DataField("devourTime")] public float DevourTime = 10f; - - [DataField("devourSound")] - public SoundSpecifier DevourSound = new SoundPathSpecifier("/Audio/Animals/Flesh/devour_flesh_cultist.ogg"); - - [DataField("stolenCurrencyPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string StolenCurrencyPrototype = "StolenMutationPoint"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("fleshBladeSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string BladeSpawnId = "FleshBlade"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("fleshFistSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string FistSpawnId = "FleshFist"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("clawSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ClawSpawnId = "FleshClaw"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("spikeHandGunSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string SpikeHandGunSpawnId = "FleshSpikeHandGun"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("armorSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string ArmorSpawnId = "ClothingOuterArmorFlesh"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("spiderLegsSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string SpiderLegsSpawnId = "ClothingFleshSpiderLegs"; - - [ViewVariables(VVAccess.ReadWrite), - DataField("fleshMutationMobId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string FleshMutationMobId = "MobFleshAbom"; - - [ViewVariables(VVAccess.ReadWrite), DataField("soundMutation")] - public SoundSpecifier SoundMutation = new SoundPathSpecifier("/Audio/Animals/Flesh/flesh_cultist_mutation.ogg"); - - [DataField("fleshHeartId", customTypeSerializer: typeof(PrototypeIdSerializer)), - ViewVariables(VVAccess.ReadWrite)] - public string FleshHeartId = "FleshHeart"; - - [ViewVariables(VVAccess.ReadWrite), DataField("soundThrowWorm")] - public SoundSpecifier? SoundThrowWorm = new SoundPathSpecifier("/Audio/Animals/Flesh/throw_worm.ogg"); - - [ViewVariables(VVAccess.ReadWrite), - DataField("wormMobSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string WormMobSpawnId = "MobFleshWorm"; - - [ViewVariables] public float Accumulator = 0; - - [ViewVariables] public float AccumulatorStarveNotify = 0; - - - public EntityUid? FleshCultistShop; - public EntityUid? FleshCultistDevour; - public EntityUid? FleshCultistAbsorbBloodPool; -} diff --git a/Content.Shared/Backmen/Flesh/FleshHeartVisuals.cs b/Content.Shared/Backmen/Flesh/FleshHeartVisuals.cs deleted file mode 100644 index fd25d9695a3..00000000000 --- a/Content.Shared/Backmen/Flesh/FleshHeartVisuals.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Backmen.Flesh; - -[Serializable, NetSerializable] -public enum FleshHeartVisuals : byte -{ - State -} - -[Serializable, NetSerializable] -public enum FleshHeartStatus -{ - Active, - Disable -} - -[Serializable, NetSerializable] -public enum FleshHeartLayers : byte -{ - Base -} diff --git a/Content.Shared/Backmen/Flesh/InfectedFleshParasiteEvent.cs b/Content.Shared/Backmen/Flesh/InfectedFleshParasiteEvent.cs deleted file mode 100644 index 6440f29915a..00000000000 --- a/Content.Shared/Backmen/Flesh/InfectedFleshParasiteEvent.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Content.Shared.Actions; - -namespace Content.Shared.Backmen.Flesh; - -public readonly struct EntityInfectedFleshParasiteEvent -{ - public readonly EntityUid Target; - - public EntityInfectedFleshParasiteEvent(EntityUid target) - { - Target = target; - } -}; - -public sealed partial class ZombifySelfActionEvent : InstantActionEvent { }; diff --git a/Content.Shared/Backmen/Flesh/SharedFleshCultist.cs b/Content.Shared/Backmen/Flesh/SharedFleshCultist.cs deleted file mode 100644 index 79ecb4d1719..00000000000 --- a/Content.Shared/Backmen/Flesh/SharedFleshCultist.cs +++ /dev/null @@ -1,140 +0,0 @@ -using Content.Shared.Actions; -using Content.Shared.DoAfter; -using Robust.Shared.Serialization; - -namespace Content.Shared.Backmen.Flesh; - -public sealed partial class FleshPudgeThrowWormActionEvent : WorldTargetActionEvent -{ - -} - -public sealed partial class FleshPudgeAcidSpitActionEvent : WorldTargetActionEvent -{ - -} - -public sealed partial class FleshPudgeAbsorbBloodPoolActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshWormJumpActionEvent : WorldTargetActionEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistDevourDoAfterEvent : SimpleDoAfterEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistInfectionDoAfterEvent : SimpleDoAfterEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistInsulatedImmunityMutationEvent : SimpleDoAfterEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistPressureImmunityMutationEvent : SimpleDoAfterEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistFlashImmunityMutationEvent : SimpleDoAfterEvent -{ - -} - -[Serializable, NetSerializable] -public sealed partial class FleshCultistColdTempImmunityMutationEvent : SimpleDoAfterEvent -{ - -} - -public sealed partial class FleshCultistAcidSpitActionEvent : WorldTargetActionEvent -{ - -} - -public sealed partial class FleshCultistShopActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistBladeActionEvent : InstantActionEvent -{ - -} - - -public sealed partial class FleshCultistClawActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistFistActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistSpikeHandGunActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistArmorActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistSpiderLegsActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistBreakCuffsActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistAdrenalinActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistCreateFleshHeartActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistThrowWormActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistAbsorbBloodPoolActionEvent : InstantActionEvent -{ - -} - -public sealed partial class FleshCultistDevourActionEvent : EntityTargetActionEvent -{ - -} - -public sealed partial class FleshCultistInfectionActionEvent : EntityTargetActionEvent -{ - -} - - - diff --git a/Content.Shared/Backmen/Flesh/SharedFleshHeartComponent.cs b/Content.Shared/Backmen/Flesh/SharedFleshHeartComponent.cs deleted file mode 100644 index b0c57597af4..00000000000 --- a/Content.Shared/Backmen/Flesh/SharedFleshHeartComponent.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Serialization; - -namespace Content.Shared.Backmen.Flesh; - -[NetworkedComponent()] -[Virtual] -public partial class SharedFleshHeartComponent : Component -{ - /// - /// The visual state that is set when the emitter doesn't have enough power. - /// - [DataField("finalState")] - public string? FinalState = "underpowered"; -} diff --git a/Resources/Locale/en-US/actions/actions/fleshcultist.ftl b/Resources/Locale/en-US/actions/actions/fleshcultist.ftl deleted file mode 100644 index 3b8790b5ec4..00000000000 --- a/Resources/Locale/en-US/actions/actions/fleshcultist.ftl +++ /dev/null @@ -1,65 +0,0 @@ -flesh-cultist-transform-hand-in-blade = The hand of { $Entity } transforms into a blade of flesh. -flesh-cultist-transform-hand-in-claw = The hand of { $Entity } transforms into a claw of flesh. -flesh-cultist-transform-hand-in-spike-gun = The hand of { $Entity } transforms into a spike gun made of flesh. -flesh-cultist-transform-blade-in-hand = The blade of flesh on { $Entity } transforms back into a hand. -flesh-cultist-transform-claw-in-hand = The claw of flesh on { $Entity } transforms back into a hand. -flesh-cultist-transform-spike-gun-in-hand = The spike gun made of flesh on { $Entity } transforms back into a hand. -flesh-cultist-transform-armor-on = { $Entity } is covered in armor made of flesh. -flesh-cultist-transform-armor-off = { $Entity } removes their flesh armor. -flesh-cultist-transform-spider-legs-on = The legs of { $Entity } transform into spider-like limbs made of flesh. -flesh-cultist-transform-spider-legs-off = The spider-like limbs on { $Entity } transform back into human legs. -flesh-cultist-transform-user-hand-blocked = This hand is occupied with another modification. -flesh-cultist-transform-armor-blocked = You cannot use spider legs and armor simultaneously. -flesh-cultist-transform-spider-legs-blocked = You cannot use armor with spider legs. -flesh-cultist-infection-target-critical = You cannot infect a dying creature. -flesh-cultist-infection-target-dead = You cannot infect a dead creature. -flesh-cultist-infection-target-invalid = You cannot infect this creature. -flesh-cultist-infected-user = You feel something developing inside you. -flesh-cultist-devout-target-not-have-flesh = You cannot consume beings that are not made of flesh. -flesh-cultist-devout-target-alive = You cannot consume living beings. -flesh-cultist-devout-target-invalid = You cannot consume this. -flesh-cultist-devout-not-hungry = The parasite is not hungry enough to consume this. -flesh-cultist-hungry = The parasite is hungry. -flesh-cultist-equipped-outer-clothing-blocked = You cannot wear this while having spider legs. -flesh-cultist-cant-spawn-flesh-heart = It is impossible to create a flesh heart here. -flesh-cultist-cant-spawn-flesh-heart-here = {$Entity} need to be removed, there is not enough space to spawn a flesh heart. -flesh-cultist-cant-absorb-puddle = There are no clean blood puddles nearby. -flesh-cultist-absorb-puddle = { $Entity } absorbs a blood puddle. -flesh-cultist-devour-target = { $Entity } devours { $Target }. -flesh-cultist-not-find-puddles = There are no puddles nearby. -flesh-cultist-throw-worm = You have vomited a worm. -flesh-cultist-throw-worm-others = { $Entity } has vomited a worm. - -flesh-cultist-blade-evolution-name = Skill: Flesh Blade -flesh-cultist-blade-evolution-desc = Gain the ability to transform your hand into a deadly blade made of flesh and bones. -flesh-cultist-claw-evolution-name = Skill: Flesh Claw -flesh-cultist-claw-evolution-desc = Gain the ability to transform your hand into a functional claw made of flesh and bones. -flesh-cultist-fist-evolution-name = Skill: Flesh Fist -flesh-cultist-fist-evolution-desc = Gain the ability to transform your hand into a massive flesh fist that can easily break through any structures. -flesh-cultist-spike-gun-evolution-name = Spike Gun Hand -flesh-cultist-spike-gun-evolution-desc = Transform the active hand into a deadly spike gun made of flesh. -flesh-cultist-armor-evolution-name = Skill: Flesh Armor -flesh-cultist-armor-evolution-desc = Gain the ability to cloak yourself in armor made of flesh and bones. -flesh-cultist-spider-legs-evolution-name = Skill: Spider Form -flesh-cultist-spider-legs-evolution-desc = Gain the ability to transform a part of your body into a spider-like form, providing moderate protection and a significant increase in speed. -flesh-cultist-break-cuffs-evolution-name = Skill: Break Cuffs -flesh-cultist-break-cuffs-evolution-desc = Gain the ability to free yourself from handcuffs or a straightjacket. -flesh-cultist-adrenaline-evolution-name = Skill: Adrenaline Synthesis -flesh-cultist-adrenaline-evolution-desc = Gain the ability to receive a dose of adrenaline to increase speed and stun resistance. -flesh-cultist-throw-worm-evolution-name = Skill: Vomit Worm -flesh-cultist-throw-worm-evolution-desc = Gain the ability to vomit flesh worms that can be thrown at enemy faces. -flesh-cultist-acid-spit-evolution-name = Skill: Acid Spit -flesh-cultist-acid-spit-evolution-desc = Gain the ability to spit acid at your enemies. -flesh-cultist-create-flesh-heart-evolution-name = Skill: Create Flesh Heart -flesh-cultist-create-flesh-heart-evolution-desc = Gain the ability to create a flesh heart. - Creating and awakening it is your key objective on the station. To awaken it, you will need three bodies of evolved flesh creatures. - Be prepared to defend it against any threats after activation. - -flesh-cultist-insulated-immunity-evolution-name = Evolution: Insulated Immunity -flesh-cultist-insulated-immunity-evolution-desc = You will be able to work with electricity without fear of being harmed by voltage. -flesh-cultist-pressure-immunity-evolution-name = Evolution: Pressure Immunity -flesh-cultist-pressure-immunity-evolution-desc = You will no longer be threatened by low-pressure environments. -flesh-cultist-cold-teml-immunity-evolution-name = Evolution: Thermo-Synthesis -flesh-cultist-cold-teml-immunity-evolution-desc = You will be able to maintain a stable body temperature in cold space conditions. -flesh-cultist-flash-immunity-evolution-name = Evolution: Eye Protection -flesh-cultist-flash-immunity-evolution-desc = Bright flashes will no longer blind you. diff --git a/Resources/Locale/ru-RU/backmen/actions/flesh.ftl b/Resources/Locale/ru-RU/backmen/actions/flesh.ftl deleted file mode 100644 index bb94526ff16..00000000000 --- a/Resources/Locale/ru-RU/backmen/actions/flesh.ftl +++ /dev/null @@ -1,32 +0,0 @@ -flesh-pudge-throw-worm-name = Рвотный червь -flesh-pudge-throw-worm-popup = Извергает червя -flesh-pudge-throw-worm-eat-face-user = Червь пожирает твое лицо! -flesh-pudge-throw-worm-bite-user = Червь укусил тебя за руку! -flesh-pudge-throw-worm-try-unequip = Вы не можете удалить червя со своего лица. -flesh-pudge-throw-worm-eat-face-others = Червь ест { CAPITALIZE($entity) } твое лицо! -flesh-pudge-throw-worm-hit-others = Червь вцепился в { CAPITALIZE($entity) } его лицо! -flesh-pudge-throw-worm-hit-mob = Вы ухватились за { CAPITALIZE($entity) } его лицо! -flesh-pudge-throw-worm-hit-user = Червь вцепился тебе в лицо! -flesh-pudge-throw-worm-desc = Вырвите червя из своей плоти и держите его в руке, чтобы швырнуть во врагов. -flesh-pudge-transform-user = Вы превращаетесь в { CAPITALIZE($EntityTransform) }. -flesh-pudge-transform-others = { CAPITALIZE($Entity) } превращается в { CAPITALIZE($EntityTransform) }. -flesh-pudge-transform-begin-user = Вы начинаете преображаться. -flesh-pudge-transform-begin-others = { CAPITALIZE($Entity) } начинает трансформироваться. -flesh-mob-cant-atack-flesh-heart = Вы не можете атаковать плотское сердце. -flesh-mob-cant-atack-flesh-mob = Вы не можете атаковать мобов из плоти. -flesh-mob-cant-atack-flesh-cultist = Вы не можете нападать на культистов плоти. -flesh-worm-jump-name = Прыгать -flesh-worm-jump-desc = Позволяет вам совершить прыжок в выбранном направлении. Если вы ударите гуманоида без маски, вы вцепитесь ему в лицо. -mob-flesh-ghost-role-rules = Не нападайте на культистов плоти, не разрушайте плотины, серверы, консоли и так далее. Не приводите к нарушениям. -mob-flesh-abom-ghost-role-name = Мерзость плоти -mob-flesh-abom-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. -mob-flesh-pudge-ghost-role-name = Мясной пудинг -mob-flesh-pudge-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. -mob-flesh-spider-ghost-role-name = Паук из плоти -mob-flesh-spider-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. -mob-flesh-ball-ghost-role-name = Шарик из плоти -mob-flesh-ball-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. -mob-flesh-bat-ghost-role-name = Летучая мышь из плоти -mob-flesh-bat-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. -mob-flesh-worm-ghost-role-name = Мясной червь -mob-flesh-worm-ghost-role-decs = Ты - разумная плоть. Сотрудничайте с другими существами из плоти, чтобы взять станцию под контроль. diff --git a/Resources/Locale/ru-RU/backmen/actions/flesh_cultist.ftl b/Resources/Locale/ru-RU/backmen/actions/flesh_cultist.ftl deleted file mode 100644 index f7003efc19a..00000000000 --- a/Resources/Locale/ru-RU/backmen/actions/flesh_cultist.ftl +++ /dev/null @@ -1,36 +0,0 @@ -ent-FleshCultistShop = Магазин эволюции - .desc = Здесь вы можете приобрести активные навыки и пассивные улучшения. -ent-FleshCultistBlade = Меч из плоти - .desc = Превратите свою активную руку в меч сделанный из плоти и костей. -ent-FleshCultistBreakCuffs = Вырватся из оков - .desc = Вырвитесь из наручников или смирительной рубашки. -ent-FleshCultistAdrenalin = Синтез адреналина - .desc = Паразит синтезирует и вводит в вас дозу адреналина, повышая твою скорость и выносливость. -ent-FleshCultistCreateFleshHeart = Создать сердце плоти - .desc = Создает перед вами сердце плоти. Это ваша ключевая цель на станции. Чтобы активировать его, вам нужно использовать 3 тела эволюционировавших существ из плоти. После активации будьте готовы защищать его от сотрудников службы безопасности. -ent-FleshCultistThrowWorm = Создать червя - .desc = Создаёт червя из плоти чтобы кидать его в лица противников. -ent-FleshCultistAcidSpit = Кислотный плевок - .desc = Разлейте кислоту на своих противников. -ent-FleshCultistClaw = Коготь из плоти - .desc = Превратите свою активную руку в коготь сделанный из плоти и костей. -ent-FleshCultistFist = Кулак из плоти - .desc = Превратите свою активную руку в массивный кулак из плоти который с лёгкостью сломает любую структуру. -ent-FleshCultistSpikeGun = Пистолет с шипами - .desc = Превратите свою активную руку в пистолет стреляющий шипами сделанный из плоти. -ent-FleshCultistArmor = Броня из плоти - .desc = Закрывает вас бронёй из плоти и костей. -ent-FleshCultistSpiderlegs = Форма паука. - .desc = Transforms a part of your body into a spider-like form, providing moderate protection and a significant increase in speed. Превращает часть вашего тела в форму паука, обеспечивая умеренную защиту и существенное увеличение скорости. -ent-FleshCultistAbsorbBloodPool = Поглащение крови - .desc = Позволяет вам поглащать кровь на полу или пуддинги из плоти чтобы вылечится. -ent-FleshCultistDevour = Пожирание трупов - .desc = Вы можете пожирать любое существо из плоти, чтобы получить очки эволюции и залечить раны. -ent-ActionWormJump = Прыжок червя - .desc = Прыгнуть на указываемую цель -ent-ActionThrowWorm = Прыжок червя - .desc = Прыгнуть на указываемую цель -ent-ActionAcidSpit = Кислотный плевок - .desc = Разлейте кислоту на своих противников. -ent-ActionAbsorbBloodPool = Поглащение крови - .desc = Позволяет вам поглащать кровь на полу или пуддинги из плоти чтобы вылечится. diff --git a/Resources/Locale/ru-RU/backmen/actions/fleshcultist.ftl b/Resources/Locale/ru-RU/backmen/actions/fleshcultist.ftl deleted file mode 100644 index dd927c0fb3e..00000000000 --- a/Resources/Locale/ru-RU/backmen/actions/fleshcultist.ftl +++ /dev/null @@ -1,67 +0,0 @@ -flesh-cultist-transform-hand-in-blade = Рука { $Entity } превращается в лезвие из плоти. -flesh-cultist-transform-hand-in-claw = Рука { $Entity } превращается в клешню из плоти. -flesh-cultist-transform-hand-in-spike-gun = Рука { $Entity } превращается в шипастый пистолет, сделанный из плоти. -flesh-cultist-transform-blade-in-hand = Кусочек плоти на { $Entity } превращается обратно в руку. -flesh-cultist-transform-claw-in-hand = Клешня из плоти на { $Entity } превращается обратно в руку. -flesh-cultist-transform-spike-gun-in-hand = Шипастый пистолет, сделанный из плоти на { $Entity }, снова превращается в руку. -flesh-cultist-transform-armor-on = { $Entity } покрыта броней из плоти. -flesh-cultist-transform-armor-off = { $Entity } снимает с них телесную броню. -flesh-cultist-transform-spider-legs-on = Ноги { $Entity } превращаются в паукообразные конечности, сделанные из плоти. -flesh-cultist-transform-spider-legs-off = Паукообразные конечности на { $Entity } превращаются обратно в человеческие ноги. -flesh-cultist-transform-user-hand-blocked = Эта рука занята другой модификацией. -flesh-cultist-transform-armor-blocked = Вы не можете использовать паучьи лапы и броню одновременно. -flesh-cultist-transform-spider-legs-blocked = Вы не можете использовать броню с паучьими лапами. -flesh-cultist-infection-target-critical = Вы не можете заразить умирающее существо. -flesh-cultist-infection-target-dead = Вы не можете заразить мертвое существо. -flesh-cultist-infection-target-invalid = Вы не можете заразить это существо. -flesh-cultist-infected-user = Вы чувствуете, как внутри вас что-то развивается. -flesh-cultist-devout-target-not-have-flesh = Вы не можете потреблять существ, которые не сделаны из плоти. -flesh-cultist-devout-target-alive = Вы не можете потреблять живые существа. -flesh-cultist-devout-target-invalid = Вы не можете это употреблять. -flesh-cultist-devout-not-hungry = Паразит недостаточно голоден, чтобы съесть это. -flesh-cultist-hungry = Паразит голоден. -flesh-cultist-equipped-outer-clothing-blocked = Вы не можете носить это, имея паучьи ножки. -flesh-cultist-cant-spawn-flesh-heart = Невозможно создать сердце из плоти и крови здесь. -flesh-cultist-cant-spawn-flesh-heart-here = Вам мешает {$Entity}, чтобы создать сердце из плоти. -flesh-cultist-cant-absorb-puddle = Поблизости нет чистых луж крови. -flesh-cultist-absorb-puddle = { $Entity } впитывает лужу крови. -flesh-cultist-devour-target = { $Entity } пожирает { $Target }. -flesh-cultist-not-find-puddles = Поблизости нет луж. -flesh-cultist-throw-worm = Вас вырвало червяком. -flesh-cultist-throw-worm-others = { $Entity } из вылез червь. -flesh-cultist-blade-evolution-name = Способность: { ent-FleshCultistBlade } -flesh-cultist-blade-evolution-desc = Получите способность превращать свою руку в смертоносный клинок из плоти и костей. -flesh-cultist-claw-evolution-name = Способность: { ent-FleshCultistClaw } -flesh-cultist-claw-evolution-desc = Получите возможность превратить свою руку в функциональную клешню из плоти и костей. -flesh-cultist-fist-evolution-name = Способность: { ent-FleshCultistFist } -flesh-cultist-fist-evolution-desc = Получите способность превращать свою руку в массивный кулак из плоти, который может легко проламывать любые конструкции. -flesh-cultist-spike-gun-evolution-name = Способность: { ent-FleshCultistSpikeGun } -flesh-cultist-spike-gun-evolution-desc = Превратите активную руку в смертоносный пистолет с шипами, сделанный из плоти. -flesh-cultist-armor-evolution-name = Способность: { ent-FleshCultistArmor } -flesh-cultist-armor-evolution-desc = Получите возможность облачаться в доспехи из плоти и костей. -flesh-cultist-spider-legs-evolution-name = Способность: { ent-FleshCultistSpiderlegs } -flesh-cultist-spider-legs-evolution-desc = Получите способность трансформировать часть своего тела в паукообразную форму, обеспечивая умеренную защиту и значительное увеличение скорости. -flesh-cultist-break-cuffs-evolution-name = Способность: { ent-FleshCultistBreakCuffs } -flesh-cultist-break-cuffs-evolution-desc = Получите возможность освободиться от наручников или смирительной рубашки. -flesh-cultist-adrenaline-evolution-name = Способность: { ent-FleshCultistAdrenalin } -flesh-cultist-adrenaline-evolution-desc = Получите возможность получать дозу адреналина для увеличения скорости и устойчивости к оглушению. -flesh-cultist-throw-worm-evolution-name = Способность: { ent-FleshCultistThrowWorm } -flesh-cultist-throw-worm-evolution-desc = Получите способность извергать мясных червей, которыми можно швырять в лица врагов. -flesh-cultist-acid-spit-evolution-name = Способность: { ent-FleshCultistAcidSpit } -flesh-cultist-acid-spit-evolution-desc = Получите способность плеваться кислотой в своих врагов. -flesh-cultist-create-flesh-heart-evolution-name = Способность: { ent-FleshCultistCreateFleshHeart } -flesh-cultist-create-flesh-heart-evolution-desc = - Получите способность создавать сердце из плоти. - Создавать и пробуждать его - ваша ключевая задача на станции. - Чтобы пробудить его, вам понадобятся три тела эволюционировавших существ из плоти. - Будьте готовы защитить его от любых угроз после активации. -flesh-cultist-insulated-immunity-evolution-name = Эволюция: Изоляция -flesh-cultist-insulated-immunity-evolution-desc = Вы сможете работать с электричеством, не опасаясь пострадать от напряжения. -flesh-cultist-pressure-immunity-evolution-name = Эволюция: Давление -flesh-cultist-pressure-immunity-evolution-desc = Вам больше не будет угрожать среда с низким давлением. -flesh-cultist-cold-teml-immunity-evolution-name = Эволюция: Термо-регуляция -flesh-cultist-cold-teml-immunity-evolution-desc = Вы сможете поддерживать стабильную температуру тела в холодных космических условиях. -flesh-cultist-flash-immunity-evolution-name = Эволюция: Защита глаз -flesh-cultist-flash-immunity-evolution-desc = Яркие вспышки больше не будут ослеплять вас. -flesh-cultist-hunger-name = голод паразита -flesh-cultist-hunger-desc = Когда паразит проголодается - кто знает что с вами будет... diff --git a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-flesh-cult-and-traitor.ftl b/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-flesh-cult-and-traitor.ftl deleted file mode 100644 index ff8249e3a28..00000000000 --- a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-flesh-cult-and-traitor.ftl +++ /dev/null @@ -1,2 +0,0 @@ -flesh-cult-and-traitor-title = Культ плоти и Предатели -flesh-cult-and-traitor-description = На станции одновременно действует культ плоти и предатели. diff --git a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-fleshcult.ftl b/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-fleshcult.ftl deleted file mode 100644 index 6d5ba2c56c2..00000000000 --- a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-fleshcult.ftl +++ /dev/null @@ -1,43 +0,0 @@ -flesh-cult = Культ плоти -flesh-cult-round-end-result = - { $cultistsCount -> - [one] Был один культист плоти. - *[other] Было { $cultistsCount } культистов плоти. - } -flesh-cult-round-end-cultist-live-amount-none = [color=green]All cultists have been eliminated![/color] -flesh-cult-round-end-cultist-live-amount-low = [color=green]Almost all cultists have been eliminated.[/color] -flesh-cult-round-end-flesh-heart-succes = [color=green]Станция превратилась в царство плоти![/color] -flesh-cult-round-end-flesh-heart-fail = [color=red]Культ Плоти не смог достичь своей цели![/color] -flesh-cult-user-was-a-cultist = [color=gray]{ $user }[/color] был культистом плоти. -flesh-cult-user-was-a-traitor-named = [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) был культистом плоти. -flesh-cult-was-a-traitor-named = [color=White]{ $name }[/color] был культистом плоти. -flesh-cult-user-was-a-cultist-leader = [color=gray]{ $user }[/color] был лидером Культа Плоти. -flesh-cult-user-was-a-cultist-leader-named = [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) был лидером Культа Плоти. -flesh-cult-was-a-cultist-leader-named = [color=White]{ $name }[/color] был лидером Культа Плоти. -flesh-cult-user-was-a-cultist-with-objectives = [color=gray]{ $user }[/color] был культистом плоти со следующими целями: -flesh-cult-user-was-a-cultist-with-objectives-named = [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) был культистом плоти со следующими целями: -flesh-cult-was-a-cultist-with-objectives-named = [color=White]{ $name }[/color] был культистом плоти со следующими целями: -flesh-cult-user-was-a-cultist-leader-with-objectives = [color=gray]{ $user }[/color] был лидером Культа Плоти со следующими целями: -flesh-cult-user-was-a-cultist-leader-with-objectives-named = [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) был лидером Культа Плоти со следующими целями: -flesh-cult-was-a-cultist-leader-with-objectives-named = [color=White]{ $name }[/color] был лидером Культа Плоти со следующими целями: -preset-flesh-cult-objective-issuer-flesh-cult = [color=#e0106a]Культ плоти[/color] -objective-issuer-flesh-cult = [color=crimson]Культ плоти[/color] -flesh-cult-objective-condition-success = { $condition } | [color={ $markupColor }]Успех![/color] -flesh-cult-objective-condition-fail = { $condition } | [color={ $markupColor }]Провал![/color] ({ $progress }%) -flesh-cult-title = Культ плоти -flesh-cult-description = На станции возник культ, стремящийся взять под контроль. -flesh-cult-not-enough-ready-players = Недостаточное количество игроков готовы играть! Из необходимых игроков { $minimumPlayers } готовы только { $readyPlayersCount }. -flesh-cult-no-one-ready = Ни один игрок не готов! Не удалось запустить игровой режим Flesh Cult. -flesh-cult-role-greeting = - Вы являетесь членом Культа Плоти. - Ваши цели и коллеги-культисты указаны в меню персонажа. - Пожирайте существ из плоти, чтобы получить новые способности, оставаться в тени и готовиться к прибытию Плоти на станцию. -flesh-cult-role-cult-members = - Ваши коллеги-культисты: - { $cultMembers } - Не позволяйте им умереть напрасно. -flesh-cult-role-greeting-leader = - Вы лидер Культа Плоти. - Ваши цели и коллеги-культисты указаны в меню персонажа. - Пожирайте существ из плоти, чтобы получить новые способности, оставаться в тени и готовиться к прибытию Плоти на станцию. - Следите за тем, чтобы ни один из членов вашего культа не погиб напрасно. diff --git a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-mix.ftl b/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-mix.ftl index bcc24c80d35..873fa1d0ae4 100644 --- a/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-mix.ftl +++ b/Resources/Locale/ru-RU/backmen/game-ticking/game-presets/preset-mix.ftl @@ -4,12 +4,6 @@ pirates-traitor-description = На станции пираты и агенты nukeops-pirates-title = Пираты и ядерные оперативники nukeops-pirates-description = На станции пираты и ядерные оперативники, постарайтесь выжить и завершить смену -pirates-fleshcult-title = Пираты и культ плоти -pirates-fleshcult-description = На станции пираты и культ плоти, постарайтесь выжить и завершить смену - -nukeops-fleshcult-title = Ядерные оперативники и культ плоти -nukeops-fleshcult-description = На станции ядерные оперативники и культ плоти, постарайтесь выжить и завершить смену - rev-traitor-title = Революция и агенты rev-traitor-description = На станции революция и агенты синдиката, постарайтесь выжить и завершить смену @@ -31,12 +25,6 @@ zombie-pirates-description = На станции пираты и зомби, п pirates-traitor-nukeops-title = Пираты, агенты и ядерные оперативники pirates-traitor-nukeops-description = На станции пираты, агенты синдиката и ядерные оперативники, постарайтесь выжить и завершить смену -pirates-traitor-fleshcult-title = Пираты, агенты и культ плоти -pirates-traitor-fleshcult-description = На станции пираты, агенты синдиката и культ плоти, постарайтесь выжить и завершить смену - -nukeops-fleshcult-traitor-title = Ядерные оперативники, культ плоти и агенты -nukeops-fleshcult-traitor-description = На станции ядерные оперативники, культ плоти и агенты синдиката, постарайтесь выжить и завершить смену - survival-nukeops-title = Выживание с ядерными оперативниками survival-nukeops-description = Постарайтесь выжить в сущем аду diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/gamerules/roundstart.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/gamerules/roundstart.ftl index 3f00c82b692..e4cdb056461 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/gamerules/roundstart.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/gamerules/roundstart.ftl @@ -1,4 +1,2 @@ -ent-FleshCult = { ent-BaseGameRule } - .desc = { ent-BaseGameRule.desc } ent-Shipwrecked = { ent-BaseGameRule } .desc = { ent-BaseGameRule.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/npcs/flesh_cult.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/npcs/flesh_cult.ftl deleted file mode 100644 index a48e26c58a3..00000000000 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/npcs/flesh_cult.ftl +++ /dev/null @@ -1,14 +0,0 @@ -ent-BaseMobFleshCult = извращенная плоть - .desc = Неуклюжая масса плоти, оживленная аномальной энергией. -ent-MobFleshSpider = паук из плоти - .desc = { ent-BaseMobFleshCult.desc } -ent-MobFleshPudge = мясной толстяк - .desc = { ent-BaseMobFleshCult.desc } -ent-MobFleshAbom = мерзкая плоть - .desc = { ent-BaseMobFleshCult.desc } -ent-MobFleshBall = мясной шарик - .desc = { ent-BaseMobFleshCult.desc } -ent-MobFleshBat = мясная мышка - .desc = { ent-BaseMobFleshCult.desc } -ent-MobFleshWorm = мясной червь - .desc = { ent-BaseMobFleshCult.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/objectives/cultistObjectives.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/objectives/cultistObjectives.ftl deleted file mode 100644 index 89e887a96de..00000000000 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/objectives/cultistObjectives.ftl +++ /dev/null @@ -1,7 +0,0 @@ -ent-CreateFleshHeartObjective = Создай и пробуди сердце плоти. - .desc = - Вам нужно развить необходимый навык, чтобы создать сердце. - Чтобы пробудить его, оно должно поглотить необходимое количество тел эволюционировавших существ. - После пробуждения будьте готовы защищать его, так как он начнет превращать всю станцию в плоть. -ent-FleshCultistSurvivalObjective = Выжить и сохранить человеческий облик. - .desc = Избегайте голода паразита, чтобы предотвратить непредвиденные обстоятельства. diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 085649a0e54..654e50da6f4 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -76,37 +76,6 @@ - type: Loadout prototypes: [SyndicateOperativeGearFullNoUplink] -#Flesh Cultist -- type: entity - parent: MobHuman - id: MobHumanFleshCultist - name: Flesh Cultist - components: - - type: FleshCultist - startingEvolutionPoint: 300 - - type: NpcFactionMember - factions: - - Flesh - - type: UserInterface - interfaces: - enum.StoreUiKey.Key: - type: StoreBoundUserInterface - - type: Store - categories: - - FleshCultistAbilities - currencyWhitelist: - - StolenMutationPoint - - type: IntrinsicRadioReceiver - - type: IntrinsicRadioTransmitter - channels: - - Flesh - - type: ActiveRadio - channels: - - Flesh - - type: Psionic - channel: Flesh - channelColor: "#cf1b48" - # Nuclear Operative - type: entity categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Objects/Misc/flesh.yml b/Resources/Prototypes/Entities/Objects/Misc/flesh.yml deleted file mode 100644 index b6cf5d79ff4..00000000000 --- a/Resources/Prototypes/Entities/Objects/Misc/flesh.yml +++ /dev/null @@ -1,70 +0,0 @@ -- type: entity - id: Flesh - name: flesh - description: A rapidly growing, dangerous plant. WHY ARE YOU STOPPING TO LOOK AT IT?! - placement: - mode: SnapgridCenter - snap: - - Wall - components: - - type: Tag - tags: - - Flesh - - type: MeleeSound - soundGroups: - Brute: - path: - "/Audio/Weapons/slash.ogg" - - type: Sprite - sprite: Objects/Misc/flesh.rsi - state: flesh_33 - drawdepth: LowFloors - netsync: false - - type: Appearance - - type: Clickable - - type: Transform - anchored: true - - type: Physics - - type: Fixtures - fixtures: - fix1: - hard: false - density: 7 - shape: - !type:PhysShapeAabb - bounds: "-0.5,-0.5,0.5,0.5" - layer: - - MidImpassable - - type: Damageable - damageModifierSet: Wood - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 10 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: Temperature - heatDamage: - types: - Heat: 5 - coldDamage: {} - coldDamageThreshold: 0 - - type: Flammable - fireSpread: true - damage: - types: - Heat: 5 - - type: Reactive - groups: - Flammable: [Touch] - Extinguish: [Touch] - - type: FireVisuals - sprite: Effects/fire.rsi - normalState: 1 - - type: AtmosExposed - - type: SpreaderFlesh - growthResult: Flesh - wallResult: WallFlesh - chance: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/flesh_hands.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/flesh_hands.yml deleted file mode 100644 index 97f5847a23b..00000000000 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/flesh_hands.yml +++ /dev/null @@ -1,115 +0,0 @@ -- type: entity - name: Flesh Claw - parent: BaseItem - id: FleshClaw - description: Flesh Claw - components: - - type: Unremoveable - deleteOnDrop: true - - type: Tag - - type: Sprite - sprite: Objects/Tools/flesh_claw.rsi - state: icon - netsync: false - - type: Item - size: Ginormous - - type: ToolTileCompatible - - type: Tool - qualities: - - Prying - speedModifier: 1.5 - useSound: /Audio/Items/jaws_pry.ogg - - type: MeleeWeapon - damage: - types: - Slash: 15 - - type: Prying - speedModifier: 1.5 - pryPowered: true - useSound: /Audio/Items/jaws_pry.ogg - - type: MultipleTool - statusShowBehavior: true - entries: - - behavior: Prying - sprite: - sprite: Objects/Tools/flesh_claw.rsi - state: icon - useSound: /Audio/Items/jaws_pry.ogg - changeSound: /Audio/Items/change_jaws.ogg - - behavior: Cutting - sprite: - sprite: Objects/Tools/flesh_claw.rsi - state: icon - useSound: /Audio/Items/jaws_cut.ogg - changeSound: /Audio/Items/change_jaws.ogg - -- type: entity - name: flesh fist - parent: BaseItem - id: FleshFist - description: Fisting is three hundred bucks - components: - - type: Unremoveable - deleteOnDrop: true - - type: Sprite - sprite: Objects/Weapons/Melee/flesh_fist.rsi - state: icon - - type: MeleeWeapon - attackRate: 0.75 - damage: - types: - Blunt: 25 - Structural: 60 - - type: Item - size: Ginormous - -- type: entity - name: Flesh blade - parent: BaseItem - id: FleshBlade - description: Flesh blade - components: - - type: Unremoveable - deleteOnDrop: true - - type: Sharp - - type: Sprite - sprite: Objects/Weapons/Melee/flesh_blade.rsi - state: icon - - type: MeleeWeapon - damage: - types: - Slash: 30 - - type: Item - size: Huge - sprite: Objects/Weapons/Melee/flesh_blade.rsi - - type: DisarmMalus - -- type: entity - name: spike gun - id: FleshSpikeHandGun - parent: BaseItem - components: - - type: Sprite - sprite: Objects/Weapons/Guns/Basic/flesh_spike_hand.rsi - state: icon - - type: Item - sprite: Objects/Weapons/Guns/Basic/flesh_spike_hand.rsi - size: Ginormous - - type: Gun - fireRate: 3 - selectedMode: SemiAuto - availableModes: - - SemiAuto - soundGunshot: - path: /Audio/Animals/Flesh/spike_gun_shot.ogg - - type: AmmoCounter - - type: Appearance - - type: RechargeBasicEntityAmmo - rechargeCooldown: 2 - rechargeSound: /Audio/Animals/Flesh/spike_gun_reload.ogg - - type: Unremoveable - deleteOnDrop: true - - type: BasicEntityAmmoProvider - proto: BulletSpike - capacity: 7 - count: 0 diff --git a/Resources/Prototypes/Entities/Structures/flesh_heart.yml b/Resources/Prototypes/Entities/Structures/flesh_heart.yml deleted file mode 100644 index 2dab0ea4d9b..00000000000 --- a/Resources/Prototypes/Entities/Structures/flesh_heart.yml +++ /dev/null @@ -1,65 +0,0 @@ -- type: entity - id: FleshHeart - parent: BaseStructure - name: flesh heart - description: flesh heart - placement: - mode: AlignTileAny - components: - - type: Appearance - - type: SpriteFade - - type: Sprite - netsync: false - drawdepth: Mobs - sprite: Structures/flesh_heart.rsi - layers: - - state: base_heart - map: ["enum.FleshHeartLayers.Base"] - - type: Transform - anchored: true - - type: Physics - bodyType: Static - - type: Climbable - delay: 5 - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeAabb - bounds: "-1.5,-1.4,1.5,0.3" - density: 50 - mask: - - MachineMask - layer: - - MachineLayer - - type: Damageable - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 500 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: PointLight - radius: 10 - energy: 1 - castShadows: true - color: "#87031f" - - type: FleshHeart - finalState: "final_heart" - fleshTileId: Flesh - fleshBlockerId: FleshBlocker - damageMobsIfHeartDestruct: - types: - Slash: 500 - spawns: - MobFleshAbom: 0.10 - MobFleshSpider: 0.25 - MobFleshPudge: 0.20 - MobFleshBall: 0.20 - MobFleshBat: 0.25 - - type: Armor - modifiers: - coefficients: - Heat: 1.5 diff --git a/Resources/Prototypes/Store/categories.yml b/Resources/Prototypes/Store/categories.yml index f1072292983..b49c3c32d0e 100644 --- a/Resources/Prototypes/Store/categories.yml +++ b/Resources/Prototypes/Store/categories.yml @@ -99,11 +99,6 @@ id: RevenantAbilities name: store-category-abilities -#flesh cultist -- type: storeCategory - id: FleshCultistAbilities - name: store-category-abilities - - type: storeCategory id: DiscountedItems name: store-discounted-items diff --git a/Resources/Prototypes/_Backmen/Actions/flesh_cultist.yml b/Resources/Prototypes/_Backmen/Actions/flesh_cultist.yml deleted file mode 100644 index 159ac5e461b..00000000000 --- a/Resources/Prototypes/_Backmen/Actions/flesh_cultist.yml +++ /dev/null @@ -1,193 +0,0 @@ -- type: entity - id: FleshCultistShop - name: Evolution Shop - description: Here you can purchase active skills and passive enhancements. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistShop.png - event: !type:FleshCultistShopActionEvent - -- type: entity - id: FleshCultistBlade - name: Flesh Blade - description: Transforms the active hand into a deadly blade made of flesh and bones. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistBlade.png - event: !type:FleshCultistBladeActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistBreakCuffs - name: Break Cuffs - description: You can break free from any handcuffs or straightjacket. - components: - - type: InstantAction - checkCanInteract: false - itemIconStyle: BigAction - priority: -20 - icon: - sprite: Actions/Implants/implants.rsi - state: freedom - event: !type:FleshCultistBreakCuffsActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistAdrenalin - name: Adrenaline Synthesis - description: The parasite synthesizes and injects a dose of adrenaline into you, increasing your speed and stun resistance. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistAdrenalin.png - event: !type:FleshCultistAdrenalinActionEvent - useDelay: 150 - -- type: entity - id: FleshCultistCreateFleshHeart - name: Create Flesh Heart - description: Creates a flesh heart in front of you. It is your key objective on the station. To activate it, you need to use 3 bodies of evolved flesh creatures. After activation, be prepared to defend it against security personnel. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistFleshHeart.png - event: !type:FleshCultistCreateFleshHeartActionEvent - useDelay: 360 - -- type: entity - id: FleshCultistThrowWorm - name: Worm Vomit - description: Vomits a flesh worm to throw at enemy faces. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistThrowWorm.png - event: !type:FleshCultistThrowWormActionEvent - useDelay: 60 - -- type: entity - id: FleshCultistAcidSpit - name: Acid Spit - description: Spit acid at your enemies. - components: - - type: WorldTargetAction - icon: Interface/Actions/fleshAcidSpit.png - event: !type:FleshCultistAcidSpitActionEvent - range: 200 - useDelay: 60 - -- type: entity - id: FleshCultistClaw - name: Flesh Claw - description: Transforms the active hand into a functional claw made of flesh and bones. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistClaw.png - event: !type:FleshCultistClawActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistFist - name: Flesh Fist - description: Transforms the active hand into a massive flesh fist that can easily break through any structures. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistFist.png - event: !type:FleshCultistFistActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistSpikeGun - name: Spike Gun Hand - description: Transforms the active hand into a deadly spike gun made of flesh. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistSpikeGun.png - event: !type:FleshCultistSpikeHandGunActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistArmor - name: Flesh Armor - description: Covers you in armor made of flesh and bones. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistArmor.png - event: !type:FleshCultistArmorActionEvent - useDelay: 30 - -- type: entity - id: FleshCultistSpiderlegs - name: Spider Form - description: Transforms a part of your body into a spider-like form, providing moderate protection and a significant increase in speed. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistSpiderLegs.png - event: !type:FleshCultistSpiderLegsActionEvent - useDelay: 30 - -- type: entity - id: FleshCultistAbsorbBloodPool - name: Blood Pool Absorption - description: Allows you to absorb clean blood puddles for healing. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistAbsorbBloodPool.png - event: !type:FleshCultistAbsorbBloodPoolActionEvent - useDelay: 10 - -- type: entity - id: FleshCultistDevour - name: Corpse Devour - description: You can devour any flesh creature to gain evolution points and heal wounds. - components: - - type: EntityTargetAction - icon: Interface/Actions/fleshCultistDevour.png - event: !type:FleshCultistDevourActionEvent - useDelay: 15 - whitelist: - components: - - MobState - -- type: entity - id: ActionWormJump - name: Worm Jump - description: Jump into mouse target - components: - - type: WorldTargetAction - icon: Interface/Actions/fleshPudgeThrowWorm.png - itemIconStyle: NoItem - event: !type:FleshWormJumpActionEvent - useDelay: 10 - range: 160 - -- type: entity - id: ActionThrowWorm - name: Worm Jump - description: Jump into mouse target - components: - - type: WorldTargetAction - icon: Interface/Actions/fleshPudgeThrowWorm.png - itemIconStyle: NoItem - range: 200 - event: !type:FleshPudgeThrowWormActionEvent - useDelay: 120 - -- type: entity - id: ActionAcidSpit - name: Acid Spit - description: Spit acid at your enemies. - components: - - type: WorldTargetAction - icon: Interface/Actions/fleshAcidSpit.png - itemIconStyle: NoItem - range: 200 - event: !type:FleshPudgeAcidSpitActionEvent - useDelay: 20 - -- type: entity - id: ActionAbsorbBloodPool - name: Blood Pool Absorption - description: Allows you to absorb clean blood puddles for healing. - components: - - type: InstantAction - icon: Interface/Actions/fleshCultistAbsorbBloodPool.png - event: !type:FleshPudgeAbsorbBloodPoolActionEvent - useDelay: 15 diff --git a/Resources/Prototypes/_Backmen/Alerts/flesh_cultist.yml b/Resources/Prototypes/_Backmen/Alerts/flesh_cultist.yml deleted file mode 100644 index b9e2aadec8d..00000000000 --- a/Resources/Prototypes/_Backmen/Alerts/flesh_cultist.yml +++ /dev/null @@ -1,41 +0,0 @@ -- type: alert - id: MutationPoint - icons: - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point0 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point1 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point2 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point3 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point4 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point5 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point6 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point7 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point8 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point9 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point10 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point11 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point12 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point13 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point14 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point15 - - sprite: /Textures/Interface/Alerts/flesh_point.rsi - state: flesh_point16 - name: flesh-cultist-hunger-name - description: flesh-cultist-hunger-desc - minSeverity: 0 - maxSeverity: 16 diff --git a/Resources/Prototypes/_Backmen/Catalog/flesh_cultist_catalog.yml b/Resources/Prototypes/_Backmen/Catalog/flesh_cultist_catalog.yml deleted file mode 100644 index 8e43e9ccf1e..00000000000 --- a/Resources/Prototypes/_Backmen/Catalog/flesh_cultist_catalog.yml +++ /dev/null @@ -1,202 +0,0 @@ -- type: listing - id: FleshCultistBlade - name: flesh-cultist-blade-evolution-name - description: flesh-cultist-blade-evolution-desc - productAction: FleshCultistBlade - cost: - StolenMutationPoint: 30 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistInsulatedImmunityMutationEvent - name: flesh-cultist-insulated-immunity-evolution-name - description: flesh-cultist-insulated-immunity-evolution-desc - icon: Interface/Actions/fleshCultistInsulatedImmunityMutation.png - raiseProductEventOnUser: true - productEvent: !type:FleshCultistInsulatedImmunityMutationEvent - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistPressureImmunityMutationEvent - name: flesh-cultist-pressure-immunity-evolution-name - description: flesh-cultist-pressure-immunity-evolution-desc - icon: Interface/Actions/fleshCultistPressureImmunityMutation.png - raiseProductEventOnUser: true - productEvent: !type:FleshCultistPressureImmunityMutationEvent - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistColdTempImmunityMutationEvent - name: flesh-cultist-cold-teml-immunity-evolution-name - description: flesh-cultist-cold-teml-immunity-evolution-desc - icon: Interface/Actions/fleshCultistColdTempImmunityMutation.png - raiseProductEventOnUser: true - productEvent: !type:FleshCultistColdTempImmunityMutationEvent - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistFlashImmunityMutationEvent - name: flesh-cultist-flash-immunity-evolution-name - description: flesh-cultist-flash-immunity-evolution-desc - icon: Interface/Actions/fleshCultistFlashImmunityMutation.png - raiseProductEventOnUser: true - productEvent: !type:FleshCultistFlashImmunityMutationEvent - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistClaw - name: flesh-cultist-claw-evolution-name - description: flesh-cultist-claw-evolution-desc - productAction: FleshCultistClaw - cost: - StolenMutationPoint: 20 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistFist - name: flesh-cultist-fist-evolution-name - description: flesh-cultist-fist-evolution-desc - productAction: FleshCultistFist - cost: - StolenMutationPoint: 20 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistSpikeGun - name: flesh-cultist-spike-gun-evolution-name - description: flesh-cultist-spike-gun-evolution-desc - productAction: FleshCultistSpikeGun - cost: - StolenMutationPoint: 20 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistArmor - name: flesh-cultist-armor-evolution-name - description: flesh-cultist-armor-evolution-desc - productAction: FleshCultistArmor - cost: - StolenMutationPoint: 25 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistSpiderlegs - name: flesh-cultist-spider-legs-evolution-name - description: flesh-cultist-spider-legs-evolution-desc - productAction: FleshCultistSpiderlegs - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistBreakCuffs - name: flesh-cultist-break-cuffs-evolution-name - description: flesh-cultist-break-cuffs-evolution-desc - productAction: FleshCultistBreakCuffs - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistAdrenalin - name: flesh-cultist-adrenaline-evolution-name - description: flesh-cultist-adrenaline-evolution-desc - productAction: FleshCultistAdrenalin - cost: - StolenMutationPoint: 15 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistCreateFleshHeart - name: flesh-cultist-create-flesh-heart-evolution-name - description: flesh-cultist-create-flesh-heart-evolution-desc - productAction: FleshCultistCreateFleshHeart - cost: - StolenMutationPoint: 50 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistThrowWorm - name: flesh-cultist-throw-worm-evolution-name - description: flesh-cultist-throw-worm-evolution-desc - productAction: FleshCultistThrowWorm - cost: - StolenMutationPoint: 15 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 - -- type: listing - id: FleshCultistAcidSpit - name: flesh-cultist-acid-spit-evolution-name - description: flesh-cultist-acid-spit-evolution-desc - productAction: FleshCultistAcidSpit - cost: - StolenMutationPoint: 10 - categories: - - FleshCultistAbilities - conditions: - - !type:ListingLimitedStockCondition - stock: 1 diff --git a/Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/flesh_cult.yml b/Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/flesh_cult.yml deleted file mode 100644 index e4bbf440c5f..00000000000 --- a/Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/flesh_cult.yml +++ /dev/null @@ -1,572 +0,0 @@ -- type: entity - parent: SimpleMobBase - id: BaseMobFleshCult - name: извращенная плоть - description: A shambling mass of flesh, animated through anomalous energy. - abstract: true - components: - - type: TTS - voice: Npc1 - - type: HTN - rootTask: - task: SimpleHostileCompound - - type: NpcFactionMember - factions: - - Flesh - - type: Tag - tags: - - DoorBumpOpener - - Flesh - - CannotSuicide - - type: Sprite - drawdepth: Mobs - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - - type: MovementAlwaysTouching - - type: MovementSpeedModifier - baseWalkSpeed: 2 - baseSprintSpeed: 3 - - type: MobState - allowedStates: - - Alive - - Dead - - type: MobThresholds - thresholds: - 0: Alive - 75: Dead - - type: Stamina - critThreshold: 50 - - type: Appearance - - type: Butcherable - spawned: - - id: FoodMeat - amount: 1 - - type: CombatMode - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg - angle: 0 - animation: WeaponArcClaw - damage: - types: - Slash: 3 -# - type: ReplacementAccent -# accent: genericAggressive - - type: LanguageSpeaker - currentLanguage: Flesh - - type: LanguageKnowledge #backmen: languages - speaks: - - Flesh - understands: - - Flesh - - TauCetiBasic - - type: Armor - modifiers: - coefficients: - Heat: 1.4 - Blunt: 0.6 - Piercing: 0.6 - - type: Respirator - damage: - types: - Asphyxiation: 0.05 - damageRecovery: - types: - Asphyxiation: -0.05 - - type: Barotrauma - damage: - types: - Blunt: 0.03 - - type: PotentialPsionic - - type: Psionic - channel: Flesh - channelColor: "#cf1b48" - -- type: entity - parent: BaseMobFleshCult - name: паук из плоти - id: MobFleshSpider - components: - - type: Butcherable - spawned: - - id: FoodMeat - amount: 2 - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/flesh_worm_dead.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 1 - - type: Sprite - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - layers: - - map: [ "enum.DamageStateVisualLayers.Base" ] - state: spider - - type: Vocal - sounds: - Unsexed: FleshWormEmote - - type: DamageStateVisuals - states: - Alive: - Base: spider - Critical: - Base: spider_dead - Dead: - Base: spider_dead - - type: MobThresholds - thresholds: - 0: Alive - 100: Dead - - type: Bloodstream - bloodMaxVolume: 100 - bloodReagent: Blood - - type: MovementSpeedModifier - baseWalkSpeed: 2 - baseSprintSpeed: 3 - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-spider-ghost-role-name - description: mob-flesh-spider-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМы, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg - angle: 0 - animation: WeaponArcClaw - damage: - types: - Piercing: 3 - - type: Spider - - type: IgnoreSpiderWeb - - type: Puller - needsHands: false - - -- type: entity - parent: BaseMobFleshCult - name: мясной толстяк - id: MobFleshPudge - components: - - type: Butcherable - spawned: - - id: FoodMeat - amount: 5 - - type: Hands - showInHands: false - - type: FleshPudge - wormMobSpawnId: "MobFleshWorm" - actionThrowWorm: ActionThrowWorm - actionAcidSpit: ActionAcidSpit - actionAbsorbBloodPool: ActionAbsorbBloodPool - - type: Vocal - sounds: - Unsexed: FleshPudgeEmote - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/flesh_pudge_dead.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 2 - - type: Sprite - drawdepth: Mobs - sprite: Mobs/Aliens/FleshCult/flesh_cult_pudge.rsi - layers: - - map: ["enum.DamageStateVisualLayers.Base"] - state: alive - - type: DamageStateVisuals - states: - Alive: - Base: alive - Critical: - Base: crit - Dead: - Base: dead - - type: Bloodstream - bloodMaxVolume: 300 - bloodReagent: Blood - - type: InputMover - - type: MobMover - - type: Physics - bodyType: Dynamic - - type: MovementSpeedModifier - baseWalkSpeed: 1.5 - baseSprintSpeed: 2 - - type: MobThresholds - thresholds: - 0: Alive - 200: Critical - 250: Dead - - type: MobState - allowedStates: - - Alive - - Critical - - Dead - - type: Stamina - critThreshold: 300 - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg - angle: 0 - animation: WeaponArcSmash - damage: - types: - Blunt: 20 - Structural: 30 - - type: Reactive - groups: - Flammable: [Touch] - Extinguish: [Touch] - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-pudge-ghost-role-name - description: mob-flesh-pudge-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМы, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.45 - density: 230 - mask: - - SmallMobMask - layer: - - SmallMobLayer - - type: Puller - needsHands: false - - -- type: entity - parent: BaseMobFleshCult - name: мерзкая плоть - id: MobFleshAbom - components: - - type: Butcherable - spawned: - - id: FoodMeat - amount: 5 - - type: Hands - showInHands: false - - type: FleshPudge - wormMobSpawnId: "MobFleshWorm" - actionThrowWorm: ActionThrowWorm - actionAcidSpit: ActionAcidSpit - actionAbsorbBloodPool: ActionAbsorbBloodPool - - type: Vocal - sounds: - Unsexed: FleshAbomEmote - - type: MobState - allowedStates: - - Alive - - Critical - - Dead - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/abom_scream.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 2 - - type: Sprite - drawdepth: Mobs - sprite: Mobs/Aliens/FleshCult/flesh_cult_abom.rsi - layers: - - map: ["enum.DamageStateVisualLayers.Base"] - state: alive - - type: DamageStateVisuals - states: - Alive: - Base: alive - Critical: - Base: crit - Dead: - Base: dead - - type: Bloodstream - bloodMaxVolume: 300 - bloodReagent: Blood - - type: InputMover - - type: MobMover - - type: Physics - bodyType: Dynamic - - type: MovementSpeedModifier - baseWalkSpeed: 1.5 - baseSprintSpeed: 2 - - type: MobThresholds - thresholds: - 0: Alive - 300: Critical - 350: Dead - - type: Stamina - critThreshold: 300 - - type: MeleeWeapon - hidden: true - range: 2 - soundHit: - path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg - angle: 0 - animation: WeaponArcSmash - damage: - types: - Blunt: 25 - Structural: 30 - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-abom-ghost-role-name - description: mob-flesh-abom-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМы, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: Fixtures - fixtures: - fix1: - shape: !type:PhysShapeCircle - radius: 0.45 - density: 500 - mask: - - MobMask - layer: - - MobLayer - - type: Puller - needsHands: false - - -- type: entity - parent: BaseMobFleshCult - name: мясной шарик - id: MobFleshBall - components: - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/flesh_pudge_dead.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 0 - - type: Sprite - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - layers: - - map: [ "enum.DamageStateVisualLayers.Base" ] - state: ball - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Effects/bite.ogg - angle: 0 - animation: WeaponArcSmash - damage: - types: - Piercing: 2 - - type: DamageStateVisuals - states: - Alive: - Base: ball - Critical: - Base: ball_dead - Dead: - Base: ball_dead - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.25 - density: 10 - mask: - - FlyingMobMask - layer: - - FlyingMobLayer - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-ball-ghost-role-name - description: mob-flesh-ball-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМы, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: MobThresholds - thresholds: - 0: Alive - 25: Dead - - type: MovementSpeedModifier - baseWalkSpeed: 1.5 - baseSprintSpeed: 2 - - type: TriggerOnMobstateChange #Chains with OnUseTimerTrigger - mobState: - - Dead - - type: TriggerImplantAction - - type: ExplodeOnTrigger - - type: Explosive - explosionType: Flesh - totalIntensity: 30 - intensitySlope: 3 - maxIntensity: 50 - canCreateVacuum: false - - -- type: entity - parent: BaseMobFleshCult - name: мясная мышка - id: MobFleshBat - components: - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/flesh_worm_dead.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 0 - - type: Sprite - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - layers: - - map: [ "enum.DamageStateVisualLayers.Base" ] - state: bat - - type: DamageStateVisuals - states: - Alive: - Base: bat - Critical: - Base: bat_dead - Dead: - Base: bat_dead - - type: Bloodstream - bloodMaxVolume: 50 - bloodReagent: Blood - - type: Vocal - sounds: - Unsexed: FleshWormEmote - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.25 - density: 10 - mask: - - FlyingMobMask - layer: - - FlyingMobLayer - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-bat-ghost-role-name - description: mob-flesh-bat-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМ, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Effects/bite.ogg - angle: 0 - animation: WeaponArcBite - damage: - types: - Piercing: 3 - - type: MobThresholds - thresholds: - 0: Alive - 50: Dead - - type: MovementSpeedModifier - baseWalkSpeed: 2.5 - baseSprintSpeed: 3.5 - - type: Puller - needsHands: false - - -- type: entity - parent: BaseMobFleshCult - name: мясной червь - id: MobFleshWorm - components: - - type: FleshMob - soundDeath: "/Audio/Animals/Flesh/flesh_worm_dead.ogg" - deathMobSpawnId: "MobFleshWorm" - deathMobSpawnCount: 0 - - type: FleshWorm - paralyzeTime: 3 - chansePounce: 33 - damage: - types: - Piercing: 2 - actionWormJump: ActionWormJump - - type: Sprite - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - drawdepth: SmallMobs - noRot: true - layers: - - map: [ "enum.DamageStateVisualLayers.Base" ] - state: worm - - type: DamageStateVisuals - states: - Alive: - Base: worm - Critical: - Base: worm_dead - Dead: - Base: worm_dead - - type: Vocal - sounds: - Unsexed: FleshWormEmote - - type: Item - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - heldPrefix: worm - size: Normal - - type: Clothing - quickEquip: false - sprite: Mobs/Aliens/FleshCult/flesh_cult_mobs.rsi - equippedPrefix: worm - slots: - - MASK - - type: Physics - bodyType: Dynamic - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.2 - density: 100 - mask: - - SmallMobMask - layer: - - SmallMobLayer - - type: Speech - - type: Bloodstream - bloodMaxVolume: 10 - bloodReagent: Blood - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: mob-flesh-worm-ghost-role-name - description: mob-flesh-worm-ghost-role-name - rules: Не атакуйте культистов плоти, не ломайте ДАМы, сервера, консоли и прочее. Не делайте разгерметизацию. - raffle: - settings: default - - type: GhostTakeoverAvailable - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Effects/bite.ogg - angle: 0 - animation: WeaponArcBite - damage: - types: - Piercing: 2 - - type: MobThresholds - thresholds: - 0: Alive - 25: Dead - - type: MovementSpeedModifier - baseWalkSpeed: 3 - baseSprintSpeed: 4 - - type: Tag - tags: - - Flesh - - CannotSuicide diff --git a/Resources/Prototypes/_Backmen/GameRules/roundstart.yml b/Resources/Prototypes/_Backmen/GameRules/roundstart.yml index b7385f054bc..94c46e4487c 100644 --- a/Resources/Prototypes/_Backmen/GameRules/roundstart.yml +++ b/Resources/Prototypes/_Backmen/GameRules/roundstart.yml @@ -1,47 +1,4 @@ -# Flesh Cult -- type: entity - id: FleshCult - parent: BaseGameRule - categories: [ HideSpawnMenu ] - components: - - type: GameRule - minPlayers: 20 - - type: FleshCultRule - faction: Flesh -# Перенести в прототипы культ сложно из-за наличия Лидера, -# так что пусть пока вот тут полежит заготовка -# -# - type: AntagSelection -# selectionTime: PrePlayerSpawn -# definitions: -# - prefRoles: [ FleshCultistLeader ] -# fallbackRoles: [ FleshCultist ] -# max: 1 -# components: -# - type: FleshCultist -# - type: NpcFactionMember -# factions: -# - Flesh -# mindRoles: -# - MindRoleFleshLeader -# - prefRoles: [ FleshCultist ] -# fallbackRoles: [ FleshCultistLeader ] -# max: 6 -# playerRatio: 10 -# components: -# - type: FleshCultist -# - type: NpcFactionMember -# factions: -# - Flesh -# lateJoinAdditional: true -# mindRoles: -# - MindRoleFlesh -# briefing: -# text: flesh-cult-role-greeting -# color: Plum -# #sound: #TODO: Flesh Cultist briefing TTS - -# Blob +# Blob - type: entity id: BlobRule parent: BaseGameRule @@ -137,22 +94,22 @@ min: 30 max: 60 -## Vampire Outbreak -- type: entity - id: VampireOutbreak - parent: BaseVampiresGameRule - categories: [ HideSpawnMenu ] - components: - - type: StationEvent - earliestStart: 20 - minimumPlayers: 15 - weight: 5 - maxOccurrences: 1 # can only happen once per round - startAnnouncement: station-event-communication-interception - startAudio: - path: /Audio/Announcements/intercept.ogg - duration: null # the rule has to last the whole round not 1 second - occursDuringRoundEnd: false +## Vampire Outbreak # Removed until rework +#- type: entity +# id: VampireOutbreak +# parent: BaseVampiresGameRule +# categories: [ HideSpawnMenu ] +# components: +# - type: StationEvent +# earliestStart: 20 +# minimumPlayers: 15 +# weight: 5 +# maxOccurrences: 1 # can only happen once per round +# startAnnouncement: station-event-communication-interception +# startAudio: +# path: /Audio/Announcements/intercept.ogg +# duration: null # the rule has to last the whole round not 1 second +# occursDuringRoundEnd: false # Shipwrecked - type: entity diff --git a/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml b/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml deleted file mode 100644 index 859c4f6c340..00000000000 --- a/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml +++ /dev/null @@ -1,33 +0,0 @@ -- type: entity - parent: BaseObjective - id: CreateFleshHeartObjective - categories: [ HideSpawnMenu ] - name: objective-condition-create-flesh-heart-title - description: objective-condition-create-flesh-heart-description - components: - - type: Objective - issuer: objective-issuer-flesh-cult - difficulty: 1.3 - icon: Interface/Actions/fleshCultistFleshHeart.png - - type: RoleRequirement - roles: - mindRoles: - - FleshCultistRole - - type: CreateFleshHeartCondition - -- type: entity - parent: BaseObjective - id: FleshCultistSurvivalObjective - categories: [ HideSpawnMenu ] - name: objective-condition-flesh-cultist-survival-title - description: objective-condition-flesh-cultist-survival-description - components: - - type: Objective - issuer: objective-issuer-flesh-cult - difficulty: 0.5 - icon: Interface/Actions/fleshCultistSurvivalObjective.png - - type: RoleRequirement - roles: - mindRoles: - - FleshCultistRole - - type: FleshCultistSurvivalCondition diff --git a/Resources/Prototypes/_Backmen/Roles/Antags/fleshcultist.yml b/Resources/Prototypes/_Backmen/Roles/Antags/fleshcultist.yml deleted file mode 100644 index 869444eca07..00000000000 --- a/Resources/Prototypes/_Backmen/Roles/Antags/fleshcultist.yml +++ /dev/null @@ -1,27 +0,0 @@ -- type: antag - id: FleshCultist - name: roles-antag-flesh-cultist-name - antagonist: true - setPreference: true - objective: roles-antag-flesh-cultist-objective - requirements: - - !type:OverallPlaytimeRequirement - time: 18000 # 5h - - !type:DepartmentTimeRequirement - department: Security - time: 18000 # 5h - discordRequired: true # backmen: antag - -- type: antag - id: FleshCultistLeader - name: roles-antag-flesh-cultist-leader-name - antagonist: true - setPreference: true - objective: roles-antag-flesh-cultist-leader-objective - requirements: - - !type:OverallPlaytimeRequirement - time: 18000 # 5h - - !type:DepartmentTimeRequirement - department: Security - time: 18000 # 5h - discordRequired: true # backmen: antag diff --git a/Resources/Prototypes/_Backmen/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/_Backmen/Roles/MindRoles/mind_roles.yml index f1ad75a58f5..8b16a3b378c 100644 --- a/Resources/Prototypes/_Backmen/Roles/MindRoles/mind_roles.yml +++ b/Resources/Prototypes/_Backmen/Roles/MindRoles/mind_roles.yml @@ -21,30 +21,6 @@ exclusiveAntag: true - type: BlobRole -# Flesh Cultists -- type: entity - parent: BaseMindRoleAntag - id: MindRoleFlesh - name: Flesh Cultist Role -# description: mind-role-flesh-description - components: - - type: MindRole - antagPrototype: FleshCultist - exclusiveAntag: true - - type: FleshCultistRole - -- type: entity - parent: BaseMindRoleAntag - id: MindRoleFleshLeader - name: Flesh Cultist Leader Role -# description: mind-role-flesh-description - components: - - type: MindRole - antagPrototype: FleshCultistLeader - exclusiveAntag: true - - type: FleshCultistRole - isLeader: true - # Bloodsucker - type: entity parent: BaseMindRoleAntag diff --git a/Resources/Prototypes/_Backmen/Statusicon/antag.yml b/Resources/Prototypes/_Backmen/Statusicon/antag.yml index 0e9ded77bb7..a7aba6a9407 100644 --- a/Resources/Prototypes/_Backmen/Statusicon/antag.yml +++ b/Resources/Prototypes/_Backmen/Statusicon/antag.yml @@ -1,15 +1,3 @@ -- type: factionIcon - id: FleshcultistFaction - priority: 5 - showTo: - tags: - - Flesh - components: - - FleshCultist - icon: - sprite: /Textures/Backmen/Interface/Misc/antag_icon.rsi - state: flesh - - type: factionIcon id: VampireFaction priority: 9 diff --git a/Resources/Prototypes/_Backmen/game_presets.yml b/Resources/Prototypes/_Backmen/game_presets.yml index de4c5ed840e..8cebd99bda5 100644 --- a/Resources/Prototypes/_Backmen/game_presets.yml +++ b/Resources/Prototypes/_Backmen/game_presets.yml @@ -57,54 +57,6 @@ - SubGamemodesRule - CalmMeteorSwarmScheduler -- type: gamePreset - id: FleshCult - alias: - - fleshcult - - fs - name: flesh-cult-title - description: flesh-cult-description - showInVote: false - rules: - - FleshCult - - CalmStationEventScheduler - - WageScheduler #backmen: currency - - BasicRoundstartVariation - - SubGamemodesRule - - CalmMeteorSwarmScheduler - -- type: gamePreset - id: FleshCultAndTraitor - alias: - - madness - - fleshcultandtraitor - name: flesh-cult-and-traitor-title - showInVote: false - description: flesh-cult-and-traitor-description - rules: - - FleshCult - - Traitor - - BasicStationEventScheduler - - WageScheduler #backmen: currency - - BasicRoundstartVariation - - MeteorSwarmScheduler - -- type: gamePreset - id: NukeopsFleshCult - alias: - - nukeops - - fleshcult - name: nukeops-fleshcult-title - description: nukeops-fleshcult-description - showInVote: false - rules: - - Nukeops - - FleshCult - - BasicStationEventScheduler - - WageScheduler #backmen: currency - - BasicRoundstartVariation - - MeteorSwarmScheduler - - type: gamePreset id: RevolutionaryTraitor alias: @@ -181,24 +133,6 @@ - BasicRoundstartVariation - MeteorSwarmScheduler -- type: gamePreset - id: NukeopsFleshCultTraitor - alias: - - nukeops - - fleshcult - - syndinukies - name: nukeops-fleshcult-traitor-title - description: nukeops-fleshcult-traitor-description - showInVote: false - rules: - - Nukeops - - FleshCult - - BasicStationEventScheduler - - WageScheduler #backmen: currency - - Traitor - - BasicRoundstartVariation - - MeteorSwarmScheduler - - type: gamePreset id: SurvivalNukeops alias: diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 86d142793e1..1bc970507d6 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -39,8 +39,7 @@ rules: # start-backmen - WageScheduler #backmen: currency - - VampiresGameRule # backmen: vampire - - FleshCult # backmen: flesh cult + #- VampiresGameRule # backmen: vampire Removed until rework - ExtendedThief # backmen: extended-thief #- Changeling # backmen: changeling # end-backmen @@ -67,8 +66,7 @@ # start-backmen - WageScheduler #backmen: currency - BlobGameMode - - VampiresGameRule - - FleshCult +# - VampiresGameRule # Removed until rework - ExtendedThief - Changeling # end-backmen diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index eee950a907a..dbe2ab2d089 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -7,9 +7,8 @@ # Zombieteors: 0.01 KesslerSyndrome: 0.01 Revolutionary: 0.01 - FleshCult: 0.10 Blob: 0.12 Survival: 0.01 ExtendedThief: 0.10 - Vampires: 0.05 +# Vampires: 0.05 # Removed until rework # Changeling: 0.20 # After fix changelings with surgery