From dadc19e37d3dbbfc55dbd00f839086e5c1fd9d16 Mon Sep 17 00:00:00 2001 From: Rxup Date: Sat, 22 Feb 2025 20:08:19 +0300 Subject: [PATCH] fix psi (#1069) * fix psi * Update events.yml --- .../Backmen/Chapel/SacrificialAltarSystem.cs | 8 ++ .../Backmen/Chapel/SacrificialAltarSystem.cs | 50 ++---------- .../Psionics/Glimmer/GlimmerReactiveSystem.cs | 40 +++++----- .../Structures/GlimmerSourceComponent.cs | 4 + .../Structures/GlimmerStructuresSystem.cs | 72 ++++++++++++++++- Content.Server/Backmen/Soul/GolemSystem.cs | 2 +- .../StationEvents/Events/NoosphericFryRule.cs | 2 +- .../Components}/SacrificialAltarComponent.cs | 5 +- .../Chapel/SharedSacrificialAltarSystem.cs | 80 +++++++++++++++++++ ...mponent.cs => GlimmerReactiveComponent.cs} | 2 +- .../Xenoarchaeology/item_artifacts.yml | 1 + .../Xenoarchaeology/structure_artifacts.yml | 1 + .../Structures/Specific/Anomaly/anomalies.yml | 1 + .../Prototypes/_Backmen/GameRules/events.yml | 19 ++++- .../Prototypes/_Backmen/game_presets.yml | 19 +++++ Resources/Prototypes/game_presets.yml | 13 +++ 16 files changed, 245 insertions(+), 74 deletions(-) create mode 100644 Content.Client/Backmen/Chapel/SacrificialAltarSystem.cs rename {Content.Server/Backmen/Chapel => Content.Shared/Backmen/Chapel/Components}/SacrificialAltarComponent.cs (91%) create mode 100644 Content.Shared/Backmen/Chapel/SharedSacrificialAltarSystem.cs rename Content.Shared/Backmen/Psionics/Glimmer/{SharedGlimmerReactiveComponent.cs => GlimmerReactiveComponent.cs} (95%) diff --git a/Content.Client/Backmen/Chapel/SacrificialAltarSystem.cs b/Content.Client/Backmen/Chapel/SacrificialAltarSystem.cs new file mode 100644 index 00000000000..94b05f95f92 --- /dev/null +++ b/Content.Client/Backmen/Chapel/SacrificialAltarSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared.Backmen.Chapel; + +namespace Content.Client.Backmen.Chapel; + +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem +{ + +} diff --git a/Content.Server/Backmen/Chapel/SacrificialAltarSystem.cs b/Content.Server/Backmen/Chapel/SacrificialAltarSystem.cs index 3b3a9bbd804..c15bb67adc6 100644 --- a/Content.Server/Backmen/Chapel/SacrificialAltarSystem.cs +++ b/Content.Server/Backmen/Chapel/SacrificialAltarSystem.cs @@ -17,8 +17,10 @@ using Content.Server.Body.Systems; using Content.Shared.Backmen.Abilities.Psionics; using Content.Shared.Backmen.Chapel; +using Content.Shared.Backmen.Chapel.Components; using Content.Shared.Backmen.Psionics.Glimmer; using Content.Shared.Backmen.Soul; +using Content.Shared.Hands.Components; using Content.Shared.Players; using Robust.Server.Audio; using Robust.Shared.Prototypes; @@ -28,7 +30,7 @@ namespace Content.Server.Backmen.Chapel; -public sealed class SacrificialAltarSystem : EntitySystem +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem { [Dependency] private readonly StunSystem _stunSystem = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; @@ -46,51 +48,9 @@ public sealed class SacrificialAltarSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent>(AddSacrificeVerb); - SubscribeLocalEvent(OnStrappedEvent); - SubscribeLocalEvent(OnUnstrappedEvent); - SubscribeLocalEvent(OnDoAfter); - - } - - private void AddSacrificeVerb(EntityUid uid, SacrificialAltarComponent component, GetVerbsEvent args) - { - if (!args.CanAccess || !args.CanInteract || component.DoAfter != null) - return; - - if (!TryComp(uid, out var strap)) - return; - - EntityUid? sacrificee = null; - - foreach (var entity in strap.BuckledEntities) // mm yes I love hashsets which can't be accessed via index - { - sacrificee = entity; - } - if (sacrificee == null) - return; - - AlternativeVerb verb = new() - { - Act = () => - { - AttemptSacrifice(args.User, sacrificee.Value, uid, component); - }, - Text = Loc.GetString("altar-sacrifice-verb"), - Priority = 2 - }; - args.Verbs.Add(verb); - } - - private void OnUnstrappedEvent(EntityUid uid, SacrificialAltarComponent component, ref UnstrapAttemptEvent args) - { - args.Cancelled = true; - } + SubscribeLocalEvent(OnDoAfter); - private void OnStrappedEvent(EntityUid uid, SacrificialAltarComponent component, ref StrapAttemptEvent args) - { - args.Cancelled = true; } private void OnDoAfter(EntityUid uid, SacrificialAltarComponent component, SacrificeDoAfterEvent args) @@ -151,7 +111,7 @@ private void OnDoAfter(EntityUid uid, SacrificialAltarComponent component, Sacri } } - public void AttemptSacrifice(EntityUid agent, EntityUid patient, EntityUid altar, SacrificialAltarComponent? component = null) + protected override void AttemptSacrifice(EntityUid agent, EntityUid patient, EntityUid altar, SacrificialAltarComponent? component = null) { if (!Resolve(altar, ref component)) return; diff --git a/Content.Server/Backmen/Psionics/Glimmer/GlimmerReactiveSystem.cs b/Content.Server/Backmen/Psionics/Glimmer/GlimmerReactiveSystem.cs index a68e94ee145..94328223dcc 100644 --- a/Content.Server/Backmen/Psionics/Glimmer/GlimmerReactiveSystem.cs +++ b/Content.Server/Backmen/Psionics/Glimmer/GlimmerReactiveSystem.cs @@ -62,14 +62,14 @@ public override void Initialize() SubscribeLocalEvent(Reset); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnComponentRemove); - SubscribeLocalEvent(OnPowerChanged); - SubscribeLocalEvent(OnTierChanged); - SubscribeLocalEvent>(AddShockVerb); - SubscribeLocalEvent(OnDamageChanged); - SubscribeLocalEvent(OnDestroyed); - SubscribeLocalEvent(OnUnanchorAttempt); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnComponentRemove); + SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnTierChanged); + SubscribeLocalEvent>(AddShockVerb); + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnDestroyed); + SubscribeLocalEvent(OnUnanchorAttempt); } /// @@ -82,7 +82,7 @@ public override void Initialize() /// difference since last update. This can be zero for the sake of /// toggling the enabled states. private void UpdateEntityState(EntityUid uid, - SharedGlimmerReactiveComponent component, + GlimmerReactiveComponent component, GlimmerTier currentGlimmerTier, int glimmerTierDelta) { @@ -132,7 +132,7 @@ private void UpdateEntityState(EntityUid uid, /// current status of the glimmer tier, if it wasn't around when an /// update went out. /// - private void OnMapInit(EntityUid uid, SharedGlimmerReactiveComponent component, MapInitEvent args) + private void OnMapInit(EntityUid uid, GlimmerReactiveComponent component, MapInitEvent args) { if (component.RequiresApcPower && !HasComp(uid)) { @@ -150,7 +150,7 @@ private void OnMapInit(EntityUid uid, SharedGlimmerReactiveComponent component, /// just in case some objects can temporarily become reactive to the /// glimmer. /// - private void OnComponentRemove(EntityUid uid, SharedGlimmerReactiveComponent component, ComponentRemove args) + private void OnComponentRemove(EntityUid uid, GlimmerReactiveComponent component, ComponentRemove args) { UpdateEntityState(uid, component, GlimmerTier.Minimal, -1 * (int) LastGlimmerTier); } @@ -159,7 +159,7 @@ private void OnComponentRemove(EntityUid uid, SharedGlimmerReactiveComponent com /// If the Entity has RequiresApcPower set to true, this will force an /// update to the entity's state. /// - private void OnPowerChanged(EntityUid uid, SharedGlimmerReactiveComponent component, ref PowerChangedEvent args) + private void OnPowerChanged(EntityUid uid, GlimmerReactiveComponent component, ref PowerChangedEvent args) { if (component.RequiresApcPower) UpdateEntityState(uid, component, LastGlimmerTier, 0); @@ -169,7 +169,7 @@ private void OnPowerChanged(EntityUid uid, SharedGlimmerReactiveComponent compon /// Enable / disable special effects from higher tiers. /// private void OnTierChanged(EntityUid uid, - SharedGlimmerReactiveComponent component, + GlimmerReactiveComponent component, GlimmerTierChangedEvent args) { if (!TryComp(uid, out var receiver)) @@ -190,7 +190,7 @@ private void OnTierChanged(EntityUid uid, } private void AddShockVerb(EntityUid uid, - SharedGlimmerReactiveComponent component, + GlimmerReactiveComponent component, GetVerbsEvent args) { if (!args.CanAccess || !args.CanInteract) @@ -218,7 +218,7 @@ private void AddShockVerb(EntityUid uid, args.Verbs.Add(verb); } - private void OnDamageChanged(EntityUid uid, SharedGlimmerReactiveComponent component, DamageChangedEvent args) + private void OnDamageChanged(EntityUid uid, GlimmerReactiveComponent component, DamageChangedEvent args) { if (args.Origin == null) return; @@ -233,7 +233,7 @@ private void OnDamageChanged(EntityUid uid, SharedGlimmerReactiveComponent compo } [ValidatePrototypeId] private const string MaterialBluespace = "MaterialBluespace1"; - private void OnDestroyed(EntityUid uid, SharedGlimmerReactiveComponent component, DestructionEventArgs args) + private void OnDestroyed(EntityUid uid, GlimmerReactiveComponent component, DestructionEventArgs args) { Spawn(MaterialBluespace, Transform(uid).Coordinates); @@ -251,7 +251,7 @@ private void OnDestroyed(EntityUid uid, SharedGlimmerReactiveComponent component _explosionSystem.QueueExplosion(uid, "Default", totalIntensity, slope, maxIntensity); } - private void OnUnanchorAttempt(EntityUid uid, SharedGlimmerReactiveComponent component, + private void OnUnanchorAttempt(EntityUid uid, GlimmerReactiveComponent component, UnanchorAttemptEvent args) { if (_glimmerSystem.GetGlimmerTier() >= GlimmerTier.Dangerous) @@ -273,7 +273,7 @@ public void BeamRandomNearProber(EntityUid prober, int targets, float range = 10 var pos = Transform(prober).Coordinates.ToMap(EntityManager,_transformSystem); _entitySet.Clear(); _entityLookupSystem.GetEntitiesInRange(typeof(StatusEffectsComponent),pos.MapId,pos.Position, range, _entitySet); - _entityLookupSystem.GetEntitiesInRange(typeof(SharedGlimmerReactiveComponent),pos.MapId,pos.Position, range, _entitySet); + _entityLookupSystem.GetEntitiesInRange(typeof(GlimmerReactiveComponent),pos.MapId,pos.Position, range, _entitySet); _entities.Clear(); foreach (var target in _entitySet) @@ -389,7 +389,7 @@ public override void Update(float frameTime) var glimmerTierDelta = (int) currentGlimmerTier - (int) LastGlimmerTier; var ev = new GlimmerTierChangedEvent(LastGlimmerTier, currentGlimmerTier, glimmerTierDelta); - var reactiv = EntityQueryEnumerator(); + var reactiv = EntityQueryEnumerator(); while (reactiv.MoveNext(out var owner, out var reactive)) { UpdateEntityState(owner, reactive, currentGlimmerTier, glimmerTierDelta); @@ -429,7 +429,7 @@ public override void Update(float frameTime) } } - var reactives = EntityQueryEnumerator(); + var reactives = EntityQueryEnumerator(); while (reactives.MoveNext(out var owner, out _, out var transformComponent)) { if (currentGlimmerTier == GlimmerTier.Critical) diff --git a/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerSourceComponent.cs b/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerSourceComponent.cs index 9662a2ede59..a6491011633 100644 --- a/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerSourceComponent.cs +++ b/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerSourceComponent.cs @@ -23,4 +23,8 @@ public sealed partial class GlimmerSourceComponent : Component /// [DataField("addToGlimmer")] public bool AddToGlimmer = true; + + [DataField("range")] + public float Range = 4f; + } diff --git a/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerStructuresSystem.cs b/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerStructuresSystem.cs index ba43eeb6926..23d0eb204f6 100644 --- a/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerStructuresSystem.cs +++ b/Content.Server/Backmen/Psionics/Glimmer/Structures/GlimmerStructuresSystem.cs @@ -1,9 +1,17 @@ using Content.Server.Anomaly.Components; +using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Server.Stunnable; +using Content.Server.Xenoarchaeology.XenoArtifacts.Events; using Content.Shared.Anomaly.Components; +using Content.Shared.Backmen.Abilities.Psionics; +using Content.Shared.Backmen.Psionics.Components; using Content.Shared.Backmen.Psionics.Glimmer; +using Content.Shared.Mobs.Systems; using Content.Shared.Power; +using Content.Shared.StatusEffect; +using Robust.Shared.Random; namespace Content.Server.Backmen.Psionics.Glimmer; @@ -14,6 +22,14 @@ public sealed class GlimmerStructuresSystem : EntitySystem { [Dependency] private readonly PowerReceiverSystem _powerReceiverSystem = default!; [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; + [Dependency] private readonly MobStateSystem _mobStateSystem = default!; + [Dependency] private readonly StunSystem _stunSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly PsionicsSystem _psionicsSystem = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + private EntityQuery _apcPower; public override void Initialize() @@ -24,10 +40,64 @@ public override void Initialize() SubscribeLocalEvent(OnAnomalyPulse); SubscribeLocalEvent(OnAnomalySupercritical); + SubscribeLocalEvent(OnArtifactActivated); _apcPower = GetEntityQuery(); } + private void OnArtifactActivated(Entity ent, ref ArtifactActivatedEvent args) + { + if (ent.Comp.AddToGlimmer) + { + _glimmerSystem.Glimmer += 10; + } + else + { + _glimmerSystem.Glimmer -= 10; + } + + if (args.Activator != null && + !HasComp(args.Activator) && + TryComp(args.Activator, out var potentialPsionicComponent)) + { + ZapTarget((args.Activator.Value, potentialPsionicComponent)); + return; + } + + foreach (var target in _lookup.GetEntitiesInRange(Transform(ent).Coordinates, ent.Comp.Range)) + { + ZapTarget(target); + } + } + + private void ZapTarget(Entity target) + { + if(HasComp(target)) + return; + + _stunSystem.TryParalyze(target, TimeSpan.FromSeconds(5), false); + _statusEffectsSystem.TryAddStatusEffect(target, "Stutter", TimeSpan.FromSeconds(10), false, "StutteringAccent"); + + if (HasComp(target)) + { + _popupSystem.PopupEntity(Loc.GetString("noospheric-zap-seize"), target, target, Shared.Popups.PopupType.LargeCaution); + _glimmerSystem.Glimmer += 50; + } + else + { + if (target.Comp.Rerolled) + { + target.Comp.Rerolled = false; + _popupSystem.PopupEntity(Loc.GetString("noospheric-zap-seize-potential-regained"), target, target, Shared.Popups.PopupType.LargeCaution); + } + else + { + _psionicsSystem.RollPsionics(target, multiplier: 0.25f); + _popupSystem.PopupEntity(Loc.GetString("noospheric-zap-seize"), target, target, Shared.Popups.PopupType.LargeCaution); + } + } + } + private void OnAnomalyVesselPowerChanged(EntityUid uid, AnomalyVesselComponent component, ref PowerChangedEvent args) { if (TryComp(component.Anomaly, out var glimmerSource)) @@ -54,7 +124,7 @@ private void OnAnomalyPulse(EntityUid uid, GlimmerSourceComponent component, ref private void OnAnomalySupercritical(EntityUid uid, GlimmerSourceComponent component, ref AnomalySupercriticalEvent args) { - _glimmerSystem.Glimmer += 100; + _glimmerSystem.Glimmer += 400; } public override void Update(float frameTime) diff --git a/Content.Server/Backmen/Soul/GolemSystem.cs b/Content.Server/Backmen/Soul/GolemSystem.cs index 616e4a25c8d..1e236374b60 100644 --- a/Content.Server/Backmen/Soul/GolemSystem.cs +++ b/Content.Server/Backmen/Soul/GolemSystem.cs @@ -92,7 +92,7 @@ private void OnGetLaws(EntityUid uid, GolemComponent component, ref GetSiliconLa // Add the first emag law args.Laws.Laws.Add(new SiliconLaw { - LawString = Loc.GetString("law-golem-1", ("name", component.Master ?? "----")), + LawString = Loc.GetString("golem-law", ("master", component.Master ?? "----")), Order = 1 }); diff --git a/Content.Server/Backmen/StationEvents/Events/NoosphericFryRule.cs b/Content.Server/Backmen/StationEvents/Events/NoosphericFryRule.cs index cbf74eced4d..40ab0da60a0 100644 --- a/Content.Server/Backmen/StationEvents/Events/NoosphericFryRule.cs +++ b/Content.Server/Backmen/StationEvents/Events/NoosphericFryRule.cs @@ -103,7 +103,7 @@ protected override void Started(EntityUid uid, NoosphericFryRuleComponent compon } // for probers: - var queryReactive = EntityQueryEnumerator(); + var queryReactive = EntityQueryEnumerator(); while (queryReactive.MoveNext(out var reactive, out _, out var xform, out var physics)) { // shoot out three bolts of lighting... diff --git a/Content.Server/Backmen/Chapel/SacrificialAltarComponent.cs b/Content.Shared/Backmen/Chapel/Components/SacrificialAltarComponent.cs similarity index 91% rename from Content.Server/Backmen/Chapel/SacrificialAltarComponent.cs rename to Content.Shared/Backmen/Chapel/Components/SacrificialAltarComponent.cs index e411093eb97..7af4f71d4b2 100644 --- a/Content.Server/Backmen/Chapel/SacrificialAltarComponent.cs +++ b/Content.Shared/Backmen/Chapel/Components/SacrificialAltarComponent.cs @@ -1,10 +1,11 @@ using Content.Shared.DoAfter; using Robust.Shared.Audio; using Robust.Shared.Audio.Components; +using Robust.Shared.GameStates; -namespace Content.Server.Backmen.Chapel; +namespace Content.Shared.Backmen.Chapel.Components; -[RegisterComponent] +[RegisterComponent, NetworkedComponent] public sealed partial class SacrificialAltarComponent : Component { [DataField("doAfter")] diff --git a/Content.Shared/Backmen/Chapel/SharedSacrificialAltarSystem.cs b/Content.Shared/Backmen/Chapel/SharedSacrificialAltarSystem.cs new file mode 100644 index 00000000000..c2dd14fdd43 --- /dev/null +++ b/Content.Shared/Backmen/Chapel/SharedSacrificialAltarSystem.cs @@ -0,0 +1,80 @@ +using Content.Shared.Backmen.Chapel.Components; +using Content.Shared.Buckle.Components; +using Content.Shared.Cuffs; +using Content.Shared.Cuffs.Components; +using Content.Shared.Verbs; + +namespace Content.Shared.Backmen.Chapel; + +public abstract class SharedSacrificialAltarSystem : EntitySystem +{ + [Dependency] + private readonly SharedCuffableSystem _cuffable = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStrappedEvent); + SubscribeLocalEvent(OnUnstrappedEvent); + SubscribeLocalEvent>(AddSacrificeVerb); + } + + private void OnUnstrappedEvent(EntityUid uid, SacrificialAltarComponent component, ref UnstrapAttemptEvent args) + { + if ( + TryComp(args.Buckle, out var cuff) && + _cuffable.IsCuffed((args.Buckle, cuff))) + { + args.Cancelled = true; + return; + } + } + + private void OnStrappedEvent(EntityUid uid, SacrificialAltarComponent component, ref StrapAttemptEvent args) + { + /* + if (args.User == args.Buckle) + { + args.Cancelled = true; + return; + }*/ + } + + private void AddSacrificeVerb(EntityUid uid, SacrificialAltarComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || component.DoAfter != null) + return; + + if (!TryComp(uid, out var strap)) + return; + + EntityUid? sacrificee = null; + + foreach (var entity in strap.BuckledEntities) // mm yes I love hashsets which can't be accessed via index + { + sacrificee = entity; + } + + if (sacrificee == null) + return; + + AlternativeVerb verb = new() + { + Act = () => + { + AttemptSacrifice(args.User, sacrificee.Value, uid, component); + }, + Text = Loc.GetString("altar-sacrifice-verb"), + Priority = 2 + }; + args.Verbs.Add(verb); + } + + protected virtual void AttemptSacrifice(EntityUid agent, + EntityUid patient, + EntityUid altar, + SacrificialAltarComponent? component = null) + { + + } +} diff --git a/Content.Shared/Backmen/Psionics/Glimmer/SharedGlimmerReactiveComponent.cs b/Content.Shared/Backmen/Psionics/Glimmer/GlimmerReactiveComponent.cs similarity index 95% rename from Content.Shared/Backmen/Psionics/Glimmer/SharedGlimmerReactiveComponent.cs rename to Content.Shared/Backmen/Psionics/Glimmer/GlimmerReactiveComponent.cs index 5f69b8a5c99..4cbd16b45c1 100644 --- a/Content.Shared/Backmen/Psionics/Glimmer/SharedGlimmerReactiveComponent.cs +++ b/Content.Shared/Backmen/Psionics/Glimmer/GlimmerReactiveComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Backmen.Psionics.Glimmer; [RegisterComponent] -public sealed partial class SharedGlimmerReactiveComponent : Component +public sealed partial class GlimmerReactiveComponent : Component { /// /// Do the effects of this component require power from an APC? diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml index 2241cdd4aa0..381d96d0f95 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml @@ -5,6 +5,7 @@ description: A strange handheld alien device. abstract: true components: + - type: GlimmerSource - type: Sprite sprite: Objects/Specific/Xenoarchaeology/item_artifacts.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml index 68947c0a71b..ec859c17ac8 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/structure_artifacts.yml @@ -5,6 +5,7 @@ description: A strange alien device. abstract: true components: + - type: GlimmerSource - type: Sprite drawdepth: SmallObjects sprite: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index 69f717f0869..ba03e766728 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -5,6 +5,7 @@ description: An impossible object. Should you be standing this close to it? components: - type: GlimmerSource + secondsPerGlimmer: 2 - type: Anomaly offset: 0, 0.15 pulseSound: diff --git a/Resources/Prototypes/_Backmen/GameRules/events.yml b/Resources/Prototypes/_Backmen/GameRules/events.yml index dcebfdada86..771bf94f419 100644 --- a/Resources/Prototypes/_Backmen/GameRules/events.yml +++ b/Resources/Prototypes/_Backmen/GameRules/events.yml @@ -1,3 +1,16 @@ +- type: entity + parent: BaseGameRule + id: PsiScheduler + components: + - type: GameRule + - type: BasicStationEventScheduler + minimumTimeUntilFirstEvent: 0 + minMaxEventTiming: + min: 240 # 4 min + max: 480 # 8 min + scheduledGameRules: !type:NestedSelector + tableId: PsiBackmenEventsTable + - type: entityTable id: PsiBackmenEventsTable table: !type:AllSelector @@ -12,17 +25,15 @@ - id: FreeProber - id: GlimmerRandomSentience - id: GlimmerRevenantSpawn + - id: NoosphericStorm - type: entityTable id: BasicBackmenEventsTable table: !type:AllSelector # we need to pass a list of rules, since rules have further restrictions to consider via StationEventComp children: - - !type:NestedSelector - tableId: PsiBackmenEventsTable - id: EvilTwinSpawn - id: FugitiveSpawn - - id: NoosphericStorm - id: BluespaceGoat - id: SpiderSpiderVampireSpawn - id: DiseaseOutbreak @@ -107,6 +118,8 @@ - type: StationEvent # Favor glimmer events just a little more than regular events. weight: 12 + earliestStart: 1 + reoccurrenceDelay: 1 - type: GlimmerEvent ## Glimmer events diff --git a/Resources/Prototypes/_Backmen/game_presets.yml b/Resources/Prototypes/_Backmen/game_presets.yml index de4c5ed840e..cb9f0eb9247 100644 --- a/Resources/Prototypes/_Backmen/game_presets.yml +++ b/Resources/Prototypes/_Backmen/game_presets.yml @@ -24,6 +24,7 @@ - VampiresGameRule - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - SubGamemodesRule - BasicRoundstartVariation - MeteorSwarmScheduler @@ -39,6 +40,7 @@ - BlobGameMode - CalmStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - SubGamemodesRule - CalmMeteorSwarmScheduler @@ -53,6 +55,7 @@ - XenoAgentGameMode - CalmStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - SubGamemodesRule - CalmMeteorSwarmScheduler @@ -69,6 +72,7 @@ - FleshCult - CalmStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - SubGamemodesRule - CalmMeteorSwarmScheduler @@ -86,6 +90,7 @@ - Traitor - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -102,6 +107,7 @@ - FleshCult - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -120,6 +126,7 @@ - BasicStationEventScheduler - Traitor - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -138,6 +145,7 @@ - BasicStationEventScheduler - Nukeops - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -157,6 +165,7 @@ - Zombie - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Traitor - BasicRoundstartVariation - MeteorSwarmScheduler @@ -177,6 +186,7 @@ - Zombie - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Nukeops - BasicRoundstartVariation - MeteorSwarmScheduler @@ -195,6 +205,7 @@ - FleshCult - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Traitor - BasicRoundstartVariation - MeteorSwarmScheduler @@ -211,6 +222,7 @@ rules: - RampingStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Nukeops - BasicRoundstartVariation - MeteorSwarmScheduler @@ -227,6 +239,7 @@ showInVote: false rules: - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Changeling - SubGamemodesRule - BasicStationEventScheduler @@ -243,6 +256,7 @@ showInVote: false rules: - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Changeling - Traitor - SubGamemodesRule @@ -263,6 +277,7 @@ - ExtendedThief - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -280,6 +295,7 @@ - Traitor - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation - MeteorSwarmScheduler @@ -296,6 +312,7 @@ rules: - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BasicRoundstartVariation # Oh my god. - KesslerSyndromeScheduler @@ -315,6 +332,7 @@ rules: - CalmStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - CalmMeteorSwarmScheduler - BasicRoundstartVariation @@ -329,6 +347,7 @@ - BabelTower - CalmStationEventScheduler - WageScheduler + - PsiScheduler #backmen: psi - CalmMeteorSwarmScheduler - BasicRoundstartVariation # - SpaceTrafficControlEventScheduler diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 86d142793e1..021b9f55653 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -9,6 +9,7 @@ - MeteorSwarmScheduler - RampingStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi # - SpaceTrafficControlEventScheduler # - SpaceTrafficControlFriendlyEventScheduler - BasicRoundstartVariation @@ -24,6 +25,7 @@ description: kessler-syndrome-description rules: - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - KesslerSyndromeScheduler - RampingStationEventScheduler # - SpaceTrafficControlEventScheduler @@ -39,6 +41,7 @@ rules: # start-backmen - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - VampiresGameRule # backmen: vampire - FleshCult # backmen: flesh cult - ExtendedThief # backmen: extended-thief @@ -66,6 +69,7 @@ rules: # start-backmen - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - BlobGameMode - VampiresGameRule - FleshCult @@ -96,6 +100,7 @@ rules: - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - MeteorSwarmScheduler # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation @@ -112,6 +117,7 @@ - SpaceTrafficControlFriendlyEventScheduler - BasicRoundstartVariation - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - type: gamePreset id: Secret @@ -134,6 +140,7 @@ rules: - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - MeteorSwarmScheduler # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation @@ -147,6 +154,7 @@ description: secret-description rules: - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - SpaceTrafficControlFriendlyEventScheduler - BasicRoundstartVariation @@ -174,6 +182,7 @@ - SubGamemodesRule - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - MeteorSwarmScheduler # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation @@ -205,6 +214,7 @@ - SubGamemodesRule - CalmStationEventScheduler #backmen: calm-scheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - CalmMeteorSwarmScheduler #backmen: calm-scheduler # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation @@ -226,6 +236,7 @@ # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - type: gamePreset id: Zombie @@ -242,6 +253,7 @@ - Zombie - BasicStationEventScheduler - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - MeteorSwarmScheduler # - SpaceTrafficControlEventScheduler - BasicRoundstartVariation @@ -257,6 +269,7 @@ showInVote: false rules: - WageScheduler #backmen: currency + - PsiScheduler #backmen: psi - Zombie - BasicStationEventScheduler - KesslerSyndromeScheduler