diff --git a/Content.Server/Stack/StackSystem.cs b/Content.Server/Stack/StackSystem.cs index 93ca839b714..dbb25363a5c 100644 --- a/Content.Server/Stack/StackSystem.cs +++ b/Content.Server/Stack/StackSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Popups; using Content.Shared.Stacks; using JetBrains.Annotations; +using Robust.Server.Player; using Robust.Shared.Map; using Robust.Shared.Prototypes; // ADT-Tweak start @@ -18,6 +19,7 @@ namespace Content.Server.Stack public sealed class StackSystem : SharedStackSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; // ADT-Tweak [Dependency] private readonly QuickDialogSystem _quickDialog = default!; // ADT-Tweak for system own split #region Spawning @@ -304,6 +306,45 @@ protected override void UserSplit(Entity stack, Entity stack, Entity user) + { + if (!Resolve(user.Owner, ref user.Comp, false)) + return; + + if (!_playerManager.TryGetSessionByEntity(user.Owner, out var session)) + return; + + var maxCount = stack.Comp.Count; + + _quickDialog.OpenDialog( + session, + Loc.GetString("comp-stack-split-custom-title"), + Loc.GetString("comp-stack-split-custom-description", ("count", maxCount)), + (int amount) => + { + if (amount <= 0) + { + Popup.PopupCursor(Loc.GetString("comp-stack-split-too-small"), user.Owner, PopupType.Medium); + return; + } + + if (amount > maxCount) + { + Popup.PopupCursor(Loc.GetString("comp-stack-split-too-large"), user.Owner, PopupType.Medium); + return; + } + + if (Split(stack.AsNullable(), amount, user.Comp.Coordinates) is not { } split) + return; + + Hands.PickupOrDrop(user.Owner, split); + + Popup.PopupCursor(Loc.GetString("comp-stack-split"), user.Owner); + }); + } + // ADT-Tweak end #endregion } } diff --git a/Content.Shared/ADT/Combat/ComboEffects.cs b/Content.Shared/ADT/Combat/ComboEffects.cs index 78480e3329d..66bfa799bff 100644 --- a/Content.Shared/ADT/Combat/ComboEffects.cs +++ b/Content.Shared/ADT/Combat/ComboEffects.cs @@ -21,6 +21,10 @@ using Robust.Shared.Network; using Content.Shared.Mobs.Components; using Content.Shared.StatusEffectNew; +using Content.Shared.Administration.Logs; +using Content.Shared.Database; +using Robust.Shared.IoC; +using Robust.Shared.GameObjects; namespace Content.Shared.ADT.Combat; @@ -42,7 +46,14 @@ public sealed partial class ComboDamageEffect : IComboEffect public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { var damageable = entMan.System(); - damageable.TryChangeDamage(target, Damage); + var damageResult = damageable.ChangeDamage(target, Damage); + + if (damageResult.GetTotal() > 0) + { + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo damage on {entMan.ToPrettyString(target):subject} and dealt {damageResult.GetTotal():damage} damage"); + } } } @@ -59,6 +70,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { var stun = entMan.System(); stun.TakeStaminaDamage(target, StaminaDamage); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo stamina damage on {entMan.ToPrettyString(target):subject} and dealt {StaminaDamage:stamina} stamina damage"); } } @@ -99,6 +114,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) var stun = entMan.System(); stun.TryKnockdown(target, time: null, drop: DropItems, force: false); } + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} attempted combo fall effect on {entMan.ToPrettyString(target):subject} (dropItems: {DropItems})"); } } @@ -118,7 +137,13 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) var damageable = entMan.System(); if (down.IsDown(target)) { - damageable.TryChangeDamage(target, Damage, IgnoreResistances); + var damageResult = damageable.ChangeDamage(target, Damage, ignoreResistances: IgnoreResistances); + if (damageResult.GetTotal() > 0) + { + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo damage (downed target) on {entMan.ToPrettyString(target):subject} and dealt {damageResult.GetTotal():damage} damage"); + } } } } @@ -147,6 +172,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { down.TryKnockdown(target, time: null, drop: DropItems, force: false); } + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} attempted combo stun effect on {entMan.ToPrettyString(target):subject} (stunTime: {StunTime}s, fall: {Fall}, dropItems: {DropItems})"); } } @@ -178,6 +207,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) if (!entMan.TryGetComponent(target, out var hand) || hand.ActiveHandId == null) return; hands.DoDrop(target, hand.ActiveHandId); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} attempted combo drop from hands effect on {entMan.ToPrettyString(target):subject}"); } } @@ -200,6 +233,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) if(!hands.TryPickup(user, activeItem.Value, emptyHand)) return; hands.SetActiveHand(user, emptyHand); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo hands retake effect on {entMan.ToPrettyString(target):subject}"); } } @@ -227,8 +264,12 @@ public sealed partial class ComboMuteEffect : IComboEffect public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { - var status = entMan.System(); // я меняю системы эффектов ибо я две сразу использую. новая система эффектов для сна тупо лучше. смотрите ниже + var status = entMan.System(); status.TryAddStatusEffect(target, "Muted", TimeSpan.FromSeconds(Time), false); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo mute effect on {entMan.ToPrettyString(target):subject} (time: {Time}s)"); } } @@ -242,6 +283,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { var status = entMan.System(); status.TryAddStatusEffect(target, "SlowedDown", TimeSpan.FromSeconds(Time), false); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo slowdown effect on {entMan.ToPrettyString(target):subject} (time: {Time}s)"); } } @@ -261,6 +306,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) if (down.IsDown(target)) { stun.TakeStaminaDamage(target, Damage); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo stamina damage (downed target) on {entMan.ToPrettyString(target):subject} and dealt {Damage:stamina} stamina damage"); } } } @@ -280,6 +329,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) status.TryAddStatusEffect(target, "Flashed", TimeSpan.FromSeconds(Duration), true); blind.AdjustEyeDamage(target, 1); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo flash effect on {entMan.ToPrettyString(target):subject} (duration: {Duration}s)"); } } @@ -296,6 +349,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) pull.TryLowerGrabStageOrStopPulling((user, puller), (target, pulled)); } pull.TryStopPull(target, pulled, user); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} performed combo stop grab effect on {entMan.ToPrettyString(target):subject}"); } } @@ -312,6 +369,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) pull.TryLowerGrabStageOrStopPulling((target, puller), (user, pulled)); } pull.TryStopPull(user, pulled, target); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} performed combo stop target grab effect on {entMan.ToPrettyString(target):subject}"); } } @@ -361,6 +422,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { comboEvent.DoEffect(user, target, entMan); } + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} performed combo effect to downed on {entMan.ToPrettyString(target):subject} ({ComboEvents.Count} events)"); } } } @@ -424,6 +489,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { comboEvent.DoEffect(user, target, entMan); } + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Low, + $"{entMan.ToPrettyString(user):actor} performed combo effect to stunned on {entMan.ToPrettyString(target):subject} ({ComboEvents.Count} events)"); } } @@ -439,6 +508,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) if (entMan.HasComponent(target)) { transform.SetCoordinates(user, transform.GetMoverCoordinates(target)); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo teleport on victim effect to {entMan.ToPrettyString(target):subject}"); } } } @@ -455,6 +528,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) if (entMan.HasComponent(target)) { transform.SwapPositions(user, target); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo swap position effect with {entMan.ToPrettyString(target):subject}"); } } } @@ -473,6 +550,10 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) var status = entMan.System(); status.TryAddStatusEffectDuration(target, "StatusEffectForcedSleeping", out _, TimeSpan.FromSeconds(Time)); + + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} attempted combo sleep effect on {entMan.ToPrettyString(target):subject} (time: {Time}s)"); } } @@ -507,7 +588,13 @@ public void DoEffect(EntityUid user, EntityUid target, IEntityManager entMan) { var damageable = entMan.System(); var newDamage = Damage * comp.ComboCounter; - damageable.TryChangeDamage(target, newDamage); + var damageResult = damageable.ChangeDamage(target, newDamage); + if (damageResult.GetTotal() > 0) + { + var adminLogger = IoCManager.Resolve(); + adminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + $"{entMan.ToPrettyString(user):actor} performed combo counter damage on {entMan.ToPrettyString(target):subject} and dealt {damageResult.GetTotal():damage} damage (counter: {comp.ComboCounter})"); + } } } diff --git a/Content.Shared/ADT/EntityEffects/Effects/EntitySpawning/SpawnRandomEntityEntityEffectSystem.cs b/Content.Shared/ADT/EntityEffects/Effects/EntitySpawning/SpawnRandomEntityEntityEffectSystem.cs new file mode 100644 index 00000000000..809603fd80f --- /dev/null +++ b/Content.Shared/ADT/EntityEffects/Effects/EntitySpawning/SpawnRandomEntityEntityEffectSystem.cs @@ -0,0 +1,75 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.GameObjects; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Serialization; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// Spawns a random entity from a list of prototypes at the coordinates of this entity. +/// Amount is modified by scale. +/// +public sealed partial class SpawnRandomEntityEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Number * (int)Math.Floor(args.Scale); + + if (!args.Effect.Predicted && !_net.IsServer) + return; + + if (args.Effect.Prototypes == null || args.Effect.Prototypes.Count == 0) + return; + + for (var i = 0; i < quantity; i++) + { + var protoId = _random.Pick(args.Effect.Prototypes); + if (args.Effect.Predicted) + { + PredictedSpawnNextToOrDrop(protoId, entity, entity.Comp); + } + else + { + SpawnNextToOrDrop(protoId, entity, entity.Comp); + } + } + } +} + +/// +/// Effect that spawns a random entity from a list of prototypes. +/// +[DataDefinition] +public sealed partial class SpawnRandomEntity : EntityEffectBase +{ + /// + /// Amount of entities we're spawning + /// + [DataField] + public int Number = 1; + + /// + /// List of prototypes to randomly choose from when spawning. + /// + [DataField(required: true)] + public List Prototypes = new(); + + /// + /// Whether this spawning is predicted. Set false to not predict the spawn. + /// Entities with animations or that have random elements when spawned should set this to false. + /// + [DataField] + public bool Predicted = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-spawn-entity", + ("chance", Probability), + ("entname", Loc.GetString("entity-effect-random-item")), + ("amount", Number)); +} diff --git a/Content.Shared/Stacks/SharedStackSystem.cs b/Content.Shared/Stacks/SharedStackSystem.cs index a04fe579b0a..3c54057a774 100644 --- a/Content.Shared/Stacks/SharedStackSystem.cs +++ b/Content.Shared/Stacks/SharedStackSystem.cs @@ -218,6 +218,17 @@ private void OnStackAlternativeInteract(Entity ent, ref GetVerbs args.Verbs.Add(verb); } + + // ADT-Tweak start: Add custom split amount option + AlternativeVerb custom = new() + { + Text = Loc.GetString("comp-stack-split-custom"), + Category = VerbCategory.Split, + Act = () => RequestCustomSplit(ent, user), + Priority = int.MinValue + }; + args.Verbs.Add(custom); + // ADT-Tweak end } /// @@ -231,6 +242,14 @@ protected virtual void UserSplit(Entity stack, Entity + /// ADT-Tweak: Request custom split amount from user + /// + protected virtual void RequestCustomSplit(Entity stack, Entity user) + { + // Implemented on server + } } /// diff --git a/Resources/Locale/en-US/ADT/EntityEffects/entity-effects.ftl b/Resources/Locale/en-US/ADT/EntityEffects/entity-effects.ftl new file mode 100644 index 00000000000..7ac351143a8 --- /dev/null +++ b/Resources/Locale/en-US/ADT/EntityEffects/entity-effects.ftl @@ -0,0 +1,4 @@ +# Entity Effects + +## SpawnRandomEntity +entity-effect-random-item = random item diff --git a/Resources/Locale/en-US/ADT/stack.ftl b/Resources/Locale/en-US/ADT/stack.ftl new file mode 100644 index 00000000000..dfd9f1d99e6 --- /dev/null +++ b/Resources/Locale/en-US/ADT/stack.ftl @@ -0,0 +1,5 @@ +comp-stack-split-custom = Custom amount... +comp-stack-split-custom-title = Split Stack +comp-stack-split-custom-description = Amount: (max { $count }): +comp-stack-split-custom-input-label = Amount: +comp-stack-split-too-large = Entered number is too large. diff --git a/Resources/Locale/ru-RU/ADT/EntityEffects/entity-effects.ftl b/Resources/Locale/ru-RU/ADT/EntityEffects/entity-effects.ftl new file mode 100644 index 00000000000..bca2ce429ca --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/EntityEffects/entity-effects.ftl @@ -0,0 +1,4 @@ +# Entity Effects + +## SpawnRandomEntity +entity-effect-random-item = случайный предмет diff --git a/Resources/Locale/ru-RU/ADT/stack.ftl b/Resources/Locale/ru-RU/ADT/stack.ftl new file mode 100644 index 00000000000..4faa1ecfd8e --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/stack.ftl @@ -0,0 +1,5 @@ +comp-stack-split-custom = Ввести сумму... +comp-stack-split-custom-title = Разделить стопку +comp-stack-split-custom-description = Сумма: (макс. { $count }): +comp-stack-split-custom-input-label = Количество: +comp-stack-split-too-large = Введено слишком большое число. diff --git a/Resources/Prototypes/ADT/Entities/Objects/Devices/syndicate_pinpointer.yml b/Resources/Prototypes/ADT/Entities/Objects/Devices/syndicate_pinpointer.yml index 834cd704e70..acd4ac27745 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Devices/syndicate_pinpointer.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Devices/syndicate_pinpointer.yml @@ -14,11 +14,8 @@ visible: false - type: Icon state: pinpointer-syndicate-way - - type: Pinpointer - updateTargetName: true - canRetarget: true - type: ObjectivePinpointer - type: UserInterface interfaces: enum.ObjectivePinpointerUiKey.Key: - type: ObjectivePinpointerBoundUserInterface \ No newline at end of file + type: ObjectivePinpointerBoundUserInterface diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index b5dff0e3cab..8c5f38621dd 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -7,6 +7,10 @@ - type: Edible - type: Sprite sprite: Mobs/Species/Human/organs.rsi + # ADT-Tweak start + - type: Extractable + grindableSolutionName: food + # ADT-Tweak end - type: StaticPrice price: 50 - type: SolutionContainerManager diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index 356fe982331..6bd75d163e2 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -22,6 +22,9 @@ prob: 0.15 - id: HarmonicaInstrument prob: 0.15 + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxElectricalFilled @@ -43,6 +46,9 @@ orGroup: GlovesOrWires - id: CableHVStack10 orGroup: GlovesOrWires + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxElectricalTurretFilled @@ -64,6 +70,9 @@ orGroup: GlovesOrWires - id: CableHVStack10 orGroup: GlovesOrWires + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxArtisticFilled @@ -85,6 +94,9 @@ amount: 2 - id: CrayonMime - id: CrayonRainbow + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxMechanicalFilled @@ -104,6 +116,9 @@ prob: 0.7 - id: ClothingHeadHatHardhatBlue prob: 0.5 + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxMechanicalFilledAllTools @@ -119,6 +134,9 @@ - id: Wirecutter - id: Welder - id: Multitool + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity parent: ToolboxSyndicate @@ -137,6 +155,9 @@ - id: ClothingMaskGasSyndicate - type: StaticPrice price: 1000 + - type: Tag # ADT-Tweak + tags: + - Toolbox - type: entity id: ToolboxGoldFilled @@ -149,3 +170,6 @@ - id: IngotGold - id: DrinkGoldenCup prob: 0.05 + - type: Tag # ADT-Tweak + tags: + - Toolbox diff --git a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml index 05816e817a3..aec9bd8fbd6 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml @@ -181,3 +181,6 @@ - id: Mooltitool - id: Cowelder - id: Milkalyzer + - type: Tag # ADT-Tweak + tags: + - Toolbox diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 0224665789e..84e691f5e46 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -440,17 +440,17 @@ - LibrarianJumpskirt - CuratorJumpsuit - CuratorJumpskirt + # ADT tweak start + - ADTClothingUniformJumpsuitTurtleneckRed + - ADTClothingUniformJumpskirtTurtleneckRed + # ADT tweak end + - type: loadoutGroup id: LibrarianJobTrinkets name: loadout-group-jobtrinkets minLimit: 0 loadouts: - LizardPlushieLibrarian - - # ADT tweak start - - ADTClothingUniformJumpsuitTurtleneckRed - - ADTClothingUniformJumpskirtTurtleneckRed - # ADT tweak end # ADT-Loadouts-Start - type: loadoutGroup id: LibrarianBackpack diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 549ec03fca4..0832e9af0bc 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -546,7 +546,7 @@ - !type:PopupMessage conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Vulpkanin, Ursus ] # ADT-Tweak + type: [ Animal, Vox, Vulpkanin, Ursus, Reptilian ] # ADT-Tweak inverted: true - !type:MetabolizerTypeCondition type: [ Plant ] @@ -560,12 +560,12 @@ - !type:MetabolizerTypeCondition type: [ Plant ] - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Ursus ] # ADT-Tweak + type: [ Animal, Vox, Ursus, Reptilian ] # ADT-Tweak inverted: true - !type:HealthChange conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Ursus, Felinid ] # ADT-Tweak + type: [ Animal, Vox, Ursus, Felinid, Reptilian ] # ADT-Tweak inverted: true damage: types: @@ -573,7 +573,7 @@ - !type:AdjustReagent conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Ursus ] # ADT-Tweak + type: [ Animal, Ursus, Reptilian ] # ADT-Tweak # ADT-Tweak-Start - !type:MetabolizerTypeCondition type: [ Felinid ] diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml index a0c5c546c7b..b51ba899b3f 100644 --- a/Resources/Prototypes/Recipes/Reactions/fun.yml +++ b/Resources/Prototypes/Recipes/Reactions/fun.yml @@ -153,8 +153,19 @@ Ethanol: amount: 5 effects: - - !type:SpawnEntity - entity: ShardCrystalRandom + # ADT-Tweak start + - !type:SpawnRandomEntity + prototypes: + - ShardCrystalGreen + - ShardCrystalPink + - ShardCrystalYellow + - ShardCrystalBlack + - ShardCrystalOrange + - ShardCrystalBlue + - ShardCrystalCyan + - ShardCrystalRed + predicted: false + # ADT-Tweak end - type: reaction id: Gunpowder