diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index a60619baa3..227d9b05ae 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -3,12 +3,15 @@ using System.Numerics; using Content.Client.CombatMode; using Content.Client.Examine; using Content.Client.Gameplay; +using Content.Client.Popups; using Content.Client.Verbs; using Content.Client.Verbs.UI; using Content.Shared.CCVar; using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Input; +using Content.Shared.Mobs.Components; +using Content.Shared.Popups; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -50,6 +53,7 @@ namespace Content.Client.ContextMenu.UI [UISystemDependency] private readonly ExamineSystem _examineSystem = default!; [UISystemDependency] private readonly TransformSystem _xform = default!; [UISystemDependency] private readonly CombatModeSystem _combatMode = default!; + [UISystemDependency] private readonly PopupSystem _popup = default!; // WD EDIT private bool _updating; @@ -124,6 +128,19 @@ namespace Content.Client.ContextMenu.UI return; } + // WD START + var localEntity = _playerManager.LocalEntity; + if (args.Function == EngineKeyFunctions.Use && + EntityManager.HasComponent(entity.Value) && entity.Value != localEntity) + { + _popup.PopupClient(Loc.GetString("context-menu-cant-interact"), + entity.Value, localEntity, PopupType.MediumCaution); + _context.Close(); + args.Handle(); + return; + } + // WD END + // do some other server-side interaction? if (args.Function == EngineKeyFunctions.Use || args.Function == ContentKeyFunctions.ActivateItemInWorld || diff --git a/Content.Client/_White/Overlays/ThermalVisionOverlay.cs b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs index fcc4863ff9..7f0701f0d9 100644 --- a/Content.Client/_White/Overlays/ThermalVisionOverlay.cs +++ b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs @@ -1,7 +1,9 @@ using System.Linq; using System.Numerics; +using Content.Client.Stealth; using Content.Shared._White.Overlays; using Content.Shared.Body.Components; +using Content.Shared.Stealth.Components; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Player; @@ -19,6 +21,7 @@ public sealed class ThermalVisionOverlay : Overlay private readonly TransformSystem _transform; private readonly OccluderSystem _occluder; private readonly PointLightSystem _pointLight; + private readonly StealthSystem _stealth; public override OverlaySpace Space => OverlaySpace.WorldSpace; @@ -33,6 +36,7 @@ public sealed class ThermalVisionOverlay : Overlay _transform = _entity.System(); _occluder = _entity.System(); _pointLight = _entity.System(); + _stealth = _entity.System(); ZIndex = -1; } @@ -125,7 +129,9 @@ public sealed class ThermalVisionOverlay : Overlay private bool CanSee(EntityUid ent, SpriteComponent sprite) { - return sprite.Visible && !_entity.HasComponent(ent); + return sprite.Visible && !_entity.HasComponent(ent) && + (!_entity.TryGetComponent(ent, out StealthComponent? stealth) || + _stealth.GetVisibility(ent, stealth) > 0.5f); } private bool HasOccluders(EntityUid ent) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 4b5f429247..b25a65ec84 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -24,6 +24,7 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Players; using Content.Shared.Radio; using Content.Shared._White; +using Content.Shared._White.Cult.Components; using Content.Shared.Speech; using Content.Shared._White.Cult.Systems; using Robust.Server.Player; @@ -807,6 +808,7 @@ public sealed partial class ChatSystem : SharedChatSystem return Filter.Empty() .AddWhereAttachedEntity(HasComp) .AddWhereAttachedEntity(HasComp) + .AddWhereAttachedEntity(HasComp) .Recipients .Union(_adminManager.ActiveAdmins) .Select(p => p.Channel); diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs index cc57c34c47..e4bcef2c48 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs @@ -274,6 +274,24 @@ public sealed partial class BorgSystem return false; } + if (TryComp(module, out var itemModuleComp)) + { + foreach (var containedModuleUid in component.ModuleContainer.ContainedEntities) + { + if (!TryComp(containedModuleUid, out var containedItemModuleComp)) + continue; + + if (containedItemModuleComp.Items.Count == itemModuleComp.Items.Count && + containedItemModuleComp.Items.All(itemModuleComp.Items.Contains)) + { + if (user != null) + Popup.PopupEntity(Loc.GetString("borg-module-duplicate"), uid, user.Value); + + return false; + } + } + } + return true; } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 010682bc0d..eef4f7678b 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -55,7 +55,6 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem SubscribeLocalEvent(OnEmagLawsAdded); SubscribeLocalEvent(OnEmagMindAdded); SubscribeLocalEvent(OnEmagMindRemoved); - SubscribeLocalEvent(OnExamined); } private void OnComponentShutdown(EntityUid uid, SiliconLawBoundComponent component, ComponentShutdown args) @@ -155,17 +154,6 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem }); } - private void OnExamined(EntityUid uid, EmagSiliconLawComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange || !HasComp(uid)) - return; - - if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) - return; - - args.PushMarkup(Loc.GetString("laws-compromised-examine")); - } - protected override void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) { if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) diff --git a/Content.Server/_White/Cult/Items/Components/CultRitesHandComponent.cs b/Content.Server/_White/Cult/Items/Components/CultRitesHandComponent.cs index 9ed2b0dad6..4a83fdfbf3 100644 --- a/Content.Server/_White/Cult/Items/Components/CultRitesHandComponent.cs +++ b/Content.Server/_White/Cult/Items/Components/CultRitesHandComponent.cs @@ -14,7 +14,7 @@ public sealed partial class CultRitesHandComponent : BaseMagicHandComponent public SoundSpecifier SuckSound = new SoundPathSpecifier("/Audio/White/Cult/enter_blood.ogg"); [DataField] - public float HealModifier = 0.5f; + public float HealModifier = 1f; [DataField(customTypeSerializer: typeof(PrototypeIdListSerializer))] public List BloodRites = new () diff --git a/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs b/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs index 1fb79ba403..fbb615d9e2 100644 --- a/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs +++ b/Content.Server/_White/Cult/Items/Systems/MagicHandSystem.cs @@ -17,11 +17,11 @@ using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Fluids.Components; using Content.Shared.Interaction; +using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.StatusEffect; using Content.Shared.UserInterface; -using Content.Shared.Weapons.Melee.Events; using Robust.Server.Audio; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; @@ -50,9 +50,8 @@ public sealed class MagicHandSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnStunHit); - SubscribeLocalEvent(OnRitesHit); - SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnStunInteract); + SubscribeLocalEvent(OnRitesInteract); SubscribeLocalEvent(OnBloodRitesSelected); SubscribeLocalEvent(OnRitesSelectAttempt); SubscribeLocalEvent(BeforeRitesSelect); @@ -122,17 +121,26 @@ public sealed class MagicHandSystem : EntitySystem cultist.RitesBloodAmount -= prototype.BloodCost; } - private void OnInteract(Entity ent, ref AfterInteractEvent args) + private void OnRitesInteract(Entity ent, ref AfterInteractEvent args) { if (!args.CanReach || args.Target is not { } target) return; + if (!TryComp(args.User, out CultistComponent? cultist)) + return; + + if (HasComp(target) || HasComp(target)) + { + RitesHeal(ent, target, args.User, cultist); + return; + } + + var puddleQuery = GetEntityQuery(); if (!puddleQuery.HasComp(target)) return; - if (!TryComp(args.User, out BloodstreamComponent? bloodstreamComponent) || - !TryComp(args.User, out CultistComponent? cultist)) + if (!TryComp(args.User, out BloodstreamComponent? bloodstreamComponent)) return; var xform = Transform(target); @@ -176,28 +184,22 @@ public sealed class MagicHandSystem : EntitySystem args.Handled = true; } - private void OnRitesHit(Entity ent, ref MeleeHitEvent args) + private void RitesHeal(Entity ent, EntityUid target, EntityUid user, CultistComponent cultist) { - if (args.HitEntities.Count == 0) - return; - - var target = args.HitEntities[0]; var (uid, comp) = ent; - QueueDel(uid); - - if (!TryComp(args.User, out CultistComponent? cultist) || !TryComp(target, out DamageableComponent? damageable)) + if (!TryComp(target, out DamageableComponent? damageable) || !TryComp(target, out MobStateComponent? mobState)) return; - if (_mobState.IsDead(target)) + if (_mobState.IsDead(target, mobState)) { - Popup(Loc.GetString("cult-rites-dead"), args.User); + Popup(Loc.GetString("cult-rites-dead"), user); return; } if (cultist.RitesBloodAmount <= FixedPoint2.Zero) { - Popup(Loc.GetString("cult-rites-heal-no-blood"), args.User); + Popup(Loc.GetString("cult-rites-heal-no-blood"), user); return; } @@ -205,27 +207,32 @@ public sealed class MagicHandSystem : EntitySystem var totalDamage = damage.GetTotal(); if (totalDamage <= FixedPoint2.Zero) { - Popup(Loc.GetString("cult-rites-already-healed"), args.User); + Popup(Loc.GetString("cult-rites-already-healed"), user); return; } + QueueDel(uid); + var coef = FixedPoint2.Min(cultist.RitesBloodAmount * comp.HealModifier, totalDamage) / totalDamage; cultist.RitesBloodAmount = FixedPoint2.Max(FixedPoint2.Zero, cultist.RitesBloodAmount - totalDamage / comp.HealModifier); - _damageable.TryChangeDamage(target, -damage * coef, true, false, damageable, args.User); - Popup(Loc.GetString("cult-rites-after-heal", ("blood", cultist.RitesBloodAmount)), args.User); + _damageable.TryChangeDamage(target, -damage * coef, true, false, damageable, user); + Popup(Loc.GetString("cult-rites-after-heal", ("blood", cultist.RitesBloodAmount)), user); _audio.PlayPvs(comp.HealSound, target); - Speak(args.User, comp); + Speak(user, comp); } - private void OnStunHit(Entity ent, ref MeleeHitEvent args) + private void OnStunInteract(Entity ent, ref AfterInteractEvent args) { - if (args.HitEntities.Count == 0) + if (!args.CanReach || args.Target is not { } target) return; - var target = args.HitEntities[0]; var (uid, comp) = ent; + if (uid == target || !TryComp(target, out StatusEffectsComponent? status) || + HasComp(target) || HasComp(target)) + return; + QueueDel(uid); Spawn("CultStunFlashEffect", Transform(target).Coordinates); Speak(args.User, comp); @@ -241,8 +248,8 @@ public sealed class MagicHandSystem : EntitySystem var halo = HasComp(args.User); _statusEffects.TryAddStatusEffect(target, "Muted", halo ? comp.HaloMuteDuration : comp.MuteDuration, true, - "Muted"); - _stun.TryParalyze(target, halo ? comp.HaloDuration : comp.Duration, true); + "Muted", status); + _stun.TryParalyze(target, halo ? comp.HaloDuration : comp.Duration, true, status); } private void Popup(string msg, EntityUid user, PopupType type = PopupType.Small) diff --git a/Content.Server/_White/Cult/Pylon/CheckForStructure.cs b/Content.Server/_White/Cult/Pylon/CheckForStructure.cs new file mode 100644 index 0000000000..ce1bfb0d5b --- /dev/null +++ b/Content.Server/_White/Cult/Pylon/CheckForStructure.cs @@ -0,0 +1,29 @@ +using Content.Server.Popups; +using Content.Shared._White.Cult.Pylon; +using Content.Shared.Construction; +using Content.Shared.Popups; +using JetBrains.Annotations; + +namespace Content.Server._White.Cult.Pylon; + +[UsedImplicitly] +[DataDefinition] +public sealed partial class CheckForStructure : IGraphAction +{ + public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager) + { + var xform = entityManager.GetComponent(uid); + var coords = xform.Coordinates; + if (!SharedPylonComponent.CheckForStructure(coords, entityManager, 9f, uid)) + return; + + entityManager.QueueDeleteEntity(uid); + if (userUid != null) + { + entityManager.System() + .PopupEntity(Loc.GetString("cult-structure-craft-another-structure-nearby"), + userUid.Value, userUid.Value, PopupType.MediumCaution); + } + entityManager.SpawnEntity("CultRunicMetal4", coords); + } +} diff --git a/Content.Server/_White/Cult/Pylon/PylonSystem.cs b/Content.Server/_White/Cult/Pylon/PylonSystem.cs index 4f47481227..2c25383e13 100644 --- a/Content.Server/_White/Cult/Pylon/PylonSystem.cs +++ b/Content.Server/_White/Cult/Pylon/PylonSystem.cs @@ -61,15 +61,6 @@ public sealed class PylonSystem : EntitySystem private void OnInit(EntityUid uid, SharedPylonComponent component, ComponentInit args) { - var coords = Transform(uid).Coordinates; - if (SharedPylonComponent.CheckForStructure(coords, EntityManager, 9f, uid)) - { - QueueDel(uid); - _popupSystem.PopupCoordinates(Loc.GetString("cult-structure-craft-another-structure-nearby"), - coords, PopupType.MediumCaution); - Spawn("CultRunicMetal4", coords); - return; - } UpdateAppearance(uid, component); } diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs index b6c5b52081..1dbdb670c9 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs @@ -102,6 +102,8 @@ public partial class CultSystem { _popupSystem.PopupEntity("Цель обезмолвлена.", args.User, args.User); } + if (args.Speech != null) + _chat.TrySendInGameICMessage(args.User, args.Speech, InGameICChatType.Whisper, false); return; } @@ -369,8 +371,8 @@ public partial class CultSystem if (!TryComp(args.Target, out CuffableComponent? cuffs) || cuffs.Container.ContainedEntities.Count > 0) return; - var doAfterArgs = new DoAfterArgs(EntityManager, args.Performer, TimeSpan.FromSeconds(2), new ShacklesEvent(), - args.Performer, args.Target) + var doAfterArgs = new DoAfterArgs(EntityManager, args.Performer, TimeSpan.FromSeconds(2), + new ShacklesEvent(args.Speech), args.Performer, args.Target) { BreakOnMove = true, BreakOnDamage = true @@ -379,7 +381,6 @@ public partial class CultSystem if (!_doAfterSystem.TryStartDoAfter(doAfterArgs)) return; - Speak(args); args.Handled = true; } diff --git a/Content.Server/_White/Stalin/StalinManager.cs b/Content.Server/_White/Stalin/StalinManager.cs index dfe29b552f..23884c441f 100644 --- a/Content.Server/_White/Stalin/StalinManager.cs +++ b/Content.Server/_White/Stalin/StalinManager.cs @@ -37,7 +37,7 @@ public sealed class StalinManager private readonly Dictionary _nextStalinAllowedCheck = new(); private string _stalinApiUrl = string.Empty; private string _stalinAuthUrl = string.Empty; - private float _minimalDiscordAccountAge = 228f; + private float _minimalDiscordAccountAge = 10080f; public void Initialize() { diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 3670e24bd3..efdbff3bb8 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -6,7 +6,9 @@ using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; +using Content.Shared.NameIdentifier; using Content.Shared.PDA; +using Content.Shared.Silicons.Borgs.Components; using Content.Shared.StationRecords; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -393,6 +395,9 @@ public sealed class AccessReaderSystem : EntitySystem ent.Comp.AccessLog.Dequeue(); string? name = null; + if (TryComp(accessor, out var nameIdentifier)) + name = nameIdentifier.FullIdentifier; + // TODO pass the ID card on IsAllowed() instead of using this expensive method // Set name if the accessor has a card and that card has a name and allows itself to be recorded if (_idCardSystem.TryFindIdCard(accessor, out var idCard) diff --git a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs index 8db31715fc..8f330cb27a 100644 --- a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs @@ -7,7 +7,6 @@ using Content.Shared.Wieldable; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; -using Robust.Shared.Timing; namespace Content.Shared.Item.ItemToggle; /// @@ -23,7 +22,6 @@ public abstract class SharedItemToggleSystem : EntitySystem [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly IGameTiming _timing = default!; public override void Initialize() { @@ -242,17 +240,14 @@ public abstract class SharedItemToggleSystem : EntitySystem /// private void UpdateActiveSound(EntityUid uid, ItemToggleActiveSoundComponent activeSound, ref ItemToggledEvent args) { - if (!_timing.IsFirstTimePredicted) // WD + if (_netManager.IsClient) // WD EDIT, FUCK THIS (desword sound broken) return; if (args.Activated) { if (activeSound.ActiveSound != null && activeSound.PlayingStream == null) { - if (args.Predicted) - activeSound.PlayingStream = _audio.PlayPredicted(activeSound.ActiveSound, uid, args.User, AudioParams.Default.WithLoop(true)).Value.Entity; - else - activeSound.PlayingStream = _audio.PlayPvs(activeSound.ActiveSound, uid, AudioParams.Default.WithLoop(true)).Value.Entity; + activeSound.PlayingStream = _audio.PlayPvs(activeSound.ActiveSound, uid, AudioParams.Default.WithLoop(true)) .Value.Entity; } } else diff --git a/Content.Shared/Standing/Systems/SharedStandingStateSystem.cs b/Content.Shared/Standing/Systems/SharedStandingStateSystem.cs index c502bff8a1..2aaf40baa0 100644 --- a/Content.Shared/Standing/Systems/SharedStandingStateSystem.cs +++ b/Content.Shared/Standing/Systems/SharedStandingStateSystem.cs @@ -11,7 +11,6 @@ using Content.Shared._White.Wizard.Timestop; using Content.Shared.Buckle; using Content.Shared.Buckle.Components; using Content.Shared.Mobs; -using Content.Shared.Movement.Events; using Robust.Shared.Audio.Systems; using Robust.Shared.Input.Binding; using Robust.Shared.Physics; @@ -29,10 +28,8 @@ public abstract partial class SharedStandingStateSystem : EntitySystem [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; // WD EDIT [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; // WD EDIT - [Dependency] private readonly SharedStunSystem _stun = default!; // WD EDIT [Dependency] private readonly MobStateSystem _mobState = default!; // WD EDIT [Dependency] private readonly SharedBuckleSystem _buckle = default!; // WD EDIT - [Dependency] private readonly SharedTransformSystem _transform = default!; // WD EDIT [Dependency] private readonly SharedRotationVisualsSystem _rotation = default!; // WD EDIT // If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited. @@ -53,7 +50,6 @@ public abstract partial class SharedStandingStateSystem : EntitySystem SubscribeLocalEvent(OnStandingUpDoAfter); SubscribeLocalEvent(OnRefreshMovementSpeed); - SubscribeLocalEvent(OnTileFriction); SubscribeLocalEvent(OnSlipAttempt); InitializeColliding(); @@ -114,12 +110,6 @@ public abstract partial class SharedStandingStateSystem : EntitySystem args.ModifySpeed(1f, 1f); } - private void OnTileFriction(Entity ent, ref TileFrictionEvent args) - { - if (IsDown(ent)) - args.Modifier *= SharedStunSystem.KnockDownModifier; - } - private void OnSlipAttempt(EntityUid uid, StandingStateComponent component, SlipAttemptEvent args) { if (IsDown(uid)) @@ -171,7 +161,7 @@ public abstract partial class SharedStandingStateSystem : EntitySystem return true; } - public enum DropHeldItemsBehavior + public enum DropHeldItemsBehavior : byte { NoDrop, DropIfStanding, @@ -222,9 +212,6 @@ public abstract partial class SharedStandingStateSystem : EntitySystem if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled && !_buckle.TryUnbuckle(uid, uid, buckleComp: buckle)) // WD EDIT return false; - if (standingState.CurrentState is StandingState.Lying or StandingState.GettingUp) - return true; - // This is just to avoid most callers doing this manually saving boilerplate // 99% of the time you'll want to drop items but in some scenarios (e.g. buckling) you don't want to. // We do this BEFORE downing because something like buckle may be blocking downing but we want to drop hand items anyway @@ -234,6 +221,9 @@ public abstract partial class SharedStandingStateSystem : EntitySystem RaiseLocalEvent(uid, new DropHandItemsEvent()); } + if (standingState.CurrentState is StandingState.Lying or StandingState.GettingUp) + return true; + var msg = new DownAttemptEvent(); RaiseLocalEvent(uid, msg); diff --git a/Content.Shared/Stunnable/SharedStunSystem.cs b/Content.Shared/Stunnable/SharedStunSystem.cs index f97be06252..6053086196 100644 --- a/Content.Shared/Stunnable/SharedStunSystem.cs +++ b/Content.Shared/Stunnable/SharedStunSystem.cs @@ -107,7 +107,7 @@ public abstract class SharedStunSystem : EntitySystem private void OnKnockInit(EntityUid uid, KnockedDownComponent component, ComponentInit args) { RaiseNetworkEvent(new CheckAutoGetUpEvent()); // WD EDIT - _standingState.Down(uid); + _standingState.TryLieDown(uid, null, SharedStandingStateSystem.DropHeldItemsBehavior.DropIfStanding); } private void OnKnockShutdown(EntityUid uid, KnockedDownComponent component, ComponentShutdown args) @@ -207,6 +207,9 @@ public abstract class SharedStunSystem : EntitySystem if (_statusEffect.HasStatusEffect(uid, "Stun")) time = TimeSpan.FromSeconds(6); + if (_standingState.IsDown(uid)) // WD + RaiseLocalEvent(uid, new DropHandItemsEvent()); + return TryKnockdown(uid, time, refresh, status) && TryStun(uid, time, refresh, status); } diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 79ef8319e5..217d9879c6 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -129,7 +129,7 @@ public sealed partial class MeleeWeaponComponent : Component /// Nearest edge range to hit an entity. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] - public float Range = 1.2f; + public float Range = 1.5f; /// /// Total width of the angle for wide attacks. diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index e43e991fe3..96085ebfda 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -401,7 +401,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (lightTarget == null) { - if (weapon.CanMiss) + if (weapon.CanMiss || session == null) // NPCs can miss break; return false; } @@ -512,11 +512,6 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem animation = miss && weapon.Animation == "WeaponArcThrust" ? weapon.MissAnimation : weapon.Animation; - if (miss) - { - weapon.NextAttack -= fireRate / 2f; - weapon.NextMobAttack -= fireRate / 2f; - } // WD EDIT END break; case DisarmAttackEvent disarm: diff --git a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs index a60cde55be..03f02ce782 100644 --- a/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs +++ b/Content.Shared/_White/BuffedFlashGrenade/FlashSoundSuppressionSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Inventory; +using Content.Shared.Standing; using Content.Shared.Stunnable; namespace Content.Shared._White.BuffedFlashGrenade; @@ -38,9 +39,12 @@ public sealed class FlashSoundSuppressionSystem : EntitySystem if (distance > range) return; - var knockdownTime = float.Lerp(knockdownDuration, 0f, distance / range); - if (knockdownTime > 0f) - _stunSystem.TryKnockdown(target, TimeSpan.FromSeconds(knockdownTime), true); + if (TryComp(target, out var standingState) && standingState.CanLieDown) + { + var knockdownTime = float.Lerp(knockdownDuration, 0f, distance / range); + if (knockdownTime > 0f) + _stunSystem.TryKnockdown(target, TimeSpan.FromSeconds(knockdownTime), true); + } var stunTime = float.Lerp(stunDuration, 0f, distance / range); if (stunTime > 0f) diff --git a/Content.Shared/_White/Cult/Actions/CultEvents.cs b/Content.Shared/_White/Cult/Actions/CultEvents.cs index 5f584db374..a8075a9eb8 100644 --- a/Content.Shared/_White/Cult/Actions/CultEvents.cs +++ b/Content.Shared/_White/Cult/Actions/CultEvents.cs @@ -6,8 +6,16 @@ using Robust.Shared.Serialization; namespace Content.Shared._White.Cult.Actions; [Serializable, NetSerializable] -public sealed partial class ShacklesEvent : SimpleDoAfterEvent +public sealed partial class ShacklesEvent : DoAfterEvent { + public string? Speech; + + public ShacklesEvent(string? speech) + { + Speech = speech; + } + + public override DoAfterEvent Clone() => this; } [Serializable, NetSerializable] diff --git a/Content.Shared/_White/Cult/Systems/BloodSpearSystem.cs b/Content.Shared/_White/Cult/Systems/BloodSpearSystem.cs index 523e8b576d..ff2620503a 100644 --- a/Content.Shared/_White/Cult/Systems/BloodSpearSystem.cs +++ b/Content.Shared/_White/Cult/Systems/BloodSpearSystem.cs @@ -49,7 +49,7 @@ public sealed class BloodSpearSystem : EntitySystem if (!_holy.IsHoldingHolyWeapon(args.Target)) { - if(!_stunSystem.TryParalyze(args.Target, TimeSpan.FromSeconds(4), true, status)) + if(!_stunSystem.TryParalyze(args.Target, TimeSpan.FromSeconds(5), true, status)) return; } diff --git a/Content.Shared/_White/Item/Telebaton/TelebatonComponent.cs b/Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonComponent.cs similarity index 54% rename from Content.Shared/_White/Item/Telebaton/TelebatonComponent.cs rename to Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonComponent.cs index 75051e4cfe..b8811c8a23 100644 --- a/Content.Shared/_White/Item/Telebaton/TelebatonComponent.cs +++ b/Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonComponent.cs @@ -1,7 +1,7 @@ -namespace Content.Shared._White.Item.Telebaton; +namespace Content.Shared._White.Item.TelescopicBaton; [RegisterComponent] -public sealed partial class TelebatonComponent : Component +public sealed partial class TelescopicBatonComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite)] public TimeSpan KnockdownTime = TimeSpan.FromSeconds(1.5f); diff --git a/Content.Shared/_White/Item/Telebaton/TelebatonSystem.cs b/Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonSystem.cs similarity index 56% rename from Content.Shared/_White/Item/Telebaton/TelebatonSystem.cs rename to Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonSystem.cs index f5b88e2bca..f341059862 100644 --- a/Content.Shared/_White/Item/Telebaton/TelebatonSystem.cs +++ b/Content.Shared/_White/Item/TelescopicBaton/TelescopicBatonSystem.cs @@ -5,9 +5,9 @@ using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Stunnable; -namespace Content.Shared._White.Item.Telebaton; +namespace Content.Shared._White.Item.TelescopicBaton; -public sealed class TelebatonSystem : EntitySystem +public sealed class TelescopicBatonSystem : EntitySystem { [Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly SharedStunSystem _stun = default!; @@ -17,13 +17,13 @@ public sealed class TelebatonSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnStaminaHitAttempt); - SubscribeLocalEvent(ToggleDone); - SubscribeLocalEvent(OnHit); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnStaminaHitAttempt); + SubscribeLocalEvent(ToggleDone); + SubscribeLocalEvent(OnHit); } - private void OnHit(Entity ent, ref StaminaMeleeHitEvent args) + private void OnHit(Entity ent, ref StaminaMeleeHitEvent args) { var time = ent.Comp.KnockdownTime; if (time <= TimeSpan.Zero) @@ -35,13 +35,13 @@ public sealed class TelebatonSystem : EntitySystem } } - private void OnStaminaHitAttempt(Entity entity, ref StaminaDamageOnHitAttemptEvent args) + private void OnStaminaHitAttempt(Entity entity, ref StaminaDamageOnHitAttemptEvent args) { if (!_itemToggle.IsActivated(entity.Owner)) args.Cancelled = true; } - private void OnExamined(Entity entity, ref ExaminedEvent args) + private void OnExamined(Entity entity, ref ExaminedEvent args) { var onMsg = _itemToggle.IsActivated(entity.Owner) ? Loc.GetString("comp-telebaton-examined-on") @@ -49,7 +49,7 @@ public sealed class TelebatonSystem : EntitySystem args.PushMarkup(onMsg); } - private void ToggleDone(Entity entity, ref ItemToggledEvent args) + private void ToggleDone(Entity entity, ref ItemToggledEvent args) { _item.SetHeldPrefix(entity.Owner, args.Activated ? "on" : "off"); } diff --git a/Content.Shared/_White/WhiteCVars.cs b/Content.Shared/_White/WhiteCVars.cs index d2a3b360d8..2a290fcf88 100644 --- a/Content.Shared/_White/WhiteCVars.cs +++ b/Content.Shared/_White/WhiteCVars.cs @@ -138,9 +138,9 @@ public sealed class WhiteCVars public static readonly CVarDef StalinAuthUrl = CVarDef.Create("stalin.auth_url", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL | CVar.ARCHIVE); public static readonly CVarDef StalinEnabled = - CVarDef.Create("stalin.enabled", false, CVar.SERVERONLY | CVar.ARCHIVE); + CVarDef.Create("stalin.enabled", true, CVar.SERVERONLY | CVar.ARCHIVE); public static readonly CVarDef StalinDiscordMinimumAge = - CVarDef.Create("stalin.minimal_discord_age_minutes", 1440.0f, CVar.SERVERONLY | CVar.ARCHIVE); + CVarDef.Create("stalin.minimal_discord_age_minutes", 10080.0f, CVar.SERVERONLY | CVar.ARCHIVE); /* diff --git a/Resources/Audio/Effects/Footsteps/attributions.yml b/Resources/Audio/Effects/Footsteps/attributions.yml index 82b5fa93ca..91c3ce260d 100644 --- a/Resources/Audio/Effects/Footsteps/attributions.yml +++ b/Resources/Audio/Effects/Footsteps/attributions.yml @@ -71,3 +71,10 @@ license: "CC-BY-SA-3.0" copyright: "Taken from tgstation" source: "https://github.com/tgstation/tgstation/tree/1e8d511946d194f92f744f5f957a7c41683d84a6/sound/effects/footstep" + +- files: + - borgwalk1.ogg + - borgwalk2.ogg + license: "CC-BY-SA-4.0" + copyright: "Taken from IENBA freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/IENBA/sounds/697379/" diff --git a/Resources/Audio/Effects/Footsteps/borgwalk1.ogg b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg new file mode 100644 index 0000000000..1ffc1516bb Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk1.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/borgwalk2.ogg b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg new file mode 100644 index 0000000000..7998be898f Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/borgwalk2.ogg differ diff --git a/Resources/Audio/Voice/Silicon/attributions.yml b/Resources/Audio/Voice/Silicon/attributions.yml new file mode 100644 index 0000000000..465f845503 --- /dev/null +++ b/Resources/Audio/Voice/Silicon/attributions.yml @@ -0,0 +1,4 @@ +- files: ["syndieborg_laugh.ogg"] + license: "CC0-1.0" + copyright: "Taken from vultraz168 freesound.org and modified by https://github.com/MilenVolf" + source: "https://freesound.org/people/vultraz168/sounds/334665/" diff --git a/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg new file mode 100644 index 0000000000..e0f425301e Binary files /dev/null and b/Resources/Audio/Voice/Silicon/syndieborg_laugh.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/attributions.yml b/Resources/Audio/Voice/Talk/Silicon/attributions.yml new file mode 100644 index 0000000000..3a16007758 --- /dev/null +++ b/Resources/Audio/Voice/Talk/Silicon/attributions.yml @@ -0,0 +1,10 @@ +- files: + - borg.ogg + - borg_ask.ogg + - borg_exclaim.ogg + - syndieborg.ogg + - syndieborg_ask.ogg + - syndieborg_exclaim.ogg + license: "CC-BY-SA-4.0" + copyright: "Recorded and mixed by https://github.com/MilenVolf" + source: "https://github.com/space-wizards/space-station-14/pull/27205" diff --git a/Resources/Audio/Voice/Talk/Silicon/borg.ogg b/Resources/Audio/Voice/Talk/Silicon/borg.ogg new file mode 100644 index 0000000000..afb9739035 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg new file mode 100644 index 0000000000..fe2f60141a Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg new file mode 100644 index 0000000000..5f0fdfe89e Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/borg_exclaim.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg new file mode 100644 index 0000000000..60eb1a5ccf Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg new file mode 100644 index 0000000000..acafe45642 Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_ask.ogg differ diff --git a/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg new file mode 100644 index 0000000000..392b4fd1cc Binary files /dev/null and b/Resources/Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg differ diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 3966ef5bb6..92dc21f9b1 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -7470,3 +7470,212 @@ id: 451 time: '2024-08-02T11:50:26.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/542 +- author: PuroSlavKing + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043A\u043B\ + \u0430\u0434\u043A\u0430 \u043B\u043E\u0434\u0430\u0443\u0442\u0430 \"\u0421\ + \u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441\u0430\u043C\u043E\u043E\u0431\ + \u043E\u0440\u043E\u043D\u044B\", \u0434\u043B\u044F \u0433\u043B\u0430\u0432\ + ." + type: Add + - message: "\u0422\u0435\u043B\u0435\u0441\u043A\u043E\u043F\u0438\u0447\u0435\u0441\ + \u043A\u0430\u044F \u0434\u0443\u0431\u0438\u043D\u043A\u0430 \u0431\u043E\u043B\ + \u044C\u0448\u0435 \u043D\u0435 \u0432\u044B\u0431\u0438\u0432\u0430\u0435\u0442\ + \ \u0432\u0435\u0449\u0438 \u0438\u0437 \u0440\u0443\u043A." + type: Tweak + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D \u0443\u0440\u043E\u043D\ + \ \u0442\u0435\u043B\u0435\u0441\u043A\u043E\u043F\u0438\u0447\u0435\u0441\u043A\ + \u043E\u0439 \u0434\u0443\u0431\u0438\u043D\u043A\u0438, 12 > 2 ~~(\u042D\u0442\ + \u043E \u043D\u0435 \u043E\u0440\u0443\u0436\u0438\u0435)~~, \u0443\u043C\u0435\ + \u043D\u044C\u0448\u0435\u043D \u0443\u0440\u043E\u043D \u043F\u043E \u0441\u0442\ + \u0430\u043C\u0438\u043D\u0435, 55 > 16 ~~(\u042D\u0442\u043E \u043D\u0435 \u0441\ + \u0442\u0430\u043D\u0431\u0430\u0442\u043E\u043D)~~, \u043D\u043E \u0441\u043A\ + \u043E\u0440\u043E\u0441\u0442\u044C \u0430\u0442\u0430\u043A\u0438 \u0441\u0442\ + \u0430\u043B\u0430 \u0431\u044B\u0441\u0442\u0440\u0435\u0435 \u0432 \u043D\u0435\ + \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437." + type: Tweak + id: 452 + time: '2024-08-03T12:53:19.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/544 +- author: reizor32 + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u043E\u0432\ + \u044B\u0435 \u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u043D\u0435\u043A\ + \u043E\u0442\u043E\u0440\u044B\u0435 \u0438\u043C\u0435\u043D\u0430 \u0438\u0437\ + \ \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0438\u043C\u0451\ + \u043D" + type: Fix + id: 453 + time: '2024-08-03T12:58:17.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/543 +- author: ThereDrD0 + changes: + - message: "\u0422\u0435\u043B\u0435\u0441\u043A\u043E\u043F\u0438\u0447\u043A\u0430\ + \ \u0441\u043D\u043E\u0432\u0430 \u0432\u044B\u0431\u0438\u0432\u0430\u0435\u0442\ + \ \u043F\u0440\u0435\u0434\u043C\u0435\u0442\u044B \u0438\u0437 \u0440\u0443\ + \u043A, \u0431\u044C\u0435\u0442 \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E\ + \ \u0438 \u043D\u0430\u043D\u043E\u0441\u0438\u0442 9 \u0443\u0440\u043E\u043D\ + \u0430" + type: Tweak + id: 454 + time: '2024-08-03T14:02:07.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/546 +- author: Aviu + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0447\u0442\u043E\u0431\u044B\ + \ \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\ + \u0441\u044F \u0441\u0442\u0430\u043D \u0430\u0443\u0440\u043E\u0439 \u0438\u043B\ + \u0438 \u0430\u0443\u0440\u043E\u0439 \u043A\u0440\u043E\u0432\u0430\u0432\u044B\ + \u0445 \u043E\u0431\u0440\u044F\u0434\u043E\u0432 \u043D\u0443\u0436\u043D\u043E\ + \ \u043A\u043B\u0438\u043A\u043D\u0443\u0442\u044C \u043F\u043E \u043A\u043E\ + \u0441\u043C\u043E\u043D\u0430\u0432\u0442\u0438\u043A\u0443, \u0430 \u043D\u0435\ + \ \u0443\u0434\u0430\u0440\u0438\u0442\u044C." + type: Add + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043D\u0435\u043B\u044C\u0437\u044F\ + \ \u043A\u043B\u0438\u043A\u0430\u0442\u044C \u043F\u043E \u043A\u043E\u0441\ + \u043C\u043E\u043D\u0430\u0432\u0442\u0438\u043A\u0430\u043C \u0447\u0435\u0440\ + \u0435\u0437 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435\ + \ \u043C\u0435\u043D\u044E, \u0438\u043D\u0430\u0447\u0435 \u043C\u043E\u0436\ + \u043D\u043E \u0431\u044B\u043B\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C\ + \ \u043F\u0440\u043E\u0441\u0442\u043E \u0437\u0430\u0442\u044B\u043A\u0430\u0442\ + \u044C \u0433\u0438\u043F\u043E\u0441\u043F\u0440\u0435\u0435\u043C \u0438\u043B\ + \u0438 \u043E\u0433\u043B\u0443\u0448\u0438\u0442\u044C \u043F\u0435\u0440\u0447\ + \u0430\u0442\u043A\u0430\u043C\u0438 \u043D\u0438\u043D\u0434\u0437\u044F." + type: Add + - message: "\u041D\u0430\u0440\u0441\u0438 \u0441\u043D\u043E\u0430 \u043A\u043E\ + \u0440\u0440\u0435\u043A\u0442\u043D\u043E \u0441\u043F\u0430\u0432\u043D\u0438\ + \u0442\u0441\u044F." + type: Fix + - message: "\u0414\u0438\u0430\u0433\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435\ + \ \u0440\u0435\u0448\u0435\u0442\u043A\u0438 \u0442\u0435\u043F\u0435\u0440\u044C\ + \ \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u044E\u0442 \u043B\u0430\u0437\ + \u0435\u0440\u044B." + type: Fix + - message: "\u0418\u0437 \u0442\u0430\u0440\u0430\u043A\u0430\u043D\u043E\u0432\ + \ \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0432\u044B\u043F\u0430\ + \u0434\u0430\u044E\u0442 \u043E\u0440\u0433\u0430\u043D\u044B." + type: Fix + - message: "\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u044B \u0441\u043B\ + \u044B\u0448\u0430\u0442 \u0447\u0430\u0442 \u043A\u0443\u043B\u044C\u0442\u0430\ + ." + type: Fix + - message: "NPC \u043C\u043E\u0433\u0443\u0442 \u043F\u0440\u043E\u043C\u0430\u0445\ + \u0438\u0432\u0430\u0442\u044C\u0441\u044F." + type: Fix + - message: "\u041A\u0440\u043E\u0432\u0430\u0432\u044B\u0435 \u043E\u0431\u0440\u044F\ + \u0434\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u043B\u0435\u0447\u0430\u0442\ + \ 1 \u0445\u043F \u0437\u0430 1 \u0435\u0434\u0438\u043D\u0438\u0446\u0443 \u043A\ + \u0440\u043E\u0432\u0438." + type: Tweak + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D \u0448\u0430\u043D\u0441\ + \ \u043C\u0430\u0433\u0430 \u0432 \u0441\u0435\u043A\u0440\u0435\u0442\u0435\ + \ \u0434\u043E 9%, \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D \u0448\u0430\ + \u043D\u0441 \u0440\u0435\u0432\u043E\u043B\u044E\u0446\u0438\u0438 \u0434\u043E\ + \ 10%." + type: Tweak + - message: "\u0412 \u0442\u0435\u0440\u043C\u0430\u043B\u043A\u0430\u0445 \u0431\ + \u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0432\u0438\u0434\u043D\u043E \u043A\ + \u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0432 \u0438 \u0441\u0443\ + \u0449\u0435\u0441\u0442\u0432 \u0432 \u0441\u0442\u0435\u043B\u0441\u0435." + type: Tweak + - message: "\u041E\u0442\u043A\u0430\u0442 \u0443\u043C\u0435\u043D\u044C\u0448\u0435\ + \u043D\u0438\u044F \u0434\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u0430\ + \u0442\u0430\u043A\u0438 \u043C\u0438\u043B\u0438\u0448\u0435\u043A." + type: Tweak + - message: "\u041D\u043E\u043A\u0434\u0430\u0443\u043D \u043E\u0442 \u0432\u0441\ + \u043F\u044B\u0448\u0435\u043A \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\ + \ \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043D\u0430 \u0442\u0435\ + \u0445, \u043A\u0442\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043B\ + \u0435\u0447\u044C, \u0432\u0440\u0435\u043C\u044F \u043D\u043E\u043A\u0434\u0430\ + \u0443\u043D\u0430 \u0443\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u0434\ + \u043E 10 \u0441\u0435\u043A\u0443\u043D\u0434 \u043C\u0430\u043A\u0441\u0438\ + \u043C\u0443\u043C." + type: Tweak + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0432 \u043F\u043E\u0434\u043E\ + \u0437\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u043C \u044F\u0449\u0438\ + \u043A\u0435 \u043B\u0435\u0436\u0438\u0442 \u043F\u043E\u044F\u0441 \u0441\ + \ \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430\u043C\u0438\ + ." + type: Tweak + id: 455 + time: '2024-08-03T15:23:46.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/548 +- author: ThereDrD0 + changes: + - message: "\u0411\u043E\u0440\u0433\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u043B\ + \u0438 \u043D\u043E\u0432\u044B\u0435 \u0437\u0432\u0443\u043A\u0438 \u0445\u043E\ + \u0434\u044C\u0431\u044B. \u0421\u0438\u043D\u0434\u0438\u0431\u043E\u0440\u0433\ + \u0438 \u0438 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u043D\u044B\u0435 \u0431\ + \u043E\u0440\u0433\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u043B\u0438 \u043D\ + \u043E\u0432\u044B\u0435 \u0437\u0432\u0443\u043A\u0438 \u0440\u0430\u0437\u0433\ + \u043E\u0432\u043E\u0440\u0430" + type: Add + - message: "\u0411\u043E\u0440\u0433\u043E\u0432 \u0442\u0435\u043F\u0435\u0440\u044C\ + \ \u043C\u043E\u0436\u043D\u043E \u0433\u043B\u0430\u0434\u0438\u0442\u044C" + type: Add + - message: "\u0412 \u043B\u043E\u0433\u0430\u0445 \u0434\u0432\u0435\u0440\u0435\ + \u0439 \u0442\u0435\u043F\u0435\u0440\u044C \u0441\u043E\u0445\u0440\u0430\u043D\ + \u044F\u044E\u0442\u0441\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F\ + \ \u0431\u043E\u0440\u0433\u043E\u0432" + type: Tweak + - message: "\u041C\u0435\u0434\u0431\u043E\u0440\u0433 \u0442\u0435\u043F\u0435\u0440\ + \u044C \u0440\u0430\u0437\u043B\u0438\u0447\u0430\u0435\u0442 \u0440\u0435\u0430\ + \u0433\u0435\u043D\u0442\u044B" + type: Tweak + - message: "\u0421\u0438\u043D\u0434\u0438\u0431\u043E\u0440\u0433\u0438 \u0442\u0435\ + \u043F\u0435\u0440\u044C \u0438\u043C\u0435\u044E\u0442 \u043A\u0440\u0430\u0441\ + \u043D\u044B\u0435 \u0444\u043E\u043D\u0430\u0440\u0438\u043A\u0438" + type: Tweak + - message: "\u041C\u0435\u0434\u0431\u043E\u0440\u0433 \u043F\u043E\u043B\u0443\u0447\ + \u0438\u043B \u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440 \u0437\ + \u0434\u043E\u0440\u043E\u0432\u044C\u044F" + type: Tweak + - message: "\u041C\u0435\u0434\u0431\u043E\u0440\u0433\u0438 \u043F\u043E\u043B\u0443\ + \u0447\u0438\u043B\u0438 \u043C\u0435\u0434\u0445\u0443\u0434" + type: Tweak + - message: "\u0428\u043B\u044F\u043F\u044B \u043D\u0430 \u0431\u043E\u0440\u0433\ + \u0430\u0445 \u0442\u0435\u043F\u0435\u0440\u044C \u043D\u0435 \u0441\u0434\u0432\ + \u0438\u043D\u0443\u0442\u044B \u043D\u0430 \u043F\u0438\u043A\u0441\u0435\u043B\ + \u044C" + type: Fix + - message: "\u0412 \u0431\u043E\u0440\u0433\u043E\u0432 \u0431\u043E\u043B\u044C\ + \u0448\u0435 \u043D\u0435\u043B\u044C\u0437\u044F \u0441\u0443\u043D\u0443\u0442\ + \u044C \u0434\u0432\u0430 \u043E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u044B\ + \u0445 \u043C\u043E\u0434\u0443\u043B\u044F" + type: Fix + - message: "\u0415\u043C\u0430\u0433\u043D\u0443\u0442\u044B\u0445 \u0431\u043E\u0440\ + \u0433\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u043B\u044C\ + \u0437\u044F \u043E\u043F\u043E\u0437\u043D\u0430\u0442\u044C \u043F\u043E \u043E\ + \u043F\u0438\u0441\u0430\u043D\u0438\u044E" + type: Fix + - message: "\u0415\u043C\u0430\u0433\u043D\u0443\u0442\u044B\u0435 \u0431\u043E\u0440\ + \u0433\u0438 \u0442\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0433\u0443\u0442\ + \ \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0432\ + \u043E\u0438 \u043F\u0430\u043D\u0435\u043B\u0438" + type: Fix + - message: "\u0421\u0438\u043D\u0434\u0438\u0431\u043E\u0440\u0433 \u0442\u0435\u043F\ + \u0435\u0440\u044C \u043C\u043E\u0436\u0435\u0442 \u0432\u0437\u044F\u0442\u044C\ + \ \u0441\u0432\u043E\u0439 \u0434\u0435\u0441\u0432\u043E\u0440\u0434 \u0432\ + \ \u0434\u0432\u0435 \u0440\u0443\u043A\u0438" + type: Fix + - message: "\u0411\u043E\u0440\u0433\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435\ + \ \u043D\u0435 \u0431\u044C\u0435\u0442 \u0442\u043E\u043A\u043E\u043C \u0438\ + \ \u043E\u043D\u0438 \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u043F\u043E\ + \u0441\u043A\u043E\u043B\u044C\u0437\u043D\u0443\u0442\u044C\u0441\u044F" + type: Fix + id: 456 + time: '2024-08-03T15:53:54.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/549 +- author: ThereDrD0 + changes: + - message: "\u041F\u043E\u0444\u0438\u043A\u0448\u0435\u043D\u0430 \u043F\u0440\u043E\ + \u0432\u0435\u0440\u043A\u0430 \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\ + \u044C\u043A\u043E \u043C\u043E\u0434\u0443\u043B\u0435\u0439, \u0442\u0435\u043F\ + \u0435\u0440\u044C \u043E\u043D\u0430 \u043D\u0435 \u0441\u0440\u0430\u0431\u0430\ + \u0442\u044B\u0432\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0442\u043E\u0433\ + \u0434\u0430, \u043A\u043E\u0433\u0434\u0430 \u0432 \u0431\u043E\u0440\u0433\ + \u0435 \u043D\u0435\u0442 \u043C\u043E\u0434\u0443\u043B\u0435\u0439" + type: Fix + id: 457 + time: '2024-08-03T18:31:23.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/551 diff --git a/Resources/Locale/en-US/borg/borg.ftl b/Resources/Locale/en-US/borg/borg.ftl index 2f51331a83..897f82f944 100644 --- a/Resources/Locale/en-US/borg/borg.ftl +++ b/Resources/Locale/en-US/borg/borg.ftl @@ -1,4 +1,4 @@ -borg-player-not-allowed = The brain doesn't fit! +borg-player-not-allowed = The brain doesn't fit! borg-player-not-allowed-eject = The brain was expelled from the chassis! borg-panel-not-open = The cyborg's panel isn't open... @@ -7,6 +7,7 @@ borg-mind-added = {CAPITALIZE($name)} powered on! borg-mind-removed = {CAPITALIZE($name)} shut off! borg-module-too-many = There's not enough room for another module... +borg-module-duplicate = This module is already installed in this cyborg. borg-module-whitelist-deny = This module doesn't fit in this type of cyborg... borg-construction-guide-string = The cyborg limbs and torso must be attached to the endoskeleton. diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index f816f34266..c1624f68dc 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -61,12 +61,26 @@ petting-success-honkbot = You pet {THE($target)} on {POSS-ADJ($target)} slippery petting-success-mimebot = You pet {THE($target)} on {POSS-ADJ($target)} cold metal head. petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-generic-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} metal head. +petting-success-salvage-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dirty metal head. +petting-success-engineer-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} reflective metal head. +petting-success-janitor-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. +petting-success-medical-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-service-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dapper looking metal head. +petting-success-syndicate-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} menacing metal head. petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! +petting-failure-generic-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy stating laws! +petting-failure-salvage-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy drilling! +petting-failure-engineer-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy repairing! +petting-failure-janitor-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy cleaning! +petting-failure-medical-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy saving lives! +petting-failure-service-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy serving others! +petting-failure-syndicate-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} treacherous affiliation makes you reconsider. ## Knocking on windows diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 44e23fb9fd..38c57bab1f 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -47,5 +47,3 @@ laws-ui-state-law = State law: laws-notify = You are bound to silicon laws, which you can view via the sidebar action. You are required to always follow your laws. laws-update-notify = Your laws have been updated. You can view the changes via the sidebar action. - -laws-compromised-examine = The [color=red]law-governing[/color] internals seem damaged... diff --git a/Resources/Locale/ru-RU/_white/cult/entities.ftl b/Resources/Locale/ru-RU/_white/cult/entities.ftl index 6f0853d15c..3a61c35a89 100644 --- a/Resources/Locale/ru-RU/_white/cult/entities.ftl +++ b/Resources/Locale/ru-RU/_white/cult/entities.ftl @@ -6,10 +6,10 @@ ent-SoulShardGhost = камень душ .suffix = Роль призраков ent-StunHand = оглушающая аура - .desc = Оглушит и обезмолвит жертву при ударе. + .desc = Оглушит и обезмолвит жертву при контакте. ent-RitesHand = аура кровавых обрядов - .desc = Впитывает кровь из всего, к чему прикасается. При ударе по культистам и конструктам может исцелить их. Используйте в руке, чтобы провести продвинутый обряд. + .desc = Впитывает кровь из всего, к чему прикасается. При контакте с культистами или конструктами может исцелить их. Используйте в руке, чтобы провести продвинутый обряд. ent-ShadowShackles = теневые оковы .desc = Оковы, сковывающие запястья с помощью зловещей магии. diff --git a/Resources/Locale/ru-RU/_white/loadouts/loadoutGroups.ftl b/Resources/Locale/ru-RU/_white/loadouts/loadoutGroups.ftl index f9dd40a693..04862b6a66 100644 --- a/Resources/Locale/ru-RU/_white/loadouts/loadoutGroups.ftl +++ b/Resources/Locale/ru-RU/_white/loadouts/loadoutGroups.ftl @@ -15,3 +15,4 @@ loadout-group-job-trinkets = Рабочий инвентарь loadout-group-inhand = В руках loadout-group-trinkets = Побрякушки loadout-group-instruments = Муз. инструменты +loadout-group-self-defence-devices = Средства самообороны diff --git a/Resources/Locale/ru-RU/_white/object/telebaton.ftl b/Resources/Locale/ru-RU/_white/object/telebaton.ftl index f753a2c6ba..31327974e4 100644 --- a/Resources/Locale/ru-RU/_white/object/telebaton.ftl +++ b/Resources/Locale/ru-RU/_white/object/telebaton.ftl @@ -1,4 +1,4 @@ -ent-Telebaton = телескопическая дубинка +ent-TelescopicBaton = телескопическая дубинка .desc = Компактное, но надежное оружие личной обороны. В сложенном состоянии может быть скрыто. comp-telebaton-examined-on = Дубинка в боевом положении. diff --git a/Resources/Locale/ru-RU/_white/white-shit.ftl b/Resources/Locale/ru-RU/_white/white-shit.ftl index 5ca1b1e9be..03839476dc 100644 --- a/Resources/Locale/ru-RU/_white/white-shit.ftl +++ b/Resources/Locale/ru-RU/_white/white-shit.ftl @@ -22,3 +22,5 @@ melee-block-event-blocked = заблокировал! alerts-blocked-name = Атака заблокирована alerts-blocked-desc = Невозможно блокировать некоторое время. melee-block-component-delay = Может блокировать атаку ближнего боя каждые {$delay} секунд. + +context-menu-cant-interact = Невозможно взаимодействовать через контекстное меню! diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml index 4fdd5f9fd0..c53fff8212 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -65,10 +65,8 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton #- name: StationCharter - #- name: TelescopicBaton + - type: entity noSpawn: true parent: ClothingBackpackEngineering @@ -77,9 +75,6 @@ - type: StorageFill contents: - id: BoxSurvivalEngineering - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -89,9 +84,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -101,9 +93,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -113,9 +102,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -125,9 +111,6 @@ - type: StorageFill contents: - id: BoxSurvivalMedical - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -137,9 +120,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -149,7 +129,6 @@ - type: StorageFill contents: - id: BoxSurvivalSecurity - - id: Flash - type: entity noSpawn: true diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 0b7bd825a2..9bc07949b0 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -74,10 +74,8 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton #- name: StationCharter - #- name: TelescopicBaton + - type: entity noSpawn: true parent: ClothingBackpackDuffelEngineering @@ -86,9 +84,6 @@ - type: StorageFill contents: - id: BoxSurvivalEngineering - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -98,9 +93,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -110,9 +102,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -122,9 +111,6 @@ - type: StorageFill contents: - id: BoxSurvivalMedical - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -134,9 +120,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -146,7 +129,6 @@ - type: StorageFill contents: - id: BoxSurvivalSecurity - - id: Flash - type: entity noSpawn: true diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml index ecc79c5060..82640bc76b 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -102,10 +102,8 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton #- name: StationCharter - #- name: TelescopicBaton + - type: entity noSpawn: true parent: ClothingBackpackSatchelEngineering @@ -114,9 +112,6 @@ - type: StorageFill contents: - id: BoxSurvivalEngineering - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -126,9 +121,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -138,9 +130,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -150,9 +139,6 @@ - type: StorageFill contents: - id: BoxSurvivalMedical - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -162,9 +148,6 @@ - type: StorageFill contents: - id: BoxSurvival - - id: Flash - - id: Telebaton - #- id: TelescopicBaton - type: entity noSpawn: true @@ -174,7 +157,6 @@ - type: StorageFill contents: - id: BoxSurvivalSecurity - - id: Flash - type: entity parent: ClothingBackpackSatchelInspector @@ -185,8 +167,6 @@ - type: StorageFill contents: - id: BoxSurvivalSecurity - - id: Flash - - id: Telebaton - type: entity noSpawn: true diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index e350504eaa..7066c205e7 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -112,12 +112,7 @@ components: - type: StorageFill contents: - - id: Crowbar - - id: Wrench - - id: Screwdriver - - id: Wirecutter - - id: Welder - - id: Multitool + - id: ClothingBeltUtilityEngineering - id: ClothingHandsGlovesCombat - id: ClothingMaskGasSyndicate diff --git a/Resources/Prototypes/Datasets/Names/first_female.yml b/Resources/Prototypes/Datasets/Names/first_female.yml index cbd4ce2aab..ecdafbaa18 100644 --- a/Resources/Prototypes/Datasets/Names/first_female.yml +++ b/Resources/Prototypes/Datasets/Names/first_female.yml @@ -154,6 +154,7 @@ - Криста - Кристиана - Кристина + - Ксения - Кристобель - Сиара - Синди @@ -232,7 +233,9 @@ - Евфимия - Юстас - Ева + - Екатерина - Евангелина + - Елизавета - Эвелина - Эвелина - Эвелин @@ -258,8 +261,10 @@ - Джина - Джинджер - Жизель + - Жанна - Глэдвин - Гленна + - Галина - Глория - Грейс - Грейси @@ -294,6 +299,7 @@ - Инносент - Ирен - Ирис + - Ирина - Изабель - Изабелла - Изабель @@ -356,6 +362,7 @@ - Джойе - Джулия - Юлиана + - Юлия - Джулианна - Джули - Джульетта @@ -415,8 +422,6 @@ - Кимбэрли - Кимора - Кира - - Кристен - - Кристина - Кайла - Кайли - Кира @@ -427,6 +432,7 @@ - Лалла - Лана - Латания + - Лариса - Лаура - Лорен - Лауренсия @@ -440,7 +446,6 @@ - Лейлани - Лена - Лесли - - Лесли - Лесси - Лета - Лекси @@ -452,7 +457,6 @@ - Лилиан - Лилиана - Лилиан - - Лилиана - Лилли - Лили - Линдси @@ -567,7 +571,9 @@ - Ноуэлл - Нидия - Найла + - Оксана - Олива + - Ольга - Оливия - Орали - Пейдж @@ -576,11 +582,8 @@ - Париж - Пейшенс - Патриция + - Полина - Пэйлин - - Пейтон - - Пене - - Пенелопа - - Сапсан - Перла - Пейтон - Фиби @@ -588,7 +591,6 @@ - Филисс - Филлида - Пайпер - - Порше - Пресли - Присцилла - Проспер @@ -596,6 +598,7 @@ - Киана - Рэйчел - Рэйган + - Регина - Раэлин - Рейн - Ранда @@ -624,7 +627,7 @@ - Шалфей - Салли - Саманта - - Самара + - Светлана - Сандра - Сара - Сара @@ -638,6 +641,7 @@ - Сенеса - Серена - Серенити + - Софья - Шана - Шаника - Шанна @@ -684,7 +688,6 @@ - Тори - Трейси - Трейси - - Троица - Улисса - Валари - Валентина @@ -708,3 +711,6 @@ - Иоланда - Зельда - Зои + - Зоя + - Злата + - Яна diff --git a/Resources/Prototypes/Datasets/Names/first_male.yml b/Resources/Prototypes/Datasets/Names/first_male.yml index 2001aa4101..3eb99a078b 100644 --- a/Resources/Prototypes/Datasets/Names/first_male.yml +++ b/Resources/Prototypes/Datasets/Names/first_male.yml @@ -4,21 +4,25 @@ - Айден - Аарон - Абель + - Алексей - Авраам - Адам - Адан + - Анатолий - Аден - Адольф - Адриан - Эйден - Эйден - Алан + - Аристарх - Альберт - Альберто - Олден - Алек - Алехандро - Алекс + - Афанасий - Александр - Алексис - Альфред @@ -62,6 +66,8 @@ - Беннет - Билл - Блейк + - Борис + - Бронислав - Брэдли - Брейди - Брэндон @@ -148,6 +154,8 @@ - Кертис - Сай - Дакота + - Давид + - Дмитрий - Даллас - Далтон - Дэмиан @@ -223,10 +231,12 @@ - Иезекииль - Эзра - Фабиан + - Федор - Феликс - Фентон - Фернандо - Финн + - Филипп - Фитц - Флик - Флинт @@ -268,6 +278,8 @@ - Хан - Харрисон - Гарри + - Геннадий + - Григорий - Хартли - Харви - Хейден @@ -288,6 +300,7 @@ - Исмаил - Айзек - Иван + - Илья - Изая - Джейс - Джек @@ -384,7 +397,10 @@ - Кевин - Халил - Кингстон + - Кирилл + - Клим - Коби + - Константин - Колтон - Кристофер - Кайл @@ -404,6 +420,7 @@ - Ленни - Лео - Леонард + - Леонид - Леонардо - Леонель - Лерой @@ -442,6 +459,8 @@ - Марвин - Мейсон - Матео + - Матвей + - Михаил - Мэтью - Морис - Маурисио @@ -475,10 +494,13 @@ - Нельсон - Ник - Николас + - Николай + - Никита - Ной - Ноэль - Нолан - Оливер + - Олег - Омар - Опи - Орландо @@ -489,6 +511,8 @@ - Освальд - Оуэн - Пабло + - Павел + - Петр - Пэджет - Паркер - Патрик @@ -497,6 +521,7 @@ - Пэкстон - Пэйтон - Персиваль + - Прохор - Перш - Питер - Пейтон @@ -525,6 +550,10 @@ - Райли - Ривер - Роберт + - Роман + - Родион + - Руслан + - Рудольф - Роберто - Рокко - Роджер @@ -558,6 +587,10 @@ - Скотти - Себастьян - Серджио + - Сергей + - Семен + - Станислав + - Степан - Сет - Сеймур - Шейн @@ -580,6 +613,7 @@ - Таннер - Тейт - Тейлор + - Тимур - Тел - Террелл - Терри @@ -606,7 +640,15 @@ - Уланд - Ульрик - Уриэль + - Вадим + - Вальтер + - Валентин + - Вениамин + - Вольдемар + - Всеволод - Вон + - Вячеслав + - Виталий - Виктор - Винс - Винсент @@ -634,3 +676,6 @@ - Зейден - Зик - Сион + - Эдуард + - Эрнест + - Юрий diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index 35d28aede8..812b7054dd 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -1,3 +1,15 @@ +- type: entity + id: ShowMedicalIcons + abstract: true + noSpawn: true + components: + - type: ShowHealthBars + damageContainers: + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological + - type: entity parent: ClothingEyesBase id: ClothingEyesHudDiagnostic @@ -14,7 +26,7 @@ - Silicon - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedical name: medical hud description: A heads-up display that scans the humanoids in view and provides accurate data about their health status. @@ -23,12 +35,6 @@ sprite: Clothing/Eyes/Hud/med.rsi - type: Clothing sprite: Clothing/Eyes/Hud/med.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: Tag tags: - HudMedical @@ -101,7 +107,7 @@ - type: ShowThirstIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedOnion name: medonion hud description: Filler @@ -110,16 +116,10 @@ sprite: Clothing/Eyes/Hud/medonion.rsi - type: Clothing sprite: Clothing/Eyes/Hud/medonion.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: entity - parent: ClothingEyesBase + parent: [ClothingEyesBase, ShowMedicalIcons] id: ClothingEyesHudMedOnionBeer name: medthungerst hud description: Filler @@ -128,17 +128,11 @@ sprite: Clothing/Eyes/Hud/medonionbeer.rsi - type: Clothing sprite: Clothing/Eyes/Hud/medonionbeer.rsi - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: ShowThirstIcons - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudMedSec name: medsec hud description: An eye display that looks like a mixture of medical and security huds. @@ -151,15 +145,9 @@ graph: HudMedSec node: medsecHud - type: ShowSecurityIcons - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudMultiversal name: multiversal hud description: Filler @@ -173,13 +161,10 @@ damageContainers: - Biological - Inorganic - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowSyndicateIcons - type: entity - parent: [ClothingEyesBase, SecHud] + parent: [ClothingEyesBase, SecHud, ShowMedicalIcons] id: ClothingEyesHudOmni name: omni hud description: Filler @@ -193,9 +178,6 @@ damageContainers: - Biological - Inorganic - - type: ShowHealthIcons - damageContainers: - - Biological - type: ShowHungerIcons - type: ShowThirstIcons - type: ShowSyndicateIcons diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index ce9e6b0ed1..7dd7d1750e 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -130,11 +130,17 @@ proto: robot - type: Speech speechVerb: Robotic - speechSounds: Pai + speechSounds: Borg - type: Vocal sounds: Unsexed: UnisexSilicon - type: UnblockableSpeech + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepBorg + params: + variation: 0.1 + volume: -13 - type: Construction graph: Cyborg containers: @@ -142,6 +148,8 @@ - cell_slot - type: Lock locked: true + breakOnEmag: false + unlockOnClick: false - type: ActivatableUIRequiresLock - type: LockedWiresPanel - type: Damageable @@ -207,6 +215,7 @@ tags: - ShoesRequiredStepTriggerImmune - DoorBumpOpener + - FootstepSound - CanPilot - type: Emoting - type: GuideHelp @@ -235,23 +244,30 @@ parent: BaseBorgChassis abstract: true components: - - type: NpcFactionMember - factions: - - Syndicate - - type: Access - tags: - - NuclearOperative - - SyndicateAgent - - type: AccessReader - access: [["SyndicateAgent"], ["NuclearOperative"]] - - type: SiliconLawProvider - laws: SyndicateStatic - - type: IntrinsicRadioTransmitter - channels: - - Binary - - Syndicate - - type: ActiveRadio - channels: - - Syndicate - - type: ShowSyndicateIcons - - type: MovementAlwaysTouching + - type: NpcFactionMember + factions: + - Syndicate + - type: Access + tags: + - NuclearOperative + - SyndicateAgent + - type: AccessReader + access: [["SyndicateAgent"], ["NuclearOperative"]] + - type: SiliconLawProvider + laws: SyndicateStatic + - type: IntrinsicRadioTransmitter + channels: + - Binary + - Syndicate + - type: ActiveRadio + channels: + - Syndicate + - type: ShowSyndicateIcons + - type: MovementAlwaysTouching + - type: Speech + speechSounds: SyndieBorg + - type: Vocal + sounds: + Unsexed: UnisexSiliconSyndicate + - type: PointLight + color: "#dd200b" diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 43c58d3167..643b5f5d92 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -24,6 +24,11 @@ node: cyborg - type: Speech speechVerb: Robotic + - type: InteractionPopup + interactSuccessString: petting-success-generic-cyborg + interactFailureString: petting-failure-generic-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisMining @@ -75,6 +80,13 @@ access: [["Cargo"], ["Salvage"], ["Command"], ["Research"]] - type: Inventory templateId: borgTall + - type: InteractionPopup + interactSuccessString: petting-success-salvage-cyborg + interactFailureString: petting-failure-salvage-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisEngineer @@ -118,6 +130,13 @@ access: [["Engineering"], ["Command"], ["Research"]] - type: Inventory templateId: borgShort + - type: InteractionPopup + interactSuccessString: petting-success-engineer-cyborg + interactFailureString: petting-failure-engineer-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisJanitor @@ -169,10 +188,17 @@ access: [["Service"], ["Command"], ["Research"]] - type: Inventory templateId: borgShort + - type: InteractionPopup + interactSuccessString: petting-success-janitor-cyborg + interactFailureString: petting-failure-janitor-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisMedical - parent: BaseBorgChassisNT + parent: [BaseBorgChassisNT, ShowMedicalIcons] name: medical cyborg components: - type: Sprite @@ -226,6 +252,19 @@ - type: ShowHealthIcons damageContainers: - Biological + - type: SolutionScanner + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepHoverBorg + params: + volume: -6 + - type: InteractionPopup + interactSuccessString: petting-success-medical-cyborg + interactFailureString: petting-failure-medical-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisService @@ -269,6 +308,13 @@ access: [["Service"], ["Command"], ["Research"]] - type: Inventory templateId: borgTall + - type: InteractionPopup + interactSuccessString: petting-success-service-cyborg + interactFailureString: petting-failure-service-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Speech # WD + speechSounds: BorgUpgraded - type: entity id: BorgChassisSyndicateAssault @@ -287,8 +333,6 @@ shader: unshaded map: ["light"] visible: false - - type: PointLight - color: "#dd200b" - type: BorgChassis maxModules: 3 moduleWhitelist: @@ -302,6 +346,11 @@ node: syndicateassault - type: Damageable damageModifierSet: AssaultBorg + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisSyndicateMedical @@ -331,6 +380,14 @@ noMindState: synd_medical - type: Construction node: syndicatemedical + - type: ShowHealthBars + damageContainers: + - Biological + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity id: BorgChassisSyndicateSaboteur @@ -360,3 +417,12 @@ noMindState: synd_engi - type: Construction node: syndicatesaboteur + - type: ShowHealthBars + damageContainers: + - Inorganic + - Silicon + - type: InteractionPopup + interactSuccessString: petting-success-syndicate-cyborg + interactFailureString: petting-failure-syndicate-cyborg + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 808584097f..03b8fe8348 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -375,7 +375,8 @@ damageType: Blunt damage: 10 behaviors: - - !type:GibBehavior { } + - !type:GibBehavior + recursive: false - type: NonSpreaderZombie - type: entity @@ -529,7 +530,8 @@ damageType: Blunt damage: 60 behaviors: - - !type:GibBehavior { } + - !type:GibBehavior + recursive: false - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 37930d29dc..00df2135c9 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -109,6 +109,8 @@ proto: robot - type: ZombieImmune - type: Penetrated + - type: NoSlip + - type: Insulated - type: entity parent: MobSiliconBase @@ -235,7 +237,6 @@ - type: MovementSpeedModifier baseWalkSpeed: 2 baseSprintSpeed: 3 - - type: NoSlip - type: HTN rootTask: task: CleanbotCompound @@ -248,7 +249,7 @@ path: /Audio/Ambience/Objects/periodic_beep.ogg - type: entity - parent: MobSiliconBase + parent: [MobSiliconBase, ShowMedicalIcons] id: MobMedibot name: medibot description: No substitute for a doctor, but better than nothing. @@ -282,19 +283,12 @@ - type: Construction graph: MediBot node: bot - - type: NoSlip - type: Anchorable - type: InteractionPopup interactSuccessString: petting-success-medibot interactFailureString: petting-failure-medibot interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: ShowHealthBars - damageContainers: - - Biological - - type: ShowHealthIcons - damageContainers: - - Biological - type: entity parent: MobSiliconBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 8874e16597..3ba14b0e28 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -348,12 +348,12 @@ - state: icon-treatment - type: ItemBorgModule items: + - HandheldHealthAnalyzerUnpowered - Brutepack10Lingering - Ointment10Lingering - Gauze10Lingering - Bloodpack10Lingering - Syringe - - Dropper - type: entity id: BorgModuleDefibrillator @@ -539,7 +539,7 @@ - state: icon-syndicate - type: ItemBorgModule items: - - EnergySwordBorg + - CyborgEnergySwordDouble - PinpointerSyndicateNuclear - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 7af6f1c865..685b72c962 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -757,7 +757,7 @@ - type: FlashOnTrigger range: 7 stunTime: 2 # WD - knockdownTime: 20 # WD + knockdownTime: 10 # WD - type: SpawnOnTrigger proto: GrenadeFlashEffect - type: ActiveTimerTrigger diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 8630d9df36..2c8f69a6d3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -306,3 +306,12 @@ enabled: false reflects: - Energy + +- type: entity + suffix: One-Handed, For Borgs + parent: EnergySwordDouble + id: CyborgEnergySwordDouble # why is this invalid if ID is BorgEnergySwordDouble + description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. Specially designed for syndicate cyborgs. + components: # could add energy-draining like the L6C + - type: Wieldable + freeHandsRequired: 0 # because borg has no off-hand to wield with. Without this, it will be unable to activate the esword diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 958cd0c854..d982243dfe 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -42,7 +42,7 @@ animation: WeaponArcThrust soundHit: path: /Audio/Weapons/bladeslice.ogg - range: 1.8 # Spears are long + range: 2 # Spears are long - type: DamageOtherOnHit damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 2823152405..0313a75868 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -68,7 +68,7 @@ - type: FlashOnTrigger range: 7 stunTime: 2 # WD - knockdownTime: 20 # WD + knockdownTime: 10 # WD - type: SoundOnTrigger sound: path: "/Audio/Effects/flash_bang.ogg" diff --git a/Resources/Prototypes/Entities/Structures/Walls/grille.yml b/Resources/Prototypes/Entities/Structures/Walls/grille.yml index c8092cff2f..cf25143c08 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/grille.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/grille.yml @@ -12,7 +12,7 @@ - type: RCDDeconstructable cost: 6 delay: 4 - fx: EffectRCDDeconstruct4 + fx: EffectRCDDeconstruct4 - type: Tag tags: - DeleteWithWindows @@ -200,7 +200,7 @@ mask: - FullTileMask layer: - - WallLayer + - GlassLayer - type: Construction graph: GrilleDiagonal node: grilleDiagonal @@ -235,8 +235,8 @@ mask: - FullTileMask layer: - - WallLayer + - GlassLayer - type: Construction graph: GrilleDiagonal node: clockworkGrilleDiagonal - + diff --git a/Resources/Prototypes/InventoryTemplates/borg.yml b/Resources/Prototypes/InventoryTemplates/borg.yml index a03be16708..d43519f61c 100644 --- a/Resources/Prototypes/InventoryTemplates/borg.yml +++ b/Resources/Prototypes/InventoryTemplates/borg.yml @@ -7,7 +7,7 @@ uiWindowPos: 1,0 strippingWindowPos: 0,0 displayName: Head - offset: 0, -0.09375 + offset: 0.015625, -0.09375 - type: inventoryTemplate id: borgShort @@ -18,7 +18,7 @@ uiWindowPos: 1,0 strippingWindowPos: 0,0 displayName: Head - offset: 0, -0.1875 + offset: 0.015625, -0.1875 - type: inventoryTemplate id: borgTall @@ -30,6 +30,7 @@ uiWindowPos: 0,0 strippingWindowPos: 0,0 displayName: Head + offset: 0.015625, 0 # taller than tall - type: inventoryTemplate diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/SelfDefenceDevices.yml b/Resources/Prototypes/Loadouts/Miscellaneous/SelfDefenceDevices.yml new file mode 100644 index 0000000000..c9d32e6092 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Miscellaneous/SelfDefenceDevices.yml @@ -0,0 +1,21 @@ +#/////// +# White Dream +#/////// + +- type: itemLoadout + id: TelescopicBaton + equipment: TelescopicBaton +- type: startingGear + id: TelescopicBaton + storage: + back: + - TelescopicBaton + +- type: itemLoadout + id: Flash + equipment: Flash +- type: startingGear + id: Flash + storage: + back: + - Flash diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index d63296b323..10ad0c415a 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -45,6 +45,15 @@ - NTFlag # WD # Command +- type: loadoutGroup # WD + id: SelfDefenceDevices + name: loadout-group-self-defence-devices + minLimit: 1 + maxLimit: 2 + loadouts: + - TelescopicBaton + - Flash + - type: loadoutGroup id: CaptainHead name: loadout-group-head diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index 10e6a92a78..7738d6bc71 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -13,6 +13,7 @@ - CaptainGloves # WD - CaptainShoes - CaptainPDA # WD + - SelfDefenceDevices # WD - Trinkets - type: roleLoadout @@ -30,6 +31,7 @@ - HoPOuterClothing - HoPShoes - HoPPDA # WD + - SelfDefenceDevices # WD - Trinkets # Civilian @@ -219,6 +221,7 @@ - CommonGloves # WD - QuartermasterShoes - QuartermasterPDA # WD + - SelfDefenceDevices # WD - CommonCargoJobTrinkets - Trinkets @@ -269,6 +272,7 @@ - CommonGloves # WD - ChiefEngineerShoes - ChiefEngineerPDA # WD + - SelfDefenceDevices # WD - Trinkets - type: roleLoadout @@ -341,6 +345,7 @@ - ResearchDirectorShoes - CommonScienceGloves - ResearchDirectorPDA + - SelfDefenceDevices # WD - Trinkets - type: roleLoadout @@ -404,6 +409,7 @@ - CommonSecurityBackpack - CommonSecurityShoes - HeadofSecurityPDA + - SelfDefenceDevices # WD - CommonSecurityJobTrinkets # WD - Trinkets @@ -507,6 +513,7 @@ - CommonMedicalGloves - ChiefMedicalOfficerShoes - ChiefMedicalOfficerPDA + - SelfDefenceDevices # WD - Trinkets - type: roleLoadout @@ -604,6 +611,7 @@ - InspectorShoes - InspectorPDA - BriefcaseInhand + - SelfDefenceDevices # WD - InspectorJobTrinkets - Trinkets diff --git a/Resources/Prototypes/SoundCollections/footsteps.yml b/Resources/Prototypes/SoundCollections/footsteps.yml index bd51e6b445..e179584f6f 100644 --- a/Resources/Prototypes/SoundCollections/footsteps.yml +++ b/Resources/Prototypes/SoundCollections/footsteps.yml @@ -201,3 +201,13 @@ - /Audio/Effects/Footsteps/spurs1.ogg - /Audio/Effects/Footsteps/spurs2.ogg - /Audio/Effects/Footsteps/spurs3.ogg + +- type: soundCollection + id: FootstepBorg + files: + - /Audio/Effects/Footsteps/borgwalk1.ogg + +- type: soundCollection + id: FootstepHoverBorg + files: + - /Audio/Effects/Footsteps/borgwalk2.ogg diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index 71f02a687d..cb6e4ad259 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -545,6 +545,26 @@ Ping: path: /Audio/Effects/Cargo/ping.ogg +- type: emoteSounds + id: UnisexSiliconSyndicate + params: + variation: 0.05 + sounds: + Laugh: + path: /Audio/Voice/Silicon/syndieborg_laugh.ogg + Beep: + path: /Audio/Machines/twobeep.ogg + Chime: + path: /Audio/Machines/chime.ogg + Buzz: + path: /Audio/Machines/buzz-sigh.ogg + Buzz-Two: + path: /Audio/Machines/buzz-two.ogg + Honk: + path: /Audio/Items/bikehorn.ogg + Ping: + path: /Audio/Effects/Cargo/ping.ogg + # body emotes - type: emoteSounds id: GeneralBodyEmotes diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index 2e7e7bf989..5a2b4eb425 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -52,6 +52,41 @@ exclaimSound: path: /Audio/Machines/vending_jingle.ogg +- type: speechSounds + id: Borg + saySound: + path: /Audio/Voice/Talk/pai.ogg + askSound: + path: /Audio/Voice/Talk/pai_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/pai_exclaim.ogg + +# WD edit - эти звуки слишком машинные и хладнокровные. Милые звуки пИИ намного лучше +# saySound: +# path: /Audio/Voice/Talk/Silicon/borg.ogg +# askSound: +# path: /Audio/Voice/Talk/Silicon/borg_ask.ogg +# exclaimSound: +# path: /Audio/Voice/Talk/Silicon/borg_exclaim.ogg + +- type: speechSounds + id: BorgUpgraded + saySound: + path: /Audio/Voice/Talk/Silicon/borg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/borg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/borg_exclaim.ogg + +- type: speechSounds + id: SyndieBorg + saySound: + path: /Audio/Voice/Talk/Silicon/syndieborg.ogg + askSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/Silicon/syndieborg_exclaim.ogg + - type: speechSounds id: Pai saySound: diff --git a/Resources/Prototypes/_White/Catalog/uplink.yml b/Resources/Prototypes/_White/Catalog/uplink.yml index 4eb6ad56db..fbf1470776 100644 --- a/Resources/Prototypes/_White/Catalog/uplink.yml +++ b/Resources/Prototypes/_White/Catalog/uplink.yml @@ -101,6 +101,7 @@ blacklist: tags: - NukeOpsUplink + saleLimit: 1 # Night Vision - type: listing diff --git a/Resources/Prototypes/_White/Construction/Cult/graphs.yml b/Resources/Prototypes/_White/Construction/Cult/graphs.yml index fafb578917..418dd85338 100644 --- a/Resources/Prototypes/_White/Construction/Cult/graphs.yml +++ b/Resources/Prototypes/_White/Construction/Cult/graphs.yml @@ -87,6 +87,7 @@ completed: - !type:SnapToGrid southRotation: true + - !type:CheckForStructure steps: - material: RunicMetalSheets amount: 4 diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/hands.yml b/Resources/Prototypes/_White/Entities/Cult/Items/hands.yml index c98cd99bcf..1d217d0ed3 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Items/hands.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Items/hands.yml @@ -8,15 +8,6 @@ components: - type: Item size: Ginormous - - type: MeleeWeapon - canBeBlocked: false - canHeavyAttack: false - canMiss: false - attackRate: 2 - wideAnimationRotation: 180 - damage: - types: - Heat: 0 - type: DeleteOnDropAttempt message: cult-hand-component-extra-message - type: Unremoveable @@ -35,15 +26,6 @@ state: icon - type: Item sprite: White/Cult/Entities/stun.rsi - - type: MeleeWeapon - canAttackSelf: false - attackWhitelist: - components: - - StatusEffects - attackBlacklist: - components: - - Cultist - - Construct - type: CultStunHand speech: "Fuu ma'jin!" @@ -58,11 +40,6 @@ state: icon - type: Item sprite: White/Cult/Entities/rites.rsi - - type: MeleeWeapon - attackWhitelist: - components: - - Cultist - - Construct - type: CultRitesHand speech: "Fel'th Dol Ab'orod!" - type: ActivatableUI diff --git a/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml b/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml index 64acfccdf8..eb996150ef 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml @@ -35,7 +35,7 @@ animation: WeaponArcThrust soundHit: path: /Audio/Weapons/bladeslice.ogg - range: 1.8 + range: 2 - type: DamageOtherOnHit damage: types: diff --git a/Resources/Prototypes/_White/Entities/Cult/constructs.yml b/Resources/Prototypes/_White/Entities/Cult/constructs.yml index e28c658f3d..7ed5f7e01b 100644 --- a/Resources/Prototypes/_White/Entities/Cult/constructs.yml +++ b/Resources/Prototypes/_White/Entities/Cult/constructs.yml @@ -84,6 +84,7 @@ group: Construct - type: GlobalAntagonist antagonistPrototype: globalAntagonistCult + - type: ThermalBlocker - type: entity id: JuggernautConstruct diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml index 0cda7a6807..f73459d3dd 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml @@ -41,7 +41,7 @@ - type: FlashOnTrigger range: 5 stunTime: 2 # WD - knockdownTime: 20 # WD + knockdownTime: 10 # WD - type: SpawnOnTrigger proto: GrenadeFlashEffect - type: DeleteOnTrigger diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml index ab805ea879..3e0ab8c74b 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml @@ -265,7 +265,7 @@ - type: MeleeWeapon soundHit: path: /Audio/White/Items/hit/chainhit.ogg - range: 2.2 + range: 2.5 damage: types: Blunt: 18 diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/telebaton.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/telescopic_baton.yml similarity index 88% rename from Resources/Prototypes/_White/Entities/Objects/Weapons/telebaton.yml rename to Resources/Prototypes/_White/Entities/Objects/Weapons/telescopic_baton.yml index c6ac4558f4..da46efab0d 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/telebaton.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/telescopic_baton.yml @@ -1,9 +1,19 @@ - type: entity - id: Telebaton - name: telescopic baton parent: BaseItem + id: TelescopicBaton + name: telescopic baton description: A compact yet robust personal defense weapon. Can be concealed when folded. components: + - type: TelescopicBaton + - type: Sprite + sprite: White/Objects/Weapons/telebaton.rsi + layers: + - state: telebaton_off + map: [ "enum.ToggleVisuals.Layer" ] + - type: ItemToggleSize + activatedSize: Large + activatedShape: + - 0, 0, 3, 0 - type: ItemToggle soundActivate: path: /Audio/Weapons/telescopicon.ogg @@ -13,42 +23,6 @@ path: /Audio/Weapons/telescopicoff.ogg params: volume: -5 - - type: ItemToggleSize - activatedSize: Large - activatedShape: - - 0, 0, 3, 0 - - type: DisarmMalus - malus: 0.225 - - type: Sprite - sprite: White/Objects/Weapons/telebaton.rsi - layers: - - state: telebaton_off - map: [ "enum.ToggleVisuals.Layer" ] - - type: ItemToggleMeleeWeapon - activatedDamage: - types: - Blunt: 12 - deactivatedSecret: true - - type: MeleeWeapon - canHeavyAttack: false - equipCooldown: 1 - attackRate: 0.25 - wideAnimationRotation: -135 - damage: - types: - Blunt: 0 - bluntStaminaDamageFactor: 0.0 # so blunt doesn't deal stamina damage at all - - type: StaminaDamageOnHit - damage: 55 - sound: /Audio/White/Weapons/woodhit.ogg - - type: UseDelay - - type: Item - heldPrefix: off - sprite: White/Objects/Weapons/telebaton.rsi - size: Small - storedRotation: 44 - shape: - - 0, 0, 1, 0 - type: Appearance - type: GenericVisualizer visuals: @@ -56,6 +30,37 @@ enum.ToggleVisuals.Layer: True: {state: telebaton_on} False: {state: telebaton_off} + - type: DisarmMalus + malus: 0.225 + - type: MeleeWeapon + canHeavyAttack: false + equipCooldown: 1 + attackRate: 0.3 + wideAnimationRotation: -135 + damage: + types: + Blunt: 0 + bluntStaminaDamageFactor: 0.0 # so blunt doesn't deal stamina damage at all + - type: ItemToggleMeleeWeapon + activatedDamage: + types: + Blunt: 9 + deactivatedSecret: true + - type: StaminaDamageOnHit + damage: 16 + sound: /Audio/White/Weapons/woodhit.ogg + - type: UseDelay + delay: 0.4 + - type: Item + heldPrefix: off + sprite: White/Objects/Weapons/telebaton.rsi + size: Small + storedRotation: 44 + shape: + - 0, 0, 1, 0 + - type: Clothing + quickEquip: false + slots: + - Belt - type: StaticPrice price: 150 - - type: Telebaton diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 0a48d7faae..9311b56a22 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -3,7 +3,7 @@ alias: - survival name: survival-title - showInVote: false # secret + showInVote: true description: survival-description rules: - RampingStationEventScheduler @@ -98,7 +98,7 @@ - traitor name: traitor-title description: traitor-description - showInVote: false + showInVote: true rules: - Traitor - SubGamemodesRule @@ -114,7 +114,7 @@ name: death-match-title description: death-match-description maxPlayers: 15 - showInVote: true + showInVote: false supportedMaps: DeathMatchMapPool rules: - DeathMatch31 @@ -141,7 +141,7 @@ - revolutionaries name: rev-title description: rev-description - showInVote: false + showInVote: true rules: - Revolutionary - SubGamemodesRule @@ -172,7 +172,7 @@ - pirates name: pirates-title description: pirates-description - showInVote: true + showInVote: false rules: - Pirates - BasicStationEventScheduler diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index 1e624b6b4e..95effa6e45 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -5,7 +5,7 @@ Changeling: 0.14 Nukeops: 0.14 Cult: 0.15 - Wizard: 0.15 - Revolutionary: 0.04 + Wizard: 0.09 + Revolutionary: 0.1 Zombie: 0.04 Survival: 0.04