diff --git a/Content.Client/Content.Client.csproj b/Content.Client/Content.Client.csproj index d5fd1d341e9..70087b2f47d 100644 --- a/Content.Client/Content.Client.csproj +++ b/Content.Client/Content.Client.csproj @@ -27,4 +27,9 @@ + + + MSBuild:Compile + + diff --git a/Content.Client/_CorvaxNext/Heretic/HereticCombatMarkSystem.cs b/Content.Client/_CorvaxNext/Heretic/HereticCombatMarkSystem.cs new file mode 100644 index 00000000000..65cf992e371 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/HereticCombatMarkSystem.cs @@ -0,0 +1,61 @@ +using Content.Shared.Heretic; +using Robust.Client.GameObjects; +using Robust.Shared.Utility; + +namespace Content.Client.Heretic; + +public sealed partial class HereticCombatMarkSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnShutdown); + } + public override void Update(float frameTime) + { + base.Update(frameTime); + + // i can't think of a better way to do this. everything else has failed + // god i hate client server i hate client server i hate client server i hate + foreach (var mark in EntityQuery()) + { + if (!TryComp(mark.Owner, out var sprite)) + continue; + + if (!sprite.LayerMapTryGet(0, out var layer)) + continue; + + sprite.LayerSetState(layer, mark.Path.ToLower()); + } + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + if (!TryComp(ent, out var sprite)) + return; + + if (sprite.LayerMapTryGet(0, out var l)) + { + sprite.LayerSetState(l, ent.Comp.Path.ToLower()); + return; + } + + var rsi = new SpriteSpecifier.Rsi(new ResPath("_CorvaxNext/Heretic/combat_marks.rsi"), ent.Comp.Path.ToLower()); + var layer = sprite.AddLayer(rsi); + + sprite.LayerMapSet(0, layer); + sprite.LayerSetShader(layer, "unshaded"); + } + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + if (!TryComp(ent, out var sprite)) + return; + + if (!sprite.LayerMapTryGet(0, out var layer)) + return; + + sprite.RemoveLayer(layer); + } +} diff --git a/Content.Client/_CorvaxNext/Heretic/HereticRitualRuneBoundUserInterface.cs b/Content.Client/_CorvaxNext/Heretic/HereticRitualRuneBoundUserInterface.cs new file mode 100644 index 00000000000..1b29c1f9f48 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/HereticRitualRuneBoundUserInterface.cs @@ -0,0 +1,39 @@ +using Content.Client._CorvaxNext.Heretic.UI; +using Content.Shared._CorvaxNext.Heretic.Components; +using Content.Shared.Heretic.Prototypes; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Shared.Prototypes; + +namespace Content.Client._CorvaxNext.Heretic; + +public sealed class HereticRitualRuneBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + + private HereticRitualRuneRadialMenu? _hereticRitualMenu; + + public HereticRitualRuneBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _hereticRitualMenu = this.CreateWindow(); + _hereticRitualMenu.SetEntity(Owner); + _hereticRitualMenu.SendHereticRitualRuneMessageAction += SendHereticRitualMessage; + + var vpSize = _displayManager.ScreenSize; + _hereticRitualMenu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); + } + + private void SendHereticRitualMessage(ProtoId protoId) + { + SendMessage(new HereticRitualMessage(protoId)); + } +} diff --git a/Content.Client/_CorvaxNext/Heretic/Ritual.CustomBehaviors.cs b/Content.Client/_CorvaxNext/Heretic/Ritual.CustomBehaviors.cs new file mode 100644 index 00000000000..4f73a31a1e2 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/Ritual.CustomBehaviors.cs @@ -0,0 +1,68 @@ +using Content.Shared.Heretic.Prototypes; + +namespace Content.Client.Heretic; + +// these do nothing and are there just for yaml limter to shut the fuck up. +// make sure they stay up in sync with the server counterpart. +// regards. +// - john + +public sealed partial class RitualAshAscendBehavior : RitualSacrificeBehavior { } +public sealed partial class RitualBladeAscendBehavior : RitualSacrificeBehavior { } +public sealed partial class RitualMuteGhoulifyBehavior : RitualSacrificeBehavior { } + +[Virtual] public partial class RitualSacrificeBehavior : RitualCustomBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + // do nothing + } +} + +public sealed partial class RitualTemperatureBehavior : RitualCustomBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + // do nothing + } +} + +public sealed partial class RitualReagentPuddleBehavior : RitualCustomBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + // do nothing + } +} + +public sealed partial class RitualKnowledgeBehavior : RitualCustomBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + // do nothing + } +} diff --git a/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml b/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml new file mode 100644 index 00000000000..425ba588c12 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml.cs b/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml.cs new file mode 100644 index 00000000000..612fc971166 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/UI/HereticRitualRuneRadialMenu.xaml.cs @@ -0,0 +1,101 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.Heretic; +using Content.Shared.Heretic.Prototypes; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using System.Numerics; + +namespace Content.Client._CorvaxNext.Heretic.UI; + +public sealed partial class HereticRitualRuneRadialMenu : RadialMenu +{ + [Dependency] private readonly EntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly ISharedPlayerManager _playerManager = default!; + private readonly SpriteSystem _spriteSystem; + + public event Action>? SendHereticRitualRuneMessageAction; + + public EntityUid Entity { get; set; } + + public HereticRitualRuneRadialMenu() + { + IoCManager.InjectDependencies(this); + RobustXamlLoader.Load(this); + _spriteSystem = _entitySystem.GetEntitySystem(); + } + + public void SetEntity(EntityUid uid) + { + Entity = uid; + RefreshUI(); + } + + private void RefreshUI() + { + var main = FindControl("Main"); + if (main == null) + return; + + var player = _playerManager.LocalEntity; + + if (!_entityManager.TryGetComponent(player, out var heretic)) + return; + + foreach (var ritual in heretic.KnownRituals) + { + if (!_prototypeManager.TryIndex(ritual, out var ritualPrototype)) + continue; + + var button = new HereticRitualMenuButton + { + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64, 64), + ToolTip = Loc.GetString(ritualPrototype.LocName), + ProtoId = ritualPrototype.ID + }; + + var texture = new TextureRect + { + VerticalAlignment = VAlignment.Center, + HorizontalAlignment = HAlignment.Center, + Texture = _spriteSystem.Frame0(ritualPrototype.Icon), + TextureScale = new Vector2(2f, 2f) + }; + + button.AddChild(texture); + main.AddChild(button); + } + + AddHereticRitualMenuButtonOnClickAction(main); + } + + private void AddHereticRitualMenuButtonOnClickAction(RadialContainer mainControl) + { + if (mainControl == null) + return; + + foreach(var child in mainControl.Children) + { + var castChild = child as HereticRitualMenuButton; + + if (castChild == null) + continue; + + castChild.OnButtonUp += _ => + { + SendHereticRitualRuneMessageAction?.Invoke(castChild.ProtoId); + Close(); + }; + } + } + + public sealed class HereticRitualMenuButton : RadialMenuTextureButton + { + public ProtoId ProtoId { get; set; } + } +} diff --git a/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml new file mode 100644 index 00000000000..fd06facd081 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml @@ -0,0 +1,16 @@ + + + + + + diff --git a/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml.cs b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml.cs new file mode 100644 index 00000000000..ecfd3815dc3 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenu.xaml.cs @@ -0,0 +1,97 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.Heretic; +using Robust.Client.Player; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using System.Numerics; + +namespace Content.Client._CorvaxNext.Heretic.UI; + +public sealed partial class LivingHeartMenu : RadialMenu +{ + [Dependency] private readonly EntityManager _ent = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + [Dependency] private readonly IPlayerManager _player = default!; + + public EntityUid Entity { get; private set; } + + public event Action? SendActivateMessageAction; + + public LivingHeartMenu() + { + IoCManager.InjectDependencies(this); + RobustXamlLoader.Load(this); + } + + public void SetEntity(EntityUid ent) + { + Entity = ent; + UpdateUI(); + } + + private void UpdateUI() + { + var main = FindControl("Main"); + if (main == null) return; + + var player = _player.LocalEntity; + + if (!_ent.TryGetComponent(player, out var heretic)) + return; + + foreach (var target in heretic.SacrificeTargets) + { + if (target == null) continue; + + var ent = _ent.GetEntity(target); + if (ent == null) + continue; + + var button = new EmbeddedEntityMenuButton + { + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64, 64), + ToolTip = _ent.TryGetComponent(ent.Value, out var md) ? md.EntityName : "Unknown", + NetEntity = (NetEntity) target, + }; + + var texture = new SpriteView(ent.Value, _ent) + { + OverrideDirection = Direction.South, + VerticalAlignment = VAlignment.Center, + SetSize = new Vector2(64, 64), + VerticalExpand = true, + Stretch = SpriteView.StretchMode.Fill, + }; + button.AddChild(texture); + + main.AddChild(button); + } + AddAction(main); + } + + private void AddAction(RadialContainer main) + { + if (main == null) + return; + + foreach (var child in main.Children) + { + var castChild = child as EmbeddedEntityMenuButton; + if (castChild == null) + continue; + + castChild.OnButtonUp += _ => + { + SendActivateMessageAction?.Invoke(castChild.NetEntity); + Close(); + }; + } + } + + public sealed class EmbeddedEntityMenuButton : RadialMenuTextureButton + { + public NetEntity NetEntity; + } +} diff --git a/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenuBoundUserInterface.cs b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenuBoundUserInterface.cs new file mode 100644 index 00000000000..cac7c8505b0 --- /dev/null +++ b/Content.Client/_CorvaxNext/Heretic/UI/LivingHeartMenuBoundUserInterface.cs @@ -0,0 +1,34 @@ +using Content.Shared.Heretic; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; + +namespace Content.Client._CorvaxNext.Heretic.UI; + +public sealed partial class LivingHeartMenuBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + + [NonSerialized] private LivingHeartMenu? _menu; + + public LivingHeartMenuBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _menu = this.CreateWindow(); + _menu.SetEntity(Owner); + _menu.SendActivateMessageAction += SendMessage; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); + } + + private void SendMessage(NetEntity netent) + { + base.SendMessage(new EventHereticLivingHeartActivate() { Target = netent }); + } +} diff --git a/Content.IntegrationTests/Tests/_Goobstation/Heretic/RitualKnowledgeTests.cs b/Content.IntegrationTests/Tests/_Goobstation/Heretic/RitualKnowledgeTests.cs new file mode 100644 index 00000000000..43405b02119 --- /dev/null +++ b/Content.IntegrationTests/Tests/_Goobstation/Heretic/RitualKnowledgeTests.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.Linq; +using Content.Server.Heretic.Ritual; +using Content.Shared.Dataset; +using Content.Shared.Tag; +using Robust.Shared.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.IntegrationTests.Tests._Goobstation.Heretic; + +[TestFixture, TestOf(typeof(RitualKnowledgeBehavior))] +public sealed class RitualKnowledgeTests +{ + [Test] + public async Task ValidateEligibleTags() + { + // As far as I can tell, there's no annotation to validate + // a dataset of tag prototype IDs, so we'll have to do it + // in a test fixture. Sad. + + await using var pair = await PoolManager.GetServerClient(); + var server = pair.Server; + + var entMan = server.ResolveDependency(); + var protoMan = server.ResolveDependency(); + + await server.WaitAssertion(() => + { + // Get the eligible tags prototype + var dataset = protoMan.Index(RitualKnowledgeBehavior.EligibleTagsDataset); + + // Validate that every value is a valid tag + Assert.Multiple(() => + { + foreach (var tagId in dataset.Values) + { + Assert.That(protoMan.TryIndex(tagId, out var tagProto), Is.True, $"\"{tagId}\" is not a valid tag prototype ID"); + } + }); + }); + + await pair.CleanReturnAsync(); + } + + [Test] + public async Task ValidateTagsHaveItems() + { + await using var pair = await PoolManager.GetServerClient(); + var server = pair.Server; + + var entMan = server.ResolveDependency(); + var protoMan = server.ResolveDependency(); + var compFactory = server.ResolveDependency(); + + await server.WaitAssertion(() => + { + // Get the eligible tags prototype + var dataset = protoMan.Index(RitualKnowledgeBehavior.EligibleTagsDataset).Values.ToHashSet(); + + // Loop through every entity prototype and assemble a used tags set + var usedTags = new HashSet(); + + // Ensure that every tag is used by a non-abstract entity + foreach (var entProto in protoMan.EnumeratePrototypes()) + { + if (entProto.Abstract) + continue; + + if (entProto.TryGetComponent(out var tags, compFactory)) + { + usedTags.UnionWith(tags.Tags.Select(t => t.Id)); + } + } + + var unusedTags = dataset.Except(usedTags).ToHashSet(); + Assert.That(unusedTags, Is.Empty, $"The following ritual item tags are not used by any obtainable entity prototypes: {string.Join(", ", unusedTags)}"); + }); + + await pair.CleanReturnAsync(); + } +} diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs index f4978cd65c8..6f5cece0f43 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs @@ -173,5 +173,20 @@ private void AddAntagVerbs(GetVerbsEvent args) }; args.Verbs.Add(api); // Corvax-Next-Api-End + + // goobstation - heretics + Verb heretic = new() + { + Text = Loc.GetString("admin-verb-make-heretic"), + Category = VerbCategory.Antag, + Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/_Goobstation/Heretic/Blades/blade_blade.rsi"), "icon"), + Act = () => + { + _antag.ForceMakeAntag(targetPlayer, "Heretic"); + }, + Impact = LogImpact.High, + Message = Loc.GetString("admin-verb-make-heretic"), + }; + args.Verbs.Add(heretic); } } diff --git a/Content.Server/Antag/AntagSelectionSystem.API.cs b/Content.Server/Antag/AntagSelectionSystem.API.cs index 23e77c21028..bbb38f01558 100644 --- a/Content.Server/Antag/AntagSelectionSystem.API.cs +++ b/Content.Server/Antag/AntagSelectionSystem.API.cs @@ -78,6 +78,20 @@ public int GetTotalPlayerCount(IList pool) return count; } + // goob edit + public List GetAliveConnectedPlayers(IList pool) + { + var l = new List(); + foreach (var session in pool) + { + if (session.Status is SessionStatus.Disconnected or SessionStatus.Zombie) + continue; + l.Add(session); + } + return l; + } + // goob edit end + /// /// Gets the number of antagonists that should be present for a given antag definition based on the provided pool. /// A null pool will simply use the player count. diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index c9a71c53584..4eb99ffe108 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -345,6 +345,9 @@ private void OnDestruction(Entity ent, ref Destructi parent); QueueDel(uid); + // goob edit + RaiseLocalEvent(parent, new PolymorphRevertEvent()); + return parent; } @@ -391,3 +394,6 @@ public void RemovePolymorphAction(ProtoId id, Entity(OnRequestUpdate); @@ -176,6 +182,16 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi component.BalanceSpent[currency] += amount; } + // goobstation - heretics + // i am too tired of making separate systems for knowledge adding + // and all that shit. i've had like 4 failed attempts + // so i'm just gonna shitcode my way out of my misery + if (listing.ProductHereticKnowledge != null) + { + if (TryComp(buyer, out var heretic)) + _heretic.AddKnowledge(buyer, heretic, (ProtoId) listing.ProductHereticKnowledge); + } + //spawn entity if (listing.ProductEntity != null) { diff --git a/Content.Server/_CorvaxNext/Actions/ActionsProviderComponent.cs b/Content.Server/_CorvaxNext/Actions/ActionsProviderComponent.cs new file mode 100644 index 00000000000..ea9a367ec1a --- /dev/null +++ b/Content.Server/_CorvaxNext/Actions/ActionsProviderComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Actions; + +[RegisterComponent] +public sealed partial class ActionsProviderComponent : Component +{ + [DataField] public List Actions = new(); +} diff --git a/Content.Server/_CorvaxNext/Actions/ActionsProviderSystem.cs b/Content.Server/_CorvaxNext/Actions/ActionsProviderSystem.cs new file mode 100644 index 00000000000..f328dad9e6b --- /dev/null +++ b/Content.Server/_CorvaxNext/Actions/ActionsProviderSystem.cs @@ -0,0 +1,20 @@ +using Content.Shared.Actions; + +namespace Content.Server.Actions; + +public sealed partial class ActionsProviderSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + foreach (var action in ent.Comp.Actions) + _actions.AddAction(ent, action); + } +} diff --git a/Content.Server/_CorvaxNext/Clothing/MadnessMaskSystem.cs b/Content.Server/_CorvaxNext/Clothing/MadnessMaskSystem.cs new file mode 100644 index 00000000000..2e6148dd56d --- /dev/null +++ b/Content.Server/_CorvaxNext/Clothing/MadnessMaskSystem.cs @@ -0,0 +1,54 @@ +using Content.Server.EntityEffects.Effects; +using Content.Shared.Clothing.Components; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; +using Content.Shared.Drugs; +using Content.Shared.Drunk; +using Content.Shared.Heretic; +using Content.Shared.Jittering; +using Content.Shared.StatusEffect; +using Content.Shared.Stunnable; +using Robust.Shared.Random; + +namespace Content.Server._Goobstation.Clothing; + +public sealed partial class MadnessMaskSystem : EntitySystem +{ + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] private readonly SharedJitteringSystem _jitter = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + foreach (var mask in EntityQuery()) + { + mask.UpdateAccumulator += frameTime; + if (mask.UpdateAccumulator < mask.UpdateTimer) + continue; + + mask.UpdateAccumulator = 0; + + var lookup = _lookup.GetEntitiesInRange(mask.Owner, 5f); + foreach (var look in lookup) + { + // heathens exclusive + if (HasComp(look) + || HasComp(look)) + continue; + + if (HasComp(look) && _random.Prob(.4f)) + _stamina.TakeStaminaDamage(look, 5f, visual: false); + + if (_random.Prob(.4f)) + _jitter.DoJitter(look, TimeSpan.FromSeconds(.5f), true, amplitude: 5, frequency: 10); + + if (_random.Prob(.25f)) + _statusEffect.TryAddStatusEffect(look, "SeeingRainbows", TimeSpan.FromSeconds(10f), false); + } + } + } +} diff --git a/Content.Server/_CorvaxNext/GameTicking/Rules/Components/HereticRuleComponent.cs b/Content.Server/_CorvaxNext/GameTicking/Rules/Components/HereticRuleComponent.cs new file mode 100644 index 00000000000..5cdfe4b6295 --- /dev/null +++ b/Content.Server/_CorvaxNext/GameTicking/Rules/Components/HereticRuleComponent.cs @@ -0,0 +1,20 @@ +using Content.Shared.Store; +using Robust.Shared.Prototypes; + +namespace Content.Server.GameTicking.Rules.Components; + +[RegisterComponent, Access(typeof(HereticRuleSystem))] +public sealed partial class HereticRuleComponent : Component +{ + public readonly List Minds = new(); + + public readonly List> StoreCategories = new() + { + "HereticPathAsh", + //"HereticPathLock", + "HereticPathFlesh", + "HereticPathBlade", + "HereticPathVoid", + "HereticPathSide" + }; +} diff --git a/Content.Server/_CorvaxNext/GameTicking/Rules/HereticRuleSystem.cs b/Content.Server/_CorvaxNext/GameTicking/Rules/HereticRuleSystem.cs new file mode 100644 index 00000000000..9acb38393d3 --- /dev/null +++ b/Content.Server/_CorvaxNext/GameTicking/Rules/HereticRuleSystem.cs @@ -0,0 +1,122 @@ +using Content.Server.Antag; +using Content.Server.GameTicking.Rules.Components; +using Content.Server._CorvaxNext.Objectives.Components; +using Content.Server.Mind; +using Content.Server.Objectives; +using Content.Server.Objectives.Components; +using Content.Server.Roles; +using Content.Shared.Heretic; +using Content.Shared.NPC.Prototypes; +using Content.Shared.NPC.Systems; +using Content.Shared.Roles; +using Content.Shared.Store; +using Content.Shared.Store.Components; +using Robust.Shared.Audio; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using System.Linq; +using System.Text; + +namespace Content.Server.GameTicking.Rules; + +public sealed partial class HereticRuleSystem : GameRuleSystem +{ + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; + [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly ObjectivesSystem _objective = default!; + [Dependency] private readonly IRobustRandom _rand = default!; + + public readonly SoundSpecifier BriefingSound = new SoundPathSpecifier("/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain.ogg"); + + [ValidatePrototypeId] public readonly ProtoId HereticFactionId = "Heretic"; + + [ValidatePrototypeId] public readonly ProtoId NanotrasenFactionId = "NanoTrasen"; + + [ValidatePrototypeId] public readonly ProtoId Currency = "KnowledgePoint"; + + [ValidatePrototypeId] static EntProtoId mindRole = "MindRoleHeretic"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAntagSelect); + SubscribeLocalEvent(OnTextPrepend); + } + + private void OnAntagSelect(Entity ent, ref AfterAntagEntitySelectedEvent args) + { + TryMakeHeretic(args.EntityUid, ent.Comp); + + for (int i = 0; i < _rand.Next(6, 12); i++) + if (TryFindRandomTile(out var _, out var _, out var _, out var coords)) + Spawn("EldritchInfluence", coords); + } + + public bool TryMakeHeretic(EntityUid target, HereticRuleComponent rule) + { + if (!_mind.TryGetMind(target, out var mindId, out var mind)) + return false; + + _role.MindAddRole(mindId, mindRole.Id, mind, true); + + // briefing + if (HasComp(target)) + { + var briefingShort = Loc.GetString("heretic-role-greeting-short"); + + _antag.SendBriefing(target, Loc.GetString("heretic-role-greeting-fluff"), Color.MediumPurple, null); + _antag.SendBriefing(target, Loc.GetString("heretic-role-greeting"), Color.Red, BriefingSound); + + if (_role.MindHasRole(mindId, out var mr)) + AddComp(mr.Value, new RoleBriefingComponent { Briefing = briefingShort }, overwrite: true); + } + _npcFaction.RemoveFaction(target, NanotrasenFactionId, false); + _npcFaction.AddFaction(target, HereticFactionId); + + EnsureComp(target); + + // add store + var store = EnsureComp(target); + foreach (var category in rule.StoreCategories) + store.Categories.Add(category); + store.CurrencyWhitelist.Add(Currency); + store.Balance.Add(Currency, 2); + + rule.Minds.Add(mindId); + + return true; + } + + public void OnTextPrepend(Entity ent, ref ObjectivesTextPrependEvent args) + { + var sb = new StringBuilder(); + + var mostKnowledge = 0f; + var mostKnowledgeName = string.Empty; + + foreach (var heretic in EntityQuery()) + { + if (!_mind.TryGetMind(heretic.Owner, out var mindId, out var mind)) + continue; + + var name = _objective.GetTitle((mindId, mind), Name(heretic.Owner)); + if (_mind.TryGetObjectiveComp(mindId, out var objective, mind)) + { + if (objective.Researched > mostKnowledge) + mostKnowledge = objective.Researched; + mostKnowledgeName = name; + } + + var str = Loc.GetString($"roundend-prepend-heretic-ascension-{(heretic.Ascended ? "success" : "fail")}", ("name", name)); + sb.AppendLine(str); + } + + sb.AppendLine("\n" + Loc.GetString("roundend-prepend-heretic-knowledge-named", ("name", mostKnowledgeName), ("number", mostKnowledge))); + + args.Text = sb.ToString(); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Ash.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Ash.cs new file mode 100644 index 00000000000..79b315130e3 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Ash.cs @@ -0,0 +1,164 @@ +using Content.Server.Atmos.Components; +using Content.Shared.Heretic; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs; +using Content.Shared.Damage; +using Content.Shared.Atmos; +using Content.Server.Polymorph.Systems; +using Content.Server.Temperature.Components; +using Content.Shared.Temperature.Components; +using Content.Server.Body.Components; +using Content.Shared.Armor; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + private void SubscribeAsh() + { + SubscribeLocalEvent(OnJaunt); + SubscribeLocalEvent(OnJauntGhoul); + SubscribeLocalEvent(OnJauntEnd); + + SubscribeLocalEvent(OnVolcano); + SubscribeLocalEvent(OnNWRebirth); + SubscribeLocalEvent(OnFlames); + SubscribeLocalEvent(OnCascade); + + SubscribeLocalEvent(OnAscensionAsh); + } + + private void OnJaunt(Entity ent, ref EventHereticAshenShift args) + { + if (TryUseAbility(ent, args) && TryDoJaunt(ent)) + args.Handled = true; + } + private void OnJauntGhoul(Entity ent, ref EventHereticAshenShift args) + { + if (TryUseAbility(ent, args) && TryDoJaunt(ent)) + args.Handled = true; + } + private bool TryDoJaunt(EntityUid ent) + { + Spawn("PolymorphAshJauntAnimation", Transform(ent).Coordinates); + var urist = _poly.PolymorphEntity(ent, "AshJaunt"); + if (urist == null) + return false; + return true; + } + private void OnJauntEnd(Entity ent, ref PolymorphRevertEvent args) + { + Spawn("PolymorphAshJauntEndAnimation", Transform(ent).Coordinates); + } + + private void OnVolcano(Entity ent, ref EventHereticVolcanoBlast args) + { + if (!TryUseAbility(ent, args)) + return; + + var ignoredTargets = new List(); + + // all ghouls are immune to heretic shittery + foreach (var e in EntityQuery()) + ignoredTargets.Add(e.Owner); + + // all heretics with the same path are also immune + foreach (var e in EntityQuery()) + if (e.CurrentPath == ent.Comp.CurrentPath) + ignoredTargets.Add(e.Owner); + + if (!_splitball.Spawn(ent, ignoredTargets)) + return; + + if (ent.Comp.Ascended) // will only work on ash path + _flammable.AdjustFireStacks(ent, 20f, ignite: true); + + args.Handled = true; + } + private void OnNWRebirth(Entity ent, ref EventHereticNightwatcherRebirth args) + { + if (!TryUseAbility(ent, args)) + return; + + var power = ent.Comp.CurrentPath == "Ash" ? ent.Comp.PathStage : 2.5f; + var lookup = _lookup.GetEntitiesInRange(ent, power); + + foreach (var look in lookup) + { + if ((TryComp(look, out var th) && th.CurrentPath == ent.Comp.CurrentPath) + || HasComp(look)) + continue; + + if (TryComp(look, out var flam)) + { + if (flam.OnFire && TryComp(ent, out var dmgc)) + { + // heals everything by base + power for each burning target + _stam.TryTakeStamina(ent, -(10 + power)); + var dmgdict = dmgc.Damage.DamageDict; + foreach (var key in dmgdict.Keys) + dmgdict[key] -= 10f + power; + + var dmgspec = new DamageSpecifier() { DamageDict = dmgdict }; + _dmg.TryChangeDamage(ent, dmgspec, true, false, dmgc); + } + + if (!flam.OnFire) + _flammable.AdjustFireStacks(look, power, flam, true); + + if (TryComp(look, out var mobstat)) + if (mobstat.CurrentState == MobState.Critical) + _mobstate.ChangeMobState(look, MobState.Dead, mobstat); + } + } + + args.Handled = true; + } + private void OnFlames(Entity ent, ref EventHereticFlames args) + { + if (!TryUseAbility(ent, args)) + return; + + EnsureComp(ent); + + if (ent.Comp.Ascended) + _flammable.AdjustFireStacks(ent, 20f, ignite: true); + + args.Handled = true; + } + private void OnCascade(Entity ent, ref EventHereticCascade args) + { + if (!TryUseAbility(ent, args) || !Transform(ent).GridUid.HasValue) + return; + + // yeah. it just generates a ton of plasma which just burns. + // lame, but we don't have anything fire related atm, so, it works. + var tilepos = _transform.GetGridOrMapTilePosition(ent, Transform(ent)); + var enumerator = _atmos.GetAdjacentTileMixtures(Transform(ent).GridUid!.Value, tilepos, false, false); + while (enumerator.MoveNext(out var mix)) + { + mix.AdjustMoles(Gas.Plasma, 50f); + mix.Temperature = Atmospherics.T0C + 125f; + } + + if (ent.Comp.Ascended) + _flammable.AdjustFireStacks(ent, 20f, ignite: true); + + args.Handled = true; + } + + + private void OnAscensionAsh(Entity ent, ref HereticAscensionAshEvent args) + { + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + + // fire immunity + var flam = EnsureComp(ent); + flam.Damage = new(); // reset damage dict + // this does NOT protect you against lasers and whatnot. for now. when i figure out THIS STUPID FUCKING LIMB SYSTEM!!! + // regards. + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Blade.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Blade.cs new file mode 100644 index 00000000000..a93d6c89fb5 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Blade.cs @@ -0,0 +1,78 @@ +using Content.Server.Heretic.Components.PathSpecific; +using Content.Shared.Body.Part; +using Content.Shared.Damage.Components; +using Content.Shared.Heretic; +using Content.Shared.Slippery; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + private void SubscribeBlade() + { + SubscribeLocalEvent(OnDanceOfTheBrand); + SubscribeLocalEvent(OnRealignment); + SubscribeLocalEvent(OnChampionStance); + SubscribeLocalEvent(OnFuriousSteel); + + SubscribeLocalEvent(OnAscensionBlade); + } + + private void OnDanceOfTheBrand(Entity ent, ref HereticDanceOfTheBrandEvent args) + { + EnsureComp(ent); + } + private void OnRealignment(Entity ent, ref EventHereticRealignment args) + { + if (!TryUseAbility(ent, args)) + return; + + _statusEffect.TryRemoveStatusEffect(ent, "Stun"); + _statusEffect.TryRemoveStatusEffect(ent, "KnockedDown"); + _statusEffect.TryRemoveStatusEffect(ent, "ForcedSleep"); + _statusEffect.TryRemoveStatusEffect(ent, "Drowsiness"); + + if (TryComp(ent, out var stam)) + { + if (stam.StaminaDamage >= stam.CritThreshold) + { + _stam.ExitStamCrit(ent, stam); + } + + stam.StaminaDamage = 0; + RemComp(ent); + Dirty(ent, stam); + } + + _statusEffect.TryAddStatusEffect(ent, "Pacified", TimeSpan.FromSeconds(10f), true); + + args.Handled = true; + } + + private void OnChampionStance(Entity ent, ref HereticChampionStanceEvent args) + { + // remove limbloss + foreach (var part in _body.GetBodyChildren(ent)) + part.Component.CanSever = false; + + EnsureComp(ent); + } + private void OnFuriousSteel(Entity ent, ref EventHereticFuriousSteel args) + { + if (!TryUseAbility(ent, args)) + return; + + for (int i = 0; i < 3; i++) + _pblade.AddProtectiveBlade(ent); + + args.Handled = true; + } + + private void OnAscensionBlade(Entity ent, ref HereticAscensionBladeEvent args) + { + EnsureComp(ent); // epic gamer move + RemComp(ent); // no stun + + EnsureComp(ent); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Flesh.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Flesh.cs new file mode 100644 index 00000000000..c15b56981d3 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Flesh.cs @@ -0,0 +1,110 @@ +using Content.Server.Body.Components; +using Content.Shared.Body.Components; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Heretic; +using Content.Shared.Popups; +using Robust.Shared.Audio; +using Robust.Shared.Player; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + private void SubscribeFlesh() + { + SubscribeLocalEvent(OnFleshSurgery); + SubscribeLocalEvent(OnFleshSurgeryDoAfter); + SubscribeLocalEvent(OnAscensionFlesh); + } + + private void OnFleshSurgery(Entity ent, ref EventHereticFleshSurgery args) + { + if (!TryUseAbility(ent, args)) + return; + + if (HasComp(args.Target) + || (TryComp(args.Target, out var th) && th.CurrentPath == ent.Comp.CurrentPath)) + { + var dargs = new DoAfterArgs(EntityManager, ent, 10f, new EventHereticFleshSurgeryDoAfter(args.Target), ent, args.Target) + { + BreakOnDamage = true, + BreakOnMove = true, + BreakOnHandChange = false, + BreakOnDropItem = false, + }; + _doafter.TryStartDoAfter(dargs); + args.Handled = true; + return; + } + + // remove a random organ + if (TryComp(args.Target, out var body)) + { + _vomit.Vomit(args.Target, -1000, -1000); // You feel hollow! + + switch (_random.Next(0, 2)) + { + // remove stomach + case 0: + foreach (var entity in _body.GetBodyOrganEntityComps((args.Target, body))) + QueueDel(entity.Owner); + + _popup.PopupEntity(Loc.GetString("admin-smite-stomach-removal-self"), args.Target, + args.Target, PopupType.LargeCaution); + break; + + // remove random hand + case 1: + var baseXform = Transform(args.Target); + foreach (var part in _body.GetBodyChildrenOfType(args.Target, BodyPartType.Hand, body)) + { + _transform.AttachToGridOrMap(part.Id); + break; + } + _popup.PopupEntity(Loc.GetString("admin-smite-remove-hands-self"), args.Target, args.Target, PopupType.LargeCaution); + _popup.PopupCoordinates(Loc.GetString("admin-smite-remove-hands-other", ("name", args.Target)), baseXform.Coordinates, + Filter.PvsExcept(args.Target), true, PopupType.Medium); + break; + + // remove lungs + case 2: + foreach (var entity in _body.GetBodyOrganEntityComps((args.Target, body))) + QueueDel(entity.Owner); + + _popup.PopupEntity(Loc.GetString("admin-smite-lung-removal-self"), args.Target, + args.Target, PopupType.LargeCaution); + break; + + default: + break; + } + } + + args.Handled = true; + } + private void OnFleshSurgeryDoAfter(Entity ent, ref EventHereticFleshSurgeryDoAfter args) + { + if (args.Cancelled) + return; + + if (args.Target == null) // shouldn't really happen. just in case + return; + + if (!TryComp(args.Target, out var dmg)) + return; + + // heal teammates, mostly ghouls + _dmg.SetAllDamage((EntityUid) args.Target, dmg, 0); + args.Handled = true; + } + private void OnAscensionFlesh(Entity ent, ref HereticAscensionFleshEvent args) + { + var urist = _poly.PolymorphEntity(ent, "EldritchHorror"); + if (urist == null) + return; + + _aud.PlayPvs(new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg"), (EntityUid) urist, AudioParams.Default.AddVolume(2f)); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Lock.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Lock.cs new file mode 100644 index 00000000000..d0cbe24fce3 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Lock.cs @@ -0,0 +1,29 @@ +using Content.Shared.Heretic; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + private void SubscribeLock() + { + SubscribeLocalEvent(OnBulglarFinesse); + SubscribeLocalEvent(OnLastRefugee); + // add eldritch id here + + SubscribeLocalEvent(OnAscensionLock); + } + + private void OnBulglarFinesse(Entity ent, ref EventHereticBulglarFinesse args) + { + + } + private void OnLastRefugee(Entity ent, ref EventHereticLastRefugee args) + { + + } + + private void OnAscensionLock(Entity ent, ref HereticAscensionLockEvent args) + { + + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Void.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Void.cs new file mode 100644 index 00000000000..650713690ce --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.Void.cs @@ -0,0 +1,124 @@ +using Content.Server.Atmos.Components; +using Content.Server.Body.Components; +using Content.Server.Heretic.Components.PathSpecific; +using Content.Server.Magic; +using Content.Server.Temperature.Components; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Heretic; +using Content.Shared.Temperature.Components; +using Robust.Shared.Audio; +using Robust.Shared.Physics.Components; +using System.Linq; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + private void SubscribeVoid() + { + SubscribeLocalEvent(OnAristocratWay); + SubscribeLocalEvent(OnAscensionVoid); + + SubscribeLocalEvent(OnVoidBlast); + SubscribeLocalEvent(OnVoidBlink); + SubscribeLocalEvent(OnVoidPull); + } + + private void OnAristocratWay(Entity ent, ref HereticAristocratWayEvent args) + { + RemComp(ent); + RemComp(ent); + RemComp(ent); + } + private void OnAscensionVoid(Entity ent, ref HereticAscensionVoidEvent args) + { + RemComp(ent); + EnsureComp(ent); + } + + private void OnVoidBlast(Entity ent, ref HereticVoidBlastEvent args) + { + if (!TryUseAbility(ent, args)) + return; + + var rod = Spawn("ImmovableVoidRod", Transform(ent).Coordinates); + if (TryComp(rod, out var vrod)) + vrod.User = ent; + + if (TryComp(rod, out PhysicsComponent? phys)) + { + _phys.SetLinearDamping(rod, phys, 0f); + _phys.SetFriction(rod, phys, 0f); + _phys.SetBodyStatus(rod, phys, BodyStatus.InAir); + + var xform = Transform(rod); + var vel = Transform(ent).WorldRotation.ToWorldVec() * 15f; + + _phys.SetLinearVelocity(rod, vel, body: phys); + xform.LocalRotation = Transform(ent).LocalRotation; + } + + args.Handled = true; + } + + private void OnVoidBlink(Entity ent, ref HereticVoidBlinkEvent args) + { + if (!TryUseAbility(ent, args)) + return; + + var condition = ent.Comp.CurrentPath == "Void"; + + var power = condition ? 1.5f + ent.Comp.PathStage / 5f : 1.5f; + + _aud.PlayPvs(new SoundPathSpecifier("/Audio/Effects/tesla_consume.ogg"), ent); + + foreach (var pookie in GetNearbyPeople(ent, power)) + _stun.TryKnockdown(pookie, TimeSpan.FromSeconds(power), true); + + _transform.SetCoordinates(ent, args.Target); + + // repeating for both sides + _aud.PlayPvs(new SoundPathSpecifier("/Audio/Effects/tesla_consume.ogg"), ent); + + foreach (var pookie in GetNearbyPeople(ent, power)) + _stun.TryKnockdown(pookie, TimeSpan.FromSeconds(power), true); + + args.Handled = true; + } + + private void OnVoidPull(Entity ent, ref HereticVoidPullEvent args) + { + if (!TryUseAbility(ent, args)) + return; + + var topPriority = GetNearbyPeople(ent, 1.5f); + var midPriority = GetNearbyPeople(ent, 2.5f); + var farPriority = GetNearbyPeople(ent, 5f); + + var power = ent.Comp.CurrentPath == "Void" ? 10f + ent.Comp.PathStage * 2 : 10f; + + // damage closest ones + foreach (var pookie in topPriority) + { + if (!TryComp(pookie, out var dmgComp)) + continue; + + // total damage + power divided by all damage types. + var damage = (dmgComp.TotalDamage + power) / _prot.EnumeratePrototypes().Count(); + + // apply gaming. + _dmg.SetAllDamage(pookie, dmgComp, damage); + } + + // stun close-mid range + foreach (var pookie in midPriority) + _stun.TryKnockdown(pookie, TimeSpan.FromSeconds(2.5f), true); + + // pull in farthest ones + foreach (var pookie in farPriority) + _throw.TryThrow(pookie, Transform(ent).Coordinates); + + args.Handled = true; + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.cs new file mode 100644 index 00000000000..07dcdc9274e --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticAbilitySystem.cs @@ -0,0 +1,263 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Chat.Systems; +using Content.Server.DoAfter; +using Content.Server.Flash; +using Content.Server.Hands.Systems; +using Content.Server.Magic; +using Content.Server.Polymorph.Systems; +using Content.Server.Popups; +using Content.Server.Radio.Components; +using Content.Server.Store.Systems; +using Content.Shared.Actions; +using Content.Shared.Damage; +using Content.Shared.Damage.Systems; +using Content.Shared.DoAfter; +using Content.Shared.Heretic; +using Content.Shared.Mind.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Store.Components; +using Robust.Shared.Audio.Systems; +using Content.Shared.Popups; +using Robust.Shared.Random; +using Content.Shared.Body.Systems; +using Content.Server.Medical; +using Robust.Server.GameObjects; +using Content.Shared.Stunnable; +using Robust.Shared.Map; +using Content.Shared.StatusEffect; +using Content.Shared.Throwing; +using Content.Server.Station.Systems; +using Content.Shared.Localizations; +using Robust.Shared.Audio; +using Content.Shared.Mobs.Components; +using Robust.Shared.Prototypes; +using Content.Server.Heretic.EntitySystems; + +namespace Content.Server.Heretic.Abilities; + +public sealed partial class HereticAbilitySystem : EntitySystem +{ + // keeping track of all systems in a single file + [Dependency] private readonly StoreSystem _store = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly PolymorphSystem _poly = default!; + [Dependency] private readonly ChainFireballSystem _splitball = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly MobStateSystem _mobstate = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + [Dependency] private readonly DamageableSystem _dmg = default!; + [Dependency] private readonly StaminaSystem _stam = default!; + [Dependency] private readonly AtmosphereSystem _atmos = default!; + [Dependency] private readonly SharedAudioSystem _aud = default!; + [Dependency] private readonly DoAfterSystem _doafter = default!; + [Dependency] private readonly FlashSystem _flash = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly VomitSystem _vomit = default!; + [Dependency] private readonly PhysicsSystem _phys = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly ThrowingSystem _throw = default!; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + [Dependency] private readonly ProtectiveBladeSystem _pblade = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + + private List GetNearbyPeople(Entity ent, float range) + { + var list = new List(); + var lookup = _lookup.GetEntitiesInRange(Transform(ent).Coordinates, range); + + foreach (var look in lookup) + { + // ignore heretics with the same path*, affect everyone else + if ((TryComp(look, out var th) && th.CurrentPath == ent.Comp.CurrentPath) + || HasComp(look)) + continue; + + if (!HasComp(look)) + continue; + + list.Add(look); + } + return list; + } + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStore); + SubscribeLocalEvent(OnMansusGrasp); + + SubscribeLocalEvent(OnLivingHeart); + SubscribeLocalEvent(OnLivingHeartActivate); + + SubscribeLocalEvent(OnMansusLink); + SubscribeLocalEvent(OnMansusLinkDoafter); + + SubscribeAsh(); + SubscribeFlesh(); + SubscribeVoid(); + SubscribeBlade(); + SubscribeLock(); + } + + private bool TryUseAbility(EntityUid ent, BaseActionEvent args) + { + if (args.Handled) + return false; + + if (!TryComp(args.Action, out var actionComp)) + return false; + + // check if any magic items are worn + if (TryComp(ent, out var hereticComp) && actionComp.RequireMagicItem && !hereticComp.Ascended) + { + var ev = new CheckMagicItemEvent(); + RaiseLocalEvent(ent, ev); + + if (!ev.Handled) + { + _popup.PopupEntity(Loc.GetString("heretic-ability-fail-magicitem"), ent, ent); + return false; + } + } + + // shout the spell out + if (!string.IsNullOrWhiteSpace(actionComp.MessageLoc)) + _chat.TrySendInGameICMessage(ent, Loc.GetString(actionComp.MessageLoc!), InGameICChatType.Speak, false); + + return true; + } + private void OnStore(Entity ent, ref EventHereticOpenStore args) + { + if (!TryComp(ent, out var store)) + return; + + _store.ToggleUi(ent, ent, store); + } + private void OnMansusGrasp(Entity ent, ref EventHereticMansusGrasp args) + { + if (!TryUseAbility(ent, args)) + return; + + if (ent.Comp.MansusGraspActive) + { + _popup.PopupEntity(Loc.GetString("heretic-ability-fail"), ent, ent); + return; + } + + var st = Spawn("TouchSpellMansus", Transform(ent).Coordinates); + + if (!_hands.TryForcePickupAnyHand(ent, st)) + { + _popup.PopupEntity(Loc.GetString("heretic-ability-fail"), ent, ent); + QueueDel(st); + return; + } + + ent.Comp.MansusGraspActive = true; + args.Handled = true; + } + private void OnLivingHeart(Entity ent, ref EventHereticLivingHeart args) + { + if (!TryUseAbility(ent, args)) + return; + + if (!TryComp(ent, out var uic)) + return; + + if (ent.Comp.SacrificeTargets.Count == 0) + { + _popup.PopupEntity(Loc.GetString("heretic-livingheart-notargets"), ent, ent); + args.Handled = true; + return; + } + + _ui.OpenUi((ent, uic), HereticLivingHeartKey.Key, ent); + args.Handled = true; + } + private void OnLivingHeartActivate(Entity ent, ref EventHereticLivingHeartActivate args) + { + var loc = string.Empty; + + var target = GetEntity(args.Target); + if (target == null) + return; + + if (!TryComp(target, out var mobstate)) + return; + var state = mobstate.CurrentState; + + var xquery = GetEntityQuery(); + var targetStation = _station.GetOwningStation(target); + var ownStation = _station.GetOwningStation(ent); + + var isOnStation = targetStation != null && targetStation == ownStation; + + var ang = Angle.Zero; + if (_mapMan.TryFindGridAt(_transform.GetMapCoordinates(Transform(ent)), out var grid, out var _)) + ang = Transform(grid).LocalRotation; + + var vector = _transform.GetWorldPosition((EntityUid) target, xquery) - _transform.GetWorldPosition(ent, xquery); + var direction = (vector.ToWorldAngle() - ang).GetDir(); + + var locdir = ContentLocalizationManager.FormatDirection(direction).ToLower(); + var locstate = state.ToString().ToLower(); + + if (isOnStation) + loc = Loc.GetString("heretic-livingheart-onstation", ("state", locstate), ("direction", locdir)); + else loc = Loc.GetString("heretic-livingheart-offstation", ("state", locstate), ("direction", locdir)); + + _popup.PopupEntity(loc, ent, ent, PopupType.Medium); + _aud.PlayPvs(new SoundPathSpecifier("/Audio/_CorvaxNext/Heretic/heartbeat.ogg"), ent, AudioParams.Default.WithVolume(-3f)); + } + + private void OnMansusLink(Entity ent, ref EventHereticMansusLink args) + { + if (!TryUseAbility(ent, args)) + return; + + if (!HasComp(args.Target)) + { + _popup.PopupEntity(Loc.GetString("heretic-manselink-fail-nomind"), ent, ent); + return; + } + + if (TryComp(args.Target, out var radio) + && radio.Channels.Contains("Mansus")) + { + _popup.PopupEntity(Loc.GetString("heretic-manselink-fail-exists"), ent, ent); + return; + } + + var dargs = new DoAfterArgs(EntityManager, ent, 5f, new HereticMansusLinkDoAfter(args.Target), ent, args.Target) + { + BreakOnDamage = true, + BreakOnMove = true, + BreakOnWeightlessMove = true + }; + _popup.PopupEntity(Loc.GetString("heretic-manselink-start"), ent, ent); + _popup.PopupEntity(Loc.GetString("heretic-manselink-start-target"), args.Target, args.Target, PopupType.MediumCaution); + _doafter.TryStartDoAfter(dargs); + } + private void OnMansusLinkDoafter(Entity ent, ref HereticMansusLinkDoAfter args) + { + if (args.Cancelled) + return; + + var reciever = EnsureComp(args.Target); + var transmitter = EnsureComp(args.Target); + var radio = EnsureComp(args.Target); + radio.Channels = new() { "Mansus" }; + transmitter.Channels = new() { "Mansus" }; + + // this "* 1000f" (divided by 1000 in FlashSystem) is gonna age like fine wine :clueless: + _flash.Flash(args.Target, null, null, 2f * 1000f, 0f, false, true, stunDuration: TimeSpan.FromSeconds(1f)); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Abilities/HereticFlames.cs b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticFlames.cs new file mode 100644 index 00000000000..7fa809f112f --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Abilities/HereticFlames.cs @@ -0,0 +1,44 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; + +namespace Content.Server.Heretic.Abilities; + +[RegisterComponent] +public sealed partial class HereticFlamesComponent : Component +{ + public float Timer = 0f; + public float TimerSeconds = 0f; + public float UpdateDuration = .2f; + [DataField] public float Duration = 60f; +} + +public sealed partial class HereticFlamesSystem : EntitySystem +{ + [Dependency] private readonly AtmosphereSystem _atmos = default!; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + foreach (var hfc in EntityQuery()) + { + hfc.Timer += frameTime; + if (hfc.Timer < hfc.UpdateDuration) + continue; + + hfc.Timer = 0f; + hfc.TimerSeconds += 1f; + + if (hfc.TimerSeconds >= hfc.Duration) + RemComp(hfc.Owner, hfc); + + var gasmix = _atmos.GetTileMixture((hfc.Owner, Transform(hfc.Owner))); + + if (gasmix == null) + continue; + + gasmix.AdjustMoles(Gas.Plasma, 2f); + gasmix.Temperature = Atmospherics.T0C + 125f; + } + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/EldritchInfluenceComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/EldritchInfluenceComponent.cs new file mode 100644 index 00000000000..bf425c9d719 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/EldritchInfluenceComponent.cs @@ -0,0 +1,12 @@ +using Content.Server.Heretic.EntitySystems; + +namespace Content.Server.Heretic.Components; + +[RegisterComponent, Access(typeof(EldritchInfluenceSystem))] +public sealed partial class EldritchInfluenceComponent : Component +{ + [DataField] public bool Spent = false; + + // make sure to update it with the prototype !!! + [NonSerialized] public static int LayerMask = 69; // 69 idk why not lolol +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/HereticBladeComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/HereticBladeComponent.cs new file mode 100644 index 00000000000..a368da707b9 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/HereticBladeComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Heretic.Components; + +[RegisterComponent] +public sealed partial class HereticBladeComponent : Component +{ + [DataField] public string? Path; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/MansusGraspComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/MansusGraspComponent.cs new file mode 100644 index 00000000000..d7ae8b71d97 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/MansusGraspComponent.cs @@ -0,0 +1,9 @@ +using Content.Server.Heretic.EntitySystems; + +namespace Content.Server.Heretic.Components; + +[RegisterComponent, Access(typeof(MansusGraspSystem))] +public sealed partial class MansusGraspComponent : Component +{ + [DataField] public string? Path = null; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/MansusInfusedComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/MansusInfusedComponent.cs new file mode 100644 index 00000000000..f741164afcd --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/MansusInfusedComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.Heretic.Components; + +[RegisterComponent] +public sealed partial class MansusInfusedComponent : Component +{ + [DataField] public float MaxCharges = 5f; + [ViewVariables(VVAccess.ReadWrite)] public float AvailableCharges = 5f; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/AristocratComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/AristocratComponent.cs new file mode 100644 index 00000000000..f91992e124e --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/AristocratComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.Heretic.Components.PathSpecific; + +[RegisterComponent] +public sealed partial class AristocratComponent : Component +{ + public float UpdateTimer = 0f; + [DataField] public float UpdateDelay = 1.5f; + [DataField] public float Range = 2.5f; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/ChampionStanceComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/ChampionStanceComponent.cs new file mode 100644 index 00000000000..36f10c6c26f --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/ChampionStanceComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Heretic.Components.PathSpecific; + +[RegisterComponent] +public sealed partial class ChampionStanceComponent : Component +{ + +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/RiposteeComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/RiposteeComponent.cs new file mode 100644 index 00000000000..93d75b49dcc --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/RiposteeComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Server.Heretic.Components.PathSpecific; + +[RegisterComponent] +public sealed partial class RiposteeComponent : Component +{ + [DataField] public float Cooldown = 20f; + [ViewVariables(VVAccess.ReadWrite)] public float Timer = 20f; + + [DataField] public bool CanRiposte = true; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/SilverMaelstromComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/SilverMaelstromComponent.cs new file mode 100644 index 00000000000..409dd93ee0c --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/PathSpecific/SilverMaelstromComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.Heretic.Components.PathSpecific; + +[RegisterComponent] +public sealed partial class SilverMaelstromComponent : Component +{ + [DataField] public float RespawnCooldown = 5f; + [ViewVariables(VVAccess.ReadWrite)] public float RespawnTimer = 0f; + + [ViewVariables(VVAccess.ReadOnly)] public int ActiveBlades = 0; + [DataField] public int MaxBlades = 10; +} diff --git a/Content.Server/_CorvaxNext/Heretic/Components/ProtectiveBladeComponent.cs b/Content.Server/_CorvaxNext/Heretic/Components/ProtectiveBladeComponent.cs new file mode 100644 index 00000000000..61fbce4e494 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Components/ProtectiveBladeComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.Heretic.Components; + +/// +/// Indicates that an entity can act as a protective blade. +/// +[RegisterComponent] +public sealed partial class ProtectiveBladeComponent : Component +{ + [DataField] public float Lifetime = 60f; + [ViewVariables(VVAccess.ReadWrite)] public float Timer = 60f; +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/EldritchInfluenceSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/EldritchInfluenceSystem.cs new file mode 100644 index 00000000000..f7a13dde4b5 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/EldritchInfluenceSystem.cs @@ -0,0 +1,69 @@ +using Content.Server.Heretic.Components; +using Content.Server.Popups; +using Content.Shared.DoAfter; +using Content.Shared.Heretic; +using Content.Shared.Interaction; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class EldritchInfluenceSystem : EntitySystem +{ + [Dependency] private readonly SharedDoAfterSystem _doafter = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly HereticSystem _heretic = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnDoAfter); + } + + public bool CollectInfluence(Entity influence, Entity user, EntityUid? used = null) + { + if (influence.Comp.Spent) + return false; + + var ev = new CheckMagicItemEvent(); + RaiseLocalEvent(user, ev); + if (used != null) RaiseLocalEvent((EntityUid) used, ev); + + var doAfter = new EldritchInfluenceDoAfterEvent() + { + MagicItemActive = ev.Handled, + }; + var dargs = new DoAfterArgs(EntityManager, user, 10f, doAfter, influence, influence); + _popup.PopupEntity(Loc.GetString("heretic-influence-start"), influence, user); + return _doafter.TryStartDoAfter(dargs); + } + + private void OnInteract(Entity ent, ref InteractHandEvent args) + { + if (args.Handled + || !TryComp(args.User, out var heretic)) + return; + + args.Handled = CollectInfluence(ent, (args.User, heretic)); + } + private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + if (args.Handled + || !TryComp(args.User, out var heretic)) + return; + + args.Handled = CollectInfluence(ent, (args.User, heretic), args.Used); + } + private void OnDoAfter(Entity ent, ref EldritchInfluenceDoAfterEvent args) + { + if (args.Cancelled + || args.Target == null + || !TryComp(args.User, out var heretic)) + return; + + _heretic.UpdateKnowledge(args.User, heretic, args.MagicItemActive ? 2 : 1); + + Spawn("EldritchInfluenceIntermediate", Transform((EntityUid) args.Target).Coordinates); + QueueDel(args.Target); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/GhoulSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/GhoulSystem.cs new file mode 100644 index 00000000000..14251855714 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/GhoulSystem.cs @@ -0,0 +1,154 @@ +using Content.Server.Administration.Systems; +using Content.Server.Antag; +using Content.Server.Atmos.Components; +using Content.Server.Body.Components; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Humanoid; +using Content.Server.Mind.Commands; +using Content.Server.Roles; +using Content.Server.Temperature.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Damage; +using Content.Shared.Examine; +using Content.Shared.Ghost.Roles.Components; +using Content.Shared.Heretic; +using Content.Shared.Humanoid; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction.Events; +using Content.Shared.Mind; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.NPC.Systems; +using Content.Shared.Nutrition.AnimalHusbandry; +using Content.Shared.Nutrition.Components; +using Content.Shared.Roles; +using Robust.Shared.Audio; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class GhoulSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly DamageableSystem _damage = default!; + [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!; + [Dependency] private readonly RejuvenateSystem _rejuvenate = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; + [Dependency] private readonly MobThresholdSystem _threshold = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + + public void GhoulifyEntity(Entity ent) + { + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + + var hasMind = _mind.TryGetMind(ent, out var mindId, out var mind); + if (hasMind && ent.Comp.BoundHeretic != null) + SendBriefing(ent, mindId, mind); + + if (TryComp(ent, out var humanoid)) + { + // make them "have no eyes" and grey + // this is clearly a reference to grey tide + var greycolor = Color.FromHex("#505050"); + _humanoid.SetSkinColor(ent, greycolor, true, false, humanoid); + _humanoid.SetBaseLayerColor(ent, HumanoidVisualLayers.Eyes, greycolor, true, humanoid); + } + + _rejuvenate.PerformRejuvenate(ent); + if (TryComp(ent, out var th)) + { + _threshold.SetMobStateThreshold(ent, ent.Comp.TotalHealth, MobState.Dead, th); + _threshold.SetMobStateThreshold(ent, ent.Comp.TotalHealth / 1.25f, MobState.Critical, th); + } + + MakeSentientCommand.MakeSentient(ent, EntityManager); + + if (!HasComp(ent) && !hasMind) + { + var ghostRole = EnsureComp(ent); + ghostRole.RoleName = Loc.GetString("ghostrole-ghoul-name"); + ghostRole.RoleDescription = Loc.GetString("ghostrole-ghoul-desc"); + ghostRole.RoleRules = Loc.GetString("ghostrole-ghoul-rules"); + } + + if (!HasComp(ent) && !hasMind) + EnsureComp(ent); + + _faction.ClearFactions((ent, null)); + _faction.AddFaction((ent, null), "Heretic"); + } + + private void SendBriefing(Entity ent, EntityUid mindId, MindComponent? mind) + { + var brief = Loc.GetString("heretic-ghoul-greeting-noname"); + + if (ent.Comp.BoundHeretic != null) + brief = Loc.GetString("heretic-ghoul-greeting", ("ent", Identity.Entity((EntityUid) ent.Comp.BoundHeretic, EntityManager))); + var sound = new SoundPathSpecifier("/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain.ogg"); + _antag.SendBriefing(ent, brief, Color.MediumPurple, sound); + + if (!TryComp(ent, out _)) + AddComp(mindId, new(), overwrite: true); + + if (!TryComp(ent, out var rolebrief)) + AddComp(mindId, new RoleBriefingComponent() { Briefing = brief }, overwrite: true); + else rolebrief.Briefing += $"\n{brief}"; + } + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnTryAttack); + SubscribeLocalEvent(OnTakeGhostRole); + SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnMobStateChange); + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + foreach (var look in _lookup.GetEntitiesInRange(Transform(ent).Coordinates, 1.5f)) + { + if (ent.Comp.BoundHeretic == null) + ent.Comp.BoundHeretic = look; + else break; + } + + GhoulifyEntity(ent); + } + private void OnTakeGhostRole(Entity ent, ref TakeGhostRoleEvent args) + { + var hasMind = _mind.TryGetMind(ent, out var mindId, out var mind); + if (hasMind) + SendBriefing(ent, mindId, mind); + } + + private void OnTryAttack(Entity ent, ref AttackAttemptEvent args) + { + // prevent attacking owner and other heretics + if (args.Target == ent.Owner + || HasComp(args.Target)) + args.Cancel(); + } + + private void OnExamine(Entity ent, ref ExaminedEvent args) + { + args.PushMarkup(Loc.GetString("examine-system-cant-see-entity")); + } + + private void OnMobStateChange(Entity ent, ref MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Dead) + _body.GibBody(ent); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticBladeSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticBladeSystem.cs new file mode 100644 index 00000000000..16692600f75 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticBladeSystem.cs @@ -0,0 +1,169 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Body.Systems; +using Content.Server.Heretic.Components; +using Content.Server.Heretic.Components.PathSpecific; +using Content.Server.Teleportation; +using Content.Server.Temperature.Components; +using Content.Server.Temperature.Systems; +using Content.Shared.Damage; +using Content.Shared.Examine; +using Content.Shared.Heretic; +using Content.Shared.Interaction.Events; +using Content.Shared.Popups; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using System.Linq; +using System.Text; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticBladeSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly HereticCombatMarkSystem _combatMark = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + [Dependency] private readonly BloodstreamSystem _blood = default!; + [Dependency] private readonly DamageableSystem _damage = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly TemperatureSystem _temp = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnMeleeHit); + } + + public void ApplySpecialEffect(EntityUid performer, EntityUid target) + { + if (!TryComp(performer, out var hereticComp)) + return; + + switch (hereticComp.CurrentPath) + { + case "Ash": + _flammable.AdjustFireStacks(target, 2.5f, ignite: true); + break; + + case "Blade": + // check event handler + break; + + case "Flesh": + // ultra bleed + _blood.TryModifyBleedAmount(target, 1.5f); + break; + + case "Lock": + // todo: do something that has weeping and avulsion in it + if (_random.Next(0, 10) >= 8) + _blood.TryModifyBleedAmount(target, 10f); + break; + + case "Void": + if (TryComp(target, out var temp)) + _temp.ForceChangeTemperature(target, temp.CurrentTemperature - 5f, temp); + break; + + default: + return; + } + } + + private void OnInteract(Entity ent, ref UseInHandEvent args) + { + if (!TryComp(args.User, out var heretic)) + return; + + var xform = Transform(args.User); + // 250 because for some reason it counts "10" as 1 tile + var targetCoords = SelectRandomTileInRange(xform, 250f); + var queuedel = true; + + // void path exxclusive + if (heretic.CurrentPath == "Void" && heretic.PathStage >= 7) + { + var look = _lookupSystem.GetEntitiesInRange(Transform(ent).Coordinates, 20f); + if (look.Count > 0) + { + targetCoords = Transform(look.ToList()[0]).Coordinates; + queuedel = false; + } + } + + if (targetCoords != null) + { + _xform.SetCoordinates(args.User, targetCoords.Value); + _audio.PlayPvs(new SoundPathSpecifier("/Audio/Effects/tesla_consume.ogg"), args.User); + args.Handled = true; + } + + _popup.PopupEntity(Loc.GetString("heretic-blade-use"), args.User, args.User); + + if (queuedel) + QueueDel(ent); + } + + private void OnExamine(Entity ent, ref ExaminedEvent args) + { + if (!TryComp(args.Examiner, out var heretic)) + return; + + var isUpgradedVoid = heretic.CurrentPath == "Void" && heretic.PathStage >= 7; + + var sb = new StringBuilder(); + sb.AppendLine(Loc.GetString("heretic-blade-examine")); + if (isUpgradedVoid) sb.AppendLine(Loc.GetString("heretic-blade-void-examine")); + + args.PushMarkup(sb.ToString()); + } + + private void OnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (string.IsNullOrWhiteSpace(ent.Comp.Path)) + return; + + if (!TryComp(args.User, out var hereticComp)) + return; + + foreach (var hit in args.HitEntities) + { + // does not work on other heretics + if (HasComp(hit)) + continue; + + if (TryComp(hit, out var mark)) + { + _combatMark.ApplyMarkEffect(hit, ent.Comp.Path, args.User); + RemComp(hit, mark); + } + + if (hereticComp.PathStage >= 7) + ApplySpecialEffect(args.User, hit); + } + + // blade path exclusive. + if (HasComp(args.User)) + { + args.BonusDamage += args.BaseDamage; // double it. + if (TryComp(args.User, out var dmg)) + { + var orig = dmg.Damage.DamageDict; + foreach (var k in orig.Keys) + orig[k] -= 5f; // -5 damage to all types. pretty good imo + + _damage.SetDamage(args.User, dmg, new() { DamageDict = orig }); + } + } + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticCombatMarkSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticCombatMarkSystem.cs new file mode 100644 index 00000000000..957ebdaaf25 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticCombatMarkSystem.cs @@ -0,0 +1,143 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Body.Systems; +using Content.Server.Popups; +using Content.Server.Temperature.Systems; +using Content.Shared.Atmos; +using Content.Shared.Popups; +using Content.Shared.Doors.Components; +using Content.Shared.Doors.Systems; +using Content.Shared.Heretic; +using Content.Shared.Inventory; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; +using Robust.Shared.Timing; +using System.Linq; +using Content.Shared.Humanoid; +using Content.Server.Temperature.Components; +using Content.Server.Body.Components; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticCombatMarkSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + [Dependency] private readonly SharedDoorSystem _door = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly TemperatureSystem _temperature = default!; + [Dependency] private readonly BloodstreamSystem _blood = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly ProtectiveBladeSystem _pbs = default!; + + public bool ApplyMarkEffect(EntityUid target, string? path, EntityUid user) + { + if (string.IsNullOrWhiteSpace(path)) + return false; + + switch (path) + { + case "Ash": + // gives fire stacks + _flammable.AdjustFireStacks(target, 5, ignite: true); + break; + + case "Blade": + _pbs.AddProtectiveBlade(user); + break; + + case "Flesh": + if (TryComp(target, out var blood)) + { + _blood.TryModifyBleedAmount(target, 5f, blood); + _blood.SpillAllSolutions(target, blood); + } + break; + + case "Lock": + // bolts nearby doors + var lookup = _lookup.GetEntitiesInRange(target, 5f); + foreach (var door in lookup) + { + if (!TryComp(door, out var doorComp)) + continue; + _door.SetBoltsDown((door, doorComp), true); + } + _audio.PlayPvs(new SoundPathSpecifier("/Audio/Magic/knock.ogg"), target); + break; + + case "Rust": + // TODO: add item damage, for now just break a random item + if (!TryComp(target, out var inv)) + break; + + var contrandom = _random.Next(0, inv.Containers.Length - 1); + if (contrandom < 0) + break; + var cont = inv.Containers[contrandom]; + + var itemrandom = _random.Next(0, cont.ContainedEntities.Count - 1); + if (itemrandom < 0) + break; + var item = cont.ContainedEntities[itemrandom]; + + _popup.PopupEntity(Loc.GetString("heretic-rust-mark-itembreak", ("name", Name(item))), target, PopupType.LargeCaution); + QueueDel(item); + break; + + case "Void": + // set target's temperature to -40C + // is really OP with the new temperature slowing thing :godo: + if (TryComp(target, out var temp)) + _temperature.ForceChangeTemperature(target, temp.CurrentTemperature - 100f, temp); + break; + + default: + return false; + } + + // transfers the mark to the next nearby person + var look = _lookup.GetEntitiesInRange(target, 2.5f); + if (look.Count != 0) + { + var lookent = look.ToArray()[0]; + if (HasComp(lookent) + && !HasComp(lookent)) + { + var markComp = EnsureComp(lookent); + markComp.Path = path; + } + } + + return true; + } + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStart); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + if (!_timing.IsFirstTimePredicted) + return; + + foreach (var comp in EntityQuery()) + { + if (_timing.CurTime > comp.Timer) + RemComp(comp.Owner, comp); + } + } + + private void OnStart(Entity ent, ref ComponentStartup args) + { + if (ent.Comp.Timer == TimeSpan.Zero) + ent.Comp.Timer = _timing.CurTime + TimeSpan.FromSeconds(ent.Comp.DisappearTime); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticKnowledgeSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticKnowledgeSystem.cs new file mode 100644 index 00000000000..e9557b4c81f --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticKnowledgeSystem.cs @@ -0,0 +1,76 @@ +using Content.Shared.Actions; +using Content.Shared.Heretic.Prototypes; +using Content.Shared.Heretic; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; +using Content.Shared._CorvaxNext.Heretic.Components; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticKnowledgeSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly SharedActionsSystem _action = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly HereticRitualSystem _ritual = default!; + + public HereticKnowledgePrototype GetKnowledge(ProtoId id) + => _proto.Index(id); + + public void AddKnowledge(EntityUid uid, HereticComponent comp, ProtoId id, bool silent = true) + { + var data = GetKnowledge(id); + + if (data.Event != null) + RaiseLocalEvent(uid, (object) data.Event, true); + + if (data.ActionPrototypes != null && data.ActionPrototypes.Count > 0) + foreach (var act in data.ActionPrototypes) + _action.AddAction(uid, act); + + if (data.RitualPrototypes != null && data.RitualPrototypes.Count > 0) + foreach (var ritual in data.RitualPrototypes) + comp.KnownRituals.Add(_ritual.GetRitual(ritual)); + + Dirty(uid, comp); + + // set path if out heretic doesn't have it, or if it's different from whatever he has atm + if (string.IsNullOrWhiteSpace(comp.CurrentPath)) + { + if (!data.SideKnowledge && comp.CurrentPath != data.Path) + comp.CurrentPath = data.Path; + } + + // make sure we only progress when buying current path knowledge + if (data.Stage > comp.PathStage && data.Path == comp.CurrentPath) + comp.PathStage = data.Stage; + + if (!silent) + _popup.PopupEntity(Loc.GetString("heretic-knowledge-gain"), uid, uid); + } + public void RemoveKnowledge(EntityUid uid, HereticComponent comp, ProtoId id, bool silent = false) + { + var data = GetKnowledge(id); + + if (data.ActionPrototypes != null && data.ActionPrototypes.Count > 0) + { + foreach (var act in data.ActionPrototypes) + { + var actionName = (EntityPrototype) _proto.Index(typeof(EntityPrototype), act); + // jesus christ. + foreach (var action in _action.GetActions(uid)) + if (Name(action.Id) == actionName.Name) + _action.RemoveAction(action.Id); + } + } + + if (data.RitualPrototypes != null && data.RitualPrototypes.Count > 0) + foreach (var ritual in data.RitualPrototypes) + comp.KnownRituals.Remove(_ritual.GetRitual(ritual)); + + Dirty(uid, comp); + + if (!silent) + _popup.PopupEntity(Loc.GetString("heretic-knowledge-loss"), uid, uid); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticMagicItemSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticMagicItemSystem.cs new file mode 100644 index 00000000000..cda28da747c --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticMagicItemSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Examine; +using Content.Shared.Hands; +using Content.Shared.Heretic; +using Content.Shared.Inventory; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticMagicItemSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCheckMagicItem); + SubscribeLocalEvent>(OnCheckMagicItem); + SubscribeLocalEvent>(OnCheckMagicItem); + SubscribeLocalEvent(OnMagicItemExamine); + } + + private void OnCheckMagicItem(Entity ent, ref CheckMagicItemEvent args) + => args.Handled = true; + private void OnCheckMagicItem(Entity ent, ref HeldRelayedEvent args) + => args.Args.Handled = true; + private void OnCheckMagicItem(Entity ent, ref InventoryRelayedEvent args) + => args.Args.Handled = true; + + private void OnMagicItemExamine(Entity ent, ref ExaminedEvent args) + { + if (!HasComp(args.Examiner)) + return; + + args.PushMarkup(Loc.GetString("heretic-magicitem-examine")); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticRitualSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticRitualSystem.cs new file mode 100644 index 00000000000..74310b117dd --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticRitualSystem.cs @@ -0,0 +1,218 @@ +using Content.Server.Heretic.Components; +using Content.Shared.Heretic.Prototypes; +using Content.Shared.Heretic; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Tag; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using System.Text; +using System.Linq; +using Robust.Shared.Serialization.Manager; +using Content.Shared.Examine; +using Content.Shared._CorvaxNext.Heretic.Components; +using Robust.Shared.Containers; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticRitualSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly ISerializationManager _series = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly HereticKnowledgeSystem _knowledge = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + + public SoundSpecifier RitualSuccessSound = new SoundPathSpecifier("/Audio/_CorvaxNext/Heretic/castsummon.ogg"); + + public HereticRitualPrototype GetRitual(ProtoId? id) + { + if (id == null) throw new ArgumentNullException(); + return _proto.Index(id); + } + + /// + /// Try to perform a selected ritual + /// + /// If the ritual succeeded or not + public bool TryDoRitual(EntityUid performer, EntityUid platform, ProtoId ritualId) + { + // here i'm introducing locals for basically everything + // because if i access stuff directly shit is bound to break. + // please don't access stuff directly from the prototypes or else shit will break. + // regards + + if (!TryComp(performer, out var hereticComp)) + return false; + + var rit = _series.CreateCopy((HereticRitualPrototype) GetRitual(ritualId).Clone(), notNullableOverride: true); + var lookup = _lookup.GetEntitiesInRange(platform, .75f); + + var missingList = new List(); + var toDelete = new List(); + + // check for all conditions + // this is god awful but it is that it is + var behaviors = rit.CustomBehaviors ?? new(); + var requiredTags = rit.RequiredTags?.ToDictionary(e => e.Key, e => e.Value) ?? new(); + + foreach (var behavior in behaviors) + { + var ritData = new RitualData(performer, platform, ritualId, EntityManager); + + if (!behavior.Execute(ritData, out var missingStr)) + { + if (missingStr != null) + _popup.PopupEntity(missingStr, platform, performer); + return false; + } + } + + foreach (var look in lookup) + { + // check for matching tags + foreach (var tag in requiredTags) + { + if (!TryComp(look, out var tags) // no tags? + || _container.IsEntityInContainer(look)) // using your own eyes for amber focus? + continue; + + var ltags = tags.Tags; + + if (ltags.Contains(tag.Key)) + { + requiredTags[tag.Key] -= 1; + + // prevent deletion of more items than needed + if (requiredTags[tag.Key] >= 0) + toDelete.Add(look); + } + } + } + + // add missing tags + foreach (var tag in requiredTags) + if (tag.Value > 0) + missingList.Add(tag.Key); + + // are we missing anything? + if (missingList.Count > 0) + { + // we are! notify the performer about that! + var sb = new StringBuilder(); + for (int i = 0; i < missingList.Count; i++) + { + // makes a nice, list, of, missing, items. + if (i != missingList.Count - 1) + sb.Append($"{missingList[i]}, "); + else sb.Append(missingList[i]); + } + + _popup.PopupEntity(Loc.GetString("heretic-ritual-fail-items", ("itemlist", sb.ToString())), platform, performer); + return false; + } + + // yay! ritual successfull! + + // reset fields to their initial values + // BECAUSE FOR SOME REASON IT DOESN'T FUCKING WORK OTHERWISE!!! + + // finalize all of the custom ones + foreach (var behavior in behaviors) + { + var ritData = new RitualData(performer, platform, ritualId, EntityManager); + behavior.Finalize(ritData); + } + + // ya get some, ya lose some + foreach (var ent in toDelete) + QueueDel(ent); + + // add stuff + var output = rit.Output ?? new(); + foreach (var ent in output.Keys) + for (int i = 0; i < output[ent]; i++) + Spawn(ent, Transform(platform).Coordinates); + + if (rit.OutputEvent != null) + RaiseLocalEvent(performer, rit.OutputEvent, true); + + if (rit.OutputKnowledge != null) + _knowledge.AddKnowledge(performer, hereticComp, (ProtoId) rit.OutputKnowledge); + + return true; + } + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnRitualChosenMessage); + } + + private void OnInteract(Entity ent, ref InteractHandEvent args) + { + if (!TryComp(args.User, out var heretic)) + return; + + if (heretic.KnownRituals.Count == 0) + { + _popup.PopupEntity(Loc.GetString("heretic-ritual-norituals"), args.User, args.User); + return; + } + + _uiSystem.OpenUi(ent.Owner, HereticRitualRuneUiKey.Key, args.User); + } + + private void OnRitualChosenMessage(Entity ent, ref HereticRitualMessage args) + { + var user = args.Actor; + + if (!TryComp(user, out var heretic)) + return; + + heretic.ChosenRitual = args.ProtoId; + + var ritualName = Loc.GetString(GetRitual(heretic.ChosenRitual).LocName); + _popup.PopupEntity(Loc.GetString("heretic-ritual-switch", ("name", ritualName)), user, user); + } + + private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + if (!TryComp(args.User, out var heretic)) + return; + + if (!TryComp(args.Used, out var grasp)) + return; + + if (heretic.ChosenRitual == null) + { + _popup.PopupEntity(Loc.GetString("heretic-ritual-noritual"), args.User, args.User); + return; + } + + if (!TryDoRitual(args.User, ent, (ProtoId) heretic.ChosenRitual)) + return; + + _audio.PlayPvs(RitualSuccessSound, ent, AudioParams.Default.WithVolume(-3f)); + _popup.PopupEntity(Loc.GetString("heretic-ritual-success"), ent, args.User); + Spawn("HereticRuneRitualAnimation", Transform(ent).Coordinates); + } + + private void OnExamine(Entity ent, ref ExaminedEvent args) + { + if (!TryComp(args.Examiner, out var h)) + return; + + var ritual = h.ChosenRitual != null ? GetRitual(h.ChosenRitual).LocName : null; + var name = ritual != null ? Loc.GetString(ritual) : "None"; + args.PushMarkup(Loc.GetString("heretic-ritualrune-examine", ("rit", name))); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticSystem.cs new file mode 100644 index 00000000000..2561704ad4a --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/HereticSystem.cs @@ -0,0 +1,163 @@ +using Content.Server.Objectives.Components; +using Content.Server.Store.Systems; +using Content.Shared.FixedPoint; +using Content.Shared.Heretic; +using Content.Shared.Mind; +using Content.Shared.Store.Components; +using Content.Shared.Heretic.Prototypes; +using Content.Server.Chat.Systems; +using Robust.Shared.Audio; +using Content.Server.Heretic.Components; +using Content.Server.Antag; +using Robust.Shared.Random; +using System.Linq; +using Content.Shared.Humanoid; +using Robust.Server.Player; +using Content.Server.Revolutionary.Components; +using Content.Shared.Random.Helpers; +using Robust.Shared.Prototypes; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly StoreSystem _store = default!; + [Dependency] private readonly HereticKnowledgeSystem _knowledge = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly SharedEyeSystem _eye = default!; + [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly IRobustRandom _rand = default!; + [Dependency] private readonly IPlayerManager _playerMan = default!; + + private float _timer = 0f; + private float _passivePointCooldown = 20f * 60f; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCompInit); + + SubscribeLocalEvent(OnUpdateTargets); + SubscribeLocalEvent(OnRerollTargets); + SubscribeLocalEvent(OnAscension); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + _timer += frameTime; + + if (_timer < _passivePointCooldown) + return; + + _timer = 0f; + + foreach (var heretic in EntityQuery()) + { + // passive point gain every 20 minutes + UpdateKnowledge(heretic.Owner, heretic, 1f); + } + } + + public void UpdateKnowledge(EntityUid uid, HereticComponent comp, float amount) + { + if (TryComp(uid, out var store)) + { + _store.TryAddCurrency(new Dictionary { { "KnowledgePoint", amount } }, uid, store); + _store.UpdateUserInterface(uid, uid, store); + } + + if (_mind.TryGetMind(uid, out var mindId, out var mind)) + if (_mind.TryGetObjectiveComp(mindId, out var objective, mind)) + objective.Researched += amount; + } + + private void OnCompInit(Entity ent, ref ComponentInit args) + { + // add influence layer + if (TryComp(ent, out var eye)) + _eye.SetVisibilityMask(ent, eye.VisibilityMask | EldritchInfluenceComponent.LayerMask); + + foreach (var knowledge in ent.Comp.BaseKnowledge) + _knowledge.AddKnowledge(ent, ent.Comp, knowledge); + + RaiseLocalEvent(ent, new EventHereticRerollTargets()); + } + + #region Internal events (target reroll, ascension, etc.) + + private void OnUpdateTargets(Entity ent, ref EventHereticUpdateTargets args) + { + ent.Comp.SacrificeTargets = ent.Comp.SacrificeTargets + .Where(target => TryGetEntity(target, out var tent) && Exists(tent)) + .ToList(); + Dirty(ent); // update client + } + + private void OnRerollTargets(Entity ent, ref EventHereticRerollTargets args) + { + // welcome to my linq smorgasbord of doom + // have fun figuring that out + + var targets = _antag.GetAliveConnectedPlayers(_playerMan.Sessions) + .Where(ics => ics.AttachedEntity.HasValue && HasComp(ics.AttachedEntity)); + + var eligibleTargets = new List(); + foreach (var target in targets) + eligibleTargets.Add(target.AttachedEntity!.Value); // it can't be null because see .Where(HasValue) + + // no heretics or other baboons + eligibleTargets = eligibleTargets.Where(t => !HasComp(t) && !HasComp(t)).ToList(); + + var pickedTargets = new List(); + + var predicates = new List>(); + + // pick one command staff + predicates.Add(t => HasComp(t)); + + // add more predicates here + + foreach (var predicate in predicates) + { + var list = eligibleTargets.Where(predicate).ToList(); + + if (list.Count == 0) + continue; + + // pick and take + var picked = _rand.PickAndTake(list); + pickedTargets.Add(picked); + } + + // add whatever more until satisfied + for (int i = 0; i <= ent.Comp.MaxTargets - pickedTargets.Count; i++) + if (eligibleTargets.Count > 0) + pickedTargets.Add(_rand.PickAndTake(eligibleTargets)); + + // leave only unique entityuids + pickedTargets = pickedTargets.Distinct().ToList(); + + ent.Comp.SacrificeTargets = pickedTargets.ConvertAll(t => GetNetEntity(t)).ToList(); + Dirty(ent); // update client + } + + // notify the crew of how good the person is and play the cool sound :godo: + private void OnAscension(Entity ent, ref EventHereticAscension args) + { + ent.Comp.Ascended = true; + + // how??? + if (ent.Comp.CurrentPath == null) + return; + + var pathLoc = ent.Comp.CurrentPath!.ToLower(); + var ascendSound = new SoundPathSpecifier($"/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_{pathLoc}.ogg"); + _chat.DispatchGlobalAnnouncement(Loc.GetString($"heretic-ascension-{pathLoc}"), Name(ent), true, ascendSound, Color.Pink); + } + + #endregion +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/MansusGraspSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/MansusGraspSystem.cs new file mode 100644 index 00000000000..ecaa984f2b4 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/MansusGraspSystem.cs @@ -0,0 +1,255 @@ +using Content.Server.Atmos.Commands; +using Content.Server.Chat.Systems; +using Content.Server.EntityEffects.Effects.StatusEffects; +using Content.Server.Hands.Systems; +using Content.Server.Heretic.Components; +using Content.Server.Speech.EntitySystems; +using Content.Server.Temperature.Components; +using Content.Server.Temperature.Systems; +using Content.Shared._CorvaxNext.Standing; +using Content.Shared.Damage; +using Content.Shared.Damage.Systems; +using Content.Shared.DoAfter; +using Content.Shared.Doors.Components; +using Content.Shared.Doors.Systems; +using Content.Shared.Examine; +using Content.Shared.Eye.Blinding.Systems; +using Content.Shared.Hands; +using Content.Shared.Hands.Components; +using Content.Shared.Heretic; +using Content.Shared.Interaction; +using Content.Shared.Item; +using Content.Shared.Mobs.Components; +using Content.Shared.Silicons.Borgs.Components; +using Content.Shared.Speech.Muting; +using Content.Shared.StatusEffect; +using Content.Shared.Stunnable; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class MansusGraspSystem : EntitySystem +{ + [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly RatvarianLanguageSystem _language = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedDoorSystem _door = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + [Dependency] private readonly DamageableSystem _damage = default!; + [Dependency] private readonly TemperatureSystem _temperature = default!; + [Dependency] private readonly HandsSystem _hands = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnRitualRuneDoAfter); + + SubscribeLocalEvent(OnInfusedExamine); + SubscribeLocalEvent(OnInfusedInteract); + SubscribeLocalEvent(OnInfusedMeleeHit); + // todo add more mansus infused item interactions + } + + private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) + { + if (!args.CanReach) + return; + + if (args.Target == null || args.Target == args.User) + return; + + if (!TryComp(args.User, out var hereticComp)) + { + QueueDel(ent); + return; + } + + var target = (EntityUid) args.Target; + + if ((TryComp(args.Target, out var th) && th.CurrentPath == ent.Comp.Path)) + return; + + if (HasComp(target)) + { + _chat.TrySendInGameICMessage(args.User, Loc.GetString("heretic-speech-mansusgrasp"), InGameICChatType.Speak, false); + _audio.PlayPvs(new SoundPathSpecifier("/Audio/Items/welder.ogg"), target); + _stun.TryKnockdown(target, TimeSpan.FromSeconds(3f), true); + _stamina.TakeStaminaDamage(target, 80f); + _language.DoRatvarian(target, TimeSpan.FromSeconds(10f), true); + } + + // upgraded grasp + if (hereticComp.CurrentPath != null) + { + if (hereticComp.PathStage >= 2) + ApplyGraspEffect(args.User, target, hereticComp.CurrentPath!); + + if (hereticComp.PathStage >= 4 && HasComp(target)) + { + var markComp = EnsureComp(target); + markComp.Path = hereticComp.CurrentPath; + } + } + + hereticComp.MansusGraspActive = false; + QueueDel(ent); + } + + private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) + { + var tags = ent.Comp.Tags; + + if (!args.CanReach + || !args.ClickLocation.IsValid(EntityManager) + || !TryComp(args.User, out var heretic) // not a heretic - how??? + || !heretic.MansusGraspActive // no grasp - not special + || HasComp(args.User) // prevent rune shittery + || !tags.Contains("Write") || !tags.Contains("Pen")) // not a pen + return; + + // remove our rune if clicked + if (args.Target != null && HasComp(args.Target)) + { + // todo: add more fluff + QueueDel(args.Target); + return; + } + + // spawn our rune + var rune = Spawn("HereticRuneRitualDrawAnimation", args.ClickLocation); + var dargs = new DoAfterArgs(EntityManager, args.User, 14f, new DrawRitualRuneDoAfterEvent(rune, args.ClickLocation), args.User) + { + BreakOnDamage = true, + BreakOnHandChange = true, + BreakOnMove = true, + CancelDuplicate = false, + }; + _doAfter.TryStartDoAfter(dargs); + } + private void OnRitualRuneDoAfter(Entity ent, ref DrawRitualRuneDoAfterEvent ev) + { + // delete the animation rune regardless + QueueDel(ev.RitualRune); + + if (!ev.Cancelled) + Spawn("HereticRuneRitual", ev.Coords); + } + + public void ApplyGraspEffect(EntityUid performer, EntityUid target, string path) + { + if (!TryComp(performer, out var heretic)) + return; + + switch (path) + { + case "Ash": + { + var timeSpan = TimeSpan.FromSeconds(5f); + _statusEffect.TryAddStatusEffect(target, TemporaryBlindnessSystem.BlindingStatusEffect, timeSpan, false, TemporaryBlindnessSystem.BlindingStatusEffect); + break; + } + + case "Blade": + { + if (heretic.PathStage >= 7 && HasComp(target)) + { + // empowering blades and shit + var infusion = EnsureComp(target); + infusion.AvailableCharges = infusion.MaxCharges; + break; + } + + // ultra stun if the person is looking away or laying down + var degrees = Transform(target).LocalRotation.Degrees - Transform(performer).LocalRotation.Degrees; + if (HasComp(target) // laying down + || (degrees >= 160 && degrees <= 210)) // looking back + _stamina.TakeStaminaDamage(target, 110f, immediate: true); + break; + } + + case "Lock": + { + if (!TryComp(target, out var door)) + break; + + if (TryComp(target, out var doorBolt)) + _door.SetBoltsDown((target, doorBolt), false); + + _door.StartOpening(target, door); + _audio.PlayPvs(new SoundPathSpecifier("/Audio/_CorvaxNext/Heretic/hereticknock.ogg"), target); + break; + } + + case "Flesh": + { + if (TryComp(target, out var mobState) && mobState.CurrentState == Shared.Mobs.MobState.Dead) + { + var ghoul = EnsureComp(target); + ghoul.BoundHeretic = performer; + } + break; + } + + case "Void": + { + if (TryComp(target, out var temp)) + _temperature.ForceChangeTemperature(target, temp.CurrentTemperature - 20f, temp); + _statusEffect.TryAddStatusEffect(target, "Muted", TimeSpan.FromSeconds(8), false); + break; + } + + default: + return; + } + } + + #region Infused items + + private void OnInfusedExamine(Entity ent, ref ExaminedEvent args) + { + args.PushMarkup(Loc.GetString("mansus-infused-item-examine")); + } + private void OnInfusedInteract(Entity ent, ref InteractHandEvent args) + { + var target = args.User; + + if (HasComp(target) || HasComp(target)) + return; + + if (HasComp(target)) + { + _audio.PlayPvs(new SoundPathSpecifier("/Audio/Items/welder.ogg"), target); + _stun.TryKnockdown(target, TimeSpan.FromSeconds(3f), true); + _stamina.TakeStaminaDamage(target, 80f); + _language.DoRatvarian(target, TimeSpan.FromSeconds(10f), true); + } + + if (TryComp(target, out var hands)) + _hands.TryDrop(target, Transform(target).Coordinates, handsComp: hands); + + SpendInfusionCharges(ent, charges: ent.Comp.MaxCharges); // spend all because RCHTHTRTH + } + private void OnInfusedMeleeHit(Entity ent, ref MeleeHitEvent args) + { + args.BonusDamage += args.BaseDamage; // double it. + SpendInfusionCharges(ent); + } + + private void SpendInfusionCharges(Entity ent, float charges = -1) + { + ent.Comp.AvailableCharges -= 1; + if (ent.Comp.AvailableCharges <= 0) + RemComp(ent); + } + + #endregion +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/AristocratSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/AristocratSystem.cs new file mode 100644 index 00000000000..578d4634b40 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/AristocratSystem.cs @@ -0,0 +1,122 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Heretic.Components.PathSpecific; +using Content.Server.Temperature.Components; +using Content.Server.Temperature.Systems; +using Content.Shared.Heretic; +using Content.Shared.Maps; +using Content.Shared.Speech.Muting; +using Content.Shared.StatusEffect; +using Content.Shared.Tag; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using System.Linq; +using System.Numerics; + +namespace Content.Server.Heretic.EntitySystems.PathSpecific; + +// void path heretic exclusive +public sealed partial class AristocratSystem : EntitySystem +{ + [Dependency] private readonly TileSystem _tile = default!; + [Dependency] private readonly IRobustRandom _rand = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + [Dependency] private readonly AtmosphereSystem _atmos = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly TemperatureSystem _temp = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + + private string _snowWallPrototype = "WallSnowCobblebrick"; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + while (EntityQueryEnumerator().MoveNext(out var uid, out var aristocrat)) + { + if (!uid.IsValid()) + continue; + + aristocrat.UpdateTimer += frameTime; + + if (aristocrat.UpdateTimer >= aristocrat.UpdateDelay) + { + Cycle((uid, aristocrat)); + aristocrat.UpdateTimer = 0; + } + } + } + + private void Cycle(Entity ent) + { + SpawnTiles(ent); + + var mix = _atmos.GetTileMixture((ent, Transform(ent))); + if (mix != null) + mix.Temperature -= 50f; + + // replace certain things with their winter analogue + var lookup = _lookup.GetEntitiesInRange(Transform(ent).Coordinates, ent.Comp.Range); + foreach (var look in lookup) + { + if (HasComp(look) || HasComp(look)) + continue; + + if (TryComp(look, out var temp)) + _temp.ChangeHeat(look, -200f, true, temp); + + _statusEffect.TryAddStatusEffect(look, "Muted", TimeSpan.FromSeconds(5), true); + + if (TryComp(look, out var tag)) + { + var tags = tag.Tags; + + // replace walls with snow ones + if (_rand.Prob(.45f) && tags.Contains("Wall") + && Prototype(look) != null && Prototype(look)!.ID != _snowWallPrototype) + { + Spawn(_snowWallPrototype, Transform(look).Coordinates); + QueueDel(look); + } + } + } + } + + private void SpawnTiles(Entity ent) + { + var xform = Transform(ent); + + if (!TryComp(xform.GridUid, out var grid)) + return; + + var pos = xform.Coordinates.Position; + var box = new Box2(pos + new Vector2(-ent.Comp.Range, -ent.Comp.Range), pos + new Vector2(ent.Comp.Range, ent.Comp.Range)); + var tilerefs = grid.GetLocalTilesIntersecting(box).ToList(); + + if (tilerefs.Count == 0) + return; + + var tiles = new List(); + var tiles2 = new List(); + foreach (var tile in tilerefs) + { + if (_rand.Prob(.45f)) + tiles.Add(tile); + + if (_rand.Prob(.05f)) + tiles2.Add(tile); + } + + foreach (var tileref in tiles) + { + var tile = _prot.Index("FloorAstroSnow"); + _tile.ReplaceTile(tileref, tile); + } + + foreach (var tileref in tiles2) + { + // todo add more tile variety + } + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/ChampionStanceSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/ChampionStanceSystem.cs new file mode 100644 index 00000000000..b66c1761443 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/ChampionStanceSystem.cs @@ -0,0 +1,57 @@ +using Content.Server.Heretic.Components.PathSpecific; +using Content.Shared._CorvaxNext.Surgery; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.Damage.Events; + +namespace Content.Server.Heretic.EntitySystems.PathSpecific; + +public sealed partial class ChampionStanceSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDamageModify); + SubscribeLocalEvent(OnTakeStaminaDamage); + + // if anyone is reading through and does not have EE newmed you can remove these handlers + SubscribeLocalEvent(OnBodyPartAttached); + SubscribeLocalEvent(OnBodyPartRemoved); + } + + private bool Condition(Entity ent) + { + if (!TryComp(ent, out var dmg) + || dmg.TotalDamage < 50f) // taken that humanoids have 100 damage before critting + return false; + return true; + } + + private void OnDamageModify(Entity ent, ref DamageModifyEvent args) + { + if (!Condition(ent)) + return; + + args.Damage = args.OriginalDamage / 2f; + } + + private void OnTakeStaminaDamage(Entity ent, ref TakeStaminaDamageEvent args) + { + if (!Condition(ent)) + return; + + args.Multiplier /= 2.5f; + } + + private void OnBodyPartAttached(Entity ent, ref BodyPartAttachedEvent args) + { + // can't touch this + args.Part.Comp.CanSever = false; + } + private void OnBodyPartRemoved(Entity ent, ref BodyPartRemovedEvent args) + { + // can touch this + args.Part.Comp.CanSever = true; + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/RiposteeSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/RiposteeSystem.cs new file mode 100644 index 00000000000..9a9e58e69da --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/RiposteeSystem.cs @@ -0,0 +1,61 @@ +using Content.Server.Hands.Systems; +using Content.Server.Heretic.Components.PathSpecific; +using Content.Server.Popups; +using Content.Shared.Damage; +using Content.Shared.Weapons.Melee; + +namespace Content.Server.Heretic.EntitySystems.PathSpecific; + +public sealed partial class RiposteeSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _dmg = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBeforeDamageChange); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var eqe = EntityQueryEnumerator(); + while (eqe.MoveNext(out var uid, out var rip)) + { + if (!uid.IsValid()) + continue; + + if (rip.CanRiposte) + continue; + + rip.Timer -= frameTime; + + if (rip.Timer <= 0) + { + rip.Timer = rip.Cooldown; + + rip.CanRiposte = true; + _popup.PopupEntity(Loc.GetString("heretic-riposte-available"), uid, uid); + } + } + } + + private void OnBeforeDamageChange(Entity ent, ref BeforeDamageChangedEvent args) + { + if (!args.Damage.AnyPositive() // is healing + || !ent.Comp.CanRiposte // can't riposte + || !HasComp(_hands.GetActiveItem(ent.Owner))) // not holding a melee weapon + return; + + args.Cancelled = true; + if (HasComp(args.Origin)) + _dmg.TryChangeDamage(args.Origin, args.Damage, true); // back to sender + + ent.Comp.CanRiposte = false; + _popup.PopupEntity(Loc.GetString("heretic-riposte-used"), ent); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/SilverMaelstromSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/SilverMaelstromSystem.cs new file mode 100644 index 00000000000..50f2cbcf393 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/PathSpecific/SilverMaelstromSystem.cs @@ -0,0 +1,46 @@ +using Content.Server.Heretic.Components.PathSpecific; + +namespace Content.Server.Heretic.EntitySystems.PathSpecific; + +public sealed partial class SilverMaelstromSystem : EntitySystem +{ + [Dependency] private readonly ProtectiveBladeSystem _pblade = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBladeUsed); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var eqe = EntityQueryEnumerator(); + while (eqe.MoveNext(out var uid, out var smc)) + { + if (!uid.IsValid()) + continue; + + smc.RespawnTimer -= frameTime; + + if (smc.RespawnTimer <= 0) + { + smc.RespawnTimer = smc.RespawnCooldown; + + if (smc.ActiveBlades < smc.MaxBlades) + { + _pblade.AddProtectiveBlade(uid); + smc.ActiveBlades += 1; + } + } + } + } + + private void OnBladeUsed(Entity ent, ref ProtectiveBladeUsedEvent args) + { + // using max since ascended heretic can spawn more blades with furious steel action + ent.Comp.ActiveBlades = Math.Max(ent.Comp.ActiveBlades - 1, 0); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/EntitySystems/ProtectiveBladeSystem.cs b/Content.Server/_CorvaxNext/Heretic/EntitySystems/ProtectiveBladeSystem.cs new file mode 100644 index 00000000000..09cac984ed6 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/EntitySystems/ProtectiveBladeSystem.cs @@ -0,0 +1,166 @@ +using Content.Server.Heretic.Components; +using Content.Server.Weapons.Ranged.Systems; +using Content.Shared.Damage; +using Content.Shared.Follower; +using Content.Shared.Follower.Components; +using Content.Shared.Heretic; +using Content.Shared.Interaction; +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; +using System.Linq; +using System.Numerics; + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class ProtectiveBladeUsedEvent : EntityEventArgs +{ + public Entity? Used = null; +} + +public sealed partial class ProtectiveBladeSystem : EntitySystem +{ + [Dependency] private readonly FollowerSystem _follow = default!; + [Dependency] private readonly GunSystem _gun = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + + [ValidatePrototypeId] public const string BladePrototype = "HereticProtectiveBlade"; + [ValidatePrototypeId] public const string BladeProjecilePrototype = "HereticProtectiveBladeProjectile"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnTakeDamage); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var eqe = EntityQueryEnumerator(); + while (eqe.MoveNext(out var uid, out var pbc)) + { + pbc.Timer -= frameTime; + + if (pbc.Timer <= 0) + { + RemoveProtectiveBlade((uid, pbc)); + } + } + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + ent.Comp.Timer = ent.Comp.Lifetime; + } + + private void OnTakeDamage(Entity ent, ref BeforeDamageChangedEvent args) + { + if (!args.Damage.AnyPositive()) + return; + + var blades = GetBlades(ent); + if (blades.Count == 0) + return; + + var blade = blades[0]; + RemoveProtectiveBlade(blade); + + args.Cancelled = true; + } + + private void OnInteract(Entity ent, ref InteractHandEvent args) + { + if (!TryComp(ent, out var follower) || follower.Following != args.User) + return; + + ThrowProtectiveBlade(args.User, ent); + } + + public List> GetBlades(EntityUid ent) + { + var blades = new List>(); + + if (!TryComp(ent, out var followed)) + return blades; + + var linq = followed.Following + .Where(f => HasComp(f)) + .ToList().ConvertAll(x => (x, Comp(x))); + + foreach (var blade in linq) + blades.Add((blade.x, blade.Item2)); + + return blades; + } + private EntityUid? GetNearestTarget(EntityUid origin, float range = 10f) + { + var oxform = Transform(origin); + + var lookup = _lookup.GetEntitiesInRange(origin, range) + .Where(e => e != origin && TryComp(e, out _)) + .ToList(); + + float? nearestPoint = null; + EntityUid? ret = null; + foreach (var look in lookup) + { + var distance = (oxform.LocalPosition - Transform(look).LocalPosition).LengthSquared(); + if (nearestPoint == null || distance < nearestPoint) + { + nearestPoint = distance; + ret = look; + } + } + + return ret; + } + + public void AddProtectiveBlade(EntityUid ent) + { + var pblade = Spawn(BladePrototype, Transform(ent).Coordinates); + _follow.StartFollowingEntity(pblade, ent); + + if (TryComp(pblade, out var vorbit)) + { + // test scenario: 4 blades are currently following our heretic. + // making each one somewhat distinct from each other + vorbit.Orbit = GetBlades(ent).Count / 5; + } + } + public void RemoveProtectiveBlade(Entity blade) + { + if (!TryComp(blade, out var follower)) + return; + + var ev = new ProtectiveBladeUsedEvent() { Used = blade }; + RaiseLocalEvent(follower.Following, ev); + + QueueDel(blade); + } + public void ThrowProtectiveBlade(EntityUid origin, Entity pblade, EntityUid? target = null) + { + _follow.StopFollowingEntity(origin, pblade); + + var tgt = target ?? GetNearestTarget(origin); + + var direction = _xform.GetWorldRotation(origin).ToWorldVec(); + + if (tgt != null) + direction = _xform.GetWorldPosition((EntityUid) tgt) - _xform.GetWorldPosition(origin); + + var proj = Spawn(BladeProjecilePrototype, Transform(origin).Coordinates); + _gun.ShootProjectile(proj, direction, Vector2.Zero, origin, origin); + + QueueDel(pblade); + } + public void ThrowProtectiveBlade(EntityUid origin, EntityUid? target = null) + { + var blades = GetBlades(origin); + if (blades.Count > 0) + ThrowProtectiveBlade(origin, blades[0], target); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.AshAscend.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.AshAscend.cs new file mode 100644 index 00000000000..2a7068de2bb --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.AshAscend.cs @@ -0,0 +1,52 @@ +using Content.Server.Atmos.Components; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Heretic.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Server.Heretic.Ritual; + +public sealed partial class RitualAshAscendBehavior : RitualSacrificeBehavior +{ + private List burningUids = new(); + + // check for burning corpses + public override bool Execute(RitualData args, out string? outstr) + { + if (!base.Execute(args, out outstr)) + return false; + + for (int i = 0; i < Max; i++) + { + if (args.EntityManager.TryGetComponent(uids[i], out var flam)) + if (flam.OnFire) + burningUids.Add(uids[i]); + } + + if (burningUids.Count < Min) + { + outstr = Loc.GetString("heretic-ritual-fail-sacrifice-ash"); + return false; + } + + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + for (int i = 0; i < Max; i++) + { + // YES!!! ASH!!! + if (args.EntityManager.TryGetComponent(uids[i], out var dmg)) + { + var prot = (ProtoId) "Burn"; + var dmgtype = _proto.Index(prot); + _damage.TryChangeDamage(uids[i], new DamageSpecifier(dmgtype, 3984f), true); + } + } + + // reset it because blehhh + uids = new(); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.BladeAscend.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.BladeAscend.cs new file mode 100644 index 00000000000..a268e97518a --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.BladeAscend.cs @@ -0,0 +1,38 @@ +using Content.Shared.Body.Part; +using Content.Shared.Body.Systems; +using Content.Shared.Heretic.Prototypes; +using System.Linq; + +namespace Content.Server.Heretic.Ritual; + +public sealed partial class RitualBladeAscendBehavior : RitualSacrificeBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + if (!base.Execute(args, out outstr)) + return false; + + var _body = args.EntityManager.System(); + + var beheadedBodies = new List(); + foreach (var uid in uids) + { + if (_body.GetBodyChildrenOfType(uid, BodyPartType.Head).Count() == 0) + beheadedBodies.Add(uid); + } + + if (beheadedBodies.Count < Min) + { + outstr = Loc.GetString("heretic-ritual-fail-sacrifice-blade"); + return false; + } + + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + base.Finalize(args); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Knowledge.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Knowledge.cs new file mode 100644 index 00000000000..fe34fe851fd --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Knowledge.cs @@ -0,0 +1,94 @@ +using Content.Server.Heretic.EntitySystems; +using Content.Shared.Dataset; +using Content.Shared.Heretic; +using Content.Shared.Heretic.Prototypes; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using System.Text; + +namespace Content.Server.Heretic.Ritual; + +public sealed partial class RitualKnowledgeBehavior : RitualCustomBehavior +{ + // made static so that it doesn't regenerate itself each time + private static Dictionary, int> requiredTags = new(); + private List toDelete = new(); + + private IPrototypeManager _prot = default!; + private IRobustRandom _rand = default!; + private EntityLookupSystem _lookup = default!; + private HereticSystem _heretic = default!; + + [ValidatePrototypeId] + public const string EligibleTagsDataset = "EligibleTags"; + + // this is basically a ripoff from hereticritualsystem + public override bool Execute(RitualData args, out string? outstr) + { + _prot = IoCManager.Resolve(); + _rand = IoCManager.Resolve(); + _lookup = args.EntityManager.System(); + _heretic = args.EntityManager.System(); + + outstr = null; + + // generate new set of tags + if (requiredTags.Count == 0) + for (int i = 0; i < 4; i++) + requiredTags.Add(_rand.Pick(_prot.Index(EligibleTagsDataset).Values), 1); + + var lookup = _lookup.GetEntitiesInRange(args.Platform, .75f); + var missingList = new List(); + + foreach (var look in lookup) + { + foreach (var tag in requiredTags) + { + if (!args.EntityManager.TryGetComponent(look, out var tags)) + continue; + var ltags = tags.Tags; + + if (ltags.Contains(tag.Key)) + { + requiredTags[tag.Key] -= 1; + toDelete.Add(look); + } + } + } + + foreach (var tag in requiredTags) + if (tag.Value > 0) + missingList.Add(tag.Key); + + if (missingList.Count > 0) + { + var sb = new StringBuilder(); + for (int i = 0; i < missingList.Count; i++) + { + if (i != missingList.Count - 1) + sb.Append($"{missingList[i]}, "); + else sb.Append(missingList[i]); + } + + outstr = Loc.GetString("heretic-ritual-fail-items", ("itemlist", sb.ToString())); + return false; + } + + return true; + } + + public override void Finalize(RitualData args) + { + // delete all and reset + foreach (var ent in toDelete) + args.EntityManager.QueueDeleteEntity(ent); + toDelete = new(); + + if (args.EntityManager.TryGetComponent(args.Performer, out var hereticComp)) + _heretic.UpdateKnowledge(args.Performer, hereticComp, 4); + + // reset tags + requiredTags = new(); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.MuteGhoulify.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.MuteGhoulify.cs new file mode 100644 index 00000000000..957cc6f276b --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.MuteGhoulify.cs @@ -0,0 +1,26 @@ +using Content.Shared.Heretic; +using Content.Shared.Heretic.Prototypes; +using Content.Shared.Speech.Muting; + +namespace Content.Server.Heretic.Ritual; + +public sealed partial class RitualMuteGhoulifyBehavior : RitualSacrificeBehavior +{ + public override bool Execute(RitualData args, out string? outstr) + { + return base.Execute(args, out outstr); + } + + public override void Finalize(RitualData args) + { + foreach (var uid in uids) + { + var ghoul = new GhoulComponent() + { + TotalHealth = 125f, + }; + args.EntityManager.AddComponent(uid, ghoul, overwrite: true); + args.EntityManager.EnsureComponent(uid); + } + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs new file mode 100644 index 00000000000..2319f326cd4 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs @@ -0,0 +1,59 @@ +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Fluids.Components; +using Content.Shared.Heretic.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Server.Heretic.Ritual; + +public sealed partial class RitualReagentPuddleBehavior : RitualCustomBehavior +{ + protected EntityLookupSystem _lookup = default!; + + [DataField] public ProtoId? Reagent; + + private List uids = new(); + + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + + if (Reagent == null) + return true; + + _lookup = args.EntityManager.System(); + + var lookup = _lookup.GetEntitiesInRange(args.Platform, .75f); + + foreach (var ent in lookup) + { + if (!args.EntityManager.TryGetComponent(ent, out var puddle)) + continue; + + if (puddle.Solution == null) + continue; + + var soln = puddle.Solution.Value; + + if (!soln.Comp.Solution.ContainsPrototype(Reagent)) + continue; + + uids.Add(ent); + } + + if (uids.Count == 0) + { + outstr = Loc.GetString("heretic-ritual-fail-reagentpuddle", ("reagentname", Reagent!)); + return false; + } + + return true; + } + + public override void Finalize(RitualData args) + { + foreach (var uid in uids) + args.EntityManager.QueueDeleteEntity(uid); + uids = new(); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Sacrifice.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Sacrifice.cs new file mode 100644 index 00000000000..a43b7d61013 --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Sacrifice.cs @@ -0,0 +1,126 @@ +using Content.Shared.Heretic.Prototypes; +using Content.Shared.Mobs.Components; +using Robust.Shared.Prototypes; +using Content.Shared.Humanoid; +using Content.Server.Revolutionary.Components; +using Content.Server.Objectives.Components; +using Content.Shared.Mind; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Heretic; +using Content.Server.Heretic.EntitySystems; + +namespace Content.Server.Heretic.Ritual; + +/// +/// Checks for a nearest dead body, +/// gibs it and gives the heretic knowledge points. +/// +// these classes should be lead out and shot +[Virtual] public partial class RitualSacrificeBehavior : RitualCustomBehavior +{ + /// + /// Minimal amount of corpses. + /// + [DataField] public float Min = 1; + + /// + /// Maximum amount of corpses. + /// + [DataField] public float Max = 1; + + /// + /// Should we count only targets? + /// + [DataField] public bool OnlyTargets = false; + + // this is awful but it works so i'm not complaining + protected SharedMindSystem _mind = default!; + protected HereticSystem _heretic = default!; + protected DamageableSystem _damage = default!; + protected EntityLookupSystem _lookup = default!; + [Dependency] protected IPrototypeManager _proto = default!; + + protected List uids = new(); + + public override bool Execute(RitualData args, out string? outstr) + { + _mind = args.EntityManager.System(); + _heretic = args.EntityManager.System(); + _damage = args.EntityManager.System(); + _lookup = args.EntityManager.System(); + _proto = IoCManager.Resolve(); + + if (!args.EntityManager.TryGetComponent(args.Performer, out var hereticComp)) + { + outstr = string.Empty; + return false; + } + + var lookup = _lookup.GetEntitiesInRange(args.Platform, .75f); + if (lookup.Count == 0 || lookup == null) + { + outstr = Loc.GetString("heretic-ritual-fail-sacrifice"); + return false; + } + + // get all the dead ones + foreach (var look in lookup) + { + if (!args.EntityManager.TryGetComponent(look, out var mobstate) // only mobs + || !args.EntityManager.HasComponent(look) // only humans + || (OnlyTargets && !hereticComp.SacrificeTargets.Contains(args.EntityManager.GetNetEntity(look)))) // only targets + continue; + + if (mobstate.CurrentState == Shared.Mobs.MobState.Dead) + uids.Add(look); + } + + if (uids.Count < Min) + { + outstr = Loc.GetString("heretic-ritual-fail-sacrifice-ineligible"); + return false; + } + + outstr = null; + return true; + } + + public override void Finalize(RitualData args) + { + for (int i = 0; i < Max; i++) + { + var isCommand = args.EntityManager.HasComponent(uids[i]); + var knowledgeGain = isCommand ? 2f : 1f; + + // YES!!! GIB!!! + if (args.EntityManager.TryGetComponent(uids[i], out var dmg)) + { + var prot = (ProtoId) "Brute"; + var dmgtype = _proto.Index(prot); + _damage.TryChangeDamage(uids[i], new DamageSpecifier(dmgtype, 1984f), true); + } + + if (args.EntityManager.TryGetComponent(args.Performer, out var hereticComp)) + _heretic.UpdateKnowledge(args.Performer, hereticComp, knowledgeGain); + + // update objectives + if (_mind.TryGetMind(args.Performer, out var mindId, out var mind)) + { + // this is godawful dogshit. but it works :) + if (_mind.TryFindObjective((mindId, mind), "HereticSacrificeObjective", out var crewObj) + && args.EntityManager.TryGetComponent(crewObj, out var crewObjComp)) + crewObjComp.Sacrificed += 1; + + if (_mind.TryFindObjective((mindId, mind), "HereticSacrificeHeadObjective", out var crewHeadObj) + && args.EntityManager.TryGetComponent(crewHeadObj, out var crewHeadObjComp) + && isCommand) + crewHeadObjComp.Sacrificed += 1; + } + } + + // reset it because it refuses to work otherwise. + uids = new(); + args.EntityManager.EventBus.RaiseLocalEvent(args.Performer, new EventHereticUpdateTargets()); + } +} diff --git a/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Temperature.cs b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Temperature.cs new file mode 100644 index 00000000000..6de59c8e1cf --- /dev/null +++ b/Content.Server/_CorvaxNext/Heretic/Ritual/CustomBehavior.Temperature.cs @@ -0,0 +1,50 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Heretic.Prototypes; + +namespace Content.Server.Heretic.Ritual; + +[Virtual] public sealed partial class RitualTemperatureBehavior : RitualCustomBehavior +{ + /// + /// Min temp in celsius + /// + [DataField] public float MinThreshold = 0f; + + /// + /// Max temp in celsius + /// + [DataField] public float MaxThreshold = float.PositiveInfinity; + + private AtmosphereSystem _atmos = default!; + + public override bool Execute(RitualData args, out string? outstr) + { + outstr = null; + + _atmos = args.EntityManager.System(); + + var mix = _atmos.GetTileMixture(args.Platform); + + if (mix == null || mix.TotalMoles == 0) // just accept space as it is + return true; + + if (mix.Temperature > Atmospherics.T0C + MaxThreshold) + { + outstr = Loc.GetString("heretic-ritual-fail-temperature-hot"); + return false; + } + if (mix.Temperature > Atmospherics.T0C + MinThreshold) + { + outstr = Loc.GetString("heretic-ritual-fail-temperature-cold"); + return false; + } + + return true; + } + + public override void Finalize(RitualData args) + { + // do nothing + } +} diff --git a/Content.Server/_CorvaxNext/Magic/ChainFireballComponent.cs b/Content.Server/_CorvaxNext/Magic/ChainFireballComponent.cs new file mode 100644 index 00000000000..4e35adab883 --- /dev/null +++ b/Content.Server/_CorvaxNext/Magic/ChainFireballComponent.cs @@ -0,0 +1,12 @@ +namespace Content.Server.Magic; + +[RegisterComponent] +public sealed partial class ChainFireballComponent : Component +{ + /// + /// The chance of the ball disappearing (in %) + /// + [DataField] public float DisappearChance = 0.025f; + + public List IgnoredTargets = new(); +} diff --git a/Content.Server/_CorvaxNext/Magic/ChainFireballSystem.cs b/Content.Server/_CorvaxNext/Magic/ChainFireballSystem.cs new file mode 100644 index 00000000000..5909b28a94e --- /dev/null +++ b/Content.Server/_CorvaxNext/Magic/ChainFireballSystem.cs @@ -0,0 +1,91 @@ +using Content.Server.Popups; +using Content.Shared.Projectiles; +using Content.Shared.StatusEffect; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.Magic; + +public sealed partial class ChainFireballSystem : EntitySystem +{ + [Dependency] private readonly SharedGunSystem _gun = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PhysicsSystem _physics = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHit); + } + + private void OnHit(Entity ent, ref ProjectileHitEvent args) + { + if (_random.Prob(ent.Comp.DisappearChance)) + return; + + // spawn new fireball on target + Spawn(args.Target, ent.Comp.IgnoredTargets); + + QueueDel(ent); + } + + public bool Spawn(EntityUid source, List ignoredTargets) + { + var lookup = _lookup.GetEntitiesInRange(source, 5f); + + List mobs = new(); + foreach (var look in lookup) + { + if (ignoredTargets.Contains(look) + || !HasComp(look)) // ignore non mobs + continue; + + mobs.Add(look); + } + if (mobs.Count == 0) + { + _popup.PopupEntity(Loc.GetString("heretic-ability-fail-notarget"), source, source); + return false; + } + + return Spawn(source, mobs[_random.Next(0, mobs.Count - 1)], ignoredTargets); + } + public bool Spawn(EntityUid source, EntityUid target, List ignoredTargets) + { + return SpawnFireball(source, target, ignoredTargets); + } + public bool SpawnFireball(EntityUid uid, EntityUid target, List ignoredTargets) + { + var ball = Spawn("FireballChain", Transform(uid).Coordinates); + + // set ignore list if it wasn't set already + if (TryComp(ball, out var sfc)) + sfc.IgnoredTargets = sfc.IgnoredTargets.Count > 0 ? sfc.IgnoredTargets : ignoredTargets; + + // launch it towards the target + var fromCoords = Transform(uid).Coordinates; + var toCoords = Transform(target).Coordinates; + var userVelocity = _physics.GetMapLinearVelocity(uid); + + // If applicable, this ensures the projectile is parented to grid on spawn, instead of the map. + var fromMap = fromCoords.ToMap(EntityManager, _transform); + var spawnCoords = _mapMan.TryFindGridAt(fromMap, out var gridUid, out _) + ? fromCoords.WithEntityId(gridUid, EntityManager) + : new(_mapMan.GetMapEntityId(fromMap.MapId), fromMap.Position); + + + var direction = toCoords.ToMapPos(EntityManager, _transform) - + spawnCoords.ToMapPos(EntityManager, _transform); + + _gun.ShootProjectile(ball, direction, userVelocity, uid, uid); + + return true; + } +} diff --git a/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodComponent.cs b/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodComponent.cs new file mode 100644 index 00000000000..ef0fefaf377 --- /dev/null +++ b/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.Heretic; +using Robust.Shared.Audio; + +namespace Content.Server.Magic; + +[RegisterComponent] +public sealed partial class ImmovableVoidRodComponent : Component +{ + [DataField] public TimeSpan Lifetime = TimeSpan.FromSeconds(1f); + public float Accumulator = 0f; + [NonSerialized] public Entity? User = null; +} diff --git a/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodSystem.cs b/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodSystem.cs new file mode 100644 index 00000000000..ff23b2fd1b2 --- /dev/null +++ b/Content.Server/_CorvaxNext/Magic/ImmovableVoidRodSystem.cs @@ -0,0 +1,75 @@ +using Content.Server.Heretic.Components; +using Content.Shared.Heretic; +using Content.Shared.Maps; +using Content.Shared.Stunnable; +using Content.Shared.Tag; +using Robust.Shared.Map; +using Robust.Shared.Physics.Events; +using Robust.Shared.Prototypes; +using Robust.Shared.Map.Components; + +namespace Content.Server.Magic; + +public sealed partial class ImmovableVoidRodSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prot = default!; + [Dependency] private readonly IMapManager _map = default!; + [Dependency] private readonly TileSystem _tile = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly IEntityManager _ent = default!; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + // we are deliberately including paused entities. rod hungers for all + foreach (var (rod, trans) in EntityManager.EntityQuery(true)) + { + rod.Accumulator += frameTime; + + if (rod.Accumulator > rod.Lifetime.TotalSeconds) + { + QueueDel(rod.Owner); + return; + } + + if (!_ent.TryGetComponent(trans.GridUid, out var grid)) + continue; + + + + var tileref = grid.GetTileRef(trans.Coordinates); + var tile = _prot.Index("FloorAstroSnow"); + _tile.ReplaceTile(tileref, tile); + } + } + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnCollide); + } + + private void OnCollide(Entity ent, ref StartCollideEvent args) + { + if ((TryComp(args.OtherEntity, out var th) && th.CurrentPath == "Void") + || HasComp(args.OtherEntity)) + return; + + var power = 1f; + if (ent.Comp.User != null && ent.Comp.User.Value.Comp.CurrentPath == "Void") + // ascended void heretic will give 6 SECONDS OF STUN :bluesurprised: + power += ent.Comp.User.Value.Comp.PathStage / 2f; + + _stun.TryParalyze(args.OtherEntity, TimeSpan.FromSeconds(power), false); + + TryComp(args.OtherEntity, out var tag); + var tags = tag?.Tags ?? new(); + + if (tags.Contains("Wall") && Prototype(args.OtherEntity) != null && Prototype(args.OtherEntity)!.ID != "WallSnowCobblebrick") + { + Spawn("WallSnowCobblebrick", Transform(args.OtherEntity).Coordinates); + QueueDel(args.OtherEntity); + } + } +} diff --git a/Content.Server/_CorvaxNext/Objectives/Components/HereticKnowledgeConditionComponent.cs b/Content.Server/_CorvaxNext/Objectives/Components/HereticKnowledgeConditionComponent.cs new file mode 100644 index 00000000000..3904ecbbb6e --- /dev/null +++ b/Content.Server/_CorvaxNext/Objectives/Components/HereticKnowledgeConditionComponent.cs @@ -0,0 +1,10 @@ +using Content.Server.Heretic; +using Content.Server.Objectives.Systems; + +namespace Content.Server.Objectives.Components; + +[RegisterComponent] +public sealed partial class HereticKnowledgeConditionComponent : Component +{ + [DataField] public float Researched = 0f; +} diff --git a/Content.Server/_CorvaxNext/Objectives/Components/HereticSacrificeConditionComponent.cs b/Content.Server/_CorvaxNext/Objectives/Components/HereticSacrificeConditionComponent.cs new file mode 100644 index 00000000000..303ad69a52f --- /dev/null +++ b/Content.Server/_CorvaxNext/Objectives/Components/HereticSacrificeConditionComponent.cs @@ -0,0 +1,14 @@ +using Content.Server.Heretic; +using Content.Server.Objectives.Systems; + +namespace Content.Server.Objectives.Components; + +[RegisterComponent] +public sealed partial class HereticSacrificeConditionComponent : Component +{ + [DataField] public float Sacrificed = 0f; + /// + /// Indicates that a victim should be a head role / command. + /// + [DataField] public bool IsCommand = false; +} diff --git a/Content.Server/_CorvaxNext/Objectives/Components/PickRandomTraitorComponent.cs b/Content.Server/_CorvaxNext/Objectives/Components/PickRandomTraitorComponent.cs new file mode 100644 index 00000000000..86219f113e4 --- /dev/null +++ b/Content.Server/_CorvaxNext/Objectives/Components/PickRandomTraitorComponent.cs @@ -0,0 +1,12 @@ +using Content.Server.Objectives.Components; + +namespace Content.Server._CorvaxNext.Objectives.Components; + +/// +/// Sets the target for to a random traitor +/// If there are no traitors it will fallback to any person. +/// +[RegisterComponent] +public sealed partial class PickRandomTraitorComponent : Component +{ +} diff --git a/Content.Server/_CorvaxNext/Objectives/Components/RandomTraitorTargetComponent.cs b/Content.Server/_CorvaxNext/Objectives/Components/RandomTraitorTargetComponent.cs new file mode 100644 index 00000000000..79e38086927 --- /dev/null +++ b/Content.Server/_CorvaxNext/Objectives/Components/RandomTraitorTargetComponent.cs @@ -0,0 +1,12 @@ +using Content.Server.Objectives.Components; + +namespace Content.Server._CorvaxNext.Objectives.Components; + +/// +/// Sets the target for +/// to protect a player that is targeted to kill by another traitor +/// +[RegisterComponent] +public sealed partial class RandomTraitorTargetComponent : Component +{ +} diff --git a/Content.Server/_CorvaxNext/Objectives/Systems/HereticObjectiveSystem.cs b/Content.Server/_CorvaxNext/Objectives/Systems/HereticObjectiveSystem.cs new file mode 100644 index 00000000000..16caba74515 --- /dev/null +++ b/Content.Server/_CorvaxNext/Objectives/Systems/HereticObjectiveSystem.cs @@ -0,0 +1,33 @@ +using Content.Server._CorvaxNext.Objectives.Components; +using Content.Server.Objectives.Components; +using Content.Shared.Objectives.Components; + +namespace Content.Server.Objectives.Systems; + +public sealed partial class HereticObjectiveSystem : EntitySystem +{ + [Dependency] private readonly NumberObjectiveSystem _number = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetKnowledgeProgress); + SubscribeLocalEvent(OnGetSacrificeProgress); + } + + private void OnGetKnowledgeProgress(Entity ent, ref ObjectiveGetProgressEvent args) + { + var target = _number.GetTarget(ent); + if (target != 0) + args.Progress = MathF.Min(ent.Comp.Researched / target, 1f); + else args.Progress = 1f; + } + private void OnGetSacrificeProgress(Entity ent, ref ObjectiveGetProgressEvent args) + { + var target = _number.GetTarget(ent); + if (target != 0) + args.Progress = MathF.Min(ent.Comp.Sacrificed / target, 1f); + else args.Progress = 1f; + } +} diff --git a/Content.Server/_CorvaxNext/Roles/GhoulRoleComponent.cs b/Content.Server/_CorvaxNext/Roles/GhoulRoleComponent.cs new file mode 100644 index 00000000000..e10b211d49c --- /dev/null +++ b/Content.Server/_CorvaxNext/Roles/GhoulRoleComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Roles; + +namespace Content.Server.Roles; + +[RegisterComponent] +public sealed partial class GhoulRoleComponent : BaseMindRoleComponent +{ +} diff --git a/Content.Server/_CorvaxNext/Roles/HereticRoleComponent.cs b/Content.Server/_CorvaxNext/Roles/HereticRoleComponent.cs new file mode 100644 index 00000000000..1215d0a6945 --- /dev/null +++ b/Content.Server/_CorvaxNext/Roles/HereticRoleComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Roles; + +namespace Content.Server.Roles; + +[RegisterComponent] +public sealed partial class HereticRoleComponent : BaseMindRoleComponent +{ +} diff --git a/Content.Server/_CorvaxNext/Store/Conditions/HereticPathCondition.cs b/Content.Server/_CorvaxNext/Store/Conditions/HereticPathCondition.cs new file mode 100644 index 00000000000..b18dc9c93e3 --- /dev/null +++ b/Content.Server/_CorvaxNext/Store/Conditions/HereticPathCondition.cs @@ -0,0 +1,46 @@ +using Content.Shared.Heretic; +using Content.Shared.Mind; +using Content.Shared.Store; +using System.Linq; + +namespace Content.Server.Store.Conditions; + +public sealed partial class HereticPathCondition : ListingCondition +{ + [DataField] public HashSet? Whitelist; + [DataField] public HashSet? Blacklist; + [DataField] public int Stage = 0; + + public override bool Condition(ListingConditionArgs args) + { + var ent = args.EntityManager; + var minds = ent.System(); + + if (!minds.TryGetMind(args.Buyer, out var mindId, out var mind)) + return false; + + if (!ent.TryGetComponent(args.Buyer, out var hereticComp)) + return false; + + if (Stage > hereticComp.PathStage) + return false; + + if (Whitelist != null) + { + foreach (var white in Whitelist) + if (hereticComp.CurrentPath == white) + return true; + return false; + } + + if (Blacklist != null) + { + foreach (var black in Blacklist) + if (hereticComp.CurrentPath == black) + return false; + return true; + } + + return true; + } +} diff --git a/Content.Shared/Armor/ArmorComponent.cs b/Content.Shared/Armor/ArmorComponent.cs index fd04c5d29c8..9640f742e1a 100644 --- a/Content.Shared/Armor/ArmorComponent.cs +++ b/Content.Shared/Armor/ArmorComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Utility; @@ -7,7 +7,7 @@ namespace Content.Shared.Armor; /// /// Used for clothing that reduces damage when worn. /// -[RegisterComponent, NetworkedComponent, Access(typeof(SharedArmorSystem))] +[RegisterComponent, NetworkedComponent] // goob edit - remove access restrictions public sealed partial class ArmorComponent : Component { /// diff --git a/Content.Shared/Armor/SharedArmorSystem.cs b/Content.Shared/Armor/SharedArmorSystem.cs index 010ee5e65b0..a9d055e21a3 100644 --- a/Content.Shared/Armor/SharedArmorSystem.cs +++ b/Content.Shared/Armor/SharedArmorSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.Inventory; using Content.Shared.Silicons.Borgs; @@ -19,12 +19,18 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent>(OnDamageModify); + SubscribeLocalEvent(OnDamageModify); // goob edit - why hasn't anyone done this yet? + SubscribeLocalEvent>(OnRelayDamageModify); SubscribeLocalEvent>(OnBorgDamageModify); SubscribeLocalEvent>(OnArmorVerbExamine); } - private void OnDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent args) + // goob edit - why hasn't anyone done this yet? + private void OnDamageModify(EntityUid uid, ArmorComponent component, DamageModifyEvent args) + { + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, component.Modifiers); + } + private void OnRelayDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent args) { args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers); } diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index addf5e22a0e..90ad72ec55b 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared._CorvaxNext.Surgery.Tools; +using Content.Shared._CorvaxNext.Surgery.Tools; using Content.Shared._CorvaxNext.Targeting; using Content.Shared.Body.Components; using Content.Shared.Body.Systems; @@ -12,8 +12,8 @@ namespace Content.Shared.Body.Part; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedBodySystem))] -public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent +//[Access(typeof(SharedBodySystem))] // goob edit - all access :godo: +public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent // Shitmed Change { // Need to set this on container changes as it may be several transform parents up the hierarchy. /// diff --git a/Content.Shared/Damage/Systems/StaminaSystem.cs b/Content.Shared/Damage/Systems/StaminaSystem.cs index a5c8a4b38de..082ba390e2f 100644 --- a/Content.Shared/Damage/Systems/StaminaSystem.cs +++ b/Content.Shared/Damage/Systems/StaminaSystem.cs @@ -373,7 +373,11 @@ private void EnterStamCrit(EntityUid uid, StaminaComponent? component = null) _adminLogger.Add(LogType.Stamina, LogImpact.Medium, $"{ToPrettyString(uid):user} entered stamina crit"); } - private void ExitStamCrit(EntityUid uid, StaminaComponent? component = null) + // goob edit - made it public. + // in any case it requires a stamina component that can be freely modified. + // so it doesn't really matter if it's public or private. besides, very convenient. + // regards + public void ExitStamCrit(EntityUid uid, StaminaComponent? component = null) { if (!Resolve(uid, ref component) || !component.Critical) diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Relay.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Relay.cs index 9e8e0fa7441..81e3c7c1be1 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Relay.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Relay.cs @@ -1,4 +1,5 @@ using Content.Shared.Hands.Components; +using Content.Shared.Heretic; using Content.Shared.Movement.Systems; namespace Content.Shared.Hands.EntitySystems; @@ -8,6 +9,7 @@ public abstract partial class SharedHandsSystem private void InitializeRelay() { SubscribeLocalEvent(RelayEvent); + SubscribeLocalEvent(RelayEvent); // goob edit - heretics } private void RelayEvent(Entity entity, ref T args) where T : EntityEventArgs diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 9573f9b43d9..0b8cbfe7c8c 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -7,6 +7,7 @@ using Content.Shared.Explosion; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.Gravity; +using Content.Shared.Heretic; using Content.Shared.IdentityManagement.Components; using Content.Shared.Inventory.Events; using Content.Shared.Movement.Events; @@ -40,6 +41,7 @@ public void InitializeRelay() SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); // goob edit // by-ref events SubscribeLocalEvent(RefRelayInventoryEvent); diff --git a/Content.Shared/Store/ListingLocalisationHelpers.cs b/Content.Shared/Store/ListingLocalisationHelpers.cs index 882300109ce..3bbc3214f18 100644 --- a/Content.Shared/Store/ListingLocalisationHelpers.cs +++ b/Content.Shared/Store/ListingLocalisationHelpers.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; namespace Content.Shared.Store; diff --git a/Content.Shared/Store/ListingPrototype.cs b/Content.Shared/Store/ListingPrototype.cs index e2339b72c67..2453fd4c979 100644 --- a/Content.Shared/Store/ListingPrototype.cs +++ b/Content.Shared/Store/ListingPrototype.cs @@ -5,6 +5,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; +using Content.Shared.Heretic.Prototypes; namespace Content.Shared.Store; @@ -40,7 +41,8 @@ public ListingData(ListingData other) : this( other.OriginalCost, other.RestockTime, other.DiscountDownTo, - other.DisableRefund + other.DisableRefund, + other.ProductHereticKnowledge ///goob edit ) { @@ -65,7 +67,8 @@ public ListingData( IReadOnlyDictionary, FixedPoint2> originalCost, TimeSpan restockTime, Dictionary, FixedPoint2> dataDiscountDownTo, - bool disableRefund + bool disableRefund, + ProtoId? productHereticKnowledge ///goob edit ) { Name = name; @@ -87,6 +90,7 @@ bool disableRefund RestockTime = restockTime; DiscountDownTo = new Dictionary, FixedPoint2>(dataDiscountDownTo); DisableRefund = disableRefund; + ProductHereticKnowledge = productHereticKnowledge; // goob edit } [ViewVariables] @@ -176,6 +180,13 @@ bool disableRefund [DataField] public object? ProductEvent; + // goobstation - heretics + // i am too tired of making separate systems for knowledge adding + // and all that shit. i've had like 4 failed attempts + // so i'm just gonna shitcode my way out of my misery + [DataField] + public ProtoId? ProductHereticKnowledge; + [DataField] public bool RaiseProductEventOnUser; @@ -297,7 +308,8 @@ public ListingDataWithCostModifiers(ListingData listingData) listingData.OriginalCost, listingData.RestockTime, listingData.DiscountDownTo, - listingData.DisableRefund + listingData.DisableRefund, + listingData.ProductHereticKnowledge //goob edit ) { } diff --git a/Content.Shared/_CorvaxNext/Clothing/Components/MadnessMaskComponent.cs b/Content.Shared/_CorvaxNext/Clothing/Components/MadnessMaskComponent.cs new file mode 100644 index 00000000000..040e81acd0d --- /dev/null +++ b/Content.Shared/_CorvaxNext/Clothing/Components/MadnessMaskComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Clothing.Components; + +[RegisterComponent] +public sealed partial class MadnessMaskComponent : Component +{ + public float UpdateAccumulator = 0f; + [DataField] public float UpdateTimer = 1f; +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/GhoulComponent.cs b/Content.Shared/_CorvaxNext/Heretic/Components/GhoulComponent.cs new file mode 100644 index 00000000000..1983575faec --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/GhoulComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent] +public sealed partial class GhoulComponent : Component +{ + /// + /// Indicates who ghouled the entity. + /// + [DataField] public EntityUid? BoundHeretic = null; + + /// + /// Total health for ghouls. + /// + [DataField] public FixedPoint2 TotalHealth = 50; +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/HereticCombatMarkComponent.cs b/Content.Shared/_CorvaxNext/Heretic/Components/HereticCombatMarkComponent.cs new file mode 100644 index 00000000000..f0cd8ec55eb --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/HereticCombatMarkComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class HereticCombatMarkComponent : Component +{ + [DataField, AutoNetworkedField] public string Path = "Blade"; + + [DataField] public float DisappearTime = 5f; + public TimeSpan Timer = TimeSpan.Zero; +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/HereticComponent.cs b/Content.Shared/_CorvaxNext/Heretic/Components/HereticComponent.cs new file mode 100644 index 00000000000..23e3ee647d4 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/HereticComponent.cs @@ -0,0 +1,60 @@ +using Content.Shared.Heretic.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class HereticComponent : Component +{ + #region Prototypes + + [DataField] public List> BaseKnowledge = new() + { + "BreakOfDawn", + "HeartbeatOfMansus", + "AmberFocus", + "LivingHeart", + "CodexCicatrix", + }; + + #endregion + + [DataField, AutoNetworkedField] public List> KnownRituals = new(); + [DataField] public ProtoId? ChosenRitual; + + /// + /// Contains the list of targets that are eligible for sacrifice. + /// + [DataField, AutoNetworkedField] public List SacrificeTargets = new(); + + /// + /// How much targets can a heretic have? + /// + [DataField, AutoNetworkedField] public int MaxTargets = 5; + + // hardcoded paths because i hate it + // "Ash", "Lock", "Flesh", "Void", "Blade", "Rust" + /// + /// Indicates a path the heretic is on. + /// + [DataField, AutoNetworkedField] public string? CurrentPath = null; + + /// + /// Indicates a stage of a path the heretic is on. 0 is no path, 10 is ascension + /// + [DataField, AutoNetworkedField] public int PathStage = 0; + + [DataField, AutoNetworkedField] public bool Ascended = false; + + /// + /// Used to prevent double casting mansus grasp. + /// + [ViewVariables(VVAccess.ReadOnly)] public bool MansusGraspActive = false; + + /// + /// Indicates if a heretic is able to cast advanced spells. + /// Requires wearing focus, codex cicatrix, hood or anything else that allows him to do so. + /// + [ViewVariables(VVAccess.ReadWrite)] public bool CanCastSpells = false; +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/HereticMagicItemComponent.cs b/Content.Shared/_CorvaxNext/Heretic/Components/HereticMagicItemComponent.cs new file mode 100644 index 00000000000..2202af9203f --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/HereticMagicItemComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HereticMagicItemComponent : Component +{ + +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualEvents.cs b/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualEvents.cs new file mode 100644 index 00000000000..dc948495ba7 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualEvents.cs @@ -0,0 +1,22 @@ +using Content.Shared.Heretic.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CorvaxNext.Heretic.Components; + +[Serializable, NetSerializable] +public sealed class HereticRitualMessage : BoundUserInterfaceMessage +{ + public ProtoId ProtoId; + + public HereticRitualMessage(ProtoId protoId) + { + ProtoId = protoId; + } +} + +[Serializable, NetSerializable] +public enum HereticRitualRuneUiKey : byte +{ + Key +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualRuneComponent.cs b/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualRuneComponent.cs new file mode 100644 index 00000000000..7fe93de81a0 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Components/HereticRitualRuneComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HereticRitualRuneComponent : Component +{ + +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Heretic.Abilites.cs b/Content.Shared/_CorvaxNext/Heretic/Heretic.Abilites.cs new file mode 100644 index 00000000000..1d3a51f8db8 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Heretic.Abilites.cs @@ -0,0 +1,119 @@ +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Content.Shared.Inventory; +using Robust.Shared.GameStates; +using Robust.Shared.Map; +using Robust.Shared.Serialization; + +namespace Content.Shared.Heretic; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HereticActionComponent : Component +{ + /// + /// Indicates that a user should wear a heretic amulet, a hood or something else. + /// + [DataField] public bool RequireMagicItem = true; + + [DataField] public string? MessageLoc = null; +} + +#region DoAfters + +[Serializable, NetSerializable] public sealed partial class EldritchInfluenceDoAfterEvent : SimpleDoAfterEvent +{ + public bool MagicItemActive = false; +} +[Serializable, NetSerializable] public sealed partial class DrawRitualRuneDoAfterEvent : SimpleDoAfterEvent +{ + [NonSerialized] public EntityCoordinates Coords; + [NonSerialized] public EntityUid RitualRune; + + public DrawRitualRuneDoAfterEvent(EntityUid ritualRune, EntityCoordinates coords) + { + RitualRune = ritualRune; + Coords = coords; + } +} +[Serializable, NetSerializable] public sealed partial class HereticMansusLinkDoAfter : SimpleDoAfterEvent +{ + [NonSerialized] public EntityUid Target; + + public HereticMansusLinkDoAfter(EntityUid target) + { + Target = target; + } +} +[Serializable, NetSerializable] public sealed partial class EventHereticFleshSurgeryDoAfter : SimpleDoAfterEvent +{ + [NonSerialized] public EntityUid? Target; + + public EventHereticFleshSurgeryDoAfter(EntityUid target) + { + Target = target; + } +} + +#endregion + +#region Abilities + +/// +/// Raised whenever we need to check for a magic item before casting a spell that requires one to be worn. +/// +public sealed partial class CheckMagicItemEvent : HandledEntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots => SlotFlags.WITHOUT_POCKET; +} + +// basic +public sealed partial class EventHereticOpenStore : InstantActionEvent { } +public sealed partial class EventHereticMansusGrasp : InstantActionEvent { } +public sealed partial class EventHereticLivingHeart : InstantActionEvent { } // opens ui + +// living heart +[Serializable, NetSerializable] public sealed partial class EventHereticLivingHeartActivate : BoundUserInterfaceMessage // triggers the logic +{ + public NetEntity? Target { get; set; } +} +[Serializable, NetSerializable] public enum HereticLivingHeartKey : byte +{ + Key +} + +// ghoul specific +public sealed partial class EventHereticMansusLink : EntityTargetActionEvent { } + +// ash +public sealed partial class EventHereticAshenShift : InstantActionEvent { } +public sealed partial class EventHereticVolcanoBlast : InstantActionEvent { } +public sealed partial class EventHereticNightwatcherRebirth : InstantActionEvent { } +public sealed partial class EventHereticFlames : InstantActionEvent { } +public sealed partial class EventHereticCascade : InstantActionEvent { } + +// flesh +public sealed partial class EventHereticFleshSurgery : EntityTargetActionEvent { } + +// void (+ upgrades) +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAristocratWayEvent : EntityEventArgs { } +public sealed partial class HereticVoidBlastEvent : InstantActionEvent { } +public sealed partial class HereticVoidBlinkEvent : WorldTargetActionEvent { } +public sealed partial class HereticVoidPullEvent : InstantActionEvent { } + +// blade (+ upgrades) +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticDanceOfTheBrandEvent : EntityEventArgs { } +public sealed partial class EventHereticRealignment : InstantActionEvent { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticChampionStanceEvent : EntityEventArgs { } +public sealed partial class EventHereticFuriousSteel : InstantActionEvent { } + +// lock +public sealed partial class EventHereticBulglarFinesse : InstantActionEvent { } +public sealed partial class EventHereticLastRefugee : InstantActionEvent { } + +// ascensions +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionAshEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionVoidEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionFleshEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionLockEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionBladeEvent : EntityEventArgs { } +#endregion diff --git a/Content.Shared/_CorvaxNext/Heretic/Prototypes/Heretic.Data.cs b/Content.Shared/_CorvaxNext/Heretic/Prototypes/Heretic.Data.cs new file mode 100644 index 00000000000..0097292fb9d --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Prototypes/Heretic.Data.cs @@ -0,0 +1,12 @@ +using Content.Shared.Tag; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared.Heretic.Prototypes; + + + +[Serializable, NetSerializable, DataDefinition] public sealed partial class EventHereticAscension : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class EventHereticRerollTargets : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class EventHereticUpdateTargets : EntityEventArgs { } diff --git a/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticKnowledgePrototype.cs b/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticKnowledgePrototype.cs new file mode 100644 index 00000000000..70c2835c5b9 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticKnowledgePrototype.cs @@ -0,0 +1,45 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Heretic.Prototypes; + +[Serializable, NetSerializable, DataDefinition] +[Prototype("hereticKnowledge")] +public sealed partial class HereticKnowledgePrototype : IPrototype +{ + [IdDataField] public string ID { get; private set; } = default!; + + [DataField] public string? Path; + + [DataField] public int Stage = 1; + + /// + /// Indicates that this should not be on a main branch. + /// + [DataField] public bool SideKnowledge = false; + + /// + /// What event should be raised + /// + [DataField] public object? Event; + + /// + /// What rituals should be given + /// + [DataField] public List>? RitualPrototypes; + + /// + /// What actions should be given + /// + [DataField] public List? ActionPrototypes; + + /// + /// Used for codex + /// + [DataField] public string LocName = string.Empty; + + /// + /// Used for codex + /// + [DataField] public string LocDesc = string.Empty; +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticRitualPrototype.cs b/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticRitualPrototype.cs new file mode 100644 index 00000000000..a86f03c88bb --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Prototypes/HereticRitualPrototype.cs @@ -0,0 +1,74 @@ +using Content.Shared.Tag; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared.Heretic.Prototypes; + +[Serializable, NetSerializable, DataDefinition] +[Prototype("hereticRitual")] +public sealed partial class HereticRitualPrototype : IPrototype, ICloneable +{ + [IdDataField] public string ID { get; private set; } = default!; + + /// + /// How many entitites with specific names are required for the ritual? + /// + [DataField] public Dictionary? RequiredEntityNames; + + /// + /// How many items with certain tags are required for the ritual? + /// + [DataField] public Dictionary, int>? RequiredTags; + + /// + /// Is there a custom behavior that needs to be executed? + /// + [DataField] public List? CustomBehaviors; + + /// + /// How many other entities will be created from the ritual? + /// + [DataField] public Dictionary? Output; + /// + /// What event will be raised on success? + /// + [DataField] public object? OutputEvent; + /// + /// What knowledge will be given on success? + /// + [DataField] public ProtoId? OutputKnowledge; + + /// + /// Used for codex and radial menu. + /// + [DataField] public string LocName = "heretic-ritual-unknown"; + + /// + /// Used for codex + /// + [DataField] public string LocDesc = string.Empty; + + /// + /// Icon for codex and radial menu. + /// + [DataField] public SpriteSpecifier Icon = new SpriteSpecifier.Rsi(new("_CorvaxNext/Heretic/amber_focus.rsi"), "icon"); + + /// Please use this instead of editing the prototype. Shit WILL break if you don't. + public object Clone() + { + return new HereticRitualPrototype() + { + ID = ID, + RequiredEntityNames = RequiredEntityNames, + RequiredTags = RequiredTags, + CustomBehaviors = CustomBehaviors, + Output = Output, + OutputEvent = OutputEvent, + OutputKnowledge = OutputKnowledge, + LocName = LocName, + LocDesc = LocDesc, + Icon = Icon + }; + } +} diff --git a/Content.Shared/_CorvaxNext/Heretic/Prototypes/Ritual.CustomBehaviors.cs b/Content.Shared/_CorvaxNext/Heretic/Prototypes/Ritual.CustomBehaviors.cs new file mode 100644 index 00000000000..ffa8d640fd4 --- /dev/null +++ b/Content.Shared/_CorvaxNext/Heretic/Prototypes/Ritual.CustomBehaviors.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Heretic.Prototypes; + +[ImplicitDataDefinitionForInheritors] +public abstract partial class RitualCustomBehavior +{ + /// Output string in case something is missing + /// If the behavior was successful or not + public abstract bool Execute(RitualData args, out string? outstr); + + /// + /// If the ritual is successful do *this*. + /// + /// + public abstract void Finalize(RitualData args); +} + +public readonly record struct RitualData(EntityUid Performer, EntityUid Platform, ProtoId RitualId, IEntityManager EntityManager); diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_ash.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_ash.ogg new file mode 100644 index 00000000000..a85aa0f6a9c Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_ash.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_blade.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_blade.ogg new file mode 100644 index 00000000000..da7c313ad8a Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_blade.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_flesh.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_flesh.ogg new file mode 100644 index 00000000000..b488cafd0bf Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_flesh.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_knock.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_knock.ogg new file mode 100644 index 00000000000..73f0a7f0b3b Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_knock.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_rust.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_rust.ogg new file mode 100644 index 00000000000..5cfc73b2cf5 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_rust.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_void.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_void.ogg new file mode 100644 index 00000000000..797784952d1 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/ascend_void.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/attributions.yml b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/attributions.yml new file mode 100644 index 00000000000..904fa35f354 --- /dev/null +++ b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/attributions.yml @@ -0,0 +1,4 @@ +- files: ["ascend_ash.ogg", "ascend_blade.ogg", "ascend_flesh.ogg", "ascend_knock.ogg", "ascend_rust.ogg", "ascend_void.ogg", "heretic_gain.ogg", "heretic_gain_intense.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from /tg/station" + source: "https://github.com/tgstation/tgstation/tree/master/sound/music/antag/heretic" \ No newline at end of file diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain.ogg new file mode 100644 index 00000000000..9944e833a66 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain_intense.ogg b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain_intense.ogg new file mode 100644 index 00000000000..5e6d4f4174f Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/Ambience/Antag/Heretic/heretic_gain_intense.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/attributions.yml b/Resources/Audio/_CorvaxNext/Heretic/attributions.yml new file mode 100644 index 00000000000..571127c8b52 --- /dev/null +++ b/Resources/Audio/_CorvaxNext/Heretic/attributions.yml @@ -0,0 +1,9 @@ +- files: ["blind.ogg", "castsummon.ogg", "disintegrate.ogg", "hereticknock.ogg", "repulse.ogg", "voidblink.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from /tg/station" + source: "https://github.com/tgstation/tgstation/tree/master/sound/effects/magic" + +- files: ["heartbeat.ogg"] + license: "CC-BY-SA-3.0" + copyright: "made by whateverusername0" + source: "https://knowyourmeme.com/memes/source-i-made-it-up" \ No newline at end of file diff --git a/Resources/Audio/_CorvaxNext/Heretic/blind.ogg b/Resources/Audio/_CorvaxNext/Heretic/blind.ogg new file mode 100644 index 00000000000..06efb11d285 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/blind.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/castsummon.ogg b/Resources/Audio/_CorvaxNext/Heretic/castsummon.ogg new file mode 100644 index 00000000000..e88bb073b35 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/castsummon.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/disintegrate.ogg b/Resources/Audio/_CorvaxNext/Heretic/disintegrate.ogg new file mode 100644 index 00000000000..568a1b43e4d Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/disintegrate.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/heartbeat.ogg b/Resources/Audio/_CorvaxNext/Heretic/heartbeat.ogg new file mode 100644 index 00000000000..acd8dbeb82b Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/heartbeat.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/hereticknock.ogg b/Resources/Audio/_CorvaxNext/Heretic/hereticknock.ogg new file mode 100644 index 00000000000..87ca57302a2 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/hereticknock.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/repulse.ogg b/Resources/Audio/_CorvaxNext/Heretic/repulse.ogg new file mode 100644 index 00000000000..fdba4f6e29d Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/repulse.ogg differ diff --git a/Resources/Audio/_CorvaxNext/Heretic/voidblink.ogg b/Resources/Audio/_CorvaxNext/Heretic/voidblink.ogg new file mode 100644 index 00000000000..7415601b902 Binary files /dev/null and b/Resources/Audio/_CorvaxNext/Heretic/voidblink.ogg differ diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/abilities/heretic.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/abilities/heretic.ftl new file mode 100644 index 00000000000..e8b1f2ad5e2 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/abilities/heretic.ftl @@ -0,0 +1,55 @@ +heretic-ability-fail = Failed to cast +heretic-ability-fail-magicitem = You cannot cast it without a focus! +heretic-ability-fail-notarget = Couldn't find a valid target! + +heretic-magicitem-examine = [color=yellow]Allows you to use advanced spells while held or equipped.[/color] + +## blade +heretic-blade-examine = [color=yellow]Using it while it's in your hand will break the blade and teleport you away from danger.[/color] +heretic-blade-use = The blade shatters, and you feel the voices pulling you away. +heretic-riposte-used = Riposte used! +heretic-riposte-available = Riposte available! + +## paths exclusive +heretic-rust-mark-itembreak = {$name} shatters into dust! +heretic-blade-void-examine = [color=cyan]While there is at least a single marked heathen in a large proximity, teleport behind its back without breaking the blade.[/color] +mansus-infused-item-examine = [color=purple]The item's sheer presence alone gives you shivers. Should you really pick it up?[/color] + +## mansus link +heretic-manselink-fail-exists = This creature is already connected! +heretic-manselink-fail-nomind = This creature does not have a mind! +heretic-manselink-start = You begin to connect this creature's mind to yours. +heretic-manselink-start-target = You feel your mind being pulled somewhere... + +## living heart +heretic-livingheart-notargets = No available targets, visit the rune. +heretic-livingheart-offstation = It's {$state}, off station, {$direction}! +heretic-livingheart-onstation = It's {$state}, {$direction}! +heretic-livingheart-unknown = It's... not in this plain of reality. + +## speech +heretic-speech-mansusgrasp = R'CH T'H TR'TH! + +heretic-speech-ash-jaunt = ASH'N P'SSG' +heretic-speech-ash-volcano = V'LC'N! +heretic-speech-ash-rebirth = G'LR'Y T' TH' N'GHT'W'TCH'ER! +heretic-speech-ash-flame = FL'MS!! +heretic-speech-ash-cascade = C'SC'DE!! + +heretic-speech-blade-furioussteel = F'LSH'NG S'LV'R! + +heretic-speech-flesh-surgery = CL'M M'N! +heretic-speech-flesh-worm = REALITY UNCOIL!! + +heretic-speech-rust-spread = A'GRSV SPR'D! +heretic-speech-rust-plume = 'NTR'P'C PL'M'! + +heretic-speech-void-blast = F'RZ'E! +heretic-speech-void-phase = RE'L'T' PH'S'E! +heretic-speech-void-pull = BR'NG F'RTH TH'M T' M'!! + +heretic-speech-cleave = CL'VE! +heretic-speech-bloodsiphon = FL'MS O'ET'RN'ITY! +heretic-speech-mansuslink = PI'RC' TH' M'ND! +heretic-speech-realignment = R'S'T! +heretic-speech-fuckoff = F'K 'FF!! \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/administration/antag.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/administration/antag.ftl new file mode 100644 index 00000000000..ca8f17d4b66 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/administration/antag.ftl @@ -0,0 +1,3 @@ +admin-verb-make-heretic = Make the target into a heretic. + +admin-verb-text-make-heretic = Make Heretic \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/contraband/contraband-severity.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/contraband/contraband-severity.ftl new file mode 100644 index 00000000000..250ce99d9e2 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/contraband/contraband-severity.ftl @@ -0,0 +1 @@ +contraband-examine-text-magic = [color=purple]This item is highly illegal contraband with magical properties![/color] diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/game-ticking/game-presets/preset-heretic.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/game-ticking/game-presets/preset-heretic.ftl new file mode 100644 index 00000000000..0a01a402447 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/game-ticking/game-presets/preset-heretic.ftl @@ -0,0 +1,40 @@ +heretic-roundend-name = heretic + +roundend-prepend-heretic-ascension-success = {$name}, [color=green] has Ascended![/color] +roundend-prepend-heretic-ascension-fail = {$name}, [color=red] has failed![/color] +roundend-prepend-heretic-knowledge-named = [color=white]{$name}[/color] has researched a total of [color=purple]{$number}[/color] knowledge. + +heretic-gamemode-title = Heretics +heretic-gamemode-description = + Dimensional anomaly detected within the station. There is no additional data. + +heretic-role-greeting-fluff = + Another day at a meaningless job. You feel a shimmer around you, as a realization of something strange in the air unfolds. You look inwards and discover something that will change your life. + + The Gates of Mansus open up to your mind. + +heretic-role-greeting = + You are the Heretic! + + Read more about your role in the guidebook entry. + +heretic-role-greeting-short = + You are the Heretic! + In order to learn the Final Ritual and Ascend, you must fulfill your tasks. + +## ghoul +heretic-ghoul-greeting = + You have been summoned into this world by {CAPITALIZE(THE($ent))}! + You must aid him in his journey to ascension and protect him at all costs. + You may follow other heretics if your master is beyond resurrection. +heretic-ghoul-greeting-noname = + You have been summoned into this world by eldritch forces. + Obey the orders of your masters no matter what. + +ghostrole-ghoul-name = Ghoul +ghostrole-prophet-name = Raw Prophet +ghostrole-stalker-name = Flesh Stalker +ghostrole-ghoul-desc = Aid your summoner in achieving ascension. +ghostrole-prophet-desc = Aid your summoner in achieving ascension. Connect other believers to the Mansus Link. +ghostrole-stalker-desc = Aid your summoner in achieving ascension. Jaunt and sabotage crew's lighting. +ghostrole-ghoul-rules = You are a [color=red][bold]Team Antagonist[/bold][/color] with the one who summoned you and other eldritch beings. \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/guidebook/guides.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/guidebook/guides.ftl new file mode 100644 index 00000000000..2e33107debf --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/guidebook/guides.ftl @@ -0,0 +1 @@ +guide-entry-heretics = Heretics \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/heretic/ascensions.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/ascensions.ftl new file mode 100644 index 00000000000..c7d245c4cd9 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/ascensions.ftl @@ -0,0 +1,23 @@ +heretic-ascension-ash = + The Watch is dead, the Nightwatcher burned with it. Yet his fire burns evermore, + for the Nightwatcher brought forth the rite to mankind! His gaze continues, as now I am one with the flames, + WITNESS MY ASCENSION, THE ASHY LANTERN BLAZES ONCE MORE! + +heretic-ascension-blade = + The Torn Champion is freed! I will become the blade reunited, and with my greater ambition, + I AM UNMATCHED! A STORM OF STEEL AND SILVER IS UPON US! WITNESS MY ASCENSION! + +heretic-ascension-lock = + The Stewards guided me, and I guided them. + My foes were the Locks and my blades were the Key! + The Labyrinth will be Locked no more, and freedom will be ours! WITNESS US! + +heretic-ascension-flesh = + With the Marshal's knowledge, my power had peaked. The throne was open to claim. + Men of this world, hear me, for the time has come! The Marshal guides my army! + Reality will bend to THE LORD OF THE NIGHT or be unraveled! WITNESS MY ASCENSION! + +heretic-ascension-void = + The world falls into darkness. I stand in an empty plane, small flakes of ice fall from the sky. + The Aristocrat stands before me, beckoning. We will play a waltz to the whispers of dying reality, + as the world is destroyed before our eyes. The void will return all to nothing, WITNESS MY ASCENSION! \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/heretic/misc.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/misc.ftl new file mode 100644 index 00000000000..921107fd90b --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/misc.ftl @@ -0,0 +1,6 @@ +heretic-influence-start = Draining influence... + +heretic-ritualrune-examine = Current selected ritual: [color=yellow]{$rit}[/color] + +heretic-knowledge-gain = You've learned something +heretic-knowledge-loss = You're forgotten something diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/heretic/rituals.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/rituals.ftl new file mode 100644 index 00000000000..c113db8c9d1 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/heretic/rituals.ftl @@ -0,0 +1,55 @@ +heretic-ritual-unknown = Unknown Ritual +heretic-ritual-switch = Selected {$name} +heretic-ritual-success = Ritual successful + +heretic-ritual-fail-items = Ritual failed. Required items: {$itemlist} +heretic-ritual-norituals = You don't know any rituals! +heretic-ritual-noritual = No ritual chosen! + +heretic-ritual-basic-sacrifice = Heartbeat of the Mansus +heretic-ritual-basic-sacrifice-desc = Bring one of your targets in critical or worse condition to sacrifice them to the Mansus, gibbing them and granting you one knowledge point. Heads of staff give an additional bonus point. + +heretic-ritual-basic-focus = Amber Focus +heretic-ritual-basic-focus-desc = Transmute a glass shard and a pair of eyes into Amber Focus. A small necklace that allows you to cast advanced spells without the need of holding the codex in your hand. + +heretic-ritual-basic-heart = Relentless Heartbeat +heretic-ritual-basic-heart-desc = Bring one heart, a pen and a paper to reroll your targets. Be wary that you may roll the same targets as before. Use this only if absolutely necessary. + +heretic-ritual-basic-codex = Codex Cicatrix +heretic-ritual-basic-codex-desc = Transmute a pair of eyes, a book and a pen into Codex Cicatrix. It allows you to cast advanced spells while held open and gain twice as many influences from reality rifts. You're holding one right now. + +heretic-ritual-fail-sacrifice = There is no corpse to sacrifice. +heretic-ritual-fail-sacrifice-ineligible = The rune refuses to accept this sacrifice. +heretic-ritual-fail-reagentpuddle = There is no {$reagentname} present. +heretic-ritual-fail-temperature-hot = It is too hot here. +heretic-ritual-fail-temperature-cold = It is not cold enough here. +heretic-ritual-fail-sacrifice-ash = There's either not enough of them dead, or burning. +heretic-ritual-fail-sacrifice-blade = Some of them are still having a head on their shoulders. + +## side quests +heretic-ritual-side-knowledge = Ritual of Knowledge +heretic-ritual-side-shark = Scorching Shark +heretic-ritual-side-cloak = Void Cloak +heretic-ritual-side-ghoul = Shattered Ritual +heretic-ritual-side-armor = Armorer's Ritual +heretic-ritual-side-water = Priest's Ritual +heretic-ritual-side-knife = Carving Knife +heretic-ritual-side-crucible = Mawed Crucible +heretic-ritual-side-coin = Eldritch Coin + +## ash path +heretic-ritual-ash-blade = Nightwatcher's Secret +heretic-ritual-ash-grasp = Grasp of Ash +heretic-ritual-ash-mask = Mask of Madness +heretic-ritual-ash-ascend = Ashlord's Rite + +## flesh path +heretic-ritual-flesh-blade = Principle of Hunger +heretic-ritual-flesh-ghoul = Imperfect Ritual +heretic-ritual-flesh-prophet = Raw Ritual +heretic-ritual-flesh-stalker = Lonely Ritual +heretic-ritual-flesh-ascend = Priest's Final Hymn + +## void path +heretic-ritual-void-blade = Glimmer of Winter +heretic-ritual-void-ascend = Waltz at the End of Time diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/objectives/heretic.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/objectives/heretic.ftl new file mode 100644 index 00000000000..dc0ed8b21fe --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/objectives/heretic.ftl @@ -0,0 +1,10 @@ +objective-issuer-heretic = [color=#8e24aa]The Mansus[/color] + +objective-condition-knowledge-title = Research at least {$count} knowledge from the Mansus. +objective-condition-sacrifice-title = Sacrifice at least {$count} crew members. +objective-condition-sacrifice-head-title = Sacrifice at least {$count} head of staff. + +objective-condition-description-ascend = I must do this in order to ascend! + + + diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/radio_channels.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/radio_channels.ftl new file mode 100644 index 00000000000..3518400316a --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/radio_channels.ftl @@ -0,0 +1 @@ +chat-radio-mansus = Mansus Link \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/roles/heretic.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/roles/heretic.ftl new file mode 100644 index 00000000000..3cbb7372ac4 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/roles/heretic.ftl @@ -0,0 +1,2 @@ +roles-antag-heretic-name = Heretic +roles-antag-heretic-description = Find influences, realize they've all been taken. Sacrifice people and become all powerful or die trying. \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/currency.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/currency.ftl new file mode 100644 index 00000000000..a9f563e5a99 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/currency.ftl @@ -0,0 +1 @@ +store-currency-display-knowledgepoint = Knowledge Points \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/categories.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/categories.ftl new file mode 100644 index 00000000000..1138fccec2c --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/categories.ftl @@ -0,0 +1,7 @@ +store-heretic-path-ash = Ashen Path +store-heretic-path-lock = Path of Lock +store-heretic-path-flesh = Path of Flesh +store-heretic-path-void = Path of Void +store-heretic-path-rust = Rusted Path +store-heretic-path-blade = Path of Blade +store-heretic-path-side = Side Knowledge diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-ash.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-ash.ftl new file mode 100644 index 00000000000..5a0dbca15e5 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-ash.ftl @@ -0,0 +1,66 @@ +knowledge-path-ash-s1-name = Nightwatcher's Secret +knowledge-path-ash-s1-desc = + The City Guard know their watch. If you ask them at night, they may tell you about the ashy lantern. + + Opens up the Path of Ash to you. + Allows you to transmute a match and a knife into an Ashen Blade. + +knowledge-path-ash-s2-name = Grasp of Ash +knowledge-path-ash-s2-desc = + The Nightwatcher was the first of them, his treason started it all. Their lantern, expired to ash - their watch, absent. + + Your Mansus Grasp will burn the eyes of the victim, damaging them and blurring their vision. + +knowledge-path-ash-s3-name = Ashen Shift +knowledge-path-ash-s3-desc = + He knew how to walk between the planes. + + Grants you Ashen Passage, a spell that lets you phase out of reality and traverse a short distance, passing though any walls. + +knowledge-path-ash-s4-name = Mark of Ash +knowledge-path-ash-s4-desc = + He was a very particular man, always watching in the dead of night. + But in spite of his duty, he regularly tranced through the Manse with his blazing lantern held high. + He shone brightly in the darkness, until the blaze begin to die. + + Your Mansus Grasp now applies the Mark of Ash. The mark is triggered from an attack with your Ashen Blade. + When triggered, the victim takes additional stamina and burn damage, and the mark is transferred to a nearby heathen. + +knowledge-path-ash-s5-name = Volcanic Blast +knowledge-path-ash-s5-desc = + No fire was hot enough to rekindle them. No fire was bright enough to save them. No fire is eternal. + + Grants you Volcanic Blast, a spell that fires a ball of flames to the nearest Heathen. + On successful hit, the fireball continues it's way to another heathen. + Be careful, as fire still hurts. Make sure to carry an extinguisher on yourself. + +knowledge-path-ash-s6-name = Mask of Madness +knowledge-path-ash-s6-desc = + The Nightwatcher was lost. That's what the Watch believed. Yet he walked the world, unnoticed by the masses. + + Allows you to transmute any mask, four candles, a stun baton, and a liver to create a Mask of Madness. + The mask instills fear into heathens who witness it, causing stamina damage, hallucinations, and insanity. + Once worn you are unable to take it off by yourself... + +knowledge-path-ash-s7-name = Fiery Blade +knowledge-path-ash-s7-desc = + He returned, blade in hand, he swung and swung as the ash fell from the skies. + His city, the people he swore to watch... and watch he did, as they all burnt to cinders. + + Your blade now lights enemies ablaze on attack. + +knowledge-path-ash-s8-name = Nightwatcher's Rebirth +knowledge-path-ash-s8-desc = + The fire was inescapable, and yet, life remained in his charred body. The Nightwatcher was a particular man, always watching. + + Grants you Nightwatcher's Rebirth, a spell that burns all nearby heathens who are currently on fire, healing you for every victim afflicted. + If any victims afflicted are in critical condition, they will instantly die. + +knowledge-path-ash-s9-name = Ashlord's Rite +knowledge-path-ash-s9-desc = + The ascension ritual of the Path of Ash. + Bring 3 burning or husked corpses to a transmutation rune to complete the ritual. + When completed, you become a harbinger of flames, gaining two abilites. + Cascade, which causes a massive, growing ring of fire around you, + and Oath of Flame, causing you to passively create a ring of flames as you walk. + You will also become immune to flames, space, and similar environmental hazards. diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-blade.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-blade.ftl new file mode 100644 index 00000000000..db65adf5546 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-blade.ftl @@ -0,0 +1,62 @@ +knowledge-path-blade-s1-name = The Cutting Edge +knowledge-path-blade-s1-desc = + Our great ancestors forged swords and practiced sparring on the eve of great battles. + + Follow the path of blades. + Being unable to use any ranged weapons, transmute 4 knives into a sundered blade. + +knowledge-path-blade-s2-name = Grasp of the Blade +knowledge-path-blade-s2-desc = + The story of the footsoldier has been told since antiquity. It is one of blood and valor, and is championed by sword, steel and silver. + + Your Mansus Grasp will cause a short stun when used on someone lying down or facing away from you. + +knowledge-path-blade-s3-name = Dance of the Brand +knowledge-path-blade-s3-desc = + The footsoldier was known to be a fearsome duelist. Their general quickly appointed them as their personal Champion. + + Being attacked while wielding any melee weapon in either hand will deliver a riposte towards your attacker. This effect can only trigger once every 20 seconds. + +knowledge-path-blade-s4-name = Mark of the Blade +knowledge-path-blade-s4-desc = + His general wished to end the war, but the Champion knew there could be no life without death. He would slay the coward himself, and anyone who tried to run. + + Your Mansus Grasp now applies the Mark of the Blade. + Triggering the mark will summon a knife that will orbit you for a short time. + The knife will block any attack directed towards you, but is consumed on use. + +knowledge-path-blade-s5-name = Realignment +knowledge-path-blade-s5-desc = + In the flurry of death, he found peace within himself. Despite insurmountable odds, he forged on. + + Grants you Realignment a spell that wil realign your body rapidly for a short period. + During this process, you will rapidly regenerate stamina and quickly recover from stuns, however, you will be unable to attack. + +knowledge-path-blade-s6-name = Stance of the Torn Champion +knowledge-path-blade-s6-desc = + In time, it was he who stood alone among the bodies of his former comrades, awash in blood, none of it his own. He was without rival, equal, or purpose. + + Grants immunity to having your limbs dismembered. + Additionally, when damaged below 50% of your maximum health, you gain increased resistance to gaining wounds and resistance to batons. + +knowledge-path-blade-s7-name = Empowered Blades +knowledge-path-blade-s7-desc = + I found him cleaved in twain, halves locked in a duel without end; a flurry of blades, neither hitting their mark, for the Champion was indomitable. + + You are able to infuse your mansus grasp directly into your blades, doubling their damage and stunning whoever picks them up. + +knowledge-path-blade-s8-name = Furious Steel +knowledge-path-blade-s8-desc = + Without thinking, I took the knife of a fallen soldier and threw with all my might. My aim was true! The Torn Champion smiled at their first taste of agony, and with a nod, their blades became my own. + + Grants you Furious Steel, a targeted spell. Using it will summon three orbiting blades around you. These blades will protect you from all attacks, but are consumed on use. + Additionally, you can click to fire the blades at a nearest target, dealing heavy damage. + +knowledge-path-blade-s9-name = Maelstrom of Silver +knowledge-path-blade-s9-desc = + The ascension ritual of the Path of Blades. + Bring 3 headless corpses to a transmutation rune to complete the ritual. + When completed, you will be surrounded in a constant, regenerating orbit of blades. + These blades will protect you from all attacks, but are consumed on use. + Additionally, you become a master of combat, gaining the ability to waltz over slippery surfaces and shrug off stuns. + Every weapon you hold will deal bonus damage and heal you on attack for a portion of the damage dealt. diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-flesh.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-flesh.ftl new file mode 100644 index 00000000000..9d82e01ccaa --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-flesh.ftl @@ -0,0 +1,70 @@ +knowledge-path-flesh-s1-name = Principle of Hunger +knowledge-path-flesh-s1-desc = + Hundreds of us starved, but not me... I found strength in my greed. + + Opens up the Path of Flesh to you. + Allows you to transmute a knife and a pool of blood into a Bloody Blade. + +knowledge-path-flesh-s2-name = Grasp of Flesh +knowledge-path-flesh-s2-desc = + My new found desires drove me to greater and greater heights. + + Your Mansus Grasp gains the ability to create a ghoul out of corpse with a soul. + Ghouls have only 50 health and look like husks to the heathens' eyes, but can use Bloody Blades effectively. + +knowledge-path-flesh-s3-name = Imperfect Ritual +knowledge-path-flesh-s3-desc = + I found notes of a dark ritual, unfinished... yet still, I pushed forward. + + Allows you to transmute a corpse and a poppy to create a Voiceless Dead. + The corpse does not need to have a soul. + Voiceless Dead are mute ghouls and only have 100 health, but can use Bloody Blades effectively. + +knowledge-path-flesh-s4-name = Mark of Flesh +knowledge-path-flesh-s4-desc = + That's when I saw them, the marked ones. They were out of reach. They screamed, and screamed. + + Your Mansus Grasp now applies the Mark of Flesh. The mark is triggered from an attack with your Bloody Blade. + When triggered, the victim violently spills all it's blood on the ground. + +knowledge-path-flesh-s5-name = Knitting of Flesh +knowledge-path-flesh-s5-desc = + But they were not out of my reach for long. With every step, the screams grew, until at last + I learned that they could be silenced. + + Grants you the spell Knit Flesh. This spell allows you to remove organs from victims + without requiring a lengthy surgery. This process is much longer if the target is not dead. + This spell also allows you to heal your minions and summons, or restore failing organs to acceptable status. + +knowledge-path-flesh-s6-name = Raw Ritual +knowledge-path-flesh-s6-desc = + I could not continue alone. I was able to summon The Uncanny Man to help me see more. + The screams... once constant, now silenced by their wretched appearance. Nothing was out of reach. + + Allows you to transmute a pair of eyes, a stomach, and a pool of blood to create a Raw Prophet. + Raw Prophets have a long range jaunt and the ability to link minds to communicate with ease, but are very fragile and weak in combat. + +knowledge-path-flesh-s7-name = Bleeding Steel +knowledge-path-flesh-s7-desc = + The Uncanny Man was not alone. They led me to the Marshal. + I finally began to understand. And then, blood rained from the heavens. + + Your Bloody Blade now causes enemies to bleed heavily on attack. + +knowledge-path-flesh-s8-name = Lonely Ritual +knowledge-path-flesh-s8-desc = + I was able to combine my greed and desires to summon an eldritch beast I had never seen before. + An ever shapeshifting mass of flesh, it knew well my goals. The Marshal approved. + + Allows you to transmute a heart, a stomach, lungs and a pen to create a Stalker. + Stalkers can jaunt, release EMPs, and are strong in combat. + +knowledge-path-flesh-s9-name = Priest’s Final Hymn +knowledge-path-flesh-s9-desc = + The ascension ritual of the Path of Flesh. Bring 4 corpses to a transmutation rune to complete the ritual. + When completed, you instantly shed your human form and become the Lord of the Night, a supremely powerful creature. + Just the act of transforming causes nearby heathens great fear and trauma. + While in the Lord of the Night form, you can consume the living to heal. + You will also become immune to flames, space, and similar environmental hazards. + + WARNING - THIS RITUAL IS A POINT OF NO RETURN. YOU WILL BE UNABLE TO TRANSFORM BACK AFTER THE RITUAL IS PERFORMED! \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-lock.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-lock.ftl new file mode 100644 index 00000000000..77bac127ff6 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-lock.ftl @@ -0,0 +1,68 @@ +knowledge-path-lock-s1-name = A Steward's Secret +knowledge-path-lock-s1-desc = + The Locked Labyrinth leads to freedom. But only the trapped Stewards know the correct path. + + Opens up the Path of Lock to you. + Allows you to transmute a knife and a crowbar into a Key Blade. + Aside from being deadly they function as jaws of life can fit into utility belts. + +knowledge-path-lock-s2-name = Grasp of Lock +knowledge-path-lock-s2-desc = + Nothing may remain closed from my touch. + + Your mansus grasp allows you to access anything! Right click on an airlock or a locker to force it open. + All locks will break. Any mech pilot will be instantly ejected. Consoles will break. + Makes a distinctive knocking sound on use. + +knowledge-path-lock-s3-name = Key Keeper's Burden +knowledge-path-lock-s3-desc = + The Keeper sneered. These plastic rectangles are a mockery of keys, and I curse every door that desires them. + + Allows you to use your mansus grasp on an ID card to transform it into an Eldritch Card. + Hit a pair of airlocks with it to create a pair of portals, which will teleport you between them, but teleport non-heretics randomly. + Each card may only sustain a single pair of portals at the same time. + It also functions and appears the same as a regular ID Card. + Attacking a normal ID card with it consumes the card and gains its access. + Does not preserve the originally used card. + +knowledge-path-lock-s4-name = Mark of Lock +knowledge-path-lock-s4-desc = + The Gatekeeper was a corrupt Steward. She hindered her fellows for her own twisted amusement. + + Your Mansus Grasp now applies the Mark of Lock. + Attack a marked person to bar them from all passages for the duration of the mark. + This will make it so that they have no access whatsoever, even public access doors will reject them. + +knowledge-path-lock-s6-name = Concierge's Rite +knowledge-path-lock-s6-desc = + The Concierge scribbled my name into the Handbook. Welcome to your new home, fellow Steward. + + Allows you to transmute a stick of chalk, a wooden plank, and a multitool to create a Labyrinth Handbook. + It can materialize a barricade at range that only you and people resistant to magic can pass. Has limited uses. + +knowledge-path-lock-s7-name = Burglar's Finesse +knowledge-path-lock-s7-desc = + Consorting with Burglar spirits is frowned upon, but a Steward will always want to learn about new doors. + + Grants you Burglar's Finesse, a single-target spell that puts a random item from the victims backpack into your hand. + +knowledge-path-lock-s8-name = Opening Blade +knowledge-path-lock-s8-desc = + The Pilgrim-Surgeon was not an Steward. Nonetheless, its blades and sutures proved a match for their keys. + + Your blade has a chance to remove a random organ on attack. + +knowledge-path-lock-s9-name = Caretaker's Last Refuge +knowledge-path-lock-s9-desc = + Jealously, the Guard and the Hound hunted me. But I unlocked my form, and was but a haze, untouchable. + + Gives you a spell that makes you transparent and not dense. Cannot be used near living sentient beings. + While in refuge, you cannot use your hands or spells, and you are immune to slowdown. + You are invincible but unable to harm anything. Cancelled by being hit with an anti-magic item. + +knowledge-path-lock-s10-name = Unlock the Labyrinth +knowledge-path-lock-s10-desc = + The ascension ritual of the Path of Lock. + Bring 3 corpses without organs in their torso to a transmutation rune to complete the ritual. + When completed, you will create a tear to the Labyrinth's heart; a tear in reality located at the site of this ritual. + Eldritch creatures will endlessly pour from this rift who are bound to obey your instructions. \ No newline at end of file diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-side.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-side.ftl new file mode 100644 index 00000000000..d40b6426df6 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-side.ftl @@ -0,0 +1,71 @@ +knowledge-path-side-knowledge-name = Ritual of Knowledge +knowledge-path-side-knowledge-desc = + You learn a special ritual that requires 4 different items, from various organs to candles and stun batons. + Performing this ritual grants you 4 knowledge points and resets the items needed. + +## stage 3 +knowledge-path-side-s3-armor-name = Armorer’s Ritual +knowledge-path-side-s3-armor-desc = + The Rusted Hills welcomed the Blacksmith in their generosity. And the Blacksmith returned their generosity in kind. + + Allows you to transmute a table and a gas mask to create Eldritch Armor. + Eldritch Armor provides great protection while also acting as a focus when hooded. + +knowledge-path-side-s3-flask-name = Priest's Ritual +knowledge-path-side-s3-flask-desc = + This is an old recipe. The Owl whispered it to me. Created by the Priest - the Liquid that both was and is not. + + Allows you to transmute a tank of water and a glass shard into a Flask of Eldritch Essence. + Eldritch water can be consumed for potent healing. + +## stage 7 +knowledge-path-side-s7-uncuff-name = Wave of Desperation +knowledge-path-side-s7-uncuff-desc = + My shackles undone in dark fury, their feeble bindings crumble before my power. + + Grants you Wave Of Desperation, a spell which can only be cast while restrained. + It removes your restraints, repels and knocks down adjacent people, and applies the Mansus Grasp to everything nearby. + However, you will fall unconscious a short time after casting this spell. + +knowledge-path-side-s7-siphon-name = Blood Siphon +knowledge-path-side-s7-siphon-desc = + No matter the man, we bleed all the same. That's what the Marshal told me. + + Grants Blood Siphon, a ranged spell that steals a bit of life from your target, healing your bruises and restoring blood. + Additionally, you have a chance of transferring wounds you are experiencing to the target. + +knowledge-path-side-s7-knife-name = Carving Knife +knowledge-path-side-s7-knife-desc = + Etched, carved... eternal. There is power hidden in everything. I can unveil it! I can carve the monolith to reveal the chains! + + Transmute a knife, a glass shard and a piece of paper to create a Carving Knife. + The knife allows you to create up to 3 carvings on the floor that have various effects on nonbelievers who walk over them. + +knowledge-path-side-s7-crucible-name = Mawed Crucible +knowledge-path-side-s7-crucible-desc = + This is pure agony. I wasn't able to summon the figure of the Aristocrat, + but with the Priest's attention I stumbled upon a different recipe... + + Allows you to transmute a portable water tank and a table to create a Mawed Crucible. + The Mawed Crucible can brew powerful potions for combat and utility, but must be fed bodyparts and organs between uses. + +## stage 9 +knowledge-path-side-s9-coin-name = Eldritch Coin +knowledge-path-side-s9-coin-desc = + The Mansus is a place of all sorts of sins. But greed held a special role. + + Transmute a sheet of plasma, a diamond and eyes into an Eldritch Coin. + The coin will open nearby airlocks if it lands on heads and bolt nearby airlocks if it lands on tails. + Using it on an airlock consumes the coin and permanently opens the airlock. + Attempting to flip or use the coin as a non-heretic will deal brute and/or burn damage, depending on the side it lands on. + +knowledge-path-side-s9-ashman-name = Ashen Ritual +knowledge-path-side-s9-ashman-desc = + Transmute a pile of ash, a brain and a book to summon an Ashman. + Ashmen can jaunt, cause bleeding wounds, and can release large waves of fire. + +knowledge-path-side-s9-cleave-name = Blood Cleave +knowledge-path-side-s9-cleave-desc = + At first I didn't understand these instruments of war, but the Priest told me to use them regardless. Soon, he said, I would know them well. + + Grants you Cleave, an area-of-effect targeted spell that causes heavy bleeding and blood loss to anyone afflicted. diff --git a/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-void.ftl b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-void.ftl new file mode 100644 index 00000000000..d262d1a2942 --- /dev/null +++ b/Resources/Locale/en-US/_corvaxnext/heretic/store/heretic/heretic-catalog-void.ftl @@ -0,0 +1,66 @@ +knowledge-path-void-s1-name = Glimmer of Winter +knowledge-path-void-s1-desc = + I feel a shimmer in the air, the air around me gets colder. + I start to realize the emptiness of existence. Something's watching me. + + Opens up the Path of Void to you. + Allows you to transmute a knife in sub-zero temperatures into a Void Blade. + +knowledge-path-void-s2-name = Grasp of Void +knowledge-path-void-s2-desc = + I saw the cold watcher who observes me. The chill mounts within me. + They are quiet. This isn't the end of the mystery. + + Your Mansus Grasp will temporarily mute and chill the victim. + +knowledge-path-void-s3-name = Aristocrat's Way +knowledge-path-void-s3-desc = + I found a thread of cold breath. It lead me to a strange shrine, all made of crystals. + Translucent and white, a depiction of a nobleman stood before me. + + Grants you immunity to cold temperatures, and removes your need to breathe. + You can still take damage due to a lack of pressure. + +knowledge-path-void-s4-name = Mark of Void +knowledge-path-void-s4-desc = + A gust of wind? A shimmer in the air? The presence is overwhelming, my senses began to betray me. My mind is my own enemy. + + Your Mansus Grasp now applies the Mark of Void. The mark is triggered from an attack with your Void Blade. + When triggered, further silences the victim and swiftly lowers the temperature of their body and the air around them. + +knowledge-path-void-s5-name = Void Blast +knowledge-path-void-s5-desc = + Every door I open racks my body. I am afraid of what is behind them. Someone is expecting me, + and my legs start to drag. Is that... snow? + + Grants you Void Blast, a spell that shoots out a freezing blast in a cone in front of you, + freezing the ground and any victims within. + +knowledge-path-void-s6-name = Void Phase +knowledge-path-void-s6-desc = + The entity calls themself the Aristocrat. They effortlessly walk through air like nothing - leaving a harsh, cold breeze in their wake. + They disappear, and I am left in the blizzard. + + Grants you Void Phase, a long range targeted teleport spell. + Additionally stuns heathens around your original and target destination. + +knowledge-path-void-s7-name = Seeking Blade +knowledge-path-void-s7-desc = + Fleeting memories, fleeting feet. I mark my way with frozen blood upon the snow. Covered and forgotten. + + Your blade freezes enemies. Additionally, when a target is marked, activate the Void Blade in your hand to teleport right next to them without breaking the blade. + +knowledge-path-void-s8-name = Void Pull +knowledge-path-void-s8-desc = + All is fleeting, but what else stays? I'm close to ending what was started. + The Aristocrat reveals themselves to me again. They tell me I am late. Their pull is immense, I cannot turn back. + + Grants you Void Pull, a spell that pulls all nearby heathens towards you, stunning them briefly. + +knowledge-path-void-s9-name = Waltz at the End of Time +knowledge-path-void-s9-desc = + The ascension ritual of the Path of Void. + Bring 3 corpses to a transmutation rune in sub-zero temperatures to complete the ritual. + When completed, grants you Aristocrat's Blessing. + Everything around you will be turned into snow and the air will constantly be frozen. Those nearby will be silenced and frozen even quicker. + You will also become immune to flames, space, and similar environmental hazards. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl new file mode 100644 index 00000000000..d93be127f98 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl @@ -0,0 +1,2 @@ +ent-SwitchAgilityAction = Switch agility + .desc = Switching agility diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl new file mode 100644 index 00000000000..fcf6600ed4e --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl @@ -0,0 +1,4 @@ +ent-OrganSpaceAnimalLungs = space animal lungs + .desc = { ent-OrganAnimalLungs.desc } +ent-OrganSpaceAnimalHeart = space animal heart + .desc = { ent-OrganAnimalHeart.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl new file mode 100644 index 00000000000..ea91d4719fe --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl @@ -0,0 +1,8 @@ +ent-BaseCyberneticEyes = { ent-OrganHumanEyes } + .desc = { ent-OrganHumanEyes.desc } +ent-BasicCyberneticEyes = cybernetic eyes + .desc = A pair of cybernetic eyes that enhance your vision, and protect you from eye damage. +ent-SecurityCyberneticEyes = cybernetic security eyes + .desc = A pair of cybernetic eyes that enhance your vision, featuring an integrated SecHUD. +ent-MedicalCyberneticEyes = cybernetic diagnostic eyes + .desc = A pair of cybernetic eyes that enhance your vision, featuring an integrated MedHUD. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl new file mode 100644 index 00000000000..5fdc22bba13 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl @@ -0,0 +1,8 @@ +ent-BioSynthHeart = bio-synthetic heart + .desc = This heart can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLiver = bio-synthetic liver + .desc = This liver can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLungs = bio-synthetic lungs + .desc = These lungs can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthEyes = bio-synthetic eyes + .desc = These eyes can be transplanted into any living organism and it will adapt to its recipient. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl new file mode 100644 index 00000000000..dad7c04e087 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl @@ -0,0 +1,2 @@ +ent-OrganResomiLungs = lungs + .desc = An advanced pair of avian lungs. Filters oxygen by way of moving air constantly through air sacs. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl new file mode 100644 index 00000000000..68988fa70bf --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl @@ -0,0 +1,6 @@ +ent-BaseCarpPart = { ent-PartAnimal } + .desc = { ent-PartAnimal.desc } +ent-TailCarp = carp tail + .desc = Unique glands in this tail let space carp fly in a vacuum. +ent-TorsoCarp = carp torso + .desc = { ent-BaseCarpPart.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/resomi.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/resomi.ftl new file mode 100644 index 00000000000..df344b7717e --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/parts/resomi.ftl @@ -0,0 +1,22 @@ +ent-PartResomi = resomi body part + .desc = { ent-BaseItem.desc } +ent-TorsoResomi = resomi torso + .desc = { ent-PartResomi.desc } +ent-HeadResomi = resomi head + .desc = { ent-PartResomi.desc } +ent-LeftArmResomi = left resomi arm + .desc = { ent-PartResomi.desc } +ent-RightArmResomi = right resomi arm + .desc = { ent-PartResomi.desc } +ent-LeftHandResomi = left resomi hand + .desc = { ent-PartResomi.desc } +ent-RightHandResomi = right resomi hand + .desc = { ent-PartResomi.desc } +ent-LeftLegResomi = left resomi leg + .desc = { ent-PartResomi.desc } +ent-RightLegResomi = right resomi leg + .desc = { ent-PartResomi.desc } +ent-LeftFootResomi = left resomi foot + .desc = { ent-PartResomi.desc } +ent-RightFootResomi = right resomi foot + .desc = { ent-PartResomi.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl new file mode 100644 index 00000000000..b638d880c71 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl @@ -0,0 +1,24 @@ +ent-LeftArmCybernetic = { ent-LeftArmHuman } + .desc = { ent-LeftArmHuman.desc } +ent-RightArmCybernetic = { ent-RightArmHuman } + .desc = { ent-RightArmHuman.desc } +ent-LeftLegCybernetic = { ent-LeftLegHuman } + .desc = { ent-LeftLegHuman.desc } +ent-RightLegCybernetic = { ent-RightLegHuman } + .desc = { ent-RightLegHuman.desc } +ent-LeftHandCybernetic = cybernetic left hand + .desc = { ent-LeftHandHuman.desc } +ent-RightHandCybernetic = cybernetic right hand + .desc = { ent-RightHandHuman.desc } +ent-LeftFootCybernetic = cybernetic left foot + .desc = { ent-LeftFootHuman.desc } +ent-RightFootCybernetic = cybernetic right foot + .desc = { ent-RightFootHuman.desc } +ent-JawsOfLifeLeftArm = J.W.L left arm + .desc = A cybernetic left arm with the ability to pry doors open. +ent-JawsOfLifeRightArm = J.W.L right arm + .desc = A cybernetic right arm with the ability to pry doors open. +ent-SpeedLeftLeg = S.P.E.E.D left leg + .desc = A cybernetic left leg that allows its wearer to run faster. +ent-SpeedRightLeg = S.P.E.E.D right leg + .desc = A cybernetic left leg that allows its wearer to run faster. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl new file mode 100644 index 00000000000..a7ef3f3a8ce --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl @@ -0,0 +1,20 @@ +ent-BioSynthLeftArm = bio-synthetic left arm + .desc = This left arm can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightArm = bio-synthetic right arm + .desc = This right arm can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftHand = bio-synthetic left hand + .desc = This left hand can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightHand = bio-synthetic right hand + .desc = This right hand can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftLeg = bio-synthetic left leg + .desc = This left leg can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightLeg = bio-synthetic right leg + .desc = This right leg can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftFoot = bio-synthetic left foot + .desc = This left foot can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightFoot = bio-synthetic right foot + .desc = This right foot can be transplanted into any living organism and it will adapt to its recipient. +ent-PizzaLeftArm = pizza left arm + .desc = For when you want to turn someone into a Space John's. +ent-PizzaRightArm = pizza right arm + .desc = For when you want to turn someone into a Space John's. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl new file mode 100644 index 00000000000..275c1a85693 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl @@ -0,0 +1,2 @@ +ent-BookUSSPCook = Kopatuch. Let him cook + .desc = Kopatych is a legendary chef of the USSP diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/boxes/medical.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/boxes/medical.ftl new file mode 100644 index 00000000000..4e01bb8afce --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/catalog/fills/boxes/medical.ftl @@ -0,0 +1,10 @@ +ent-BoxBodyBagBluespace = bluespace body bag box + .desc = Contains body bags. +ent-BoxBodyBagNanoTrasen = NanoTrasen body bag box + .desc = Contains body bags. +ent-BoxBodyBagPrisoner = prisoner body bag box + .desc = Contains body bags. +ent-BoxBodyBagRadiation = radiation body bag box + .desc = Contains body bags. +ent-BoxBodyBagSyndicate = syndicate body bag box + .desc = Contains body bags. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl new file mode 100644 index 00000000000..9d581c8c2cd --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl @@ -0,0 +1,4 @@ +ent-ClothingBeltWhiteSheath = white sabre sheath + .desc = Style, shine, everything for the best sabers in the universe. +ent-ClothingBeltSheriffSheath = sheriff sabre sheath + .desc = Practicality, durability, the saber will definitely not end up in your leg. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl new file mode 100644 index 00000000000..98991d4a1fe --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl @@ -0,0 +1,4 @@ +ent-ClothingHandsGlovesCaptainWhite = white captain gloves + .desc = Royal white gloves with gold trim. Gorgeous. +ent-ClothingHandsGlovesSheriff = sheriff gloves + .desc = Gloves with an ergonomic shape designed to hold a revolver. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl new file mode 100644 index 00000000000..29038342f43 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl @@ -0,0 +1,8 @@ +ent-ClothingHeadHatBeretCaptainWhite = white captain beret + .desc = A white captain beret, an icon of style. +ent-ClothingHeadHatBeretSheriff = sheriff beret + .desc = Beret, a favorite among local sheriffs. +ent-ClothingHeadHatCapcapWhite = white cap cap + .desc = Stylish white cap cap. +ent-ClothingHeadHatCapcapSheriff = sheriff cap + .desc = Stylish sheriff cap. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl new file mode 100644 index 00000000000..8f24f56010f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl @@ -0,0 +1,8 @@ +ent-ClothingNeckCaptainWide = captain wide overcoat + .desc = Wide captain's greatcoat. It doesn't seem to fit you, but it will do as a cape on your shoulders. +ent-ClothingNeckCloakRoyalCaptain = royal captain cloak + .desc = The king in the palace, the king in the palace. +ent-ClothingNeckCloakSyndicateAdmiral = Syndicate Admiral cloak + .desc = Red cloak sewn with a gold cloth. +ent-ClothingNeckWhiteMantleCaptain = white captain mantle + .desc = Captain mantle, with white down. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl new file mode 100644 index 00000000000..c97e229a841 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl @@ -0,0 +1,2 @@ +ent-ClothingUniformJumpskirtWhiteCaptain = white captain jumpskirt + .desc = White captain jumpsuit skirt symbolizing that your salary clearly exceeds the norm. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl new file mode 100644 index 00000000000..2c98823b642 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl @@ -0,0 +1,6 @@ +ent-ClothingUniformJumpsuitCommandCaptain = captain command jumpsuit + .desc = Black suit with gold shoulder straps. +ent-ClothingUniformJumpsuitWhiteCaptain = white captain jumpsuit + .desc = Captain white jumpsuit symbolizes that your salary is clearly above the norm. +ent-ClothingUniformJumpsuitSheriff = sheriff jumpsuit + .desc = Jumpsuit showing your status is how terrible... the great ruler. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl new file mode 100644 index 00000000000..a8eb3ba2862 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl @@ -0,0 +1,2 @@ +ent-Footstep = footstep + .desc = Trace of liquid. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl new file mode 100644 index 00000000000..33c492edfc0 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl @@ -0,0 +1,2 @@ +ent-MedicalBiofabricator = medical biofabricator + .desc = Produces organs and other organic matter that can be surgically grafted onto patients with biomass. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl new file mode 100644 index 00000000000..18048c5c69d --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl @@ -0,0 +1,4 @@ +ent-MobMonkeyDummy = { ent-BaseSpeciesDummy } + .desc = A dummy monkey meant to be used in character setup. +ent-MobKoboldDummy = { ent-BaseSpeciesDummy } + .desc = A dummy kobold meant to be used in character setup. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl new file mode 100644 index 00000000000..c59e53c2eeb --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl @@ -0,0 +1,2 @@ +ent-MedicalBiofabMachineBoard = medical biofab machine board + .desc = A machine printed circuit board for a medical biofab. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl new file mode 100644 index 00000000000..b869ef6d2bb --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl @@ -0,0 +1,4 @@ +ent-FoodBakedPotatosCutlets = mashed potatoes with cutlets + .desc = You hurry up, we have cutlets right now... +ent-FoodPickles = pickle + .desc = The very thing for vodka diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl new file mode 100644 index 00000000000..c4a32ec9223 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl @@ -0,0 +1,4 @@ +ent-FoodCucumber = cucumber + .desc = PHAHAHHAHA cu-cu-cu-cu-mbe-er +ent-FoodShashamber = shashamber + .desc = what? diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl new file mode 100644 index 00000000000..08ca836e997 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl @@ -0,0 +1,10 @@ +ent-FoodGOOOOLsoup = footbear soup + .desc = I don't think we're playing cards... +ent-FoodOkroshkasoup = okroshka soup + .desc = Salad with kvass and sour cream.. what +ent-FoodOlivielsoup = oliviel soup + .desc = My father never dreamed of so much mayonnaise! +ent-FoodSolankasoup = solanka soup + .desc = Meehhh..... +ent-FoodPlow = plow + .desc = Oh, Vasya, rice is fire diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl new file mode 100644 index 00000000000..4712a05d782 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl @@ -0,0 +1,2 @@ +ent-ApiStorageImplant = { ent-StorageImplant } + .desc = { ent-StorageImplant.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl new file mode 100644 index 00000000000..208ae62f5a8 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl @@ -0,0 +1,120 @@ +ent-CardBoxBase = deck box + .desc = { ent-BoxCardboard.desc } +ent-CardStackBase = stack of cards + .desc = { ent-BaseItem.desc } +ent-CardHandBase = hand of cards + .desc = { ent-CardStackBase.desc } +ent-CardDeckBase = deck of cards + .desc = { ent-CardStackBase.desc } +ent-CardBoxBlack = black deck box + .desc = { ent-CardBoxBase.desc } +ent-CardDeckBlack = deck of cards + .desc = { ent-CardDeckBase.desc } +ent-CardBase = card + .desc = { ent-BaseItem.desc } +ent-CardSc2OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc3OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc4OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc5OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc6OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc7OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc8OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc9OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc10OfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScAceOfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScJackOfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScKingOfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScQueenOfClubsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScJackOfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScQueenOfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScKingOfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScAceOfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc2OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc3OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc4OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc5OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc6OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc7OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc8OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc9OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc10OfDiamondsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc2OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc3OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc4OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc5OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc6OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc7OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc8OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc9OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc10OfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScKingOfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScQueenOfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScJackOfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScAceOfHeartsBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc2OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc3OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc4OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc5OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc6OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc7OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc8OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc9OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardSc10OfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScKingOfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScQueenOfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScJackOfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScAceOfSpadesBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } +ent-CardScJokerBlack = { ent-CardBase } + .desc = { ent-CardBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl new file mode 100644 index 00000000000..422212fab1f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl @@ -0,0 +1,4 @@ +ent-CucumbertSeeds = packet of cucumber seeds + .desc = { ent-SeedBase.desc } +ent-ShashambertSeeds = packet of shashamber seeds + .desc = { ent-SeedBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/bodybags.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/bodybags.ftl new file mode 100644 index 00000000000..b39f4638b93 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/bodybags.ftl @@ -0,0 +1,25 @@ +ent-BodyBagBluespace = body bag bluespace + .desc = Durable bluespace bag designed for storing and transporting corpses, preventing decomposition. +ent-BodyBagBluespaceFolded = { ent-BodyBagBluespace } + .suffix = Folded + .desc = { ent-BodyBagBluespace.desc } +ent-BodyBagNanoTrasen = blue body bag + .desc = Plastic NT bag designed for storing and transporting corpses, preventing decomposition. +ent-BodyBagNanoTrasenFolded = { ent-BodyBagNanoTrasen } + .suffix = Folded + .desc = { ent-BodyBagNanoTrasen.desc } +ent-BodyBagPrisoner = prisoner body bag + .desc = Plastic bag designed for storing and transporting corpses, preventing decomposition in prison structures. +ent-BodyBagPrisonerFolded = { ent-BodyBagPrisoner } + .suffix = Folded + .desc = { ent-BodyBagPrisoner.desc } +ent-BodyBagRadiation = radiation body bag + .desc = Plastic bag designed for storing and transporting radioactive corpses, preventing decomposition. +ent-BodyBagRadiationFolded = { ent-BodyBagRadiation } + .suffix = Folded + .desc = { ent-BodyBagRadiation.desc } +ent-BodyBagSyndicate = red body bag + .desc = Plastic bag with Syndicate symbols, designed for storing and transporting corpses, preventing decomposition. +ent-BodyBagSyndicateFolded = { ent-BodyBagSyndicate } + .suffix = Folded + .desc = { ent-BodyBagSyndicate.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl new file mode 100644 index 00000000000..d6f36728f94 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl @@ -0,0 +1,2 @@ +ent-ScalpelCool = скальпель + .desc = Хирургический инструмент, используемый для выполнения надрезов в плоти. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/api_toolbox.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/api_toolbox.ftl new file mode 100644 index 00000000000..f03c4280afb --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/api_toolbox.ftl @@ -0,0 +1,3 @@ +ent-ToolboxApi = api undetermined toolbox + .desc = This is where your favorite api's supplies lie. Try to remember which ones. + .suffix = API diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/jammer_microreactor.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/jammer_microreactor.ftl new file mode 100644 index 00000000000..53eb0c80c8b --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/objects/tools/jammer_microreactor.ftl @@ -0,0 +1,3 @@ +ent-RadioJammerMicroreactor = { ent-RadioJammer } + .suffix = Microreactor + .desc = { ent-RadioJammer.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl new file mode 100644 index 00000000000..0672790949a --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl @@ -0,0 +1,2 @@ +ent-MobResomi = Urist McRaptor + .desc = { ent-BaseMobResomi.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl new file mode 100644 index 00000000000..9e88ed992e7 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl @@ -0,0 +1,4 @@ +ent-BaseMobResomi = Urist McRaptor + .desc = { ent-BaseMobSpeciesOrganic.desc } +ent-MobResomiDummy = { ent-BaseSpeciesDummy } + .desc = { ent-BaseSpeciesDummy.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl new file mode 100644 index 00000000000..f251caeb5d4 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl @@ -0,0 +1,2 @@ +ent-CaptainDrobe = CaptainDrobe + .desc = Stylish uniform, for a strong leader! diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl new file mode 100644 index 00000000000..7ad5f8f145f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl @@ -0,0 +1,70 @@ +ent-SurgeryBase = { "" } + .desc = { "" } +ent-SurgeryOpenIncision = Open Incision + .desc = { ent-SurgeryBase.desc } +ent-SurgeryCloseIncision = Close Incision + .desc = { ent-SurgeryBase.desc } +ent-SurgeryOpenRibcage = Open Ribcage + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemovePart = Remove Part + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachHead = Attach Head + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftArm = Attach Left Arm + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightArm = Attach Right Arm + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftLeg = Attach Left Leg + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightLeg = Attach Right Leg + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftHand = Attach Left Hand + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightHand = Attach Right Hand + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftFoot = Attach Left Foot + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightFoot = Attach Right Foot + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLegs = Attach Legs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachHands = Attach Hands + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachFeet = Attach Feet + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachTail = Attach Tail + .desc = { ent-SurgeryBase.desc } +ent-SurgeryTendWoundsBrute = Tend Bruise Wounds + .desc = { ent-SurgeryBase.desc } +ent-SurgeryTendWoundsBurn = Tend Burn Wounds + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertItem = Cavity Implant + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveBrain = Remove Brain + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertBrain = Insert Brain + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveHeart = Remove Heart + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertHeart = Insert Heart + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveLiver = Remove Liver + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertLiver = Insert Liver + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveLungs = Remove Lungs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertLungs = Insert Lungs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveStomach = Remove Stomach + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertStomach = Insert Stomach + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveEyes = Remove Eyes + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertEyes = Insert Eyes + .desc = { ent-SurgeryBase.desc } +ent-SurgeryLobotomize = Lobotomize + .desc = { ent-SurgeryBase.desc } +ent-SurgeryMendBrainTissue = Mend brain tissue + .desc = { ent-SurgeryBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl new file mode 100644 index 00000000000..41749aad144 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl @@ -0,0 +1,60 @@ +ent-SurgeryStepBase = { "" } + .desc = { "" } +ent-SurgeryStepOpenIncisionScalpel = Cut with a scalpel + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepClampBleeders = Clamp the bleeders + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRetractSkin = Retract the skin + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSawBones = Saw through bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepPriseOpenBones = Prise the bones open + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCloseBones = Close bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepMendRibcage = Mend ribcage + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCloseIncision = Close incision + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertFeature = Insert part + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSealWounds = Seal wounds + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSawFeature = Saw through bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepClampInternalBleeders = Clamp internal bleeders + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveFeature = Amputate part + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCarefulIncisionScalpel = Make a careful incision + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRepairBruteTissue = Repair damaged tissue + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRepairBurnTissue = Repair burnt tissue + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSealTendWound = Seal the wound + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertItem = Insert item into cavity + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveItem = Remove item from cavity + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveOrgan = Remove organ + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertOrgan = Add organ + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertLungs = Add lungs + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertLiver = Add liver + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertEyes = Add eyes + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertHeart = Add heart + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertStomach = Add stomach + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepSealOrganWound = Seal wounds + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepLobotomize = Lobotomize patient + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepMendBrainTissue = Mend brain tissue + .desc = { ent-SurgeryStepBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl new file mode 100644 index 00000000000..3bed390889c --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl @@ -0,0 +1,2 @@ +ent-Api = { ent-BaseGameRule } + .desc = { ent-BaseGameRule.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/objectives/api.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/objectives/api.ftl new file mode 100644 index 00000000000..4f9d92c635a --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/objectives/api.ftl @@ -0,0 +1,8 @@ +ent-BaseApiObjective = { ent-BaseObjective } + .desc = { ent-BaseObjective.desc } +ent-BaseApiStealObjective = { ent-BaseApiObjective } + .desc = { ent-BaseApiObjective.desc } +ent-AiStealObjective = { ent-BaseApiStealObjective } + .desc = { ent-BaseApiStealObjective.desc } +ent-EscapeApiShuttleObjective = Escape to centcomm alive and unrestrained. + .desc = You don't want your illegal activities to be discovered by anyone, do you? diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl new file mode 100644 index 00000000000..80839771e68 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl @@ -0,0 +1,2 @@ +ent-MindRoleApi = Api Role + .desc = { ent-BaseMindRoleAntag.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/basic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/basic.ftl new file mode 100644 index 00000000000..a79ed2d474f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/basic.ftl @@ -0,0 +1,8 @@ +ent-ActionHereticOpenStore = Open Knowledge Store + .desc = Open the Knowledge Store. +ent-ActionHereticMansusGrasp = Mansus Grasp + .desc = Channel the power of the Old Gods through your grip. +ent-ActionHereticLivingHeart = Living Heart + .desc = Use your heart to get your sacrifice targets location. +ent-ActionHereticMansusLink = Manse Link + .desc = Pierce through reality and connect minds to one another. Default radio key is :z diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_ash.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_ash.ftl new file mode 100644 index 00000000000..adb655641d3 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_ash.ftl @@ -0,0 +1,10 @@ +ent-ActionHereticJaunt = Ashen Passage + .desc = A short range spell that allows you to pass unimpeded through walls. +ent-ActionHereticVolcanoBlast = Volcanic Blast + .desc = Charge up a blast of fire that chains between nearby targets, setting them ablaze. +ent-ActionHereticNightwatcherRebirth = Nightwatcher's Rebirth + .desc = A spell that extinguishes you and drains nearby heathens engulfed in flames of their life force. +ent-ActionHereticAscension1 = Oath of Flame + .desc = For a minute, you will passively create a ring of fire around you. +ent-ActionHereticAscension2 = Fire Cascade + .desc = Heats the air around you. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_blade.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_blade.ftl new file mode 100644 index 00000000000..9d8c29de0b2 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_blade.ftl @@ -0,0 +1,4 @@ +ent-ActionHereticRealignment = Realignment + .desc = Recover from all stuns and knockdowns, gaining short term pacifism. +ent-ActionHereticFuriousSteel = Furious steel + .desc = Summon three orbiting protecting blades around you. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_flesh.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_flesh.ftl new file mode 100644 index 00000000000..4f2687565b7 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_flesh.ftl @@ -0,0 +1,2 @@ +ent-ActionHereticFleshSurgery = flesh surgery + .desc = Remove a random organ from someone, or heal your teammates. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_void.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_void.ftl new file mode 100644 index 00000000000..0b667c0fa99 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/actions/heretic/path_void.ftl @@ -0,0 +1,6 @@ +ent-ActionHereticVoidBlast = Void Blast + .desc = Fire off a cone of ice in front of you. +ent-ActionHereticVoidPhase = Void Phase + .desc = Shift through the void, knocking down everyone around you. +ent-ActionHereticVoidPull = Void Pull + .desc = Pull and damage nearby heathens. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/head/hoods.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/head/hoods.ftl new file mode 100644 index 00000000000..c56775fcf7d --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/head/hoods.ftl @@ -0,0 +1,2 @@ +ent-ClothingHeadHatHoodHeretic = ominous hood + .desc = A torn, dust-caked hood. Strange eyes line the inside. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/mask/masks.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/mask/masks.ftl new file mode 100644 index 00000000000..5bd67c3ca61 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/mask/masks.ftl @@ -0,0 +1,2 @@ +ent-ClothingMaskMadHeretic = abyssal mask + .desc = A mask created from suffering. When you look into its eyes, it looks back. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/neck/specific.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/neck/specific.ftl new file mode 100644 index 00000000000..af9dfcb0baa --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/neck/specific.ftl @@ -0,0 +1,3 @@ +ent-ClothingNeckAmberFocus = amber focus + .desc = An amber focusing glass that provides a link to the world beyond. The necklace seems to twitch, but only when you look at it from the corner of your eye. + .suffix = MagicItem diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/outerclothing/armor.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/outerclothing/armor.ftl new file mode 100644 index 00000000000..6ba78eb5802 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/clothing/outerclothing/armor.ftl @@ -0,0 +1,2 @@ +ent-ClothingOuterArmorHeretic = ominous armor + .desc = A ragged, dusty set of robes. Strange eyes line the inside. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/eldritch_mobs.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/eldritch_mobs.ftl new file mode 100644 index 00000000000..0b64576c930 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/eldritch_mobs.ftl @@ -0,0 +1,9 @@ +ent-BaseMobGhoul = { ent-SimpleMobBase } + .desc = { ent-SimpleMobBase.desc } +ent-MobGhoulStalker = flesh stalker + .desc = An abomination cobbled together from varied remains. Its appearance changes slightly every time you blink. +ent-MobGhoulProphet = raw prophet + .desc = An abomination stitched together from a few severed arms and one swollen, orphaned eye. +ent-MobGhoulRustWalker = rust walker + .desc = A grinding, clanking construct which leaches life from its surroundings with every armoured step. + .suffix = DO NOT MAP diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/polymorph.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/polymorph.ftl new file mode 100644 index 00000000000..41405a6bf14 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/mobs/npc/polymorph.ftl @@ -0,0 +1,9 @@ +ent-PolymorphAshJauntAnimation = Unknown + .desc = You can't figure out what that is. +ent-PolymorphAshJauntEndAnimation = Unknown + .desc = You can't figure out what that is. +ent-PolymorphAshJaunt = Unknown + .desc = You can't figure out what that is. +ent-MobHereticFleshAscend = eldritch horror + .desc = An incomprehensible mess of limbs and eyes. You can feel it's stare into your soul. + .suffix = DO NOT MAP diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/magic_contraband.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/magic_contraband.ftl new file mode 100644 index 00000000000..55d875efe86 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/magic_contraband.ftl @@ -0,0 +1,2 @@ +ent-BaseMagicContraband = { "" } + .desc = { "" } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/specific/heretic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/specific/heretic.ftl new file mode 100644 index 00000000000..9e7a6b61b15 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/specific/heretic.ftl @@ -0,0 +1,8 @@ +ent-CodexCicatrix = codex cicatrix + .desc = An ominous book you've never seen before. The letters seem to be contantly rearranging themselves. +ent-HereticEldritchFlask = eldritch flask + .desc = A flask filled with an unknown substance. Who knows what will happen when you take a sip from it. +ent-HereticProtectiveBlade = eldritch blade + .desc = Maelstrom of razors flashing right before your eyes. Why are you stopping to look at it!? +ent-HereticProtectiveBladeProjectile = eldritch blade + .desc = Maelstrom of razors flashing right before your eyes. Why are you stopping to look at it!? diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl new file mode 100644 index 00000000000..89cf1253f18 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl @@ -0,0 +1,2 @@ +ent-FireballChain = twisted fireball + .desc = Uh oh. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/melee/heretic_blades.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/melee/heretic_blades.ftl new file mode 100644 index 00000000000..eda9c4ae6ac --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/melee/heretic_blades.ftl @@ -0,0 +1,20 @@ +ent-HereticBladeBase = eldritch blade + .desc = The sickly blade used by sinister individuals for rituals and sacrifices. +ent-HereticBladeAsh = ashen blade + .suffix = Ash + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeBlade = sundered blade + .suffix = Blade + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeFlesh = bloody blade + .suffix = Flesh + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeLock = key blade + .suffix = Lock + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeRust = rusty blade + .suffix = Rust + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeVoid = void blade + .suffix = Void + .desc = { ent-HereticBladeBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl new file mode 100644 index 00000000000..bd25a4550a0 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl @@ -0,0 +1,2 @@ +ent-TouchSpellMansus = mansus grasp + .desc = The power of the Old Gods, channeled through your grip. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/eldritch_influence.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/eldritch_influence.ftl new file mode 100644 index 00000000000..d7dfdf2b46f --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/eldritch_influence.ftl @@ -0,0 +1,6 @@ +ent-EldritchInfluence = reality shift + .desc = Your eyes start to burn just from a single look. Should you delve deeper? +ent-EldritchInfluenceIntermediate = { "" } + .desc = { "" } +ent-EldritchInfluenceSpent = reality fracture + .desc = A reality fracture. Something keeps leaking out of it, should you really be near this thing? diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/ritual_rune.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/ritual_rune.ftl new file mode 100644 index 00000000000..19efea92fbb --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/entities/structures/specific/heretic/ritual_rune.ftl @@ -0,0 +1,6 @@ +ent-HereticRuneRitual = transmutation rune + .desc = An ancient drawing used by sinister individuals for sacrifices. +ent-HereticRuneRitualDrawAnimation = unfinished transmutation rune + .desc = An unfinished ancient drawing used by sinister individuals for sacrifices. +ent-HereticRuneRitualAnimation = transmutation rune + .desc = you shouldn't be seeing this description diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/gamerules/roundstart.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/gamerules/roundstart.ftl new file mode 100644 index 00000000000..a7d4ff60876 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/gamerules/roundstart.ftl @@ -0,0 +1,2 @@ +ent-Heretic = { ent-BaseGameRule } + .desc = { ent-BaseGameRule.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/objectives/heretic.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/objectives/heretic.ftl new file mode 100644 index 00000000000..4e4a840abf3 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/heretic/objectives/heretic.ftl @@ -0,0 +1,8 @@ +ent-BaseHereticObjective = { ent-BaseObjective } + .desc = { ent-BaseObjective.desc } +ent-HereticKnowledgeObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } +ent-HereticSacrificeObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } +ent-HereticSacrificeHeadObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/animal/animal.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/animal/animal.ftl index 59a05cca9c1..0048b93fac6 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/animal/animal.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/animal/animal.ftl @@ -14,3 +14,7 @@ ent-OrganAnimalHeart = heart .desc = { ent-BaseAnimalOrgan.desc } ent-OrganAnimalKidneys = kidneys .desc = { ent-BaseAnimalOrgan.desc } +ent-OrganAnimalBrain = animal brain + .desc = Not so intelligence, not so honk. +ent-OrganAnimalEyes = animal eyes + .desc = I see you! diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/moth.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/moth.ftl index 85dc0a8573f..2bee01da2bd 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/moth.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/moth.ftl @@ -1,2 +1,2 @@ -ent-OrganMothStomach = { ent-OrganAnimalStomach } +ent-OrganMothStomach = moth stomach .desc = { ent-OrganAnimalStomach.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/vox.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/vox.ftl index 77086bec635..76c8bd5327d 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/vox.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/organs/vox.ftl @@ -1,3 +1,3 @@ -ent-OrganVoxLungs = { ent-OrganHumanLungs } +ent-OrganVoxLungs = vox lungs .desc = The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in. .suffix = vox diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal.ftl index d3bfa49cf04..f54b077cbb8 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal.ftl @@ -8,3 +8,5 @@ ent-FeetAnimal = animal feet .desc = { ent-PartAnimal.desc } ent-TorsoAnimal = animal torso .desc = { ent-PartAnimal.desc } +ent-HeadAnimal = animal head + .desc = { ent-PartAnimal.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/kobold.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/kobold.ftl new file mode 100644 index 00000000000..e4dc9749066 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/kobold.ftl @@ -0,0 +1,22 @@ +ent-PartKobold = Kobold body part + .desc = { ent-BaseItem.desc } +ent-TorsoKobold = Kobold torso + .desc = { ent-PartKobold.desc } +ent-HeadKobold = Kobold head + .desc = { ent-PartKobold.desc } +ent-LeftArmKobold = left Kobold arm + .desc = { ent-PartKobold.desc } +ent-RightArmKobold = right Kobold arm + .desc = { ent-PartKobold.desc } +ent-LeftHandKobold = left Kobold hand + .desc = { ent-PartKobold.desc } +ent-RightHandKobold = right Kobold hand + .desc = { ent-PartKobold.desc } +ent-LeftLegKobold = left Kobold leg + .desc = { ent-PartKobold.desc } +ent-RightLegKobold = right Kobold leg + .desc = { ent-PartKobold.desc } +ent-LeftFootKobold = left Kobold foot + .desc = { ent-PartKobold.desc } +ent-RightFootKobold = right Kobold foot + .desc = { ent-PartKobold.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/monkey.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/monkey.ftl new file mode 100644 index 00000000000..834a33be314 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/monkey.ftl @@ -0,0 +1,22 @@ +ent-PartMonkey = monkey body part + .desc = { ent-BaseItem.desc } +ent-TorsoMonkey = monkey torso + .desc = { ent-PartMonkey.desc } +ent-HeadMonkey = monkey head + .desc = { ent-PartMonkey.desc } +ent-LeftArmMonkey = left monkey arm + .desc = { ent-PartMonkey.desc } +ent-RightArmMonkey = right monkey arm + .desc = { ent-PartMonkey.desc } +ent-LeftHandMonkey = left monkey hand + .desc = { ent-PartMonkey.desc } +ent-RightHandMonkey = right monkey hand + .desc = { ent-PartMonkey.desc } +ent-LeftLegMonkey = left monkey leg + .desc = { ent-PartMonkey.desc } +ent-RightLegMonkey = right monkey leg + .desc = { ent-PartMonkey.desc } +ent-LeftFootMonkey = left monkey foot + .desc = { ent-PartMonkey.desc } +ent-RightFootMonkey = right monkey foot + .desc = { ent-PartMonkey.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/rat.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/rat.ftl new file mode 100644 index 00000000000..75b76ffc853 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/body/parts/animal/rat.ftl @@ -0,0 +1,2 @@ +ent-TorsoRat = animal torso + .desc = { ent-PartAnimal.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/flora.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/flora.ftl new file mode 100644 index 00000000000..5ce89ddac3b --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/flora.ftl @@ -0,0 +1,5 @@ +ent-NewYearTree0 = big tree + .desc = A tree that radiates a magical aura. +ent-NewYearTree1 = new year tree + .desc = Have you been a good boy? + .suffix = PresentsGiver diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/garlands.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/garlands.ftl new file mode 100644 index 00000000000..cee9abdb717 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/garlands.ftl @@ -0,0 +1,6 @@ +ent-GarlandsOff = garlands + .desc = Non-working danglers. Maybe they will turn on when something happens? + .suffix = Off +ent-Garlands = { ent-GarlandsOff } + .desc = Beautiful... Looking at this, you are filled with a New Year's mood. + .suffix = On diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/presents.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/presents.ftl new file mode 100644 index 00000000000..3926be6e3fa --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/objects/decoration/presents.ftl @@ -0,0 +1,11 @@ +ent-BasePresentBox = decoration present + .desc = Beautiful wrapper, disappointing emptiness inside. +ent-BigPresentBox = { ent-BasePresentBox } + .suffix = Big + .desc = { ent-BasePresentBox.desc } +ent-MediumPresentBox = { ent-BasePresentBox } + .suffix = Medium + .desc = { ent-BasePresentBox.desc } +ent-SmallPresentBox = { ent-BasePresentBox } + .suffix = Small + .desc = { ent-BasePresentBox.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/structures/wallmounts/signs/signs.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/structures/wallmounts/signs/signs.ftl new file mode 100644 index 00000000000..b1e6a3e8992 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/corvax/entities/structures/wallmounts/signs/signs.ftl @@ -0,0 +1,2 @@ +ent-SignNewYear = new year sign + .desc = Neon sign. Face in salad and wake up in February. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/debugging/debug_sweps.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/debugging/debug_sweps.ftl index fa8c812d5c4..f34100cb1d8 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/debugging/debug_sweps.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/debugging/debug_sweps.ftl @@ -17,3 +17,10 @@ ent-MeleeDebug100 = bang stick 100dmg .desc = { ent-MeleeDebugGib.desc } ent-MeleeDebug200 = bang stick 200dmg .desc = { ent-MeleeDebugGib.desc } +ent-MeleeDebugSever = bang severer + .desc = sever yer parts a week from now + .suffix = DEBUG +ent-MeleeDebugSever100 = bang severer 100dmg + .desc = { ent-MeleeDebugSever.desc } +ent-MeleeDebugSever200 = bang severer 200dmg + .desc = { ent-MeleeDebugSever.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/fun/immovable_rod.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/fun/immovable_rod.ftl index 4677c7a3074..2921204c810 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/fun/immovable_rod.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/fun/immovable_rod.ftl @@ -1,5 +1,7 @@ ent-ImmovableRod = immovable rod .desc = You can sense that it's hungry. That's usually a bad sign. +ent-ImmovableVoidRod = immovable void rod + .desc = You can sense that it's hungry. That's usually a bad sign. ent-ImmovableRodDespawn = { ent-ImmovableRod } .suffix = Despawn .desc = { ent-ImmovableRod.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/medical/surgery.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/medical/surgery.ftl index a827a1fb4b9..404492e095a 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/medical/surgery.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/medical/surgery.ftl @@ -16,6 +16,10 @@ ent-Retractor = retractor .desc = A surgical tool used to hold open incisions. ent-Hemostat = hemostat .desc = A surgical tool used to compress blood vessels to prevent bleeding. +ent-Bonesetter = bone setter + .desc = Used for setting bones back into place. +ent-BoneGel = bottle of bone gel + .desc = A container for bone gel that often needs to be refilled from a specialized machine. ent-Saw = metal saw .desc = For cutting wood and other objects to pieces. Or sawing bones, in case of emergency. ent-SawImprov = choppa @@ -24,3 +28,11 @@ ent-SawElectric = circular saw .desc = For heavy duty cutting. ent-SawAdvanced = advanced circular saw .desc = You think you can cut anything with it. +ent-EnergyCautery = searing tool + .desc = A cautery with an energy tip, also serves as a drill in its powered state. +ent-EnergyScalpel = energy scalpel + .desc = A scalpel which uses an energy blade, also serves as a saw in its powered state. +ent-AdvancedRetractor = mechanical pinches + .desc = A retractor with mechanical pinches, also serves as a hemostat in its powered state. +ent-OmnimedTool = medical multitool + .desc = { ent-BaseToolSurgery.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/robotics/borg_modules.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/robotics/borg_modules.ftl index 1eb816aea2a..52b358fc0a5 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/robotics/borg_modules.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/specific/robotics/borg_modules.ftl @@ -78,3 +78,7 @@ ent-BorgModuleL6C = L6C ROW cyborg module .desc = A module that comes with a L6C. ent-BorgModuleMartyr = martyr cyborg module .desc = A module that comes with an explosive you probably don't want to handle yourself. +ent-BorgModuleSurgery = surgery cyborg module + .desc = { ent-BaseBorgModuleMedical.desc } +ent-BorgModuleAdvancedSurgery = advanced surgery cyborg module + .desc = { ent-BaseBorgModuleMedical.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/roles/mindroles/mind_roles.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/roles/mindroles/mind_roles.ftl index 46ee653f74a..12829141665 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/roles/mindroles/mind_roles.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/roles/mindroles/mind_roles.ftl @@ -34,3 +34,5 @@ ent-MindRoleInitialInfected = Initial Infected Role .desc = { ent-BaseMindRoleAntag.desc } ent-MindRoleZombie = Zombie Role .desc = { ent-BaseMindRoleAntag.desc } +ent-MindRoleHeretic = Heretic Role + .desc = { ent-BaseMindRoleAntag.desc } diff --git a/Resources/Locale/en-US/store/categories.ftl b/Resources/Locale/en-US/store/categories.ftl index 64ed0b5c637..4ebeff3b237 100644 --- a/Resources/Locale/en-US/store/categories.ftl +++ b/Resources/Locale/en-US/store/categories.ftl @@ -12,7 +12,6 @@ store-category-allies = Allies store-category-job = Job store-category-wearables = Wearables store-category-pointless = Pointless -store-discounted-items = Discounts # Revenant store-category-abilities = Abilities diff --git a/Resources/Locale/en-US/store/store.ftl b/Resources/Locale/en-US/store/store.ftl index a0b349e6a2a..5c1a46339e7 100644 --- a/Resources/Locale/en-US/store/store.ftl +++ b/Resources/Locale/en-US/store/store.ftl @@ -2,8 +2,6 @@ store-ui-default-title = Store store-ui-default-withdraw-text = Withdraw store-ui-balance-display = {$currency}: {$amount} store-ui-price-display = {$amount} {$currency} -store-ui-discount-display-with-currency = {$amount} off on {$currency} -store-ui-discount-display = ({$amount} off!) store-ui-traitor-flavor = Copyright (C) NT -30643 store-ui-traitor-warning = Operatives must lock their uplinks after use to avoid detection. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/abilitties/agillity.ftl b/Resources/Locale/ru-RU/_CorvaxNext/abilitties/agillity.ftl index 0d66248b225..8de32edc57d 100644 --- a/Resources/Locale/ru-RU/_CorvaxNext/abilitties/agillity.ftl +++ b/Resources/Locale/ru-RU/_CorvaxNext/abilitties/agillity.ftl @@ -1,4 +1,2 @@ agility-activated-massage = Способность включена. agility-deactivated-massage = Способность выключена. - - diff --git a/Resources/Locale/ru-RU/_CorvaxNext/accessories/resomi-hair.ftl b/Resources/Locale/ru-RU/_CorvaxNext/accessories/resomi-hair.ftl index f573106d6aa..1d7e63f9e34 100644 --- a/Resources/Locale/ru-RU/_CorvaxNext/accessories/resomi-hair.ftl +++ b/Resources/Locale/ru-RU/_CorvaxNext/accessories/resomi-hair.ftl @@ -1,9 +1,9 @@ marking-HairResomiBackstrafe = Резоми Завихренья -marking-HairResomiBurstShort = Резоми Всклокоченные короткие +marking-HairResomiBurstShort = Резоми Всклокоченные короткие marking-HairResomiDefault = Резоми Обычные marking-HairResomiDroopy = Резоми Обвисшие marking-HairResomiEars = Резоми Уши -marking-HairResomiFluffymohawk = Резоми Пушистый ирокез +marking-HairResomiFluffymohawk = Резоми Пушистый ирокез marking-HairResomiHedge = Резоми Плетень marking-HairResomiLongway = Резоми Коса marking-HairResomiMane = Резоми Грива @@ -15,4 +15,4 @@ marking-HairResomiSpiky = Резоми Колючая marking-HairResomiPointy = Резоми Заостренный marking-HairResomiTwies = Резоми Двойная marking-HairResomiUpright = Резоми Ровная -marking-HairResomiLong = Резоми Длинная +marking-HairResomiLong = Резоми Длинная diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/abilities/heretic.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/abilities/heretic.ftl new file mode 100644 index 00000000000..53e57a2d0b9 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/abilities/heretic.ftl @@ -0,0 +1,57 @@ +## misc + +heretic-ability-fail = Не удалось использовать заклинание +heretic-ability-fail-magicitem = Вы не можете произнести заклинание без концентрации! +heretic-ability-fail-notarget = Не удалось найти цель для заклинания! + +heretic-magicitem-examine = [color=yellow]Данный предмет позволяет вам использовать продвинутые заклинания, пока экипирован или находится в руках.[/color] + +heretic-blade-examine = [color=yellow]После использования в руке, вы сломаете данный клинок и телепортируетесь подальше от опасности.[/color] +heretic-blade-use = Лезвие разлетается на куски, и вы чувствуете, как голоса уводят вас прочь. + + +heretic-rust-mark-itembreak = {$name} разлетается на куски! + +heretic-manselink-fail-exists = Это существо уже связано с вами! +heretic-manselink-fail-nomind = У этого существа отсутствует разум! +heretic-manselink-start = Вы начинаете связывать разум существа со своим. +heretic-manselink-start-target = Вы чувствуете, как ваш разум куда-то утягивает... + +heretic-livingheart-notargets = Нет доступных целей. Посетите руну. +heretic-livingheart-offstation = {$state} в направлении к {$direction}у! +heretic-livingheart-onstation = {$state} в направелии к {$direction}у! +heretic-livingheart-unknown = Он... не в этой реальности. + +## speech +heretic-speech-mansusgrasp = R'CH T'H TR'TH! + +heretic-speech-ash-jaunt = ASH'N P'SSG' +heretic-speech-ash-volcano = V'LC'N! +heretic-speech-ash-rebirth = G'LR'Y T' TH' N'GHT'W'TCH'ER! +heretic-speech-ash-flame = FL'MS!! +heretic-speech-ash-cascade = C'SC'DE!! + +heretic-speech-blade-furioussteel = F'LSH'NG S'LV'R! + +heretic-speech-flesh-surgery = CL'M M'N! +heretic-speech-flesh-worm = REALITY UNCOIL!! + +heretic-speech-rust-spread = A'GRSV SPR'D +heretic-speech-rust-plume = 'NTR'P'C PL'M' + +heretic-speech-void-blast = F'RZ'E! +heretic-speech-void-phase = RE'L'T' PH'S'E! +heretic-speech-void-pull = BR'NG F'RTH TH'M T' M'!! + +heretic-speech-cleave = CL'VE +heretic-speech-bloodsiphon = FL'MS O'ET'RN'ITY +heretic-speech-mansuslink = PI'RC' TH' M'ND +heretic-speech-realignment = R'S'T +heretic-speech-fuckoff = F'K 'FF!! + + +## technically applied to heretic's spawns only but it stays here because why not. +heretic-speech-blind = E'E'S +heretic-speech-emp = E'P +heretic-speech-shapeshift = SH'PE +heretic-speech-link = PI'RC' TH' M'ND diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/administration/antag.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/administration/antag.ftl new file mode 100644 index 00000000000..62ce0d5ae19 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/administration/antag.ftl @@ -0,0 +1,2 @@ +admin-verb-make-heretic = Обратите цель в Еретика. +admin-verb-text-make-heretic = Сделать Еретиком diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/contraband/contraband-severity.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/contraband/contraband-severity.ftl new file mode 100644 index 00000000000..dccdaf6bdde --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/contraband/contraband-severity.ftl @@ -0,0 +1 @@ +contraband-examine-text-magic = [color=purple]Этот предмет является контрабандой с магическими свойствами![/color] diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/game-ticking/game-presets/preset-heretic.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/game-ticking/game-presets/preset-heretic.ftl new file mode 100644 index 00000000000..b687bd717dd --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/game-ticking/game-presets/preset-heretic.ftl @@ -0,0 +1,40 @@ +heretic-roundend-name = еретик + +roundend-prepend-heretic-ascension-success = {$name}, [color=green] достигнул Вознесения![/color] +roundend-prepend-heretic-ascension-fail = {$name}, [color=red] канул в небытие![/color] +roundend-prepend-heretic-knowledge-named = [color=white]{$name}[/color] постигнул [color=purple]{$number}[/color] незримых искусств. + +heretic-gamemode-title = Еретики +heretic-gamemode-description = + На станции обнаружена пространственная аномалия. Дополнительных данные отсутствуют. + +heretic-role-greeting-fluff = + Очередной день за бессмысленной работой. Вы замечаете странное мерцание вокруг себя, когда вдруг осознаете, что в воздухе перед вами витает что-то загадочное. Вы заглядываете внутрь и обнаруживаете нечто, что изменит вашу жизнь навсегда. + + Врата Мансуса распахиваются перед вашим разумом. + +heretic-role-greeting = + Вы - еретик! + + Узнать больше информации о своей роли вы можете в руководстве. + +heretic-role-greeting-short = + Вы - еретик! + Дабы изучить Финальный Ритуал и Вознестись, вы должны выполнить свои цели. + +## ghoul +heretic-ghoul-greeting = + {CAPITALIZE($ent)} призвал вас в этот мир! + Вы должны помочь своему мастеру преодолеть путь к Вознесению и защищать его любой ценой! + Ты можешь последовать за другими еретиками, если твой мастер не подлежит воскрешению. +heretic-ghoul-greeting-noname = + Вы были призваны в этот мир сверхъестественными силами. + Выполняйте приказы своих мастеров, несмотря ни на что. + +ghostrole-ghoul-name = Гуль +ghostrole-prophet-name = Нечестивый Проповедник +ghostrole-stalker-name = Гончий Плоти +ghostrole-ghoul-desc = Помогите мастеру достичь Вознесения. +ghostrole-prophet-desc = Помогите мастеру достичь Вознесения. Создайте с связь с остальными последователями посредством Зова Мансуса. +ghostrole-stalker-desc = Помогите мастеру достичь Вознесения. Перемещайтесь сквозь стены с помощью способности и саботируйте освещение. +ghostrole-ghoul-rules = Вы являетесь [color=red][bold]Командным антагонистом[/bold][/color] и действуете с тем, кто вас призвал, и остальными сверхъестественными существами. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/guidebook/guides.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/guidebook/guides.ftl new file mode 100644 index 00000000000..f43b0f00cf1 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/guidebook/guides.ftl @@ -0,0 +1 @@ +guide-entry-heretics = Еретики diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/ascensions.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/ascensions.ftl new file mode 100644 index 00000000000..aa9616b1596 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/ascensions.ftl @@ -0,0 +1,85 @@ +heretic-ascension-ash = + Дозорный - пал + Сгорел и Страж Ночи. + Но его пламенный светоч + Всё ещё теплится в печи. + + И помнит древний ритуал + Тот еретик, что вечность спал. + И возродится древний взор + Он есть единое с огнём. + + И вновь очнётся древний бог + Настанет его вознесенье... + И пепел близит тёмный рок + Не будет никому спасения... + +heretic-ascension-blade = + Чемпион, что был разорван, + На свободу вновь выходит! + Скоро стану я свободен, + Кровь амбиций вновь кипит! + + Дух никем не превзойдённый, + Стальных лезвий бурю зрит. + Пусть и взор твой укорённый, + Вознесенье укрепит. + +heretic-ascension-lock = + Распорядитель мною двигал, + А я двигал им в ответ. + Для меня замок - предатель, + Ключ-клинок и его нет. + + Лабиринт теперь открытый, + На свободе тёплый свет. + Раз он больше не закрытый, + Стань свидетелем побед. + +heretic-ascension-flesh = + С ведом Маршала отныне, + Моя сила без границ! + Трон неведомый доныне, + Ожидает вновь десниц. + + Те, кто проживают в мире... + Вы услышьте голос мой. + Скоро сгинете в пучине + Маршал всех отправит в бой. + + И в конце, на тех обломках, + Что не тронуты войной, + Воспоёт Владыка ночи! + Ты ж свидетельствуй со мной. + +heretic-ascension-void = + Мир вновь окунётся в омут + Тьма накроет небосвод, + Космолёта слышен ропот... + С неба сыпет хладный лёд. + + На борту моего судна + Стоит тьмы аристократ + Речь его очень разумна + Руки в вальс меня манят + + Пока мёртвая реальность + Тихо стонет за окном + Пустота загубит радость + Мы свидетели вдвоём. + +heretic-ascension-rust = + Чемпион ржавчины, + Поработитель стали! + Страх вечной тьмы, + Разложения стали. + + Выковал я, + ржавчины след + Холмы разложения, + Дайте ответ + + Ковкий удар + Означает Конец! + Освидетельствуй мне, + Звук победы, юнец. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/misc.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/misc.ftl new file mode 100644 index 00000000000..2f6718b72db --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/misc.ftl @@ -0,0 +1,4 @@ +heretic-influence-start = Накапливаем влияние... +heretic-ritualrune-examine = Текущий ритуал: [color=yellow]{ $rit }[/color] +heretic-knowledge-gain = Вы что-то узнали +heretic-knowledge-loss = Вы что-то забыли diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/rituals.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/rituals.ftl new file mode 100644 index 00000000000..9967ada2201 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/heretic/rituals.ftl @@ -0,0 +1,54 @@ +heretic-ritual-unknown = Неизвестный ритуал +heretic-ritual-switch = Выбранный ритуал: {$name} +heretic-ritual-success = Ритуал проведен успешно + +heretic-ritual-fail-items = Ритуал не был проведён. Требуемые предметы: {$itemlist} +heretic-ritual-norituals = Вы не знаете ни одного ритуала! +heretic-ritual-noritual = Ритуал не выбран! + +heretic-ritual-basic-sacrifice = Сердцебиение Мансуса +heretic-ritual-basic-sacrifice-desc = Используйте одну из целей в критическом или мертвом состоянии, чтобы принести ее в жертву Мансусу, получив за это одно очко знаний. Принесение в жертву глав отделов дает бонусное очко. + +heretic-ritual-basic-focus = Янтарная Призма +heretic-ritual-basic-focus-desc = Преобразуйте осколок стекла и пару глаз в Янтарную Призму. Небольшое ожерелье, позволяющее произносить сложные заклинания без необходимости держать в руке Кодекс. + +heretic-ritual-basic-heart = Беспокойное сердцебиение +heretic-ritual-basic-heart-desc = Возьмите с собой одно сердце, ручку и бумагу, чтобы сбросить ваши цели жертвоприношений. Будьте внимательны, ведь вы можете сбросить те же цели, что и раньше. Используйте это только в случае крайней необходимости. + +heretic-ritual-fail-sacrifice = Нет тела для жертвоприношения. +heretic-ritual-fail-reagentpuddle = Не имеется следующего реагента: {$reagentname}. +heretic-ritual-fail-temperature-hot = Здесь слишком жарко. +heretic-ritual-fail-temperature-cold = Здесь недостаточно холодно. +heretic-ritual-fail-sacrifice-ash = Недостаточно мертвых или горящих. +heretic-ritual-fail-sacrifice-ineligible = Руна отказывается принять эту жертву. + +heretic-ritual-basic-codex = Кодекс Цикатрикс +heretic-ritual-basic-codex-desc = Преобразуйте пару глаз, книгу и перо в Кодекс Цикатрикс. Он позволяет произносить продвинутые заклинания, пока вы держите его открытым, и получать в два раза больше влияния от разломов реальности. Вы держите один прямо сейчас. + +## side quests +heretic-ritual-side-knowledge = Ритуал Знания +heretic-ritual-side-shark = Обжигающая Акула +heretic-ritual-side-cloak = Пустотный Плащ +heretic-ritual-side-ghoul = Ритуал Обращения +heretic-ritual-side-armor = Ритуал Бронника +heretic-ritual-side-water = Ритуал Жреца +heretic-ritual-side-knife = Ритуальный Нож +heretic-ritual-side-crucible = Колдовской Котёл +heretic-ritual-side-coin = Жуткая Монета + +## ash path +heretic-ritual-ash-blade = Таинство Ночного Стража +heretic-ritual-ash-grasp = Хватка Пепла +heretic-ritual-ash-mask = Маска Безумия +heretic-ritual-ash-ascend = Коронация Владыки Пепла + +## flesh path +heretic-ritual-flesh-blade = Принцип Голода +heretic-ritual-flesh-ghoul = Несовершенный Ритуал +heretic-ritual-flesh-prophet = Нечестивый Ритуал +heretic-ritual-flesh-stalker = Ритуал Одиночки +heretic-ritual-flesh-ascend = Последняя Песнь Жреца + +## void path +heretic-ritual-void-blade = Дыхание Зимы +heretic-ritual-void-ascend = Вальс Конца Времён diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/objectives/heretic.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/objectives/heretic.ftl new file mode 100644 index 00000000000..9e1a87d0db3 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/objectives/heretic.ftl @@ -0,0 +1,7 @@ +objective-issuer-heretic = [color=#8e24aa]Мансус[/color] + +objective-condition-knowledge-title = Изучите как минимум {$count} знаний из Мансуса. +objective-condition-sacrifice-title = Принесите в жертву {$count} членов экипажа. +objective-condition-sacrifice-head-title = Принесите в жертву {$count} глав станции. + +objective-condition-description-ascend = Я обязан сделать это во имя Вознесения! diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/radio_channels.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/radio_channels.ftl new file mode 100644 index 00000000000..66cd5ad00d5 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/radio_channels.ftl @@ -0,0 +1 @@ +chat-radio-mansus = Связь Обители diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/roles/heretic.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/roles/heretic.ftl new file mode 100644 index 00000000000..b319741b540 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/roles/heretic.ftl @@ -0,0 +1,2 @@ +roles-antag-heretic-name = Еретик +roles-antag-heretic-description = Находите разломы, убедитесь, что они все собраны. Приносите людей в жертву и обретите могущество (или умрите). diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/currency.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/currency.ftl new file mode 100644 index 00000000000..a718aca4d7b --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/currency.ftl @@ -0,0 +1 @@ +store-currency-display-knowledgepoint = Очки Знаний diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/categories.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/categories.ftl new file mode 100644 index 00000000000..b7d3d367be3 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/categories.ftl @@ -0,0 +1,7 @@ +store-heretic-path-ash = Путь Пепла +store-heretic-path-lock = Путь Замка +store-heretic-path-flesh = Путь Плоти +store-heretic-path-void = Путь Пустоты +store-heretic-path-rust = Путь Ржавчины +store-heretic-path-blade = Путь Лезвия +store-heretic-path-side = Второстепенные знания diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-ash.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-ash.ftl new file mode 100644 index 00000000000..a1f699397e6 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-ash.ftl @@ -0,0 +1,65 @@ +knowledge-path-ash-s1-name = Таинство Ночного Стража +knowledge-path-ash-s1-desc = + Стража города знает о дозорных. Если спросить о них в ночное время, они могут рассказать вам о пепельном фонаре.. + + Открывает вам Путь Пепла. + Позволяет превратить спичку и нож в Клинок Пепла. + +knowledge-path-ash-s2-name = Хватка Пепла +knowledge-path-ash-s2-desc = + Ночной Страж был первым из них. Его предательство послужило началом всему. Их фонари - сгорали пеплом, а взор их - угасал. + + Хватка Пепла выжжет глаза вашей жертвы, затуманя ей взгляд и нанеся ей урон. + +knowledge-path-ash-s3-name = Пепельный Сдвиг +knowledge-path-ash-s3-desc = + Он знал, как проходить сквозь материю... + + Дарует вам Пепельный Сдвиг, заклинание, позволяющее выпасть из реальности и пройти небольшое расстояние, проходя сквозь любые стены. + +knowledge-path-ash-s4-name = Метка Пепла +knowledge-path-ash-s4-desc = + Он был особенным человеком, ведя дозор лишь тьме ночной + Но, несмотря на свои обязанности, он часто проходил у дома пастора, держа свою тлеющую лампу высоко над землёй. + Он ярко светил в темноте, пока пламя не начало угасать. + + Хватка Пепла теперь применяет Метку Пепла. Метка применяется после атаки Клинком Пепла. + При активации жертва получает урон по выносливости и ожогам, а метка переносится на ближайшую жертву. + +knowledge-path-ash-s5-name = Вулканический Взрыв +knowledge-path-ash-s5-desc = + Никакой огонь не был достаточно горячим, чтобы разжечь их вновь. Никакой огонь не был достаточно ярким, чтобы спасти их. Никакой огонь не вечен. + + Дарует вам "Вулканический Взрыв" - заклинание, которое запускает огненный шар в ближайшую жертву. + При успешном попадании огненный шар распадается на множество более мелких огненных шаров, нацеленных на другие близлежащие цели. + +knowledge-path-ash-s6-name = Маска Безумия +knowledge-path-ash-s6-desc = + Однажды Ночной Сторож исчез. Так считал Дозор. Но он перемещался по миру, незамеченный обществом. + + Позволяет превратить любую маску, четыре свечки, дубинку-шокер, и печень в Маску Безумия. + Маска вселяет страх в окружающих, вызывая снижение выносливости, галлюцинации и безумие. + Ее также можно надеть на жертву, чтобы она не смогла ее снять... + +knowledge-path-ash-s7-name = Огненное Лезвие +knowledge-path-ash-s7-desc = + Он вернулся. Клинком в руках он взмахивал и взмахивал, пока с небес не посыпался пепел. + Его город... Люди, за которыми он клялся присматривать... Смотрел он теперь, как все они сгорали дотла. + + Теперь ваш клинок поджигает врагов при атаке. + +knowledge-path-ash-s8-name = Пламенное Перерождение +knowledge-path-ash-s8-desc = + Пожар был неизбежен, и даже так, Жизнь еще теплилась в его обугленном теле. Ночной Сторож был особенным человеком, всегда оставаясь начеку. + + Дарует вам "Пламенное Перерождение", заклинание, что тушит вас и наносит урон огнем всем ближайшим сущностям, находящимся в огне, регенерируя ваше здоровье за каждую жертву, задетую способностью. + Если жертва находится в критическом состоянии, она мгновенно умирает. + +knowledge-path-ash-s9-name = Коронация Владыки Пепла +knowledge-path-ash-s9-desc = + Ритуал вознесения Пути Пепла + Привнеси 3 горящих или сгоревших тела на руну Трансмутации для завершения ритуала. + Когда будет завершён, вы станете предвестником пламени, получая две способности. + Первая - "Каскад", который вызывает широкое, расширяющееся кольцо пламени вокруг вас. + Вторая - "Клятва Пламени", которая пассивно создает кольца пламени во время вашего передвижения. + Также вы становитесь невосприимчивым к огню, нахождению в космосе, и похожим угрозам. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-blade.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-blade.ftl new file mode 100644 index 00000000000..edfa47d2462 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-blade.ftl @@ -0,0 +1,41 @@ +knowledge-path-blade-s2-name = Хватка Лезвия +knowledge-path-blade-s2-desc = Ваша Хватка Лезвия теперь наносит дополнительный урон и увеличивает время оглушения, если ваша жертва лежит на полу или стоит к вам спиной. + +knowledge-path-blade-s3-name = Танец с Мечом +knowledge-path-blade-s3-desc = + Если вы будете атакованы с Посеребрённым Клинком в руке, вы немедленно совершите контратаку в атакующего. + Данный эффект срабатывает только раз в 20 секунд. + +knowledge-path-blade-s4-name = Метка Лезвия +knowledge-path-blade-s4-desc = + Ваша Хватка Мансуса теперь оставляет на целях Метку Лезвия. + Цели, отмеченные данной меткой, будут заперты внутри небольшой комнаты-ловушки, и они не смогут покинуть эту комнату, пока действует сила Метки. + Атака отмеченной цели освободит её, но дарует вам вращающийся вокруг вас нож, защищающий от атаки любого типа урона и силы. Действует на протяжении минуты. + +knowledge-path-blade-s6-name = Перегруппировка +knowledge-path-blade-s6-desc = + Дарует вам заклинание "Перегруппировка". Быстро восстанавливает выносливость и снимает все эффекты оглушения. Во время действия заклинания вы не сможете наносить удары. + Имеет короткое базовое время восстановления, но при последовательном использовании оно увеличивается. + +knowledge-path-blade-s7-name = Стойка Рассеченного Чемпиона +knowledge-path-blade-s7-desc = + Вы получаете повышенную устойчивость к кровопотере из-за ран и полный иммунитет к расчленению. + Кроме того, когда ваш запас здоровья падает ниже 50% от максимального, вы получаете повышенную устойчивость к любым ранениям и оглушению электрошоковыми дубинками. + +knowledge-path-blade-s8-name = Молниеносное Лезвие +knowledge-path-blade-s8-desc = + Теперь вы можете атаковать цели, удерживая два Посеребрённых Клинка в двух руках. + Данная атака нанесёт сразу два удара, но второй удар будет чуть слабее. + +knowledge-path-blade-s9-name = Яростная Сталь +knowledge-path-blade-s9-desc = + Дарует вам заклинание "Яростная Сталь". Призывает три вращающихся вокруг вас клинка. + Эти ножи защитят вас от любой атаки, но расходуются при использовании. + Также, вы можете выстрелить одним из этих ножей, нанося урон и кровотечение, ценой траты этого самого ножа. + +knowledge-path-blade-s10-name = Серебряный Вихрь +knowledge-path-blade-s10-desc = + Трансмутируйте 3 трупа, чтобы принять Возвыситься. + Вы получите постоянно восстанавливающееся кольцо из вращающихся вокруг вас лезвий, которое защитит вас от любых атак. Ножи тратятся при каждом попадании по ним. + Ваш Посеребрённый Клинок теперь наносит колоссальное количество урона, а также обладает небольшим вампиризмом. + Также, вы становитесь полностью неуязвимым к оглушению и травмам, а время перезарядки заклинания "Яростная Сталь" будет уменьшено. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-flesh.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-flesh.ftl new file mode 100644 index 00000000000..0fde7ce5910 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-flesh.ftl @@ -0,0 +1,72 @@ +knowledge-path-flesh-s1-name = Принцип Голода +knowledge-path-flesh-s1-desc = + Сотнями мы голодали. Но не я. Я нашел силу в своей жадности. + + Открывает вам Путь Плоти + Трансмутируйте нож и лужу крови, чтобы получить Клинок Плоти. + +knowledge-path-flesh-s2-name = Хватка Плоти +knowledge-path-flesh-s2-desc = + Мои новые желания возносили меня все выше и выше. + + Благодаря вашей "Хватке Плоти" вы получаете возможность создавать из трупа прислужника-гуля. + У гулей всего 50 единиц здоровья, и на взгляд ваших жертв, они выглядят как хаски, но могут эффективно использовать Клинки Плоти. + +knowledge-path-flesh-s3-name = Несовершенный Ритуал +knowledge-path-flesh-s3-desc = + Я нашел незаконченные записи о темном ритуале... и все же я действовал. + + Позволяет преобразовать труп и цветок мака, чтобы создать Безгласного Мертвеца. + У трупа не обязательно должна быть душа. + Безгласные мертвецы - это немые гули, у которых всего 100 единиц здоровья, но они могут эффективно использовать Клинки Плоти. + +knowledge-path-flesh-s4-name = Метка Плоти +knowledge-path-flesh-s4-desc = + Тогда-то я и увидел их, помеченных. Они были вне досягаемости. Они кричали и плакали. + + Ваша Хватка Мансуса теперь оставляет на целях Метку Плоти. Метка активируется от атаки Клинком Плоти. + При активации жертва выплескивает всю кровь из своего тела на пол. + +knowledge-path-flesh-s5-name = Переплетение Плоти +knowledge-path-flesh-s5-desc = + Но недолго были они недосягаемы. С каждым шагом их крики усиливались, когда наконец... + Я смог заставить их молчать. + + Дарует вам заклинание "Переплетение Плоти". Оно позволяет вам вытаскивать органы из жертв + без нужды в длинной хирургической операции. Данный процесс будет происходить дольше, если цель жива. + Данное заклинание также позволяет лечить своих прислужников или восстанавливать органы. + +knowledge-path-flesh-s6-name = Нечестивый Ритуал +knowledge-path-flesh-s6-desc = + Взор мой слаб был, + Я создал + Существо, что не видал. + Громкие крики - больше не боль + Видом страданий обрадуть изволь. + + Позволяет трансмутировать пару глаз, желудок и лужу крови, чтобы провести заклинание "Нечестивый Ритуал" + Существа, создаваемые этим заклинанием, имеют большой радиус прохождения сквозь стены и способностью соединять разумы для коммуникации, однако они очень слабы в бою. + +knowledge-path-flesh-s7-name = Кровоточащая Сталь +knowledge-path-flesh-s7-desc = + Странник был не единственным. Они привели меня к Маршалу. + Наконец я всё осознал. Да прольется же кровь из рая. + + Ваш Клинок Плоти теперь наносит обильное кровотечение вашим жертвам при ударе. + +knowledge-path-flesh-s8-name = Ритуал Одиночки +knowledge-path-flesh-s8-desc = + В одиночестве я был, как в пустыне без воды, + Но вызвал я Чудовище в ночи. + Крики, что когда-то были громки и страшны, + Запели эхом жалким, словно тени тишины. + + Позволяет трансмутировать сердце, желудок, лёгкие и ручку, чтобы создать Гончего Плоти. + Данные существа умеют проходить сквозь стены на дальние расстояние, сильны в бою и могут создавать разряды ЭМИ. + +knowledge-path-flesh-s9-name = Последняя Песнь Жреца +knowledge-path-flesh-s9-desc = + Ритуал Вознесения в выбранном Пути Плоти. Принесите четыре трупа на руну трансмутации, чтобы завершить ритуал. + По окончании вы получите способность сбросить с себя вашу человеческую форму и стать Лордом Ночи, чрезвычайно могущественным существом. + Один лишь процесс трансформации вызывает у жертв дрожь и страх. + Будучи в форме Лорда Ночи, вы можете поедать существ для самолечения. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-lock.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-lock.ftl new file mode 100644 index 00000000000..2fe13c0f460 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-lock.ftl @@ -0,0 +1,42 @@ +knowledge-path-lock-s1-name = Секрет Дворецкого +knowledge-path-lock-s1-desc = Следуйте Пути Замка. Трансмутируйте нож и монтировку в ключ-клинок. + +knowledge-path-lock-s2-name = Замочная Хватка +knowledge-path-lock-s2-desc = Позволяет вам получить доступ к любым устройствам, будь то шлюзы или консоли. + +knowledge-path-lock-s3-name = Бремя Ключника +knowledge-path-lock-s3-desc = + Трансмутируйте лист стали и ID-карту в Загадочную Карту + Может поглощать ID-карты и принимать их внешний вид. + Может соединять два шлюза для создания порталов. Жертвы будут телепортироваться случайным образом. Эффект может быть изменен по желанию. + +knowledge-path-lock-s4-name = Замочная Метка +knowledge-path-lock-s4-desc = + Ваша Замочная Хватка применяет метку с замком при попадании. + Атакуйте помеченную жертву своим клинком, чтобы заболтировать ближайшие шлюзы. + +knowledge-path-lock-s6-name = Ритуал Портье +knowledge-path-lock-s6-desc = + Трансмутируйте мелок, деревянную доску и мультитул, чтобы создать + Transmute a crayon, a wooden plank, and a multitool to create a Рукопись Лабиринта. + Вы можете использовать его на дальнем спрайте, чтобы материлизовать баррикаду на восемь секунд. Проходить через неё можете только вы и антимагические сущности. + Имеет три использования. + +knowledge-path-lock-s7-name = Ловкость Взломщика +knowledge-path-lock-s7-desc = + Дарует "Ловкость Взломщика", заклинание, позволяющее получить доступ к содержимому рюкзака жертвы без её ведома. + +knowledge-path-lock-s8-name = Открывающий Клинок +knowledge-path-lock-s8-desc = Теперь у вашего клинка есть шанс вызвать при атаке эффект отталкивания. + +knowledge-path-lock-s9-name = Последнее Прибежище Сторожа +knowledge-path-lock-s9-desc = + Дарует "Последнее Прибежище Сторожа", заклинание, позволяющее сделать самого себя прозрачным и проходимым. + Находясь под действием этого заклинания, вы не можете получать урон, но и не сможете пользоваться руками или заклинаниями. + Это заклинание может быть отменено после удара антимагическим предметом, и не может быть применено вблизи других живых существ. + +knowledge-path-lock-s10-name = Раскрой Лабиринт +knowledge-path-lock-s10-desc = + Трансмутируйте три трупа на руне для Вознесения. + Вы получаете способность превращаться в могущественных сверхъестественных существ и создадите прореху в Сердце Лабиринта, расположенную на месте проведения ритуала, + из которой будут бесконечно выходить различные сверхъестественные существа, подчиняющиеся вашим командам. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-rust.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-rust.ftl new file mode 100644 index 00000000000..4625063b8fd --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-rust.ftl @@ -0,0 +1,34 @@ +knowledge-path-rust-s1-name = Сказ Чёрнолитейщика +knowledge-path-rust-s1-desc = Следуйте Пути Ржавчины. Трансмутируйте нож и любой мусор в Клинок Ржавчины. + +knowledge-path-rust-s2-name = Хватка Ржавчины +knowledge-path-rust-s2-desc = + Ваша хватка наносит 100 урона неорганической материи, заставляя ржаветь любые поверхности или механизмы. Стены, которые были ржавыми до заклинания, разрушатся. + +knowledge-path-rust-s3-name = Иссушающая Поступь +knowledge-path-rust-s3-desc = Вы медленно излечиваете свои раны и получаете сопротивление к падению в стаминакрит от электрошоковых дубинок, находясь на ржавых тайлах. + +knowledge-path-rust-s4-name = Метка Ржавчины +knowledge-path-rust-s4-desc = Ваша Хватка Ржавчины оставляет метку при попадании по живой цели. Атакуйте помеченную жертву клинком, чтобы разрушить предмет, который они держат в руках. + +knowledge-path-rust-s6-name = Возведение Ржавчины +knowledge-path-rust-s6-desc = + Дарует заклинание "Возведение Ржавчины", позволяющее воздвигать прочные стены из ржавчины. + Любое существо, находящееся на месте возведения стены, будет ранено и откинуто в сторону, включая вас. + +knowledge-path-rust-s7-name = Агрессивное Распространение +knowledge-path-rust-s7-desc = Ржавчина распространяется на близлежащие тайлы. Уже проржавевшие стены разрушаются. + +knowledge-path-rust-s8-name = Ядовитое Лезвие +knowledge-path-rust-s8-desc = Ваш клинок наносит ядовитый урон тем, на кого вы нападаете. + +knowledge-path-rust-s9-name = Веяние Энтропии +knowledge-path-rust-s9-desc = + Дарует "Веяние Энтропии", заклинание, испускающее волну чистой энтропии, которая будет дизориентировать, + ослеплять и отравлять ваших жертв, заставляя их врезаться друг в друга. Также, оно распространяет ржавчину в радиусе действия. + +knowledge-path-rust-s10-name = Клятва Вестника Разложения +knowledge-path-rust-s10-desc = + Трансмутируйте три трупа на мостике станции, чтобы Вознестись. + Будучи на ржавых тайлах, вы лечитесь в три раза быстрее и получаете сопротивление другим различным эффектам. + Ржавчина также распространяется от ритуальной руны, медленно покрывая всю станцию. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-side.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-side.ftl new file mode 100644 index 00000000000..e65b8be3765 --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-side.ftl @@ -0,0 +1,66 @@ +## stage 3 + +knowledge-path-side-s3-armor-name = Ритуал Бронника +knowledge-path-side-s3-armor-desc = + Ржавые Холмы приветствовали Кузнеца своей щедростью. И Кузнец ответил на их щедрость тем же. + + Позволяет трансмутировать стол и противогаз в жуткую броню. + Жуткая броня обеспечивает отличную защиту, а также помогает с Концентрацией, когда надет капюшон. + +knowledge-path-side-s3-flask-name = Ритуал Жреца +knowledge-path-side-s3-flask-desc = + Трансмутируйте резервуар с водой в колбу с жуткой водой. + При употреблении эта вода немного исцеляет еретиков и немного причиняет боль жертвам. + +## stage 5 +knowledge-path-side-s5-name = Ритуал Знания +knowledge-path-side-s5-desc = + Вы изучаете специальный одноразовый ритуал, для выполнения которого требуются 4 различных предмета, + от различных органов до свечей и электрошоковых дубинок. + Выполнение этого ритуала дает вам 4 очка знаний и восстанавливает количество необходимых предметов. + +knowledge-path-side-s7-sphase-name = Пространственный Сдвиг +knowledge-path-side-s7-sphase-desc = + Дарует "Пространственный Сдвиг", заклинание, позволяющее свободно перемещаться по космосу. + Вы входить и выходить из Сдвига только на тайле космоса или на тайлах, таких как решетки и мостики. + +knowledge-path-side-s7-uncuff-name = Волна отчаяния +knowledge-path-side-s7-uncuff-desc = + Дарует "Волна отчаяния", заклинание, которое может быть применено только в закованном состоянии. + Снимает ваши оковы и сбивает с ног окружающих вас людей, а также применяет к ним эффект "Хватки Мансуса". + Стресс, вызванный использованием этого заклинания, вызывает у вас сильную сонливость через 12 секунд после его произнесения. + +knowledge-path-side-s7-siphon-name = Перекачка Крови +knowledge-path-side-s7-siphon-desc = + Дарует "Перекачка Крови", заклинание, которое крадет частичку жизненной силы у вашей жертвы, восполняя уровень вашей крови и здоровья. + Кроме того, с небольшим шансом полученные вами раны будут перенесены на цель. + +knowledge-path-side-s7-knife-name = Ритуальный Нож +knowledge-path-side-s7-knife-desc = + Трансмутируйте нож, осколок стекла и лист бумаги в Ритуальный Нож. + С помощью него вы можете создавать на полу до 3 рисунков, которые оказывают различное воздействие на жертв, которые по ним ходят. + +knowledge-path-side-s7-crucible-name = Колдовской котёл +knowledge-path-side-s7-crucible-desc = + Это была сущая мука. Я не смог вспомнить образ Аристократа, + но, с помощью Жреца, я нашел другой рецепт... + + Позволяет трансмутировать резервуар для воды и стол в Колдовской котёл. + Колдовской котёл позволяет варить мощные боевые и полезные зелья, но в промежутках между его использованием необходимо использовать части тела и органы. + +## stage 9 +knowledge-path-side-s9-coin-name = Жуткая монета +knowledge-path-side-s9-coin-desc = + Трансмутируйте одну часть твердой плазмы, алмаз и пару глаз в Жуткую Монету. + Монета откроет ближайшие воздушные шлюзы, если упадет на орел, и заблокирует их, если упадет на решку. + При ее использовании в воздушном шлюзе монета будет потрачена впустую, а воздушный шлюз будет открыт навсегда. + Попытка подбросить монету или использовать ее как не-еретик нанесет урон от тупой урон или ожоги, в зависимости от того, на какую сторону она упадет. + +knowledge-path-side-s9-ashman-name = Пепельный Ритуал +knowledge-path-side-s9-ashman-desc = + Преобразуйте кучку пепла, мозг и книгу, чтобы вызвать Пепельника + Пепельники могут проходить сквозь стены, наносить кровоточащие раны и извергать большие волны огня. + +knowledge-path-side-s9-cleave-name = Рассечение +knowledge-path-side-s9-cleave-desc = + Дарует "Рассечение", дальнобойное заклинание, которое наносит урон огнём и сильные кровоточащие раны цели и окружающим ее людям. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-void.ftl b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-void.ftl new file mode 100644 index 00000000000..eb696b600dc --- /dev/null +++ b/Resources/Locale/ru-RU/_CorvaxNext/heretic/store/heretic/heretic-catalog-void.ftl @@ -0,0 +1,66 @@ +knowledge-path-void-s1-name = Дыхание Зимы +knowledge-path-void-s1-desc = + Я чувствую мерцание в воздухе, воздух вокруг меня становится холоднее. + Я начинаю осознавать пустоту существования. Что-то наблюдает за мной. + + Открывает Путь Пустоты. + Позволяет превратить нож при минусовой температуре в Кинжал Пустоты. + +knowledge-path-void-s2-name = Хватка Пустоты +knowledge-path-void-s2-desc = + Я увидел хладного наблюдателя, который следит за мной. Внутри меня нарастает холод. + Они молчат. Это еще не конец тайны. + + Ваша Хватка Пустоты временно охладит и заглушит жертву. + +knowledge-path-void-s3-name = Путь Аристократа +knowledge-path-void-s3-desc = + Я нашел нить холодного дыхания. Она привела меня к странному святилищу, полностью сделанному из кристаллов. + Передо мной стояло полупрозрачное белое изображение аристократа. + + Дает вам иммунитет к низким температурам и избавляет от необходимости дышать. + Вы все ещё можете получить повреждения из-за недостаточного давления. + +knowledge-path-void-s4-name = Метка Пустоты +knowledge-path-void-s4-desc = + Порыв ветра? Мерцание в воздухе? Чье-то присутствие ошеломляет, мои чувства начали предавать меня. Мой разум - мой собственный враг. + + Теперь ваша Хватка Пустоты накладывает Метку Пустоты. Метка активируется при атаке Клинком Пустоты. + При срабатывании она заставляет жертву замолчать на больший срок и быстро понижает температуру ее тела и воздуха вокруг нее. + +knowledge-path-void-s5-name = Пустотный Взрыв +knowledge-path-void-s5-desc = + Каждая дверь, которую я открываю, оставляет на моем теле муражки. Я боюсь того, что находится за ними. Кто-то ждет меня. + У меня подкашиваются ноги. Это... снег? + + Дарует вам "Пустотный Взрыв", заклинание, выбрасывающее замораживающий заряд в конусообразной плоскости перед вами, + замораживая пол и жертв при попадании. + +knowledge-path-void-s6-name = Пустотный Сдвиг +knowledge-path-void-s6-desc = + Существо называет себя Аристократом. Они легко перемещаются по воздуху, словно ничто, оставляя за собой резкий, холодный ветерок. + Они исчезают, а я остаюсь посреди метели. + + Дарует вам "Пустотный Сдвиг", заклинание, позволяющее телепортироваться на большие расстояния. + Дополнительно оглушает жертв вокруг вас и места телепортации. + +knowledge-path-void-s7-name = Клинок Преследования +knowledge-path-void-s7-desc = + Мимолетные воспоминания, мимолетные шаги. Я отмечаю свой путь замерзшей кровью на снегу. Покрытый снегом и забытый. + + Ваш клинок замораживает врагов. Кроме того, когда цель будет отмечена, активируйте Клинок Пустоты в своей руке, чтобы телепортироваться прямо к ней, не сломав клинок. + +knowledge-path-void-s8-name = Пустотная Тяга +knowledge-path-void-s8-desc = + Все мимолетно, но что еще остается? Я близок к завершению начатого. + Аристократы снова открываются мне. Они говорят мне, что я опаздываю. Их притяжение огромно, я не могу отказаться. + + Дарует вам "Пустотная Тяга", заклинание, пртягивающее ближайших к вам жертв, ненадолго оглушая их. + +knowledge-path-void-s9-name = Вальс Конца Времён +knowledge-path-void-s9-desc = + Ритуал Вознесения на Пути Пустоты. + Чтобы завершить ритуал, принесите 3 трупа к руне трансмутации при минусовой температуре. + По завершении вы получите благословение Аристократа. + Все вокруг вас превратится в снег, а воздух будет постоянно замерзать. Те, кто находится поблизости, будут заглушены и сразу же заморожены. + Кроме того, вы станете невосприимчивы к воздействию космоса. diff --git a/Resources/Locale/ru-RU/_CorvaxNext/markings/resomi.ftl b/Resources/Locale/ru-RU/_CorvaxNext/markings/resomi.ftl index 942ef101b97..7d79843e506 100644 --- a/Resources/Locale/ru-RU/_CorvaxNext/markings/resomi.ftl +++ b/Resources/Locale/ru-RU/_CorvaxNext/markings/resomi.ftl @@ -1,29 +1,18 @@ marking-ResomiTail = Резоми Хвост marking-ResomiTail-tail = Резоми Хвост - marking-ResomiTailFeathers = Хвостовое оперенье marking-ResomiTailFeathers-tail_feathers = Хвостовое оперенье - -marking-ResomiLArmFeathers = Резоми Оперение левой руки -marking-ResomiLArmFeathers-l_hand_feathers = Резоми Оперение левой руки - +marking-ResomiLArmFeathers = Резоми Оперение левой руки +marking-ResomiLArmFeathers-l_hand_feathers = Резоми Оперение левой руки marking-ResomiLLegFeathers = Резоми Оперение левой ноги marking-ResomiLLegFeathers-l_foot_feathers = Резоми Оперение левой ноги - -marking-ResomiRArmFeathers = Резоми Оперение правой руки -marking-ResomiRArmFeathers-r_hand_feathers = Резоми Оперение правой руки - +marking-ResomiRArmFeathers = Резоми Оперение правой руки +marking-ResomiRArmFeathers-r_hand_feathers = Резоми Оперение правой руки marking-ResomiRLegFeathers = Резоми Оперение правой ноги marking-ResomiRLegFeathers-r_foot_feathers = Резоми Оперение правой ноги - marking-ResomiFluff = Резоми Пух тела marking-ResomiFluff-fluff = Резоми Пух тела - marking-ResomiFluffHead = Резоми Пух на голове marking-ResomiFluffHead-fluff_head = Резоми Пух на голове - - marking-ResomiFluffHeadUp = Резоми Пух на голове (верхний) marking-ResomiFluffHeadUp-fluff_head_up = Резоми Пух на голове(верхний) - - diff --git a/Resources/Locale/ru-RU/_CorvaxNext/reagents/biological.ftl b/Resources/Locale/ru-RU/_CorvaxNext/reagents/biological.ftl index 09a5f4ebf3a..87c05a76ab2 100644 --- a/Resources/Locale/ru-RU/_CorvaxNext/reagents/biological.ftl +++ b/Resources/Locale/ru-RU/_CorvaxNext/reagents/biological.ftl @@ -1,4 +1,2 @@ reagent-name-resomi-blood = Фиолетовая кровь reagent-desc-resomi-blood = Густая жидкость с резким аммиачным запахом - - diff --git a/Resources/Locale/ru-RU/_CorvaxNext/surgery/surgery-borg-modules.ftl b/Resources/Locale/ru-RU/_CorvaxNext/surgery/surgery-borg-modules.ftl index 94c024c89be..8e52a6fe2ec 100644 --- a/Resources/Locale/ru-RU/_CorvaxNext/surgery/surgery-borg-modules.ftl +++ b/Resources/Locale/ru-RU/_CorvaxNext/surgery/surgery-borg-modules.ftl @@ -1,3 +1,2 @@ ent-BorgModuleSurgery = модуль хирургического киборга - ent-BorgModuleAdvancedSurgery = модуль продвинутого хирургического киборга diff --git a/Resources/Locale/ru-RU/_corvaxnext/api.ftl b/Resources/Locale/ru-RU/_corvaxnext/api.ftl index bf88abd1648..9b94ea1ed1e 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/api.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/api.ftl @@ -1,22 +1,15 @@ admin-verb-text-make-api = Сделать АПИИ admin-verb-make-api = Сделать цель агентом похищения искусственного интеллекта. - api-backpack-category-utilities-name = Набор Утилит api-backpack-category-utilities-description = Набор полезных вещей, содержащий энергокинжал, глушитель связи, а также криптографический секвенсор. - api-round-end-agent-name = АПИИ - roles-antag-api-name = АПИИ roles-antag-api-objective = Украдите станционный ИИ, действуя скрытно. - objective-issuer-api = [color=#2ed2fd]Агенство[/color] - objective-condition-api-description = То, зачем вы сюда прилетели. Осталось найти интелкарту и пробраться к нему. - steal-target-groups-ai = станционный ИИ, помещённый на интелкарту - api-role-greeting = Вы - агент похищения искусственного интеллекта, также известный как АПИИ. В вас был помещён имплант хранилища со всеми нужными вещами. diff --git a/Resources/Locale/ru-RU/_corvaxnext/cards/cards.ftl b/Resources/Locale/ru-RU/_corvaxnext/cards/cards.ftl index 5dfbf082345..49dd6a0db21 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/cards/cards.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/cards/cards.ftl @@ -1,31 +1,31 @@ -card-examined = Это {$target}. +card-examined = Это { $target }. cards-verb-shuffle = Перемешать card-verb-shuffle-success = Карты перемешаны cards-verb-draw = Вытянуть карту cards-verb-flip = Перевернуть карты card-verb-join = Положить в колоду -card-verb-organize-success = Карты перевёрнуты лицом { $facedown -> - [true] вниз - *[false] вверх -} +card-verb-organize-success = + Карты перевёрнуты лицом { $facedown -> + [true] вниз + *[false] вверх + } cards-verb-organize-up = Перевернуть карты лицом вверх cards-verb-organize-down = Перевернуть карты лицом вниз cards-verb-pickcard = Выбрать карту -card-stack-examine = { $count -> - [one] В этой стопке {$count} карт. - *[other] Здесь {$count} карт в стопке. -} -cards-stackquantitychange-added = Вы взяли карту (Всего карт: {$quantity}) -cards-stackquantitychange-removed = Кто-то взял карту (Всего карт: {$quantity}) -cards-stackquantitychange-joined = Вы объединили карты (Всего карт: {$quantity}) -cards-stackquantitychange-split = Стопка разделена (Всего карт: {$quantity}) -cards-stackquantitychange-unknown = Изменено количество стеков (Всего карт: {$quantity}) +card-stack-examine = + { $count -> + [one] В этой стопке { $count } карт. + *[other] Здесь { $count } карт в стопке. + } +cards-stackquantitychange-added = Вы взяли карту (Всего карт: { $quantity }) +cards-stackquantitychange-removed = Кто-то взял карту (Всего карт: { $quantity }) +cards-stackquantitychange-joined = Вы объединили карты (Всего карт: { $quantity }) +cards-stackquantitychange-split = Стопка разделена (Всего карт: { $quantity }) +cards-stackquantitychange-unknown = Изменено количество стеков (Всего карт: { $quantity }) cards-verb-convert-to-deck = Сделать стопкой cards-verb-split = Разделить пополам - card-base-name = карта card-deck-name = колода карт - card-sc-2-clubs-black = 2 крести card-sc-3-clubs-black = 3 крести card-sc-4-clubs-black = 4 крести @@ -39,7 +39,6 @@ card-sc-ace-clubs-black = Туз крести card-sc-jack-clubs-black = Валет крести card-sc-king-clubs-black = Король крести card-sc-queen-clubs-black = Королева крести - card-sc-2-diamonds-black = 2 бубны card-sc-3-diamonds-black = 3 бубны card-sc-4-diamonds-black = 4 бубны @@ -53,7 +52,6 @@ card-sc-ace-diamonds-black = Туз бубны card-sc-jack-diamonds-black = Валет бубны card-sc-king-diamonds-black = Король бубны card-sc-queen-diamonds-black = Королева бубны - card-sc-2-hearts-black = 2 черви card-sc-3-hearts-black = 3 черви card-sc-4-hearts-black = 4 черви @@ -67,7 +65,6 @@ card-sc-ace-hearts-black = Туз черви card-sc-jack-hearts-black = Валет черви card-sc-king-hearts-black = Король черви card-sc-queen-hearts-black = Королева черви - card-sc-2-spades-black = 2 пики card-sc-3-spades-black = 3 пики card-sc-4-spades-black = 4 пики @@ -81,5 +78,4 @@ card-sc-ace-spades-black = Туз пики card-sc-jack-spades-black = Валет пики card-sc-king-spades-black = Король пики card-sc-queen-spades-black = Королева пики - -card-sc-joker-black = Джокер \ No newline at end of file +card-sc-joker-black = Джокер diff --git a/Resources/Locale/ru-RU/_corvaxnext/chat/highlights.ftl b/Resources/Locale/ru-RU/_corvaxnext/chat/highlights.ftl index 61119deccb8..df00ba8b5f4 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/chat/highlights.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/chat/highlights.ftl @@ -6,32 +6,26 @@ highlights-chief-medical-officer = Главный врач, "ГВ", Медици highlights-head-of-security = Глава Службы Безопасности, "ГСБ", Безопасности, "СБ", Командование highlights-quartermaster = Квартирмейстер, "КМ", Карго, Командование highlights-research-director = Научный Руководитель, "НР", Наука, Учёный, "НИО", Командование - # Безопасность highlights-detective = Детектив, "Дек", Безопасности, "СБ" highlights-security-cadet = Кадет Службы Безопасности, Кадет, "СБ" highlights-security-officer = Офицер Службы Безопасности, Офицер, "СБ" highlights-warden = Смотритель, Безопасности, "СБ" - # Карго highlights-cargo-technician = Грузчик, Снабжение, Карго highlights-salvage-specialist = Утилизатор, Снабжение, "Утиль", Шахтер - # Инженерия highlights-atmospheric-technician = Атмосферный техник, Атмосферный, Атмос highlights-station-engineer = Инженер, Инженерия, Инженер, "Инж" highlights-technical-assistant = Технический ассистент, Инженерия, Инженер, "Инж" - # Медицина highlights-chemist = Химик, Химия, "Мед", Медик, Врач highlights-medical-doctor = Врач, Доктор, "Мед", Медик, Врач highlights-medical-intern = Интерн, "Мед", Медик, Врач highlights-paramedic = Парамедик, "Парамед", "Мед", Медик, Врач - # Наука highlights-scientist = Ученый, Наука, "НИО" highlights-research-assistant = Научный Ассистент, Наука, "НИО" - # Гражданские highlights-bartender = Бармен, "Бар", "Сервис" highlights-botanist = Ботаник, Ботаника, Гидропоника @@ -44,13 +38,11 @@ highlights-librarian = Библиотекарь, Библиотека highlights-mime = Мим highlights-passenger = Пассажир highlights-service-worker = Сервисный Работник - # Станционные роли highlights-boxer = Боксер highlights-reporter = Репортер, Журналист highlights-zookeeper = Смотритель зоопарка highlights-psychologist = Психолог, Психология - # ИИ highlights-personal-ai = ПИИ, "ИИ" highlights-cyborg = Киборг, Борг, Робот diff --git a/Resources/Locale/ru-RU/_corvaxnext/entities/bodyparts.ftl b/Resources/Locale/ru-RU/_corvaxnext/entities/bodyparts.ftl index 5a148ad0391..ef8e94e0045 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/entities/bodyparts.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/entities/bodyparts.ftl @@ -1,26 +1,4 @@ -ent-PartMonkey = часть обезьяны -ent-TorsoMonkey = торс обезьяны -ent-HeadMonkey = голова обезьяны -ent-LeftArmMonkey = левая рука обезьяны -ent-RightArmMonkey = правая рука обезьяны -ent-LeftHandMonkey = левая ладонь обезьяны -ent-RightHandMonkey = правая ладонь обезьяны -ent-LeftLegMonkey = левая нога обезьяны -ent-RightLegMonkey = правая нога обезьяны -ent-LeftFootMonkey = левая стопа обезьяны -ent-RightFootMonkey = правая стопа обезьяны -ent-PartKobold = часть кобольда -ent-TorsoKobold = торс кобольда -ent-HeadKobold = голова кобольда -ent-LeftArmKobold = левая рука кобольда -ent-RightArmKobold = правая рука кобольда -ent-LeftHandKobold = левая ладонь кобольда -ent-RightHandKobold = правая ладонь кобольда -ent-LeftLegKobold = левая нога кобольда -ent-RightLegKobold = правая нога кобольда -ent-LeftFootKobold = левая стопа кобольда -ent-RightFootKobold = правая стопа кобольда ent-OrganAnimalBrain = мозг животного ent-OrganAnimalEyes = глаза животного diff --git a/Resources/Locale/ru-RU/_corvaxnext/escape-menu/ui/options.ftl b/Resources/Locale/ru-RU/_corvaxnext/escape-menu/ui/options.ftl index 9ae17779e23..8018bdccd88 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/escape-menu/ui/options.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/escape-menu/ui/options.ftl @@ -1,4 +1,3 @@ ui-options-hud-theme-operative = Оперативник - ui-options-hotkey-auto-up = Автоматически вставать при падении ui-options-function-toggle-standing = Встать или лечь diff --git a/Resources/Locale/ru-RU/_corvaxnext/interaction/offer-item-system.ftl b/Resources/Locale/ru-RU/_corvaxnext/interaction/offer-item-system.ftl index 94dbe640ef8..b80fc91aec3 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/interaction/offer-item-system.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/interaction/offer-item-system.ftl @@ -1,13 +1,9 @@ offer-item-empty-hand = У вас в руках ничего нет! - offer-item-full-hand = Ваши руки заняты! - -offer-item-try-give = Вы предлагаете {THE($item)} {$target} -offer-item-try-give-target = {$user} предлагает вам {THE($item)} - -offer-item-give = Вы отдали {THE($item)} {$target} -offer-item-give-other = {$user} отдал {THE($item)} {$target} -offer-item-give-target = {$user} отдал вам {THE($item)} - -offer-item-no-give = Вы перестаёте предлагать {THE($item)} {$target} -offer-item-no-give-target = {$user} больше не предлагает вам {THE($item)} +offer-item-try-give = Вы предлагаете { THE($item) } { $target } +offer-item-try-give-target = { $user } предлагает вам { THE($item) } +offer-item-give = Вы отдали { THE($item) } { $target } +offer-item-give-other = { $user } отдал { THE($item) } { $target } +offer-item-give-target = { $user } отдал вам { THE($item) } +offer-item-no-give = Вы перестаёте предлагать { THE($item) } { $target } +offer-item-no-give-target = { $user } больше не предлагает вам { THE($item) } diff --git a/Resources/Locale/ru-RU/_corvaxnext/lathe/ui/lathe-menu.ftl b/Resources/Locale/ru-RU/_corvaxnext/lathe/ui/lathe-menu.ftl index 218c3af8d15..eddd5800b9d 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/lathe/ui/lathe-menu.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/lathe/ui/lathe-menu.ftl @@ -1 +1 @@ -lathe-menu-blueprint-eject = Извлечь чертежи \ No newline at end of file +lathe-menu-blueprint-eject = Извлечь чертежи diff --git a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-cybernetic-items.ftl b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-cybernetic-items.ftl index 0fa549a37fb..68138e215c0 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-cybernetic-items.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-cybernetic-items.ftl @@ -1,48 +1,4 @@ ## Organs -ent-BasicCyberneticEyes = базовые кибернетические глаза - .desc = Пара кибернетических глаз, усиливающих ваше зрение и защищающих от повреждений глаз. - -ent-SecurityCyberneticEyes = кибернетические глаза безопасности - .desc = Пара кибернетических глаз, усиливающих ваше зрение, с встроенной системой SecHUD. - -ent-MedicalCyberneticEyes = кибернетические диагностические глаза - .desc = Пара кибернетических глаз, усиливающих ваше зрение, с встроенной системой MedHUD. - ## Body parts -ent-LeftArmCybernetic = кибернетическая левая рука - .desc = Кибернетическая левая рука, выполненная из материала на основе кремния. - -ent-RightArmCybernetic = кибернетическая правая рука - .desc = Кибернетическая правая рука, выполненная из материала на основе кремния. - -ent-LeftLegCybernetic = кибернетическая левая нога - .desc = Кибернетическая левая нога, выполненная из материала на основе кремния. - -ent-RightLegCybernetic = кибернетическая правая нога - .desc = Кибернетическая правая нога, выполненная из материала на основе кремния. - -ent-LeftHandCybernetic = кибернетическая левая кисть - .desc = Кибернетическая левая кисть, выполненная из материала на основе кремния. - -ent-RightHandCybernetic = кибернетическая правая кисть - .desc = Кибернетическая правая кисть, выполненная из материала на основе кремния. - -ent-LeftFootCybernetic = кибернетическая левая стопа - .desc = Кибернетическая левая стопа, выполненная из материала на основе кремния. - -ent-RightFootCybernetic = кибернетическая правая стопа - .desc = Кибернетическая правая стопа, выполненная из материала на основе кремния. - -ent-JawsOfLifeLeftArm = левая рука "Челюсти Жизни" - .desc = Кибернетическая левая рука с возможностью вскрытия дверей. - -ent-JawsOfLifeRightArm = правая рука "Челюсти Жизни" - .desc = Кибернетическая правая рука с возможностью вскрытия дверей. - -ent-SpeedLeftLeg = левая нога "Б.Е.Г.И" - .desc = Кибернетическая левая нога, позволяющая своему владельцу бегать быстрее. - -ent-SpeedRightLeg = правая нога "Б.Е.Г.И" - .desc =Кибернетическая правая нога, позволяющая своему владельцу бегать быстрее. diff --git a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-items.ftl b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-items.ftl index 0945fbe1c82..07082fedbe2 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-items.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-items.ftl @@ -1,43 +1,8 @@ -ent-MedicalBiofabricator = медицинский биофабрикатор - .desc = Производит искусственные органы, которые могут быть установлены пациентам. Потребляет биомассу. -ent-BioSynthHeart = био-синтетическое сердце - .desc = Искуственное сердце, которое может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLiver = био-синтетическая печень - .desc = Искуственная печень, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLungs = био-синтетические лёгкие - .desc = Искуственные лёгкие, которые могут устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthEyes = био-синтетические глаза - .desc = Искуственные глаза, которые могут устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLeftArm = био-синтетическая левая рука - .desc = Искуственная рука, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthRightArm = био-синтетическая правая рука - .desc = Искуственная рука, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLeftHand = био-синтетическая левая ладонь - .desc = Искуственная ладонь, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthRightHand = био-синтетическая правая ладонь - .desc = Искуственная ладонь, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLeftLeg = био-синтетическая левая нога - .desc = Искуственная нога, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthRightLeg = био-синтетическая правая нога - .desc = Искуственная нога, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthLeftFoot = био-синтетическая левая стопа - .desc = Искуственная стопа, которая может устанавливаться и адаптироваться к любому живому организму. -ent-BioSynthRightFoot = био-синтетическая правая стопа - .desc = Искуственная стопа, которая может устанавливаться и адаптироваться к любому живому организму. - -ent-MedicalBiofabMachineBoard = медицинский биофабрикатор (машинная плата) - .desc = Машинная плата, необходимая для создания медицинского биофабрикатора. ent-BoneGel = бутылка костяного геля .desc = Контейнер для костяного геля, нужно время от времени пополнять в специальной машине. -ent-OrganSpaceAnimalLungs = космические лёгкие -ent-OrganSpaceAnimalHeart = космическое сердце - -ent-TorsoCarp = туловище карпа -ent-TailCarp = плавник карпа - ent-EnergyCautery = энергетический прибор для прижигания .desc = Энергетический хирургический инструмент, используемый для прижигания открытых ран, также служит дрелью в активированном состоянии. ent-EnergyScalpel = энергетический скальпель diff --git a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-operations.ftl b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-operations.ftl index fc9b37bd291..139597f9cb0 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-operations.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-operations.ftl @@ -1,65 +1,2 @@ -ent-SurgeryStepOpenIncisionScalpel = Порезать при помощи скальпеля -ent-SurgeryStepClampBleeders = Остановить внешнее кровотечение -ent-SurgeryStepRetractSkin = Втянуть кожу -ent-SurgeryStepSawBones = Пропилить кость -ent-SurgeryStepPriseOpenBones = Вскрыть кость -ent-SurgeryStepCloseBones = Закрыть кость -ent-SurgeryStepMendRibcage = Восстановить кость -ent-SurgeryStepCloseIncision = Закрыть разрез -ent-SurgeryStepInsertFeature = Прикрепить часть тела -ent-SurgeryStepSealWounds = Прижечь раны -ent-SurgeryStepSawFeature = Пропилить через кость -ent-SurgeryStepClampInternalBleeders = Остановить внутреннее кровотечение -ent-SurgeryStepRemoveFeature = Ампутировать часть тела -ent-SurgeryStepCarefulIncisionScalpel = Сделать аккуратный разрез -ent-SurgeryStepRepairBruteTissue = Восстановить механически поврежденную ткань -ent-SurgeryStepRepairBurnTissue = Восстановить термически поврежденную ткань -ent-SurgeryStepSealTendWound = Прижечь кровотечение - -ent-SurgeryStepInsertItem = Вставить предмет в полость -ent-SurgeryStepRemoveItem = Достать предмет из полости - -ent-SurgeryStepRemoveOrgan = Удалить орган -ent-SurgeryStepInsertOrgan = Вставить орган -ent-SurgeryStepInsertLungs = Вставить лёгкие -ent-SurgeryStepInsertLiver = Вставить печень -ent-SurgeryStepInsertEyes = Вставить глаза -ent-SurgeryStepInsertHeart = Вставить сердце - - -ent-SurgeryOpenIncision = Открыть разрез -ent-SurgeryCloseIncision = Закрыть разрез -ent-SurgeryOpenRibcage = Открыть грудную клетку -ent-SurgeryRemovePart = Удалить часть тела - -ent-SurgeryAttachHead = Прикрепить голову -ent-SurgeryAttachLeftArm = Прикрепить левую руку -ent-SurgeryAttachRightArm = Прикрепить правую руку -ent-SurgeryAttachLeftLeg = Прикрепить левую ногу -ent-SurgeryAttachRightLeg = Прикрепить правую ногу -ent-SurgeryAttachLeftHand = Прикрепить левую ладонь -ent-SurgeryAttachRightHand = Прикрепить правую ладонь -ent-SurgeryAttachLeftFoot = Прикрепить левую стопу -ent-SurgeryAttachRightFoot = Прикрепить правую стопу -ent-SurgeryAttachTail = Прикрепить хвост - -ent-SurgeryTendWoundsBrute = Восстановить механические повреждения -ent-SurgeryTendWoundsBurn = Восстановить термические повреждения - -ent-SurgeryInsertItem = Вставить предмет - -ent-SurgeryRemoveBrain = Удалить мозг -ent-SurgeryInsertBrain = Вставить мозг -ent-SurgeryRemoveHeart = Удалить сердце -ent-SurgeryInsertHeart = Вставить сердце -ent-SurgeryRemoveLiver = Удалить печень -ent-SurgeryInsertLiver = Вставить печень -ent-SurgeryRemoveLungs = Удалить лёгкие -ent-SurgeryInsertLungs = Вставить лёгкие -ent-SurgeryRemoveStomach = Удалить желудок -ent-SurgeryInsertStomach = Вставить желудок -ent-SurgeryRemoveEyes = Удалить глаза -ent-SurgeryInsertEyes = Вставить глаза -ent-SurgeryLobotomize = Лоботомировать diff --git a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-popup.ftl b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-popup.ftl index 9e7acedc0b2..d695e75eadc 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-popup.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-popup.ftl @@ -1,53 +1,47 @@ -surgery-popup-step-SurgeryStepOpenIncisionScalpel = {$user} делает разрез на {$part} {$target}. -surgery-popup-step-SurgeryStepClampBleeders = {$user} пережимает внутреннее кровотечение на {$part} {$target}. -surgery-popup-step-SurgeryStepRetractSkin = {$user} втягивает кожу на {$part} {$target}. -surgery-popup-step-SurgeryStepSawBones = {$user} пилит через кости на {$part} {$target}. -surgery-popup-step-SurgeryStepPriseOpenBones = {$user} вскрывает кости на {$part} {$target}. -surgery-popup-step-SurgeryStepCloseBones = {$user} закрывает кости на {$part} {$target}. -surgery-popup-step-SurgeryStepMendRibcage = {$user} лечит грудную клетку на {$part} {$target}. -surgery-popup-step-SurgeryStepCloseIncision = {$user} закрывает разрез на {$part} {$target}. - -surgery-popup-step-SurgeryStepInsertFeature = {$user} вставляет что-то в {$part} {$target}! -surgery-popup-procedure-SurgeryAttachHead-step-SurgeryStepInsertFeature = {$user} присоединяет голову к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachLeftArm-step-SurgeryStepInsertFeature = {$user} присоединяет левую руку к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachRightArm-step-SurgeryStepInsertFeature = {$user} присоединяет правую руку к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachLeftLeg-step-SurgeryStepInsertFeature = {$user} присоединяет левую ногу к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachRightLeg-step-SurgeryStepInsertFeature = {$user}присоединяет правую ногу к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachLeftHand-step-SurgeryStepInsertFeature = {$user} присоединяет левую ладонь к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachRightHand-step-SurgeryStepInsertFeature = {$user} присоединяет правую ногу к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachLeftFoot-step-SurgeryStepInsertFeature = {$user} присоединяет левую стопу к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachRightFoot-step-SurgeryStepInsertFeature = {$user} присоединяет правую стопу к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachLegs-step-SurgeryStepInsertFeature = {$user} присоединяет ноги к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachHands-step-SurgeryStepInsertFeature = {$user} присоединяет руки к {$part} {$target}! -surgery-popup-procedure-SurgeryAttachFeet-step-SurgeryStepInsertFeature = {$user} присоединяет стопы к {$part} {$target}! - -surgery-popup-step-SurgeryStepSealWounds = {$user} лечит раны на {$part} {$target}. -surgery-popup-step-SurgeryStepSawFeature = {$user} пилит через кости на {$part} {$target}. -surgery-popup-step-SurgeryStepClampInternalBleeders = {$user} пережимает внутреннее кровотечение у {$part} {$target}. -surgery-popup-step-SurgeryStepRemoveFeature = {$user} ампутирует {$part} {$target}! -surgery-popup-step-SurgeryStepCarefulIncisionScalpel = {$user} аккуратно закрывает разрез на {$part} {$target}. -surgery-popup-step-SurgeryStepRepairBruteTissue = {$user} лечит механические повреждения на {$part} {$target}! -surgery-popup-step-SurgeryStepRepairBurnTissue = {$user} лечит физические повреждения на {$part} {$target}! -surgery-popup-step-SurgeryStepSealTendWound = {$user} закрывает раны на {$part} {$target}. -surgery-popup-step-SurgeryStepInsertItem = {$user} вставляет что-то в {$part} {$target}! -surgery-popup-step-SurgeryStepRemoveItem = {$user} достаёт что-то из {$part} {$target}! - -surgery-popup-step-SurgeryStepRemoveOrgan = {$user} удаляет орган из {$part} {$target}! -surgery-popup-step-SurgeryStepInsertOrgan = {$user} вставляет орган в {$part} {$target}! - -surgery-popup-procedure-SurgeryRemoveBrain-step-SurgeryStepRemoveOrgan = {$user} удаляет мозг из {$part} {$target}! -surgery-popup-procedure-SurgeryRemoveHeart-step-SurgeryStepRemoveOrgan = {$user} удаляет сердце из {$part} {$target}! -surgery-popup-procedure-SurgeryRemoveLiver-step-SurgeryStepRemoveOrgan = {$user} удаляет печень из {$part} {$target}! -surgery-popup-procedure-SurgeryRemoveLungs-step-SurgeryStepRemoveOrgan = {$user} удаляет лёгкие из {$part} {$target}! -surgery-popup-procedure-SurgeryRemoveEyes-step-SurgeryStepRemoveOrgan = {$user} удаляет глаза из {$part} {$target}! -surgery-popup-procedure-SurgeryRemoveStomach-step-SurgeryStepRemoveOrgan = {$user} удаляет желудок из {$part} {$target}! - -surgery-popup-procedure-SurgeryInsertBrain-step-SurgeryStepInsertOrgan = {$user} вставляет мозг в {$part} {$target}! -surgery-popup-step-SurgeryStepInsertLungs = {$user} вставляет лёгкие в {$part} {$target}! -surgery-popup-step-SurgeryStepInsertLiver = {$user} вставляет печень в {$part} {$target}! -surgery-popup-step-SurgeryStepInsertEyes = {$user} вставляет глаза в {$part} {$target}! -surgery-popup-step-SurgeryStepInsertHeart = {$user} вставляет сердце в {$part} {$target}! -surgery-popup-step-SurgeryStepInsertStomach = {$user} вставляет желудок в {$part} {$target}! - -surgery-popup-step-SurgeryStepSealOrganWound = {$user} лечит раны на {$part} {$target}. -surgery-popup-step-SurgeryStepLobotomize = {$user} выполняет трепанацию на {$target} {$part}. +surgery-popup-step-SurgeryStepOpenIncisionScalpel = { $user } делает разрез на { $part } { $target }. +surgery-popup-step-SurgeryStepClampBleeders = { $user } пережимает внутреннее кровотечение на { $part } { $target }. +surgery-popup-step-SurgeryStepRetractSkin = { $user } втягивает кожу на { $part } { $target }. +surgery-popup-step-SurgeryStepSawBones = { $user } пилит через кости на { $part } { $target }. +surgery-popup-step-SurgeryStepPriseOpenBones = { $user } вскрывает кости на { $part } { $target }. +surgery-popup-step-SurgeryStepCloseBones = { $user } закрывает кости на { $part } { $target }. +surgery-popup-step-SurgeryStepMendRibcage = { $user } лечит грудную клетку на { $part } { $target }. +surgery-popup-step-SurgeryStepCloseIncision = { $user } закрывает разрез на { $part } { $target }. +surgery-popup-step-SurgeryStepInsertFeature = { $user } вставляет что-то в { $part } { $target }! +surgery-popup-procedure-SurgeryAttachHead-step-SurgeryStepInsertFeature = { $user } присоединяет голову к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachLeftArm-step-SurgeryStepInsertFeature = { $user } присоединяет левую руку к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachRightArm-step-SurgeryStepInsertFeature = { $user } присоединяет правую руку к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachLeftLeg-step-SurgeryStepInsertFeature = { $user } присоединяет левую ногу к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachRightLeg-step-SurgeryStepInsertFeature = { $user }присоединяет правую ногу к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachLeftHand-step-SurgeryStepInsertFeature = { $user } присоединяет левую ладонь к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachRightHand-step-SurgeryStepInsertFeature = { $user } присоединяет правую ногу к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachLeftFoot-step-SurgeryStepInsertFeature = { $user } присоединяет левую стопу к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachRightFoot-step-SurgeryStepInsertFeature = { $user } присоединяет правую стопу к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachLegs-step-SurgeryStepInsertFeature = { $user } присоединяет ноги к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachHands-step-SurgeryStepInsertFeature = { $user } присоединяет руки к { $part } { $target }! +surgery-popup-procedure-SurgeryAttachFeet-step-SurgeryStepInsertFeature = { $user } присоединяет стопы к { $part } { $target }! +surgery-popup-step-SurgeryStepSealWounds = { $user } лечит раны на { $part } { $target }. +surgery-popup-step-SurgeryStepSawFeature = { $user } пилит через кости на { $part } { $target }. +surgery-popup-step-SurgeryStepClampInternalBleeders = { $user } пережимает внутреннее кровотечение у { $part } { $target }. +surgery-popup-step-SurgeryStepRemoveFeature = { $user } ампутирует { $part } { $target }! +surgery-popup-step-SurgeryStepCarefulIncisionScalpel = { $user } аккуратно закрывает разрез на { $part } { $target }. +surgery-popup-step-SurgeryStepRepairBruteTissue = { $user } лечит механические повреждения на { $part } { $target }! +surgery-popup-step-SurgeryStepRepairBurnTissue = { $user } лечит физические повреждения на { $part } { $target }! +surgery-popup-step-SurgeryStepSealTendWound = { $user } закрывает раны на { $part } { $target }. +surgery-popup-step-SurgeryStepInsertItem = { $user } вставляет что-то в { $part } { $target }! +surgery-popup-step-SurgeryStepRemoveItem = { $user } достаёт что-то из { $part } { $target }! +surgery-popup-step-SurgeryStepRemoveOrgan = { $user } удаляет орган из { $part } { $target }! +surgery-popup-step-SurgeryStepInsertOrgan = { $user } вставляет орган в { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveBrain-step-SurgeryStepRemoveOrgan = { $user } удаляет мозг из { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveHeart-step-SurgeryStepRemoveOrgan = { $user } удаляет сердце из { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveLiver-step-SurgeryStepRemoveOrgan = { $user } удаляет печень из { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveLungs-step-SurgeryStepRemoveOrgan = { $user } удаляет лёгкие из { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveEyes-step-SurgeryStepRemoveOrgan = { $user } удаляет глаза из { $part } { $target }! +surgery-popup-procedure-SurgeryRemoveStomach-step-SurgeryStepRemoveOrgan = { $user } удаляет желудок из { $part } { $target }! +surgery-popup-procedure-SurgeryInsertBrain-step-SurgeryStepInsertOrgan = { $user } вставляет мозг в { $part } { $target }! +surgery-popup-step-SurgeryStepInsertLungs = { $user } вставляет лёгкие в { $part } { $target }! +surgery-popup-step-SurgeryStepInsertLiver = { $user } вставляет печень в { $part } { $target }! +surgery-popup-step-SurgeryStepInsertEyes = { $user } вставляет глаза в { $part } { $target }! +surgery-popup-step-SurgeryStepInsertHeart = { $user } вставляет сердце в { $part } { $target }! +surgery-popup-step-SurgeryStepInsertStomach = { $user } вставляет желудок в { $part } { $target }! +surgery-popup-step-SurgeryStepSealOrganWound = { $user } лечит раны на { $part } { $target }. +surgery-popup-step-SurgeryStepLobotomize = { $user } выполняет трепанацию на { $target } { $part }. diff --git a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-ui.ftl b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-ui.ftl index d1a9e6e9e95..e8ea1a3344c 100644 --- a/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-ui.ftl +++ b/Resources/Locale/ru-RU/_corvaxnext/surgery/surgery-ui.ftl @@ -5,13 +5,11 @@ ui-options-function-target-right-arm = Прицелиться на правую ui-options-function-target-left-leg = Прицелиться на левую ногу ui-options-function-target-right-leg = Прицелиться на правую ногу ui-options-header-targeting = Прицеливание - surgery-ui-window-title = Хирургия surgery-ui-window-require = Требуется surgery-ui-window-parts = Части surgery-ui-window-surgeries = Операции surgery-ui-window-steps = Шаги - surgery-ui-window-steps-error-skills = Не хватает навыка для операции! surgery-ui-window-steps-error-table = Требуется операционный стол! surgery-ui-window-steps-error-armor = Нужно снять с этого броню! diff --git a/Resources/Locale/ru-RU/chat/ui/chat-box.ftl b/Resources/Locale/ru-RU/chat/ui/chat-box.ftl index 967068fc1d3..64a3a096964 100644 --- a/Resources/Locale/ru-RU/chat/ui/chat-box.ftl +++ b/Resources/Locale/ru-RU/chat/ui/chat-box.ftl @@ -31,9 +31,3 @@ hud-chatbox-channel-Damage = Повреждения hud-chatbox-channel-Unspecified = Неопределённый hud-chatbox-highlights = Подсветка: hud-chatbox-highlights-button = Отправить -hud-chatbox-highlights-tooltip = Слова должны быть разделены новой строкой, - если обернуты в " ", они будут подсвечены - только если отделены пробелами. -hud-chatbox-highlights-placeholder = Урист - "Пара" - Мост diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/actions/resomi.ftl @@ -0,0 +1 @@ + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl new file mode 100644 index 00000000000..fcf6600ed4e --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/animal/space.ftl @@ -0,0 +1,4 @@ +ent-OrganSpaceAnimalLungs = space animal lungs + .desc = { ent-OrganAnimalLungs.desc } +ent-OrganSpaceAnimalHeart = space animal heart + .desc = { ent-OrganAnimalHeart.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl new file mode 100644 index 00000000000..ea91d4719fe --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/cybernetic.ftl @@ -0,0 +1,8 @@ +ent-BaseCyberneticEyes = { ent-OrganHumanEyes } + .desc = { ent-OrganHumanEyes.desc } +ent-BasicCyberneticEyes = cybernetic eyes + .desc = A pair of cybernetic eyes that enhance your vision, and protect you from eye damage. +ent-SecurityCyberneticEyes = cybernetic security eyes + .desc = A pair of cybernetic eyes that enhance your vision, featuring an integrated SecHUD. +ent-MedicalCyberneticEyes = cybernetic diagnostic eyes + .desc = A pair of cybernetic eyes that enhance your vision, featuring an integrated MedHUD. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl new file mode 100644 index 00000000000..5fdc22bba13 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/generic.ftl @@ -0,0 +1,8 @@ +ent-BioSynthHeart = bio-synthetic heart + .desc = This heart can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLiver = bio-synthetic liver + .desc = This liver can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLungs = bio-synthetic lungs + .desc = These lungs can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthEyes = bio-synthetic eyes + .desc = These eyes can be transplanted into any living organism and it will adapt to its recipient. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl new file mode 100644 index 00000000000..dad7c04e087 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi.ftl @@ -0,0 +1,2 @@ +ent-OrganResomiLungs = lungs + .desc = An advanced pair of avian lungs. Filters oxygen by way of moving air constantly through air sacs. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi_organs.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi_organs.ftl index c283341f51e..8b137891791 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi_organs.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/organs/resomi_organs.ftl @@ -1,2 +1 @@ -ent-OrganResomiLungs = { ent-OrganHumanLungs } - .desc = Продвинутая пара лёгких Резоми. Фильтрует кислород, постоянно перемещая воздух через воздушные мешки. + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl new file mode 100644 index 00000000000..68988fa70bf --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/parts/animal.ftl @@ -0,0 +1,6 @@ +ent-BaseCarpPart = { ent-PartAnimal } + .desc = { ent-PartAnimal.desc } +ent-TailCarp = carp tail + .desc = Unique glands in this tail let space carp fly in a vacuum. +ent-TorsoCarp = carp torso + .desc = { ent-BaseCarpPart.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl new file mode 100644 index 00000000000..b638d880c71 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/cybernetic.ftl @@ -0,0 +1,24 @@ +ent-LeftArmCybernetic = { ent-LeftArmHuman } + .desc = { ent-LeftArmHuman.desc } +ent-RightArmCybernetic = { ent-RightArmHuman } + .desc = { ent-RightArmHuman.desc } +ent-LeftLegCybernetic = { ent-LeftLegHuman } + .desc = { ent-LeftLegHuman.desc } +ent-RightLegCybernetic = { ent-RightLegHuman } + .desc = { ent-RightLegHuman.desc } +ent-LeftHandCybernetic = cybernetic left hand + .desc = { ent-LeftHandHuman.desc } +ent-RightHandCybernetic = cybernetic right hand + .desc = { ent-RightHandHuman.desc } +ent-LeftFootCybernetic = cybernetic left foot + .desc = { ent-LeftFootHuman.desc } +ent-RightFootCybernetic = cybernetic right foot + .desc = { ent-RightFootHuman.desc } +ent-JawsOfLifeLeftArm = J.W.L left arm + .desc = A cybernetic left arm with the ability to pry doors open. +ent-JawsOfLifeRightArm = J.W.L right arm + .desc = A cybernetic right arm with the ability to pry doors open. +ent-SpeedLeftLeg = S.P.E.E.D left leg + .desc = A cybernetic left leg that allows its wearer to run faster. +ent-SpeedRightLeg = S.P.E.E.D right leg + .desc = A cybernetic left leg that allows its wearer to run faster. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl new file mode 100644 index 00000000000..a7ef3f3a8ce --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/body/prototypes/generic.ftl @@ -0,0 +1,20 @@ +ent-BioSynthLeftArm = bio-synthetic left arm + .desc = This left arm can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightArm = bio-synthetic right arm + .desc = This right arm can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftHand = bio-synthetic left hand + .desc = This left hand can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightHand = bio-synthetic right hand + .desc = This right hand can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftLeg = bio-synthetic left leg + .desc = This left leg can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightLeg = bio-synthetic right leg + .desc = This right leg can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthLeftFoot = bio-synthetic left foot + .desc = This left foot can be transplanted into any living organism and it will adapt to its recipient. +ent-BioSynthRightFoot = bio-synthetic right foot + .desc = This right foot can be transplanted into any living organism and it will adapt to its recipient. +ent-PizzaLeftArm = pizza left arm + .desc = For when you want to turn someone into a Space John's. +ent-PizzaRightArm = pizza right arm + .desc = For when you want to turn someone into a Space John's. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/catalog/fills/books/USSPcook.ftl @@ -0,0 +1 @@ + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl index 24b376747ac..848a30e767e 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/belt/belts.ftl @@ -1,4 +1,4 @@ ent-ClothingBeltWhiteSheath = белые сабельные ножны - .desc = Стиль, блеск, всё для лучших сабель во вселенной. + .desc = Стиль, блеск, всё для лучших сабель во вселенной. ent-ClothingBeltSheriffSheath = сабельные ножны шерифа - .desc = Практичность, прочность, сабля точно не окажется в вашей ноге. + .desc = Практичность, прочность, сабля точно не окажется в вашей ноге. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl index 9cbd4ff6488..f8baee6f71b 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/hands/gloves.ftl @@ -1,4 +1,4 @@ ent-ClothingHandsGlovesCaptainWhite = белые перчатки капитана - .desc = Королевские белые перчатки с золотой отделкой. Шикарны. + .desc = Королевские белые перчатки с золотой отделкой. Шикарны. ent-ClothingHandsGlovesSheriff = перчатки шерифа - .desc = Перчатки с эргономичной формой, предназначенные для удержания револьвера. + .desc = Перчатки с эргономичной формой, предназначенные для удержания револьвера. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl index 75a3b38ab0c..3ad0570ae29 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/head/hats.ftl @@ -1,8 +1,8 @@ ent-ClothingHeadHatBeretCaptainWhite = белый берет капитана - .desc = Белый берет капитана, икона стиля. + .desc = Белый берет капитана, икона стиля. ent-ClothingHeadHatBeretSheriff = берет шерифа - .desc = Берет - фаворит, местных шерифов. + .desc = Берет - фаворит, местных шерифов. ent-ClothingHeadHatCapcapWhite = белая фуражка капитана - .desc = Стильная белая фуражка капитана. + .desc = Стильная белая фуражка капитана. ent-ClothingHeadHatCapcapSheriff = фуражка шерифа - .desc = Стильная фуражка шерифа. + .desc = Стильная фуражка шерифа. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl index bb871bcd65c..fe0e871b020 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/neck/cloaks.ftl @@ -1,8 +1,8 @@ ent-ClothingNeckCaptainWide = широкая шинель капитана - .desc = Широкая капитанская шинель. Кажется, она не по размеру вам, но как накидка на плечи сойдёт. + .desc = Широкая капитанская шинель. Кажется, она не по размеру вам, но как накидка на плечи сойдёт. ent-ClothingNeckCloakRoyalCaptain = королевский плащ капитана - .desc = Царь во дворца, царь во дворца. + .desc = Царь во дворца, царь во дворца. ent-ClothingNeckCloakSyndicateAdmiral = плащ адмирала синдиката - .desc = Красный плащ, прошитый золотой тканью. + .desc = Красный плащ, прошитый золотой тканью. ent-ClothingNeckWhiteMantleCaptain = белая мантия капитана - .desc = Мантия капитана, с белым пухом. + .desc = Мантия капитана, с белым пухом. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl index b4c4015702c..71adfb49491 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpskirts.ftl @@ -1,2 +1,2 @@ ent-ClothingUniformJumpskirtWhiteCaptain = белая юбка-комбинезон капитана - .desc = Белая юбка-комбинезон капитана символизирующая, что ваша зарплата явно превышает нормы. + .desc = Белая юбка-комбинезон капитана символизирующая, что ваша зарплата явно превышает нормы. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl index a9aa51e4c0a..5b1a6a227d4 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/clothing/uniforms/jumpsuits.ftl @@ -1,6 +1,6 @@ ent-ClothingUniformJumpsuitCommandCaptain = командный костюм капитана - .desc = Чёрный костюм, на нём видны золотые погоны на плечах. + .desc = Чёрный костюм, на нём видны золотые погоны на плечах. ent-ClothingUniformJumpsuitWhiteCaptain = белый комбинезон капитана - .desc = Белый комбинезон капитана символизирующий, что ваша зарплата явно превышает нормы. + .desc = Белый комбинезон капитана символизирующий, что ваша зарплата явно превышает нормы. ent-ClothingUniformJumpsuitSheriff = комбинезон шерифа - .desc = Комбинезон показывающий вашу статусность, как ужасн... великого правителя. + .desc = Комбинезон показывающий вашу статусность, как ужасн... великого правителя. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl new file mode 100644 index 00000000000..a8eb3ba2862 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/effects/footstep.ftl @@ -0,0 +1,2 @@ +ent-Footstep = footstep + .desc = Trace of liquid. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl new file mode 100644 index 00000000000..33c492edfc0 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/machines/lathe.ftl @@ -0,0 +1,2 @@ +ent-MedicalBiofabricator = medical biofabricator + .desc = Produces organs and other organic matter that can be surgically grafted onto patients with biomass. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl new file mode 100644 index 00000000000..18048c5c69d --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/mobs/species/primate.ftl @@ -0,0 +1,4 @@ +ent-MobMonkeyDummy = { ent-BaseSpeciesDummy } + .desc = A dummy monkey meant to be used in character setup. +ent-MobKoboldDummy = { ent-BaseSpeciesDummy } + .desc = A dummy kobold meant to be used in character setup. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl new file mode 100644 index 00000000000..c59e53c2eeb --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/circuitboards/production.ftl @@ -0,0 +1,2 @@ +ent-MedicalBiofabMachineBoard = medical biofab machine board + .desc = A machine printed circuit board for a medical biofab. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl new file mode 100644 index 00000000000..b869ef6d2bb --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/misc.ftl @@ -0,0 +1,4 @@ +ent-FoodBakedPotatosCutlets = mashed potatoes with cutlets + .desc = You hurry up, we have cutlets right now... +ent-FoodPickles = pickle + .desc = The very thing for vodka diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl new file mode 100644 index 00000000000..c4a32ec9223 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/produce.ftl @@ -0,0 +1,4 @@ +ent-FoodCucumber = cucumber + .desc = PHAHAHHAHA cu-cu-cu-cu-mbe-er +ent-FoodShashamber = shashamber + .desc = what? diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl new file mode 100644 index 00000000000..08ca836e997 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumable/food/soup.ftl @@ -0,0 +1,10 @@ +ent-FoodGOOOOLsoup = footbear soup + .desc = I don't think we're playing cards... +ent-FoodOkroshkasoup = okroshka soup + .desc = Salad with kvass and sour cream.. what +ent-FoodOlivielsoup = oliviel soup + .desc = My father never dreamed of so much mayonnaise! +ent-FoodSolankasoup = solanka soup + .desc = Meehhh..... +ent-FoodPlow = plow + .desc = Oh, Vasya, rice is fire diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/produce.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/produce.ftl index b3f0b39036b..139597f9cb0 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/produce.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/produce.ftl @@ -1,4 +1,2 @@ -ent-FoodCucumber = огурец - .desc = длинный и толстый... -ent-FoodShashamber = что это? - .desc = у меня созрел вопрос... + + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/soup.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/soup.ftl index 583e9b88e4e..139597f9cb0 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/soup.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/consumble/food/soup.ftl @@ -1,14 +1,2 @@ -ent-FoodBakedPotatosCutlets = пюрешка с котлетками - .desc = ты потаропись... у нас щас котлетки... -ent-FoodPickles = соленный огурец - .desc = влажный... Самое то с водкой -ent-FoodGOOOOLsoup = медвежий суп - .desc = доигрался в карты.... -ent-FoodOkroshkasoup = окрошка - .desc = салат с квасом? че -ent-FoodOlivielsoup = оливье - .desc = у меня столько майонеза, сколько и не снилось моему отцу! -ent-FoodSolankasoup = солянка - .desc = мээээ..... -ent-FoodPlow = плов - .desc = ой васа, пловъ просто пушка, отвечаю! + + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/effects/footstep.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/effects/footstep.ftl index 23636484792..8b137891791 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/effects/footstep.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/effects/footstep.ftl @@ -1,2 +1 @@ -ent-Footstep = след - .desc = След из жидкости. + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl new file mode 100644 index 00000000000..4712a05d782 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/api_storage_implant.ftl @@ -0,0 +1,2 @@ +ent-ApiStorageImplant = { ent-StorageImplant } + .desc = { ent-StorageImplant.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl index 34b9a3969f3..24a782cdf6b 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/misc/cards.ftl @@ -3,4 +3,4 @@ ent-CardBoxBlack = чёрная упаковка с колодой ent-CardDeckBlack = колода карт ent-CardBase = карта ent-CardHandBase = карты на руке -ent-CardStackBase = карты \ No newline at end of file +ent-CardStackBase = карты diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl new file mode 100644 index 00000000000..139597f9cb0 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/hydroponics/seeds.ftl @@ -0,0 +1,2 @@ + + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl new file mode 100644 index 00000000000..d6f36728f94 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/objects/specific/medical/surgery.ftl @@ -0,0 +1,2 @@ +ent-ScalpelCool = скальпель + .desc = Хирургический инструмент, используемый для выполнения надрезов в плоти. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/player/resomi.ftl @@ -0,0 +1 @@ + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl new file mode 100644 index 00000000000..139597f9cb0 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/species/resomi.ftl @@ -0,0 +1,2 @@ + + diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl index 920ece61aec..4de945cd422 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/structures/machines/vending_machines.ftl @@ -1,2 +1,2 @@ ent-CaptainDrobe = КапитанШкаф - .desc = Стильная униформа для сильного лидера! + .desc = Стильная униформа для сильного лидера! diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl new file mode 100644 index 00000000000..7ad5f8f145f --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgeries.ftl @@ -0,0 +1,70 @@ +ent-SurgeryBase = { "" } + .desc = { "" } +ent-SurgeryOpenIncision = Open Incision + .desc = { ent-SurgeryBase.desc } +ent-SurgeryCloseIncision = Close Incision + .desc = { ent-SurgeryBase.desc } +ent-SurgeryOpenRibcage = Open Ribcage + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemovePart = Remove Part + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachHead = Attach Head + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftArm = Attach Left Arm + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightArm = Attach Right Arm + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftLeg = Attach Left Leg + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightLeg = Attach Right Leg + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftHand = Attach Left Hand + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightHand = Attach Right Hand + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLeftFoot = Attach Left Foot + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachRightFoot = Attach Right Foot + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachLegs = Attach Legs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachHands = Attach Hands + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachFeet = Attach Feet + .desc = { ent-SurgeryBase.desc } +ent-SurgeryAttachTail = Attach Tail + .desc = { ent-SurgeryBase.desc } +ent-SurgeryTendWoundsBrute = Tend Bruise Wounds + .desc = { ent-SurgeryBase.desc } +ent-SurgeryTendWoundsBurn = Tend Burn Wounds + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertItem = Cavity Implant + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveBrain = Remove Brain + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertBrain = Insert Brain + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveHeart = Remove Heart + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertHeart = Insert Heart + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveLiver = Remove Liver + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertLiver = Insert Liver + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveLungs = Remove Lungs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertLungs = Insert Lungs + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveStomach = Remove Stomach + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertStomach = Insert Stomach + .desc = { ent-SurgeryBase.desc } +ent-SurgeryRemoveEyes = Remove Eyes + .desc = { ent-SurgeryBase.desc } +ent-SurgeryInsertEyes = Insert Eyes + .desc = { ent-SurgeryBase.desc } +ent-SurgeryLobotomize = Lobotomize + .desc = { ent-SurgeryBase.desc } +ent-SurgeryMendBrainTissue = Mend brain tissue + .desc = { ent-SurgeryBase.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl new file mode 100644 index 00000000000..41749aad144 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/entities/surgery/surgery_steps.ftl @@ -0,0 +1,60 @@ +ent-SurgeryStepBase = { "" } + .desc = { "" } +ent-SurgeryStepOpenIncisionScalpel = Cut with a scalpel + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepClampBleeders = Clamp the bleeders + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRetractSkin = Retract the skin + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSawBones = Saw through bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepPriseOpenBones = Prise the bones open + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCloseBones = Close bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepMendRibcage = Mend ribcage + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCloseIncision = Close incision + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertFeature = Insert part + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSealWounds = Seal wounds + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSawFeature = Saw through bones + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepClampInternalBleeders = Clamp internal bleeders + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveFeature = Amputate part + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepCarefulIncisionScalpel = Make a careful incision + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRepairBruteTissue = Repair damaged tissue + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRepairBurnTissue = Repair burnt tissue + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepSealTendWound = Seal the wound + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertItem = Insert item into cavity + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveItem = Remove item from cavity + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepRemoveOrgan = Remove organ + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertOrgan = Add organ + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepInsertLungs = Add lungs + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertLiver = Add liver + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertEyes = Add eyes + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertHeart = Add heart + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepInsertStomach = Add stomach + .desc = { ent-SurgeryStepInsertOrgan.desc } +ent-SurgeryStepSealOrganWound = Seal wounds + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepLobotomize = Lobotomize patient + .desc = { ent-SurgeryStepBase.desc } +ent-SurgeryStepMendBrainTissue = Mend brain tissue + .desc = { ent-SurgeryStepBase.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl new file mode 100644 index 00000000000..3bed390889c --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/gamerules/api.ftl @@ -0,0 +1,2 @@ +ent-Api = { ent-BaseGameRule } + .desc = { ent-BaseGameRule.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/basic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/basic.ftl new file mode 100644 index 00000000000..03060f8f817 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/basic.ftl @@ -0,0 +1,11 @@ +action-heretic-store-name = Открыть магазин знаний +action-heretic-store-desc = Откройте магазин знаний. + +action-heretic-grasp-name = Хватка мансуса +action-heretic-grasp-desc = Направьте силу Старых Богов через свою руку. + +action-heretic-heart-name = Живое сердце +action-heretic-heart-desc = Используйте свое сердце, чтобы определить местоположение жертвенных целей. + +action-heretic-link-name = Связь мансуса +action-heretic-link-desc = Пронзите реальность и соедините умы друг с другом. Радиоклавиша по умолчанию - diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_ash.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_ash.ftl new file mode 100644 index 00000000000..29affa1dfda --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_ash.ftl @@ -0,0 +1,14 @@ +action-heretic-ash-passage-name = Пепельный Сдвиг +action-heretic-ash-passage-desc = Заклинание малой дальности, позволяющее беспрепятственно проходить сквозь стены. + +action-heretic-ash-blast-name = Вулканический Взрыв +action-heretic-ash-blast-desc = Зарядите огненную вспышку, которая проносится между ближайшими целями, поджигая их. + +action-heretic-ash-rebirth-name = Пламенное Перерождение +action-heretic-ash-rebirth-desc = Заклинание, которое гасит вас и лишает жизненных сил ближайших язычников, охваченных пламенем. + +action-heretic-ash-oath-name = Клятва пламени +action-heretic-ash-oath-desc = В течение минуты вы будете пассивно создавать вокруг себя огненное кольцо. + +action-heretic-ash-cascade-name = Огненный каскад +action-heretic-ash-cascade-desc = Поджигает воздух вокруг вас. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_blade.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_blade.ftl new file mode 100644 index 00000000000..9d8c29de0b2 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_blade.ftl @@ -0,0 +1,4 @@ +ent-ActionHereticRealignment = Realignment + .desc = Recover from all stuns and knockdowns, gaining short term pacifism. +ent-ActionHereticFuriousSteel = Furious steel + .desc = Summon three orbiting protecting blades around you. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_flesh.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_flesh.ftl new file mode 100644 index 00000000000..e76c1b98997 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_flesh.ftl @@ -0,0 +1,2 @@ +action-heretic-flesh-surgery-name = Хирургия плоти +action-heretic-flesh-surgery-desc = Удалите случайный орган жертвы. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_void.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_void.ftl new file mode 100644 index 00000000000..5f4d150e0ac --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/actions/heretic/path_void.ftl @@ -0,0 +1,8 @@ +action-heretic-void-blast-name = Пусотный выстрел +action-heretic-void-blast-desc = Выстрелите перед собой конусом льда. + +action-heretic-void-phase-name = Пустотный рывой +action-heretic-void-phase-desc = Сделайте рывок сквозь пустоту, сбивая с ног всех вокруг. + +action-heretic-void-pull-name = Тяга к пустоте +action-heretic-void-pull-desc = Притягивайте и повреждайте ближайших язычников. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/head/hoods.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/head/hoods.ftl new file mode 100644 index 00000000000..69ef0754d27 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/head/hoods.ftl @@ -0,0 +1,2 @@ +ent-ClothingHeadHatHoodHeretic = зловещий капюшон + .desc = Порванный, покрытый пылью капюшон. Изнутри видны странные глаза. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/mask/masks.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/mask/masks.ftl new file mode 100644 index 00000000000..dc757b9070e --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/mask/masks.ftl @@ -0,0 +1,2 @@ +ent-ClothingMaskMadHeretic = пустотная маска + .desc = Маска, созданная из страданий. Когда вы смотрите в ее глаза, она смотрит в ответ. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/neck/specific.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/neck/specific.ftl new file mode 100644 index 00000000000..3d989823175 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/neck/specific.ftl @@ -0,0 +1,3 @@ +ent-ClothingNeckAmberFocus = янтарный фокус + .desc = Янтарное фокусирующее стекло, обеспечивающее связь с потусторонним миром. Кажется, что ожерелье подергивается, но только когда вы смотрите на него краем глаза. + .suffix = MagicItem diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/outerclothing/armor.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/outerclothing/armor.ftl new file mode 100644 index 00000000000..be9cf2d4a5a --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/clothing/outerclothing/armor.ftl @@ -0,0 +1,2 @@ +ent-ClothingOuterArmorHeretic = зловещие доспехи + .desc = Потрепанная, пыльная одежда. Внутри - странные глаза. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/eldritch_mobs.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/eldritch_mobs.ftl new file mode 100644 index 00000000000..cbcbc94215b --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/eldritch_mobs.ftl @@ -0,0 +1,9 @@ +ent-BaseMobGhoul = { ent-SimpleMobBase } + .desc = { ent-SimpleMobBase.desc } +ent-MobGhoulStalker = гончий плоти + .desc = Мерзость, собранная из разных останков. Его внешний вид слегка меняется каждый раз, когда вы моргаете. +ent-MobGhoulProphet = нечестивый Проповедник + .desc = Мерзость, сшитая из нескольких отрубленных рук и одного опухшего, осиротевшего глаза. +ent-MobHereticFleshAscend = вестник плоти + .desc = Непонятное месиво из конечностей и глаз. Вы чувствуете, как он смотрит вам в душу. + .suffix = DO NOT MAP diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/polymorph.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/polymorph.ftl new file mode 100644 index 00000000000..548cd62b6de --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/mobs/npc/polymorph.ftl @@ -0,0 +1,11 @@ +ent-PolymorphAshJauntAnimation = пепельное нечто + .desc = Я не думаю, что тебе стоит это читать. + +ent-PolymorphAshJauntEndAnimation = пепельное нечто + .desc = Я не думаю, что тебе стоит это читать. + +ent-PolymorphAshJaunt = пепельное нечто + .desc = Я не думаю, что тебе стоит это читать. +ent-MobHereticFleshAscend = эльдрический ужас + .desc = Непонятное месиво из конечностей и глаз. Вы чувствуете, как он заглядывает вам в душу. + .suffix = DO NOT MAP diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/magic_contraband.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/magic_contraband.ftl new file mode 100644 index 00000000000..55d875efe86 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/magic_contraband.ftl @@ -0,0 +1,2 @@ +ent-BaseMagicContraband = { "" } + .desc = { "" } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/specific/heretic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/specific/heretic.ftl new file mode 100644 index 00000000000..a2b934d5c97 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/specific/heretic.ftl @@ -0,0 +1,8 @@ +ent-CodexCicatrix = кодекс цикатрикс + .desc = Зловещая книга, которую вы никогда раньше не видели. Кажется, что буквы постоянно движутся. +ent-HereticEldritchFlask = зловещая колба + .desc = Колба, наполненная неизвестным веществом. Кто знает, что произойдет, когда вы сделаете из нее глоток. +ent-HereticProtectiveBlade = эльдрический клинок + .desc = Лабиринт бритв, мелькающий прямо перед вашими глазами. Почему вы остановились, чтобы посмотреть на него? +ent-HereticProtectiveBladeProjectile = эльдрический клинок + .desc = Метель бритв, вспыхивающая прямо перед вашими глазами. Почему вы остановились, чтобы посмотреть на него? diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl new file mode 100644 index 00000000000..60196bc3d49 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/guns/projectiles/projectiles.ftl @@ -0,0 +1,2 @@ +ent-FireballChain = огненный шар + .desc = Ой-ёй. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/melee/heretic_blades.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/melee/heretic_blades.ftl new file mode 100644 index 00000000000..d135eb060ca --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/melee/heretic_blades.ftl @@ -0,0 +1,20 @@ +ent-HereticBladeBase = элдрический клинок + .desc = Болезненный клинок, используемый зловещими личностями для ритуалов и жертвоприношений. +ent-HereticBladeAsh = пепельный клинок + .suffix = Ash + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeBlade = саблевидный клинок + .suffix = Blade + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeFlesh = кровавый клинок + .suffix = Flesh + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeLock = ключной клинок + .suffix = Lock + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeRust = ржавый клинок + .suffix = Rust + .desc = { ent-HereticBladeBase.desc } +ent-HereticBladeVoid = пустотный клинок + .suffix = Void + .desc = { ent-HereticBladeBase.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl new file mode 100644 index 00000000000..8ed43ace548 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/objects/weapons/touchspell/mansus_grasp.ftl @@ -0,0 +1,2 @@ +ent-TouchSpellMansus = хватка мансуса + .desc = Сила Старых Богов, направленная через твой хват. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/eldritch_influence.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/eldritch_influence.ftl new file mode 100644 index 00000000000..d7dfdf2b46f --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/eldritch_influence.ftl @@ -0,0 +1,6 @@ +ent-EldritchInfluence = reality shift + .desc = Your eyes start to burn just from a single look. Should you delve deeper? +ent-EldritchInfluenceIntermediate = { "" } + .desc = { "" } +ent-EldritchInfluenceSpent = reality fracture + .desc = A reality fracture. Something keeps leaking out of it, should you really be near this thing? diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/ritual_rune.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/ritual_rune.ftl new file mode 100644 index 00000000000..19efea92fbb --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/entities/structures/specific/heretic/ritual_rune.ftl @@ -0,0 +1,6 @@ +ent-HereticRuneRitual = transmutation rune + .desc = An ancient drawing used by sinister individuals for sacrifices. +ent-HereticRuneRitualDrawAnimation = unfinished transmutation rune + .desc = An unfinished ancient drawing used by sinister individuals for sacrifices. +ent-HereticRuneRitualAnimation = transmutation rune + .desc = you shouldn't be seeing this description diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/gamerules/roundstart.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/gamerules/roundstart.ftl new file mode 100644 index 00000000000..a7d4ff60876 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/gamerules/roundstart.ftl @@ -0,0 +1,2 @@ +ent-Heretic = { ent-BaseGameRule } + .desc = { ent-BaseGameRule.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/objectives/heretic.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/objectives/heretic.ftl new file mode 100644 index 00000000000..4e4a840abf3 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/heretic/objectives/heretic.ftl @@ -0,0 +1,8 @@ +ent-BaseHereticObjective = { ent-BaseObjective } + .desc = { ent-BaseObjective.desc } +ent-HereticKnowledgeObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } +ent-HereticSacrificeObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } +ent-HereticSacrificeHeadObjective = { ent-BaseHereticObjective } + .desc = { ent-BaseHereticObjective.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl new file mode 100644 index 00000000000..80839771e68 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/_corvaxnext/roles/mindroles/api_mind_role.ftl @@ -0,0 +1,2 @@ +ent-MindRoleApi = Api Role + .desc = { ent-BaseMindRoleAntag.desc } diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 37dfaa72a92..fe6dc01b867 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -19,9 +19,10 @@ - type: FlavorProfile flavors: - chicken # everything kinda tastes like chicken - - type: Tag + - type: Tag # goob edit tags: - - Meat + - Meat + - Organ - type: entity id: BaseAnimalOrgan @@ -64,6 +65,11 @@ - type: Item size: Small heldPrefix: lungs + - type: Tag # goob edit + tags: + - Meat + - Organ + - Lungs - type: entity id: OrganAnimalStomach @@ -94,6 +100,11 @@ - type: Item size: Small heldPrefix: stomach + - type: Tag # goob edit + tags: + - Meat + - Organ + - Stomach - type: entity id: OrganMouseStomach @@ -181,6 +192,11 @@ - type: Item size: Small heldPrefix: kidneys + - type: Tag # goob edit + tags: + - Meat + - Organ + - Kidneys - type: entity id: OrganAnimalBrain diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index a65622b6649..66e5e22f7d3 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -21,9 +21,10 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 - - type: Tag + - type: Tag # goob edit tags: - - Meat + - Meat + - Organ - type: entity id: OrganArachnidStomach @@ -52,6 +53,11 @@ Quantity: 5 - type: Metabolizer updateInterval: 1.5 + - type: Tag # goob edit + tags: + - Meat + - Organ + - Stomach - type: entity id: OrganArachnidLungs @@ -89,6 +95,11 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Tag # goob edit + tags: + - Meat + - Organ + - Lungs - type: entity id: OrganArachnidHeart @@ -163,6 +174,11 @@ maxReagents: 5 metabolizerTypes: [Animal] removeEmpty: true + - type: Tag # goob edit + tags: + - Meat + - Organ + - Kidneys - type: entity id: OrganArachnidEyes @@ -194,3 +210,8 @@ components: - type: Sprite state: tongue + - type: Tag # goob edit + tags: + - Meat + - Organ + - Tongue diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index d779dc64113..6f3a293c8c4 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -24,10 +24,14 @@ - type: FlavorProfile flavors: - people + - type: Tag # goob edit + tags: + - Meat + - Organ - type: entity id: OrganDionaBrain - parent: [BaseDionaOrgan, OrganHumanBrain] + parent: BaseDionaOrgan name: brain description: "The central hub of a diona's pseudo-neurological activity, its root-like tendrils search for its former body." components: @@ -54,6 +58,11 @@ reagents: - ReagentId: GreyMatter Quantity: 5 + - type: Tag # goob edit + tags: + - Meat + - Organ + - Brain - type: entity id: OrganDionaEyes @@ -108,6 +117,11 @@ - type: Item size: Small heldPrefix: stomach + - type: Tag # goob edit + tags: + - Meat + - Organ + - Stomach - type: entity id: OrganDionaLungs @@ -141,6 +155,11 @@ Lung: maxVol: 100 canReact: False + - type: Tag # goob edit + tags: + - Meat + - Organ + - Lungs # Organs that turn into nymphs on removal - type: entity @@ -154,6 +173,11 @@ - type: Nymph # This will make the organs turn into a nymph when they're removed. entityPrototype: OrganDionaNymphBrain transferMind: true + - type: Tag # goob edit + tags: + - Meat + - Organ + - Brain - type: entity id: OrganDionaStomachNymph @@ -164,6 +188,11 @@ components: - type: Nymph entityPrototype: OrganDionaNymphStomach + - type: Tag # goob edit + tags: + - Meat + - Organ + - Stomach - type: entity id: OrganDionaLungsNymph @@ -174,6 +203,11 @@ components: - type: Nymph entityPrototype: OrganDionaNymphLungs + - type: Tag # goob edit + tags: + - Meat + - Organ + - Lungs # Nymphs that the organs will turn into - type: entity diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index 3166ef0baba..4390b8276be 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -26,6 +26,7 @@ - type: Tag tags: - Meat + - Organ - type: entity id: BaseHumanOrgan @@ -54,6 +55,8 @@ - type: Tag tags: - Meat + - Organ # heretics edit + - Brain # heretics edit - type: SolutionContainerManager solutions: organ: @@ -94,6 +97,11 @@ - type: Item size: Small heldPrefix: eyeballs + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Eyes - type: entity id: OrganHumanTongue @@ -103,6 +111,11 @@ components: - type: Sprite state: tongue + - type: Tag # goob edit + tags: + - Meat + - Organ + - Tongue - type: entity id: OrganHumanAppendix @@ -163,6 +176,11 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Lungs - type: entity id: OrganHumanHeart @@ -190,6 +208,11 @@ - type: Item size: Small heldPrefix: heart + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Heart - type: entity id: OrganHumanStomach @@ -224,6 +247,11 @@ groups: - id: Food - id: Drink + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Stomach - type: entity id: OrganHumanLiver @@ -247,6 +275,11 @@ groups: - id: Alcohol rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Liver - type: entity id: OrganHumanKidneys @@ -266,3 +299,8 @@ maxReagents: 5 metabolizerTypes: [Human] removeEmpty: true + - type: Tag # heretics edit + tags: + - Meat + - Organ + - Kidneys diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml index de49de3054a..6b22d6d3155 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml @@ -9,6 +9,9 @@ size: Small - type: Clothing slots: [mask] + - type: Tag # goob edit + tags: + - Mask - type: StaticPrice price: 25 diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 0dd16dceb14..5c058b51a3a 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -15,6 +15,8 @@ tags: - HamsterWearable - WhitelistChameleon + - GasMask # goob edit + - Mask # goob edit - type: HideLayerClothing slots: - Snout @@ -200,6 +202,7 @@ tags: - ClownMask - WhitelistChameleon + - Mask - type: HideLayerClothing slots: - Snout diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 7bcdf52088f..6b247bf3727 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -189,6 +189,10 @@ type: StrippableBoundUserInterface enum.SurgeryUIKey.Key: # _CorvaxNext: surgery type: SurgeryBui + enum.StoreUiKey.Key: # goob edit - heretics + type: StoreBoundUserInterface + enum.HereticLivingHeartKey.Key: # goob edit - heretics + type: LivingHeartMenuBoundUserInterface - type: Puller - type: Speech speechSounds: Alto diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index abd5f5308af..93694e4966a 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -34,6 +34,8 @@ type: StrippableBoundUserInterface enum.SurgeryUIKey.Key: # _CorvaxNext: surgery type: SurgeryBui + enum.HereticLivingHeartKey.Key: # goob edit - heretics + type: LivingHeartMenuBoundUserInterface # to prevent bag open/honk spam - type: UseDelay delay: 0.5 diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index d1c6f878bdc..2678c961e7b 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -202,7 +202,7 @@ canResistFire: true damage: #per second, scales with number of fire 'stacks' types: - Heat: 1.5 + Heat: 0.5 # goob edit - ash heretic must weep - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Generic_mob_burning diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 28c9129d167..dc5560d3b1e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -1463,6 +1463,7 @@ - type: Tag tags: - Flower # TODO add "RedFlower" or "Poppy" tag, when other color flowers will be + - Poppy # goob edit - type: FoodSequenceElement entries: Taco: Poppy diff --git a/Resources/Prototypes/Entities/Objects/Devices/geiger.yml b/Resources/Prototypes/Entities/Objects/Devices/geiger.yml index f8ee24c5c60..a1703474272 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/geiger.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/geiger.yml @@ -34,4 +34,7 @@ - type: PhysicalComposition materialComposition: Plastic: 100 + - type: Tag # goob edit + tags: + - GeigerCounter diff --git a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml index 0bee05aa6ad..49d56f11502 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml @@ -33,6 +33,39 @@ follow: true location: immovable rod +# goob edit +- type: entity + id: ImmovableVoidRod + name: immovable void rod + description: You can sense that it's hungry. That's usually a bad sign. + components: + - type: Clickable + - type: InteractionOutline + - type: MovementIgnoreGravity + - type: Sprite + sprite: _Goobstation/Heretic/abilities_heretic.rsi + state: immovable_rod + noRot: false + - type: ImmovableVoidRod + - type: Physics + bodyType: Dynamic + linearDamping: 0 + - type: PointLight + radius: 3 + color: blue + energy: 2.0 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.5 + density: 1 + hard: false + layer: + - Impassable + - Opaque + - type: entity id: ImmovableRodDespawn suffix: Despawn diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index 7a3b298129f..fbb39f42a1f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -4,6 +4,9 @@ id: Stunprod description: A stun prod for illegal incapacitation. components: + - type: Tag # goob edit + tags: + - Stunbaton - type: Sprite sprite: Objects/Weapons/Melee/stunprod.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index edbe58f584f..28633b75ad7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -4,6 +4,9 @@ id: Stunbaton description: A stun baton for incapacitating people with. Actively harming with this is considered bad tone. components: + - type: Tag # goob edit + tags: + - Stunbaton - type: Sprite sprite: Objects/Weapons/Melee/stunbaton.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml index fba7864ac16..b199f2c03fa 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml @@ -195,6 +195,9 @@ - type: Construction graph: Table node: Table + - type: Tag # goob edit + tags: + - Table - type: entity id: TableReinforced diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index b9a77aa8faa..2213362c631 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -85,6 +85,9 @@ description: A water tank. It's used to store high amounts of water. suffix: Empty components: + - type: Tag # goob edit + tags: + - WaterTank - type: StaticPrice price: 500 - type: Sprite diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index dad6e65fce8..b2bd516120a 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -22,6 +22,8 @@ rules: - id: Thief prob: 0.5 + - id: Heretic # goob edit + prob: 0.2 - type: entity id: DeathMatch31 diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index ea28a68bc33..b218fc26f18 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -4,6 +4,7 @@ text: "/ServerInfo/Guidebook/Antagonist/Antagonists.xml" children: - Traitors + - Heretics # goob - heretics - NuclearOperatives - Zombies - Revolutionaries diff --git a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml index 7f931639a0e..676af4311c7 100644 --- a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml +++ b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml @@ -181,3 +181,17 @@ antagPrototype: Zombie exclusiveAntag: true - type: ZombieRole + +# goob edit - heretics + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleHeretic + name: Heretic Role + components: + - type: MindRole + antagPrototype: Heretic + exclusiveAntag: true + - type: HereticRole + +# goob edit end diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/basic.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/basic.yml new file mode 100644 index 00000000000..802786f6445 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/basic.yml @@ -0,0 +1,64 @@ +# actions +- type: entity + id: ActionHereticOpenStore + name: Open Knowledge Store + description: Open the Knowledge Store. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: open_store + event: !type:EventHereticOpenStore {} + - type: HereticAction + requireMagicItem: false + +- type: entity + id: ActionHereticMansusGrasp + name: Mansus Grasp + description: Channel the power of the Old Gods through your grip. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 10 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: mansus_grasp + event: !type:EventHereticMansusGrasp {} + - type: HereticAction + requireMagicItem: false + +- type: entity + id: ActionHereticLivingHeart + name: Living Heart + description: Use your heart to get your sacrifice targets location. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 2 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: living_heart + event: !type:EventHereticLivingHeart {} + - type: HereticAction + requireMagicItem: false + +- type: entity + id: ActionHereticMansusLink + name: Manse Link + description: Pierce through reality and connect minds to one another. Default radio key is :z + categories: [ HideSpawnMenu ] + components: + - type: EntityTargetAction + useDelay: 10 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: mansus_link + event: !type:EventHereticMansusLink {} + - type: HereticAction + requireMagicItem: false + messageLoc: heretic-speech-link diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_ash.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_ash.yml new file mode 100644 index 00000000000..c0e8c8d2aa3 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_ash.yml @@ -0,0 +1,84 @@ +- type: entity + id: ActionHereticJaunt + name: Ashen Passage + description: A short range spell that allows you to pass unimpeded through walls. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 15 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: ashen_shift + event: !type:EventHereticAshenShift + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-ash-jaunt + +- type: entity + id: ActionHereticVolcanoBlast + name: Volcanic Blast + description: Charge up a blast of fire that chains between nearby targets, setting them ablaze. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 10 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: volcano_blast + event: !type:EventHereticVolcanoBlast + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-ash-volcano + +- type: entity + id: ActionHereticNightwatcherRebirth + name: Nightwatcher's Rebirth + description: A spell that extinguishes you and drains nearby heathens engulfed in flames of their life force. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 15 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: nightwatcher_rebirth + event: !type:EventHereticNightwatcherRebirth + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-ash-rebirth + +- type: entity + id: ActionHereticAscension1 + name: Oath of Flame + description: For a minute, you will passively create a ring of fire around you. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 90 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: ashlord_rite1 + event: !type:EventHereticFlames + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-ash-flame + +- type: entity + id: ActionHereticAscension2 + name: Fire Cascade + description: Heats the air around you. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 30 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: ashlord_rite2 + event: !type:EventHereticCascade + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-ash-cascade diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_blade.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_blade.yml new file mode 100644 index 00000000000..caa1466ed86 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_blade.yml @@ -0,0 +1,36 @@ +# actions +- type: entity + id: ActionHereticRealignment + name: Realignment + description: Recover from all stuns and knockdowns, gaining short term pacifism. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + checkCanInteract: false + checkConsciousness: false + useDelay: 10 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: realignment + event: !type:EventHereticRealignment + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-realignment + +- type: entity + id: ActionHereticFuriousSteel + name: Furious steel + description: Summon three orbiting protecting blades around you. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 30 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: furious_steel + event: !type:EventHereticFuriousSteel + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-blade-furioussteel diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_flesh.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_flesh.yml new file mode 100644 index 00000000000..ea394156191 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_flesh.yml @@ -0,0 +1,14 @@ +- type: entity + id: ActionHereticFleshSurgery + name: flesh surgery + description: Remove a random organ from someone, or heal your teammates. + components: + - type: EntityTargetAction + useDelay: 30 + event: !type:EventHereticFleshSurgery + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: flesh_surgery + - type: HereticAction + messageLoc: heretic-speech-flesh-surgery diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_side.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_side.yml new file mode 100644 index 00000000000..4f729951623 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_side.yml @@ -0,0 +1 @@ +# actions diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_void.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_void.yml new file mode 100644 index 00000000000..04058f80d46 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Actions/Heretic/path_void.yml @@ -0,0 +1,53 @@ +- type: entity + id: ActionHereticVoidBlast + name: Void Blast + description: Fire off a cone of ice in front of you. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 15 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: void_blast + event: !type:HereticVoidBlastEvent + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-void-blast + +- type: entity + id: ActionHereticVoidPhase + name: Void Phase + description: Shift through the void, knocking down everyone around you. + categories: [ HideSpawnMenu ] + components: + - type: WorldTargetAction + useDelay: 15 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: void_phase + event: !type:HereticVoidBlinkEvent + checkCanAccess: false + range: 0 + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-void-phase + +- type: entity + id: ActionHereticVoidPull + name: Void Pull + description: Pull and damage nearby heathens. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + useDelay: 20 + itemIconStyle: NoItem + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: void_pull + event: !type:HereticVoidPullEvent + - type: HereticAction + requireMagicItem: true + messageLoc: heretic-speech-void-pull + diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_ash.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_ash.yml new file mode 100644 index 00000000000..d5ea6d5fa20 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_ash.yml @@ -0,0 +1,163 @@ +- type: listing + id: HereticAshPath1 + name: knowledge-path-ash-s1-name + description: knowledge-path-ash-s1-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_ash.rsi, state: icon } + productHereticKnowledge: NightwatcherSecret + cost: + KnowledgePoint: 1 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 + # add every path here because you shouldn't be able to buy more starter knowledge + blacklist: + - Ash + - Blade + - Flesh + - Lock + - Void + +- type: listing + id: HereticAshPath2 + name: knowledge-path-ash-s2-name + description: knowledge-path-ash-s2-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: GraspOfAsh + cost: + KnowledgePoint: 1 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 1 + whitelist: + - Ash + +# side +- type: listing + id: HereticAshPath3 + name: knowledge-path-ash-s3-name + description: knowledge-path-ash-s3-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: ashen_shift } + productHereticKnowledge: AshenShift + cost: + KnowledgePoint: 2 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticAshPath4 + name: knowledge-path-ash-s4-name + description: knowledge-path-ash-s4-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: MarkOfAsh + cost: + KnowledgePoint: 1 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 3 + whitelist: + - Ash + +- type: listing + id: HereticAshPath5 + name: knowledge-path-ash-s5-name + description: knowledge-path-ash-s5-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: volcano_blast } + productHereticKnowledge: VolcanicBlast + cost: + KnowledgePoint: 1 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 4 + whitelist: + - Ash + +# side +- type: listing + id: HereticAshPath6 + name: knowledge-path-ash-s6-name + description: knowledge-path-ash-s6-desc + icon: { sprite: _CorvaxNext/Heretic/mad_mask.rsi, state: icon } + productHereticKnowledge: MaskOfMadness + cost: + KnowledgePoint: 2 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 5 + +- type: listing + id: HereticAshPath7 + name: knowledge-path-ash-s7-name + description: knowledge-path-ash-s7-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_ash.rsi, state: icon } + productHereticKnowledge: FieryBlade + cost: + KnowledgePoint: 1 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 6 + whitelist: + - Ash + +# side +- type: listing + id: HereticAshPath8 + name: knowledge-path-ash-s8-name + description: knowledge-path-ash-s8-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: nightwatcher_rebirth } + productHereticKnowledge: NightwatcherRebirth + cost: + KnowledgePoint: 2 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 7 + +- type: listing + id: HereticAshPath9 + name: knowledge-path-ash-s9-name + description: knowledge-path-ash-s9-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: ashlord_rite1 } + productHereticKnowledge: AscensionAsh + cost: + KnowledgePoint: 2 + categories: + - HereticPathAsh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 8 + whitelist: + - Ash diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_blade.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_blade.yml new file mode 100644 index 00000000000..00a6a274bfe --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_blade.yml @@ -0,0 +1,163 @@ +- type: listing + id: KnowledgePathStartBlade + name: knowledge-path-blade-s1-name + description: knowledge-path-blade-s1-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_blade.rsi, state: icon } + productHereticKnowledge: CuttingEdge + cost: + KnowledgePoint: 1 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 + # add every path here because you shouldn't be able to buy more starter knowledge + blacklist: + - Ash + - Blade + - Flesh + - Lock + - Void + +- type: listing + id: HereticBladePath2 + name: knowledge-path-blade-s2-name + description: knowledge-path-blade-s2-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: GraspOfBlade + cost: + KnowledgePoint: 1 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 1 + whitelist: + - Blade + +# side +- type: listing + id: HereticBladePath3 + name: knowledge-path-blade-s3-name + description: knowledge-path-blade-s3-desc + icon: { sprite: _CorvaxNext/Heretic/book.rsi, state: icon-on } + productHereticKnowledge: DanceOfTheBrand + cost: + KnowledgePoint: 2 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticBladePath4 + name: knowledge-path-blade-s4-name + description: knowledge-path-blade-s4-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: MarkOfBlade + cost: + KnowledgePoint: 1 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 3 + whitelist: + - Blade + +- type: listing + id: HereticBladePath5 + name: knowledge-path-blade-s5-name + description: knowledge-path-blade-s5-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: realignment } + productHereticKnowledge: Realignment + cost: + KnowledgePoint: 1 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 4 + whitelist: + - Blade + +# side +- type: listing + id: HereticBladePath6 + name: knowledge-path-blade-s6-name + description: knowledge-path-blade-s6-desc + icon: { sprite: _CorvaxNext/Heretic/book.rsi, state: icon-on } + productHereticKnowledge: TornChampionStance + cost: + KnowledgePoint: 2 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 5 + +- type: listing + id: HereticBladePath7 + name: knowledge-path-blade-s7-name + description: knowledge-path-blade-s7-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: EmpoweredBlades + cost: + KnowledgePoint: 1 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 6 + whitelist: + - Blade + +# side +- type: listing + id: HereticBladePath8 + name: knowledge-path-blade-s8-name + description: knowledge-path-blade-s8-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: furious_steel } + productHereticKnowledge: FuriousSteel + cost: + KnowledgePoint: 2 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 7 + +- type: listing + id: HereticBladePath9 + name: knowledge-path-blade-s9-name + description: knowledge-path-blade-s9-desc + icon: { sprite: _CorvaxNext/Heretic/items.rsi, state: protective_blade } + productHereticKnowledge: AscensionBlade + cost: + KnowledgePoint: 3 + categories: + - HereticPathBlade + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 8 + whitelist: + - Blade diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_flesh.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_flesh.yml new file mode 100644 index 00000000000..37a5c79c672 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_flesh.yml @@ -0,0 +1,163 @@ +- type: listing + id: KnowledgePathStartFlesh + name: knowledge-path-flesh-s1-name + description: knowledge-path-flesh-s1-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_flesh.rsi, state: icon } + productHereticKnowledge: PrincipleOfHunger + cost: + KnowledgePoint: 1 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 + # add every path here because you shouldn't be able to buy more starter knowledge + blacklist: + - Ash + - Blade + - Flesh + - Lock + - Void + +- type: listing + id: HereticFleshPath2 + name: knowledge-path-flesh-s2-name + description: knowledge-path-flesh-s2-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: GraspOfFlesh + cost: + KnowledgePoint: 1 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 1 + whitelist: + - Flesh + +# side +- type: listing + id: HereticFleshPath3 + name: knowledge-path-flesh-s3-name + description: knowledge-path-flesh-s3-desc + icon: { sprite: Objects/Specific/Hydroponics/poppy.rsi, state: dead } + productHereticKnowledge: ImperfectRitual + cost: + KnowledgePoint: 2 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticFleshPath4 + name: knowledge-path-flesh-s4-name + description: knowledge-path-flesh-s4-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: MarkOfFlesh + cost: + KnowledgePoint: 1 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 3 + whitelist: + - Flesh + +- type: listing + id: HereticFleshPath5 + name: knowledge-path-flesh-s5-name + description: knowledge-path-flesh-s5-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: flesh_surgery } + productHereticKnowledge: KnittingOfFlesh + cost: + KnowledgePoint: 1 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 4 + whitelist: + - Flesh + +# side +- type: listing + id: HereticFleshPath6 + name: knowledge-path-flesh-s6-name + description: knowledge-path-flesh-s6-desc + icon: { sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi, state: raw_prophet } + productHereticKnowledge: RawRitual + cost: + KnowledgePoint: 2 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 5 + +- type: listing + id: HereticFleshPath7 + name: knowledge-path-flesh-s7-name + description: knowledge-path-flesh-s7-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_flesh.rsi, state: icon } + productHereticKnowledge: BleedingSteel + cost: + KnowledgePoint: 1 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 6 + whitelist: + - Flesh + +# side +- type: listing + id: HereticFleshPath8 + name: knowledge-path-flesh-s8-name + description: knowledge-path-flesh-s8-desc + icon: { sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi, state: stalker } + productHereticKnowledge: LonelyRitual + cost: + KnowledgePoint: 2 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 7 + +- type: listing + id: HereticFleshPath9 + name: knowledge-path-flesh-s9-name + description: knowledge-path-flesh-s9-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: final_hymn } + productHereticKnowledge: AscensionFlesh + cost: + KnowledgePoint: 2 + categories: + - HereticPathFlesh + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 8 + whitelist: + - Flesh diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_lock.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_lock.yml new file mode 100644 index 00000000000..ec86f44519b --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_lock.yml @@ -0,0 +1,22 @@ +- type: listing + id: KnowledgePathStartLock + name: knowledge-path-lock-s1-name + description: knowledge-path-lock-s1-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_lock.rsi, state: icon } + #productHereticKnowledge: + cost: + KnowledgePoint: 1 + categories: + - HereticPathLock + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 + # add every path here because you shouldn't be able to buy more starter knowledge + blacklist: + - Ash + - Blade + - Flesh + - Lock + - Void diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_side.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_side.yml new file mode 100644 index 00000000000..d4f49c1be16 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_side.yml @@ -0,0 +1,47 @@ +# store catalog +- type: listing + id: HereticSidePath3Armor + name: knowledge-path-side-s3-armor-name + description: knowledge-path-side-s3-armor-desc + icon: { sprite: _CorvaxNext/Heretic/eldritch_hood.rsi, state: icon } + productHereticKnowledge: ArmorerRitual + cost: + KnowledgePoint: 2 + categories: + - HereticPathSide + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticSidePath3Flask + name: knowledge-path-side-s3-flask-name + description: knowledge-path-side-s3-flask-desc + icon: { sprite: _CorvaxNext/Heretic/items.rsi, state: eldritch_flask } + productHereticKnowledge: PriestRitual + cost: + KnowledgePoint: 2 + categories: + - HereticPathSide + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticSidePathKnowledge + name: knowledge-path-side-knowledge-name + description: knowledge-path-side-knowledge-desc + productHereticKnowledge: RitualOfKnowledge + cost: + KnowledgePoint: 2 + categories: + - HereticPathSide + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_void.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_void.yml new file mode 100644 index 00000000000..760293d7d59 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Catalog/Heretic/path_void.yml @@ -0,0 +1,160 @@ +- type: listing + id: HereticVoidPath1 + name: knowledge-path-void-s1-name + description: knowledge-path-void-s1-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_void.rsi, state: icon } + productHereticKnowledge: GlimmerOfWinter + cost: + KnowledgePoint: 1 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 0 + # add every path here because you shouldn't be able to buy more starter knowledge + blacklist: + - Ash + - Blade + - Flesh + - Lock + - Void + +- type: listing + id: HereticVoidPath2 + name: knowledge-path-void-s2-name + description: knowledge-path-void-s2-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: GraspOfVoid + cost: + KnowledgePoint: 1 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 1 + whitelist: + - Void + +- type: listing + id: HereticVoidPath3 + name: knowledge-path-void-s3-name + description: knowledge-path-void-s3-desc + icon: { sprite: Interface/Alerts/temperature.rsi, state: cold1 } + productHereticKnowledge: AristocratWay + cost: + KnowledgePoint: 2 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 2 + +- type: listing + id: HereticVoidPath4 + name: knowledge-path-void-s4-name + description: knowledge-path-void-s4-desc + icon: { sprite: _CorvaxNext/Heretic/mansus_grasp.rsi, state: icon } + productHereticKnowledge: MarkOfVoid + cost: + KnowledgePoint: 1 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 3 + whitelist: + - Void + +- type: listing + id: HereticVoidPath5 + name: knowledge-path-void-s5-name + description: knowledge-path-void-s5-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: void_blast } + productHereticKnowledge: VoidBlast + cost: + KnowledgePoint: 1 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 4 + whitelist: + - Void + +- type: listing + id: HereticVoidPath6 + name: knowledge-path-void-s6-name + description: knowledge-path-void-s6-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: void_phase } + productHereticKnowledge: VoidPhase + cost: + KnowledgePoint: 2 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 5 + +- type: listing + id: HereticVoidPath7 + name: knowledge-path-void-s7-name + description: knowledge-path-void-s7-desc + icon: { sprite: _CorvaxNext/Heretic/Blades/blade_void.rsi, state: icon } + productHereticKnowledge: SeekingBlade + cost: + KnowledgePoint: 1 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 6 + whitelist: + - Void + +- type: listing + id: HereticVoidPath8 + name: knowledge-path-void-s8-name + description: knowledge-path-void-s8-desc + icon: { sprite: _CorvaxNext/Heretic/abilities_heretic.rsi, state: void_pull } + productHereticKnowledge: VoidPull + cost: + KnowledgePoint: 2 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 7 + +- type: listing + id: HereticVoidPath9 + name: knowledge-path-void-s9-name + description: knowledge-path-void-s9-desc + icon: { sprite: Interface/Alerts/temperature.rsi, state: cold3 } + productHereticKnowledge: AscensionVoid + cost: + KnowledgePoint: 2 + categories: + - HereticPathVoid + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + - !type:HereticPathCondition + stage: 8 + whitelist: + - Void diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Datasets/tags.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Datasets/tags.yml new file mode 100644 index 00000000000..ed4cc7d7fbd --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Datasets/tags.yml @@ -0,0 +1,124 @@ +- type: dataset + id: EligibleTags + values: + - BreathMask + - ClownEmergencyOxygenTank + - EmergencyMedipen + - EmergencyNitrogenTank + - EmergencyOxygenTank + - ExtendedEmergencyOxygenTank + - MedicalPatch + - SecurityBreathMask + - SpaceMedipen + - AirAlarm + - AirAlarmElectronics + - Airlock + - AirSensor + - Ambrosia + - AppraisalTool + - Arrow + - ArtifactFragment + - Banana + - BananaPeel + - BaseballBat + - BBQsauce + - Bedsheet + - Beer + - BikeHorn + - Bloodpack + - BodyBag + - Book + - BorgArm + - BorgHead + - BorgLeg + - BotanyHatchet + - BotanyHoe + - BotanyShovel + - Bottle + - Brain + - Bread + - Briefcase + - BrimFlatcapBrown + - BrimFlatcapGrey + - Brutepack + - Bucket + - CableCoil + - Candle + - Cake + - CaptainSabre + - Carpet + - Carrot + - Chicken + - Cigarette + - CigFilter + - CigPack + - Cleaver + - ClownMask + - ClownRecorder + - ClownShoes + - ClownSuit + - CombatKnife + - ConveyorAssembly + - Cow + - Crayon + - Crowbar + - DoorElectronics + - Egg + - Eyes + - Figurine + - FireAlarm + - FireAlarmElectronics + - Flare + - Flashlight + - Flower + - Folder + - Fruit + - Galaxythistle + - GasMask + - GasScrubber + - GasTank + - GasVent + - Gauze + - GeigerCounter + - GlassAirlock + - GlassBeaker + - GlassShard + - Goat + - GPS + - HudMedical + - HudSecurity + - Hamster + - Hardsuit + - Heart + - HelmetEVA + - Igniter + - Liver + - Lungs + - Mask + - Mayo + - Meat + - Medal + - Medkit + - MicrowaveMachineBoard + - MonkeyCube + - Mop + - Mouse + - Multitool + - Ointment + - Organ + - Paper + - Pen + - Pickaxe + - Pill + - PillCanister + - Pipe + - PowerCell + - Shiv + - Soap + - Stomach + - Steak + - Sunglasses + - SurgeryTool + - Trash + - Wirecutter + - Wrench diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Head/hoods.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Head/hoods.yml new file mode 100644 index 00000000000..52f3c27d59b --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Head/hoods.yml @@ -0,0 +1,18 @@ +- type: entity + parent: [ ClothingHeadBase, BaseMagicContraband ] + id: ClothingHeadHatHoodHeretic + name: ominous hood + description: A torn, dust-caked hood. Strange eyes line the inside. + components: + - type: HereticMagicItem + - type: Sprite + sprite: _CorvaxNext/Heretic/eldritch_hood.rsi + state: icon + - type: Clothing + sprite: _CorvaxNext/Heretic/eldritch_hood.rsi + - type: Tag + tags: + - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Mask/masks.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Mask/masks.yml new file mode 100644 index 00000000000..78a708475d8 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Mask/masks.yml @@ -0,0 +1,23 @@ +- type: entity + parent: [ ClothingMaskBase, BaseMagicContraband ] + id: ClothingMaskMadHeretic + name: abyssal mask + description: A mask created from suffering. When you look into its eyes, it looks back. + components: + # what heretic would remove the mask that will shit on everyone around him? + # also forcing the mask on heathens will be funny. + - type: SelfUnremovableClothing + - type: MadnessMask + - type: Sprite + sprite: _CorvaxNext/Heretic/mad_mask.rsi + - type: Clothing + sprite: _CorvaxNext/Heretic/mad_mask.rsi + - type: BreathMask + - type: IdentityBlocker + - type: Tag + tags: + - Mask + - WhitelistChameleon + - type: HideLayerClothing + slots: + - Snout diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Neck/specific.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Neck/specific.yml new file mode 100644 index 00000000000..a3d6390242d --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/Neck/specific.yml @@ -0,0 +1,13 @@ +- type: entity + parent: [ ClothingNeckBase, BaseMagicContraband ] + id: ClothingNeckAmberFocus + name: amber focus + description: An amber focusing glass that provides a link to the world beyond. The necklace seems to twitch, but only when you look at it from the corner of your eye. + suffix: MagicItem + components: + - type: HereticMagicItem + - type: Sprite + sprite: _CorvaxNext/Heretic/amber_focus.rsi + state: icon + - type: Clothing + sprite: _CorvaxNext/Heretic/amber_focus.rsi diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/OuterClothing/armor.yml new file mode 100644 index 00000000000..b1917ef68ff --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Clothing/OuterClothing/armor.yml @@ -0,0 +1,25 @@ + +- type: entity + parent: [ ClothingOuterBaseMedium, ClothingOuterStorageToggleableBase, BaseMagicContraband ] + id: ClothingOuterArmorHeretic + name: ominous armor + description: A ragged, dusty set of robes. Strange eyes line the inside. + components: + - type: Sprite + sprite: _CorvaxNext/Heretic/eldritch_armor.rsi + state: icon + - type: Clothing + sprite: _CorvaxNext/Heretic/eldritch_armor.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.50 + Slash: 0.50 + Piercing: 0.50 + Heat: 0.50 + Caustic: 0.50 + - type: ExplosionResistance + damageCoefficient: 0.25 + - type: ToggleableClothing + clothingPrototype: ClothingHeadHatHoodHeretic + slot: head diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/eldritch_mobs.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/eldritch_mobs.yml new file mode 100644 index 00000000000..30ce8960195 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/eldritch_mobs.yml @@ -0,0 +1,132 @@ +- type: entity + parent: [ SimpleMobBase, MobCombat ] + id: BaseMobGhoul + abstract: true + components: + - type: Ghoul + - type: MovementSpeedModifier + baseWalkSpeed: 2.00 + baseSprintSpeed: 3.00 + - type: InputMover + - type: MobMover + - type: Reactive + groups: + Flammable: [Touch] + Extinguish: [Touch] + - type: NpcFactionMember + factions: + - Heretic + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 250 + mask: + - MobMask + layer: + - MobLayer + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive + 90: Critical + 100: Dead + - type: MeleeWeapon + altDisarm: false + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh1.ogg + angle: 0 + animation: WeaponArcClaw + damage: + types: + Slash: 12 + Piercing: 8 + - type: NoSlip + - type: Grammar + attributes: + gender: male + - type: GhostRole + allowMovement: true + allowSpeech: true + makeSentient: true + name: ghostrole-ghoul-name + description: ghostrole-ghoul-desc + rules: ghostrole-ghoul-rules + raffle: + settings: short + - type: ActiveRadio + channels: + - Mansus + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Mansus + + +- type: entity + parent: BaseMobGhoul + id: MobGhoulStalker + name: flesh stalker + description: An abomination cobbled together from varied remains. Its appearance changes slightly every time you blink. + components: + - type: Ghoul + totalHealth: 150 + - type: Sprite + sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi + state: stalker + - type: GhostRole + name: ghostrole-stalker-name + description: ghostrole-stalker-desc + - type: ActionsProvider + actions: + - ActionHereticJaunt + # basically an EMP implant. don't feel like making 1 more emp action + - ActionActivateEmpImplant + - type: TriggerImplantAction + - type: EmpOnTrigger + range: 5 + energyConsumption: 50000 + disableDuration: 20 + +- type: entity + parent: BaseMobGhoul + id: MobGhoulProphet + name: raw prophet + description: An abomination stitched together from a few severed arms and one swollen, orphaned eye. + components: + - type: Ghoul + totalHealth: 75 + - type: Sprite + noRot: true + sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi + layers: + - map: [ "movement" ] + state: raw_prophet + - type: SpriteMovement + movementLayers: + movement: + state: raw_prophet-move + noMovementLayers: + movement: + state: raw_prophet + - type: GhostRole + name: ghostrole-prophet-name + description: ghostrole-prophet-desc + - type: ActionsProvider + actions: + - ActionHereticJaunt + - ActionHereticMansusLink + +- type: entity + parent: BaseMobGhoul + id: MobGhoulRustWalker + name: rust walker + description: A grinding, clanking construct which leaches life from its surroundings with every armoured step. + suffix: DO NOT MAP + components: + - type: Ghoul + totalHealth: 100 diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/polymorph.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/polymorph.yml new file mode 100644 index 00000000000..6ab491a5fed --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Mobs/NPC/polymorph.yml @@ -0,0 +1,185 @@ +- type: entity + id: PolymorphAshJauntAnimation + name: Unknown + description: You can't figure out what that is. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _CorvaxNext/Heretic/polymorphs.rsi + state: ash_jaunt + loop: false + - type: TimedDespawn + lifetime: 1 + +- type: entity + id: PolymorphAshJauntEndAnimation + name: Unknown + description: You can't figure out what that is. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _CorvaxNext/Heretic/polymorphs.rsi + state: ash_jaunt_end + loop: false + - type: TimedDespawn + lifetime: 1 + +- type: entity + id: PolymorphAshJaunt + name: Unknown + description: You can't figure out what that is. + categories: [ HideSpawnMenu ] + components: + - type: MindContainer + - type: InputMover + - type: MobMover + - type: Input + context: "ghost" + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 3 + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.40 + density: 80 + mask: + - GhostImpassable + - type: MovementIgnoreGravity + - type: Actions + - type: NoSlip + - type: Eye + drawFov: false + visMask: + - Normal + - Ghost + - type: ContentEye + maxZoom: 1.2, 1.2 + - type: DoAfter + - type: Alerts + +# heretic ascend flesh form +- type: entity + parent: [ SimpleSpaceMobBase, FlyingMobBase ] + id: MobHereticFleshAscend + name: eldritch horror + description: An incomprehensible mess of limbs and eyes. You can feel it's stare into your soul. + suffix: DO NOT MAP + components: + - type: Bloodstream + bloodMaxVolume: 1984 + - type: NpcFactionMember + factions: + - Heretic + - type: CombatMode + - type: MovementSpeedModifier + baseWalkSpeed: 5 + baseSprintSpeed: 7.5 + weightlessModifier: 1.5 + - type: Sprite + drawdepth: Mobs + sprite: _CorvaxNext/Heretic/eldritch_horror.rsi + noRot: true + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + - type: DamageStateVisuals + states: + Alive: + Base: alive + Dead: + Base: dead + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.40 + density: 100 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: MobState + allowedStates: + - Alive + - Dead + - type: MobThresholds + thresholds: + 0: Alive + 1500: Dead + - type: Damageable + damageContainer: Biological + - type: StatusEffects + allowed: + - SlowedDown + - RadiationProtection + - type: MeleeWeapon + hidden: false + altDisarm: false + autoAttack: true + attackRate: 2.5 + damage: + types: + Blunt: 20 + Structural: 60 + soundHit: + collection: Punch + animation: WeaponArcFist + - type: Devourer + foodPreference: Humanoid + shouldStoreDevoured: true + chemical: Ichor + healRate: 50.0 + whitelist: + components: + - MobState + - Door + tags: + - Wall + - type: Metabolizer + solutionOnBody: false + updateInterval: 0.25 + metabolizerTypes: [ Dragon ] + groups: + - id: Medicine + - id: Poison + - type: Butcherable + spawned: + - id: RandomAnomalySpawner + amount: 3 # 3 anoms on heretic butcher holy shit eh + - type: Tag + tags: + - CannotSuicide + - DoorBumpOpener + - type: ActiveRadio + channels: + - Mansus + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Mansus + - type: Examiner + - type: Pullable + - type: Reflect + reflectProb: 0.7 + reflects: + - Energy + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepThud + - type: Flammable + damage: + types: {} + - type: Puller + needsHands: false diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Specific/heretic.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Specific/heretic.yml new file mode 100644 index 00000000000..ced28ba03df --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Specific/heretic.yml @@ -0,0 +1,104 @@ +- type: entity + parent: [ BaseItem, BaseMagicContraband ] + id: CodexCicatrix + name: codex cicatrix + description: An ominous book you've never seen before. The letters seem to be contantly rearranging themselves. + components: + - type: Sprite + sprite: _CorvaxNext/Heretic/book.rsi + layers: + - state: icon + map: [ "base" ] + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + base: + True: { state: icon-on } + False: { state: icon } + - type: Item + size: Small + sprite: _CorvaxNext/Heretic/book.rsi + - type: UseDelay + delay: 1.0 + - type: PointLight + enabled: false + radius: 2 + energy: 1 + color: "#6e7500" + netsync: true + - type: Appearance + - type: ItemToggle + predictable: false + - type: ComponentToggler + components: + - type: HereticMagicItem + - type: ItemTogglePointLight + - type: ToggleableLightVisuals + - type: ItemToggleSize + activatedSize: Normal + +- type: entity + parent: [ DrinkBase, BaseMagicContraband ] + id: HereticEldritchFlask + name: eldritch flask + description: A flask filled with an unknown substance. Who knows what will happen when you take a sip from it. + components: + - type: Sprite + sprite: _CorvaxNext/Heretic/items.rsi + state: eldritch_flask + - type: Icon + sprite: _CorvaxNext/Heretic/items.rsi + state: eldritch_flask + - type: SolutionContainerManager + solutions: + drink: + # it's a cryostasis flash filled with healing goodies what could possibly go wrong? + # i will certainly not abuse it as a heretic chemist + maxVol: 100 + canReact: false + reagents: + - ReagentId: Omnizine + Quantity: 80 + - ReagentId: TranexamicAcid + Quantity: 20 + +- type: entity + id: HereticProtectiveBlade + name: eldritch blade + description: Maelstrom of razors flashing right before your eyes. Why are you stopping to look at it!? + categories: [ HideSpawnMenu ] + components: + - type: Sprite + noRot: true + sprite: _CorvaxNext/Heretic/items.rsi + state: protective_blade + - type: Clickable + - type: InteractionOutline + - type: ProtectiveBlade + lifetime: 60 + - type: Physics + bodyType: Dynamic + fixedRotation: false + angularDamping: 0 + linearDamping: 0 + canCollide: False + +- type: entity + parent: BaseBullet + categories: [ HideSpawnMenu ] + id: HereticProtectiveBladeProjectile + name: eldritch blade + description: Maelstrom of razors flashing right before your eyes. Why are you stopping to look at it!? + components: + - type: Sprite + sprite: _CorvaxNext/Heretic/items.rsi + state: protective_blade + - type: Projectile + impactEffect: BulletImpactEffectKinetic + damage: + types: + Slash: 15 + Piercing: 15 + Structural: 100 + soundHit: + path: /Audio/Weapons/Guns/Hits/bullet_hit.ogg diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml new file mode 100644 index 00000000000..0bd118ac8d7 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -0,0 +1,28 @@ +- type: entity + parent: BaseBulletTrigger + id: FireballChain + name: twisted fireball + description: Uh oh. + categories: [ HideSpawnMenu ] + components: + - type: ChainFireball + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/magic.rsi + layers: + - state: fireball + shader: unshaded + - type: IgnitionSource + temperature: 1000 + ignited: true + - type: IgniteOnCollide + fireStacks: 0.5 + - type: PointLight + color: "#E25822" + radius: 2.0 + energy: 5.0 + - type: Projectile + damage: + types: + Heat: 5 + - type: TimedDespawn + lifetime: 1 diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Melee/heretic_blades.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Melee/heretic_blades.yml new file mode 100644 index 00000000000..d99f09b1fc9 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Melee/heretic_blades.yml @@ -0,0 +1,126 @@ +- type: entity + parent: [ BaseItem, BaseMagicContraband ] + id: HereticBladeBase + name: eldritch blade + description: The sickly blade used by sinister individuals for rituals and sacrifices. + components: + - type: HereticBlade + - type: Sharp + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_blade.rsi + state: icon + - type: MeleeWeapon + wideAnimationRotation: -125 + attackRate: 1 + damage: + types: + Slash: 17.5 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: Item + size: Normal + sprite: _CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi + - type: ItemToggle + - type: RandomTeleport + - type: Scalpel # Shitmed + speed: 0.75 + +- type: entity + parent: HereticBladeBase + id: HereticBladeAsh + name: ashen blade + suffix: Ash + components: + - type: HereticBlade + path: Ash + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_ash.rsi + state: icon + - type: Item + sprite: _CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi + - type: MeleeWeapon + wideAnimationRotation: -125 + attackRate: 1 + damage: + types: + Heat: 10 + Slash: 7.5 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + +- type: entity + parent: HereticBladeBase + id: HereticBladeBlade + name: sundered blade + suffix: Blade + components: + - type: HereticBlade + path: Blade + - type: Reflect + reflectProb: 0.5 + spread: 0 + +- type: entity + parent: HereticBladeBase + id: HereticBladeFlesh + name: bloody blade + suffix: Flesh + components: + - type: HereticBlade + path: Flesh + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_flesh.rsi + state: icon + - type: Item + sprite: _CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi + +- type: entity + parent: HereticBladeBase + id: HereticBladeLock + name: key blade + suffix: Lock + components: + - type: HereticBlade + path: Lock + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_lock.rsi + state: icon + - type: Item + sprite: _CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi + +- type: entity + parent: HereticBladeBase + id: HereticBladeRust + name: rusty blade + suffix: Rust + components: + - type: HereticBlade + path: Rust + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_rust.rsi + state: icon + - type: Item + sprite: _CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi + +- type: entity + parent: HereticBladeBase + id: HereticBladeVoid + name: void blade + suffix: Void + components: + - type: HereticBlade + path: Void + - type: Sprite + sprite: _CorvaxNext/Heretic/Blades/blade_void.rsi + state: icon + - type: Item + sprite: _CorvaxNext/Heretic/Blades/blade_void-inhand.rsi + - type: MeleeWeapon + wideAnimationRotation: -125 + attackRate: 1 + damage: + types: + Cold: 10 + Slash: 7.5 + soundHit: + path: /Audio/Weapons/bladeslice.ogg diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Touchspell/mansus_grasp.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Touchspell/mansus_grasp.yml new file mode 100644 index 00000000000..936ea9f1691 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/Weapons/Touchspell/mansus_grasp.yml @@ -0,0 +1,19 @@ +- type: entity + id: TouchSpellMansus + name: mansus grasp + description: The power of the Old Gods, channeled through your grip. + categories: [ HideSpawnMenu ] + components: + - type: Unremoveable + - type: Item + - type: MansusGrasp + - type: Sprite + sprite: _CorvaxNext/Heretic/mansus_grasp.rsi + state: icon + - type: Appearance + - type: UseDelay + - type: PointLight + enabled: true + radius: 2 + energy: 1 + color: "#329a00" diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/magic_contraband.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/magic_contraband.yml new file mode 100644 index 00000000000..fb6c1ccb07d --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Objects/magic_contraband.yml @@ -0,0 +1,11 @@ +- type: entity + id: BaseMagicContraband + abstract: true + components: + - type: Contraband + severity: Magic + allowedDepartments: null + +- type: contrabandSeverity + id: Magic + examineText: contraband-examine-text-magic \ No newline at end of file diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/eldritch_influence.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/eldritch_influence.yml new file mode 100644 index 00000000000..38dac591fe8 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/eldritch_influence.yml @@ -0,0 +1,37 @@ +- type: entity + id: EldritchInfluence + name: reality shift + description: Your eyes start to burn just from a single look. Should you delve deeper? + placement: + mode: SnapgridCenter + components: + - type: InteractionOutline + - type: EldritchInfluence + - type: Sprite + sprite: _CorvaxNext/Heretic/reality_fracture.rsi + state: icon + - type: Clickable + - type: Visibility + layer: 69 + +- type: entity + id: EldritchInfluenceIntermediate + categories: [ HideSpawnMenu ] + components: + - type: TimedDespawn + lifetime: 30 + - type: SpawnOnDespawn + prototype: EldritchInfluenceSpent + +- type: entity + id: EldritchInfluenceSpent + name: reality fracture + description: A reality fracture. Something keeps leaking out of it, should you really be near this thing? + placement: + mode: SnapgridCenter + components: + - type: InteractionOutline + - type: Sprite + sprite: _CorvaxNext/Heretic/reality_fracture.rsi + state: icon_harvested + - type: Clickable diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/ritual_rune.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/ritual_rune.yml new file mode 100644 index 00000000000..be7251208d2 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Entities/Structures/Specific/Heretic/ritual_rune.yml @@ -0,0 +1,45 @@ +- type: entity + id: HereticRuneRitual + name: transmutation rune + description: An ancient drawing used by sinister individuals for sacrifices. + placement: + mode: SnapgridCenter + components: + - type: HereticRitualRune + - type: Sprite + drawdepth: WallMountedItems + sprite: _CorvaxNext/Heretic/ritual_rune.rsi + state: icon + - type: Clickable + - type: UserInterface + interfaces: + enum.HereticRitualRuneUiKey.Key: + type: HereticRitualRuneBoundUserInterface + +- type: entity + id: HereticRuneRitualDrawAnimation + name: unfinished transmutation rune + description: An unfinished ancient drawing used by sinister individuals for sacrifices. + categories: [ HideSpawnMenu ] + placement: + mode: SnapgridCenter + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _CorvaxNext/Heretic/ritual_rune.rsi + state: icon_drawanim + +- type: entity + id: HereticRuneRitualAnimation + name: transmutation rune + description: you shouldn't be seeing this description + placement: + mode: SnapgridCenter + categories: [ HideSpawnMenu ] + components: + - type: TimedDespawn + lifetime: 1 + - type: Sprite + drawdepth: WallMountedItems + sprite: _CorvaxNext/Heretic/ritual_rune.rsi + state: icon_ritualanim diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/GameRules/roundstart.yml b/Resources/Prototypes/_CorvaxNext/Heretic/GameRules/roundstart.yml new file mode 100644 index 00000000000..38d77268cf0 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/GameRules/roundstart.yml @@ -0,0 +1,25 @@ +- type: entity + parent: BaseGameRule + id: Heretic + components: + - type: HereticRule + - type: GameRule + minPlayers: 20 + delay: + min: 30 + max: 60 + - type: AntagObjectives + objectives: + - HereticKnowledgeObjective + - HereticSacrificeObjective + - HereticSacrificeHeadObjective + - type: AntagSelection + agentName: heretic-roundend-name + definitions: + - prefRoles: [ Heretic ] + max: 5 + playerRatio: 20 + lateJoinAdditional: true + mindRoles: + - MindRoleHeretic + startingGear: HereticGear # see Roles/Antags/heretic.yml \ No newline at end of file diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Guidebook/antagonist.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Guidebook/antagonist.yml new file mode 100644 index 00000000000..d4e3a0beb98 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Guidebook/antagonist.yml @@ -0,0 +1,4 @@ +- type: guideEntry + id: Heretics + name: guide-entry-heretics + text: "/ServerInfo/_CorvaxNext/Guidebook/Antagonist/Heretics.xml" diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_knowledge.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_knowledge.yml new file mode 100644 index 00000000000..d12c8d6f067 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_knowledge.yml @@ -0,0 +1,317 @@ +### basic knowledge +- type: hereticKnowledge + id: BreakOfDawn + actionPrototypes: + - ActionHereticOpenStore + - ActionHereticMansusGrasp + +- type: hereticKnowledge + id: HeartbeatOfMansus + ritualPrototypes: + - Sacrifice + +- type: hereticKnowledge + id: AmberFocus + ritualPrototypes: + - AmberFocus + +- type: hereticKnowledge + id: CodexCicatrix + ritualPrototypes: + - CodexCicatrix + +- type: hereticKnowledge + id: LivingHeart + ritualPrototypes: + - LivingHeart + actionPrototypes: + - ActionHereticLivingHeart + +### ash path +- type: hereticKnowledge + id: NightwatcherSecret + path: Ash + stage: 1 + ritualPrototypes: + - BladeAsh + +- type: hereticKnowledge + id: GraspOfAsh + path: Ash + stage: 2 + +- type: hereticKnowledge + id: AshenShift + path: Ash + sideKnowledge: true + stage: 3 + actionPrototypes: + - ActionHereticJaunt + +- type: hereticKnowledge + id: MarkOfAsh + path: Ash + stage: 4 + +- type: hereticKnowledge + id: VolcanicBlast + path: Ash + stage: 5 + actionPrototypes: + - ActionHereticVolcanoBlast + +- type: hereticKnowledge + id: MaskOfMadness + path: Ash + sideKnowledge: true + stage: 6 + ritualPrototypes: + - MaskOfMadness + +- type: hereticKnowledge + id: FieryBlade + path: Ash + stage: 7 + +- type: hereticKnowledge + id: NightwatcherRebirth + path: Ash + sideKnowledge: true + stage: 8 + actionPrototypes: + - ActionHereticNightwatcherRebirth + +- type: hereticKnowledge + id: AscensionAsh + path: Ash + stage: 9 + ritualPrototypes: + - AscensionAsh + +- type: hereticKnowledge + id: AshlordRite + path: Ash + stage: 10 + actionPrototypes: + - ActionHereticAscension1 + - ActionHereticAscension2 + event: !type:HereticAscensionAshEvent + +### blade path +- type: hereticKnowledge + id: CuttingEdge + path: Blade + stage: 1 + ritualPrototypes: + - BladeBlade + +- type: hereticKnowledge + id: GraspOfBlade + path: Blade + stage: 2 + +- type: hereticKnowledge + id: DanceOfTheBrand + path: Blade + stage: 3 + event: !type:HereticDanceOfTheBrandEvent + +- type: hereticKnowledge + id: MarkOfBlade + path: Blade + stage: 4 + +- type: hereticKnowledge + id: Realignment + path: Blade + stage: 5 + actionPrototypes: + - ActionHereticRealignment + +- type: hereticKnowledge + id: TornChampionStance + path: Blade + stage: 6 + event: !type:HereticChampionStanceEvent + +- type: hereticKnowledge + id: EmpoweredBlades + path: Blade + stage: 7 + +- type: hereticKnowledge + id: FuriousSteel + path: Blade + stage: 8 + actionPrototypes: + - ActionHereticFuriousSteel + +- type: hereticKnowledge + id: AscensionBlade + path: Blade + stage: 9 + ritualPrototypes: + - AscensionBlade + +- type: hereticKnowledge + id: MaelstromOfSilver + path: Blade + stage: 10 + event: !type:HereticAscensionBladeEvent + +### flesh path +- type: hereticKnowledge + id: PrincipleOfHunger + path: Flesh + stage: 1 + ritualPrototypes: + - BladeFlesh + +- type: hereticKnowledge + id: GraspOfFlesh + path: Flesh + stage: 2 + +- type: hereticKnowledge + id: ImperfectRitual + path: Flesh + sideKnowledge: true + stage: 3 + ritualPrototypes: + - ImperfectRitual + +- type: hereticKnowledge + id: MarkOfFlesh + path: Flesh + stage: 4 + +- type: hereticKnowledge + id: KnittingOfFlesh + path: Flesh + stage: 5 + actionPrototypes: + - ActionHereticFleshSurgery + +- type: hereticKnowledge + id: RawRitual + path: Flesh + sideKnowledge: true + stage: 6 + ritualPrototypes: + - RawRitual + +- type: hereticKnowledge + id: BleedingSteel + path: Flesh + stage: 7 + +- type: hereticKnowledge + id: LonelyRitual + path: Flesh + sideKnowledge: true + stage: 8 + ritualPrototypes: + - LonelyRitual + +- type: hereticKnowledge + id: AscensionFlesh + path: Flesh + stage: 9 + ritualPrototypes: + - AscensionFlesh + +- type: hereticKnowledge + id: PriestFinalHymn + path: Flesh + stage: 10 + event: !type:HereticAscensionFleshEvent + +### void path +- type: hereticKnowledge + id: GlimmerOfWinter + path: Void + stage: 1 + ritualPrototypes: + - BladeVoid + +- type: hereticKnowledge + id: GraspOfVoid + path: Void + stage: 2 + +- type: hereticKnowledge + id: AristocratWay + path: Void + sideKnowledge: true + stage: 3 + event: !type:HereticAristocratWayEvent + +- type: hereticKnowledge + id: MarkOfVoid + path: Void + stage: 4 + +- type: hereticKnowledge + id: VoidBlast + path: Void + stage: 5 + actionPrototypes: + - ActionHereticVoidBlast + +- type: hereticKnowledge + id: VoidPhase + path: Void + sideKnowledge: true + stage: 6 + actionPrototypes: + - ActionHereticVoidPhase + +- type: hereticKnowledge + id: SeekingBlade + path: Void + stage: 7 + +- type: hereticKnowledge + id: VoidPull + path: Void + sideKnowledge: true + stage: 8 + actionPrototypes: + - ActionHereticVoidPull + +- type: hereticKnowledge + id: AscensionVoid + stage: 9 + path: Void + ritualPrototypes: + - AscensionVoid + +- type: hereticKnowledge + id: WaltzAtTheEndOfTime + stage: 10 + path: Void + event: !type:HereticAscensionVoidEvent + +### side paths +- type: hereticKnowledge + id: RitualOfKnowledge + sideKnowledge: true + ritualPrototypes: + - RitualOfKnowledge + +## stage 3 +- type: hereticKnowledge + id: ArmorerRitual + sideKnowledge: true + stage: 3 + ritualPrototypes: + - ArmorerRitual + +- type: hereticKnowledge + id: PriestRitual + sideKnowledge: true + stage: 3 + ritualPrototypes: + - PriestRitual + +## stage 7 diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_rituals.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_rituals.yml new file mode 100644 index 00000000000..0d4277fc4fb --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Heretic/heretic_rituals.yml @@ -0,0 +1,274 @@ + +### basic +# Heartbeat of the Mansus (sacrifice) +- type: hereticRitual + id: Sacrifice + locName: heretic-ritual-basic-sacrifice + locDesc: heretic-ritual-basic-sacrifice-desc + icon: + sprite: Mobs/Species/Human/organs.rsi + state: heart-on + customBehaviors: + - !type:RitualSacrificeBehavior + onlyTargets: true + +- type: hereticRitual + id: AmberFocus + locName: heretic-ritual-basic-focus + locDesc: heretic-ritual-basic-focus-desc + icon: + sprite: _CorvaxNext/Heretic/amber_focus.rsi + state: icon + requiredTags: + GlassShard: 1 + Eyes: 1 + output: + ClothingNeckAmberFocus: 1 + +- type: hereticRitual + id: LivingHeart + locName: heretic-ritual-basic-heart + locDesc: heretic-ritual-basic-heart-desc + icon: + sprite: _CorvaxNext/Heretic/items.rsi + state: living_heart + requiredTags: + Heart: 1 + Pen: 1 + Paper: 1 + outputEvent: !type:EventHereticRerollTargets + +- type: hereticRitual + id: CodexCicatrix + locName: heretic-ritual-basic-codex + locDesc: heretic-ritual-basic-codex-desc + icon: + sprite: _CorvaxNext/Heretic/book.rsi + state: icon-on + requiredTags: + Eyes: 1 + Book: 1 + Pen: 1 + output: + CodexCicatrix: 1 + +### ash path +- type: hereticRitual + id: BladeAsh + locName: knowledge-path-ash-s1-name + locDesc: knowledge-path-ash-s1-desc + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_ash.rsi + state: icon + requiredTags: + Knife: 1 + Matchstick: 1 + output: + HereticBladeAsh: 1 + +- type: hereticRitual + id: MaskOfMadness + locName: knowledge-path-ash-s6-name + locDesc: knowledge-path-ash-s6-desc + icon: + sprite: _CorvaxNext/Heretic/mad_mask.rsi + state: icon + requiredTags: + Mask: 1 + Candle: 4 + Stunbaton: 1 + output: + ClothingMaskMadHeretic: 1 + +- type: hereticRitual + id: AscensionAsh + locName: knowledge-path-ash-s9-name + locDesc: knowledge-path-ash-s9-desc + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: ashlord_rite2 + customBehaviors: + - !type:RitualAshAscendBehavior + min: 3 + max: 3 + outputKnowledge: AshlordRite + outputEvent: !type:EventHereticAscension + +### blade path +- type: hereticRitual + id: BladeBlade + locName: knowledge-path-blade-s1-name + locDesc: knowledge-path-blade-s1-desc + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_blade.rsi + state: icon + requiredTags: + Knife: 4 + output: + HereticBladeBlade: 1 + +- type: hereticRitual + id: AscensionBlade + locName: knowledge-path-blade-s9-name + locDesc: knowledge-path-blade-s9-desc + icon: + sprite: _CorvaxNext/Heretic/items.rsi + state: protective_blade + customBehaviors: + - !type:RitualBladeAscendBehavior + min: 3 + max: 3 + outputKnowledge: MaelstromOfSilver + outputEvent: !type:EventHereticAscension + +### flesh path +- type: hereticRitual + id: BladeFlesh + locName: knowledge-path-flesh-s1-name + locDesc: knowledge-path-flesh-s1-desc + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_flesh.rsi + state: icon + customBehaviors: + - !type:RitualReagentPuddleBehavior + reagent: Blood + requiredTags: + Knife: 1 + output: + HereticBladeFlesh: 1 + +- type: hereticRitual + id: ImperfectRitual + locName: knowledge-path-flesh-s3-name + locDesc: knowledge-path-flesh-s3-desc + icon: + sprite: Mobs/Species/Skeleton/parts.rsi + state: full + customBehaviors: + - !type:RitualMuteGhoulifyBehavior + requiredTags: + Poppy: 1 + +- type: hereticRitual + id: RawRitual + locName: knowledge-path-flesh-s6-name + locDesc: knowledge-path-flesh-s6-desc + icon: + sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi + state: raw_prophet + customBehaviors: + - !type:RitualReagentPuddleBehavior + reagent: Blood + requiredTags: + Eyes: 1 + Stomach: 1 + output: + MobGhoulProphet: 1 + +- type: hereticRitual + id: LonelyRitual + locName: knowledge-path-flesh-s8-name + locDesc: knowledge-path-flesh-s8-desc + icon: + sprite: _CorvaxNext/Heretic/eldritch_mobs.rsi + state: stalker + customBehaviors: + - !type:RitualReagentPuddleBehavior + reagent: Blood + requiredTags: + Pen: 1 + Heart: 1 + Stomach: 1 + Lungs: 1 + output: + MobGhoulStalker: 1 + +- type: hereticRitual + id: AscensionFlesh + locName: knowledge-path-flesh-s9-name + locDesc: knowledge-path-flesh-s9-desc + icon: + sprite: _CorvaxNext/Heretic/abilities_heretic.rsi + state: final_hymn + customBehaviors: + - !type:RitualSacrificeBehavior + min: 4 + max: 4 + outputKnowledge: PriestFinalHymn + outputEvent: !type:EventHereticAscension + + + +### void path +- type: hereticRitual + id: BladeVoid + locName: knowledge-path-void-s1-name + locDesc: knowledge-path-void-s1-desc + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_void.rsi + state: icon + customBehaviors: + - !type:RitualTemperatureBehavior + minThreshold: 0 # ~= -1 celcius. or sub zero temperatures + requiredTags: + Knife: 1 + output: + HereticBladeVoid: 1 + +- type: hereticRitual + id: AscensionVoid + locName: knowledge-path-void-s9-name + locDesc: knowledge-path-void-s9-desc + icon: + sprite: Interface/Alerts/temperature.rsi + state: cold3 + customBehaviors: + - !type:RitualSacrificeBehavior + min: 3 + max: 3 + - !type:RitualTemperatureBehavior + minThreshold: -20 + outputKnowledge: WaltzAtTheEndOfTime + outputEvent: !type:EventHereticAscension + + + +### side knowledge +- type: hereticRitual + id: RitualOfKnowledge + locName: knowledge-path-side-knowledge-name + locDesc: knowledge-path-side-knowledge-desc + icon: + sprite: _CorvaxNext/Heretic/book.rsi + state: icon + customBehaviors: + - !type:RitualKnowledgeBehavior + +## stage 3 +- type: hereticRitual + id: ArmorerRitual + locName: knowledge-path-side-s3-armor-name + locDesc: knowledge-path-side-s3-armor-desc + icon: + sprite: _CorvaxNext/Heretic/eldritch_armor.rsi + state: icon + requiredTags: + Table: 1 + GasMask: 1 + output: + ClothingOuterArmorHeretic: 1 + +- type: hereticRitual + id: PriestRitual + locName: knowledge-path-side-s3-flask-name + locDesc: knowledge-path-side-s3-flask-desc + icon: + sprite: _CorvaxNext/Heretic/items.rsi + state: eldritch_flask + requiredTags: + WaterTank: 1 + GlassShard: 1 + output: + HereticEldritchFlask: 1 + +## stage 7 diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Objectives/heretic.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Objectives/heretic.yml new file mode 100644 index 00000000000..3d171688d0a --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Objectives/heretic.yml @@ -0,0 +1,51 @@ +- type: entity + abstract: true + parent: BaseObjective + id: BaseHereticObjective + components: + - type: Objective + difficulty: 1.5 + issuer: objective-issuer-heretic + +- type: entity + parent: BaseHereticObjective + id: HereticKnowledgeObjective + components: + - type: Objective + icon: + sprite: _CorvaxNext/Heretic/reality_fracture.rsi + state: icon_harvested + - type: NumberObjective + min: 12 + max: 18 + title: objective-condition-knowledge-title + - type: HereticKnowledgeCondition + +- type: entity + parent: BaseHereticObjective + id: HereticSacrificeObjective + components: + - type: Objective + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_blade.rsi + state: icon + - type: NumberObjective + min: 2 + max: 4 + title: objective-condition-sacrifice-title + - type: HereticSacrificeCondition + +- type: entity + parent: BaseHereticObjective + id: HereticSacrificeHeadObjective + components: + - type: Objective + icon: + sprite: _CorvaxNext/Heretic/Blades/blade_blade.rsi + state: icon + - type: NumberObjective + min: 1 + max: 1 + title: objective-condition-sacrifice-head-title + - type: HereticSacrificeCondition + isCommand: true diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Polymorphs/polymorphs.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Polymorphs/polymorphs.yml new file mode 100644 index 00000000000..1e4ad270f03 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Polymorphs/polymorphs.yml @@ -0,0 +1,16 @@ +- type: polymorph + id: AshJaunt + configuration: + entity: PolymorphAshJaunt + forced: true + duration: 5 + +- type: polymorph + id: EldritchHorror + configuration: + entity: MobHereticFleshAscend + forced: true + transferName: true + transferDamage: false + revertOnCrit: false + revertOnDeath: false \ No newline at end of file diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Roles/Antags/heretic.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Roles/Antags/heretic.yml new file mode 100644 index 00000000000..b8535d96aff --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Roles/Antags/heretic.yml @@ -0,0 +1,21 @@ +- type: antag + id: Heretic + name: roles-antag-heretic-name + antagonist: true + setPreference: true + objective: roles-antag-heretic-description + requirements: + - !type:DepartmentTimeRequirement + department: Security + time: 18000 # 5h + - !type:DepartmentTimeRequirement + department: Medical + time: 18000 # 5h + guides: [ Heretics ] + +- type: startingGear + id: HereticGear + storage: + back: + - CodexCicatrix + - OrganHumanHeart diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Store/categories.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Store/categories.yml new file mode 100644 index 00000000000..5c04d4a2086 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Store/categories.yml @@ -0,0 +1,31 @@ +# heretic + +- type: storeCategory + id: HereticPathAsh + name: store-heretic-path-ash + priority: 0 + +- type: storeCategory + id: HereticPathLock + name: store-heretic-path-lock + priority: 0 + +- type: storeCategory + id: HereticPathFlesh + name: store-heretic-path-flesh + priority: 0 + +- type: storeCategory + id: HereticPathVoid + name: store-heretic-path-void + priority: 0 + +- type: storeCategory + id: HereticPathBlade + name: store-heretic-path-blade + priority: 0 + +- type: storeCategory + id: HereticPathSide + name: store-heretic-path-side + priority: 999 # lowest possible diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/Store/currency.yml b/Resources/Prototypes/_CorvaxNext/Heretic/Store/currency.yml new file mode 100644 index 00000000000..6827c823119 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/Store/currency.yml @@ -0,0 +1,4 @@ +- type: currency + id: KnowledgePoint + displayName: store-currency-display-knowledgepoint + canWithdraw: false diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/ai_factions.yml b/Resources/Prototypes/_CorvaxNext/Heretic/ai_factions.yml new file mode 100644 index 00000000000..4e9e19806ee --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/ai_factions.yml @@ -0,0 +1,7 @@ +- type: npcFaction + id: Heretic + hostile: + - NanoTrasen + - Syndicate + - Zombie + - Revolutionary diff --git a/Resources/Prototypes/_CorvaxNext/Heretic/radio_channels.yml b/Resources/Prototypes/_CorvaxNext/Heretic/radio_channels.yml new file mode 100644 index 00000000000..1ce51f47345 --- /dev/null +++ b/Resources/Prototypes/_CorvaxNext/Heretic/radio_channels.yml @@ -0,0 +1,7 @@ +- type: radioChannel + id: Mansus + name: chat-radio-mansus + keycode: 'z' + frequency: 80085 + color: "#237500" + longRange: true \ No newline at end of file diff --git a/Resources/Prototypes/_CorvaxNext/tags.yml b/Resources/Prototypes/_CorvaxNext/tags.yml index 59cdfd38c52..c72c0416f71 100644 --- a/Resources/Prototypes/_CorvaxNext/tags.yml +++ b/Resources/Prototypes/_CorvaxNext/tags.yml @@ -9,3 +9,30 @@ - type: Tag id: Eyes + +- type: Tag # heretics edit + id: GasMask + +- type: Tag # heretics edit + id: Kidneys + +- type: Tag # heretics edit + id: Lungs + +- type: Tag # heretics edit + id: Mask + +- type: Tag # heretics edit + id: Poppy + +- type: Tag # heretics edit + id: Stomach + +- type: Tag # heretics edit + id: Table + +- type: Tag # heretics edit + id: Tongue + +- type: Tag # heretics edit + id: WaterTank diff --git a/Resources/Prototypes/ai_factions.yml b/Resources/Prototypes/ai_factions.yml index 3dfb35c7a69..2f91b2b1c3a 100644 --- a/Resources/Prototypes/ai_factions.yml +++ b/Resources/Prototypes/ai_factions.yml @@ -7,6 +7,7 @@ - PetsNT - Zombie - Revolutionary + - Heretic # goob edit - heretics - type: npcFaction id: NanoTrasen @@ -16,6 +17,7 @@ - Xeno - Zombie - Revolutionary + - Heretic # goob edit - heretics - type: npcFaction id: Mouse @@ -42,6 +44,7 @@ - PetsNT - Zombie - Revolutionary + - Heretic # goob edit - heretics - type: npcFaction id: SimpleNeutral @@ -54,6 +57,7 @@ - Xeno - PetsNT - Zombie + - Heretic # goob edit - heretics - type: npcFaction id: Xeno @@ -64,6 +68,7 @@ - PetsNT - Zombie - Revolutionary + - Heretic # goob edit - heretics - type: npcFaction id: Zombie @@ -75,6 +80,7 @@ - Passive - PetsNT - Revolutionary + - Heretic # goob edit - heretics - type: npcFaction id: Revolutionary diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 6112f93c164..6e4b1e53312 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1195,6 +1195,9 @@ - type: Tag id: StringInstrument +- type: Tag + id: Stunbaton + - type: Tag id: SubdermalImplant diff --git a/Resources/ServerInfo/_CorvaxNext/Guidebook/Antagonist/Heretics.xml b/Resources/ServerInfo/_CorvaxNext/Guidebook/Antagonist/Heretics.xml new file mode 100644 index 00000000000..8cd4e5ad741 --- /dev/null +++ b/Resources/ServerInfo/_CorvaxNext/Guidebook/Antagonist/Heretics.xml @@ -0,0 +1,84 @@ + + # The Mansus Veil Weakens + So you're a Heretic? Well, get ready for magic and battle. Grab influences, complete sacrifices, accomplish rituals, and ascend to godhood. + + Your ultimate goal is to ascend and become all powerful, but to do that you must gain knowledge. + All knowledges cost 1 point, except for "public" ones, which are accessible from any path, or Ascensions. + + You can gain knowledge points and become stronger through a few ways: + - Draining influences that spawn randomly around the station. + - Sacrificing crew members your dark patrons hunger for. + - Automatically getting one knowledge point every 20 minutes. + + ## Eldritch Influences + + + + Influences are the easy way to gain power points. Whenever there are Heretics aboard Space Station 14, influences will randomly spawn across the station. + They are not visible to the naked eye of a crew member, hovewer they [bold]will[/bold] become visible after harvesting, aside from suddenly changing colors. + Tip: When using [color=green]Codex Cicatrix[/color] on an influence you will get double the points, but it will be a dead giveaway to anyone nearby that you're a heretic. + + + + + Each influence can only be harvested once, so the heretic that goes the fastest and grabs the most influences first has to do less killing and sacrificing to reach their ascensions. + + ## Sacrifices + Now it's time for you to grow some balls and start sacrificing crewmembers for points. + The Mansus desires only a select few Heathens (non-heretics) at any moment. + + At the start of the round you will be assigned five sacrifice targets. You can reroll these with an optional knowledge (The Relentless Heartbeat) later on, but until then, you're stuck with those. + + - One target will be a Head of Staff. Heads of staff are worth an additional point! + - One target will be a member of security. + - One target will be a member of your department. + - Other targets will be completely random crewmembers. + + You will only be able to sacrifice these targets. Your patrons will not accept just any old assistant. + + Follow your [color=red]Living Heart[/color] to your target of choice and incapacitate them through any means necessary. If your target's in critical condition or dead they're ready to sacrifice. + Drag them over a transmutation rune and invoke the [color=yellow]Heartbeat of the Mansus[/color] to sacrifice them. + + You can reroll your targets by invoking [color=yellow]Relentless Heartbeat[/color] ritual. + + ## Heretical Research + Once you have some power points, it's time to research! Open up your knowledge store using the action button. + The research menu forms a branching tree, and your first selection will be to commit to a path that defines your initial abilities and Final Ascension. + You can earn abilities from other paths to a limited degree, but overall your chosen path will heavily influence your play-style. + + ## Transmutation is Key + Eventually, you'll need to start using proper magics. To draw a transmutation rune, you'll need a writing tool, such as a pen or crayon. + Activate [color=green]Mansus Grasp[/color] in your offhand and click on the floor to start drawing a rune. + These runes are highly noticeable and take up a 3x3 area. + You can freely remove runes by using your pen with the activated [color=green]Mansus Grasp[/color] on it, and you can also freely use other Heretic's runes. + + To [bold]transmute[/bold], simply click the rune with your empty hand to choose the needed ritual, after that use your [color=green]Mansus Grasp[/color] on the rune to see what objects you require for the ritual. + You can always see your chosen ritual by [bold]inspecting[/bold] the rune. + + Transmutation Rituals allow you to create powerful artifacts, demonic monsters, and many useful tools that will help you progress towards ultimate power. + + ## Focus is Necessary + To cast more advanced spells, you must focus by wearing an [color=orange]Amber Focus[/color]. + You can acquire Ambes Focus using the eponymous ritual. + Some more powerful heretical equipment also functions as a focus - namely, the Ominous Armor from the Armorer's Ritual (when the hood is flipped up). + [color=yellow]Ascension[/color] disables the need for a focus. + + ## Starting Knowledge + - \[ [color=red]Mansus Grasp[/color] \] - A short range spell that channels eldritch power straight to your palm. Upon contact, knocks down and confuses unsuspecting targets. + - \[ [color=red]Heartbeat of the Mansus[/color] \] - Allows you to sacrifice targets who are in critical or worse condition to the Mansus, gibbing them and rewarding you with one knowledge point; two if your victim was a head of staff. + - \[ [color=red]Amber Focus[/color] \] - Allows you to transmute a sheet of glass and a pair of eyes into an Amber Focus. This is a small neck-worn item that allows you to cast advanced spells while worn. + - \[ [color=red]Living Heart[/color] \] - Allows you to pinpoint your targets. Plays an audible heartbeat sound, so use it carefully. + - \[ [color=red]Relentless Heartbeat[/color] \] - Allows you to reroll your target selection, in case you've run out of bodies or want a different approach. + - \[ [color=red]Codex Cicatrix[/color] \] - Allows you to cast advanced spells while open in hands, and drain more knowledge points from influences. If you lost your codex you can make a new one at the rune. + + ## Tips + - On Ashen Path, always carry a fire extinguisher or a bottle of water with you! While you can spew out fireballs, you are not immune to them until you ascend! + - As a [color=purple]Ghoul[/color], your [color=green]Mansus Link[/color] ability is extremely useful for communication. When you use it on someone, they gain a radio channel similar to changelings with :z key to talk privately. + - Unlike most other solo antagonists, Heretics start weak but grow stronger over time. It would be best not to attract too much attention to yourself until you unlock more powerful spells and equipment. + - Your Mansus Grasp will temporarily garble the speech of people who you use it on. This can let you get away with murder while comms are online, but be careful - it's not foolproof. + - [color=purple]Influences[/color] can spawn in almost any location on the station, ranging from the main hallways and public restrooms to [color=cyan]Command staff offices[/color] and [color=red]restricted security areas[/color] in the Brig. It's best to check every area you can access, public and department. + - By default, nothing on you is incriminating. If security suspects you, but can't actually pin anything heretical on you, you might be able to pass off as a Traitor instead. + - Monkeys and other animals make for great, usually non-suspicious sources of organs or corpses for your heretical rituals. + - Most summoned ghouls will drop the components used to create them on death. While having them to die is not ideal, you can easily grab the parts and summon another. + - [color=yellow]Eldritch Flash[/color], a stage 3 side path knowledge acts like a cryostasis beaker and has a total capacity of 100 units, meaning you can create deadly mixes that are easily triggered. + diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..d5059b66eb6 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..ff5d18f593a Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/meta.json new file mode 100644 index 00000000000..d6820f88246 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash-inhand.rsi/meta.json @@ -0,0 +1,127 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ], + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/icon.png new file mode 100644 index 00000000000..b9d48200d2e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/meta.json new file mode 100644 index 00000000000..e7d81f20f08 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_ash.rsi/meta.json @@ -0,0 +1,222 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..7d3719acccd Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..5e0d7ee1096 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/meta.json new file mode 100644 index 00000000000..218d504cc6e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade-inhand.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/icon.png new file mode 100644 index 00000000000..dbf6f0959f7 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/meta.json new file mode 100644 index 00000000000..d8894438438 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_blade.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..0bd0cdab7d6 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..e942be1f66c Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/meta.json new file mode 100644 index 00000000000..218d504cc6e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos-inhand.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/icon.png new file mode 100644 index 00000000000..e865409cee7 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/meta.json new file mode 100644 index 00000000000..47d77801c99 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_cosmos.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..ae30ac57f86 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..7e69ac4ad4a Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/meta.json new file mode 100644 index 00000000000..218d504cc6e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh-inhand.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/icon.png new file mode 100644 index 00000000000..4efe1ca70d4 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/meta.json new file mode 100644 index 00000000000..5463b933b78 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_flesh.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.2, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, + 0.2, 0.2, 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..7428f3d9e2f Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..ff8f1ffcd9e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/meta.json new file mode 100644 index 00000000000..218d504cc6e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock-inhand.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/icon.png new file mode 100644 index 00000000000..b968f78e7cc Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/meta.json new file mode 100644 index 00000000000..d8894438438 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_lock.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..d4556da5403 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..bbdde4e6cde Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/meta.json new file mode 100644 index 00000000000..218d504cc6e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon-inhand.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/icon.png new file mode 100644 index 00000000000..0e03ba169ae Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/meta.json new file mode 100644 index 00000000000..d8894438438 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_moon.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..95976ae4839 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..125bc815ad7 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/meta.json new file mode 100644 index 00000000000..d8318c4ad0e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust-inhand.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ], + [ 0.1, 0.2, 0.1 ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/icon.png new file mode 100644 index 00000000000..009f474316d Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/meta.json new file mode 100644 index 00000000000..50e52e4efcb --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_rust.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.1, + 0.2, 0.3, 0.1, 0.2, 0.3, 0.1, 0.2, + 0.3, 0.1, 0.2, 0.3, 0.1, 0.2, 0.3, + 0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.1, + 0.2, 0.3, 0.1, 0.2, 0.3, 0.1, 0.2, + 0.3, 0.1, 0.2, 0.3, 0.1, 0.2, 0.3, + 0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.1, + 0.2, 0.3, 0.1, 0.2, 0.3 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-left.png new file mode 100644 index 00000000000..3c4f3cee22d Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-right.png new file mode 100644 index 00000000000..6880d89557e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/meta.json new file mode 100644 index 00000000000..7e0dbdc1a76 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void-inhand.rsi/meta.json @@ -0,0 +1,103 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/icon.png new file mode 100644 index 00000000000..803d485bd75 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/meta.json new file mode 100644 index 00000000000..97c27a4f388 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/Blades/blade_void.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/aggressive_spread.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/aggressive_spread.png new file mode 100644 index 00000000000..dfe71ec3702 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/aggressive_spread.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashen_shift.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashen_shift.png new file mode 100644 index 00000000000..08fe09854fb Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashen_shift.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite1.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite1.png new file mode 100644 index 00000000000..f983fbc9926 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite1.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite2.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite2.png new file mode 100644 index 00000000000..c9ab05c8e9e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/ashlord_rite2.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/blood_siphon.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/blood_siphon.png new file mode 100644 index 00000000000..87e95919d90 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/blood_siphon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/bulglar_finesse.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/bulglar_finesse.png new file mode 100644 index 00000000000..cc5cf0c9b7e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/bulglar_finesse.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/cleave.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/cleave.png new file mode 100644 index 00000000000..a2a4c29ab59 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/cleave.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/construction.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/construction.png new file mode 100644 index 00000000000..ba144df97a2 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/construction.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/desperation_wave.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/desperation_wave.png new file mode 100644 index 00000000000..6814e830dfb Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/desperation_wave.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/entropic_plume.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/entropic_plume.png new file mode 100644 index 00000000000..f43816e9e47 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/entropic_plume.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/final_hymn.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/final_hymn.png new file mode 100644 index 00000000000..539309cb61f Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/final_hymn.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/flesh_surgery.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/flesh_surgery.png new file mode 100644 index 00000000000..2cf025a7126 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/flesh_surgery.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/furious_steel.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/furious_steel.png new file mode 100644 index 00000000000..d7f15e15572 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/furious_steel.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/immovable_rod.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/immovable_rod.png new file mode 100644 index 00000000000..68a3c814ca0 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/immovable_rod.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/labyrinth.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/labyrinth.png new file mode 100644 index 00000000000..c8481c2e063 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/labyrinth.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/last_refuge.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/last_refuge.png new file mode 100644 index 00000000000..fcf67837571 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/last_refuge.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/living_heart.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/living_heart.png new file mode 100644 index 00000000000..d9c7a52e554 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/living_heart.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_grasp.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_grasp.png new file mode 100644 index 00000000000..dcfbe9e71e8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_grasp.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_link.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_link.png new file mode 100644 index 00000000000..903af27adf5 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/mansus_link.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/meta.json new file mode 100644 index 00000000000..cc6869ab3c2 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/meta.json @@ -0,0 +1,92 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "sprites taken from TG station, edited by whateverusername0 and blooodyspy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "mansus_grasp" + }, + { + "name": "mansus_link" + }, + { + "name": "open_store" + }, + { + "name": "ashen_shift" + }, + { + "name": "volcano_blast" + }, + { + "name": "nightwatcher_rebirth" + }, + { + "name": "ashlord_rite1" + }, + { + "name": "ashlord_rite2" + }, + { + "name": "bulglar_finesse" + }, + { + "name": "last_refuge" + }, + { + "name": "labyrinth" + }, + { + "name": "flesh_surgery" + }, + { + "name": "final_hymn" + }, + { + "name": "realignment" + }, + { + "name": "furious_steel" + }, + { + "name": "void_phase" + }, + { + "name": "void_blast" + }, + { + "name": "void_pull" + }, + { + "name": "construction" + }, + { + "name": "aggressive_spread" + }, + { + "name": "entropic_plume" + }, + { + "name": "blood_siphon" + }, + { + "name": "desperation_wave" + }, + { + "name": "cleave" + }, + { + "name": "space_phase" + }, + { + "name": "immovable_rod" + }, + { + "name": "living_heart" + } + ] +} diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/nightwatcher_rebirth.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/nightwatcher_rebirth.png new file mode 100644 index 00000000000..701559a35cd Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/nightwatcher_rebirth.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/open_store.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/open_store.png new file mode 100644 index 00000000000..e1cc608dbce Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/open_store.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/realignment.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/realignment.png new file mode 100644 index 00000000000..16f6cc57e78 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/realignment.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/space_phase.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/space_phase.png new file mode 100644 index 00000000000..953a85c759b Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/space_phase.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_blast.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_blast.png new file mode 100644 index 00000000000..841aaaefba3 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_blast.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_phase.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_phase.png new file mode 100644 index 00000000000..06750b4c4c5 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_phase.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_pull.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_pull.png new file mode 100644 index 00000000000..12fa8d1311b Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/void_pull.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/volcano_blast.png b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/volcano_blast.png new file mode 100644 index 00000000000..b5fc291d255 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/abilities_heretic.rsi/volcano_blast.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/equipped-NECK.png b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/equipped-NECK.png new file mode 100644 index 00000000000..82faffa9c40 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/equipped-NECK.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/icon.png new file mode 100644 index 00000000000..08c0bce0f5f Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/meta.json new file mode 100644 index 00000000000..b9743435d60 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/amber_focus.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon", + "delays": [ + [ + 3, 0.03, 0.04, + 0.05, 0.1, 0.05, + 0.04, 0.03 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon-on.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon-on.png new file mode 100644 index 00000000000..ed6aed36e37 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon-on.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon.png new file mode 100644 index 00000000000..2d07d0f24fc Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_closing.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_closing.png new file mode 100644 index 00000000000..fc340f66c5e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_closing.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_opening.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_opening.png new file mode 100644 index 00000000000..750565892fd Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/icon_opening.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-left.png new file mode 100644 index 00000000000..6d05cd84895 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-right.png new file mode 100644 index 00000000000..e52e2fe3400 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/book.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/meta.json new file mode 100644 index 00000000000..7147dcabe82 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/book.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGStation, inhands made by @blooodyspy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-on" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/ash.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/ash.png new file mode 100644 index 00000000000..5ed5e288931 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/ash.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/blade.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/blade.png new file mode 100644 index 00000000000..7d18a4be277 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/blade.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/flesh.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/flesh.png new file mode 100644 index 00000000000..56b5b1107d3 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/flesh.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/lock.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/lock.png new file mode 100644 index 00000000000..664633b23d0 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/lock.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/meta.json new file mode 100644 index 00000000000..5f1842d24f8 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/meta.json @@ -0,0 +1,79 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "made by blooodyspy", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "ash", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125 + ] + ] + }, + { + "name": "blade", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125 + ] + ] + }, + { + "name": "flesh", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125 + ] + ] + }, + { + "name": "lock", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125 + ] + ] + }, + { + "name": "rust", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125 + ] + ] + }, + { + "name": "void", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/rust.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/rust.png new file mode 100644 index 00000000000..7882a92fecd Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/rust.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/void.png b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/void.png new file mode 100644 index 00000000000..f32db890a62 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/combat_marks.rsi/void.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..e9bc0c850c6 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/icon.png new file mode 100644 index 00000000000..e021b556ea7 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/meta.json new file mode 100644 index 00000000000..b183581a4ca --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/eldritch_armor.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 4, 0.1, 0.5, 0.1, 2, 0.1, 0.5, + 0.1, 2, 0.1, 0.1, 0.7, 0.1, 0.1 + ] + ] + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4, + "delays": [ + [ + 4, 0.1, 0.5, 0.1, 2, 0.1, 0.5, + 0.1, 2, 0.1, 0.1, 0.7, 0.1, 0.1 + ], + [ + 4, 0.1, 0.5, 0.1, 2, 0.1, 0.5, + 0.1, 2, 0.1, 0.1, 0.7, 0.1, 0.1 + ], + [ + 4, 0.1, 0.5, 0.1, 2, 0.1, 0.5, + 0.1, 2, 0.1, 0.1, 0.7, 0.1, 0.1 + ], + [ + 4, 0.1, 0.5, 0.1, 2, 0.1, 0.5, + 0.1, 2, 0.1, 0.1, 0.7, 0.1, 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/equipped-HELMET.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..b886b018c62 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/icon.png new file mode 100644 index 00000000000..1e28f4debc8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/meta.json new file mode 100644 index 00000000000..a598e09d2bb --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/eldritch_hood.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/alive.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/alive.png new file mode 100644 index 00000000000..7f81ab1e76d Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/alive.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/dead.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/dead.png new file mode 100644 index 00000000000..be602ea474e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/dead.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/meta.json new file mode 100644 index 00000000000..21e5562bab5 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/eldritch_horror.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "inspiration from TGstation, made by whateverusername0", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "alive", + "delays": + [ + [ + 0.083, 0.083, 0.083, 0.083, 0.083, + 0.083, 0.083, 0.083, 0.083, 0.083, + 0.083 + ] + ] + }, + { + "name": "dead" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_end.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_end.png new file mode 100644 index 00000000000..e9926bdf508 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_end.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_mid.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_mid.png new file mode 100644 index 00000000000..ce4ae14949f Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_mid.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_start.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_start.png new file mode 100644 index 00000000000..e8f725b4fd9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/armsy_start.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/ash_walker.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/ash_walker.png new file mode 100644 index 00000000000..58a0c8af607 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/ash_walker.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/fire_shark.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/fire_shark.png new file mode 100644 index 00000000000..4a716c24f68 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/fire_shark.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/meta.json new file mode 100644 index 00000000000..d93e78387f4 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/meta.json @@ -0,0 +1,104 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "raw_prophet" + }, + { + "name": "raw_prophet-move", + "delays": + [ + [ + 0.05, 0.05, 0.05, 0.05, 0.05, + 0.05, 0.05, 0.05, 0.05, 0.05, + 0.05, 0.05, 0.05, 0.05, 0.05 + ] + ] + }, + { + "name": "armsy_end", + "directions": 4 + }, + { + "name": "armsy_mid", + "directions": 4 + }, + { + "name": "armsy_start", + "directions": 4 + }, + { + "name": "stalker", + "directions": 4 + }, + { + "name": "ash_walker", + "directions": 4 + }, + { + "name": "rust_walker_s", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ] + ] + }, + { + "name": "rust_walker_n", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ] + ] + }, + { + "name": "fire_shark", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "moon_mass" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/moon_mass.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/moon_mass.png new file mode 100644 index 00000000000..35032b0b599 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/moon_mass.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet-move.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet-move.png new file mode 100644 index 00000000000..8114c78e2a8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet-move.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet.png new file mode 100644 index 00000000000..b72d9fb1c5a Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/raw_prophet.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_n.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_n.png new file mode 100644 index 00000000000..1f809141e67 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_n.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_s.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_s.png new file mode 100644 index 00000000000..f3e6aacada5 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/rust_walker_s.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/stalker.png b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/stalker.png new file mode 100644 index 00000000000..f77fb29428e Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/eldritch_mobs.rsi/stalker.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/bullet.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/bullet.png new file mode 100644 index 00000000000..c86f33e46c8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/bullet.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/clarity.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/clarity.png new file mode 100644 index 00000000000..afcaff853e2 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/clarity.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible.png new file mode 100644 index 00000000000..ec6938e184b Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_empty.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_empty.png new file mode 100644 index 00000000000..4958426fa31 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_empty.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_soul.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_soul.png new file mode 100644 index 00000000000..fc4e5f86f01 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/crucible_soul.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eldritch_flask.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eldritch_flask.png new file mode 100644 index 00000000000..8ae0e6290e4 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eldritch_flask.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eye_medalion.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eye_medalion.png new file mode 100644 index 00000000000..4b92beb50e9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/eye_medalion.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/living_heart.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/living_heart.png new file mode 100644 index 00000000000..5b33edb2fdc Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/living_heart.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/marshal.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/marshal.png new file mode 100644 index 00000000000..8aa1e9a408d Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/marshal.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/meta.json new file mode 100644 index 00000000000..ee850c0a8c3 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/meta.json @@ -0,0 +1,107 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGStation, modified by whateverusername0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "soul_bottle_empty" + }, + { + "name": "soul_bottle_full" + }, + { + "name": "eye_medalion" + }, + { + "name": "ogbook" + }, + { + "name": "rusty_medalion" + }, + { + "name": "living_heart", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eldritch_flask" + }, + { + "name": "rune_carver" + }, + { + "name": "crucible", + "delays": [ + [ + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "crucible_soul" + }, + { + "name": "clarity" + }, + { + "name": "marshal" + }, + { + "name": "crucible_empty" + }, + { + "name": "spacehand_left" + }, + { + "name": "spacehand_right" + }, + { + "name": "moon_amulette", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "protective_blade" + }, + { + "name": "bullet" + } + ] +} diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/moon_amulette.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/moon_amulette.png new file mode 100644 index 00000000000..0a2bbc4f03b Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/moon_amulette.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/ogbook.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/ogbook.png new file mode 100644 index 00000000000..49b23e965a4 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/ogbook.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/protective_blade.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/protective_blade.png new file mode 100644 index 00000000000..c86f33e46c8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/protective_blade.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rune_carver.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rune_carver.png new file mode 100644 index 00000000000..43bda0b46b9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rune_carver.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rusty_medalion.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rusty_medalion.png new file mode 100644 index 00000000000..d171e74b9a7 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/rusty_medalion.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_empty.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_empty.png new file mode 100644 index 00000000000..ba4709ff1b3 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_empty.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_full.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_full.png new file mode 100644 index 00000000000..ccc76b1d833 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/soul_bottle_full.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_left.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_left.png new file mode 100644 index 00000000000..033085b6a70 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_right.png b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_right.png new file mode 100644 index 00000000000..d7fdbaaf753 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/items.rsi/spacehand_right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/equipped-MASK.png b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/equipped-MASK.png new file mode 100644 index 00000000000..5a51161b498 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/icon.png new file mode 100644 index 00000000000..f470aa20ee9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/meta.json new file mode 100644 index 00000000000..76757745a71 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/mad_mask.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station at commit https://github.com/tgstation/tgstation/commit/93e81ee348ef6555c6959347e27874221ef143ed", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/icon.png new file mode 100644 index 00000000000..9c4fb5473d9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-left.png b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-left.png new file mode 100644 index 00000000000..5f9d3a51645 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-right.png b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-right.png new file mode 100644 index 00000000000..27adf6e8f15 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/meta.json new file mode 100644 index 00000000000..e3b7103693f --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/mansus_grasp.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "icon sprite taken from TG station and edited by blooodyspy | inhand-left and right made by blooodyspy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] + ] + } + ] +} diff --git a/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt.png b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt.png new file mode 100644 index 00000000000..3b4bf8f3e73 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt_end.png b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt_end.png new file mode 100644 index 00000000000..ddf5e0c9116 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/ash_jaunt_end.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/meta.json new file mode 100644 index 00000000000..db5578221b0 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/polymorphs.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "ash_jaunt", + "delays": [ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 5 ] ] + }, + { + "name": "ash_jaunt_end", + "delays": [ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 5 ] ] + } + ] +} diff --git a/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon.png new file mode 100644 index 00000000000..8b9cad187f2 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon_harvested.png b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon_harvested.png new file mode 100644 index 00000000000..76954e5b9bf Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/icon_harvested.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/meta.json new file mode 100644 index 00000000000..67bc781105e --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/reality_fracture.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "taken from TG station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ [ 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name": "icon_harvested", + "delays": + [ + [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon.png b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon.png new file mode 100644 index 00000000000..c81c4628641 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_drawanim.png b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_drawanim.png new file mode 100644 index 00000000000..0c57c94eec8 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_drawanim.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_ritualanim.png b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_ritualanim.png new file mode 100644 index 00000000000..4afc5315ba9 Binary files /dev/null and b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/icon_ritualanim.png differ diff --git a/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/meta.json b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/meta.json new file mode 100644 index 00000000000..c9fc842e011 --- /dev/null +++ b/Resources/Textures/_CorvaxNext/Heretic/ritual_rune.rsi/meta.json @@ -0,0 +1,37 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "made by blooodyspy", + "size": { + "x": 96, + "y": 96 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_drawanim", + "delays": [ + [ + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, + 0.5 + ] + ] + }, + { + "name": "icon_ritualanim", + "delays": [ + [ 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125 ] + ] + } + ] +} diff --git a/Tools/ss14_ru/translation.bat b/Tools/ss14_ru/translation.bat index b21dfd484fd..770ee4d2217 100644 --- a/Tools/ss14_ru/translation.bat +++ b/Tools/ss14_ru/translation.bat @@ -1,9 +1,7 @@ -@echo off - -call pip install -r requirements.txt --no-warn-script-location -call python ./yamlextractor.py -call python ./keyfinder.py -call python ./clean_duplicates.py -call python ./clean_empty.py +pip install -r requirements.txt --no-warn-script-location +python ./yamlextractor.py +python ./keyfinder.py +python ./clean_duplicates.py +python ./clean_empty.py PAUSE