diff --git a/Content.Client/Store/Ui/StoreMenu.xaml b/Content.Client/Store/Ui/StoreMenu.xaml index fc4cbe444f..7073d0c678 100644 --- a/Content.Client/Store/Ui/StoreMenu.xaml +++ b/Content.Client/Store/Ui/StoreMenu.xaml @@ -3,7 +3,7 @@ xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client" Title="{Loc 'store-ui-default-title'}" MinSize="512 512" - SetSize="512 512"> + SetSize="768 512"> diff --git a/Content.Client/_White/Cult/UI/TeleportSpell/TeleportSpellEui.cs b/Content.Client/_White/Cult/UI/TeleportSpell/CultTeleportSpellEui.cs similarity index 71% rename from Content.Client/_White/Cult/UI/TeleportSpell/TeleportSpellEui.cs rename to Content.Client/_White/Cult/UI/TeleportSpell/CultTeleportSpellEui.cs index a6e921263e..c46f264af5 100644 --- a/Content.Client/_White/Cult/UI/TeleportSpell/TeleportSpellEui.cs +++ b/Content.Client/_White/Cult/UI/TeleportSpell/CultTeleportSpellEui.cs @@ -3,23 +3,19 @@ using Content.Client._White.Cult.UI.TeleportRunesList; using Content.Client.Eui; using Content.Shared.Eui; using Content.Shared._White.Cult.UI; +using JetBrains.Annotations; namespace Content.Client._White.Cult.UI.TeleportSpell; -public sealed class TeleportSpellEui : BaseEui +[UsedImplicitly] +public sealed class CultTeleportSpellEui : BaseEui { - - private TeleportRunesListWindow _window; - - public TeleportSpellEui() - { - _window = new TeleportRunesListWindow(); - } + private readonly TeleportRunesListWindow _window = new(); public override void Opened() { _window.OpenCentered(); - _window.ItemSelected += (index, _) => SendMessage(new TeleportSpellTargetRuneSelected(){RuneUid = index}); + _window.ItemSelected += (index, _) => SendMessage(new TeleportSpellTargetRuneSelected {RuneUid = index}); _window.OnClose += () => SendMessage(new CloseEuiMessage()); base.Opened(); @@ -33,7 +29,8 @@ public sealed class TeleportSpellEui : BaseEui public override void HandleState(EuiStateBase state) { - if(state is not TeleportSpellEuiState cast) return; + if (state is not CultTeleportSpellEuiState cast) + return; _window.Clear(); _window.PopulateList(cast.Runes.Keys.ToList(), cast.Runes.Values.ToList()); diff --git a/Content.Client/_White/Wizard/SpellBlade/SpellBladeBUI.cs b/Content.Client/_White/Wizard/SpellBlade/SpellBladeBUI.cs new file mode 100644 index 0000000000..b9fa571196 --- /dev/null +++ b/Content.Client/_White/Wizard/SpellBlade/SpellBladeBUI.cs @@ -0,0 +1,57 @@ +using Content.Client._White.UserInterface.Radial; +using Content.Shared._White.Wizard.SpellBlade; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Wizard.SpellBlade; + +[UsedImplicitly] +// ReSharper disable once InconsistentNaming +public sealed class SpellBladeBUI(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey) +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + + private RadialContainer? _aspectSelector; + + protected override void Open() + { + base.Open(); + + if (!_entityManager.TryGetComponent(Owner, out SpellBladeComponent? spellBlade) || + spellBlade.ChosenAspect != string.Empty) + return; + + var spriteSystem = _entityManager.System(); + _aspectSelector = new RadialContainer(); + + _aspectSelector.Closed += Close; + + foreach (var aspect in spellBlade.Aspects) + { + if (!_prototypeManager.TryIndex(aspect, out var proto)) + continue; + + var button = _aspectSelector.AddButton(proto.Name, + spriteSystem.GetPrototypeIcon(proto).Default); + button.Tooltip = proto.Description; + + button.Controller.OnPressed += _ => + { + SendMessage(new SpellBladeSystemMessage(aspect)); + _aspectSelector.Close(); + }; + + } + + _aspectSelector.OpenAttachedLocalPlayer(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + _aspectSelector?.Close(); + } +} diff --git a/Content.Client/_White/Wizard/SpellBlade/SpellBladeSystem.cs b/Content.Client/_White/Wizard/SpellBlade/SpellBladeSystem.cs new file mode 100644 index 0000000000..53905772c3 --- /dev/null +++ b/Content.Client/_White/Wizard/SpellBlade/SpellBladeSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared._White.Wizard.SpellBlade; + +namespace Content.Client._White.Wizard.SpellBlade; + +public sealed class SpellBladeSystem : SharedSpellBladeSystem +{ +} diff --git a/Content.Client/_White/Wizard/TeleportSpell/WizardTeleportSpellEui.cs b/Content.Client/_White/Wizard/TeleportSpell/WizardTeleportSpellEui.cs new file mode 100644 index 0000000000..613983a238 --- /dev/null +++ b/Content.Client/_White/Wizard/TeleportSpell/WizardTeleportSpellEui.cs @@ -0,0 +1,39 @@ +using System.Linq; +using Content.Client._White.Cult.UI.TeleportRunesList; +using Content.Client.Eui; +using Content.Shared._White.Wizard.Teleport; +using Content.Shared.Eui; +using JetBrains.Annotations; + +namespace Content.Client._White.Wizard.TeleportSpell; + +[UsedImplicitly] +public sealed class WizardTeleportSpellEui : BaseEui +{ + private readonly TeleportRunesListWindow _window = new(); + + public override void Opened() + { + _window.OpenCentered(); + _window.ItemSelected += + (index, _) => SendMessage(new TeleportSpellTargetLocationSelected {LocationUid = index}); + _window.OnClose += () => SendMessage(new CloseEuiMessage()); + + base.Opened(); + } + + public override void Closed() + { + base.Closed(); + _window.Close(); + } + + public override void HandleState(EuiStateBase state) + { + if (state is not WizardTeleportSpellEuiState cast) + return; + + _window.Clear(); + _window.PopulateList(cast.Locations.Keys.ToList(), cast.Locations.Values.ToList()); + } +} diff --git a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs index 9f73be86a8..d9af71f001 100644 --- a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.Atmos.Components; +using Content.Shared._White.Cult.Components; using Content.Shared.Alert; using Content.Shared.Atmos; using Content.Shared.Damage; @@ -262,7 +263,7 @@ public sealed class BarotraumaSystem : EntitySystem voidAdaptation.ChemMultiplier = 0.75f; ActNormalPressure(uid, barotrauma, pressure); break; - case <= Atmospherics.HazardLowPressure: + case <= Atmospherics.HazardLowPressure when !HasComp(uid): // WD EDIT ActLowPressure(uid, barotrauma); break; case >= Atmospherics.HazardHighPressure: @@ -333,4 +334,4 @@ public sealed class BarotraumaSystem : EntitySystem break; } } -} \ No newline at end of file +} diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index 72835e7819..84f7616675 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -1,3 +1,4 @@ +using Content.Server._White.Wizard.SpellBlade; using Content.Server.Administration.Logs; using Content.Server.Atmos.Components; using Content.Server.IgnitionSource; @@ -49,6 +50,7 @@ namespace Content.Server.Atmos.EntitySystems [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SpellBladeSystem _spellBlade = default!; // WD public const float MinimumFireStacks = -10f; public const float MaximumFireStacks = 20f; @@ -84,13 +86,19 @@ namespace Content.Server.Atmos.EntitySystems private void OnMeleeHit(EntityUid uid, IgniteOnMeleeHitComponent component, MeleeHitEvent args) { + // WD START + var fireStacks = component.FireStacks; + if (args.Direction != null) // Heavy attack + fireStacks *= 0.5f; + // WD END + foreach (var entity in args.HitEntities) { if (!TryComp(entity, out var flammable)) continue; - AdjustFireStacks(entity, component.FireStacks, flammable); - if (component.FireStacks >= 0) + AdjustFireStacks(entity, fireStacks, flammable); // WD EDIT + if (fireStacks >= 0) // WD EDIT Ignite(entity, args.Weapon, flammable, args.User); } } @@ -203,8 +211,15 @@ namespace Content.Server.Atmos.EntitySystems if (!flammable.OnFire && !otherFlammable.OnFire) return; // Neither are on fire + // WD START + var weHold = _spellBlade.IsHoldingItemWithComponent(uid); + var theyHold = _spellBlade.IsHoldingItemWithComponent(otherUid); + // WD END + if (flammable.OnFire && otherFlammable.OnFire) { + if (weHold && !theyHold || theyHold && !weHold) // WD + return; // Both are on fire -> equalize fire stacks. var avg = (flammable.FireStacks + otherFlammable.FireStacks) / 2; flammable.FireStacks = flammable.CanExtinguish ? avg : Math.Max(flammable.FireStacks, avg); @@ -217,6 +232,8 @@ namespace Content.Server.Atmos.EntitySystems // Only one is on fire -> attempt to spread the fire. if (flammable.OnFire) { + if (theyHold) // WD + return; otherFlammable.FireStacks += flammable.FireStacks / 2; Ignite(otherUid, uid, otherFlammable); if (flammable.CanExtinguish) @@ -227,6 +244,8 @@ namespace Content.Server.Atmos.EntitySystems } else { + if (weHold) // WD + return; flammable.FireStacks += otherFlammable.FireStacks / 2; Ignite(uid, otherUid, flammable); if (otherFlammable.CanExtinguish) @@ -436,7 +455,8 @@ namespace Content.Server.Atmos.EntitySystems if (TryComp(uid, out TemperatureComponent? temp)) _temperatureSystem.ChangeHeat(uid, 12500 * damageScale, false, temp); - _damageableSystem.TryChangeDamage(uid, flammable.Damage * damageScale, interruptsDoAfters: false); + if (!_spellBlade.IsHoldingItemWithComponent(uid)) // WD EDIT + _damageableSystem.TryChangeDamage(uid, flammable.Damage * damageScale, interruptsDoAfters: false); AdjustFireStacks(uid, flammable.FirestackFade * (flammable.Resisting ? 10f : 1f), flammable); } diff --git a/Content.Server/Magic/MagicSystem.cs b/Content.Server/Magic/MagicSystem.cs index 811fa96bb9..c970588ad7 100644 --- a/Content.Server/Magic/MagicSystem.cs +++ b/Content.Server/Magic/MagicSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using System.Numerics; +using Content.Server._White.Wizard.Magic; using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Server.Chat.Systems; @@ -44,6 +45,7 @@ public sealed class MagicSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly WizardSpellsSystem _wizardSpells = default!; public override void Initialize() { @@ -157,7 +159,7 @@ public sealed class MagicSystem : EntitySystem private void OnKnockSpell(KnockSpellEvent args) { - if (args.Handled) + if (!_wizardSpells.CanCast(args)) // WD EDIT return; args.Handled = true; @@ -180,7 +182,7 @@ public sealed class MagicSystem : EntitySystem private void OnSmiteSpell(SmiteSpellEvent ev) { - if (ev.Handled) + if (!_wizardSpells.CanCast(ev)) // WD EDIT return; ev.Handled = true; diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs index 685874624e..bc44304679 100644 --- a/Content.Server/Temperature/Systems/TemperatureSystem.cs +++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Server._White.Wizard.SpellBlade; using Content.Server.Administration.Logs; using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; @@ -22,6 +23,7 @@ public sealed class TemperatureSystem : EntitySystem [Dependency] private readonly AtmosphereSystem _atmosphere = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly SpellBladeSystem _spellBlade = default!; // WD /// /// All the components that will have their damage updated at the end of the tick. @@ -266,6 +268,17 @@ public sealed class TemperatureSystem : EntitySystem if (temperature.CurrentTemperature >= heatDamageThreshold) { + // WD START + if (_spellBlade.IsHoldingItemWithComponent(uid)) + { + if (!temperature.TakingDamage) + return; + _adminLogger.Add(LogType.Temperature, + $"{ToPrettyString(uid):entity} stopped taking temperature damage"); + temperature.TakingDamage = false; + return; + } + // WD END if (!temperature.TakingDamage) { _adminLogger.Add(LogType.Temperature, $"{ToPrettyString(uid):entity} started taking high temperature damage"); @@ -278,7 +291,8 @@ public sealed class TemperatureSystem : EntitySystem } else if (temperature.CurrentTemperature <= coldDamageThreshold) { - if (TryComp(uid, out VoidAdaptationComponent? voidAdaptation)) // WD + // WD START + if (TryComp(uid, out VoidAdaptationComponent? voidAdaptation)) { if (temperature.TakingDamage) { @@ -291,6 +305,17 @@ public sealed class TemperatureSystem : EntitySystem return; } + if (_spellBlade.IsHoldingItemWithComponent(uid)) + { + if (!temperature.TakingDamage) + return; + _adminLogger.Add(LogType.Temperature, + $"{ToPrettyString(uid):entity} stopped taking temperature damage"); + temperature.TakingDamage = false; + return; + } + // WD END + if (!temperature.TakingDamage) { _adminLogger.Add(LogType.Temperature, $"{ToPrettyString(uid):entity} started taking low temperature damage"); diff --git a/Content.Server/_White/ChangeTemperatureOnCollide/LowTemperatureSlowdownSystem.cs b/Content.Server/_White/ChangeTemperatureOnCollide/LowTemperatureSlowdownSystem.cs index cb1c676496..ac43c5dcef 100644 --- a/Content.Server/_White/ChangeTemperatureOnCollide/LowTemperatureSlowdownSystem.cs +++ b/Content.Server/_White/ChangeTemperatureOnCollide/LowTemperatureSlowdownSystem.cs @@ -1,3 +1,4 @@ +using Content.Server._White.Wizard.SpellBlade; using Content.Server.Temperature.Components; using Content.Server.Temperature.Systems; using Content.Shared.Changeling; @@ -10,6 +11,7 @@ namespace Content.Server._White.ChangeTemperatureOnCollide; public sealed class LowTemperatureSlowdownSystem : EntitySystem { [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifierSystem = default!; + [Dependency] private readonly SpellBladeSystem _spellBlade = default!; public override void Initialize() { @@ -22,7 +24,8 @@ public sealed class LowTemperatureSlowdownSystem : EntitySystem private void OnMoveSpeedRefresh(EntityUid uid, TemperatureComponent component, RefreshMovementSpeedModifiersEvent args) { - var modifier = HasComp(uid) || HasComp(uid) || !component.Slowdown + var modifier = _spellBlade.IsHoldingItemWithComponent(uid) || + HasComp(uid) || HasComp(uid) || !component.Slowdown ? 1f : GetSpeedModifier(component.CurrentTemperature); args.ModifySpeed(modifier, modifier); @@ -32,7 +35,7 @@ public sealed class LowTemperatureSlowdownSystem : EntitySystem OnTemperatureChangeEvent args) { // ReSharper disable once CompareOfFloatsByEqualityOperator - if(GetSpeedModifier(args.LastTemperature) == GetSpeedModifier(args.CurrentTemperature)) + if (GetSpeedModifier(args.LastTemperature) == GetSpeedModifier(args.CurrentTemperature)) return; _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(uid, component); diff --git a/Content.Server/_White/Cult/Items/Systems/BloodBoilProjectileSystem.cs b/Content.Server/_White/Cult/Items/Systems/BloodBoilProjectileSystem.cs index f67c35f928..2de9f2b3c6 100644 --- a/Content.Server/_White/Cult/Items/Systems/BloodBoilProjectileSystem.cs +++ b/Content.Server/_White/Cult/Items/Systems/BloodBoilProjectileSystem.cs @@ -1,6 +1,6 @@ using Content.Server._White.Cult.Items.Components; using Content.Server._White.Cult.TimedProduction; -using Content.Shared._White.Cult; +using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Pylon; using Robust.Shared.Physics.Events; using CultistComponent = Content.Shared._White.Cult.Components.CultistComponent; diff --git a/Content.Server/_White/Cult/Pylon/PylonSystem.cs b/Content.Server/_White/Cult/Pylon/PylonSystem.cs index 8c658b8d62..1673a4ca90 100644 --- a/Content.Server/_White/Cult/Pylon/PylonSystem.cs +++ b/Content.Server/_White/Cult/Pylon/PylonSystem.cs @@ -3,6 +3,7 @@ using System.Numerics; using Content.Server.Atmos.Piping.Other.Components; using Content.Server.Body.Components; using Content.Server.Body.Systems; +using Content.Shared._White.Cult.Components; using Content.Shared.Damage; using Content.Shared.Doors.Components; using Content.Shared.Interaction; diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs index e1fe8b31cc..6004d21a1b 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs @@ -148,7 +148,7 @@ public partial class CultSystem _bloodstreamSystem.TryModifyBloodLevel(uid, -5, bloodstream, createPuddle: false); - var eui = new TeleportSpellEui(args.Performer, args.Target); + var eui = new CultTeleportSpellEui(args.Performer, args.Target); _euiManager.OpenEui(eui, actor.PlayerSession); eui.StateDirty(); diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.ConstructsAbilities.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.ConstructsAbilities.cs index 58bb189935..ec080f7f28 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.ConstructsAbilities.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.ConstructsAbilities.cs @@ -11,6 +11,7 @@ using Content.Shared.Mobs.Components; using Content.Shared.Physics; using Content.Shared.StatusEffect; using Content.Shared._White.Cult; +using Content.Shared._White.Cult.Components; namespace Content.Server._White.Cult.Runes.Systems; diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs index 3cf9396574..919974f7d5 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs @@ -37,7 +37,6 @@ using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Runes; using Content.Shared._White.Cult.UI; using Content.Shared.Cuffs; -using Content.Shared.FixedPoint; using Content.Shared.GameTicking; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs.Systems; @@ -597,13 +596,14 @@ public sealed partial class CultSystem : EntitySystem private bool AddCultistBuff(EntityUid target, EntityUid user) { - if (HasComp(target)) + if (TryComp(target, out var buff) && buff.BuffTime > buff.BuffLimit) { _popupSystem.PopupEntity(Loc.GetString("cult-buff-already-buffed"), user, user); return false; } - EnsureComp(target); + buff = EnsureComp(target); + buff.BuffTime = buff.StartingBuffTime; return true; } @@ -631,6 +631,18 @@ public sealed partial class CultSystem : EntitySystem } private bool Teleport(EntityUid rune, EntityUid user, List? victims = null) + { + if (!OpenTeleportUi(user, rune)) + return false; + + _entityManager.EnsureComponent(user, out var providerComponent); + providerComponent.Targets = victims; + providerComponent.BaseRune = rune; + + return true; + } + + private bool OpenTeleportUi(EntityUid user, EntityUid? exceptRune = null) { var runesQuery = EntityQueryEnumerator(); var list = new List(); @@ -641,7 +653,7 @@ public sealed partial class CultSystem : EntitySystem if (teleportComponent.Label == null) continue; - if (runeUid == rune) + if (runeUid == exceptRune) continue; if (!int.TryParse(runeUid.ToString(), out var intValue)) @@ -665,10 +677,6 @@ public sealed partial class CultSystem : EntitySystem return false; } - _entityManager.EnsureComponent(user, out var providerComponent); - providerComponent.Targets = victims; - providerComponent.BaseRune = rune; - _ui.SetUiState(ui, new TeleportRunesListWindowBUIState(list, labels)); if (_ui.IsUiOpen(user, ui.UiKey)) @@ -868,7 +876,10 @@ public sealed partial class CultSystem : EntitySystem return false; if (!_mobState.IsDead(target, mobState)) + { + _popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-already-alive"), user, user); return false; + } var airlossGroup = _prototypeManager.Index("Airloss"); @@ -878,7 +889,10 @@ public sealed partial class CultSystem : EntitySystem { var afterHeal = damageable.TotalDamage - toHeal; if (deadThreshold <= afterHeal) + { + _popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-too-damaged"), user, user); return false; + } var asphyxType = _prototypeManager.Index("Asphyxiation"); var bloodlossType = _prototypeManager.Index("Bloodloss"); diff --git a/Content.Server/_White/Cult/UI/TeleportSpellEui.cs b/Content.Server/_White/Cult/UI/CultTeleportSpellEui.cs similarity index 95% rename from Content.Server/_White/Cult/UI/TeleportSpellEui.cs rename to Content.Server/_White/Cult/UI/CultTeleportSpellEui.cs index 0947aec86a..8d568dc7cc 100644 --- a/Content.Server/_White/Cult/UI/TeleportSpellEui.cs +++ b/Content.Server/_White/Cult/UI/CultTeleportSpellEui.cs @@ -10,7 +10,7 @@ using Robust.Shared.Timing; namespace Content.Server._White.Cult.UI; -public sealed class TeleportSpellEui : BaseEui +public sealed class CultTeleportSpellEui : BaseEui { [Dependency] private readonly EntityManager _entityManager = default!; private readonly SharedTransformSystem _transformSystem; @@ -22,7 +22,7 @@ public sealed class TeleportSpellEui : BaseEui private bool _used; - public TeleportSpellEui(EntityUid performer, EntityUid target) + public CultTeleportSpellEui(EntityUid performer, EntityUid target) { IoCManager.InjectDependencies(this); @@ -39,7 +39,7 @@ public sealed class TeleportSpellEui : BaseEui public override EuiStateBase GetNewState() { var runesQuery = _entityManager.EntityQueryEnumerator(); - var state = new TeleportSpellEuiState(); + var state = new CultTeleportSpellEuiState(); while (runesQuery.MoveNext(out var runeUid, out var rune)) { @@ -110,4 +110,4 @@ public sealed class TeleportSpellEui : BaseEui _transformSystem.SetCoordinates(_target, runeTransform.Coordinates); Close(); } -} \ No newline at end of file +} diff --git a/Content.Server/_White/Keyhole/KeyholeSystem.cs b/Content.Server/_White/Keyhole/KeyholeSystem.cs index db632f0d93..af580f2185 100644 --- a/Content.Server/_White/Keyhole/KeyholeSystem.cs +++ b/Content.Server/_White/Keyhole/KeyholeSystem.cs @@ -1,5 +1,5 @@ using System.Diagnostics; -using Content.Server._White.Cult.Structures; +using Content.Shared._White.Cult.Structures; using Content.Shared._White.Keyhole.Components; using Content.Shared._White.Keyhole; using Content.Shared.DoAfter; @@ -120,4 +120,4 @@ public sealed class KeyholeSystem : EntitySystem _popupSystem.PopupEntity(Loc.GetString("key-pressed-in-keyform-message", ("user", user), ("key", uid)), uid); } } -} \ No newline at end of file +} diff --git a/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs b/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs index 2dfa6ca016..6c0dec15af 100644 --- a/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs +++ b/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs @@ -105,7 +105,7 @@ public sealed class WizardSpellsSystem : EntitySystem if (!TryComp(msg.Performer, out ActorComponent? actor)) return; - var eui = new TeleportSpellEui(msg.Performer); + var eui = new WizardTeleportSpellEui(msg.Performer); _euiManager.OpenEui(eui, actor.PlayerSession); eui.StateDirty(); @@ -736,7 +736,7 @@ public sealed class WizardSpellsSystem : EntitySystem RaiseLocalEvent(uid, new EnergyDomeClothesTurnOffEvent()); } - private bool CanCast(BaseActionEvent msg) + public bool CanCast(BaseActionEvent msg) { return !msg.Handled && CheckRequirements(msg.Action, msg.Performer) && !_statusEffectsSystem.HasStatusEffect(msg.Performer, "Incorporeal"); diff --git a/Content.Server/_White/Wizard/SpellBlade/FireAspectComponent.cs b/Content.Server/_White/Wizard/SpellBlade/FireAspectComponent.cs new file mode 100644 index 0000000000..9c787a3d86 --- /dev/null +++ b/Content.Server/_White/Wizard/SpellBlade/FireAspectComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._White.Wizard.SpellBlade; + +[RegisterComponent] +public sealed partial class FireAspectComponent : Component +{ +} diff --git a/Content.Server/_White/Wizard/SpellBlade/FrostAspectComponent.cs b/Content.Server/_White/Wizard/SpellBlade/FrostAspectComponent.cs new file mode 100644 index 0000000000..8c3f6dd5fa --- /dev/null +++ b/Content.Server/_White/Wizard/SpellBlade/FrostAspectComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared.Atmos; + +namespace Content.Server._White.Wizard.SpellBlade; + +[RegisterComponent] +public sealed partial class FrostAspectComponent : Component +{ + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float TemperatureOnHit = 100; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MinTemperature = Atmospherics.TCMB; +} diff --git a/Content.Server/_White/Wizard/SpellBlade/LightningAspectComponent.cs b/Content.Server/_White/Wizard/SpellBlade/LightningAspectComponent.cs new file mode 100644 index 0000000000..597a1531b5 --- /dev/null +++ b/Content.Server/_White/Wizard/SpellBlade/LightningAspectComponent.cs @@ -0,0 +1,22 @@ +namespace Content.Server._White.Wizard.SpellBlade; + +[RegisterComponent] +public sealed partial class LightningAspectComponent : Component +{ + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Range = 2f; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public int BoltCount = 3; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string LightningPrototype = "WeakWizardLightning"; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public int ArcDepth = 2; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public TimeSpan ShockRate = TimeSpan.FromSeconds(10); + + public TimeSpan NextShock; +} diff --git a/Content.Server/_White/Wizard/SpellBlade/SpellBladeSystem.cs b/Content.Server/_White/Wizard/SpellBlade/SpellBladeSystem.cs new file mode 100644 index 0000000000..64df84d8fe --- /dev/null +++ b/Content.Server/_White/Wizard/SpellBlade/SpellBladeSystem.cs @@ -0,0 +1,79 @@ +using Content.Server.Atmos.Components; +using Content.Server.Lightning; +using Content.Server.Temperature.Components; +using Content.Server.Temperature.Systems; +using Content.Shared._White.Wizard.SpellBlade; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Timing; + +namespace Content.Server._White.Wizard.SpellBlade; + +public sealed class SpellBladeSystem : SharedSpellBladeSystem +{ + [Dependency] private readonly TemperatureSystem _temperature = default!; + [Dependency] private readonly LightningSystem _lightning = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnFrostMeleeHit); + SubscribeLocalEvent(OnLightningMeleeHit); + } + + private void OnLightningMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (args.Direction != null || args.HitEntities.Count != 1) + return; + + if (ent.Comp.NextShock > _timing.CurTime) + return; + + ent.Comp.NextShock = _timing.CurTime + ent.Comp.ShockRate; + + _lightning.ShootRandomLightnings(args.HitEntities[0], ent.Comp.Range, ent.Comp.BoltCount, + ent.Comp.LightningPrototype, ent.Comp.ArcDepth, false, args.User); + } + + private void OnFrostMeleeHit(Entity ent, ref MeleeHitEvent args) + { + var temp = ent.Comp.TemperatureOnHit; + if (args.Direction != null) // Heavy attack + temp *= 0.5f; + + foreach (var entity in args.HitEntities) + { + if (!TryComp(entity, out var temperature)) + continue; + + var curTemp = temperature.CurrentTemperature; + var newTemp = curTemp - temp; + + newTemp = curTemp < ent.Comp.MinTemperature + ? MathF.Min(curTemp, newTemp) + : Math.Max(newTemp, ent.Comp.MinTemperature); + + _temperature.ForceChangeTemperature(entity, newTemp, temperature); + } + } + + protected override void ApplyFireAspect(EntityUid uid) + { + var ignite = EnsureComp(uid); + ignite.FireStacks = 2f; + EnsureComp(uid); + } + + protected override void ApplyFrostAspect(EntityUid uid) + { + var ignite = EnsureComp(uid); + ignite.FireStacks = -5f; + EnsureComp(uid); + } + + protected override void ApplyLightningAspect(EntityUid uid) + { + EnsureComp(uid); + } +} diff --git a/Content.Server/_White/Wizard/Teleport/TeleportLocationSystem.cs b/Content.Server/_White/Wizard/Teleport/TeleportLocationSystem.cs index 6091017938..0a808b6fe6 100644 --- a/Content.Server/_White/Wizard/Teleport/TeleportLocationSystem.cs +++ b/Content.Server/_White/Wizard/Teleport/TeleportLocationSystem.cs @@ -1,11 +1,17 @@ using Content.Server.Pinpointer; +using Content.Server.Station.Systems; using Content.Server.Warps; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Maps; +using Content.Shared.Physics; namespace Content.Server._White.Wizard.Teleport; public sealed class TeleportLocationSystem : EntitySystem { [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly TurfSystem _turf = default!; public override void Initialize() { @@ -20,10 +26,30 @@ public sealed class TeleportLocationSystem : EntitySystem if (!TryComp(ent, out WarpPointComponent? warpPoint) || warpPoint.Location == null) return; - var newEnt = Spawn(null, Transform(ent).Coordinates); - var xForm = EnsureComp(newEnt); - _transformSystem.AttachToGridOrMap(newEnt, xForm); + var xForm = Transform(ent); + + if (!CanTeleport(ent, xForm)) + return; + + var newEnt = Spawn(null, xForm.Coordinates); + var newXForm = EnsureComp(newEnt); + _transformSystem.AttachToGridOrMap(newEnt, newXForm); var location = EnsureComp(newEnt); location.Location = warpPoint.Location; } + + public bool CanTeleport(EntityUid uid, TransformComponent xForm) + { + var station = _station.GetOwningStation(uid, xForm); + + if (!HasComp(station)) + return false; + + var turf = xForm.Coordinates.SnapToGrid(EntityManager).GetTileRef(EntityManager); + + if (turf == null) + return false; + + return !_turf.IsTileBlocked(turf.Value, CollisionGroup.Impassable); + } } diff --git a/Content.Server/_White/Wizard/Teleport/TeleportLocationTargetStationComponent.cs b/Content.Server/_White/Wizard/Teleport/TeleportLocationTargetStationComponent.cs new file mode 100644 index 0000000000..bb6a106a17 --- /dev/null +++ b/Content.Server/_White/Wizard/Teleport/TeleportLocationTargetStationComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._White.Wizard.Teleport; + +[RegisterComponent] +public sealed partial class TeleportLocationTargetStationComponent : Component +{ +} diff --git a/Content.Server/_White/Wizard/Teleport/WizardTeleportSpellEui.cs b/Content.Server/_White/Wizard/Teleport/WizardTeleportSpellEui.cs new file mode 100644 index 0000000000..2aa84f1f22 --- /dev/null +++ b/Content.Server/_White/Wizard/Teleport/WizardTeleportSpellEui.cs @@ -0,0 +1,95 @@ +using Content.Server.EUI; +using Content.Server.Popups; +using Content.Shared._White.Wizard.Teleport; +using Content.Shared.Eui; +using Robust.Shared.Timing; + +namespace Content.Server._White.Wizard.Teleport; + +public sealed class WizardTeleportSpellEui : BaseEui +{ + [Dependency] private readonly EntityManager _entityManager = default!; + private readonly SharedTransformSystem _transformSystem; + private readonly TeleportLocationSystem _teleportLocation; + private readonly PopupSystem _popupSystem; + + private readonly EntityUid _performer; + + private bool _used; + + public WizardTeleportSpellEui(EntityUid performer) + { + IoCManager.InjectDependencies(this); + + _transformSystem = _entityManager.System(); + _teleportLocation = _entityManager.System(); + _popupSystem = _entityManager.System(); + + _performer = performer; + + Timer.Spawn(TimeSpan.FromSeconds(60), Close); + } + + public override EuiStateBase GetNewState() + { + var locationQuery = _entityManager.EntityQueryEnumerator(); + var state = new WizardTeleportSpellEuiState(); + + while (locationQuery.MoveNext(out var locationUid, out var locationComponent, out var transformComponent)) + { + if (_teleportLocation.CanTeleport(locationUid, transformComponent)) + state.Locations.Add((int) locationUid, locationComponent.Location); + } + + return state; + } + + public override void HandleMessage(EuiMessageBase msg) + { + base.HandleMessage(msg); + + if (_used) + { + return; + } + + if (msg is not TeleportSpellTargetLocationSelected cast) + { + return; + } + + var transform = _entityManager.GetComponent(_performer); + var oldCoords = transform.Coordinates; + + TransformComponent? locationTransform = null; + + var teleportLocationQuery = _entityManager + .EntityQueryEnumerator(); + while (teleportLocationQuery.MoveNext(out var locationUid, out _, out var transformComponent)) + { + if (locationUid == new EntityUid(cast.LocationUid)) + { + locationTransform = transformComponent; + } + } + + if (locationTransform is null) + { + _popupSystem.PopupEntity("Can't teleport", _performer, _performer); + DoStateUpdate(); + return; + } + + _used = true; + + var coords = locationTransform.Coordinates; + + _transformSystem.SetCoordinates(_performer, coords); + _transformSystem.AttachToGridOrMap(_performer, transform); + + _entityManager.SpawnEntity("AdminInstantEffectSmoke10", oldCoords); + _entityManager.SpawnEntity("AdminInstantEffectSmoke10", coords); + + Close(); + } +} diff --git a/Content.Server/_White/Wizard/WizardRuleComponent.cs b/Content.Server/_White/Wizard/WizardRuleComponent.cs index dd37c8128a..271dffcbca 100644 --- a/Content.Server/_White/Wizard/WizardRuleComponent.cs +++ b/Content.Server/_White/Wizard/WizardRuleComponent.cs @@ -14,7 +14,7 @@ public sealed partial class WizardRuleComponent : Component { public readonly List WizardMinds = new(); - [ViewVariables(VVAccess.ReadWrite)] + [ViewVariables] public EntityUid? TargetStation; [DataField("minPlayers")] diff --git a/Content.Server/_White/Wizard/WizardRuleSystem.cs b/Content.Server/_White/Wizard/WizardRuleSystem.cs index fedc51e296..c5b45ef761 100644 --- a/Content.Server/_White/Wizard/WizardRuleSystem.cs +++ b/Content.Server/_White/Wizard/WizardRuleSystem.cs @@ -310,7 +310,7 @@ public sealed class WizardRuleSystem : GameRuleSystem if (meta.EntityPrototype?.ID != component.SpawnPointProto.Id) continue; - if (xform.ParentUid != component.ShuttleMap) + if (xform.MapUid != component.ShuttleMap) continue; spawn = xform.Coordinates; diff --git a/Content.Shared/Changeling/ChangelingComponent.cs b/Content.Shared/Changeling/ChangelingComponent.cs index f4ddb6e875..ef3efdfa6c 100644 --- a/Content.Shared/Changeling/ChangelingComponent.cs +++ b/Content.Shared/Changeling/ChangelingComponent.cs @@ -24,7 +24,7 @@ public sealed partial class ChangelingComponent : Component public float Accumulator; [ViewVariables(VVAccess.ReadOnly)] - public float UpdateDelay = 8f; + public float UpdateDelay = 6f; [ViewVariables(VVAccess.ReadOnly)] public bool IsRegenerating; diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 4dfeef61c9..6aa3ff48eb 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Shared._White.Cult.Structures; using Content.Shared._White.Keyhole.Components; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; @@ -41,6 +42,7 @@ public abstract partial class SharedDoorSystem : EntitySystem [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!; [Dependency] private readonly PryingSystem _pryingSystem = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly RunicDoorSystem _runicDoor = default!; // WD [ValidatePrototypeId] public const string DoorBumpTag = "DoorBumpOpener"; @@ -649,6 +651,9 @@ public abstract partial class SharedDoorSystem : EntitySystem var otherUid = args.OtherEntity; + if (!_runicDoor.CanBumpOpen(uid, otherUid)) // WD + return; + if (Tags.HasTag(otherUid, DoorBumpTag)) TryOpen(uid, door, otherUid, quiet: door.State == DoorState.Denying); } @@ -762,6 +767,9 @@ public abstract partial class SharedDoorSystem : EntitySystem { foreach (var other in PhysicsSystem.GetContactingEntities(uid, physics, approximate: true)) { + if (!_runicDoor.CanBumpOpen(uid, other)) // WD + continue; + if (Tags.HasTag(other, DoorBumpTag) && TryOpen(uid, door, other, quiet: true)) break; } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index ca5db48c8d..873e3eeaa6 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -533,6 +533,11 @@ public abstract partial class SharedGunSystem : EntitySystem Dirty(gun); } // WD EDIT + public void SetUseKey(GunComponent gun, bool useKey) + { + gun.UseKey = useKey; + } + public void SetProjectileSpeed(EntityUid weapon, float projectileSpeed) { if(!TryComp(weapon, out var gunComponent)) diff --git a/Content.Shared/_White/BetrayalDagger/BlinkComponent.cs b/Content.Shared/_White/BetrayalDagger/BlinkComponent.cs index 64163d0284..b75684b977 100644 --- a/Content.Shared/_White/BetrayalDagger/BlinkComponent.cs +++ b/Content.Shared/_White/BetrayalDagger/BlinkComponent.cs @@ -1,10 +1,11 @@ using System.Numerics; using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared._White.BetrayalDagger; -[RegisterComponent] +[RegisterComponent, NetworkedComponent] public sealed partial class BlinkComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/_White/Cult/ConstructComponent.cs b/Content.Shared/_White/Cult/Components/ConstructComponent.cs similarity index 84% rename from Content.Server/_White/Cult/ConstructComponent.cs rename to Content.Shared/_White/Cult/Components/ConstructComponent.cs index fff47d46aa..35cce31684 100644 --- a/Content.Server/_White/Cult/ConstructComponent.cs +++ b/Content.Shared/_White/Cult/Components/ConstructComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.Prototypes; -namespace Content.Server._White.Cult; +namespace Content.Shared._White.Cult.Components; [RegisterComponent] public sealed partial class ConstructComponent : Component diff --git a/Content.Shared/_White/Cult/Components/CultBuffComponent.cs b/Content.Shared/_White/Cult/Components/CultBuffComponent.cs index f39e33b6b7..914721de99 100644 --- a/Content.Shared/_White/Cult/Components/CultBuffComponent.cs +++ b/Content.Shared/_White/Cult/Components/CultBuffComponent.cs @@ -3,10 +3,16 @@ namespace Content.Shared._White.Cult.Components; [RegisterComponent] public sealed partial class CultBuffComponent : Component { - [ViewVariables(VVAccess.ReadOnly), DataField("buffTime")] + [ViewVariables(VVAccess.ReadOnly), DataField] public TimeSpan BuffTime = TimeSpan.FromSeconds(60); + [ViewVariables(VVAccess.ReadOnly), DataField] + public TimeSpan StartingBuffTime = TimeSpan.FromSeconds(60); + + [ViewVariables(VVAccess.ReadOnly), DataField] + public TimeSpan BuffLimit = TimeSpan.FromSeconds(55); + public static float NearbyTilesBuffRadius = 1f; - public static readonly TimeSpan CultTileBuffTime = TimeSpan.FromSeconds(5); + public static readonly TimeSpan CultTileBuffTime = TimeSpan.FromSeconds(1); } diff --git a/Content.Server/_White/Cult/Structures/RunicDoorComponent.cs b/Content.Shared/_White/Cult/Structures/RunicDoorComponent.cs similarity index 61% rename from Content.Server/_White/Cult/Structures/RunicDoorComponent.cs rename to Content.Shared/_White/Cult/Structures/RunicDoorComponent.cs index 4cb1d31141..e1e61da1a3 100644 --- a/Content.Server/_White/Cult/Structures/RunicDoorComponent.cs +++ b/Content.Shared/_White/Cult/Structures/RunicDoorComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server._White.Cult.Structures; +namespace Content.Shared._White.Cult.Structures; [RegisterComponent] public sealed partial class RunicDoorComponent : Component diff --git a/Content.Server/_White/Cult/Structures/RunicDoorSystem.cs b/Content.Shared/_White/Cult/Structures/RunicDoorSystem.cs similarity index 90% rename from Content.Server/_White/Cult/Structures/RunicDoorSystem.cs rename to Content.Shared/_White/Cult/Structures/RunicDoorSystem.cs index 388af6b294..216d02f567 100644 --- a/Content.Server/_White/Cult/Structures/RunicDoorSystem.cs +++ b/Content.Shared/_White/Cult/Structures/RunicDoorSystem.cs @@ -1,13 +1,13 @@ -using Content.Server.Cuffs; -using Content.Server.Doors.Systems; -using Content.Shared._White.Chaplain; +using Content.Shared._White.Chaplain; using Content.Shared.Doors; using Content.Shared.Humanoid; using Content.Shared.Stunnable; using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Systems; +using Content.Shared.Cuffs; using Content.Shared.Cuffs.Components; using Content.Shared.Doors.Components; +using Content.Shared.Doors.Systems; using Content.Shared.Mobs.Systems; using Content.Shared.Prying.Components; using Content.Shared.Weapons.Melee.Components; @@ -18,17 +18,18 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using CultistComponent = Content.Shared._White.Cult.Components.CultistComponent; -namespace Content.Server._White.Cult.Structures; +namespace Content.Shared._White.Cult.Structures; public sealed class RunicDoorSystem : EntitySystem { - [Dependency] private readonly DoorSystem _doorSystem = default!; + [Dependency] private readonly SharedDoorSystem _doorSystem = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedStunSystem _stunSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly OccluderSystem _occluder = default!; [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly CuffableSystem _cuffable = default!; + [Dependency] private readonly SharedCuffableSystem _cuffable = default!; [Dependency] private readonly HolyWeaponSystem _holyWeapon = default!; public override void Initialize() @@ -125,7 +126,7 @@ public sealed class RunicDoorSystem : EntitySystem TryComp(airlock, out ConcealableComponent? concealable) && concealable.Concealed) return false; - var direction = Transform(user).MapPosition.Position - Transform(airlock).MapPosition.Position; + var direction = _transform.GetMapCoordinates(user).Position - _transform.GetMapCoordinates(airlock).Position; var impulseVector = direction * 2000; _physics.ApplyLinearImpulse(user, impulseVector); diff --git a/Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs b/Content.Shared/_White/Cult/UI/CultTeleportSpellEuiState.cs similarity index 84% rename from Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs rename to Content.Shared/_White/Cult/UI/CultTeleportSpellEuiState.cs index 4d7a0831de..33dc445049 100644 --- a/Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs +++ b/Content.Shared/_White/Cult/UI/CultTeleportSpellEuiState.cs @@ -4,7 +4,7 @@ using Robust.Shared.Serialization; namespace Content.Shared._White.Cult.UI; [Serializable, NetSerializable] -public sealed class TeleportSpellEuiState : EuiStateBase +public sealed class CultTeleportSpellEuiState : EuiStateBase { public Dictionary Runes = new(); } diff --git a/Content.Shared/_White/Wizard/SpellBlade/SharedSpellBladeSystem.cs b/Content.Shared/_White/Wizard/SpellBlade/SharedSpellBladeSystem.cs new file mode 100644 index 0000000000..af0f27fa46 --- /dev/null +++ b/Content.Shared/_White/Wizard/SpellBlade/SharedSpellBladeSystem.cs @@ -0,0 +1,115 @@ +using System.Linq; +using Content.Shared._White.BetrayalDagger; +using Content.Shared.Examine; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Popups; +using Content.Shared.UserInterface; +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Wizard.SpellBlade; + +public abstract class SharedSpellBladeSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedGunSystem _gun = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMessage); + SubscribeLocalEvent(OnOpenAttempt); + SubscribeLocalEvent(OnExamined); + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + if (ent.Comp.ChosenAspect == string.Empty) + { + args.PushMarkup("Аспект не выбран."); + return; + } + + var proto = _prototypeManager.Index(ent.Comp.ChosenAspect); + + args.PushMarkup($"Выбранный аспект: {proto.Name}"); + } + + private void OnOpenAttempt(Entity ent, ref ActivatableUIOpenAttemptEvent args) + { + if (ent.Comp.ChosenAspect == string.Empty) + return; + + _popup.PopupEntity("Аспект уже выбран.", args.User, args.User); + args.Cancel(); + } + + private void OnMessage(Entity ent, ref SpellBladeSystemMessage args) + { + if (ent.Comp.ChosenAspect != string.Empty) + return; + + switch (args.ProtoId) + { + case "AspectFire": + ApplyFireAspect(ent); + break; + case "AspectFrost": + ApplyFrostAspect(ent); + break; + case "AspectLightning": + ApplyLightningAspect(ent); + break; + case "AspectBluespace": + ApplyBluespaceAspect(ent); + break; + case "AspectMagicMissile": + ApplyMagicMissileAspect(ent); + break; + default: + return; + } + + ent.Comp.ChosenAspect = args.ProtoId; + + _audio.PlayPvs(ent.Comp.AspectChosenSound, ent); + + + Dirty(ent); + } + + protected virtual void ApplyFireAspect(EntityUid uid) { } + + protected virtual void ApplyFrostAspect(EntityUid uid) { } + + protected virtual void ApplyLightningAspect(EntityUid uid) { } + + private void ApplyBluespaceAspect(EntityUid uid) + { + var blink = EnsureComp(uid); + blink.Distance = 15f; + blink.BlinkRate = 1f; + } + + private void ApplyMagicMissileAspect(EntityUid uid) + { + var gun = EnsureComp(uid); + _gun.SetUseKey(gun, false); + _gun.SetSound(uid, new SoundPathSpecifier("/Audio/Weapons/Guns/Gunshots/Magic/staff_healing.ogg")); + _gun.SetFireRate(uid, 1.2f); + var ammoProvider = EnsureComp(uid); + ammoProvider.Proto = "ProjectileMagicMissile"; + } + + public bool IsHoldingItemWithComponent(EntityUid uid) where T : Component + { + return _hands.EnumerateHeld(uid).Any(HasComp); + } +} diff --git a/Content.Shared/_White/Wizard/SpellBlade/SpellBladeComponent.cs b/Content.Shared/_White/Wizard/SpellBlade/SpellBladeComponent.cs new file mode 100644 index 0000000000..ff1fc59b31 --- /dev/null +++ b/Content.Shared/_White/Wizard/SpellBlade/SpellBladeComponent.cs @@ -0,0 +1,39 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._White.Wizard.SpellBlade; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SpellBladeComponent : Component +{ + [ViewVariables, AutoNetworkedField] + public string ChosenAspect = string.Empty; + + [DataField] + public List Aspects = new() + { + "AspectFire", + "AspectFrost", + "AspectLightning", + "AspectBluespace", + "AspectMagicMissile" + }; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public SoundSpecifier AspectChosenSound = new SoundPathSpecifier("/Audio/White/Magic/spellblade-aspect.ogg"); +} + +[Serializable, NetSerializable] +public sealed class SpellBladeSystemMessage(EntProtoId protoId) : BoundUserInterfaceMessage +{ + public EntProtoId ProtoId = protoId; +} + + +[Serializable, NetSerializable] +public enum SpellBladeUiKey : byte +{ + Key +} diff --git a/Content.Shared/_White/Wizard/Teleport/WizardTeleportSpellEuiState.cs b/Content.Shared/_White/Wizard/Teleport/WizardTeleportSpellEuiState.cs new file mode 100644 index 0000000000..26d6a3e236 --- /dev/null +++ b/Content.Shared/_White/Wizard/Teleport/WizardTeleportSpellEuiState.cs @@ -0,0 +1,16 @@ +using Content.Shared.Eui; +using Robust.Shared.Serialization; + +namespace Content.Shared._White.Wizard.Teleport; + +[Serializable, NetSerializable] +public sealed class WizardTeleportSpellEuiState : EuiStateBase +{ + public Dictionary Locations = new(); +} + +[Serializable, NetSerializable] +public sealed class TeleportSpellTargetLocationSelected : EuiMessageBase +{ + public int LocationUid; +} diff --git a/Resources/Audio/White/Magic/spellblade-aspect.ogg b/Resources/Audio/White/Magic/spellblade-aspect.ogg new file mode 100644 index 0000000000..2df5431748 Binary files /dev/null and b/Resources/Audio/White/Magic/spellblade-aspect.ogg differ diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index d725259f36..a4397d2086 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4143,3 +4143,131 @@ id: 292 time: '2024-06-09T16:26:49.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/342 +- author: Valtos + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E 13 \u043D\u043E\ + \u0432\u044B\u0445 \u0433\u043E\u043B\u043E\u0441\u043E\u0432 TTS." + type: Add + id: 293 + time: '2024-06-09T21:30:35.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/344 +- author: Aviu + changes: + - message: "\u041A\u043D\u0438\u0433\u0430 \u0437\u0430\u043A\u043B\u0438\u043D\u0430\ + \u043D\u0438\u0439 \u0434\u043B\u044F \u043C\u0430\u0433\u0430." + type: Add + - message: "\u0412\u044B\u0441\u043E\u043A\u043E\u0447\u0430\u0441\u0442\u043E\u0442\ + \u043D\u044B\u0439 \u043A\u043B\u0438\u043D\u043E\u043A \u0443\u0441\u0438\u043B\ + \u0435\u043D, \u0443\u0431\u0440\u0430\u043D \u0438\u0437 \u043D\u0443\u043B\ + \u0440\u043E\u0434\u0430 \u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\ + \u043D \u0432 \u043A\u043D\u0438\u0433\u0443 \u0437\u0430\u043A\u043B\u0438\u043D\ + \u0430\u043D\u0438\u0439." + type: Add + - message: "\u0412 \u0441\u043A\u0430\u0444\u0430\u043D\u0434\u0440\u0435 \u043C\ + \u0430\u0433\u0430 \u0442\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0436\u043D\ + \u043E \u043A\u0430\u0441\u0442\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u0435\ + \ \u0437\u0430\u043A\u043B\u0438\u043D\u0430\u043D\u0438\u044F." + type: Add + - message: "\u0421\u043A\u0430\u0444\u0430\u043D\u0434\u0440 \u043C\u0430\u0433\u0430\ + \ \u0443\u0431\u0440\u0430\u043D \u0441 \u0448\u0430\u0442\u0442\u043B\u0430\ + \ \u043C\u0430\u0433\u0430 \u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\ + \u0435\u043D \u0432 \u043A\u043D\u0438\u0433\u0443 \u0437\u0430\u043A\u043B\u0438\ + \u043D\u0430\u043D\u0438\u0439." + type: Add + - message: "\u0421\u0432\u0438\u0442\u043E\u043A \u043A\u0430\u0440\u044B." + type: Add + - message: "\u0423\u0431\u0440\u0430\u043D\u044B \u0432\u0441\u0435 \u0441\u0432\ + \u0438\u0442\u043A\u0438 \u043A\u0440\u043E\u043C\u0435 \u0442\u0435\u043B\u0435\ + \u043F\u043E\u0440\u0442\u0430\u0446\u0438\u0438 \u0441 \u0448\u0430\u0442\u0442\ + \u043B\u0430 \u043C\u0430\u0433\u0430." + type: Remove + id: 294 + time: '2024-06-10T10:57:32.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/345 +- author: Aviu + changes: + - message: "\u041A\u043B\u0438\u043D\u043E\u043A \u0437\u0430\u043A\u043B\u0438\u043D\ + \u0430\u043D\u0438\u0439 \u0443\u0441\u0438\u043B\u0435\u043D \u0438 \u043F\u0435\ + \u0440\u0435\u043C\u0435\u0449\u0435\u043D \u0438\u0437 \u043D\u0443\u043B\u0440\ + \u043E\u0434\u0430 \u0432 \u043A\u043D\u0438\u0433\u0443 \u0437\u0430\u043A\u043B\ + \u0438\u043D\u0430\u043D\u0438\u0439." + type: Add + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0436\u043D\u043E\ + \ \u0443\u0441\u0438\u043B\u0438\u0442\u044C \u043A\u043B\u0438\u043D\u043E\u043A\ + \ \u0437\u0430\u043A\u043B\u0438\u043D\u0430\u043D\u0438\u0439, \u0432\u044B\ + \u0431\u0440\u0430\u0432 1 \u0438\u0437 5 \u0430\u0441\u043F\u0435\u043A\u0442\ + \u043E\u0432." + type: Add + - message: "\u0424\u0438\u043A\u0441 \u043D\u0435\u0440\u0430\u0431\u043E\u0442\u0430\ + \u044E\u0449\u0435\u0433\u043E \u0437\u0430\u043A\u043B\u0438\u043D\u0430\u043D\ + \u0438\u044F \u0442\u0435\u043B\u0435\u043F\u043E\u0440\u0442\u0430 \u043A\u0443\ + \u043B\u044C\u0442\u0430." + type: Fix + id: 295 + time: '2024-06-11T20:07:47.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/346 +- author: Aviu + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0440\u0435\u0433\u0435\u043D\u0435\ + \u0440\u0430\u0446\u0438\u044E \u0442\u043A\u0430\u043D\u0435\u0439 \u0438 \u0430\ + \u0434\u0440\u0435\u043D\u0430\u043B\u0438\u043D \u043C\u043E\u0436\u043D\u043E\ + \ \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\ + \ \u043A\u0440\u0438\u0442\u0435 \u0438 \u0432 \u0441\u0442\u0430\u043D\u0435\ + ." + type: Add + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u043A\u043E\u043B\ + \u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\u0447\u0435\u043B \u0438\u0437\ + \ \u0433\u043E\u043B\u043E\u0432\u044B \u0443\u043B\u044C\u044F \u043E\u0431\ + \u0440\u0430\u0442\u043D\u043E \u0434\u043E 4." + type: Tweak + - message: "\u041D\u0435\u043C\u043D\u043E\u0433\u043E \u0443\u0435\u043B\u0438\u0447\ + \u0435\u043D\u0430 \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0440\u0435\ + \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0445\u0438\u043C\u0438\ + \u043A\u0430\u0442\u043E\u0432." + type: Tweak + - message: "\u0424\u0438\u043A\u0441 \u043A\u0440\u0438\u0432\u043E\u0433\u043E\ + \ \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u0430\u043B\ + \u0435\u0440\u0442\u0430 \u0445\u0438\u043C\u0438\u043A\u0430\u0442\u043E\u0432\ + \ \u0433\u0435\u043D\u043E\u043A\u0440\u0430\u0434\u0430." + type: Fix + id: 296 + time: '2024-06-12T10:56:44.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/347 +- author: Aviu + changes: + - message: "\u0411\u0430\u0444\u0444 \u043A\u0443\u043B\u044C\u0442\u0430 \u0442\ + \u0435\u043F\u0435\u0440\u044C \u0441\u043F\u0430\u0441\u0430\u0435\u0442 \u043E\ + \u0442 \u043D\u0438\u0437\u043A\u043E\u0433\u043E \u0434\u0430\u0432\u043B\u0435\ + \u043D\u0438\u044F." + type: Add + - message: "\u0414\u0432\u0435\u0440\u044C \u043A\u0443\u043B\u044C\u0442\u0430\ + \ \u0442\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0435\u0434\u0438\u043A\u0442\ + \u0435\u0434." + type: Add + - message: "\u041F\u0438\u043B\u043E\u043D \u0431\u043E\u043B\u044C\u0448\u0435\ + \ \u043D\u0435 \u0432\u044B\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\ + \u0442 \u043A\u0438\u0441\u043B\u043E\u0440\u043E\u0434." + type: Remove + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u0432\u0440\u0435\ + \u043C\u044F \u0431\u0430\u0444\u0444\u0430 \u043E\u0442 \u043D\u0430\u0445\u043E\ + \u0436\u0434\u0435\u043D\u0438\u044F \u043D\u0430 \u0442\u0430\u0439\u043B\u0435\ + \ \u043A\u0443\u043B\u044C\u0442\u0430 \u0434\u043E 1 \u0441\u0435\u043A\u0443\ + \u043D\u0434\u044B." + type: Tweak + - message: "\u0414\u0432\u0435\u0440\u044C \u043A\u0443\u043B\u044C\u0442\u0430\ + \ \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043E\u0442\u043A\u0440\ + \u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u043A\u043E\u0433\u0434\u0430 \u043E\ + \u043D\u0430 \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u0430." + type: Fix + id: 297 + time: '2024-06-12T16:00:45.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/348 +- author: Warete + changes: + - message: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434 \u0438 \u0432\u044B\u043D\ + \u043E\u0441 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0451\u043D\u043D\u044B\ + \u0445 \u043F\u043B\u0430\u043A\u0430\u0442\u043E\u0432" + type: Fix + id: 298 + time: '2024-06-12T20:28:18.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/349 diff --git a/Resources/Locale/ru-RU/_white/cult/cult.ftl b/Resources/Locale/ru-RU/_white/cult/cult.ftl index c7ad06153d..ff9eb49c64 100644 --- a/Resources/Locale/ru-RU/_white/cult/cult.ftl +++ b/Resources/Locale/ru-RU/_white/cult/cult.ftl @@ -1,4 +1,4 @@ -soul-shard-name = Душа { $soul } +soul-shard-name = Душа { $soul } soul-shard-description = В этом камне заключена душа { $soul } cult-too-much-empowers = Слишком много способностей @@ -25,6 +25,7 @@ cult-ritual-prevented = Кто-то прервал ритуал. cult-narsie-summoned = НАР'СИ ВОССТАЛ! cult-revive-rune-already-alive = Он уже живой. cult-revive-rune-no-charges = У рун воскрешения кончились заряды. +cult-revive-rune-too-damaged = Его ранения несовместимы с жизнью. cult-summon-rune-need-minimum-cultists = Необходимо минимум 2 культиста. cult-cultists-not-found = Культисты не обнаружены. cult-blood-boil-rune-need-minimum = Необходимо минимум 3 культиста. diff --git a/Resources/Locale/ru-RU/_white/cult/entities.ftl b/Resources/Locale/ru-RU/_white/cult/entities.ftl index 978a589469..81c08d879e 100644 --- a/Resources/Locale/ru-RU/_white/cult/entities.ftl +++ b/Resources/Locale/ru-RU/_white/cult/entities.ftl @@ -45,7 +45,7 @@ ent-OfferingRune = руна предпонесения .desc = Мгновенно превращает обычного члена экипажа в культиста, для чего требуется 2 культиста вокруг руны. Члена экипажа с имплантом защиты разума нельзя перевоплотить, можно только принести в жертву, для чего нужно 3 культиста, которые встанут вокруг руны. Если цель мертва, то она будет принесена в жертву, для чего требуется 1 культист. ent-BuffRune = руна усиления - .desc = При активации усиливает вас, уменьшая затраты и ускоряя процесс подготовки заклинаний крови и черчения рун. + .desc = При активации усиливает вас, уменьшая затраты и ускоряя процесс подготовки заклинаний крови и черчения рун. Усиление также даёт иммунитет к низкому давлению. ent-EmpoweringRune = руна могущества .desc = Позволяет культистам приготовить до 5 заклинаний крови. diff --git a/Resources/Locale/ru-RU/_white/wizard/scrolls.ftl b/Resources/Locale/ru-RU/_white/wizard/scrolls.ftl index a22dbfb0f8..dcc484032d 100644 --- a/Resources/Locale/ru-RU/_white/wizard/scrolls.ftl +++ b/Resources/Locale/ru-RU/_white/wizard/scrolls.ftl @@ -15,6 +15,7 @@ scroll-component-clown = бананы scroll-component-silence = тишину scroll-component-recall = призыв scroll-component-teleport = телепортацию +scroll-component-smite = кару ent-BaseScroll = магический свиток .desc = Этот древний пергамент, ставший реликвией в арканных преданиях, хранит в себе бесчисленные мистические заклятия и забытые заклинания. diff --git a/Resources/Locale/ru-RU/_white/wizard/wizard.ftl b/Resources/Locale/ru-RU/_white/wizard/wizard.ftl index b145d0d95f..4809f22c27 100644 --- a/Resources/Locale/ru-RU/_white/wizard/wizard.ftl +++ b/Resources/Locale/ru-RU/_white/wizard/wizard.ftl @@ -11,7 +11,7 @@ roles-antag-wizard-objective = Устройте хаос на станции wizard-round-end-agent-name = космический волшебник -wizard-welcome = Вы - космический волшебник. Федерация Космических Волшебников отправила вас на станцию {$station}, дабы посеять хаос. Вы можете попасть на станцию с помощью гиперпрыжка или с помощью магии телепортации. +wizard-welcome = Вы - космический волшебник. Федерация Космических Волшебников отправила вас на станцию {$station}, дабы посеять хаос. Не разочаруйте их. wizard-no-more-threat-announcement-shuttle-call = Судя по данным наших датчиков дальнего действия, магическая угроза была устранена. Эвакуационный шаттл скоро прибудет. Время прибытия: {$time} {$units}. Вы можете отозвать его, чтобы продлить смену. wizard-no-more-threat-announcement = Судя по данным наших датчиков дальнего действия, магическая угроза была устранена. Шаттл уже вызван. @@ -20,3 +20,13 @@ magic-component-missing-req = Недостающие требования! Ва ent-WizardSurviveObjective = Переживете смену, устроив как можно больше хаоса. .desc = Федерация Космических Волшебников отправила вас на станцию Nanotrasen, чтобы навести там смуту. Не разочаруйте их. + +ent-SpellBook = книга заклинаний + .desc = Неземной фолиант, излучающий силу. + +store-currency-display-spell-point = Очки заклинаний + +store-category-spells-attack = Атакующие заклинания +store-category-spells-defence = Защитные заклинания +store-category-spells-utility = Вспомогательные заклинания +store-category-magic-items = Магические предметы diff --git a/Resources/Locale/ru-RU/alerts/alerts.ftl b/Resources/Locale/ru-RU/alerts/alerts.ftl index 41abeef2e8..274bc07519 100644 --- a/Resources/Locale/ru-RU/alerts/alerts.ftl +++ b/Resources/Locale/ru-RU/alerts/alerts.ftl @@ -112,4 +112,4 @@ alerts-changeling-chemicals-name = Химикаты alerts-changeling-chemicals-desc = Наши химикаты. alerts-cult-buff-name = Усиление -alerts-cult-buff-desc = Подготовка заклинаний крови занимает гораздо меньше времени, и вы не теряете столько крови при этом. +alerts-cult-buff-desc = Подготовка заклинаний крови занимает гораздо меньше времени, и вы не теряете столько крови при этом. Также вы неуязвимы к низкому давлению. diff --git a/Resources/Locale/ru-RU/ghost/roles/ghost-role-component.ftl b/Resources/Locale/ru-RU/ghost/roles/ghost-role-component.ftl index 0c1c6006c4..2374a29b98 100644 --- a/Resources/Locale/ru-RU/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/ru-RU/ghost/roles/ghost-role-component.ftl @@ -154,7 +154,7 @@ ghost-role-information-onestar-mecha-description = Вы - эксперимент ghost-role-information-onestar-mecha-rules = Используйте свое оружие, чтобы сеять хаос. Вы - антагонист. ghost-role-information-remilia-name = Ремилия, фамильяр священника -ghost-role-information-remilia-description = Повинуйтесь своему хозяину. Ешь хаос. +ghost-role-information-remilia-description = Повинуйтесь своему хозяину. Ешьте фрукты. ghost-role-information-remilia-rules = Вы - умная фруктовая летучая мышь. Следуйте за священником повсюду. Не создавайте никаких проблем, если только священник не прикажет вам это сделать. ghost-role-information-cerberus-name = Цербер, злой фамильяр diff --git a/Resources/Locale/ru-RU/locales-new/autotranslate-33.ftl b/Resources/Locale/ru-RU/locales-new/autotranslate-33.ftl index 42f754d4a9..b87d13d986 100644 --- a/Resources/Locale/ru-RU/locales-new/autotranslate-33.ftl +++ b/Resources/Locale/ru-RU/locales-new/autotranslate-33.ftl @@ -14,6 +14,8 @@ ent-AnomalyLocator = локатор аномалий .desc = Устройство, предназначенное для помощи в обнаружении аномалий. Вы проверяли шахтеров? ent-AnomalyLocatorEmpty = { ent-AnomalyLocator } .desc = { ent-AnomalyLocator.desc } +ent-AnomalyScanner = сканер аномалий + .desc = Ручной сканер, предназначенный для сбора информации о различных аномальных объектах. ent-TechnologyDiskRare = { ent-TechnologyDisk } .desc = { ent-TechnologyDisk.desc } ent-VendingMachineRestockChemVend = коробка пополнения ХимВенд diff --git a/Resources/Locale/ru-RU/locales-new/autotranslate-45.ftl b/Resources/Locale/ru-RU/locales-new/autotranslate-45.ftl index d245258396..74cf405a57 100644 --- a/Resources/Locale/ru-RU/locales-new/autotranslate-45.ftl +++ b/Resources/Locale/ru-RU/locales-new/autotranslate-45.ftl @@ -30,8 +30,40 @@ ent-PosterLegitMime = Мим Постмодерн .desc = Постмодернистское изображение мима, превосходно! ent-PosterLegitCarpMount = Карп настенный .desc = Carpe diem! +ent-PosterLegitPeriodicTable = Периодическая таблица элементов + .desc = Периодическая таблица элементов, от водорода до оганессона и всего, что между ними. +ent-PosterLegitVacation = Корпоративные льготы Nanotrasen: Отпуск + .desc = На этом информационном плакате представлена информация о некоторых призах, доступных в рамках программы NT Corporate Perks, включая двухнедельный отпуск на двоих на курорте Idyllus. +ent-PosterLegitNTTGC = Карты тактической игры "Нанотрасен + .desc = Реклама карт TCG от Nanotrasen: ПОКУПАЙТЕ БОЛЬШЕ КАРТ. +ent-PosterLegitRenault = Плакат Renault + .desc = Яп! +ent-PosterLegitSafetyMothDelam = Мотылек безопасности - Меры предосторожности при расслаивании! + .desc = Этот информационный плакат использует Safety Moth™, чтобы рассказать зрителям о необходимости прятаться в шкафах, когда кристалл суперматерии расслаивается, чтобы избежать галлюцинаций. Эвакуация может быть лучшей стратегией. +ent-PosterLegitSafetyMothEpi = Безопасная моль - Эпинефрин! + .desc = Этот информационный плакат использует Safety Moth™, чтобы проинформировать зрителей о необходимости помочь раненым/погибшим членам экипажа с их инъекторами эпинефрина. "Предотвратите гниение органов с помощью этого простого трюка!". +ent-PosterLegitSafetyMothHardhat = Моль безопасности - Каски! + .desc = Этот информационный плакат использует Safety Moth™, чтобы рассказать зрителю о необходимости носить каски в опасных местах. "Это как лампа для вашей головы!". +ent-PosterLegitSafetyMothMeth = Мотылек безопасности - Метамфетамин! + .desc = Этот информационный плакат использует Safety Moth™, чтобы рассказать зрителю о необходимости получить разрешение CMO перед приготовлением метамфетамина. "Держитесь ближе к заданной температуре и никогда не превышайте ее!" ...Вы никогда не должны делать это." +ent-PosterLegitSafetyMothPiping = Безопасная моль - Трубы! + .desc = ..Этот информационный плакат использует Safety Moth™, чтобы рассказать техникам по работе с атмосферой о правильных типах трубопроводов, которые необходимо использовать. "Трубы, а не насосы! Правильное размещение труб предотвращает плохую работу!". +ent-PosterContrabandInterdyne = Интердайн Фармасьютикалс: Для здоровья человечества! + .desc = Реклама клиник GeneClean компании Interdyne Pharmaceutics. Станьте хозяином своего тела!". +ent-PosterContrabandWaffleCorp = Сделай мне вафли: Отличные винтовки, экономичные цены! + .desc = Старая реклама винтовок Waffle Corp. "Лучшее оружие, низкие цены!" +ent-PosterContrabandMoth = Синди Моль - Ядерная операция! + .desc = Плакат, созданный по заказу Синдиката, на котором Syndie Moth™ говорит зрителю, что диск ядерной аутентификации должен быть незащищенным. "Мир никогда не был вариантом!" Ни один хороший сотрудник не станет слушать эту чушь. +ent-PosterContrabandEnlistGorlex = Записывайся! + .desc = Запишитесь в ряды мародеров Горлекса уже сегодня! Увидьте галактику, убейте корпорантов, получите деньги!" +ent-PosterContrabandDonk = DONK CO. ФИРМЕННАЯ ЕДА ДЛЯ МИКРОВОЛНОВОЙ ПЕЧИ + .desc = DONK CO. ФИРМЕННАЯ ЕДА ДЛЯ МИКРОВОЛНОВКИ: СДЕЛАНА ГОЛОДАЮЩИМИ СТУДЕНТАМИ КОЛЛЕДЖА, ДЛЯ ГОЛОДАЮЩИХ СТУДЕНТОВ КОЛЛЕДЖА". +ent-PosterContrabandCybersun600 = Cybersun: 600 лет" - юбилейный плакат + .desc = Художественный плакат, посвященный 600-летию непрерывной деятельности компании Cybersun Industries. +ent-BarberScissors = Парикмахерские ножницы + .desc = Способны изменить прическу по вашему вкусу. ent-WallRock = скала - .desc = "" + .desc = Каменная порода ent-WallRockGold = { ent-WallRock } .desc = Рудная жила, богатая золотом. ent-WallRockPlasma = { ent-WallRock } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/vending.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/vending.ftl index f7100316a9..731460c932 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/vending.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/vending.ftl @@ -46,3 +46,28 @@ ent-CrateVendingMachineRestockSnacksFilled = ящик пополнения за ent-CrateVendingMachineRestockTankDispenserFilled = ящик пополнения газовых баллонов .desc = Содержит набор пополнения атмосферного или инженерного раздатчика газовых баллонов. .suffix = { "" } +ent-CrateVendingMachineRestockAutoDrobeFilled = ящик пополнения Театрального шкафа + .desc = Содержит набор пополнения вещей для Театрального шкафа. + .suffix = { "" } +ent-CrateVendingMachineRestockDonutFilled = ящик для пополнения Пончики Монкинса + .desc = Содержит два набора пополнения для торгомата Пончики Монкинса. + .suffix = { "" } +ent-CrateVendingMachineRestockChangFilled = ящик для пополнения Мистера Чанга + .desc = Содержит два набора пополнения для торгомата Мистера Чанга. + .suffix = { "" } +ent-CrateVendingMachineRestockDiscountDansFilled = ящик для пополнения Дискаунтера Дэна + .desc = Содержит два набора пополнения для торгомата Дискаунтера Дэна. + .suffix = { "" } +ent-CrateVendingMachineRestockChefvendFilled = ящик для пополнения ШефШкафа + .desc = Содержит набор пополнения для ШефШкафа. + .suffix = { "" } +ent-CrateVendingMachineRestockGetmoreChocolateCorpFilled = ящик для пополнения Гетмор Шоколад Корп. + .desc = Содержит два набора пополнения для Гетмор Шоколад Корп. + .suffix = { "" } +ent-CrateVendingMachineRestockChemVendFilled = ящик для пополнения ХимВенд + .desc = Содержит набор пополнения для ХимВенд. + .suffix = { "" } +ent-CrateVendingMachineRestockHappyHonkFilled = ящик для пополнения ХэппиХонк + .desc = Содержит два набора пополнения для ХэппиХонк. + .suffix = { "" } + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/back/duffel.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/back/duffel.ftl index 89e7f602ba..ac7836a489 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/back/duffel.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/back/duffel.ftl @@ -52,3 +52,6 @@ ent-ClothingBackpackDuffelSyndicateMedicalBundle = { ent-ClothingBackpackDuffelS ent-ClothingBackpackDuffelHolding = бездонный вещмешок .desc = Вещмешок, открывающийся в локальный карман блюспейса. .suffix = { "" } +ent-ClothingBackpackDuffelCBURN = вещмешок CBURN + .desc = Вещмешок, содержащий разнообразное оборудование для биологической защиты. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/belt/belts.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/belt/belts.ftl index 9fa5676d0a..3b6e25939e 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/belt/belts.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/belt/belts.ftl @@ -49,3 +49,15 @@ ent-ClothingBeltSuspenders = подтяжки ent-ClothingBeltWand = пояс для палочек .desc = Пояс, предназначенный для хранения различных волшебных палочек. Поясная сумка, полная экзотической магии. .suffix = { "" } +ent-ClothingBeltChef = пояс шеф повара + .desc = Пояс, для хранения кухонных ножей и приправ для быстрого доступа. + .suffix = { "" } +ent-ClothingBeltMedicalEMT = пояс парамедика + .desc = Пояс, идеально подходит для хранения различного оборудования для экстренной медицинской помощи. + .suffix = { "" } +ent-ClothingBeltMedicalEMTFilled = { ent-ClothingBeltMedicalEMT } + .desc = { ClothingBeltMedicalEMT.desc } +ent-ClothingBeltQuiver = колчан + .desc = Вмещает до 15 стрел и плотно прилегает к талии. + .suffix = { "" } + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/hands/colored.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/hands/colored.ftl index 95e4c8d204..736e563e0b 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/hands/colored.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/hands/colored.ftl @@ -24,6 +24,8 @@ ent-ClothingHandsGlovesColorYellow = изолированные перчатки .desc = Эти перчатки защищают пользователя от поражения электрическим током. ent-ClothingHandsGlovesColorYellowBudget = дешёвые изолированные перчатки .desc = Всего лишь дешёвая подделка заветных перчаток - не может быть, чтобы это плохо кончилось. +ent-ClothingHandsGlovesFingerlessInsulated = беспалые изолированные перчатки + .desc = Изолированные перчатки устойчивые к ударам током, по крайней мере, раньше. ent-ClothingHandsGlovesConducting = { ent-ClothingHandsGlovesColorYellow } .suffix = Проводящий - .desc = { ent-ClothingHandsGlovesColorYellow.desc } \ No newline at end of file + .desc = { ent-ClothingHandsGlovesColorYellow.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl index 35e758201b..adefdb4974 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl @@ -115,3 +115,20 @@ ent-GasRecyclerMachineCircuitboard = переработчик газа (маши ent-APECircuitboard = М.А.К.А.К. (машинная плата) .desc = Печатная плата излучателя аномальных частиц .suffix = { "" } +ent-FlatpackerMachineCircuitboard = Флэтпакер 1001 (машинная плата) + .desc = Печатная плата Флэтпакер 1001 +ent-ArtifactCrusherMachineCircuitboard = дробитель артефактов (машинная плата) + .desc = Печатная плата дробителя артефактов + .suffix = { "" } +ent-AnomalySynchronizerCircuitboard = синхронизатор артефактов (машинная плата) + .desc = Печатная плата синхронизатора артефактов + .suffix = { "" } +ent-PortableGeneratorJrPacmanMachineCircuitboard = плата портативной генераторной машины типа J.R.P.A.C.M.A.N. + .desc = Печатная плата портативного генератора J.R.P.A.C.M.A.N. + .suffix = { "" } +ent-PortableGeneratorPacmanMachineCircuitboard = плата портативной генераторной машины типа P.A.C.M.A.N. + .desc = Печатная плата портативного генератора P.A.C.M.A.N. + .suffix = { "" } +ent-PortableGeneratorSuperPacmanMachineCircuitboard = плата портативной генераторной машины типа S.U.P.E.R.P.A.C.M.A.N. + .desc = Печатная плата портативного генератора S.U.P.E.R.P.A.C.M.A.N. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/service/vending_machine_restock.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/service/vending_machine_restock.ftl index 069204180e..e1575f317c 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/service/vending_machine_restock.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/service/vending_machine_restock.ftl @@ -70,3 +70,6 @@ ent-VendingMachineRestockRobotics = набор пополнения Роботе ent-VendingMachineRestockHappyHonk = набор пополнения Хэппи Хонк Мил .desc = Для начала поместите эту коробку, полную веселья, в гнездо для пополнения запасов на диспенсере Хэппи Хонк Мил. .suffix = { "" } +ent-VendingMachineRestockChefvend = набор пополнения Шеф Шкафа + .desc = Коробка наполненная вещами, для самого лучшего Шеф повара вашей кухни. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/melee/anomaly.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/melee/anomaly.ftl new file mode 100644 index 0000000000..da9d3551b8 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/melee/anomaly.ftl @@ -0,0 +1,3 @@ +ent-WeaponGauntletGorilla = Перчатка G.O.R.I.L.L.A. + .desc = Надежное исследовательское оборудование. При использовании ядра аномалии один удар может запускать аномальные объекты в воздух. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/artifact_analyzer.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/artifact_analyzer.ftl index ac2707e7a7..ffa487b8fc 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/artifact_analyzer.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/artifact_analyzer.ftl @@ -4,3 +4,9 @@ ent-MachineArtifactAnalyzer = анализатор артефактов ent-MachineTraversalDistorter = поперечный искатель .desc = Прибор, способный влиять на открываемые цепочки эффектов артефактов. .suffix = { "" } +ent-MachineArtifactCrusher = дробитель артефактов + .desc = Лучше не совать в него свои пальцы... + .suffix = { "" } +ent-MachineAnomalySynchronizer = синхронизатор артефактов + .desc = Сложное устройство, считывающее изменения в аномальных волнах и преобразующее их в энергетические сигналы. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/lathe.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/lathe.ftl index 7a058c90d9..bb6ef70a40 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/lathe.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/lathe.ftl @@ -22,3 +22,6 @@ ent-UniformPrinter = принтер униформы ent-OreProcessor = переработчик руды .desc = Он производит металлические листы и слитки из руды. .suffix = { "" } +ent-MachineFlatpacker = Флэтпакер 1001 + .desc = Промышленная машина, используемая для ускорения строительства машин на станции. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/power/generation/portablegenerators.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/power/generation/portablegenerators.ftl new file mode 100644 index 0000000000..3e09b12854 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/power/generation/portablegenerators.ftl @@ -0,0 +1,13 @@ +ent-PortableGeneratorJrPacman = Портативный генератор типа J.R.P.A.C.M.A.N. + .desc = Небольшой генератор, способный обеспечить электроэнергией отдельные помещения в случае чрезвычайных ситуаций. + Работает на сварочном топливе и рассчитан на мощность до 8 кВт. + Рассчитан на возраст от 3 лет и старше. + .suffix = { "" } +ent-PortableGeneratorPacman = Портативный генератор типа P.A.C.M.A.N. + .desc = Гибкий резервный генератор для питания разнообразного оборудования. + Работает от твердых плазменных листов и рассчитан на мощность до 30 кВт. + .suffix = { "" } +ent-PortableGeneratorSuperPacman = Портативный генератор типа S.U.P.E.R.P.A.C.M.A.N. + .desc = Усовершенствованный генератор для питания отделов. + Работает на урановых листах и рассчитан на мощность до 50 кВт. + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/thief/petcarrier.ftl b/Resources/Locale/ru-RU/thief/petcarrier.ftl new file mode 100644 index 0000000000..d9ad5a9509 --- /dev/null +++ b/Resources/Locale/ru-RU/thief/petcarrier.ftl @@ -0,0 +1,2 @@ +ent-PetCarrier = переноска для животных + .desc = Позволяет с комфортом переносить крупных животных. diff --git a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl index b9c2dfcf64..27f6c1e246 100644 --- a/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl +++ b/Resources/Locale/ru-RU/white/changeling/changeling-entities.ftl @@ -53,7 +53,7 @@ changeling-ability-changeling-lesser-form = Примитивная форма changeling-ability-changeling-lesser-form-desc = Превращает в самую примитивную форму. Полезно для побега из наручников. Стоит 5 химикатов. changeling-ability-bees = Выпустить пчёл -changeling-ability-bees-desc = Выпускает 6 агрессивных пчёл из улья. +changeling-ability-bees-desc = Выпускает 4 агрессивных пчелы из улья. ent-ActionChangelingShop = Эволюции .desc = Эволюционируйте и развивайтесь. diff --git a/Resources/Locale/ru-RU/white/tts/tts-voices2.ftl b/Resources/Locale/ru-RU/white/tts/tts-voices2.ftl index 5d627f11fa..a82773473c 100644 --- a/Resources/Locale/ru-RU/white/tts/tts-voices2.ftl +++ b/Resources/Locale/ru-RU/white/tts/tts-voices2.ftl @@ -67,3 +67,16 @@ tts-voice-name-poppysweeting = Поппи Добринг tts-voice-name-narrator_d3 = Рассказчик tts-voice-name-tosh = Габриэль Тош tts-voice-name-tychus = Тайкус Финдли +tts-voice-name-boris-petrov = Борис Петров +tts-voice-name-karina-petrova = Карина Петрова +tts-voice-name-kate-smirnova = Катя Смирнова +tts-voice-name-semen-baburin = Семён Бабурин +tts-voice-name-tihonov = Лейтенант Тихонов +tts-voice-name-uther = Утер Светоносный +tts-voice-name-female-commander = Женщина командир +tts-voice-name-lord-harkon = Лорд Харкон +tts-voice-name-serana = Серана +tts-voice-name-moira-brown = Мойра Браун +tts-voice-name-robert-maccready = Робер МакКриди +tts-voice-name-threedog = Тридогнайт +tts-voice-name-threedog-radio = Тридогнайт Радио diff --git a/Resources/Maps/White/Shuttles/wizard.yml b/Resources/Maps/White/Shuttles/wizard.yml index 65bdc21b2d..0efc2f61c2 100644 --- a/Resources/Maps/White/Shuttles/wizard.yml +++ b/Resources/Maps/White/Shuttles/wizard.yml @@ -455,13 +455,15 @@ entities: -1,-4: 0: 65535 -1,-3: - 0: 65535 + 0: 65527 + 1: 8 -1,-2: - 0: 65535 + 0: 65527 + 1: 8 0,-4: 0: 62271 - 1: 192 - 2: 3072 + 2: 192 + 3: 3072 0,-3: 0: 65535 0,-2: @@ -538,6 +540,29 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.14975 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -2013,48 +2038,48 @@ entities: parent: 2 - proto: ClothingHeadHatRealWizardFancyAlt entities: - - uid: 274 + - uid: 273 components: - type: Transform pos: -2.571265,8.784239 parent: 2 - proto: ClothingHeadHatWitch1 entities: - - uid: 275 + - uid: 274 components: - type: Transform pos: -5.52865,-9.359842 parent: 2 - proto: ClothingMaskGasChameleon entities: - - uid: 276 + - uid: 275 components: - type: Transform pos: -9.537922,-3.3987489 parent: 2 - proto: ClothingUniformJumpskirtColorBlack entities: - - uid: 277 + - uid: 276 components: - type: Transform pos: -5.617341,-9.575869 parent: 2 - proto: ClothingUniformJumpsuitColorBlack entities: - - uid: 278 + - uid: 277 components: - type: Transform pos: -5.429654,-9.555006 parent: 2 - proto: ComfyChair entities: - - uid: 279 + - uid: 278 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,3.5 parent: 2 - - uid: 280 + - uid: 279 components: - type: Transform rot: -1.5707963267948966 rad @@ -2062,49 +2087,49 @@ entities: parent: 2 - proto: ComputerIFFSyndicate entities: - - uid: 281 + - uid: 280 components: - type: Transform pos: -1.5,10.5 parent: 2 - proto: ComputerShuttle entities: - - uid: 282 + - uid: 281 components: - type: Transform pos: -0.5,10.5 parent: 2 - proto: ComputerSurveillanceWirelessCameraMonitor entities: - - uid: 283 + - uid: 282 components: - type: Transform pos: -3.5,6.5 parent: 2 - proto: CrayonBox entities: - - uid: 284 + - uid: 283 components: - type: Transform pos: -3.8145962,2.6666646 parent: 2 - proto: CrayonRainbow entities: - - uid: 285 + - uid: 284 components: - type: Transform pos: -3.6894722,2.437179 parent: 2 - proto: DiceBag entities: - - uid: 286 + - uid: 285 components: - type: Transform pos: 4.037085,4.423369 parent: 2 - proto: Dresser entities: - - uid: 273 + - uid: 286 components: - type: Transform pos: 0.5,-11.5 @@ -3940,107 +3965,16 @@ entities: - type: Transform pos: 7.5,3.5 parent: 2 -- proto: ScrollArc - entities: - - uid: 598 - components: - - type: Transform - pos: 1.6040134,-1.2683926 - parent: 2 -- proto: ScrollBananaTouch - entities: - - uid: 599 - components: - - type: Transform - pos: 1.6251822,-2.5377865 - parent: 2 -- proto: ScrollBlink - entities: - - uid: 600 - components: - - type: Transform - pos: 1.6251822,-2.2415943 - parent: 2 -- proto: ScrollCards - entities: - - uid: 601 - components: - - type: Transform - pos: 1.6040134,-2.0300293 - parent: 2 -- proto: ScrollCluwneCurse - entities: - - uid: 602 - components: - - type: Transform - pos: 1.6463518,-1.6492105 - parent: 2 -- proto: ScrollEmp - entities: - - uid: 603 - components: - - type: Transform - pos: 1.5828438,-0.99335766 - parent: 2 -- proto: ScrollEtherealJaunt - entities: - - uid: 604 - components: - - type: Transform - pos: 1.5405054,-0.7606354 - parent: 2 -- proto: ScrollFireball - entities: - - uid: 605 - components: - - type: Transform - pos: -2.5028415,-2.4954739 - parent: 2 -- proto: ScrollForce - entities: - - uid: 606 - components: - - type: Transform - pos: -2.5028415,-2.1358118 - parent: 2 -- proto: ScrollForcewall - entities: - - uid: 607 - components: - - type: Transform - pos: -2.460503,-1.8396206 - parent: 2 -- proto: ScrollInstantRecall - entities: - - uid: 608 - components: - - type: Transform - pos: -2.5028415,-1.5222716 - parent: 2 -- proto: ScrollKnock - entities: - - uid: 609 - components: - - type: Transform - pos: -2.5028415,-1.1414533 - parent: 2 -- proto: ScrollMimeTouch - entities: - - uid: 610 - components: - - type: Transform - pos: -2.5028415,-0.908731 - parent: 2 - proto: ScrollTeleport entities: - - uid: 611 + - uid: 598 components: - type: Transform pos: 1.484683,8.741926 parent: 2 - proto: SinkWide entities: - - uid: 612 + - uid: 599 components: - type: Transform rot: 1.5707963267948966 rad @@ -4048,47 +3982,54 @@ entities: parent: 2 - proto: Skub entities: - - uid: 613 + - uid: 600 components: - type: Transform pos: 4.572705,-11.394358 parent: 2 - proto: SMESBasic entities: - - uid: 614 + - uid: 601 components: - type: Transform pos: -0.5,-15.5 parent: 2 - proto: SoapOmega entities: - - uid: 615 + - uid: 602 components: - type: Transform pos: 2.4979851,-9.465773 parent: 2 - proto: SpaceCash1000 entities: - - uid: 616 + - uid: 603 components: - type: Transform pos: 1.5532203,-0.27368456 parent: 2 - proto: SpawnMobBear entities: - - uid: 617 + - uid: 604 components: - type: Transform pos: 7.5,-0.5 parent: 2 - - uid: 618 + - uid: 605 components: - type: Transform pos: 6.5,-2.5 parent: 2 +- proto: SpawnPointWizard + entities: + - uid: 606 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 2 - proto: StealthBox entities: - - uid: 619 + - uid: 607 components: - type: Transform pos: -5.369279,-11.020669 @@ -4099,120 +4040,120 @@ entities: open: True - proto: SubstationBasic entities: - - uid: 620 + - uid: 608 components: - type: Transform pos: -1.5,-15.5 parent: 2 -- proto: SuitStorageWizard +- proto: SuitStorageBasic entities: - - uid: 621 + - uid: 609 components: - type: Transform pos: -0.5,-11.5 parent: 2 - proto: TableCarpet entities: - - uid: 622 + - uid: 610 components: - type: Transform pos: 3.5,4.5 parent: 2 - - uid: 623 + - uid: 611 components: - type: Transform pos: 4.5,3.5 parent: 2 - - uid: 624 + - uid: 612 components: - type: Transform pos: 4.5,4.5 parent: 2 - proto: TableStone entities: - - uid: 625 + - uid: 613 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-1.5 parent: 2 - - uid: 626 + - uid: 614 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-0.5 parent: 2 - - uid: 627 + - uid: 615 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 2 - - uid: 628 + - uid: 616 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-2.5 parent: 2 - - uid: 629 + - uid: 617 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-1.5 parent: 2 - - uid: 630 + - uid: 618 components: - type: Transform pos: -2.5,-2.5 parent: 2 - proto: TableWood entities: - - uid: 631 + - uid: 619 components: - type: Transform pos: 1.5,8.5 parent: 2 - - uid: 632 + - uid: 620 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,9.5 parent: 2 - - uid: 633 + - uid: 621 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,9.5 parent: 2 - - uid: 634 + - uid: 622 components: - type: Transform pos: -2.5,8.5 parent: 2 - - uid: 635 + - uid: 623 components: - type: Transform pos: -4.5,6.5 parent: 2 - - uid: 636 + - uid: 624 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,2.5 parent: 2 - - uid: 637 + - uid: 625 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-9.5 parent: 2 - - uid: 638 + - uid: 626 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,2.5 parent: 2 - - uid: 639 + - uid: 627 components: - type: Transform rot: -1.5707963267948966 rad @@ -4220,60 +4161,60 @@ entities: parent: 2 - proto: TargetStrange entities: - - uid: 640 + - uid: 628 components: - type: Transform pos: -4.5,-11.5 parent: 2 - proto: Thruster entities: - - uid: 641 + - uid: 629 components: - type: Transform pos: -3.5,11.5 parent: 2 - - uid: 642 + - uid: 630 components: - type: Transform pos: 2.5,11.5 parent: 2 - - uid: 643 + - uid: 631 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,5.5 parent: 2 - - uid: 644 + - uid: 632 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,5.5 parent: 2 - - uid: 645 + - uid: 633 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-16.5 parent: 2 - - uid: 646 + - uid: 634 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-17.5 parent: 2 - - uid: 647 + - uid: 635 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-16.5 parent: 2 - - uid: 648 + - uid: 636 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-8.5 parent: 2 - - uid: 649 + - uid: 637 components: - type: Transform rot: 1.5707963267948966 rad @@ -4281,7 +4222,7 @@ entities: parent: 2 - proto: ToiletEmpty entities: - - uid: 650 + - uid: 638 components: - type: Transform rot: 3.141592653589793 rad @@ -4289,673 +4230,673 @@ entities: parent: 2 - proto: ToolboxEmergencyFilled entities: - - uid: 651 + - uid: 639 components: - type: Transform pos: -4.5425706,-10.5089035 parent: 2 - proto: VendingMachineClothing entities: - - uid: 652 + - uid: 640 components: - type: Transform pos: -1.5,2.5 parent: 2 - proto: VendingMachineCoffee entities: - - uid: 653 + - uid: 641 components: - type: Transform pos: 3.5,6.5 parent: 2 - proto: VendingMachineDiscount entities: - - uid: 654 + - uid: 642 components: - type: Transform pos: 0.5,2.5 parent: 2 - proto: VendingMachineGames entities: - - uid: 655 + - uid: 643 components: - type: Transform pos: 2.5,6.5 parent: 2 - proto: VendingMachineTankDispenserEVA entities: - - uid: 656 + - uid: 644 components: - type: Transform pos: -8.5,-3.5 parent: 2 - proto: WallDiamond entities: - - uid: 657 + - uid: 645 components: - type: Transform pos: -5.5,-6.5 parent: 2 - - uid: 658 + - uid: 646 components: - type: Transform pos: -3.5,-6.5 parent: 2 - - uid: 659 + - uid: 647 components: - type: Transform pos: -1.5,-6.5 parent: 2 - - uid: 660 + - uid: 648 components: - type: Transform pos: 0.5,-6.5 parent: 2 - - uid: 661 + - uid: 649 components: - type: Transform pos: 2.5,-6.5 parent: 2 - - uid: 662 + - uid: 650 components: - type: Transform pos: 4.5,-6.5 parent: 2 - proto: WallUranium entities: - - uid: 663 + - uid: 651 components: - type: Transform pos: -2.5,6.5 parent: 2 - - uid: 664 + - uid: 652 components: - type: Transform pos: 1.5,6.5 parent: 2 - - uid: 665 + - uid: 653 components: - type: Transform pos: 1.5,11.5 parent: 2 - - uid: 666 + - uid: 654 components: - type: Transform pos: 1.5,10.5 parent: 2 - - uid: 667 + - uid: 655 components: - type: Transform pos: 2.5,10.5 parent: 2 - - uid: 668 + - uid: 656 components: - type: Transform pos: 2.5,7.5 parent: 2 - - uid: 669 + - uid: 657 components: - type: Transform pos: 1.5,7.5 parent: 2 - - uid: 670 + - uid: 658 components: - type: Transform pos: -2.5,11.5 parent: 2 - - uid: 671 + - uid: 659 components: - type: Transform pos: -2.5,10.5 parent: 2 - - uid: 672 + - uid: 660 components: - type: Transform pos: -3.5,10.5 parent: 2 - - uid: 673 + - uid: 661 components: - type: Transform pos: -2.5,7.5 parent: 2 - - uid: 674 + - uid: 662 components: - type: Transform pos: -3.5,7.5 parent: 2 - - uid: 675 + - uid: 663 components: - type: Transform pos: -6.5,6.5 parent: 2 - - uid: 676 + - uid: 664 components: - type: Transform pos: -5.5,6.5 parent: 2 - - uid: 677 + - uid: 665 components: - type: Transform pos: -5.5,7.5 parent: 2 - - uid: 678 + - uid: 666 components: - type: Transform pos: -4.5,7.5 parent: 2 - - uid: 679 + - uid: 667 components: - type: Transform pos: -6.5,5.5 parent: 2 - - uid: 680 + - uid: 668 components: - type: Transform pos: -7.5,5.5 parent: 2 - - uid: 681 + - uid: 669 components: - type: Transform pos: -7.5,4.5 parent: 2 - - uid: 682 + - uid: 670 components: - type: Transform pos: -8.5,4.5 parent: 2 - - uid: 683 + - uid: 671 components: - type: Transform pos: -1.5,1.5 parent: 2 - - uid: 684 + - uid: 672 components: - type: Transform pos: 0.5,1.5 parent: 2 - - uid: 685 + - uid: 673 components: - type: Transform pos: 3.5,7.5 parent: 2 - - uid: 686 + - uid: 674 components: - type: Transform pos: 4.5,7.5 parent: 2 - - uid: 687 + - uid: 675 components: - type: Transform pos: 4.5,6.5 parent: 2 - - uid: 688 + - uid: 676 components: - type: Transform pos: 5.5,6.5 parent: 2 - - uid: 689 + - uid: 677 components: - type: Transform pos: 5.5,5.5 parent: 2 - - uid: 690 + - uid: 678 components: - type: Transform pos: 6.5,5.5 parent: 2 - - uid: 691 + - uid: 679 components: - type: Transform pos: 6.5,4.5 parent: 2 - - uid: 692 + - uid: 680 components: - type: Transform pos: 7.5,4.5 parent: 2 - - uid: 693 + - uid: 681 components: - type: Transform pos: 7.5,1.5 parent: 2 - - uid: 694 + - uid: 682 components: - type: Transform pos: 3.5,1.5 parent: 2 - - uid: 695 + - uid: 683 components: - type: Transform pos: 2.5,1.5 parent: 2 - - uid: 696 + - uid: 684 components: - type: Transform pos: 1.5,1.5 parent: 2 - - uid: 697 + - uid: 685 components: - type: Transform pos: 1.5,3.5 parent: 2 - - uid: 698 + - uid: 686 components: - type: Transform pos: 1.5,2.5 parent: 2 - - uid: 699 + - uid: 687 components: - type: Transform pos: 1.5,5.5 parent: 2 - - uid: 700 + - uid: 688 components: - type: Transform pos: -2.5,1.5 parent: 2 - - uid: 701 + - uid: 689 components: - type: Transform pos: -2.5,2.5 parent: 2 - - uid: 702 + - uid: 690 components: - type: Transform pos: -2.5,3.5 parent: 2 - - uid: 703 + - uid: 691 components: - type: Transform pos: -2.5,5.5 parent: 2 - - uid: 704 + - uid: 692 components: - type: Transform pos: -3.5,1.5 parent: 2 - - uid: 705 + - uid: 693 components: - type: Transform pos: -4.5,1.5 parent: 2 - - uid: 706 + - uid: 694 components: - type: Transform pos: -5.5,1.5 parent: 2 - - uid: 707 + - uid: 695 components: - type: Transform pos: -7.5,1.5 parent: 2 - - uid: 708 + - uid: 696 components: - type: Transform pos: -8.5,1.5 parent: 2 - - uid: 709 + - uid: 697 components: - type: Transform pos: 6.5,-7.5 parent: 2 - - uid: 710 + - uid: 698 components: - type: Transform pos: 7.5,-7.5 parent: 2 - - uid: 711 + - uid: 699 components: - type: Transform pos: -8.5,-4.5 parent: 2 - - uid: 712 + - uid: 700 components: - type: Transform pos: -8.5,-7.5 parent: 2 - - uid: 713 + - uid: 701 components: - type: Transform pos: 8.5,1.5 parent: 2 - - uid: 714 + - uid: 702 components: - type: Transform pos: 8.5,0.5 parent: 2 - - uid: 715 + - uid: 703 components: - type: Transform pos: 9.5,0.5 parent: 2 - - uid: 716 + - uid: 704 components: - type: Transform pos: 9.5,-3.5 parent: 2 - - uid: 717 + - uid: 705 components: - type: Transform pos: 8.5,-3.5 parent: 2 - - uid: 718 + - uid: 706 components: - type: Transform pos: 8.5,-4.5 parent: 2 - - uid: 719 + - uid: 707 components: - type: Transform pos: 7.5,-4.5 parent: 2 - - uid: 720 + - uid: 708 components: - type: Transform pos: 3.5,0.5 parent: 2 - - uid: 721 + - uid: 709 components: - type: Transform pos: 3.5,-3.5 parent: 2 - - uid: 722 + - uid: 710 components: - type: Transform pos: 3.5,-4.5 parent: 2 - - uid: 723 + - uid: 711 components: - type: Transform pos: 2.5,-4.5 parent: 2 - - uid: 724 + - uid: 712 components: - type: Transform pos: 1.5,-4.5 parent: 2 - - uid: 725 + - uid: 713 components: - type: Transform pos: -3.5,-17.5 parent: 2 - - uid: 726 + - uid: 714 components: - type: Transform pos: -3.5,-16.5 parent: 2 - - uid: 727 + - uid: 715 components: - type: Transform pos: 2.5,-17.5 parent: 2 - - uid: 728 + - uid: 716 components: - type: Transform pos: 2.5,-16.5 parent: 2 - - uid: 729 + - uid: 717 components: - type: Transform pos: -0.5,-16.5 parent: 2 - - uid: 730 + - uid: 718 components: - type: Transform pos: -2.5,-4.5 parent: 2 - - uid: 731 + - uid: 719 components: - type: Transform pos: -4.5,0.5 parent: 2 - - uid: 732 + - uid: 720 components: - type: Transform pos: -4.5,-3.5 parent: 2 - - uid: 733 + - uid: 721 components: - type: Transform pos: -4.5,-4.5 parent: 2 - - uid: 734 + - uid: 722 components: - type: Transform pos: -3.5,-4.5 parent: 2 - - uid: 735 + - uid: 723 components: - type: Transform pos: -7.5,-4.5 parent: 2 - - uid: 736 + - uid: 724 components: - type: Transform pos: -6.5,-4.5 parent: 2 - - uid: 737 + - uid: 725 components: - type: Transform pos: -7.5,-7.5 parent: 2 - - uid: 738 + - uid: 726 components: - type: Transform pos: -7.5,-8.5 parent: 2 - - uid: 739 + - uid: 727 components: - type: Transform pos: -6.5,-8.5 parent: 2 - - uid: 740 + - uid: 728 components: - type: Transform pos: -6.5,-9.5 parent: 2 - - uid: 741 + - uid: 729 components: - type: Transform pos: -6.5,-12.5 parent: 2 - - uid: 742 + - uid: 730 components: - type: Transform pos: -5.5,-12.5 parent: 2 - - uid: 743 + - uid: 731 components: - type: Transform pos: -5.5,-15.5 parent: 2 - - uid: 744 + - uid: 732 components: - type: Transform pos: -3.5,-15.5 parent: 2 - - uid: 745 + - uid: 733 components: - type: Transform pos: 2.5,-15.5 parent: 2 - - uid: 746 + - uid: 734 components: - type: Transform pos: 4.5,-15.5 parent: 2 - - uid: 747 + - uid: 735 components: - type: Transform pos: -4.5,-15.5 parent: 2 - - uid: 748 + - uid: 736 components: - type: Transform pos: 3.5,-15.5 parent: 2 - - uid: 749 + - uid: 737 components: - type: Transform pos: 4.5,-12.5 parent: 2 - - uid: 750 + - uid: 738 components: - type: Transform pos: 5.5,-12.5 parent: 2 - - uid: 751 + - uid: 739 components: - type: Transform pos: 6.5,-8.5 parent: 2 - - uid: 752 + - uid: 740 components: - type: Transform pos: 5.5,-8.5 parent: 2 - - uid: 753 + - uid: 741 components: - type: Transform pos: 5.5,-9.5 parent: 2 - - uid: 754 + - uid: 742 components: - type: Transform pos: -10.5,-4.5 parent: 2 - - uid: 755 + - uid: 743 components: - type: Transform pos: -10.5,1.5 parent: 2 - - uid: 756 + - uid: 744 components: - type: Transform pos: -9.5,-1.5 parent: 2 - - uid: 757 + - uid: 745 components: - type: Transform pos: -10.5,-1.5 parent: 2 - - uid: 758 + - uid: 746 components: - type: Transform pos: -7.5,-1.5 parent: 2 - - uid: 759 + - uid: 747 components: - type: Transform pos: -5.5,-8.5 parent: 2 - - uid: 760 + - uid: 748 components: - type: Transform pos: -3.5,-8.5 parent: 2 - - uid: 761 + - uid: 749 components: - type: Transform pos: -2.5,-8.5 parent: 2 - - uid: 762 + - uid: 750 components: - type: Transform pos: -1.5,-8.5 parent: 2 - - uid: 763 + - uid: 751 components: - type: Transform pos: 0.5,-8.5 parent: 2 - - uid: 764 + - uid: 752 components: - type: Transform pos: 1.5,-8.5 parent: 2 - - uid: 765 + - uid: 753 components: - type: Transform pos: 2.5,-8.5 parent: 2 - - uid: 766 + - uid: 754 components: - type: Transform pos: 4.5,-8.5 parent: 2 - - uid: 767 + - uid: 755 components: - type: Transform pos: -4.5,-12.5 parent: 2 - - uid: 768 + - uid: 756 components: - type: Transform pos: -2.5,-12.5 parent: 2 - - uid: 769 + - uid: 757 components: - type: Transform pos: -2.5,-11.5 parent: 2 - - uid: 770 + - uid: 758 components: - type: Transform pos: -2.5,-9.5 parent: 2 - - uid: 771 + - uid: 759 components: - type: Transform pos: -2.5,-10.5 parent: 2 - - uid: 772 + - uid: 760 components: - type: Transform pos: 1.5,-9.5 parent: 2 - - uid: 773 + - uid: 761 components: - type: Transform pos: 1.5,-10.5 parent: 2 - - uid: 774 + - uid: 762 components: - type: Transform pos: 1.5,-11.5 parent: 2 - - uid: 775 + - uid: 763 components: - type: Transform pos: 1.5,-12.5 parent: 2 - - uid: 776 + - uid: 764 components: - type: Transform pos: -1.5,-12.5 parent: 2 - - uid: 777 + - uid: 765 components: - type: Transform pos: 0.5,-12.5 parent: 2 - - uid: 778 + - uid: 766 components: - type: Transform pos: 2.5,-12.5 parent: 2 - - uid: 779 + - uid: 767 components: - type: Transform pos: 3.5,-12.5 parent: 2 - - uid: 780 + - uid: 768 components: - type: Transform pos: -8.5,-1.5 parent: 2 - proto: WeaponCapacitorRecharger entities: - - uid: 781 + - uid: 769 components: - type: Transform pos: -2.5,9.5 diff --git a/Resources/Prototypes/Actions/changeling.yml b/Resources/Prototypes/Actions/changeling.yml index 282b53f006..15f1271913 100644 --- a/Resources/Prototypes/Actions/changeling.yml +++ b/Resources/Prototypes/Actions/changeling.yml @@ -76,6 +76,9 @@ event: !type:ExtractionStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance - type: entity id: ActionTransformSting @@ -89,6 +92,9 @@ event: !type:TransformStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance - type: entity id: ActionBlindSting @@ -102,6 +108,10 @@ event: !type:BlindStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance + - Blindable - type: entity id: ActionMuteSting @@ -115,6 +125,9 @@ event: !type:MuteStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance - type: entity id: ActionHallucinationSting @@ -128,6 +141,9 @@ event: !type:HallucinationStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance - type: entity id: ActionCryoSting @@ -141,11 +157,15 @@ event: !type:CryoStingActionEvent canTargetSelf: false useDelay: 1 + whitelist: + components: + - HumanoidAppearance + - Temperature - type: entity id: ActionAdrenalineSacs name: changeling-ability-adrenaline-sacks - description: changeling-ability-adrenaline-sacks.desc + description: changeling-ability-adrenaline-sacks-desc noSpawn: true components: - type: InstantAction @@ -153,6 +173,8 @@ icon: White/Actions/changeling.rsi/adrenaline_sacs.png event: !type:AdrenalineSacsActionEvent useDelay: 1 + checkConsciousness: false + checkCanInteract: false - type: LesserFormRestricted - type: entity @@ -166,6 +188,8 @@ icon: White/Actions/changeling.rsi/fleshmend.png event: !type:FleshmendActionEvent useDelay: 1 + checkConsciousness: false + checkCanInteract: false - type: LesserFormRestricted - type: entity diff --git a/Resources/Prototypes/Alerts/changeling.yml b/Resources/Prototypes/Alerts/changeling.yml index 682e7230d0..eae984518d 100644 --- a/Resources/Prototypes/Alerts/changeling.yml +++ b/Resources/Prototypes/Alerts/changeling.yml @@ -1,6 +1,5 @@ - type: alert id: Chemicals - category: Health #it's like ghostie health icons: - sprite: /Textures/Interface/Alerts/essence_counter.rsi state: essence0 diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 7c048777ea..d356b41577 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -545,6 +545,7 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 + - type: WizardClothes #Organic Space Suit - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 296454f82e..c406983ca4 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -703,6 +703,7 @@ useRate: 0 - type: UseDelay delay: 10.0 + - type: WizardClothes #Ling Space Suit - type: entity diff --git a/Resources/Prototypes/Entities/Effects/lightning.yml b/Resources/Prototypes/Entities/Effects/lightning.yml index 11e6c6c0f0..69c98f8bab 100644 --- a/Resources/Prototypes/Entities/Effects/lightning.yml +++ b/Resources/Prototypes/Entities/Effects/lightning.yml @@ -176,3 +176,16 @@ - type: Lightning canArc: true lightningPrototype: WizardLightning + +- type: entity + name: wizard lightning + id: WeakWizardLightning + parent: BaseLightning + noSpawn: true + components: + - type: Electrified + requirePower: false + ignoreInsulation: true + - type: Lightning + canArc: true + lightningPrototype: WeakWizardLightning diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml index 4dcc97ad31..67998c7e88 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml @@ -33,12 +33,12 @@ prototypes: - PosterContrabandFreeTonto - PosterContrabandAtmosiaDeclarationIndependence - - PosterContrabandFunPolice + #- PosterContrabandFunPolice - PosterContrabandLustyExomorph - PosterContrabandSyndicateRecruitment - PosterContrabandClown - PosterContrabandSmoke - - PosterContrabandGreyTide + #- PosterContrabandGreyTide - PosterContrabandMissingGloves - PosterContrabandHackingGuide - PosterContrabandRIPBadger @@ -91,7 +91,7 @@ - PosterContrabandEnlistGorlex - PosterContrabandInterdyne - PosterContrabandWaffleCorp - - PosterContrabandMissingSpacepen + #- PosterContrabandMissingSpacepen # HAHAHAHAHAAH chance: 1 - type: entity @@ -135,12 +135,12 @@ - PosterLegit50thAnniversaryVintageReprint - PosterLegitFruitBowl - PosterLegitPDAAd - - PosterLegitEnlist + #- PosterLegitEnlist - PosterLegitNanomichiAd - PosterLegit12Gauge - PosterLegitHighClassMartini - PosterLegitTheOwl - - PosterLegitNoERP + #- PosterLegitNoERP - PosterLegitCarbonDioxide - PosterLegitDickGumshue - PosterLegitThereIsNoGasGiant diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index e91a4d0ede..f5ebed108d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -236,3 +236,44 @@ stunAmount: 2 knockdownAmount: 2 - type: TeslaProjectile + +- type: entity + id: ProjectileMagicMissile + name: magic missile + description: asdf + parent: BaseBullet + noSpawn: true + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/magic.rsi + layers: + - state: spell + color: pink + - type: Projectile + damage: + groups: + Burn: 0 + - type: StaminaDamageOnCollide + damage: 60 + - type: Ammo + muzzleFlash: null + - type: Trail + splineIteratorType: CatmullRom + splineRendererType: Continuous + creationMethod: OnMove + lengthStep: 0.1 + scale: 0.05, 0.0 + lifetime: 1 + randomWalk: 0.1, 0.001 + gravity: 0.0, 0.0 + texturePath: /Textures/White/Effects/Trails/Continuous/trail.png + gradientIteratorType: Linear + gradient: + - 1, 0, 0, 1 + - 1, 1, 0, 0.85 + - 0, 1, 0, 0.7 + - 0, 1, 1, 0.55 + - 0, 0, 1, 0.4 + - 1, 0, 1, 0.25 + - 1, 0, 0, 0.1 + optionsConcealable: true diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index c3fbb998b2..da5875d2bc 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -120,4 +120,10 @@ id: BaseStationAllEventsEligible abstract: true components: - - type: StationEventEligible # For when someone makes this more granular in the future. \ No newline at end of file + - type: StationEventEligible # For when someone makes this more granular in the future. + +- type: entity + id: BaseStationTeleportLocation + abstract: true + components: + - type: TeleportLocationTargetStation diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index ab885b03e5..c1d7333db1 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -25,6 +25,7 @@ - BaseStationSiliconLawCrewsimov - BaseStationAllEventsEligible - BaseStationNanotrasen + - BaseStationTeleportLocation noSpawn: true components: - type: Transform diff --git a/Resources/Prototypes/Magic/knock_spell.yml b/Resources/Prototypes/Magic/knock_spell.yml index 612e7b175f..dc7b38117d 100644 --- a/Resources/Prototypes/Magic/knock_spell.yml +++ b/Resources/Prototypes/Magic/knock_spell.yml @@ -4,12 +4,11 @@ description: This spell opens nearby doors. noSpawn: true components: - - type: Magic - requiresClothes: false - type: InstantAction useDelay: 8 itemIconStyle: BigAction checkCanInteract: false + alwaysPlaySound: false icon: sprite: Objects/Magic/magicactions.rsi state: knock diff --git a/Resources/Prototypes/Magic/smite_spells.yml b/Resources/Prototypes/Magic/smite_spells.yml index e629e56505..55d3e8a293 100644 --- a/Resources/Prototypes/Magic/smite_spells.yml +++ b/Resources/Prototypes/Magic/smite_spells.yml @@ -1,9 +1,11 @@ -- type: entity +- type: entity id: ActionSmite name: Smite description: Instantly gibs a target. noSpawn: true components: + - type: Magic + requiresClothes: true - type: EntityTargetAction useDelay: 60 itemIconStyle: BigAction @@ -12,6 +14,7 @@ - Body canTargetSelf: false interactOnMiss: false + alwaysPlaySound: false sound: !type:SoundPathSpecifier path: /Audio/Magic/disintegrate.ogg icon: diff --git a/Resources/Prototypes/Magic/white.yml b/Resources/Prototypes/Magic/white.yml index 4e1e4831fe..19f55b7f49 100644 --- a/Resources/Prototypes/Magic/white.yml +++ b/Resources/Prototypes/Magic/white.yml @@ -217,6 +217,9 @@ noSpawn: true components: - type: EntityTargetAction + whitelist: + components: + - HumanoidAppearance canTargetSelf: false range: 3 useDelay: 60 @@ -233,6 +236,9 @@ noSpawn: true components: - type: EntityTargetAction + whitelist: + components: + - HumanoidAppearance canTargetSelf: false range: 3 useDelay: 30 @@ -249,6 +255,9 @@ noSpawn: true components: - type: EntityTargetAction + whitelist: + components: + - HumanoidAppearance canTargetSelf: false range: 3 useDelay: 30 @@ -278,8 +287,6 @@ name: Teleport noSpawn: true components: - - type: Magic - requiresClothes: true - type: InstantAction checkCanInteract: false useDelay: 60 diff --git a/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml b/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml index f4a6fb4d88..c4b5c6ddf6 100644 --- a/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml +++ b/Resources/Prototypes/_White/Entities/Clothing/Head/hive_head.yml @@ -21,7 +21,6 @@ - type: FlashImmunity - type: EyeProtection - type: HiveHead - beesAmount: 6 - type: entity id: ActionReleaseBees diff --git a/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml index 09f56449dc..21bd42b022 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml @@ -69,11 +69,6 @@ graph: CultPylon node: pylon - type: Concealable - - type: AtmosDevice - - type: GasMiner - maxExternalPressure: 100 - spawnAmount: 10 - spawnGas: Oxygen - type: entity id: AltarTome diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml index acd7c8ea2e..c110b7a49d 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml @@ -36,8 +36,6 @@ - HolyKatana - MultiverseBlade - VorpalScythe - - HighFrequencyBlade - - SpellBlade - PossessedBlade - ChainsawHand - HolyWhip @@ -196,54 +194,6 @@ sprite: White/Objects/Weapons/Chaplain/scythe-inhands.rsi - type: HolyWeapon -- type: entity - name: высокочастотный клинок - parent: HolyKatana - id: HighFrequencyBlade - description: Клинок, способный отражать выстрелы. - components: - - type: Sprite - sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi - - type: MeleeWeapon - damage: - types: - Slash: 18 - - type: Clothing - sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi - slots: - - back - - suitStorage - - type: Reflect - reflectProb: 0.33 - - type: Item - sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi - - type: HolyWeapon - -- type: entity - name: клинок заклинаний - parent: HolyKatana - id: SpellBlade - description: Клинок, с шансом 20% наносящий критический удар. - components: - - type: Sprite - sprite: White/Objects/Weapons/Chaplain/spellblade.rsi - - type: MeleeWeapon - wideAnimationRotation: 135 - damage: - types: - Slash: 18 - - type: Clothing - sprite: White/Objects/Weapons/Chaplain/spellblade.rsi - slots: - - back - - suitStorage - - type: Crit - critChance: 20 - critMultiplier: 2.5 - - type: Item - sprite: White/Objects/Weapons/Chaplain/spellblade.rsi - - type: HolyWeapon - - type: entity name: одержимый клинок parent: HolyKatana diff --git a/Resources/Prototypes/_White/Objects/Scrolls/scrolls.yml b/Resources/Prototypes/_White/Objects/Scrolls/scrolls.yml index da08feacfa..ab691c602a 100644 --- a/Resources/Prototypes/_White/Objects/Scrolls/scrolls.yml +++ b/Resources/Prototypes/_White/Objects/Scrolls/scrolls.yml @@ -142,3 +142,12 @@ - type: Scroll actionId: ActionTeleportSpell learnPopup: scroll-component-teleport + +- type: entity + id: ScrollSmite + parent: BaseScroll + name: "Smite scroll" + components: + - type: Scroll + actionId: ActionSmite + learnPopup: scroll-component-smite diff --git a/Resources/Prototypes/_White/Wizard/magic_items.yml b/Resources/Prototypes/_White/Wizard/magic_items.yml new file mode 100644 index 0000000000..c1555ee2c7 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/magic_items.yml @@ -0,0 +1,53 @@ +- type: entity + name: высокочастотный клинок + parent: Katana + id: HighFrequencyBlade + description: Клинок, атакующий с невероятной быстротой, а также способный отражать выстрелы. + components: + - type: Sprite + sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi + - type: MeleeWeapon + autoAttack: true + attackRate: 4 + damage: + types: + Slash: 10 + - type: Clothing + sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi + slots: + - back + - suitStorage + - type: Reflect + reflectProb: 0.4 + - type: Item + sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi + +- type: entity + name: клинок заклинаний + parent: Katana + id: SpellBlade + description: Магический клинок, наделяемый силой одного из пяти аспектов. + components: + - type: Sprite + sprite: White/Objects/Weapons/Chaplain/spellblade.rsi + - type: MeleeWeapon + wideAnimationRotation: 135 + damage: + types: + Slash: 30 + - type: Clothing + sprite: White/Objects/Weapons/Chaplain/spellblade.rsi + slots: + - back + - suitStorage + - type: Item + sprite: White/Objects/Weapons/Chaplain/spellblade.rsi + - type: UserInterface + interfaces: + - key: enum.SpellBladeUiKey.Key + type: SpellBladeBUI + - type: ActivatableUI + key: enum.SpellBladeUiKey.Key + inHandsOnly: true + closeOnHandDeselect: true + - type: SpellBlade diff --git a/Resources/Prototypes/_White/Wizard/spellblade.yml b/Resources/Prototypes/_White/Wizard/spellblade.yml new file mode 100644 index 0000000000..635f32a704 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/spellblade.yml @@ -0,0 +1,49 @@ +- type: entity + name: Огонь + description: Клинок заклинаний наделяется способностью поджигать врагов. И тот, кто удерживает клинок в руках, становится неуязвимым к огню и высокой температуре. + id: AspectFire + noSpawn: true + components: + - type: Sprite + sprite: Objects/Magic/magicactions.rsi + state: fireball + +- type: entity + name: Холод + description: Клинок заклинаний наделяется замораживать врагов. И тот, кто удерживает клинок в руках, становится неуязвимым к низкой температуре. + id: AspectFrost + noSpawn: true + components: + - type: Sprite + sprite: Objects/Magic/magicactions.rsi + state: icebeam_active + +- type: entity + name: Молния + description: Клинок заклинаний наделяется способностью каждые 10 секунд при ударе излучать шоковый заряд, поражающий ближайшие цели. + id: AspectLightning + noSpawn: true + components: + - type: Sprite + sprite: Objects/Magic/magicactions.rsi + state: thunder + +- type: entity + name: Блюспейс + description: Клинок заклинаний наделяется способностью телепортации на далёкое расстояние. + id: AspectBluespace + noSpawn: true + components: + - type: Sprite + sprite: Objects/Magic/magicactions.rsi + state: blink + +- type: entity + name: Магическая Стрела + description: Клинок заклинаний наделяется способностью стрелять оглушающей магической стрелой. + id: AspectMagicMissile + noSpawn: true + components: + - type: Sprite + sprite: Objects/Magic/magicactions.rsi + state: magicmissile diff --git a/Resources/Prototypes/_White/Wizard/spellbook.yml b/Resources/Prototypes/_White/Wizard/spellbook.yml new file mode 100644 index 0000000000..f1cfda215f --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/spellbook.yml @@ -0,0 +1,63 @@ +- type: entity + id: SpellBook + parent: BaseItem + name: spell book + description: An unearthly tome that glows with power. + components: + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_old + color: "#473F40" + - state: decor_wingette + color: "#352D2F" + - state: icon_stars + color: gold + - type: UserInterface + interfaces: + - key: enum.StoreUiKey.Key + type: StoreBoundUserInterface + - type: ActivatableUI + key: enum.StoreUiKey.Key + - type: Store + preset: StorePresetSpellBook + balance: + SpellPoint: 10 + - type: GiftIgnore + +- type: storePreset + id: StorePresetSpellBook + storeName: Spell Book + categories: + - AttackSpells + - DefenceSpells + - UtilitySpells + - MagicItems + currencyWhitelist: + - SpellPoint + +- type: currency + id: SpellPoint + displayName: store-currency-display-spell-point + canWithdraw: false + +- type: storeCategory + id: AttackSpells + name: store-category-spells-attack + priority: 0 + +- type: storeCategory + id: DefenceSpells + name: store-category-spells-defence + priority: 1 + +- type: storeCategory + id: UtilitySpells + name: store-category-spells-utility + priority: 2 + +- type: storeCategory + id: MagicItems + name: store-category-magic-items + priority: 3 diff --git a/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml b/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml new file mode 100644 index 0000000000..1d891bba02 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml @@ -0,0 +1,262 @@ +- type: listing + id: SpellBookFireball + name: spellbook-fireball-name + description: spellbook-fireball-desc + icon: + sprite: Objects/Magic/magicactions.rsi + state: fireball + productEntity: ScrollFireball + cost: + SpellPoint: 2 + categories: + - AttackSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookForcewall + name: spellbook-forcewall-name + description: spellbook-forcewall-desc + productEntity: ScrollForcewall + icon: + sprite: Objects/Magic/magicactions.rsi + state: shield + cost: + SpellPoint: 1 + categories: + - DefenceSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookKnock + name: spellbook-knock-name + description: spellbook-knock-desc + productEntity: ScrollKnock + icon: + sprite: Objects/Magic/magicactions.rsi + state: knock + cost: + SpellPoint: 1 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookArc + name: spellbook-arc-name + description: spellbook-arc-desc + productEntity: ScrollArc + icon: + sprite: Objects/Magic/magicactions.rsi + state: thunder + cost: + SpellPoint: 2 + categories: + - AttackSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookForce + name: spellbook-force-name + description: spellbook-force-desc + productEntity: ScrollForce + icon: + sprite: Objects/Magic/magicactions.rsi + state: push + cost: + SpellPoint: 2 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookCards + name: spellbook-cards-name + description: spellbook-cards-desc + productEntity: ScrollCards + icon: + sprite: Objects/Magic/card.rsi + state: icon + cost: + SpellPoint: 2 + categories: + - AttackSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookBlink + name: spellbook-blink-name + description: spellbook-blink-desc + productEntity: ScrollBlink + icon: + sprite: Objects/Magic/magicactions.rsi + state: blink + cost: + SpellPoint: 1 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookEtherealJaunt + name: spellbook-jaunt-name + description: spellbook-jaunt-desc + productEntity: ScrollEtherealJaunt + icon: + sprite: Objects/Magic/magicactions.rsi + state: jaunt + cost: + SpellPoint: 2 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookEmp + name: spellbook-emp-name + description: spellbook-emp-desc + productEntity: ScrollEmp + icon: + sprite: Objects/Magic/magicactions.rsi + state: emp_new + cost: + SpellPoint: 1 + categories: + - DefenceSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookCluwneCurse + name: spellbook-cluwne-name + description: spellbook-cluwne-desc + productEntity: ScrollCluwneCurse + icon: + sprite: Objects/Magic/magicactions.rsi + state: cluwne + cost: + SpellPoint: 2 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookBananaTouch + name: spellbook-clown-name + description: spellbook-clown-desc + productEntity: ScrollBananaTouch + icon: + sprite: Objects/Magic/magicactions.rsi + state: clown + cost: + SpellPoint: 1 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookMimeTouch + name: spellbook-mime-name + description: spellbook-mime-desc + productEntity: ScrollMimeTouch + icon: + sprite: Objects/Magic/magicactions.rsi + state: mime_curse + cost: + SpellPoint: 1 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookInstantRecall + name: spellbook-recall-name + description: spellbook-recall-desc + productEntity: ScrollInstantRecall + icon: + sprite: Objects/Magic/magicactions.rsi + state: summons + cost: + SpellPoint: 1 + categories: + - UtilitySpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookSmite + name: spellbook-smite-name + description: spellbook-smite-desc + productEntity: ScrollSmite + icon: + sprite: Objects/Magic/magicactions.rsi + state: gib + cost: + SpellPoint: 2 + categories: + - AttackSpells + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookHardsuit + name: spellbook-hardsuit-name + description: spellbook-hardsuit-desc + productEntity: ClothingOuterHardsuitWizard + cost: + SpellPoint: 4 + categories: + - MagicItems + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookHighFrequencyBlade + name: spellbook-hfrequency-name + description: spellbook-hfrequency-desc + productEntity: HighFrequencyBlade + cost: + SpellPoint: 2 + categories: + - MagicItems + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellBookSpellBlade + name: spellbook-spellblade-name + description: spellbook-spellblade-desc + productEntity: SpellBlade + cost: + SpellPoint: 2 + categories: + - MagicItems + conditions: + - !type:ListingLimitedStockCondition + stock: 1 diff --git a/Resources/Prototypes/_White/Wizard/wizard.yml b/Resources/Prototypes/_White/Wizard/wizard.yml index 67742536d1..7fec85d92a 100644 --- a/Resources/Prototypes/_White/Wizard/wizard.yml +++ b/Resources/Prototypes/_White/Wizard/wizard.yml @@ -42,6 +42,7 @@ head: ClothingHeadHatRealWizardFancy outerClothing: ClothingOuterRealWizardFancy shoes: ClothingShoesWizard + pocket1: SpellBook innerClothingSkirt: ClothingUniformJumpskirtColorDarkBlue satchel: ClothingBackpackSatchelFilled duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/_White/tts-voices.yml b/Resources/Prototypes/_White/tts-voices.yml index d357124999..b255e15316 100644 --- a/Resources/Prototypes/_White/tts-voices.yml +++ b/Resources/Prototypes/_White/tts-voices.yml @@ -762,3 +762,80 @@ sex: Male speaker: tychus +- type: ttsVoice + name: tts-voice-name-boris-petrov + sex: Male + speaker: boris_petrov_father_tb + id: BorisPetrovFatherTb + +- type: ttsVoice + name: tts-voice-name-karina-petrova + sex: Female + speaker: karina_petrova_tb + id: KarinaPetrovaTb + +- type: ttsVoice + name: tts-voice-name-kate-smirnova + sex: Female + speaker: kate_smirnova_tb + id: KateSmirnovaTb + +- type: ttsVoice + name: tts-voice-name-semen-baburin + sex: Male + speaker: semen_baburin_tb + id: SemenBaburinTb + +- type: ttsVoice + name: tts-voice-name-tihonov + sex: Male + speaker: tihonov_tb + id: TihonovTb + +- type: ttsVoice + name: tts-voice-name-uther + sex: Male + speaker: uther_hs + id: UtherHs + +- type: ttsVoice + name: tts-voice-name-female-commander + sex: Female + speaker: female_commander + id: FemaleCommander + +- type: ttsVoice + name: tts-voice-name-lord-harkon + sex: Male + speaker: lord_harkon + id: LordHarkon + +- type: ttsVoice + name: tts-voice-name-serana + sex: Female + speaker: serana + id: Serana + +- type: ttsVoice + name: tts-voice-name-moira-brown + sex: Female + speaker: moira_brown + id: MoiraBrown + +- type: ttsVoice + name: tts-voice-name-robert-maccready + sex: Male + speaker: robert_maccready + id: RobertMaccready + +- type: ttsVoice + name: tts-voice-name-threedog + sex: Male + speaker: threedog + id: Threedog + +- type: ttsVoice + name: tts-voice-name-threedog-radio + sex: Male + speaker: threedog_radio + id: ThreedogRadio diff --git a/Resources/Textures/Objects/Magic/magicactions.rsi/icebeam_active.png b/Resources/Textures/Objects/Magic/magicactions.rsi/icebeam_active.png new file mode 100644 index 0000000000..c876e20bfc Binary files /dev/null and b/Resources/Textures/Objects/Magic/magicactions.rsi/icebeam_active.png differ diff --git a/Resources/Textures/Objects/Magic/magicactions.rsi/meta.json b/Resources/Textures/Objects/Magic/magicactions.rsi/meta.json index 193f4b82e9..b84afefb47 100644 --- a/Resources/Textures/Objects/Magic/magicactions.rsi/meta.json +++ b/Resources/Textures/Objects/Magic/magicactions.rsi/meta.json @@ -54,6 +54,9 @@ }, { "name": "teleport" + }, + { + "name": "icebeam_active" } ] }