diff --git a/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierComponent.cs index 225749c267..1a842fde4e 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 = 30f; + + [DataField] + public float ElementalRiftMaxSpawnMinutes = 60f; + } } 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..555e4e3c0c --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftComponent.cs @@ -0,0 +1,41 @@ +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 +{ + [RegisterComponent] + public sealed partial class MagicBarrierRiftComponent : Component + { + [DataField] + public string Element = "earth"; + + [DataField] + public bool GuardiansSpawned; + + [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/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..664b63b684 --- /dev/null +++ b/Content.Server/Imperial/Medieval/Barrier/MagicBarrierRiftSystem.cs @@ -0,0 +1,74 @@ +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 || !args.CanReach) + return; + + if (!TryComp(args.Used, out var keyComponent) + || !string.Equals(keyComponent.Element, component.Element, StringComparison.OrdinalIgnoreCase)) + return; + + if (component.GuardiansSpawned) + return; + + component.GuardiansSpawned = true; + component.Guardians.Clear(); + + QueueDel(args.Used); + + for (var i = 0; i < component.GuardianEntities.Count; i++) + { + SpawnGuardian(uid, component, i); + } + args.Handled = true; + } + + private void SpawnGuardian(EntityUid rift, MagicBarrierRiftComponent component, int index) + { + 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); + } + + 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) + { + var coords = Transform(component.Rift).Coordinates; + Spawn("MedievalSkeletDespawnEffect", coords); + 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 8bf96f46ec..213c726b2f 100644 --- a/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl +++ b/Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl @@ -4117,6 +4117,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/BarrierRift.yml b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml new file mode 100644 index 0000000000..c3dcd688f4 --- /dev/null +++ b/Resources/Prototypes/Imperial/Medieval/BarrierRift.yml @@ -0,0 +1,206 @@ +- 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: 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: + 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_rift_earth.rsi + state: earth-rift + - type: PointLight + radius: 4.5 + energy: 15 + color: "#7B5E3B" + castShadows: false + - type: MagicBarrierRift + element: earth + guardianEntities: + - MedievalMobWolf + - MedievalMobWolf + - MedievalMobWolf + guardianOffsets: + - 1,1 + - -1,1 + - -1,0 + +- type: entity + id: MedievalBarrierRiftFire + parent: MedievalBarrierRiftBase + name: fire rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_rift_fire.rsi + state: fire-rift + - type: PointLight + radius: 4.5 + energy: 15 + color: orange + castShadows: false + - type: MagicBarrierRift + element: fire + guardianEntities: + - MedievalMobSkeletHalberd + guardianOffsets: + - 0,0 + +- type: entity + id: MedievalBarrierRiftWater + parent: MedievalBarrierRiftBase + name: water rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_rift_water.rsi + state: water-rift + - type: PointLight + radius: 4.5 + energy: 15 + color: dodgerblue + 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 + parent: MedievalBarrierRiftBase + name: light rift + components: + - type: Sprite + drawdepth: Overdoors + sprite: Imperial/Medieval/Decor/barrier_rift_light.rsi + state: light-rift + - type: PointLight + radius: 4.5 + energy: 15 + color: white + castShadows: false + - type: MagicBarrierRift + element: light + guardianEntities: + - MedievalMobBear + guardianOffsets: + - -1,0 + +- 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/rift_key_earth.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/rift_key_fire.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/rift_key_water.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/rift_key_light.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 ac20c5c72c..c9cbca8a2d 100644 --- a/Resources/Prototypes/Imperial/Medieval/decor.yml +++ b/Resources/Prototypes/Imperial/Medieval/decor.yml @@ -3762,6 +3762,7 @@ castShadows: false - type: MagicBarrierCurse + - type: entity id: MedievalBarrierCurseSpawner name: barrier curse spawner 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 0000000000..2327cc2091 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_earth.rsi/earth-rift.png differ 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 0000000000..d6a9e6a2b5 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_fire.rsi/fire-rift.png differ 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 0000000000..e24f33a8fd Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/light-rift.png differ diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.rsi/meta.json new file mode 100644 index 0000000000..2d0bbbae3b --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_light.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": "light-rift" + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/meta.json new file mode 100644 index 0000000000..45234cfe96 --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.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": "water-rift" + } + ] +} diff --git a/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/water-rift.png b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/water-rift.png new file mode 100644 index 0000000000..40d7496b68 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Decor/barrier_rift_water.rsi/water-rift.png differ diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/icon.png b/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/icon.png new file mode 100644 index 0000000000..034a6debe3 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Misc/rift_key_earth.rsi/icon.png differ 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 0000000000..b077598ba7 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Misc/rift_key_fire.rsi/icon.png differ 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 0000000000..8f75192000 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Misc/rift_key_light.rsi/icon.png differ 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 0000000000..e8d99e8619 Binary files /dev/null and b/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/icon.png differ diff --git a/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/meta.json b/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/meta.json new file mode 100644 index 0000000000..993b890adc --- /dev/null +++ b/Resources/Textures/Imperial/Medieval/Misc/rift_key_water.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "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 + ] + ] + } + ] +}