diff --git a/Content.Server/Changeling/ChangelingSystem.Abilities.cs b/Content.Server/Changeling/ChangelingSystem.Abilities.cs index 61feff6656..2154870c19 100644 --- a/Content.Server/Changeling/ChangelingSystem.Abilities.cs +++ b/Content.Server/Changeling/ChangelingSystem.Abilities.cs @@ -4,6 +4,8 @@ using Content.Server.Administration.Systems; using Content.Server.Bible.Components; using Content.Server.Body.Components; using Content.Server.Body.Systems; +using Content.Server.Borer; +using Content.Server.Carrying; using Content.Server.Cuffs; using Content.Server.DoAfter; using Content.Server.Emp; @@ -23,6 +25,7 @@ using Content.Server.Temperature.Systems; using Content.Shared._White.Chaplain; using Content.Shared._White.Overlays; using Content.Shared.Actions; +using Content.Shared.Borer; using Content.Shared.Changeling; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Cuffs.Components; @@ -35,6 +38,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Implants.Components; +using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Miracle.UI; using Content.Shared.Mobs; @@ -85,6 +89,8 @@ public sealed partial class ChangelingSystem [Dependency] private readonly EmpSystem _empSystem = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly ServerBorerSystem _borer = default!; + [Dependency] private readonly CarryingSystem _carrying = default!; private void InitializeAbilities() { @@ -377,6 +383,13 @@ public sealed partial class ChangelingSystem var target = GetEntity(args.Target); var user = GetEntity(args.Entity); + if (!Transform(user).Coordinates.InRange(EntityManager, _transform, Transform(target).Coordinates, + SharedInteractionSystem.InteractionRange)) + { + _popup.PopupEntity(Loc.GetString("changeling-popup-transform-too-far"), user, user); + return; + } + if (!TryComp(uid, out var actorComponent)) return; @@ -757,6 +770,8 @@ public sealed partial class ChangelingSystem if (!TakeChemicals(uid, component, 5)) return; + BeforeTransform(args.User); + var polymorphEntity = _polymorph.PolymorphEntity(args.User, "MonkeyChangeling"); if (polymorphEntity == null) @@ -883,6 +898,8 @@ public sealed partial class ChangelingSystem if (!HasComp(target) && !humanoidOverride) return null; + BeforeTransform(target); + var polymorphEntity = _polymorph.PolymorphEntity(target, transformData.EntityPrototype.ID); if (polymorphEntity == null) @@ -927,6 +944,15 @@ public sealed partial class ChangelingSystem return polymorphEntity; } + private void BeforeTransform(EntityUid target) + { + if (TryComp(target, out BorerHostComponent? host) && host.BorerContainer.Count > 0) + _borer.GetOut(host.BorerContainer.ContainedEntities[0]); + + if (TryComp(target, out BeingCarriedComponent? beingCarried)) + _carrying.DropCarried(beingCarried.Carrier, target); + } + private void TransferComponents(EntityUid from, EntityUid to) { if (HasComp(from)) diff --git a/Content.Server/Inventory/ServerInventorySystem.cs b/Content.Server/Inventory/ServerInventorySystem.cs index 29d39f3723..c980057266 100644 --- a/Content.Server/Inventory/ServerInventorySystem.cs +++ b/Content.Server/Inventory/ServerInventorySystem.cs @@ -46,11 +46,19 @@ namespace Content.Server.Inventory return; var enumerator = new InventorySlotEnumerator(source.Comp); + // WD EDIT START + List<(EntityUid, string)> items = new(); while (enumerator.NextItem(out var item, out var slot)) { - if (TryUnequip(source, slot.Name, true, true, inventory: source.Comp)) - TryEquip(target, item, slot.Name , true, true, inventory: target.Comp); + items.Add((item, slot.Name)); } + + foreach (var (item, name) in items) + { + TryUnequip(source, name, true, true, inventory: source.Comp); + TryEquip(target, item, name, true, true, inventory: target.Comp); + } + // WD EDIT END } } } diff --git a/Content.Server/_White/Construction/Completions/Surgery.cs b/Content.Server/_White/Construction/Completions/Surgery.cs index 53255fa9e9..0a5380f01e 100644 --- a/Content.Server/_White/Construction/Completions/Surgery.cs +++ b/Content.Server/_White/Construction/Completions/Surgery.cs @@ -2,6 +2,7 @@ using Content.Server.Body.Systems; using Content.Shared.Body.Organ; using Content.Shared.Construction; using Content.Shared._White.CheapSurgery; +using Content.Shared.Changeling; namespace Content.Server._White.Construction.Completions; @@ -20,7 +21,8 @@ public sealed partial class Surgery : IGraphAction return; } - if (entityManager.TryGetComponent(surgeryComponent.OrganUid, out var organComponent)) + if (entityManager.TryGetComponent(surgeryComponent.OrganUid, out var organComponent) && + !entityManager.HasComponent(uid)) bodySystem.RemoveOrgan(surgeryComponent.OrganUid, organComponent); entityManager.RemoveComponent(uid); diff --git a/Content.Server/_White/Other/CritSystem/CritSystem.cs b/Content.Server/_White/Other/CritSystem/CritSystem.cs index 37c074f743..5bfca01d6a 100644 --- a/Content.Server/_White/Other/CritSystem/CritSystem.cs +++ b/Content.Server/_White/Other/CritSystem/CritSystem.cs @@ -67,7 +67,7 @@ public sealed class CritSystem : EntitySystem args.BonusDamage = new DamageSpecifier(_prototypeManager.Index("Slash"), damage - args.BaseDamage.GetTotal()); - _popup.PopupEntity($@"Crit! {damage}", args.User, PopupType.MediumCaution); + _popup.PopupEntity($"Crit! {damage}", args.User, args.User, PopupType.MediumCaution); } } diff --git a/Content.Shared/Changeling/SharedTentacleGun.cs b/Content.Shared/Changeling/SharedTentacleGun.cs index e3baa2f2ee..358eed81b4 100644 --- a/Content.Shared/Changeling/SharedTentacleGun.cs +++ b/Content.Shared/Changeling/SharedTentacleGun.cs @@ -137,7 +137,7 @@ public abstract class SharedTentacleGun : EntitySystem private bool PullMob(ProjectileEmbedEvent args) { - var stunTime = _random.Next(TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(5)); + var stunTime = _random.Next(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(3)); if (!_stunSystem.TryParalyze(args.Embedded, stunTime, true)) return false; diff --git a/Content.Shared/_White/BetrayalDagger/BackstabSystem.cs b/Content.Shared/_White/BetrayalDagger/BackstabSystem.cs index fa11986080..595f8a6c31 100644 --- a/Content.Shared/_White/BetrayalDagger/BackstabSystem.cs +++ b/Content.Shared/_White/BetrayalDagger/BackstabSystem.cs @@ -52,6 +52,6 @@ public sealed class BackstabSystem : EntitySystem return; var message = Loc.GetString("backstab-damage-betrayal-dagger", ("damage", damage)); - _popup.PopupClient(message, args.User, args.User, PopupType.MediumCaution); + _popup.PopupEntity(message, args.User, args.User, PopupType.MediumCaution); } } diff --git a/Content.Shared/_White/WhiteCVars.cs b/Content.Shared/_White/WhiteCVars.cs index 6d41fd267e..6575b93cf8 100644 --- a/Content.Shared/_White/WhiteCVars.cs +++ b/Content.Shared/_White/WhiteCVars.cs @@ -17,7 +17,7 @@ public sealed class WhiteCVars */ public static readonly CVarDef RulesWiki = - CVarDef.Create("white.wiki_rules", "https://wiki.ss14.su/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0", + CVarDef.Create("white.wiki_rules", "https://js.ss14.su/rules", CVar.SERVER | CVar.REPLICATED); /* diff --git a/Resources/Locale/ru-RU/White/changeling/changeling.ftl b/Resources/Locale/ru-RU/White/changeling/changeling.ftl index bab073c4e3..afa6cec777 100644 --- a/Resources/Locale/ru-RU/White/changeling/changeling.ftl +++ b/Resources/Locale/ru-RU/White/changeling/changeling.ftl @@ -1,4 +1,4 @@ -chat-manager-changeling-channel-name = УЛЕЙ +chat-manager-changeling-channel-name = УЛЕЙ hud-chatbox-select-channel-Changeling = Улей chat-manager-send-changeling-chat-wrap-message = [bold]\[УЛЕЙ\][/bold] [font size=13][italic][bold]{ $player }[/bold] шипит, "{ $message }"[/italic][/font] @@ -21,6 +21,7 @@ changeling-popup-cant-sting = Мы не можем ужалить это! changeling-popup-transform-no-dna = У нас нет поглощенного ДНК! changeling-popup-cant-transform-someone = Мы не можем превратит это! changeling-popup-transform-not-effective = Вирус перевоплощения не сработал! +changeling-popup-transform-too-far = Цель слишком далеко! changeling-popup-already-lesser-form = Мы уже заняли примитивную форму жизни! diff --git a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl index 4d155a6359..7ea6754f48 100644 --- a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl +++ b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl @@ -1,53 +1,53 @@ changeling-ability-fleshmend = Восстановление тканей -changeling-ability-fleshmend-desc = Быстро вылечить большую часть повреждений +changeling-ability-fleshmend-desc = Быстро вылечить большую часть повреждений. Стоит 20 химикатов. changeling-ability-biodegrade = Биоразложение -changeling-ability-biodegrade-desc = Растворяет наручники и прочие сдерживающие элементы. +changeling-ability-biodegrade-desc = Растворяет наручники и прочие сдерживающие элементы. Стоит 30 химикатов. changeling-ability-eyesight = Аугментация зрения changeling-ability-eyesight-desc = Развивает переключаемое ночное зрение. Когда способность неактивна, защищает вас от флешек и яркого света, например от сварки. changeling-ability-dissonant-shriek = Диссонирующий вопль -changeling-ability-dissonant-shriek-desc = Испускает заряд ЭМИ, который нарушает работу всего оборудования вокруг. +changeling-ability-dissonant-shriek-desc = Испускает заряд ЭМИ, который нарушает работу всего оборудования вокруг. Стоит 20 химикатов. changeling-ability-void-adaptation = Пустотная адаптация changeling-ability-void-adaptation-desc = Наделяет пассивной способностью, позволяющей сопротивляться холоду, низкому давлению и потребности в кислороде. При использовании замедляет регенерацию химикатов на 25%. changeling-ability-adrenaline-sacks = Мешки с адреналином -changeling-ability-adrenaline-sacks-desc = Дает кратковременный прилив адреналина в крови. +changeling-ability-adrenaline-sacks-desc = Дает кратковременный прилив адреналина в крови. Стоит 30 химикатов. changeling-ability-cryo-sting = Жало заморозки -changeling-ability-cryo-sting-desc = Вводит в кровь цели химикаты, которые со временем превращают её кровь в лед. +changeling-ability-cryo-sting-desc = Вводит в кровь цели химикаты, которые со временем превращают её кровь в лед. Стоит 15 химикатов. changeling-ability-hallucination-sting = Жало галлюцинаций -changeling-ability-hallucination-sting-desc = Вводит в кровь цели химикаты, вызывающие сильные галлюцинации. +changeling-ability-hallucination-sting-desc = Вводит в кровь цели химикаты, вызывающие сильные галлюцинации. Стоит 5 химикатов. changeling-ability-mute-sting = Жало безмолвия -changeling-ability-mute-sting-desc = Вводит в кровь цели химикаты, заставляющие цель замолчать за короткий срок. +changeling-ability-mute-sting-desc = Вводит в кровь цели химикаты, заставляющие цель замолчать за короткий срок. Стоит 20 химикатов. changeling-ability-blind-sting = Жало слепоты -changeling-ability-blind-sting-desc = Вводит в кровь цели химикаты, заставляющие цель временно ослепнуть. +changeling-ability-blind-sting-desc = Вводит в кровь цели химикаты, заставляющие цель временно ослепнуть. Стоит 25 химикатов. changeling-ability-transform-sting = Жало трансформации -changeling-ability-transform-sting-desc = Вводит в кровь цели вирус, заставляющий её превратиться в другое существо. +changeling-ability-transform-sting-desc = Вводит в кровь цели вирус, заставляющий её превратиться в другое существо. Стоит 50 химикатов. changeling-ability-extraction-sting = Жало извлечения -changeling-ability-extraction-sting-desc = Безшумно и безопасно извлекает ДНК из цели. +changeling-ability-extraction-sting-desc = Безшумно и безопасно извлекает ДНК из цели. Стоит 25 химикатов. changeling-ability-tentacle-arm = Рука-щупальце -changeling-ability-tentacle-arm-desc = Превращает одну из рук в щупальце, способное притягивать людей или забирать вещи из их рук. +changeling-ability-tentacle-arm-desc = Превращает одну из рук в щупальце, способное притягивать людей или забирать вещи из их рук. Стоит 10 химикатов. changeling-ability-changeling-armor = Хитиновая броня -changeling-ability-changeling-armor-desc = Надувает тело, превращая его в крепкую хитиновую броню. +changeling-ability-changeling-armor-desc = Надувает тело, превращая его в крепкую хитиновую броню. При использовании замедляет регенерацию химикатов на 25%. Стоит 20 химикатов. changeling-ability-changeling-shield = Органический щит -changeling-ability-changeling-shield-desc = Превращает одну из рук в крепкий органический щит. +changeling-ability-changeling-shield-desc = Превращает одну из рук в крепкий органический щит. Стоит 20 химикатов. changeling-ability-changeling-armblade = Рука-клинок -changeling-ability-changeling-armblade-desc = Превращает одну из рук в клинок, созданный из костей и плоти. +changeling-ability-changeling-armblade-desc = Превращает одну из рук в клинок, созданный из костей и плоти. Стоит 20 химикатов. changeling-ability-changeling-lesser-form = Примитивная форма -changeling-ability-changeling-lesser-form-desc = Превращает в самую примитивную форму. Полезно для побега из наручников. +changeling-ability-changeling-lesser-form-desc = Превращает в самую примитивную форму. Полезно для побега из наручников. Стоит 5 химикатов. ent-ActionChangelingShop = Эволюции .desc = Эволюционируйте и развивайтесь. @@ -56,10 +56,10 @@ ent-ActionChangelingAbsorb = Поглотить .desc = Поглотить существо. ent-ActionChangelingTransform = Превращение - .desc = Превратиться в одну из поглощенных личностей. + .desc = Превратиться в одну из поглощенных личностей. Стоит 5 химикатов. ent-ActionChangelingRegenerate = Регенерация - .desc = Войти в регенерирующий стазис. + .desc = Войти в регенерирующий стазис. Стоит 15 химикатов. ent-OrganicShield = органический щит .desc = Большой щит из плоти. diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index a70270252d..94122476a1 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -16,26 +16,23 @@ Slash: 0.5 Piercing: 0.5 Shock: 1.2 - Structural: 0.25 - flatReductions: - Blunt: 10 - Slash: 10 - Piercing: 10 - Heat: 10 - Structural: 10 - -- type: damageModifierSet - id: StructuralMetallic - coefficients: - Shock: 1.2 - Heat: 1.2 Structural: 0.5 flatReductions: Blunt: 10 Slash: 10 Piercing: 10 Heat: 10 - Structural: 10 + +- type: damageModifierSet + id: StructuralMetallic + coefficients: + Shock: 1.2 + Heat: 1.2 + flatReductions: + Blunt: 10 + Slash: 10 + Piercing: 10 + Heat: 10 - type: damageModifierSet id: Rock @@ -113,7 +110,6 @@ Slash: 5 Piercing: 5 Heat: 5 - Structural: 5 - type: damageModifierSet id: RGlass @@ -123,13 +119,11 @@ Piercing: 0.6 Heat: 0.5 Shock: 0 - Structural: 0.5 flatReductions: Blunt: 5 Slash: 5 Piercing: 5 Heat: 5 - Structural: 10 - type: damageModifierSet id: Wood diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 5793210b3a..1bc4fb5e98 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -165,12 +165,12 @@ - type: Armor modifiers: coefficients: - Blunt: 0.5 - Slash: 0.5 - Piercing: 0.6 - Heat: 0.5 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.5 + Heat: 0.4 - type: ExplosionResistance - damageCoefficient: 0.9 + damageCoefficient: 0.5 - type: GroupExamine - type: Unremoveable deleteOnDrop: true diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 4d6a8a4aed..9d3e8d5ae9 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -17,7 +17,7 @@ id: ClothingOuterBaseLarge components: - type: Item - size: Huge + size: Large - type: Clothing slots: - outerClothing @@ -155,4 +155,4 @@ id: ClothingOuterBaseMedium components: - type: Item - size: Huge + size: Large diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml index 9048c0b77a..0ef6ff1fb2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml @@ -125,7 +125,7 @@ ammo: reagents: - ReagentId: ChloralHydrate - Quantity: 7 + Quantity: 5 - type: SolutionTransfer maxTransferAmount: 7 - type: SpentAmmoVisuals diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index f1e467c57a..25949f933a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -194,7 +194,7 @@ sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi heldPrefix: sawn - type: Gun - fireRate: 4 + fireRate: 2 - type: BallisticAmmoProvider capacity: 2 autoCycle: true diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index 0defeb83ae..80fac33636 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -34,6 +34,7 @@ - type: Explosive explosionType: Default totalIntensity: 120 # ~ 5 tile radius + canCreateVacuum: false - type: entity id: WeldingFuelTankFull @@ -76,6 +77,7 @@ - type: Explosive explosionType: Default totalIntensity: 140 + canCreateVacuum: false # Water diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index 94ba593212..f32561c89d 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -340,6 +340,17 @@ allowRepeatedMorphs: true inventory: Transfer +- type: polymorph + id: MobHumanGhost + configuration: + entity: MobHuman + forced: true + revertOnCrit: false + revertOnDeath: false + transferDamage: true + allowRepeatedMorphs: true + inventory: Transfer + - type: polymorph id: MobGingerbread configuration: diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 574a36fa0f..38a29877f3 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -145,6 +145,7 @@ groups: Burn: -5 Brute: -5 + Airloss: -5 # for lings Toxin: -2 types: Bloodloss: -5 diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 644478f37c..56fb788940 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -248,8 +248,6 @@ Plastic: 15 Steel: 10 Glass: 5 - Plasma: 10 - Silver: 5 - type: latheRecipe id: TargetHuman diff --git a/Resources/Prototypes/White/Aspects/Aspects.yml b/Resources/Prototypes/White/Aspects/Aspects.yml index 7173056f29..3c8a784b6b 100644 --- a/Resources/Prototypes/White/Aspects/Aspects.yml +++ b/Resources/Prototypes/White/Aspects/Aspects.yml @@ -258,6 +258,7 @@ weight: 3 startAudio: path: /Audio/White/Aspects/accent.ogg + forbidden: true - type: WhisperAspect - type: entity diff --git a/Resources/Prototypes/White/Catalog/uplink.yml b/Resources/Prototypes/White/Catalog/uplink.yml index 56b9b07841..08c2a52f6a 100644 --- a/Resources/Prototypes/White/Catalog/uplink.yml +++ b/Resources/Prototypes/White/Catalog/uplink.yml @@ -87,6 +87,11 @@ Telecrystal: 12 categories: - UplinkImplants + conditions: + - !type:StoreWhitelistCondition + blacklist: + tags: + - NukeOpsUplink # Night Vision - type: listing diff --git a/Resources/Prototypes/White/Entities/Objects/Weapons/chaplain_weapons.yml b/Resources/Prototypes/White/Entities/Objects/Weapons/chaplain_weapons.yml index 5eed41f0ea..08227d1b40 100644 --- a/Resources/Prototypes/White/Entities/Objects/Weapons/chaplain_weapons.yml +++ b/Resources/Prototypes/White/Entities/Objects/Weapons/chaplain_weapons.yml @@ -202,7 +202,7 @@ slots: - back - type: Reflect - reflectProb: 0.4 + reflectProb: 0.33 - type: Item sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi