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