diff --git a/Content.Server/ADT/Abilities/XenoQueen/XenoQueenComponent.cs b/Content.Server/ADT/Abilities/XenoQueen/XenoQueenComponent.cs index 0bf0f843531..f8466452f00 100644 --- a/Content.Server/ADT/Abilities/XenoQueen/XenoQueenComponent.cs +++ b/Content.Server/ADT/Abilities/XenoQueen/XenoQueenComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; @@ -9,43 +10,43 @@ namespace Content.Server.Abilities.XenoQueen [RegisterComponent] public sealed partial class XenoQueenComponent : Component { - /// - /// Whether this component is active or not. - /// - [DataField("enabled")] - public bool Enabled = true; - - /// - /// The wall prototype to use. - /// + [DataField] + public bool XenoCreatTurretEnabled = true; + + // [DataField("wallPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] public string XenoTurret = "WeaponTurretXeno"; [DataField("xenoTurretAction", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? XenoTurretAction = "ActionXenoQueenTurret"; - [DataField("xenoTurretActionEntity")] public EntityUid? XenoTurretActionEntity; - - //Призывы - [DataField] + // Призывы + public EntityUid? XenoTurretActionEntity; public EntityUid? ActionSpawnXenoBurrower; - - [DataField] public EntityUid? ActionSpawnXenoDrone; + public EntityUid? ActionSpawnXenoRunner; + public EntityUid? ActionSpawnXenoSpitter; + public EntityUid? ActionSpawnXenoPraetorian; + public EntityUid? ActionSpawnXenoRavager; + public EntityUid? ActionSpawnXenoQueen; + // Регенрация очков [DataField] - public EntityUid? ActionSpawnXenoRunner; + public bool Regenetarion = true; // Можно ли регенерировать очки. [DataField] - public EntityUid? ActionSpawnXenoSpitter; + public float RegenDelay = 60f; // Секунды до регена. Используется в счетчике + + [ViewVariables] + public float Accumulator = 0f; // Сам счетчик 0.000000 [DataField] - public EntityUid? ActionSpawnXenoPraetorian; + public FixedPoint2 BloobCount = 20; // Очки. Начальные очки равны 20 [DataField] - public EntityUid? ActionSpawnXenoRavager; - + public FixedPoint2 MaxBloobCount = 150; // Максимальыне количество очков + [DataField] - public EntityUid? ActionSpawnXenoQueen; + public int RegenBloobCount = 3; // Реген очков в минуту } } diff --git a/Content.Server/ADT/Abilities/XenoQueen/XenoQueenSystem.cs b/Content.Server/ADT/Abilities/XenoQueen/XenoQueenSystem.cs index 3547b6fb9f7..21c8cc718c7 100644 --- a/Content.Server/ADT/Abilities/XenoQueen/XenoQueenSystem.cs +++ b/Content.Server/ADT/Abilities/XenoQueen/XenoQueenSystem.cs @@ -6,13 +6,12 @@ using Content.Shared.Magic.Events; using Content.Shared.Physics; using Robust.Shared.Containers; -using Robust.Shared.Spawners; using Robust.Shared.Map; using Robust.Shared.Random; -using System.Numerics; -using Content.Shared.Storage; +using Content.Shared.ADT.Events; using Robust.Shared.Network; using Content.Shared.Magic; +using Content.Shared.FixedPoint; namespace Content.Server.Abilities.XenoQueen { @@ -30,15 +29,47 @@ public sealed class XenoQueenSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnCreateTurret); - SubscribeLocalEvent (OnWorldSpawn); + SubscribeLocalEvent(OnWorldSpawn); } public override void Update(float frameTime) { base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component) && component.Regenetarion) // Костыль, но супер рабочий) + { + if (component.BloobCount >= component.MaxBloobCount) + { + component.Accumulator = 0f; + continue; + } + + component.Accumulator += frameTime; // 0.000001 + + if (component.Accumulator <= component.RegenDelay) + continue; + + component.Accumulator -= component.RegenDelay; // component.Accumulator = 0f; + if (component.BloobCount < component.MaxBloobCount) + { + ChangePowerAmount(uid, component.RegenBloobCount, component); + } + } + } + public void ChangePowerAmount(EntityUid uid, FixedPoint2 amount, XenoQueenComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + if (component.BloobCount + amount < 0) + return; + + component.BloobCount += amount; + //_alerts.ShowAlert(uid, _proto.Index(component.Alert), (short)Math.Clamp(Math.Round(component.Power.Float()), 0, 5)); } private void OnMapInit(EntityUid uid, XenoQueenComponent component, MapInitEvent args) { @@ -49,7 +80,7 @@ private void OnMapInit(EntityUid uid, XenoQueenComponent component, MapInitEvent _actionsSystem.AddAction(uid, ref component.ActionSpawnXenoSpitter, "ActionSpawnMobXenoSpitter"); _actionsSystem.AddAction(uid, ref component.ActionSpawnXenoPraetorian, "ActionSpawnMobXenoPraetorian"); _actionsSystem.AddAction(uid, ref component.ActionSpawnXenoRavager, "ActionSpawnMobXenoRavager"); - //_actionsSystem.AddAction(uid, ref component.ActionSpawnXenoQueen, "ActionSpawnMobXenoQueen"); + _actionsSystem.AddAction(uid, ref component.ActionSpawnXenoQueen, "ActionSpawnMobXenoQueen"); } private void OnShutdown(EntityUid uid, XenoQueenComponent component, ComponentShutdown args) { @@ -60,11 +91,11 @@ private void OnShutdown(EntityUid uid, XenoQueenComponent component, ComponentSh _actionsSystem.RemoveAction(uid, component.ActionSpawnXenoSpitter); _actionsSystem.RemoveAction(uid, component.ActionSpawnXenoPraetorian); _actionsSystem.RemoveAction(uid, component.ActionSpawnXenoRavager); - //_actionsSystem.RemoveAction(uid, component.ActionSpawnXenoQueen); + _actionsSystem.RemoveAction(uid, component.ActionSpawnXenoQueen); } private void OnCreateTurret(EntityUid uid, XenoQueenComponent component, InvisibleWallActionEvent args) { - if (!component.Enabled) + if (!component.XenoCreatTurretEnabled) return; if (_container.IsEntityOrParentInContainer(uid)) @@ -92,57 +123,20 @@ private void OnCreateTurret(EntityUid uid, XenoQueenComponent component, Invisib args.Handled = true; } // Spawn Tipo - private void OnWorldSpawn(EntityUid uid, XenoQueenComponent component, SpawnXenoQueenEvent args) + private void OnWorldSpawn(EntityUid uid, XenoQueenComponent component, SpawnXenoQueenEvent args) // SpawnXenoQueenEvent { - if (args.Handled || !PassesSpellPrerequisites(args.Action, args.Performer)) - return; - - var targetMapCoords = args.Target; - - WorldSpawnSpellHelper(args.Prototypes, targetMapCoords, args.Performer, args.Lifetime, args.Offset); - Speak(args); - args.Handled = true; - } - // Help - private void WorldSpawnSpellHelper(List entityEntries, EntityCoordinates entityCoords, EntityUid performer, float? lifetime, Vector2 offsetVector2) - { - var getProtos = EntitySpawnCollection.GetSpawns(entityEntries, _random); - - var offsetCoords = entityCoords; - foreach (var proto in getProtos) - { - SpawnSpellHelper(proto, offsetCoords, performer, lifetime); - offsetCoords = offsetCoords.Offset(offsetVector2); - } - } - // Help 2 - private void SpawnSpellHelper(string? proto, EntityCoordinates position, EntityUid performer, float? lifetime = null, bool preventCollide = false) - { - if (!_net.IsServer) - return; - - var ent = Spawn(proto, position.SnapToGrid(EntityManager, _mapManager)); - - if (lifetime != null) + if (component.BloobCount > args.Cost) { - var comp = EnsureComp(ent); - comp.Lifetime = lifetime.Value; + component.BloobCount -= args.Cost.Value; + Spawn(args.Prototypes[0].PrototypeId, Transform(uid).Coordinates); + Speak(args); + args.Handled = true; } - - if (preventCollide) + else { - var comp = EnsureComp(ent); - comp.Uid = performer; + _popupSystem.PopupEntity(Loc.GetString("queen-no-bloob-count", ("CountBloob", args.Cost.GetValueOrDefault() - component.BloobCount)), uid); } } - // - private bool PassesSpellPrerequisites(EntityUid spell, EntityUid performer) - { - var ev = new BeforeCastSpellEvent(performer); - RaiseLocalEvent(spell, ref ev); - return !ev.Cancelled; - } - // private void Speak(BaseActionEvent args) { if (args is not ISpeakSpell speak || string.IsNullOrWhiteSpace(speak.Speech)) diff --git a/Content.Server/ADT/Events/SpawnXenoQueenEvent.cs b/Content.Server/ADT/Events/SpawnXenoQueenEvent.cs deleted file mode 100644 index 20ceef116c0..00000000000 --- a/Content.Server/ADT/Events/SpawnXenoQueenEvent.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Numerics; -using Content.Shared.Actions; -using Content.Shared.Storage; - -namespace Content.Shared.Magic.Events; - -// TODO: This class needs combining with InstantSpawnSpellEvent -[DataDefinition] -public sealed partial class SpawnXenoQueenEvent : WorldTargetActionEvent, ISpeakSpell -{ - /// - /// The list of prototypes this spell will spawn - /// - [DataField] - public List Prototypes = new(); - - // TODO: This offset is liable for deprecation. - // TODO: Target tile via code instead? - /// - /// The offset the prototypes will spawn in on relative to the one prior. - /// Set to 0,0 to have them spawn on the same tile. - /// - [DataField] - public Vector2 Offset; - - /// - /// Lifetime to set for the entities to self delete - /// - [DataField] - public float? Lifetime; - - [DataField] - public string? Speech { get; private set; } - - [DataField] - public int? Cost { get; private set; } -} diff --git a/Content.Shared/ADT/Actions/SpawnXenoQueenEvent.cs b/Content.Shared/ADT/Actions/SpawnXenoQueenEvent.cs new file mode 100644 index 00000000000..0592610d19d --- /dev/null +++ b/Content.Shared/ADT/Actions/SpawnXenoQueenEvent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Actions; +using Content.Shared.Storage; +using Content.Shared.Magic; + +namespace Content.Shared.ADT.Events; + +// TODO: This class needs combining with InstantSpawnSpellEvent +public sealed partial class SpawnXenoQueenEvent : WorldTargetActionEvent, ISpeakSpell +{ + [DataField] + public List Prototypes = new(); + + [DataField] + public string? Speech { get; private set; } + + [DataField] + public int? Cost { get; private set; } +} diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Actions/XenoQueen.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Actions/XenoQueen.ftl index e3160fcddd1..a156f794409 100644 --- a/Resources/Locale/ru-RU/ADT/prototypes/Actions/XenoQueen.ftl +++ b/Resources/Locale/ru-RU/ADT/prototypes/Actions/XenoQueen.ftl @@ -1,18 +1,19 @@ -ent-ActionXenoQeenTurret = Создать ксено турель. +ent-ActionXenoQeenTurret = Создать ксено турель. [color=green]25[/color] .desc = Создаёт перед вами ксену турель, если хватает места. create-turret-failed = Найдите другое место. create-turret = Арргхсс. Шшшшш! -ent-ActionSpawnMobXenoSpitter = Призвать Плевальщик +ent-ActionSpawnMobXenoSpitter = Призвать Плевальщик [color=green]20[/color] .desc = Родите Плевальщика, который будет плеваться! -ent-ActionSpawnMobXenoPraetorian = Призвать Преторианеца +ent-ActionSpawnMobXenoPraetorian = Призвать Преторианеца [color=green]50[/color] .desc = Родите Преторианеца, который будет сражаться за вас! -ent-ActionSpawnMobXenoDrone = Просто Дрон. Кому он нужен? +ent-ActionSpawnMobXenoDrone = Просто Дрон [color=green]30[/color]. Кому он нужен? .desc = Родите рабочего, Дрон. -ent-ActionSpawnMobXenoRavager = Призвать Разрушителя +ent-ActionSpawnMobXenoRavager = Призвать Разрушителя [color=green]80[/color] .desc = Родите [color=red]смерть[/color] во плоти! -ent-ActionSpawnMobXenoRunner = Призвать Бегуна +ent-ActionSpawnMobXenoRunner = Призвать Бегуна [color=green]40[/color] .desc = Родите самую быструю личинку! -ent-ActionSpawnMobXenoBurrower = Призвать рабочего +ent-ActionSpawnMobXenoBurrower = Призвать рабочего [color=green]10[/color] .desc = Стандартный ксено. -ent-ActionSpawnMobXenoQueen = Призвать [color=violet]Королеву[/color]. - .desc = [color=red]Новое потомство! Новое поколение! Эволюция![/color] \ No newline at end of file +ent-ActionSpawnMobXenoQueen = Призвать [color=violet]Королеву[/color] [color=green]100[/color] + .desc = [color=red]Новое потомство! Новое поколение! Эволюция![/color] +queen-no-bloob-count = Недостаточно {$CountBloob} очков. \ No newline at end of file diff --git a/Resources/Maps/ADTMaps/Shuttles/sec_shuttle.yml b/Resources/Maps/ADTMaps/Shuttles/sec_shuttle.yml index b41e7060ffe..66b4b3c5cb5 100644 --- a/Resources/Maps/ADTMaps/Shuttles/sec_shuttle.yml +++ b/Resources/Maps/ADTMaps/Shuttles/sec_shuttle.yml @@ -23,12 +23,12 @@ entities: name: NT-SEC "Owl" - type: Transform pos: -0.520833,-1.5517004 - parent: invalid + parent: 54 - type: MapGrid chunks: 0,0: ind: 0,0 - tiles: owAAAAAAowAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: owAAAAAAowAAAAAAowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,-1: ind: 0,-1 @@ -36,7 +36,7 @@ entities: version: 6 -1,0: ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAowAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-1: ind: -1,-1 @@ -148,6 +148,26 @@ entities: id: WarnCornerGreyscaleSW decals: 73: -2,-11 + - node: + color: '#9C2020FF' + id: WoodTrimThinEndEWhite + decals: + 77: 1,-7 + - node: + color: '#9C2020FF' + id: WoodTrimThinEndWWhite + decals: + 76: -1,-7 + - node: + color: '#9C2020FF' + id: WoodTrimThinLineNWhite + decals: + 78: 0,-7 + - node: + color: '#9C2020FF' + id: WoodTrimThinLineSWhite + decals: + 79: 0,-7 - type: RadiationGridResistance - type: GridAtmosphere version: 2 @@ -226,6 +246,32 @@ entities: - 0 chunkSize: 4 - type: GasTileOverlay + - uid: 54 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree +- proto: ADTPoweredShuttleLight + entities: + - uid: 81 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,0.5 + parent: 1 + - uid: 217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 1 - proto: AirlockGlassShuttle entities: - uid: 2 @@ -337,13 +383,6 @@ entities: - type: Transform pos: -0.5403085,-10.359049 parent: 1 -- proto: ButtonFrameCaution - entities: - - uid: 80 - components: - - type: Transform - pos: -0.5,-4.5 - parent: 1 - proto: ButtonFrameCautionSecurity entities: - uid: 34 @@ -615,7 +654,6 @@ entities: inletTwoConcentration: 0.78 inletOneConcentration: 0.22 targetPressure: 303 - enabled: True - proto: GasPassiveVent entities: - uid: 157 @@ -1048,11 +1086,6 @@ entities: linkedPorts: 21: - Pressed: Toggle - - uid: 81 - components: - - type: Transform - pos: -0.5,-4.5 - parent: 1 - proto: LockerEvidence entities: - uid: 197 @@ -1243,6 +1276,22 @@ entities: - type: Transform pos: 1.5,0.5 parent: 1 +- proto: SignalButtonDirectional + entities: + - uid: 218 + components: + - type: MetaData + desc: ????. + name: ?????? ???????????? ??? + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 81: + - Pressed: Toggle + 217: + - Pressed: Toggle - proto: SinkStemlessWater entities: - uid: 200 @@ -1366,6 +1415,11 @@ entities: - type: Transform pos: -0.5,-4.5 parent: 1 + - uid: 56 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 - uid: 57 components: - type: Transform @@ -1399,6 +1453,11 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-10.5 parent: 1 + - uid: 80 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 - uid: 94 components: - type: Transform @@ -1511,17 +1570,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-14.5 parent: 1 - - uid: 54 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,0.5 - parent: 1 - - uid: 56 - components: - - type: Transform - pos: -1.5,0.5 - parent: 1 - uid: 108 components: - type: Transform diff --git a/Resources/Prototypes/ADT/Actions/XenoQueen.yml b/Resources/Prototypes/ADT/Actions/XenoQueen.yml index 877f37c6d3f..e665844a8f8 100644 --- a/Resources/Prototypes/ADT/Actions/XenoQueen.yml +++ b/Resources/Prototypes/ADT/Actions/XenoQueen.yml @@ -1,8 +1,8 @@ # Спавн турелей у королевы - type: entity - id: ActionXenoQeenTurret - name: Create Xeno turret - description: Create an xeno turret in front of you, if placeable there. + id: ActionXenoQueenTurret + name: Create Xeno turret [color=green]25[/color] + description: Create an xeno turret in front of you, if placeable there. components: - type: InstantAction priority: -1 @@ -15,8 +15,8 @@ - type: entity id: ActionSpawnMobXenoQueen - name: Spawn Queen - description: New offspring! + name: Spawn Queen [color=green]100[/color] + description: New offspring! categories: [ HideSpawnMenu ] components: - type: WorldTargetAction @@ -26,16 +26,16 @@ icon: sprite: Mobs/Aliens/Xenos/queen.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoQueen amount: 1 - offset: 0, 1 speech: "Ааааааа! Ррррр!" + cost: 100 - type: entity id: ActionSpawnMobXenoBurrower - name: Spawn Burrower + name: Spawn Burrower [color=green]10[/color] description: Standard xeno categories: [ HideSpawnMenu ] components: @@ -50,13 +50,12 @@ prototypes: - id: MobXeno amount: 1 - offset: 0, 1 speech: "Фаьюп" cost: 10 - type: entity id: ActionSpawnMobXenoSpitter - name: Spawn Spitter + name: Spawn Spitter [color=green]20[/color] description: Give birth to Spitter who will spit! categories: [ HideSpawnMenu ] components: @@ -67,16 +66,16 @@ icon: sprite: Mobs/Aliens/Xenos/spitter.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoSpitter amount: 1 - offset: 0, 1 speech: "Грррррр" + cost: 20 - type: entity id: ActionSpawnMobXenoPraetorian - name: Spawn Praetorian + name: Spawn Praetorian [color=green]50[/color] description: Give birth to a Praetorian who will fight for you! categories: [ HideSpawnMenu ] components: @@ -87,16 +86,16 @@ icon: sprite: Mobs/Aliens/Xenos/praetorian.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoPraetorian amount: 1 - offset: 0, 1 speech: "Фшшшшшш" + cost: 50 - type: entity id: ActionSpawnMobXenoDrone - name: Just a Drone. Who needs it? + name: Just a Drone [color=green]30[/color]. Who needs it? description: Give birth to a worker, Drone. categories: [ HideSpawnMenu ] components: @@ -107,16 +106,16 @@ icon: sprite: Mobs/Aliens/Xenos/drone.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoDrone amount: 1 - offset: 0, 1 speech: "Псфф" + cost: 30 - type: entity id: ActionSpawnMobXenoRavager - name: Spawn Ravager + name: Spawn Ravager [color=green]80[/color] description: Give birth to death in the flesh! categories: [ HideSpawnMenu ] components: @@ -127,16 +126,16 @@ icon: sprite: Mobs/Aliens/Xenos/ravager.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoRavager amount: 1 - offset: 0, 1 speech: "АААРРРР ГГАААР" + cost: 80 - type: entity id: ActionSpawnMobXenoRunner - name: Spawn Runner + name: Spawn Runner [color=green]40[/color] description: Give birth to the fastest larva! categories: [ HideSpawnMenu ] components: @@ -147,9 +146,9 @@ icon: sprite: Mobs/Aliens/Xenos/runner.rsi state: crit - event: !type:WorldSpawnSpellEvent + event: !type:SpawnXenoQueenEvent prototypes: - id: MobXenoRunner amount: 1 - offset: 0, 1 - speech: "Шифссссшш" \ No newline at end of file + speech: "Шифссссшш" + cost: 40 \ No newline at end of file