From 78d63b6fd7ed6968e29ce8b4adf5e35de499351b Mon Sep 17 00:00:00 2001 From: Maxwell1007 Date: Wed, 21 Jan 2026 00:45:06 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D1=80=D0=B0=D0=B7=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раз в 25-40 минут, случайный из 4 разломов появляется на своём спавнере. В отличие от наростов, каждый разлом напрямую отнимает 0.0015 стабильности в минуту у барьера. Нажав на разлом особым ключом, можно заспавнить мобов. Со смертью последнего моба, разлом уничтожается --- .../Medieval/Barrier/MagicBarrierComponent.cs | 12 ++ .../Barrier/MagicBarrierPointSystem.cs | 158 +++++++++++++++++- .../Barrier/MagicBarrierRiftComponent.cs | 20 +++ .../Barrier/MagicBarrierRiftSpawnComponent.cs | 9 + .../Barrier/MagicBarrierRiftSystem.cs | 69 ++++++++ .../Medieval/Barrier/RiftGuardianComponent.cs | 9 + .../Medieval/Barrier/RiftKeyComponent.cs | 9 + .../ru-RU/Imperial/Medieval/medieval.ftl | 24 +++ .../Prototypes/Imperial/Medieval/decor.yml | 147 ++++++++++++++++ 9 files changed, 449 insertions(+), 8 deletions(-) create mode 100644 Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs create mode 100644 Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSpawnComponent.cs create mode 100644 Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs create mode 100644 Content.Server/Imperial/Medieval/Barrier/RiftGuardianComponent.cs create mode 100644 Content.Server/Imperial/Medieval/Barrier/RiftKeyComponent.cs diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs index 225749c267..6bf697fb17 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs @@ -49,5 +49,17 @@ public sealed partial class MagicBarrierComponent : Component [DataField] public Dictionary ReviveCount = new(); + [DataField] + public TimeSpan ElementalRiftNextSpawnTime = TimeSpan.Zero; + + [DataField] + public float ElementalRiftStabilityLossPerMinute = 0.0015f; + + [DataField] + public float ElementalRiftMinSpawnMinutes = 25f; + + [DataField] + public float ElementalRiftMaxSpawnMinutes = 40f; + } } diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierPointSystem.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierPointSystem.cs index 638ca799f2..c567496bec 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierPointSystem.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierPointSystem.cs @@ -37,6 +37,13 @@ public sealed partial class MagicBarrierSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageable = default!; public static bool IsBarrierActive = true; + private static readonly string[] ElementalRiftPrototypes = + [ + "MedievalBarrierRiftEarth", + "MedievalBarrierRiftFire", + "MedievalBarrierRiftWater", + "MedievalBarrierRiftLight", + ]; public override void Initialize() { @@ -48,6 +55,7 @@ public override void Initialize() SubscribeLocalEvent(OnStart); SubscribeLocalEvent>(AddSuicideVerb); SubscribeLocalEvent(OnBarrierSuicideDoAfterEvent); + SubscribeLocalEvent(OnRiftTerminating); } private void OnRoundStarted(RoundStartedEvent args) @@ -129,6 +137,9 @@ public void OnUse(EntityUid? target, EntityUid user, EntityUid used, MagicScroll public void OnStart(EntityUid uid, MagicBarrierComponent component, ComponentStartup args) { var necrobookspawners = EntityManager.AllEntities().ToArray(); + if (component.ElementalRiftNextSpawnTime == TimeSpan.Zero) + component.ElementalRiftNextSpawnTime = _timing.CurTime + GetNextRiftSpawnDelay(component); + if (!necrobookspawners.Any()) return; @@ -138,6 +149,7 @@ public void OnStart(EntityUid uid, MagicBarrierComponent component, ComponentSta for (var i = 0; i < 5; i++) Spawn("MedievalDungeonKey", Transform(_random.Pick(necrobookspawners)).Coordinates); + } private void OnCurseDamage(EntityUid uid, MagicBarrierCurseComponent component, ref BeforeDamageChangedEvent args) @@ -158,7 +170,9 @@ private void OnCurseDamage(EntityUid uid, MagicBarrierCurseComponent component, private void OnExamine(EntityUid uid, MagicBarrierComponent component, ExaminedEvent args) { args.PushMarkup("[color=red]Текущая стабильность барьера " + Math.Round(component.Stability, 2) + " из " + component.MaxStability + "[/color]", 1); - args.PushMarkup("[color=cyan]Текущий расход " + Math.Round(component.Lose, 2) + " стабильности в минуту[/color]", 0); + var riftCount = EntityManager.EntityQuery().Count(); + var riftLoss = component.ElementalRiftStabilityLossPerMinute * riftCount; + args.PushMarkup("[color=cyan]Текущий расход " + Math.Round(component.Lose + riftLoss, 2) + " стабильности в минуту[/color]", 0); int sector1 = 0; int sector2 = 0; int sector3 = 0; @@ -221,6 +235,73 @@ private void OnExamine(EntityUid uid, MagicBarrierComponent component, ExaminedE args.PushMarkup(sector8 + " проклятых наростов в секторе 8 (Легион)", -8); args.PushMarkup(sector9 + " проклятых наростов в секторе 9 (Племя)", -9); args.PushMarkup(sector0 + " проклятых наростов скрыты в неизвестном месте под землей", -10); + + int riftSector1 = 0; + int riftSector2 = 0; + int riftSector3 = 0; + int riftSector4 = 0; + int riftSector5 = 0; + int riftSector6 = 0; + int riftSector7 = 0; + int riftSector8 = 0; + int riftSector9 = 0; + int riftSector0 = 0; + + foreach (var rift in EntityManager.EntityQuery()) + { + var riftTransform = Transform(rift.Owner); + if (TryComp(riftTransform.ParentUid, out var riftBlocker)) + { + switch (riftBlocker.Sector) + { + case "sector9": + riftSector9++; + break; + case "sector8": + riftSector8++; + break; + case "sector7": + riftSector7++; + break; + case "sector6": + riftSector6++; + break; + case "sector5": + riftSector5++; + break; + case "sector4": + riftSector4++; + break; + case "sector3": + riftSector3++; + break; + case "sector2": + riftSector2++; + break; + case "sector1": + riftSector1++; + break; + default: + riftSector0++; + break; + } + } + else + { + riftSector0++; + } + } + + args.PushMarkup(riftSector1 + " разломов в секторе 1 (Некрополь)", -11); + args.PushMarkup(riftSector2 + " разломов в секторе 2 (Мятеж)", -12); + args.PushMarkup(riftSector3 + " разломов в секторе 3 (Церковь)", -13); + args.PushMarkup(riftSector4 + " разломов в секторе 4 (Пустыня)", -14); + args.PushMarkup(riftSector5 + " разломов в секторе 5 (Коллегия)", -15); + args.PushMarkup(riftSector6 + " разломов в секторе 6 (Шахта)", -16); + args.PushMarkup(riftSector7 + " разломов в секторе 7 (Гоблины)", -17); + args.PushMarkup(riftSector8 + " разломов в секторе 8 (Легион)", -18); + args.PushMarkup(riftSector9 + " разломов в секторе 9 (Племя)", -19); + args.PushMarkup(riftSector0 + " разломов скрыты в неизвестном месте под землей", -20); } public override void Update(float frameTime) { @@ -247,6 +328,9 @@ public override void Update(float frameTime) if (comp.Stability > 0f) { comp.Stability -= comp.Lose; + var riftCount = EntityManager.EntityQuery().Count(); + if (riftCount > 0) + comp.Stability -= comp.ElementalRiftStabilityLossPerMinute * riftCount; } else { @@ -266,13 +350,25 @@ public override void Update(float frameTime) { comp.Lose = comp.Lose * comp.Rate; var cursespawners = EntityManager.EntityQuery().ToArray(); - var choosenSpawner = _random.Pick(cursespawners); - var cursexform = Transform(choosenSpawner.Owner); - var cursecoords = cursexform.Coordinates; - Spawn("MedievalBarrierCurse", cursecoords); - _chat.DispatchGlobalAnnouncement("Расход стабильности барьера увеличен, тьма наступает.", playSound: false, colorOverride: Color.DeepPink, sender: "Барьер"); - Spawn("ShockWaveEffect", cursecoords); - Spawn("ShockWaveEffect", coords); + if (cursespawners.Length > 0) + { + var choosenSpawner = _random.Pick(cursespawners); + var cursexform = Transform(choosenSpawner.Owner); + var cursecoords = cursexform.Coordinates; + Spawn("MedievalBarrierCurse", cursecoords); + _chat.DispatchGlobalAnnouncement("Расход стабильности барьера увеличен, тьма наступает.", playSound: false, colorOverride: Color.DeepPink, sender: "Барьер"); + Spawn("ShockWaveEffect", cursecoords); + Spawn("ShockWaveEffect", coords); + } + } + + if (comp.ElementalRiftNextSpawnTime == TimeSpan.Zero) + comp.ElementalRiftNextSpawnTime = _timing.CurTime + GetNextRiftSpawnDelay(comp); + + if (_timing.CurTime > comp.ElementalRiftNextSpawnTime) + { + comp.ElementalRiftNextSpawnTime = _timing.CurTime + GetNextRiftSpawnDelay(comp); + SpawnRandomElementalRift(); } comp.StarfallCurrentPoints++; @@ -342,6 +438,52 @@ public override void Update(float frameTime) } } } + + private void SpawnRandomElementalRift() + { + var riftSpawners = EntityManager.EntityQuery().ToList(); + while (riftSpawners.Count > 0) + { + var chosenSpawner = _random.Pick(riftSpawners); + if (chosenSpawner.Occupied) + { + riftSpawners.Remove(chosenSpawner); + continue; + } + + var riftTransform = Transform(chosenSpawner.Owner); + var riftCoords = riftTransform.Coordinates; + var riftPrototype = _random.Pick(ElementalRiftPrototypes); + var rift = Spawn(riftPrototype, riftCoords); + if (TryComp(rift, out var riftComponent)) + riftComponent.Spawner = chosenSpawner.Owner; + chosenSpawner.Occupied = true; + _chat.DispatchGlobalAnnouncement("Элементальный разлом открылся!", playSound: false, colorOverride: Color.DeepSkyBlue, sender: "Барьер"); + Spawn("ShockWaveEffect", riftCoords); + return; + } + + return; + } + + private TimeSpan GetNextRiftSpawnDelay(MagicBarrierComponent component) + { + var delayMinutes = _random.NextFloat(component.ElementalRiftMinSpawnMinutes, component.ElementalRiftMaxSpawnMinutes); + return TimeSpan.FromMinutes(delayMinutes); + } + + private void OnRiftTerminating(EntityUid uid, MagicBarrierRiftComponent component, ref EntityTerminatingEvent args) + { + foreach (var barrier in EntityManager.EntityQuery()) + { + barrier.Stability += 4f; + barrier.Lose *= 0.72f; + } + + if (component.Spawner.HasValue && TryComp(component.Spawner.Value, out var spawner)) + spawner.Occupied = false; + _chat.DispatchGlobalAnnouncement("Элементальный разлом уничтожен, стабильность барьера восстановлена.", playSound: false, colorOverride: Color.LimeGreen, sender: "Барьер"); + } } } diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs new file mode 100644 index 0000000000..80da384d08 --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +namespace Content.Server.MagicBarrier.Components +{ + [RegisterComponent] + public sealed partial class MagicBarrierRiftComponent : Component + { + [DataField] + public string Element = "earth"; + + [DataField] + public bool GuardiansSpawned; + + [DataField] + public List Guardians = new(); + + [DataField] + public EntityUid? Spawner; + } +} diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSpawnComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSpawnComponent.cs new file mode 100644 index 0000000000..b51b1cb322 --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSpawnComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.MagicBarrier.Components +{ + [RegisterComponent] + public sealed partial class MagicBarrierRiftSpawnComponent : Component + { + [DataField] + public bool Occupied; + } +} diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs new file mode 100644 index 0000000000..22af5506a9 --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs @@ -0,0 +1,69 @@ +using System; +using System.Numerics; +using Content.Server.MagicBarrier.Components; +using Content.Shared.Interaction; +using Content.Shared.Mobs; +using Robust.Shared.Map; + +namespace Content.Server.MagicBarrier; + +public sealed class MagicBarrierRiftSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRiftUse); + SubscribeLocalEvent(OnGuardianStateChanged); + } + + private void OnRiftUse(EntityUid uid, MagicBarrierRiftComponent component, AfterInteractUsingEvent args) + { + if (args.Handled || args.Target == null) + return; + + if(!args.CanReach) + return; + + if (!TryComp(args.Used, out var keyComponent)) + return; + + if (component.GuardiansSpawned) + return; + + if (!string.Equals(keyComponent.Element, component.Element, StringComparison.OrdinalIgnoreCase)) + return; + + component.GuardiansSpawned = true; + component.Guardians.Clear(); + + QueueDel(args.Used); + + var coords = Transform(uid).Coordinates; + SpawnGuardian(uid, component, coords.Offset(new Vector2(1f, 1f))); + SpawnGuardian(uid, component, coords.Offset(new Vector2(-1f, 1f))); + SpawnGuardian(uid, component, coords.Offset(new Vector2(1f, -1f))); + SpawnGuardian(uid, component, coords.Offset(new Vector2(-1f, -1f))); + args.Handled = true; + } + + private void SpawnGuardian(EntityUid rift, MagicBarrierRiftComponent component, EntityCoordinates coords) + { + var guardian = Spawn("MedievalMobSkeletMeat", coords); + var guardianComponent = EnsureComp(guardian); + guardianComponent.Rift = rift; + component.Guardians.Add(guardian); + } + + private void OnGuardianStateChanged(EntityUid uid, RiftGuardianComponent component, MobStateChangedEvent args) + { + if (args.NewMobState != MobState.Dead) + return; + + if (!TryComp(component.Rift, out var riftComponent)) + return; + + riftComponent.Guardians.Remove(uid); + if (riftComponent.Guardians.Count == 0) + QueueDel(component.Rift); + } +} diff --git a/Content.Server/Imperial/Medieval/Barrier/RiftGuardianComponent.cs b/Content.Server/Imperial/Medieval/Barrier/RiftGuardianComponent.cs new file mode 100644 index 0000000000..99313e5c1e --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/RiftGuardianComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.MagicBarrier.Components +{ + [RegisterComponent] + public sealed partial class RiftGuardianComponent : Component + { + [DataField] + public EntityUid Rift; + } +} diff --git a/Content.Server/Imperial/Medieval/Barrier/RiftKeyComponent.cs b/Content.Server/Imperial/Medieval/Barrier/RiftKeyComponent.cs new file mode 100644 index 0000000000..51bfbc80a9 --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/RiftKeyComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.MagicBarrier.Components +{ + [RegisterComponent] + public sealed partial class RiftKeyComponent : Component + { + [DataField] + public string Element = "earth"; + } +} diff --git a/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl b/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl index 224e5b56a9..01b555be37 100644 --- a/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl +++ b/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl @@ -4087,6 +4087,30 @@ trait-medieval-skills-alchemy-desc = Осмотрев зелье, сваренн ent-MedievalBarrierCurse = проклятый нарост .desc = Проклятый нарост, негативно влияющий на падение стабильности барьера. .suffix = { "Средневековье" } +ent-MedievalBarrierRiftEarth = элементальный разлом земли + .desc = Разлом, источающий силу земли и ослабляющий стабильность барьера. + .suffix = { "Средневековье" } +ent-MedievalBarrierRiftFire = элементальный разлом огня + .desc = Разлом, источающий силу огня и ослабляющий стабильность барьера. + .suffix = { "Средневековье" } +ent-MedievalBarrierRiftWater = элементальный разлом воды + .desc = Разлом, источающий силу воды и ослабляющий стабильность барьера. + .suffix = { "Средневековье" } +ent-MedievalBarrierRiftLight = элементальный разлом света + .desc = Разлом, источающий силу света и ослабляющий стабильность барьера. + .suffix = { "Средневековье" } +ent-MedievalRiftKeyEarth = замок земли + .desc = Замок, настроенный на силу земли. + .suffix = { "Средневековье" } +ent-MedievalRiftKeyFire = замок огня + .desc = Замок, настроенный на силу огня. + .suffix = { "Средневековье" } +ent-MedievalRiftKeyWater = замок воды + .desc = Замок, настроенный на силу воды. + .suffix = { "Средневековье" } +ent-MedievalRiftKeyLight = замок света + .desc = Замок, настроенный на силу света. + .suffix = { "Средневековье" } ent-MedievalFlagCaptureWhite = незакрашенный флаг .desc = Обозначает то, что точка никому не принадлежит. Используйте на нем краску фракции для того, чтобы перекрасить его. .suffix = { "Средневековье" } diff --git a/Resources/Prototypes/Imperial/Medieval/decor.yml b/Resources/Prototypes/Imperial/Medieval/decor.yml index c88960d9f8..ec24d2923c 100644 --- a/Resources/Prototypes/Imperial/Medieval/decor.yml +++ b/Resources/Prototypes/Imperial/Medieval/decor.yml @@ -3591,6 +3591,142 @@ castShadows: false - type: MagicBarrierCurse +- type: entity + id: MedievalBarrierRiftBase + parent: BaseStructure + name: elemental rift + description: A tear filled with elemental energy. + components: + - type: SpriteFade + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.45 + density: 190 + mask: + - MachineMask + layer: + - Opaque + - MidImpassable + - HighImpassable + - BulletImpassable + +- type: entity + id: MedievalBarrierRiftEarth + parent: MedievalBarrierRiftBase + name: earth rift + components: + - type: PointLight + radius: 4.5 + energy: 15 + color: "#7B5E3B" + castShadows: false + - type: MagicBarrierRift + element: earth + +- type: entity + id: MedievalBarrierRiftFire + parent: MedievalBarrierRiftBase + name: fire rift + components: + - type: PointLight + radius: 4.5 + energy: 15 + color: orange + castShadows: false + - type: MagicBarrierRift + element: fire + +- type: entity + id: MedievalBarrierRiftWater + parent: MedievalBarrierRiftBase + name: water rift + components: + - type: PointLight + radius: 4.5 + energy: 15 + color: dodgerblue + castShadows: false + - type: MagicBarrierRift + element: water + +- type: entity + id: MedievalBarrierRiftLight + parent: MedievalBarrierRiftBase + name: light rift + components: + - type: PointLight + radius: 4.5 + energy: 15 + color: white + castShadows: false + - type: MagicBarrierRift + element: light + +- type: entity + id: MedievalRiftKeyEarth + parent: BaseItem + name: earth lock + description: A lock attuned to the power of earth. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: earth + +- type: entity + id: MedievalRiftKeyFire + parent: BaseItem + name: fire lock + description: A lock attuned to the power of fire. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: fire + +- type: entity + id: MedievalRiftKeyWater + parent: BaseItem + name: water lock + description: A lock attuned to the power of water. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: water + +- type: entity + id: MedievalRiftKeyLight + parent: BaseItem + name: light lock + description: A lock attuned to the power of light. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: light + - type: entity id: MedievalBarrierCurseSpawner name: barrier curse spawner @@ -3602,6 +3738,17 @@ state: def - type: MagicBarrierCurseSpawn +- type: entity + id: MedievalBarrierRiftSpawner + name: elemental rift spawner + parent: MarkerBase + components: + - type: Sprite + layers: + - sprite: Imperial/Medieval/Markers/cross.rsi + state: def + - type: MagicBarrierRiftSpawn + - type: entity id: MedievalFlagCaptureWhite parent: BaseStructure From 4fa88b76442ef4f60990949469c2f284908943e3 Mon Sep 17 00:00:00 2001 From: Maxwell1007 <84186058+Maxwell1007@users.noreply.github.com> Date: Tue, 27 Jan 2026 10:54:39 +0300 Subject: [PATCH 2/8] Update magic barrier rift spawning --- .../Medieval/Barrier/MagicBarrierComponent.cs | 4 +- .../Barrier/MagicBarrierRiftComponent.cs | 21 +++ .../Barrier/MagicBarrierRiftSystem.cs | 35 ++-- .../Imperial/Medieval/BarrierRift.yml | 162 ++++++++++++++++++ .../Prototypes/Imperial/Medieval/decor.yml | 146 ---------------- 5 files changed, 205 insertions(+), 163 deletions(-) create mode 100644 Resources/Prototypes/Imperial/Medieval/BarrierRift.yml diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs index 6bf697fb17..1a842fde4e 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs @@ -56,10 +56,10 @@ public sealed partial class MagicBarrierComponent : Component public float ElementalRiftStabilityLossPerMinute = 0.0015f; [DataField] - public float ElementalRiftMinSpawnMinutes = 25f; + public float ElementalRiftMinSpawnMinutes = 30f; [DataField] - public float ElementalRiftMaxSpawnMinutes = 40f; + public float ElementalRiftMaxSpawnMinutes = 60f; } } diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs index 80da384d08..555e4e3c0c 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; +using System.Numerics; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; namespace Content.Server.MagicBarrier.Components { @@ -14,6 +17,24 @@ public sealed partial class MagicBarrierRiftComponent : Component [DataField] public List Guardians = new(); + [DataField(customTypeSerializer: typeof(PrototypeIdListSerializer))] + public List GuardianEntities = new() + { + "MedievalMobSkeletMeat", + "MedievalMobSkeletMeat", + "MedievalMobSkeletMeat", + "MedievalMobSkeletMeat", + }; + + [DataField] + public List GuardianOffsets = new() + { + new(1f, 1f), + new(-1f, 1f), + new(1f, -1f), + new(-1f, -1f), + }; + [DataField] public EntityUid? Spawner; } diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs index 22af5506a9..664b63b684 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs @@ -18,37 +18,38 @@ public override void Initialize() private void OnRiftUse(EntityUid uid, MagicBarrierRiftComponent component, AfterInteractUsingEvent args) { - if (args.Handled || args.Target == null) + if (args.Handled || args.Target == null || !args.CanReach) return; - if(!args.CanReach) - return; - - if (!TryComp(args.Used, out var keyComponent)) + if (!TryComp(args.Used, out var keyComponent) + || !string.Equals(keyComponent.Element, component.Element, StringComparison.OrdinalIgnoreCase)) return; if (component.GuardiansSpawned) return; - if (!string.Equals(keyComponent.Element, component.Element, StringComparison.OrdinalIgnoreCase)) - return; - component.GuardiansSpawned = true; component.Guardians.Clear(); QueueDel(args.Used); - var coords = Transform(uid).Coordinates; - SpawnGuardian(uid, component, coords.Offset(new Vector2(1f, 1f))); - SpawnGuardian(uid, component, coords.Offset(new Vector2(-1f, 1f))); - SpawnGuardian(uid, component, coords.Offset(new Vector2(1f, -1f))); - SpawnGuardian(uid, component, coords.Offset(new Vector2(-1f, -1f))); + for (var i = 0; i < component.GuardianEntities.Count; i++) + { + SpawnGuardian(uid, component, i); + } args.Handled = true; } - private void SpawnGuardian(EntityUid rift, MagicBarrierRiftComponent component, EntityCoordinates coords) + private void SpawnGuardian(EntityUid rift, MagicBarrierRiftComponent component, int index) { - var guardian = Spawn("MedievalMobSkeletMeat", coords); + if (index < 0 || index >= component.GuardianEntities.Count) + return; + + var offset = index < component.GuardianOffsets.Count + ? component.GuardianOffsets[index] + : Vector2.Zero; + var coords = Transform(rift).Coordinates.Offset(offset); + var guardian = Spawn(component.GuardianEntities[index], coords); var guardianComponent = EnsureComp(guardian); guardianComponent.Rift = rift; component.Guardians.Add(guardian); @@ -64,6 +65,10 @@ private void OnGuardianStateChanged(EntityUid uid, RiftGuardianComponent compone riftComponent.Guardians.Remove(uid); if (riftComponent.Guardians.Count == 0) + { + var coords = Transform(component.Rift).Coordinates; + Spawn("MedievalSkeletDespawnEffect", coords); QueueDel(component.Rift); + } } } diff --git a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml new file mode 100644 index 0000000000..cc0f837634 --- /dev/null +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -0,0 +1,162 @@ +- type: entity + id: MedievalBarrierRiftBase + parent: BaseStructure + name: elemental rift + description: A tear filled with elemental energy. + components: + - type: SpriteFade + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.45 + density: 190 + mask: + - MachineMask + layer: + - Opaque + - MidImpassable + - HighImpassable + - BulletImpassable + +- type: entity + id: MedievalBarrierRiftEarth + parent: MedievalBarrierRiftBase + name: earth rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: PointLight + radius: 4.5 + energy: 15 + color: "#7B5E3B" + castShadows: false + - type: MagicBarrierRift + element: earth + +- type: entity + id: MedievalBarrierRiftFire + parent: MedievalBarrierRiftBase + name: fire rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: PointLight + radius: 4.5 + energy: 15 + color: orange + castShadows: false + - type: MagicBarrierRift + element: fire + +- type: entity + id: MedievalBarrierRiftWater + parent: MedievalBarrierRiftBase + name: water rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: PointLight + radius: 4.5 + energy: 15 + color: dodgerblue + castShadows: false + - type: MagicBarrierRift + element: water + +- type: entity + id: MedievalBarrierRiftLight + parent: MedievalBarrierRiftBase + name: light rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_curse.rsi + state: curse + - type: PointLight + radius: 4.5 + energy: 15 + color: white + castShadows: false + - type: MagicBarrierRift + element: light + +- type: entity + id: MedievalRiftKeyEarth + parent: BaseItem + name: earth lock + description: A lock attuned to the power of earth. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: earth + +- type: entity + id: MedievalRiftKeyFire + parent: BaseItem + name: fire lock + description: A lock attuned to the power of fire. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: fire + +- type: entity + id: MedievalRiftKeyWater + parent: BaseItem + name: water lock + description: A lock attuned to the power of water. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: water + +- type: entity + id: MedievalRiftKeyLight + parent: BaseItem + name: light lock + description: A lock attuned to the power of light. + components: + - type: Sprite + sprite: Imperial/Medieval/Misc/respawn_key.rsi + state: icon + - type: Item + size: Small + - type: RiftKey + element: light + +- type: entity + id: MedievalBarrierRiftSpawner + name: elemental rift spawner + parent: MarkerBase + components: + - type: Sprite + layers: + - sprite: Imperial/Medieval/Markers/cross.rsi + state: def + - type: MagicBarrierRiftSpawn diff --git a/Resources/Prototypes/Imperial/Medieval/decor.yml b/Resources/Prototypes/Imperial/Medieval/decor.yml index 9c9583f245..c9cbca8a2d 100644 --- a/Resources/Prototypes/Imperial/Medieval/decor.yml +++ b/Resources/Prototypes/Imperial/Medieval/decor.yml @@ -3762,141 +3762,6 @@ castShadows: false - type: MagicBarrierCurse -- type: entity - id: MedievalBarrierRiftBase - parent: BaseStructure - name: elemental rift - description: A tear filled with elemental energy. - components: - - type: SpriteFade - - type: Sprite - drawdepth: Overdoors - sprite: Imperial/Medieval/Decor/barrier_curse.rsi - state: curse - - type: Physics - bodyType: Static - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.45 - density: 190 - mask: - - MachineMask - layer: - - Opaque - - MidImpassable - - HighImpassable - - BulletImpassable - -- type: entity - id: MedievalBarrierRiftEarth - parent: MedievalBarrierRiftBase - name: earth rift - components: - - type: PointLight - radius: 4.5 - energy: 15 - color: "#7B5E3B" - castShadows: false - - type: MagicBarrierRift - element: earth - -- type: entity - id: MedievalBarrierRiftFire - parent: MedievalBarrierRiftBase - name: fire rift - components: - - type: PointLight - radius: 4.5 - energy: 15 - color: orange - castShadows: false - - type: MagicBarrierRift - element: fire - -- type: entity - id: MedievalBarrierRiftWater - parent: MedievalBarrierRiftBase - name: water rift - components: - - type: PointLight - radius: 4.5 - energy: 15 - color: dodgerblue - castShadows: false - - type: MagicBarrierRift - element: water - -- type: entity - id: MedievalBarrierRiftLight - parent: MedievalBarrierRiftBase - name: light rift - components: - - type: PointLight - radius: 4.5 - energy: 15 - color: white - castShadows: false - - type: MagicBarrierRift - element: light - -- type: entity - id: MedievalRiftKeyEarth - parent: BaseItem - name: earth lock - description: A lock attuned to the power of earth. - components: - - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi - state: icon - - type: Item - size: Small - - type: RiftKey - element: earth - -- type: entity - id: MedievalRiftKeyFire - parent: BaseItem - name: fire lock - description: A lock attuned to the power of fire. - components: - - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi - state: icon - - type: Item - size: Small - - type: RiftKey - element: fire - -- type: entity - id: MedievalRiftKeyWater - parent: BaseItem - name: water lock - description: A lock attuned to the power of water. - components: - - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi - state: icon - - type: Item - size: Small - - type: RiftKey - element: water - -- type: entity - id: MedievalRiftKeyLight - parent: BaseItem - name: light lock - description: A lock attuned to the power of light. - components: - - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi - state: icon - - type: Item - size: Small - - type: RiftKey - element: light - type: entity id: MedievalBarrierCurseSpawner @@ -3909,17 +3774,6 @@ state: def - type: MagicBarrierCurseSpawn -- type: entity - id: MedievalBarrierRiftSpawner - name: elemental rift spawner - parent: MarkerBase - components: - - type: Sprite - layers: - - sprite: Imperial/Medieval/Markers/cross.rsi - state: def - - type: MagicBarrierRiftSpawn - - type: entity id: MedievalFlagCaptureWhite parent: BaseStructure From 5084a35254f900b2f2e94166cf10acf6b9f7bcfd Mon Sep 17 00:00:00 2001 From: Maxwell1007 <84186058+Maxwell1007@users.noreply.github.com> Date: Tue, 27 Jan 2026 11:10:29 +0300 Subject: [PATCH 3/8] Guard rift guardian removal --- .../Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs index 664b63b684..38f821023f 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs @@ -63,6 +63,9 @@ private void OnGuardianStateChanged(EntityUid uid, RiftGuardianComponent compone if (!TryComp(component.Rift, out var riftComponent)) return; + if (!riftComponent.Guardians.Contains(uid)) + return; + riftComponent.Guardians.Remove(uid); if (riftComponent.Guardians.Count == 0) { From e42a1ddd2cc7dc72b636e3ca65f3c3967d7c093c Mon Sep 17 00:00:00 2001 From: Maxwell1007 Date: Tue, 27 Jan 2026 11:39:43 +0300 Subject: [PATCH 4/8] removing obsolete if --- .../Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs index 38f821023f..664b63b684 100644 --- a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs @@ -63,9 +63,6 @@ private void OnGuardianStateChanged(EntityUid uid, RiftGuardianComponent compone if (!TryComp(component.Rift, out var riftComponent)) return; - if (!riftComponent.Guardians.Contains(uid)) - return; - riftComponent.Guardians.Remove(uid); if (riftComponent.Guardians.Count == 0) { From e6af3c8464c0e543505c3cd2fc46d20548295d8a Mon Sep 17 00:00:00 2001 From: Maxwell1007 <84186058+Maxwell1007@users.noreply.github.com> Date: Sat, 31 Jan 2026 17:53:06 +0300 Subject: [PATCH 5/8] Update barrier rift guardians --- .../Imperial/Medieval/BarrierRift.yml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml index cc0f837634..3dc16f68a2 100644 --- a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -42,6 +42,14 @@ castShadows: false - type: MagicBarrierRift element: earth + GuardianEntities: + - MedievalMobWolf + - MedievalMobWolf + - MedievalMobWolf + GuardianOffsets: + - 1, 1 + - -1, 1 + - -1, 0 - type: entity id: MedievalBarrierRiftFire @@ -59,6 +67,10 @@ castShadows: false - type: MagicBarrierRift element: fire + GuardianEntities: + - MedievalMobSkeletHalberd + GuardianOffsets: + - 0, 0 - type: entity id: MedievalBarrierRiftWater @@ -76,6 +88,24 @@ castShadows: false - type: MagicBarrierRift element: water + GuardianEntities: + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + GuardianOffsets: + - 1, 1 + - 1, 0 + - 1, -1 + - 0, 1 + - 0, -1 + - -1, 1 + - -1, 0 + - -1, -1 - type: entity id: MedievalBarrierRiftLight @@ -93,6 +123,10 @@ castShadows: false - type: MagicBarrierRift element: light + GuardianEntities: + - MedievalMobBear + GuardianOffsets: + - -1, 0 - type: entity id: MedievalRiftKeyEarth From ff611bac663cb7d21617090e1e06a31487e8332d Mon Sep 17 00:00:00 2001 From: Maxwell1007 <84186058+Maxwell1007@users.noreply.github.com> Date: Sat, 31 Jan 2026 18:49:13 +0300 Subject: [PATCH 6/8] Fix rift guardian overrides --- .../Imperial/Medieval/BarrierRift.yml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml index cc0f837634..89e32d6e69 100644 --- a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -42,6 +42,14 @@ castShadows: false - type: MagicBarrierRift element: earth + GuardianEntities: + - MedievalMobWolf + - MedievalMobWolf + - MedievalMobWolf + GuardianOffsets: + - 1,1 + - -1,1 + - -1,0 - type: entity id: MedievalBarrierRiftFire @@ -59,6 +67,10 @@ castShadows: false - type: MagicBarrierRift element: fire + GuardianEntities: + - MedievalMobSkeletHalberd + GuardianOffsets: + - 0,0 - type: entity id: MedievalBarrierRiftWater @@ -76,6 +88,24 @@ castShadows: false - type: MagicBarrierRift element: water + GuardianEntities: + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + - MedievalMobCrab + GuardianOffsets: + - 1,1 + - 1,0 + - 1,-1 + - 0,1 + - 0,-1 + - -1,1 + - -1,0 + - -1,-1 - type: entity id: MedievalBarrierRiftLight @@ -93,6 +123,10 @@ castShadows: false - type: MagicBarrierRift element: light + GuardianEntities: + - MedievalMobBear + GuardianOffsets: + - -1,0 - type: entity id: MedievalRiftKeyEarth From b1dae15ee564e9a3afdc3f0edd58d1c0f8231ea9 Mon Sep 17 00:00:00 2001 From: Maxwell1007 Date: Sat, 31 Jan 2026 19:53:19 +0300 Subject: [PATCH 7/8] Update BarrierRift.yml dem --- .../Prototypes/Imperial/Medieval/BarrierRift.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml index 89e32d6e69..72038c00b2 100644 --- a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -42,11 +42,11 @@ castShadows: false - type: MagicBarrierRift element: earth - GuardianEntities: + guardianEntities: - MedievalMobWolf - MedievalMobWolf - MedievalMobWolf - GuardianOffsets: + guardianOffsets: - 1,1 - -1,1 - -1,0 @@ -67,9 +67,9 @@ castShadows: false - type: MagicBarrierRift element: fire - GuardianEntities: + guardianEntities: - MedievalMobSkeletHalberd - GuardianOffsets: + guardianOffsets: - 0,0 - type: entity @@ -88,7 +88,7 @@ castShadows: false - type: MagicBarrierRift element: water - GuardianEntities: + guardianEntities: - MedievalMobCrab - MedievalMobCrab - MedievalMobCrab @@ -97,7 +97,7 @@ - MedievalMobCrab - MedievalMobCrab - MedievalMobCrab - GuardianOffsets: + guardianOffsets: - 1,1 - 1,0 - 1,-1 @@ -123,9 +123,9 @@ castShadows: false - type: MagicBarrierRift element: light - GuardianEntities: + guardianEntities: - MedievalMobBear - GuardianOffsets: + guardianOffsets: - -1,0 - type: entity From 0de6b63877238387bb41b7e68ece0997b1624db0 Mon Sep 17 00:00:00 2001 From: Maxwell1007 Date: Fri, 20 Feb 2026 19:53:34 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B0=D0=B9=D1=82=D1=8B?= =?UTF-8?q?=20=D1=80=D0=B8=D1=84=D1=82=D0=BE=D0=B2,=20=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B9=D1=82=D1=8B=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Imperial/Medieval/BarrierRift.yml | 34 +++++++++++------- .../barrier_rift_earth.rsi/earth-rift.png | Bin 0 -> 1501 bytes .../Decor/barrier_rift_earth.rsi/meta.json | 14 ++++++++ .../Decor/barrier_rift_fire.rsi/fire-rift.png | Bin 0 -> 4162 bytes .../Decor/barrier_rift_fire.rsi/meta.json | 14 ++++++++ .../barrier_rift_light.rsi/light-rift.png | Bin 0 -> 1016 bytes .../Decor/barrier_rift_light.rsi/meta.json | 14 ++++++++ .../Decor/barrier_rift_water.rsi/meta.json | 14 ++++++++ .../barrier_rift_water.rsi/water-rift.png | Bin 0 -> 1428 bytes .../Medieval/Misc/rift_key_earth.rsi/icon.png | Bin 0 -> 1179 bytes .../Misc/rift_key_earth.rsi/meta.json | 32 +++++++++++++++++ .../Medieval/Misc/rift_key_fire.rsi/icon.png | Bin 0 -> 639 bytes .../Medieval/Misc/rift_key_fire.rsi/meta.json | 14 ++++++++ .../Medieval/Misc/rift_key_light.rsi/icon.png | Bin 0 -> 587 bytes .../Misc/rift_key_light.rsi/meta.json | 22 ++++++++++++ .../Medieval/Misc/rift_key_water.rsi/icon.png | Bin 0 -> 1238 bytes .../Misc/rift_key_water.rsi/meta.json | 29 +++++++++++++++ 17 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/earth-rift.png create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/fire-rift.png create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/light-rift.png create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/water-rift.png create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/icon.png create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/icon.png create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/icon.png create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/meta.json create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/icon.png create mode 100644 Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/meta.json diff --git a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml index 72038c00b2..c3dcd688f4 100644 --- a/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -9,8 +9,18 @@ drawdepth: Overdoors sprite: Imperial/Medieval/Decor/barrier_curse.rsi state: curse + - type: FloatingVisuals + offset: 0, 0.15 + animationTime: 2 + ignoreGravity: true + - type: AmbientSound + range: 5 + volume: -5 + sound: + path: /Audio/Ambience/anomaly_drone.ogg - type: Physics bodyType: Static + bodyStatus: InAir - type: Fixtures fixtures: fix1: @@ -33,8 +43,8 @@ components: - type: Sprite drawdepth: Overdoors - sprite: Imperial/Medieval/Decor/barrier_curse.rsi - state: curse + sprite: Imperial/Medieval/Decor/barrier_rift_earth.rsi + state: earth-rift - type: PointLight radius: 4.5 energy: 15 @@ -58,8 +68,8 @@ components: - type: Sprite drawdepth: Overdoors - sprite: Imperial/Medieval/Decor/barrier_curse.rsi - state: curse + sprite: Imperial/Medieval/Decor/barrier_rift_fire.rsi + state: fire-rift - type: PointLight radius: 4.5 energy: 15 @@ -79,8 +89,8 @@ components: - type: Sprite drawdepth: Overdoors - sprite: Imperial/Medieval/Decor/barrier_curse.rsi - state: curse + sprite: Imperial/Medieval/Decor/barrier_rift_water.rsi + state: water-rift - type: PointLight radius: 4.5 energy: 15 @@ -114,8 +124,8 @@ components: - type: Sprite drawdepth: Overdoors - sprite: Imperial/Medieval/Decor/barrier_curse.rsi - state: curse + sprite: Imperial/Medieval/Decor/barrier_rift_light.rsi + state: light-rift - type: PointLight radius: 4.5 energy: 15 @@ -135,7 +145,7 @@ description: A lock attuned to the power of earth. components: - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi + sprite: Imperial/Medieval/Misc/rift_key_earth.rsi state: icon - type: Item size: Small @@ -149,7 +159,7 @@ description: A lock attuned to the power of fire. components: - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi + sprite: Imperial/Medieval/Misc/rift_key_fire.rsi state: icon - type: Item size: Small @@ -163,7 +173,7 @@ description: A lock attuned to the power of water. components: - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi + sprite: Imperial/Medieval/Misc/rift_key_water.rsi state: icon - type: Item size: Small @@ -177,7 +187,7 @@ description: A lock attuned to the power of light. components: - type: Sprite - sprite: Imperial/Medieval/Misc/respawn_key.rsi + sprite: Imperial/Medieval/Misc/rift_key_light.rsi state: icon - type: Item size: Small diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/earth-rift.png b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/earth-rift.png new file mode 100644 index 0000000000000000000000000000000000000000..2327cc20911408410f9f6664954333f59c7b2704 GIT binary patch literal 1501 zcmV<31tR*1P)Px)mq|oHRA_pzrwVc~3GS)BMD&tlE>W=+#Y9@mBCT)_ve;C}xO4^EgZxIbvopIZON|Tt zKuG&DGw*xz{$@tN{{i`=X62Kbb=h*r5b*mVPoR2a_-^-a!&MMJTEA>E?|8isj6{)0 zE+dg#Mlcd}Jb#~(Rr zzJ#B?{hYl=BvuzT*uA@t9}Y>>h9m$WoC>g+klDCbkeG--`>#_r13U?t@FEE!LYRO4 zyQ>^3BEF)K4D(lJ9ryZ8iwP(b9snNPx(xu>+FW66RO8ae4W0y4_~7chKp$*22(8*c zDLjEl-2XDm?q!Q<7P7sB=1t8Pf%eI%=R3hj6fvW%)Tj)VW(VO^fSHe|3>ic}x$q3| z@H4Q8O0&a$2P07yjzyTgF8iHNYL;kLQUZl*X{8$Z4prbCRR(hMeceF6Y1tIuHrpgP zFN5a{$OQH>sa9=(?aHpF@I2ykAzb??rtDLd)RY8h7G&Ye>~&Fp`KO}|?+5$3!Gsls zC$wq<#EemKBKFBEPo{nN&BSgtPI-aK3m&C%16!NUHl=a{I1ix_&Yo3%z(Z81at2hk zPMYup8%lJK2!uMdxsO%_+mJ%G&`s?J4|@W12T}1^gU4`bBjjs8If3D zsTlKt?aHph{()g(m@TH+B?%v248iPmrT#ck9^eO)fy}6o8by~^Z=Ru$ilN`M9NHC~ zR^?kfE<_+0iNZV{4JI4FPga)2fATF>FrJ*c&a`V3@-h*fKlB~(YPeSsF|9-R&zcau)luAe%jE_t*oB!;qA079o zt(#I*P!e!UAen-ue5Th8n8#gw|HD;4AhBK9MZak|<3HCH09r@CF;ZS@Vr3Mn>>UR3 zNzKX@)5FylfcclR(Cfx2BXbc=hCueeuN$`dpAb$3&}qgIGumvMp5M0g z8~ev5Ku~F$MpfGDb6Iq!;3)m$O!ng$Fub%^qUsbe5u^9ZC>4d{LpqTz(W?{{9^3g z2i1Wdf5ZgNoOsa5Od>afR&C&VCg4|bV;?bz9TOpary96^Z_R39U~^A4AUC?! zcdCJDoNi8hM#d9r)dtXassVjxczyle8ao3^z%Pl$gu&LM~wF8x0b|JDCsyfyp-QfVsde-sun00000NkvXXu0mjf Dnq1Fw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/meta.json new file mode 100644 index 0000000000..96ecf93137 --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "this content is under ICLA licence, read more on https://wiki.imperialspace.net/icla", + "copyright": "by @CrookLv", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "earth-rift" + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/fire-rift.png b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/fire-rift.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a9e6a2b5e77809aaf9830dc4f5ec4541c6027e GIT binary patch literal 4162 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 M07*qoM6N<$g0m>`EC2ui literal 0 HcmV?d00001 diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/meta.json new file mode 100644 index 0000000000..647074b21f --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "this content is under ICLA licence, read more on https://wiki.imperialspace.net/icla", + "copyright": "by @Gag", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "fire-rift" + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/light-rift.png b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/light-rift.png new file mode 100644 index 0000000000000000000000000000000000000000..e24f33a8fdd956679b6254eb2d57ada8529d60b5 GIT binary patch literal 1016 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 JB%voG`#)eBdJ_Nu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/meta.json new file mode 100644 index 0000000000..c35ed6d712 --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "this content is under ICLA licence, read more on https://wiki.imperialspace.net/icla", + "copyright": "by @CrookLv", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/icon.png b/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b077598ba761a7b0fb0e4e28adc1f50fa3bf55a1 GIT binary patch literal 639 zcmV-_0)YLAP)Px%IY~r8R9J=WRxxYaKotH|Oll7yZq7)AQ-%z!y%-E372Q0z9SjB2tR0jL#Y??5 z{~-2iFQH48t}cO^4As)DYC}lIQV(5D1PduGWN?PU>yYS>gA+@theGvD(!1~8_uYGX zhkz6*QvB~wl5XTGBct*N0PyAXI~>cot}@cK0{F`EMBF($hZuRWjb!E_4j>$( zI3^+!!zIV{i38E_Gh((R5-AXO&d%}fm4e*H)>Pj3Xdf@%68Oq;WD}7Lyme7HyVw!R3qzKGn$7Q~=Nj_WJKg(Zad%&Nkj26U}}{_d*mx#RjuHJ_o! zmBN+qnvUF>E(M3Z5;?A~Y#v@h>~+!KU4^a{l2;%|ymK&;uffT~!tgANkM`joUr650 z!AMpiu>mpi0MA0Zp-msDYw??KTwiH7G{Cd2awIk2xV~a+pFnT6WG{oBhsDP~1pMO* zSt+hE(wi+9+b1*cg4r#&frqcZDPiG2{OhTQPrrWu{oGGOFoxmSuvd~}Sj}f9)`Bsd zn*pve5_Tuj#S({$s4Z|@Ux8<#U(e3u_Ul=|vl9Ow+zPI;NM#j++I+6y+f2-ZlOn}G Zg+F9E7Ua-?7%>0<002ovPDHLkV1f%vDCPhF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/meta.json new file mode 100644 index 0000000000..7fe3929ab2 --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "this content is under ICLA licence, read more on https://wiki.imperialspace.net/icla", + "copyright": "by @CrookLv", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/icon.png b/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8f751920005e61375e34d3826a893ec2fb24952b GIT binary patch literal 587 zcmV-R0<`^!P)Px%1xZ9fRCt{2nX!t(KoEwz3Q{@LuZ00co01VIo)qd1-pyxj#51VOZx zGFIRx>;ec}lmdW_6SGza&`;0G|Iz3G%zIr_{k8{?K%}hj6erzSHw`y*4JNZ;ZTeOiao0;g_J6q;!FIC;CuX^O(8*hXX$O3{ z7~S1~^`8eF`FPlW9(3TkT#4T*n0CM?vmqF|mRW<)_tP`1##3dzJo-Y@i5ag#8~*9P z2!VL!uO4I;DL;7I%zI~lKRtu%CGhqBR{D!OG2`=I_pZL5o?*Saz;?5*L|@b(nw!=5 zvh=gO7stKTcv`yuxr=pT#$7J~IfcT2&)1hq%)doU0bEm#p)aojADiz=!zU1vo#nsl zB`}!{Yx4la?h|V#ZiNxI!U#>@v;#DKD~!0ID%sO zPdo^y0l>Zx!q&&0K2`lj-vvNP7a}TDb=+$V*b~@x$p4l@0U&Up1QG-yG=Ky_5ClOK Z;RiR*tbAuT9ZLWJ002ovPDHLkV1hMY1rq=O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/meta.json new file mode 100644 index 0000000000..0d0278f4a6 --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "this content is under ICLA licence, read more on https://wiki.imperialspace.net/icla", + "copyright": "by @CrookLv", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/icon.png b/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d99e86197d1fcf2b8d89dc47e0a29f005560eb GIT binary patch literal 1238 zcmV;{1S$K8P)Px(kV!;ARCt{2oV{-wWgN%92aS=PRPu{bxeWLvk;p(6kV*yyrwk0GLY4RfBE*7( z)FEP`W0pFM)tVhq33C7-WPY*P|NZpe@Qg0!?6h?e0jJI!nA(E{L#WE_oazkBT-&EJvH$}6FeVlYorMGs~&7A`!b>5rV zx({ZOQPI9P4gKFw|4l65RPHt~IAC`X)k@iyqW%w?1Ar-C6G;h&Vi^^QFC!6+A`)6a zB(wl&3D5fgKmpE%04K$7|9QFs&LpEFMdXVmGz$A(zHTC>VE~9FmeG2CB9i6Cl&^`T zgr{Kupa3aATm9cp|4l65`rfvaFP4D8Jr6Tn)e9o`fou){@ofK|S9~cvBH{M&QQ-Li z5RNRO+j}9BCJ9m+~b5~Tt6d(oYu0g8*`|ZDT@8G0!!;?$Z3r>1# zR{Et_{db3-x1OIMz7)pO#_u?4{wb25yy~F& zw}QC{()i(9RF8Wi`7nM1O|99%;e-1k`DZPHe82OxNdD&MUjc>)Y~*YCm^Db{e|GPi z;pe&rw*Y6k|NH5`b8VE~+Ex05uQfZUR?4XFZ9DF5va4&u6Cz(MjcntUarqkE09r;; z`HjN9rzDgwmPGU20+h}-vuxyR0hoC<+TRqQjpK)LdjBS z96JS0UUl%t`t3pkQ2eO3ByEHlGET901zK zM