From 2ca3935b16520d18bededd504e227fd31e9082c0 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Sat, 9 Nov 2024 16:24:10 -0500 Subject: [PATCH 01/11] Check for schedulers NextEventComponent --- .../StationEvents/BasicStationEventSchedulerSystem.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index bdc9a47e18..a1f0be3f5c 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -6,6 +6,7 @@ using Content.Server.StationEvents.Components; using Content.Shared.Administration; using Content.Shared.EntityTable; using Content.Shared.GameTicking.Components; +using Content.Shared.StationEvents; // DeltaV using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -56,6 +57,14 @@ namespace Content.Server.StationEvents eventScheduler.TimeUntilNextEvent -= frameTime; continue; } + NextEventComponent? nextEvent = null; + + // DeltaV events using NextEventComponent + if (Resolve(uid, ref nextEvent, false)) + { + // TODO: handle using NextEventComponent + } + // DeltaV end events using NextEventComponent _event.RunRandomEvent(eventScheduler.ScheduledGameRules); ResetTimer(eventScheduler); @@ -142,7 +151,7 @@ namespace Content.Server.StationEvents } } - return occurrences.Select(p => (p.Key, (float) p.Value)).OrderByDescending(p => p.Item2); + return occurrences.Select(p => (p.Key, (float)p.Value)).OrderByDescending(p => p.Item2); } [CommandImplementation("lsprob")] From 3247967bfac9d720266d7e726939a36ff1e8a96e Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Sat, 9 Nov 2024 18:48:43 -0500 Subject: [PATCH 02/11] Seperate gernateing event to its own method --- .../StationEvents/EventManagerSystem.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index cde25d2762..6d44bfb19a 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -58,27 +58,39 @@ public sealed class EventManagerSystem : EntitySystem /// public void RunRandomEvent(EntityTableSelector limitedEventsTable) { + if(TryGenerateRandomEvent(limitedEventsTable, out string? randomLimitedEvent) && randomLimitedEvent != null) // DeltaV seperated into own method + GameTicker.AddGameRule(randomLimitedEvent); + } + + // DeltaV seperate event generation method + public bool TryGenerateRandomEvent(EntityTableSelector limitedEventsTable, out string? randomLimitedEvent) + { + randomLimitedEvent = null; + // Snippet from upstreams RunRandomEvent if (!TryBuildLimitedEvents(limitedEventsTable, out var limitedEvents)) { Log.Warning("Provided event table could not build dict!"); - return; + return false; } - var randomLimitedEvent = FindEvent(limitedEvents); // this picks the event, It might be better to use the GetSpawns to do it, but that will be a major rebalancing fuck. + randomLimitedEvent = FindEvent(limitedEvents); // this picks the event, It might be better to use the GetSpawns to do it, but that will be a major rebalancing fuck. + // DeltaV - randomLimitedEvent declared by enclosing method if (randomLimitedEvent == null) { Log.Warning("The selected random event is null!"); - return; + return false; } if (!_prototype.TryIndex(randomLimitedEvent, out _)) { Log.Warning("A requested event is not available!"); - return; + return false; } + // End snippet from upstreams RunRandomEvent - GameTicker.AddGameRule(randomLimitedEvent); + return true; } + // DeltaV end seperate event generation method /// /// Returns true if the provided EntityTableSelector gives at least one prototype with a StationEvent comp. From ddbbda5a63ea1fa325d7d7f82d3cc7d30d624113 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Mon, 11 Nov 2024 18:17:40 -0500 Subject: [PATCH 03/11] Add NextEventSystem and use in BasicStationEventSchedulerSystem --- .../BasicStationEventSchedulerSystem.cs | 19 +++++++++++++++---- .../StationEvents/NextEventComponent.cs | 8 ++++---- .../DeltaV/StationEvents/NextEventSystem.cs | 17 +++++++++++++++++ .../DeltaV/GameRules/glimmer_events.yml | 1 + Resources/Prototypes/GameRules/roundstart.yml | 3 +++ 5 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 Content.Shared/DeltaV/StationEvents/NextEventSystem.cs diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index a1f0be3f5c..4f69a708e5 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -6,10 +6,11 @@ using Content.Server.StationEvents.Components; using Content.Shared.Administration; using Content.Shared.EntityTable; using Content.Shared.GameTicking.Components; -using Content.Shared.StationEvents; // DeltaV +using Content.Shared.DeltaV.StationEvents; // DeltaV using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Robust.Shared.Timing; // DeltaV using Robust.Shared.Toolshed; using Robust.Shared.Utility; @@ -22,8 +23,10 @@ namespace Content.Server.StationEvents [UsedImplicitly] public sealed class BasicStationEventSchedulerSystem : GameRuleSystem { + [Dependency] private readonly IGameTiming _timing = default!; // DeltaV [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EventManagerSystem _event = default!; + [Dependency] private readonly NextEventSystem _next = default!; // DeltaV protected override void Started(EntityUid uid, BasicStationEventSchedulerComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) @@ -57,12 +60,20 @@ namespace Content.Server.StationEvents eventScheduler.TimeUntilNextEvent -= frameTime; continue; } - NextEventComponent? nextEvent = null; + NextEventComponent? nextEventComponent = null; // DeltaV events using NextEventComponent - if (Resolve(uid, ref nextEvent, false)) + if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. { - // TODO: handle using NextEventComponent + if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent) || generatedEvent == null) + continue; + // Cycle the stashed event with the new generated event and time. + string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent); + if (storedEvent == null || storedEvent == string.Empty) //If there was no stored event don't try to run it. + continue; + GameTicker.AddGameRule(storedEvent); + ResetTimer(eventScheduler); + continue; } // DeltaV end events using NextEventComponent diff --git a/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs b/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs index f43b2329e6..172745ad3c 100644 --- a/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs +++ b/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs @@ -1,19 +1,19 @@ using Robust.Shared.Prototypes; -namespace Content.Shared.StationEvents; +namespace Content.Shared.DeltaV.StationEvents; -[RegisterComponent] +[RegisterComponent, Access(typeof(NextEventSystem))] public sealed partial class NextEventComponent : Component { /// /// Id of the next event that will be run by EventManagerSystem. /// [DataField] - public EntProtoId NextEventId { get; private set; } = string.Empty; + public EntProtoId NextEventId { get; set; } = string.Empty; /// /// Round time of the scheduler's next station event. /// [DataField] - public float TimeOfNextEvent; + public float NextEventTime; } diff --git a/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs b/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs new file mode 100644 index 0000000000..5fdad15457 --- /dev/null +++ b/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.DeltaV.StationEvents; + +public sealed partial class NextEventSystem : EntitySystem +{ + /// + /// Updates the NextEventComponent with the provided id and time and returns the previously stored id. + /// + public EntProtoId UpdateNextEvent(NextEventComponent component, EntProtoId newEventId, float newEventTime) + { + EntProtoId oldEventId = component.NextEventId; // Store components current NextEventId for return + component.NextEventId = newEventId; + component.NextEventTime = newEventTime; + return oldEventId; + } +} diff --git a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml index dc940422f8..2d972f9809 100644 --- a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml @@ -17,6 +17,7 @@ parent: BaseGameRule id: GlimmerEventScheduler components: + - type: NextEvent - type: BasicStationEventScheduler minMaxEventTiming: min: 300 diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 8b72770b64..688b399d11 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -297,6 +297,7 @@ id: BasicStationEventScheduler parent: BaseGameRule components: + - type: NextEvent # Deltav - type: BasicStationEventScheduler minMaxEventTiming: # DeltaV min: 300 # DeltaV - 5 mins, was 3 @@ -318,6 +319,7 @@ id: SpaceTrafficControlEventScheduler # iff we make a selector for EntityTables that can respect StationEventComp restrictions, or somehow impliment them otherwise in said tables, parent: BaseGameRule # we can remerge this with the other schedulers, but it will silently fail due to that limitation without a separate scheduler to balance atm. components: + - type: NextEvent # Deltav - type: BasicStationEventScheduler minimumTimeUntilFirstEvent: 2700 # 45 mins #shows up like half way through shift. minMaxEventTiming: @@ -330,6 +332,7 @@ id: SpaceTrafficControlFriendlyEventScheduler parent: BaseGameRule components: + - type: NextEvent # Deltav - type: BasicStationEventScheduler minimumTimeUntilFirstEvent: 1200 # 20 mins minMaxEventTiming: From aa6cf42cd4a03ac91e4f7d3238dcc80f87f9f468 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Mon, 11 Nov 2024 19:54:57 -0500 Subject: [PATCH 04/11] Format code --- .../StationEvents/BasicStationEventSchedulerSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index 4f69a708e5..7677172ece 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -60,9 +60,10 @@ namespace Content.Server.StationEvents eventScheduler.TimeUntilNextEvent -= frameTime; continue; } - NextEventComponent? nextEventComponent = null; // DeltaV events using NextEventComponent + NextEventComponent? nextEventComponent = null; + if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. { if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent) || generatedEvent == null) From 4c857ff5c67c2e4f1a94a27abd982f2fee2d0b67 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Mon, 11 Nov 2024 21:32:46 -0500 Subject: [PATCH 05/11] Add nextEvent time perdiction --- .../BasicStationEventSchedulerSystem.cs | 5 +- .../StationEvents/EventManagerSystem.cs | 57 ++++++++++++++----- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index 7677172ece..8eb3221875 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -66,7 +66,10 @@ namespace Content.Server.StationEvents if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. { - if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent) || generatedEvent == null) + if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, + out string? generatedEvent, + (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent) + || generatedEvent == null) continue; // Cycle the stashed event with the new generated event and time. string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent); diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 6d44bfb19a..da26a46500 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -58,16 +58,23 @@ public sealed class EventManagerSystem : EntitySystem /// public void RunRandomEvent(EntityTableSelector limitedEventsTable) { - if(TryGenerateRandomEvent(limitedEventsTable, out string? randomLimitedEvent) && randomLimitedEvent != null) // DeltaV seperated into own method + if(TryGenerateRandomEvent(limitedEventsTable, out string? randomLimitedEvent) && randomLimitedEvent != null) // DeltaV - seperated into own method GameTicker.AddGameRule(randomLimitedEvent); } - // DeltaV seperate event generation method + // DeltaV - overloaded for backwards compatiblity public bool TryGenerateRandomEvent(EntityTableSelector limitedEventsTable, out string? randomLimitedEvent) + { + return TryGenerateRandomEvent(limitedEventsTable, out randomLimitedEvent, null); + } + // DeltaV - end overloaded for backwards compatiblity + + // DeltaV - seperate event generation method + public bool TryGenerateRandomEvent(EntityTableSelector limitedEventsTable, out string? randomLimitedEvent, float? eventRunTime) // Event time checks compared to eventRunTime + // unless its null in which case current time is used { randomLimitedEvent = null; - // Snippet from upstreams RunRandomEvent - if (!TryBuildLimitedEvents(limitedEventsTable, out var limitedEvents)) + if (!TryBuildLimitedEvents(limitedEventsTable, out var limitedEvents, eventRunTime)) { Log.Warning("Provided event table could not build dict!"); return false; @@ -86,21 +93,27 @@ public sealed class EventManagerSystem : EntitySystem Log.Warning("A requested event is not available!"); return false; } - // End snippet from upstreams RunRandomEvent return true; } - // DeltaV end seperate event generation method + // DeltaV - end seperate event generation method + + // DeltaV - overloaded for backwards compatiblity + public bool TryBuildLimitedEvents(EntityTableSelector limitedEventsTable, out Dictionary limitedEvents) + { + return TryBuildLimitedEvents(limitedEventsTable, out limitedEvents, null); + } + // DeltaV - end overloaded for backwards compatiblity /// /// Returns true if the provided EntityTableSelector gives at least one prototype with a StationEvent comp. /// - public bool TryBuildLimitedEvents(EntityTableSelector limitedEventsTable, out Dictionary limitedEvents) + public bool TryBuildLimitedEvents(EntityTableSelector limitedEventsTable, out Dictionary limitedEvents, float? eventRunTime) // DeltaV - Add a time overide { limitedEvents = new Dictionary(); - var availableEvents = AvailableEvents(); // handles the player counts and individual event restrictions - + var availableEvents = AvailableEvents(false, null, null, eventRunTime); // handles the player counts and individual event restrictions + // DeltaV - Overide time for stashing events if (availableEvents.Count == 0) { Log.Warning("No events were available to run!"); @@ -186,6 +199,16 @@ public sealed class EventManagerSystem : EntitySystem return null; } + // DeltaV - Overloaded for backwards compatiblity + public Dictionary AvailableEvents( + bool ignoreEarliestStart = false, + int? playerCountOverride = null, + TimeSpan? currentTimeOverride = null) + { + return AvailableEvents(ignoreEarliestStart, playerCountOverride, currentTimeOverride, null); + } + // DeltaV - End overloaded for backwards compatiblity + /// /// Gets the events that have met their player count, time-until start, etc. /// @@ -195,14 +218,22 @@ public sealed class EventManagerSystem : EntitySystem public Dictionary AvailableEvents( bool ignoreEarliestStart = false, int? playerCountOverride = null, - TimeSpan? currentTimeOverride = null) + TimeSpan? currentTimeOverride = null, float? eventRunTime) { var playerCount = playerCountOverride ?? _playerManager.PlayerCount; // playerCount does a lock so we'll just keep the variable here - var currentTime = currentTimeOverride ?? (!ignoreEarliestStart - ? GameTicker.RoundDuration() - : TimeSpan.Zero); + var currentTime = currentTimeOverride ?? ( + + // DeltaV - eventRunTime check + eventRunTime.HasValue + ? TimeSpan.FromSeconds(eventRunTime.Value) + // DeltaV - end of eventRunTime check + + : (!ignoreEarliestStart + ? GameTicker.RoundDuration() + : TimeSpan.Zero) + ); var result = new Dictionary(); From 5d00ef62f7f06f39a4f7a4970539092dfcca7c02 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Mon, 11 Nov 2024 21:43:51 -0500 Subject: [PATCH 06/11] Use RunTime instead of float minutes --- .../BasicStationEventSchedulerSystem.cs | 6 ++---- .../StationEvents/EventManagerSystem.cs | 21 +++++++------------ .../StationEvents/NextEventComponent.cs | 2 +- .../DeltaV/StationEvents/NextEventSystem.cs | 2 +- .../DeltaV/GameRules/glimmer_events.yml | 1 - 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index 8eb3221875..d09ae2a335 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -66,10 +66,8 @@ namespace Content.Server.StationEvents if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. { - if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, - out string? generatedEvent, - (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent) - || generatedEvent == null) + TimeSpan nextEventTime = _timing.CurTime + TimeSpan.FromSeconds(eventScheduler.TimeUntilNextEvent); + if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent, nextEventTime) || generatedEvent == null) continue; // Cycle the stashed event with the new generated event and time. string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent); diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index da26a46500..4fa1a1297c 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -70,8 +70,8 @@ public sealed class EventManagerSystem : EntitySystem // DeltaV - end overloaded for backwards compatiblity // DeltaV - seperate event generation method - public bool TryGenerateRandomEvent(EntityTableSelector limitedEventsTable, out string? randomLimitedEvent, float? eventRunTime) // Event time checks compared to eventRunTime - // unless its null in which case current time is used + public bool TryGenerateRandomEvent(EntityTableSelector limitedEventsTable, out string? randomLimitedEvent, TimeSpan? eventRunTime) // Event time checks compared to eventRunTime + // unless its null in which case current time is used { randomLimitedEvent = null; if (!TryBuildLimitedEvents(limitedEventsTable, out var limitedEvents, eventRunTime)) @@ -108,7 +108,7 @@ public sealed class EventManagerSystem : EntitySystem /// /// Returns true if the provided EntityTableSelector gives at least one prototype with a StationEvent comp. /// - public bool TryBuildLimitedEvents(EntityTableSelector limitedEventsTable, out Dictionary limitedEvents, float? eventRunTime) // DeltaV - Add a time overide + public bool TryBuildLimitedEvents(EntityTableSelector limitedEventsTable, out Dictionary limitedEvents, TimeSpan? eventRunTime) // DeltaV - Add a time overide { limitedEvents = new Dictionary(); @@ -218,21 +218,16 @@ public sealed class EventManagerSystem : EntitySystem public Dictionary AvailableEvents( bool ignoreEarliestStart = false, int? playerCountOverride = null, - TimeSpan? currentTimeOverride = null, float? eventRunTime) + TimeSpan? currentTimeOverride = null, TimeSpan? eventRunTime) { var playerCount = playerCountOverride ?? _playerManager.PlayerCount; // playerCount does a lock so we'll just keep the variable here var currentTime = currentTimeOverride ?? ( - - // DeltaV - eventRunTime check - eventRunTime.HasValue - ? TimeSpan.FromSeconds(eventRunTime.Value) - // DeltaV - end of eventRunTime check - - : (!ignoreEarliestStart - ? GameTicker.RoundDuration() - : TimeSpan.Zero) + (!ignoreEarliestStart + ? eventRunTime // DeltaV - Use eventRunTime instead of RoundDuration if provided + ?? GameTicker.RoundDuration() + : TimeSpan.Zero) ); var result = new Dictionary(); diff --git a/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs b/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs index 172745ad3c..640e406a62 100644 --- a/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs +++ b/Content.Shared/DeltaV/StationEvents/NextEventComponent.cs @@ -15,5 +15,5 @@ public sealed partial class NextEventComponent : Component /// Round time of the scheduler's next station event. /// [DataField] - public float NextEventTime; + public TimeSpan NextEventTime; } diff --git a/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs b/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs index 5fdad15457..bd7c8d17e6 100644 --- a/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs +++ b/Content.Shared/DeltaV/StationEvents/NextEventSystem.cs @@ -7,7 +7,7 @@ public sealed partial class NextEventSystem : EntitySystem /// /// Updates the NextEventComponent with the provided id and time and returns the previously stored id. /// - public EntProtoId UpdateNextEvent(NextEventComponent component, EntProtoId newEventId, float newEventTime) + public EntProtoId UpdateNextEvent(NextEventComponent component, EntProtoId newEventId, TimeSpan newEventTime) { EntProtoId oldEventId = component.NextEventId; // Store components current NextEventId for return component.NextEventId = newEventId; diff --git a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml index 2d972f9809..dc940422f8 100644 --- a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml @@ -17,7 +17,6 @@ parent: BaseGameRule id: GlimmerEventScheduler components: - - type: NextEvent - type: BasicStationEventScheduler minMaxEventTiming: min: 300 From 1495cb1ee4d59f0a223fd55fb5b26a5c46ccde18 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Mon, 11 Nov 2024 22:28:58 -0500 Subject: [PATCH 07/11] Bug fixes --- .../BasicStationEventSchedulerSystem.cs | 5 ++++- .../StationEvents/EventManagerSystem.cs | 16 +++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index d09ae2a335..d0bb94f886 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -68,9 +68,12 @@ namespace Content.Server.StationEvents { TimeSpan nextEventTime = _timing.CurTime + TimeSpan.FromSeconds(eventScheduler.TimeUntilNextEvent); if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent, nextEventTime) || generatedEvent == null) + { + ResetTimer(eventScheduler); continue; + } // Cycle the stashed event with the new generated event and time. - string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent); + string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, nextEventTime); if (storedEvent == null || storedEvent == string.Empty) //If there was no stored event don't try to run it. continue; GameTicker.AddGameRule(storedEvent); diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 4fa1a1297c..8ace51e388 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -112,7 +112,7 @@ public sealed class EventManagerSystem : EntitySystem { limitedEvents = new Dictionary(); - var availableEvents = AvailableEvents(false, null, null, eventRunTime); // handles the player counts and individual event restrictions + var availableEvents = AvailableEvents(eventRunTime); // handles the player counts and individual event restrictions // DeltaV - Overide time for stashing events if (availableEvents.Count == 0) { @@ -199,15 +199,15 @@ public sealed class EventManagerSystem : EntitySystem return null; } - // DeltaV - Overloaded for backwards compatiblity + // DeltaV - overloaded for backwards compatiblity public Dictionary AvailableEvents( bool ignoreEarliestStart = false, - int? playerCountOverride = null, + int? playerCountOverride = 100, TimeSpan? currentTimeOverride = null) { - return AvailableEvents(ignoreEarliestStart, playerCountOverride, currentTimeOverride, null); + return AvailableEvents(null, ignoreEarliestStart, playerCountOverride, currentTimeOverride); } - // DeltaV - End overloaded for backwards compatiblity + // DeltaV - end overloaded for backwards compatiblity /// /// Gets the events that have met their player count, time-until start, etc. @@ -216,9 +216,11 @@ public sealed class EventManagerSystem : EntitySystem /// Override for round time, if using this to simulate events rather than in an actual round. /// public Dictionary AvailableEvents( + TimeSpan? eventRunTime, bool ignoreEarliestStart = false, - int? playerCountOverride = null, - TimeSpan? currentTimeOverride = null, TimeSpan? eventRunTime) + int? playerCountOverride = 100, + TimeSpan? currentTimeOverride = null + ) { var playerCount = playerCountOverride ?? _playerManager.PlayerCount; From 84903f6e7e167c69b7ddd61331d319ea4177f523 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Tue, 12 Nov 2024 05:43:48 -0500 Subject: [PATCH 08/11] Add NextEvent to Ramping and Meteors --- .../StationEvents/EventManagerSystem.cs | 2 +- .../RampingStationEventSchedulerSystem.cs | 22 +++++++++++++++++++ .../Prototypes/GameRules/meteorswarms.yml | 4 ++++ Resources/Prototypes/GameRules/roundstart.yml | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 8ace51e388..513530ee13 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -113,7 +113,7 @@ public sealed class EventManagerSystem : EntitySystem limitedEvents = new Dictionary(); var availableEvents = AvailableEvents(eventRunTime); // handles the player counts and individual event restrictions - // DeltaV - Overide time for stashing events + // DeltaV - Overide time for stashing events if (availableEvents.Count == 0) { Log.Warning("No events were available to run!"); diff --git a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs index a5dbe102ca..27213874e7 100644 --- a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs @@ -1,16 +1,20 @@ using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; using Content.Server.StationEvents.Components; +using Content.Shared.DeltaV.StationEvents; using Content.Shared.GameTicking.Components; using Robust.Shared.Random; +using Robust.Shared.Timing; namespace Content.Server.StationEvents; public sealed class RampingStationEventSchedulerSystem : GameRuleSystem { + [Dependency] private readonly IGameTiming _timing = default!; // DeltaV [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EventManagerSystem _event = default!; [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly NextEventSystem _next = default!; // DeltaV /// /// Returns the ChaosModifier which increases as round time increases to a point. @@ -57,6 +61,24 @@ public sealed class RampingStationEventSchedulerSystem : GameRuleSystem Date: Tue, 12 Nov 2024 05:52:42 -0500 Subject: [PATCH 09/11] Fix timing on BasticStationEvents --- .../StationEvents/BasicStationEventSchedulerSystem.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index d0bb94f886..93e77aa5d0 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -66,18 +66,15 @@ namespace Content.Server.StationEvents if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. { + ResetTimer(eventScheduler); TimeSpan nextEventTime = _timing.CurTime + TimeSpan.FromSeconds(eventScheduler.TimeUntilNextEvent); if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent, nextEventTime) || generatedEvent == null) - { - ResetTimer(eventScheduler); continue; - } // Cycle the stashed event with the new generated event and time. string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, nextEventTime); if (storedEvent == null || storedEvent == string.Empty) //If there was no stored event don't try to run it. continue; GameTicker.AddGameRule(storedEvent); - ResetTimer(eventScheduler); continue; } // DeltaV end events using NextEventComponent From 36f45be10e6f327780e7f2892399686813fad2e9 Mon Sep 17 00:00:00 2001 From: SolStar2 Date: Tue, 12 Nov 2024 16:59:36 -0500 Subject: [PATCH 10/11] initialize NextEventComponent when created --- .../StationEvents/BasicStationEventSchedulerSystem.cs | 8 ++++++++ .../StationEvents/RampingStationEventSchedulerSystem.cs | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index 93e77aa5d0..59e3054c14 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -33,6 +33,14 @@ namespace Content.Server.StationEvents { // A little starting variance so schedulers dont all proc at once. component.TimeUntilNextEvent = RobustRandom.NextFloat(component.MinimumTimeUntilFirstEvent, component.MinimumTimeUntilFirstEvent + 120); + + // DeltaV - end init NextEventComp + NextEventComponent? nextEventComponent = null; + if (Resolve(uid, ref nextEventComponent, false) + && _event.TryGenerateRandomEvent(component.ScheduledGameRules, out string? firstEvent, TimeSpan.FromSeconds(component.TimeUntilNextEvent)) + && firstEvent != null) + _next.UpdateNextEvent(nextEventComponent, firstEvent, TimeSpan.FromSeconds(component.TimeUntilNextEvent)); + // DeltaV - end init NextEventComp } protected override void Ended(EntityUid uid, BasicStationEventSchedulerComponent component, GameRuleComponent gameRule, diff --git a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs index 27213874e7..8a119bd14d 100644 --- a/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/RampingStationEventSchedulerSystem.cs @@ -40,6 +40,14 @@ public sealed class RampingStationEventSchedulerSystem : GameRuleSystem Date: Tue, 12 Nov 2024 18:23:00 -0500 Subject: [PATCH 11/11] Revert "Merge branch 'seer' into stash-next-event" This reverts commit 656ca26173ff8cbd5237ec9b390b5cb658a49366, reversing changes made to 36f45be10e6f327780e7f2892399686813fad2e9. --- .../Psionics/TelegnosisPowerSystem.cs | 5 - .../Metempsychosis}/MetempsychosisTest.cs | 26 ++- Content.Server/Cloning/CloningSystem.cs | 111 +++++++++-- .../Commands/AnnounceCustomCommand.cs | 79 -------- .../DeltaV/Chapel/SacrificialAltarSystem.cs | 2 +- .../Cloning/CloningSystem.Metempsychosis.cs | 172 ------------------ .../Cloning/MetempsychosisKarmaComponent.cs | 11 -- .../Cloning/MetempsychoticMachineComponent.cs | 27 --- .../Thresholds/Behaviors/SpillBehavior.cs | 80 ++++---- .../EntitySystems/KitchenSpikeSystem.cs | 8 +- .../Abilities/TelegnosisPowerSystem.cs | 2 +- .../Cloning/MetempsychosisKarmaComponent.cs | 12 ++ .../Cloning/MetempsychoticMachineComponent.cs | 22 +++ .../Cloning/MetempsychoticMachineSystem.cs | 47 +++++ .../BasicStationEventSchedulerSystem.cs | 16 -- .../StationEvents/EventManagerSystem.cs | 1 - .../Telegnosis/SharedTelegnosisPowerSystem.cs | 19 -- .../Telegnosis/TelegnosisPowerComponent.cs | 4 +- .../TelegnosticProjectionComponent.cs | 10 +- Resources/Changelog/DeltaVChangelog.yml | 151 +++++++-------- Resources/Credits/GitHub.txt | 2 +- .../commands/announce-custom.ftl | 8 - .../ghost/roles/ghost-role-component.ftl | 9 +- .../en-US/deltav/research/technologies.ftl | 1 - .../VendingMachines/Inventories/theater.yml | 1 - .../DeltaV/Catalog/Fills/Crates/engine.yml | 45 ----- .../Entities/Clothing/Uniforms/jumpsuits.yml | 10 - .../Structures/Wallmounts/Signs/signs.yml | 10 +- .../DeltaV/GameRules/glimmer_events.yml | 1 - .../DeltaV/Recipes/Lathes/medical.yml | 17 -- .../DeltaV/Research/civilianservices.yml | 12 -- .../Service/vending_machine_restock.yml | 1 - .../Entities/Structures/Machines/lathe.yml | 6 - .../Structures/Machines/vending_machines.yml | 2 +- .../Nyanotrasen/Objectives/traitor.yml | 15 ++ .../Prototypes/Objectives/objectiveGroups.yml | 2 + Resources/Prototypes/Research/disciplines.yml | 20 +- .../DeltaV/Rules/GameRules/2_Metagaming.xml | 1 + .../RoleRules/C1_CommandSecurityJustice.xml | 2 +- .../DeltaV/Rules/RoleRules/C3_Antags.xml | 3 - .../equipped-INNERCLOTHING.png | Bin 1900 -> 0 bytes .../Jumpsuit/black_turtleneck.rsi/icon.png | Bin 519 -> 0 bytes .../black_turtleneck.rsi/inhand-left.png | Bin 579 -> 0 bytes .../black_turtleneck.rsi/inhand-right.png | Bin 598 -> 0 bytes .../Jumpsuit/black_turtleneck.rsi/meta.json | 30 --- .../rolled-equipped-INNERCLOTHING.png | Bin 1691 -> 0 bytes .../Wallmounts/signs.rsi/direction_aicore.png | Bin 450 -> 0 bytes .../Structures/Wallmounts/signs.rsi/meta.json | 4 - 48 files changed, 340 insertions(+), 667 deletions(-) delete mode 100644 Content.Client/Nyanotrasen/Abilities/Psionics/TelegnosisPowerSystem.cs rename Content.IntegrationTests/Tests/{DeltaV => Nyanotrasen/Metempsychosis}/MetempsychosisTest.cs (62%) delete mode 100644 Content.Server/DeltaV/Administration/Commands/AnnounceCustomCommand.cs delete mode 100644 Content.Server/DeltaV/Cloning/CloningSystem.Metempsychosis.cs delete mode 100644 Content.Server/DeltaV/Cloning/MetempsychosisKarmaComponent.cs delete mode 100644 Content.Server/DeltaV/Cloning/MetempsychoticMachineComponent.cs create mode 100644 Content.Server/Nyanotrasen/Cloning/MetempsychosisKarmaComponent.cs create mode 100644 Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineComponent.cs create mode 100644 Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineSystem.cs delete mode 100644 Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/SharedTelegnosisPowerSystem.cs delete mode 100644 Resources/Locale/en-US/deltav/administration/commands/announce-custom.ftl delete mode 100644 Resources/Prototypes/DeltaV/Catalog/Fills/Crates/engine.yml delete mode 100644 Resources/Prototypes/DeltaV/Research/civilianservices.yml delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/equipped-INNERCLOTHING.png delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/icon.png delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/inhand-left.png delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/inhand-right.png delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/meta.json delete mode 100644 Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/rolled-equipped-INNERCLOTHING.png delete mode 100644 Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_aicore.png diff --git a/Content.Client/Nyanotrasen/Abilities/Psionics/TelegnosisPowerSystem.cs b/Content.Client/Nyanotrasen/Abilities/Psionics/TelegnosisPowerSystem.cs deleted file mode 100644 index 8ddc15347c..0000000000 --- a/Content.Client/Nyanotrasen/Abilities/Psionics/TelegnosisPowerSystem.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Content.Shared.Abilities.Psionics; - -namespace Content.Client.Abilities.Psionics; - -public sealed class TelegnosisPowerSystem : SharedTelegnosisPowerSystem; diff --git a/Content.IntegrationTests/Tests/DeltaV/MetempsychosisTest.cs b/Content.IntegrationTests/Tests/Nyanotrasen/Metempsychosis/MetempsychosisTest.cs similarity index 62% rename from Content.IntegrationTests/Tests/DeltaV/MetempsychosisTest.cs rename to Content.IntegrationTests/Tests/Nyanotrasen/Metempsychosis/MetempsychosisTest.cs index 6b68ac3602..cd6a4b4c2b 100644 --- a/Content.IntegrationTests/Tests/DeltaV/MetempsychosisTest.cs +++ b/Content.IntegrationTests/Tests/Nyanotrasen/Metempsychosis/MetempsychosisTest.cs @@ -1,10 +1,12 @@ -using Content.Server.DeltaV.Cloning; +using Content.Server.Nyanotrasen.Cloning; using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Random; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.DeltaV; [TestFixture] +[TestOf(typeof(MetempsychoticMachineSystem))] public sealed class MetempsychosisTest { [Test] @@ -21,22 +23,18 @@ public sealed class MetempsychosisTest await server.WaitAssertion(() => { - prototypeManager.TryIndex(metemComponent.MetempsychoticHumanoidPool, + prototypeManager.TryIndex(metemComponent.MetempsychoticHumanoidPool, out var humanoidPool); - prototypeManager.TryIndex(metemComponent.MetempsychoticNonHumanoidPool, + prototypeManager.TryIndex(metemComponent.MetempsychoticNonHumanoidPool, out var nonHumanoidPool); - Assert.Multiple(() => - { - Assert.That(humanoidPool, Is.Not.Null, "MetempsychoticHumanoidPool is null!"); - Assert.That(nonHumanoidPool, Is.Not.Null, "MetempsychoticNonHumanoidPool is null!"); - Assert.That(humanoidPool.Weights, - Is.Not.Empty, - "MetempsychoticHumanoidPool has no valid prototypes!"); - Assert.That(nonHumanoidPool.Weights, - Is.Not.Empty, - "MetempsychoticNonHumanoidPool has no valid prototypes!"); - }); + Assert.That(humanoidPool, Is.Not.Null, "MetempsychoticHumanoidPool is null!"); + Assert.That(nonHumanoidPool, Is.Not.Null, "MetempsychoticNonHumanoidPool is null!"); + + Assert.That(humanoidPool.Weights, Is.Not.Empty, + "MetempsychoticHumanoidPool has no valid prototypes!"); + Assert.That(nonHumanoidPool.Weights, Is.Not.Empty, + "MetempsychoticNonHumanoidPool has no valid prototypes!"); foreach (var key in humanoidPool.Weights.Keys) { diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index ab593b607c..0eafad3586 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -9,8 +9,6 @@ using Content.Server.Jobs; using Content.Server.Materials; using Content.Server.Popups; using Content.Server.Power.EntitySystems; -using Content.Server.Psionics; // DeltaV -using Content.Server.Traits.Assorted; // DeltaV using Content.Shared.Atmos; using Content.Shared.CCVar; using Content.Shared.Chemistry.Components; @@ -35,10 +33,26 @@ using Robust.Shared.Containers; using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Content.Server.Traits.Assorted; //Nyano - Summary: allows the potential psionic ability to be written to the character. +using Content.Server.Psionics; //DeltaV needed for Psionic Systems +using Content.Shared.Speech; //DeltaV Start Metem Usings +using Content.Shared.Tag; +using Content.Shared.Preferences; +using Content.Shared.Emoting; +using Content.Server.Speech.Components; +using Content.Server.StationEvents.Components; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Nyanotrasen.Cloning; +using Content.Shared.Humanoid.Prototypes; +using Robust.Shared.GameObjects.Components.Localization; //DeltaV End Metem Usings +using Content.Server.EntityList; +using Content.Shared.SSDIndicator; +using Content.Shared.Damage.ForceSay; +using Content.Server.Polymorph.Components; namespace Content.Server.Cloning { - public sealed partial class CloningSystem : EntitySystem // DeltaV - Set to partial, see CloningSystem.Metempsychosis.cs + public sealed class CloningSystem : EntitySystem { [Dependency] private readonly DeviceLinkSystem _signalSystem = default!; [Dependency] private readonly IPlayerManager _playerManager = null!; @@ -62,6 +76,8 @@ namespace Content.Server.Cloning [Dependency] private readonly SharedMindSystem _mindSystem = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; + [Dependency] private readonly MetempsychoticMachineSystem _metem = default!; //DeltaV + [Dependency] private readonly TagSystem _tag = default!; //DeltaV public readonly Dictionary ClonesWaitingForMind = new(); public const float EasyModeCloningCost = 0.7f; @@ -142,10 +158,6 @@ namespace Content.Server.Cloning if (!Resolve(uid, ref clonePod)) return false; - // DeltaV - This method should use Entity pod instead - // But I don't want to completely mangle it so we do this here - var podEnt = new Entity(uid, clonePod); - if (HasComp(uid)) return false; @@ -232,13 +244,13 @@ namespace Content.Server.Cloning AddComp(uid); return true; } + // End Nyano-code. } // end of genetic damage checks - // DeltaV - Replaces CloneAppearance with Metem/Clone via FetchAndSpawnMob - var mob = FetchAndSpawnMob(podEnt, pref, speciesPrototype, humanoid, bodyToClone, karmaBonus); + var mob = FetchAndSpawnMob(clonePod, pref, speciesPrototype, humanoid, bodyToClone, karmaBonus); //DeltaV Replaces CloneAppearance with Metem/Clone via FetchAndSpawnMob - // Nyano - Summary: adds the potential psionic trait to the reanimated mob. + ///Nyano - Summary: adds the potential psionic trait to the reanimated mob. EnsureComp(mob); var ev = new CloningEvent(bodyToClone, mob); @@ -336,7 +348,6 @@ namespace Content.Server.Cloning var transform = Transform(uid); var indices = _transformSystem.GetGridTilePositionOrDefault((uid, transform)); var tileMix = _atmosphereSystem.GetTileMixture(transform.GridUid, null, indices, true); - if (HasComp(uid)) { _audio.PlayPvs(clonePod.ScreamSound, uid); @@ -364,6 +375,84 @@ namespace Content.Server.Cloning RemCompDeferred(uid); } + /// + /// Start Nyano Code: Handles fetching the mob and any appearance stuff... + /// + private EntityUid FetchAndSpawnMob(CloningPodComponent clonePod, HumanoidCharacterProfile pref, SpeciesPrototype speciesPrototype, HumanoidAppearanceComponent humanoid, EntityUid bodyToClone, float karmaBonus) + { + List sexes = new(); + bool switchingSpecies = false; + bool applyKarma = false; + var toSpawn = speciesPrototype.Prototype; + TryComp(bodyToClone, out var oldKarma); + + if (TryComp(clonePod.Owner, out var metem)) + { + toSpawn = _metem.GetSpawnEntity(clonePod.Owner, karmaBonus, metem, speciesPrototype, out var newSpecies, oldKarma?.Score); + applyKarma = true; + + if (newSpecies != null) + { + sexes = newSpecies.Sexes; + + if (speciesPrototype.ID != newSpecies.ID) + switchingSpecies = true; + + speciesPrototype = newSpecies; + } + } + + var mob = Spawn(toSpawn, _transformSystem.GetMapCoordinates(clonePod.Owner)); + if (TryComp(mob, out var newHumanoid)) + { + if (switchingSpecies || HasComp(bodyToClone)) + { + pref = HumanoidCharacterProfile.RandomWithSpecies(newHumanoid.Species); + if (sexes.Contains(humanoid.Sex)) + pref = pref.WithSex(humanoid.Sex); + + pref = pref.WithGender(humanoid.Gender); + pref = pref.WithAge(humanoid.Age); + + } + _humanoidSystem.LoadProfile(mob, pref); + } + + if (applyKarma) + { + var karma = EnsureComp(mob); + karma.Score++; + if (oldKarma != null) + karma.Score += oldKarma.Score; + } + + var ev = new CloningEvent(bodyToClone, mob); + RaiseLocalEvent(bodyToClone, ref ev); + + if (!ev.NameHandled) + _metaSystem.SetEntityName(mob, MetaData(bodyToClone).EntityName); + + var grammar = EnsureComp(mob); + grammar.ProperNoun = true; + grammar.Gender = humanoid.Gender; + Dirty(mob, grammar); + + EnsureComp(mob); + EnsureComp(mob); + EnsureComp(mob); + EnsureComp(mob); + EnsureComp(mob); + EnsureComp(mob); + RemComp(mob); + RemComp(mob); + RemComp(mob); + RemComp(mob); + + _tag.AddTag(mob, "DoorBumpOpener"); + + return mob; + } + //End Nyano Code public void Reset(RoundRestartCleanupEvent ev) { ClonesWaitingForMind.Clear(); diff --git a/Content.Server/DeltaV/Administration/Commands/AnnounceCustomCommand.cs b/Content.Server/DeltaV/Administration/Commands/AnnounceCustomCommand.cs deleted file mode 100644 index f0429105b1..0000000000 --- a/Content.Server/DeltaV/Administration/Commands/AnnounceCustomCommand.cs +++ /dev/null @@ -1,79 +0,0 @@ -using Content.Server.Chat.Systems; -using Content.Shared.Administration; -using Robust.Shared.Audio; -using Robust.Shared.Console; -using Robust.Shared.ContentPack; -using Robust.Shared.Prototypes; - -namespace Content.Server.Administration.Commands; - -[AdminCommand(AdminFlags.Fun)] -public sealed class AnnounceCustomCommand : IConsoleCommand -{ - [Dependency] private readonly IPrototypeManager _protoManager = default!; - [Dependency] private readonly IResourceManager _res = default!; - - public string Command => "announcecustom"; - public string Description => Loc.GetString("cmd-announcecustom-desc"); - public string Help => Loc.GetString("cmd-announcecustom-help", ("command", Command)); - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - var chat = IoCManager.Resolve().GetEntitySystem(); - - switch (args.Length) - { - case 0: - shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); - return; - case > 4: - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - var message = args[0]; - var sender = "Central Command"; - var color = Color.Gold; - var sound = new SoundPathSpecifier("/Audio/Announcements/announce.ogg"); - - // Optional sender argument - if (args.Length >= 2) - sender = args[1]; - - // Optional color argument - if (args.Length >= 3) - { - try - { - color = Color.FromHex(args[2]); - } - catch - { - shell.WriteError(Loc.GetString("shell-invalid-color-hex")); - return; - } - } - - // Optional sound argument - if (args.Length >= 4) - sound = new SoundPathSpecifier(args[3]); - - chat.DispatchGlobalAnnouncement(message, sender, true, sound, color); - shell.WriteLine(Loc.GetString("shell-command-success")); - } - - public CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - return args.Length switch - { - 1 => CompletionResult.FromHint(Loc.GetString("cmd-announcecustom-arg-message")), - 2 => CompletionResult.FromHint(Loc.GetString("shell-argument-username-optional-hint")), - 3 => CompletionResult.FromHint(Loc.GetString("cmd-announcecustom-arg-color")), - 4 => CompletionResult.FromHintOptions( - CompletionHelper.AudioFilePath(args[3], _protoManager, _res), - Loc.GetString("cmd-announcecustom-arg-sound") - ), - _ => CompletionResult.Empty - }; - } -} diff --git a/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs b/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs index 8d28297cf6..a903d4124d 100644 --- a/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs +++ b/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Bible.Components; -using Content.Server.DeltaV.Cloning; +using Content.Server.Nyanotrasen.Cloning; using Content.Shared.Abilities.Psionics; using Content.Shared.Administration.Logs; using Content.Shared.Body.Components; diff --git a/Content.Server/DeltaV/Cloning/CloningSystem.Metempsychosis.cs b/Content.Server/DeltaV/Cloning/CloningSystem.Metempsychosis.cs deleted file mode 100644 index d69d4d9ef9..0000000000 --- a/Content.Server/DeltaV/Cloning/CloningSystem.Metempsychosis.cs +++ /dev/null @@ -1,172 +0,0 @@ -using Content.Server.DeltaV.Cloning; -using Content.Shared.Humanoid; -using Content.Shared.Humanoid.Prototypes; -using Content.Shared.Preferences; -using Content.Shared.Speech; -using Content.Shared.Emoting; -using Content.Shared.Damage.ForceSay; -using Content.Shared.SSDIndicator; -using Content.Server.Speech.Components; -using Content.Server.Ghost.Roles.Components; -using Content.Server.StationEvents.Components; -using Content.Server.Psionics; -using Robust.Shared.Random; -using Content.Shared.Mind.Components; -using Content.Shared.Tag; -using Content.Shared.Cloning; -using Content.Shared.Random.Helpers; -using Robust.Shared.GameObjects.Components.Localization; - -namespace Content.Server.Cloning; - -public sealed partial class CloningSystem -{ - [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly GrammarSystem _grammar = default!; - - /// - /// Gets the entity prototype to spawn for a clone based on karma and chance calculations. - /// - private string GetSpawnEntity(Entity ent, float karmaBonus, SpeciesPrototype oldSpecies, out SpeciesPrototype? species, int karma = 0) - { - // First time being cloned - return original species - if (karma == 0) - { - species = oldSpecies; - return oldSpecies.Prototype; - } - - var chance = ent.Comp.HumanoidBaseChance + karmaBonus; - chance -= (1 - ent.Comp.HumanoidBaseChance) * karma; - - // Perfect clone chance - if (chance > 1 && _robustRandom.Prob(chance - 1)) - { - species = oldSpecies; - return oldSpecies.Prototype; - } - - // Roll for humanoid vs non-humanoid - chance = Math.Clamp(chance, 0, 1); - if (_robustRandom.Prob(chance)) - { - if (_prototype.TryIndex(ent.Comp.MetempsychoticHumanoidPool, out var humanoidPool)) - { - var protoId = humanoidPool.Pick(); - if (_prototype.TryIndex(protoId, out var speciesPrototype)) - { - species = speciesPrototype; - return speciesPrototype.Prototype; - } - } - } - else if (_prototype.TryIndex(ent.Comp.MetempsychoticNonHumanoidPool, out var nonHumanoidPool)) - { - // For non-humanoids, return the entity prototype directly - species = null; - return nonHumanoidPool.Pick(); - } - - // Fallback to original species if prototype indexing fails - Log.Error("Failed to get valid clone type - falling back to original species"); - species = oldSpecies; - return oldSpecies.Prototype; - } - - /// - /// Handles fetching the mob and managing appearance for cloning with metempsychosis mechanics - /// - private EntityUid FetchAndSpawnMob( - Entity pod, - HumanoidCharacterProfile pref, - SpeciesPrototype speciesPrototype, - HumanoidAppearanceComponent humanoid, - EntityUid bodyToClone, - float karmaBonus) - { - List sexes = []; - var switchingSpecies = false; - var applyKarma = false; - var toSpawn = speciesPrototype.Prototype; - - // Get existing karma score or start at 0 - var karmaScore = 0; - if (TryComp(bodyToClone, out var oldKarma)) - { - karmaScore = oldKarma.Score; - } - - if (TryComp(pod.Owner, out var metem)) - { - var metemEntity = new Entity(pod.Owner, metem); - toSpawn = GetSpawnEntity(metemEntity, karmaBonus, speciesPrototype, out var newSpecies, karmaScore); - applyKarma = true; - - if (newSpecies != null) - { - sexes = newSpecies.Sexes; - speciesPrototype = newSpecies; - - if (speciesPrototype.ID != newSpecies.ID) - switchingSpecies = true; - } - } - - var mob = Spawn(toSpawn, _transformSystem.GetMapCoordinates(pod.Owner)); - - // Only try to handle humanoid appearance if we have a humanoid component - if (TryComp(mob, out var newHumanoid)) - { - if (switchingSpecies || HasComp(bodyToClone)) - { - pref = HumanoidCharacterProfile.RandomWithSpecies(newHumanoid.Species); - if (sexes.Contains(humanoid.Sex)) - pref = pref.WithSex(humanoid.Sex); - - pref = pref.WithGender(humanoid.Gender); - pref = pref.WithAge(humanoid.Age); - } - - _humanoidSystem.LoadProfile(mob, pref); - } - - if (applyKarma) - { - var karma = EnsureComp(mob); - karma.Score = karmaScore + 1; // Increment karma score - } - - var ev = new CloningEvent(bodyToClone, mob); - RaiseLocalEvent(bodyToClone, ref ev); - - if (!ev.NameHandled) - _metaSystem.SetEntityName(mob, MetaData(bodyToClone).EntityName); - - var grammar = EnsureComp(mob); - var grammarEnt = new Entity(mob, grammar); - _grammar.SetProperNoun(grammarEnt, true); - _grammar.SetGender(grammarEnt, humanoid.Gender); - Dirty(mob, grammar); - - SetupBasicComponents(mob); - - return mob; - } - - // I hate this - private void SetupBasicComponents(EntityUid mob) - { - EnsureComp(mob); - EnsureComp(mob); - EnsureComp(mob); - EnsureComp(mob); - EnsureComp(mob); - EnsureComp(mob); - RemComp(mob); - RemComp(mob); - RemComp(mob); - RemComp(mob); - - _tag.AddTag(mob, "DoorBumpOpener"); - } -} diff --git a/Content.Server/DeltaV/Cloning/MetempsychosisKarmaComponent.cs b/Content.Server/DeltaV/Cloning/MetempsychosisKarmaComponent.cs deleted file mode 100644 index a9e7ff8244..0000000000 --- a/Content.Server/DeltaV/Cloning/MetempsychosisKarmaComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Server.DeltaV.Cloning; - -/// -/// This tracks how many times you have already been cloned and lowers your chance of getting a humanoid each time. -/// -[RegisterComponent] -public sealed partial class MetempsychosisKarmaComponent : Component -{ - [DataField] - public int Score; -} diff --git a/Content.Server/DeltaV/Cloning/MetempsychoticMachineComponent.cs b/Content.Server/DeltaV/Cloning/MetempsychoticMachineComponent.cs deleted file mode 100644 index d913f2d209..0000000000 --- a/Content.Server/DeltaV/Cloning/MetempsychoticMachineComponent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Shared.Random; -using Robust.Shared.Prototypes; - -namespace Content.Server.DeltaV.Cloning; - -[RegisterComponent] -public sealed partial class MetempsychoticMachineComponent : Component -{ - /// - /// Base probability of remaining humanoid during cloning. Higher karma reduces this chance. - /// - [DataField] - public float HumanoidBaseChance = 0.75f; - - /// - /// Species prototypes pool to use for humanoids. - /// - [DataField] - public ProtoId MetempsychoticHumanoidPool = "MetempsychoticHumanoidPool"; - - /// - /// Entitiy prototypes pool to use for non-humanoids. - /// - [DataField] - public ProtoId MetempsychoticNonHumanoidPool = "MetempsychoticNonhumanoidPool"; -} - diff --git a/Content.Server/Destructible/Thresholds/Behaviors/SpillBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/SpillBehavior.cs index d45fe707ab..ff050ce2cd 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/SpillBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/SpillBehavior.cs @@ -1,60 +1,42 @@ -using Content.Server.Fluids.EntitySystems; -using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Content.Server.Fluids.EntitySystems; using Content.Shared.Fluids.Components; using JetBrains.Annotations; -namespace Content.Server.Destructible.Thresholds.Behaviors; - -[UsedImplicitly] -[DataDefinition] -public sealed partial class SpillBehavior : IThresholdBehavior +namespace Content.Server.Destructible.Thresholds.Behaviors { - /// - /// Optional fallback solution name if SpillableComponent is not present. - /// - [DataField] - public string? Solution; - - /// - /// When triggered, spills the entity's solution onto the ground. - /// Will first try to use the solution from a SpillableComponent if present, - /// otherwise falls back to the solution specified in the behavior's data fields. - /// The solution is properly drained/split before spilling to prevent double-spilling with other behaviors. - /// - /// Entity whose solution will be spilled - /// System calling this behavior - /// Optional entity that caused this behavior to trigger - public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null) + [UsedImplicitly] + [DataDefinition] + public sealed partial class SpillBehavior : IThresholdBehavior { - var solutionContainerSystem = system.EntityManager.System(); - var spillableSystem = system.EntityManager.System(); - var coordinates = system.EntityManager.GetComponent(owner).Coordinates; + [DataField] + public string? Solution; - Solution targetSolution; - - // First try to get solution from SpillableComponent - if (system.EntityManager.TryGetComponent(owner, out SpillableComponent? spillableComponent) && - solutionContainerSystem.TryGetSolution(owner, spillableComponent.SolutionName, out var solution, out var compSolution)) + /// + /// If there is a SpillableComponent on EntityUidowner use it to create a puddle/smear. + /// Or whatever solution is specified in the behavior itself. + /// If none are available do nothing. + /// + /// Entity on which behavior is executed + /// system calling the behavior + /// + public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null) { - // If entity is drainable, drain the solution. Otherwise just split it. - // Both methods ensure the solution is properly removed. - targetSolution = system.EntityManager.HasComponent(owner) - ? solutionContainerSystem.Drain((owner, system.EntityManager.GetComponent(owner)), solution.Value, compSolution.Volume) - : compSolution.SplitSolution(compSolution.Volume); - } - // Fallback to solution specified in behavior data - else if (Solution != null && - solutionContainerSystem.TryGetSolution(owner, Solution, out var solutionEnt, out var behaviorSolution)) - { - targetSolution = system.EntityManager.HasComponent(owner) - ? solutionContainerSystem.Drain((owner, system.EntityManager.GetComponent(owner)), solutionEnt.Value, behaviorSolution.Volume) - : behaviorSolution.SplitSolution(behaviorSolution.Volume); - } - else - return; + var solutionContainerSystem = system.EntityManager.System(); + var spillableSystem = system.EntityManager.System(); - // Spill the solution that was drained/split - spillableSystem.TrySplashSpillAt(owner, coordinates, targetSolution, out _, false, cause); + var coordinates = system.EntityManager.GetComponent(owner).Coordinates; + + if (system.EntityManager.TryGetComponent(owner, out SpillableComponent? spillableComponent) && + solutionContainerSystem.TryGetSolution(owner, spillableComponent.SolutionName, out _, out var compSolution)) + { + spillableSystem.TrySplashSpillAt(owner, coordinates, compSolution, out _, false, user: cause); + } + else if (Solution != null && + solutionContainerSystem.TryGetSolution(owner, Solution, out _, out var behaviorSolution)) + { + spillableSystem.TrySplashSpillAt(owner, coordinates, behaviorSolution, out _, user: cause); + } + } } } diff --git a/Content.Server/Kitchen/EntitySystems/KitchenSpikeSystem.cs b/Content.Server/Kitchen/EntitySystems/KitchenSpikeSystem.cs index 679656b54f..fec65430c1 100644 --- a/Content.Server/Kitchen/EntitySystems/KitchenSpikeSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/KitchenSpikeSystem.cs @@ -3,7 +3,6 @@ using Content.Server.Body.Systems; using Content.Server.Kitchen.Components; using Content.Server.Popups; using Content.Shared.Chat; -using Content.Shared.Body.Part; // DeltaV using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.DoAfter; @@ -161,12 +160,9 @@ namespace Content.Server.Kitchen.EntitySystems _transform.SetCoordinates(victimUid, Transform(uid).Coordinates); // THE WHAT? // TODO: Need to be able to leave them on the spike to do DoT, see ss13. - var gibs = _bodySystem.GibBody(victimUid, gibOrgans: true); // DeltaV: spawn organs + var gibs = _bodySystem.GibBody(victimUid); foreach (var gib in gibs) { - // Begin DeltaV changes: Only delete limbs instead of organs - if (HasComp(gib)) - QueueDel(gib); - // End DeltaV changes + QueueDel(gib); } _audio.PlayEntity(component.SpikeSound, Filter.Pvs(uid), uid, true); diff --git a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs index a1831fef34..f7ae04b61e 100644 --- a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/TelegnosisPowerSystem.cs @@ -9,7 +9,7 @@ using Content.Shared.Actions.Events; namespace Content.Server.Abilities.Psionics { - public sealed class TelegnosisPowerSystem : SharedTelegnosisPowerSystem + public sealed class TelegnosisPowerSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; diff --git a/Content.Server/Nyanotrasen/Cloning/MetempsychosisKarmaComponent.cs b/Content.Server/Nyanotrasen/Cloning/MetempsychosisKarmaComponent.cs new file mode 100644 index 0000000000..246495cee0 --- /dev/null +++ b/Content.Server/Nyanotrasen/Cloning/MetempsychosisKarmaComponent.cs @@ -0,0 +1,12 @@ +namespace Content.Server.Nyanotrasen.Cloning +{ + /// + /// This tracks how many times you have already been cloned and lowers your chance of getting a humanoid each time. + /// + [RegisterComponent] + public sealed partial class MetempsychosisKarmaComponent : Component + { + [DataField("score")] + public int Score = 0; + } +} diff --git a/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineComponent.cs b/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineComponent.cs new file mode 100644 index 0000000000..0adcc9b5b2 --- /dev/null +++ b/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineComponent.cs @@ -0,0 +1,22 @@ +using Content.Shared.Random; + +namespace Content.Server.Nyanotrasen.Cloning +{ + [RegisterComponent] + public sealed partial class MetempsychoticMachineComponent : Component + { + /// + /// Chance you will spawn as a humanoid instead of a non humanoid. + /// + [DataField("humanoidBaseChance")] + public float HumanoidBaseChance = 0.75f; + + [ValidatePrototypeId] + [DataField("metempsychoticHumanoidPool")] + public string MetempsychoticHumanoidPool = "MetempsychoticHumanoidPool"; + + [ValidatePrototypeId] + [DataField("metempsychoticNonHumanoidPool")] + public string MetempsychoticNonHumanoidPool = "MetempsychoticNonhumanoidPool"; + } +} diff --git a/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineSystem.cs b/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineSystem.cs new file mode 100644 index 0000000000..62dc1b078e --- /dev/null +++ b/Content.Server/Nyanotrasen/Cloning/MetempsychoticMachineSystem.cs @@ -0,0 +1,47 @@ +using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Random; +using Content.Shared.Random.Helpers; +using Robust.Shared.Random; +using Robust.Shared.Prototypes; + +namespace Content.Server.Nyanotrasen.Cloning +{ + public sealed class MetempsychoticMachineSystem : EntitySystem + { + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private ISawmill _sawmill = default!; + + public string GetSpawnEntity(EntityUid uid, float karmaBonus, MetempsychoticMachineComponent component, SpeciesPrototype oldSpecies, out SpeciesPrototype? species, int? karma = null) + { + var chance = component.HumanoidBaseChance + karmaBonus; + + if (karma != null) + chance -= ((1 - component.HumanoidBaseChance) * (float) karma); + + if (chance > 1 && _random.Prob(chance - 1)) + { + species = oldSpecies; + return oldSpecies.Prototype; + } + else + chance = 1; + + chance = Math.Clamp(chance, 0, 1); + if (_random.Prob(chance) && + _prototypeManager.TryIndex(component.MetempsychoticHumanoidPool, out var humanoidPool) && + _prototypeManager.TryIndex(humanoidPool.Pick(), out var speciesPrototype)) + { + species = speciesPrototype; + return speciesPrototype.Prototype; + } + else + { + species = null; + _sawmill.Error("Could not index species for metempsychotic machine..."); + return "MobHuman"; + } + } + } +} diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index a74b8389fd..59e3054c14 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -68,22 +68,6 @@ namespace Content.Server.StationEvents eventScheduler.TimeUntilNextEvent -= frameTime; continue; } - NextEventComponent? nextEventComponent = null; - - // DeltaV events using NextEventComponent - if (Resolve(uid, ref nextEventComponent, false)) // If there is a nextEventComponent use the stashed event instead of running it directly. - { - if (!_event.TryGenerateRandomEvent(eventScheduler.ScheduledGameRules, out string? generatedEvent) || generatedEvent == null) - continue; - // Cycle the stashed event with the new generated event and time. - string storedEvent= _next.UpdateNextEvent(nextEventComponent, generatedEvent, (float)_timing.CurTime.TotalSeconds + eventScheduler.TimeUntilNextEvent); - if (storedEvent == null || storedEvent == string.Empty) //If there was no stored event don't try to run it. - continue; - GameTicker.AddGameRule(storedEvent); - ResetTimer(eventScheduler); - continue; - } - // DeltaV end events using NextEventComponent // DeltaV events using NextEventComponent NextEventComponent? nextEventComponent = null; diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 215396d1bb..513530ee13 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -93,7 +93,6 @@ public sealed class EventManagerSystem : EntitySystem Log.Warning("A requested event is not available!"); return false; } - // End snippet from upstreams RunRandomEvent return true; } diff --git a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/SharedTelegnosisPowerSystem.cs b/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/SharedTelegnosisPowerSystem.cs deleted file mode 100644 index 5fec9cc931..0000000000 --- a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/SharedTelegnosisPowerSystem.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Shared.Interaction.Events; - -namespace Content.Shared.Abilities.Psionics; - -public abstract class SharedTelegnosisPowerSystem : EntitySystem -{ - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnInteractionAttempt); - } - - private void OnInteractionAttempt(Entity ent, ref InteractionAttemptEvent args) - { - // no astrally stealing someones shoes - args.Cancelled = true; - } -} diff --git a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosisPowerComponent.cs b/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosisPowerComponent.cs index d794f2e00c..51958822a4 100644 --- a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosisPowerComponent.cs +++ b/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosisPowerComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy namespace Content.Shared.Abilities.Psionics { - [RegisterComponent, Access(typeof(SharedTelegnosisPowerSystem))] + [RegisterComponent] public sealed partial class TelegnosisPowerComponent : Component { [DataField("prototype")] @@ -20,4 +20,4 @@ namespace Content.Shared.Abilities.Psionics [DataField("telegnosisActionEntity")] public EntityUid? TelegnosisActionEntity; } -} +} \ No newline at end of file diff --git a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosticProjectionComponent.cs b/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosticProjectionComponent.cs index 8de2b046d8..9d627cb42d 100644 --- a/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosticProjectionComponent.cs +++ b/Content.Shared/Nyanotrasen/Abilities/Psionics/Abilities/Telegnosis/TelegnosticProjectionComponent.cs @@ -1,4 +1,6 @@ -namespace Content.Shared.Abilities.Psionics; - -[RegisterComponent, Access(typeof(SharedTelegnosisPowerSystem))] -public sealed partial class TelegnosticProjectionComponent : Component; +namespace Content.Shared.Abilities.Psionics +{ + [RegisterComponent] + public sealed partial class TelegnosticProjectionComponent : Component + {} +} \ No newline at end of file diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index bdbaa3da1a..96d417e75f 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,4 +1,74 @@ Entries: +- author: Ygg01 + changes: + - message: Digging dirt. + type: Add + id: 158 + time: '2023-12-06T15:58:00.0000000+00:00' +- author: Velcroboy + changes: + - message: Buffed Food Cart storage. Get out there and slang some burgers, chefs! + type: Tweak + id: 159 + time: '2023-12-06T15:58:43.0000000+00:00' +- author: ps3moira + changes: + - message: Added mouse operative reinforcements, which can be bought from the Syndicate + uplink + type: Add + id: 160 + time: '2023-12-06T16:03:07.0000000+00:00' +- author: evilexecutive + changes: + - message: Harpies now have a visual indication when they're playing a Midi. + type: Add + - message: Harpies have been re-balanced so that they now actually have a numerical + positive. + type: Tweak + id: 161 + time: '2023-12-06T20:10:49.0000000+00:00' +- author: DebugOk + changes: + - message: Due to abuse, prisoners now require whitelist to play. + type: Tweak + id: 162 + time: '2023-12-07T13:22:03.0000000+00:00' +- author: ps3moira + changes: + - message: Removed bionic syrinx implanter from surplus crate. + type: Remove + id: 163 + time: '2023-12-11T23:11:41.0000000+00:00' +- author: ps3moira + changes: + - message: Removed Carpotoxin from Sashimi, now they are sushi-grade! + type: Remove + id: 164 + time: '2023-12-13T20:12:46.0000000+00:00' +- author: Adrian16199 + changes: + - message: Crew has learned how to make a straw hat out of wheat bushels! + type: Add + id: 165 + time: '2023-12-13T20:13:45.0000000+00:00' +- author: IamVelcroboy + changes: + - message: Added Yule! Happy Holidays! + type: Add + id: 166 + time: '2023-12-13T20:21:34.0000000+00:00' +- author: ps3moira + changes: + - message: Added Fish n' Chips. Thank the British! + type: Add + id: 167 + time: '2023-12-13T20:32:51.0000000+00:00' +- author: Adrian16199 + changes: + - message: Felinids now meow out their words. They can also sigh now. + type: Tweak + id: 168 + time: '2023-12-13T21:28:39.0000000+00:00' - author: VMSolidus changes: - message: Harpies no longer choke on completely breathable air @@ -3644,84 +3714,3 @@ id: 657 time: '2024-11-08T13:38:47.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2148 -- author: Aikakakah - changes: - - message: Added a black turtleneck! - type: Add - id: 658 - time: '2024-11-08T20:50:40.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/1905 -- author: deltanedas - changes: - - message: Butchering people now drops organs. - type: Tweak - id: 659 - time: '2024-11-09T04:40:16.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2154 -- author: MilonPL - changes: - - message: The metempsychosis will always use your player character on the first - cloning attempt. - type: Tweak - - message: Fixed metempsychosis never selecting non-humanoid characters. - type: Fix - id: 660 - time: '2024-11-09T10:47:17.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2156 -- author: MilonPL - changes: - - message: Fixed beaker solutions duplicating whenever it's thrown. - type: Fix - id: 661 - time: '2024-11-09T12:46:34.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2157 -- author: deltanedas - changes: - - message: The Synthesis Specialist's vendor can now be restocked. - type: Tweak - id: 662 - time: '2024-11-09T13:16:44.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2143 -- author: deltanedas - changes: - - message: Fixed telegnostic projections being able to interact with things. - type: Tweak - id: 663 - time: '2024-11-09T19:27:59.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2117 -- author: Unkn0wnGh0st333 - changes: - - message: Synthesis Specialist ghost rules have been slightly adjusted. - type: Tweak - id: 664 - time: '2024-11-09T19:44:28.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2152 -- author: Colin-Tel - changes: - - message: Removed the "Raise Glimmer" objective for traitors. - type: Remove - id: 665 - time: '2024-11-10T20:18:53.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2107 -- author: Colin-Tel - changes: - - message: Adjusted antagonist rule C3 and the line about bribery in C1. - type: Tweak - id: 666 - time: '2024-11-10T20:20:26.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2164 -- author: Stop-Signs - changes: - - message: Removed the T3 Lockout on epi techs - type: Remove - id: 667 - time: '2024-11-11T02:57:13.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2144 -- author: Radezolid - changes: - - message: The syringe gun is now a researcheable technology in the T2 civilian - category. Get it from the medical techfab once it's researched. - type: Tweak - id: 668 - time: '2024-11-11T15:41:44.0000000+00:00' - url: https://github.com/DeltaV-Station/Delta-v/pull/2169 diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index da92036192..cf6e514070 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, aiden, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, Avalon-Proto, avghdev, Awlod, azzy, AzzyIsNotHere, BackeTako, BananaFlambe, Baptr0b0t, BasedPugilist, BasedUser, Batuh1n, beck-thompson, BellwetherLogic, benev0, benjamin-burges, BGare, bhespiritu, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, Catofquestionableethics, CatTheSystem, Centronias, chairbender, Charlese2, charlie, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, CodedCrow, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, cutemoongod, Cyberboss, d34d10cc, dabigoose, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DefinitelyNotFurryXD, degradka, Delete69, deltanedas, DeltaV-Bot, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, dge21, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eternally-confused, eugene, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flyingkarii, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FryOfDestiny, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, goet, Goldminermac, Golinth, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, Gyrandola, h3half, Haltell, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, HighTechPuddle, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyphenationc, i-justuser-i, iacore, IamVelcroboy, ian, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, Jophire, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, Kurzaen, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, lettern, LetterN, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, LittleNyanCat, lizelive, lleftTheDragon, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, manelnavola, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, memoblob, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minemoder5000, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, mnemotechnician, moderatelyaware, modern-nm, mokiros, Moneyl, Monotheonist, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, NullWanderer, nyeogmi, Nylux, Nyranu, och-och, ocotheomega, OctoRocket, OldDanceJacket, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, PHCodes, pheenty, Phill101, phunnyguy, PilgrimViis, Pill-U, Pireax, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PPooch, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samsterious, SaphireLattice, SapphicOverload, sarahon, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, sniperchance, Snowni, snowsignal, solaris7518, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, Soydium, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, Squishy77, SsalamethVersaach, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGRCdev, tgrkzus, ThataKat, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TheOneWhoIsManyFrame, theOperand, TherapyGoth, therealDLondon, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, Vasilis, VasilisThePikachu, Velcroboy, veliebm, VelonacepsCalyxEggs, venn, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, vitalvitriol, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, yunii, yuriykiss, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, zonespace27, ZweiHawke, Zylofan, Zymem, zzylex +0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, aiden, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, Avalon-Proto, avghdev, Awlod, azzy, AzzyIsNotHere, BackeTako, BananaFlambe, Baptr0b0t, BasedPugilist, BasedUser, Batuh1n, beck-thompson, BellwetherLogic, benev0, benjamin-burges, BGare, bhespiritu, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, Catofquestionableethics, CatTheSystem, Centronias, chairbender, Charlese2, charlie, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, CodedCrow, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, cutemoongod, Cyberboss, d34d10cc, d4kii, dabigoose, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DefinitelyNotFurryXD, degradka, Delete69, deltanedas, DeltaV-Bot, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, dge21, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flyingkarii, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FryOfDestiny, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, goet, Goldminermac, Golinth, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, Gyrandola, h3half, Haltell, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyphenationc, i-justuser-i, iacore, IamVelcroboy, ian, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, Jophire, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, Kurzaen, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, LittleNyanCat, lizelive, lleftTheDragon, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, memoblob, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minemoder5000, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, mnemotechnician, moderatelyaware, modern-nm, mokiros, Moneyl, Monotheonist, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, NullWanderer, nyeogmi, Nylux, Nyranu, och-och, ocotheomega, OctoRocket, OldDanceJacket, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, PHCodes, pheenty, Phill101, phunnyguy, PilgrimViis, Pill-U, Pireax, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PPooch, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samsterious, SaphireLattice, SapphicOverload, sarahon, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, sniperchance, Snowni, snowsignal, solaris7518, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, Soydium, SpaceLizardSky, SpaceManiac, SpaceyLady, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, Squishy77, SsalamethVersaach, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGRCdev, tgrkzus, ThataKat, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TheOneWhoIsManyFrame, theOperand, TherapyGoth, therealDLondon, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, Vasilis, VasilisThePikachu, Velcroboy, veliebm, VelonacepsCalyxEggs, venn, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, vitalvitriol, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, zonespace27, ZweiHawke, Zylofan, Zymem, zzylex diff --git a/Resources/Locale/en-US/deltav/administration/commands/announce-custom.ftl b/Resources/Locale/en-US/deltav/administration/commands/announce-custom.ftl deleted file mode 100644 index 5ee04d2cd4..0000000000 --- a/Resources/Locale/en-US/deltav/administration/commands/announce-custom.ftl +++ /dev/null @@ -1,8 +0,0 @@ -## AnnounceCustomCommand -cmd-announcecustom-desc = Send an in-game announcement with custom color and sound. -cmd-announcecustom-help = {$command} [sender] [color] [sound] - Send announcement. Sender defaults to CentCom, color to Gold, sound to announce.ogg - -# Completion hints -cmd-announcecustom-arg-message = message -cmd-announcecustom-arg-color = color in #RRGGBB format (optional) -cmd-announcecustom-arg-sound = sound path (optional) diff --git a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl index 232f4ed6ba..6923ae4105 100644 --- a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl @@ -30,12 +30,11 @@ ghost-role-information-silvia-rules = Keep the medical team company and help out ghost-role-information-synthesis-name = Synthesis Specialist ghost-role-information-synthesis-description = You are a member of Interdyne Pharmaceutics! You are provided all the tools to manufacture a variety of medical cocktails. Establish your craft, peddle your poisons, and make profit. ghost-role-information-synthesis-rules = - You are a [color=yellow][bold]Free-Agent[/bold][/color]. You are free to act as either an antagonist or a non-antagonist. - You are just a chemist so do not act like a full-on antagonist, i.e. no killing people yourself unless your ship is in danger. - Brew deadly poisons, marvelous medicines, and anything in between. - Sell your concoctions to [color=red]local agents[/color], crew, and anyone with supplies. - Stay on your ship; it is your job, home, and lifeblood. + Sell your concoctions to local agents, crew, and anyone with supplies. + Stay on your ship, it is your lifeblood! + + You are just a chemist so do not act like a full-on antagonist, i.e. no killing people yourself unless your ship is in danger. ghost-role-information-closet-skeleton-rules = You are a old member of the station, try to get your previous job back or dwell in the maintenance tunnels!. You are a [color=green][bold]Non-antagonist[/bold][/color]. You should generally not seek to harm the station and its crew. diff --git a/Resources/Locale/en-US/deltav/research/technologies.ftl b/Resources/Locale/en-US/deltav/research/technologies.ftl index ae1a8fe69a..25377b155f 100644 --- a/Resources/Locale/en-US/deltav/research/technologies.ftl +++ b/Resources/Locale/en-US/deltav/research/technologies.ftl @@ -5,4 +5,3 @@ research-technology-energy-gun = Energy Guns research-technology-energy-gun-advance = Advanced Energy Manipulation research-technology-advance-laser = Advanced Laser Manipulation research-technology-robust-melee = Robust Melee -research-technology-syringe-gun = Syringe Gun diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 1e2683e7e8..a4750e1059 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -16,7 +16,6 @@ ClothingOuterPonchoClassic: 2 ClothingUniformJumpsuitKilt: 3 # DeltaV - SCOTTTTLANDDDDD FURREVERRRRR!! ClothingEyesEyepatch: 2 # Delta-V Yarrr - ClothingUniformBlackTurtleneck : 2 # DeltaV - Clothing addition ClothingHeadHatPwig: 2 ClothingOuterRobesJudge: 2 ClothingOuterPoncho: 2 diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/engine.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/engine.yml deleted file mode 100644 index 252d5762ff..0000000000 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/engine.yml +++ /dev/null @@ -1,45 +0,0 @@ -- type: entity - parent: CrateEngineering - id: CrateEngineEssentials - name: engine essentials crate - description: Everything you need to power the station, in a superposition of containing both a singularity and a tesla. - suffix: 1 per map MAX - components: - - type: EntityTableContainerFill - containers: - entity_storage: !type:GroupSelector - children: - - !type:NestedSelector - tableId: TeslaEssentials - - !type:NestedSelector - tableId: SingularityEssentials - -- type: entityTable - id: TeslaEssentials - table: !type:AllSelector - children: - - id: TeslaGeneratorFlatpack - - id: TeslaGeneratorFlatpack - prob: 0.3 # Small chance of a free backup - - id: TeslaCoilFlatpack - amount: !type:RangeNumberSelector - range: 4, 6 - - id: TeslaGroundingRodFlatpack - amount: !type:ConstantNumberSelector - value: 4 - -- type: entityTable - id: SingularityEssentials - table: !type:AllSelector - children: - - id: SingularityGeneratorFlatpack - - id: SingularityGeneratorFlatpack - prob: 0.3 # Small chance of a free backup - # intentionally separate rolls so they are probably mismatched - # you might get spare tanks you might have to get more from the tank dispenser - - id: RadiationCollectorFlatpack - amount: !type:RangeNumberSelector - range: 8, 12 - - id: PlasmaTankFilled - amount: !type:RangeNumberSelector - range: 8, 12 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml index 5d950e6e42..b4f9cd73c7 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml @@ -397,13 +397,3 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpsuit/prosecutorred.rsi -- type: entity - parent: ClothingUniformFoldableBase - id: ClothingUniformBlackTurtleneck - name: black turtleneck - description: A simple black turtleneck. Perfect for any wannabe spy. - components: - - type: Sprite - sprite: DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi - - type: Clothing - sprite: DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml index db571aa635..3b5329e230 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/Signs/signs.yml @@ -38,12 +38,4 @@ sprite: DeltaV/Structures/Wallmounts/signs.rsi state: direction_court -- type: entity - parent: BaseSignDirectional - id: SignDirectionaAI - name: AI sign - description: A direction sign, pointing out which way the AI core is. - components: - - type: Sprite - sprite: DeltaV/Structures/Wallmounts/signs.rsi - state: direction_aicore + diff --git a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml index 2d972f9809..dc940422f8 100644 --- a/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/glimmer_events.yml @@ -17,7 +17,6 @@ parent: BaseGameRule id: GlimmerEventScheduler components: - - type: NextEvent - type: BasicStationEventScheduler minMaxEventTiming: min: 300 diff --git a/Resources/Prototypes/DeltaV/Recipes/Lathes/medical.yml b/Resources/Prototypes/DeltaV/Recipes/Lathes/medical.yml index 945829974e..7de2021c79 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Lathes/medical.yml @@ -5,20 +5,3 @@ materials: Steel: 300 Glass: 100 - -- type: latheRecipe - id: LauncherSyringe - result: LauncherSyringe - completetime: 3 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - -- type: latheRecipe - id: MiniSyringe - result: MiniSyringe - completetime: 1 - materials: - Plastic: 150 - Steel: 50 diff --git a/Resources/Prototypes/DeltaV/Research/civilianservices.yml b/Resources/Prototypes/DeltaV/Research/civilianservices.yml deleted file mode 100644 index 73be7fb5a9..0000000000 --- a/Resources/Prototypes/DeltaV/Research/civilianservices.yml +++ /dev/null @@ -1,12 +0,0 @@ -- type: technology - id: SyringeGun - name: research-technology-syringe-gun - icon: - sprite: Objects/Weapons/Guns/Cannons/syringe_gun.rsi - state: syringe_gun - discipline: CivilianServices - tier: 2 - cost: 10000 - recipeUnlocks: - - LauncherSyringe - - MiniSyringe diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml index c7851aff88..3e91218e40 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml @@ -482,7 +482,6 @@ - type: VendingMachineRestock canRestock: - ChemVendInventory - - ChemVendInventorySyndicate # DeltaV: Let it restock synthesis/nukie vendor - type: Sprite layers: - state: base diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 6761b7f181..f6f58803ed 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -436,8 +436,6 @@ - MagazineBoxSpecialHoly - MagazineBoxSpecialMindbreaker - AdvancedTruncheon - - LauncherSyringe - - MiniSyringe # End DeltaV additions - type: entity @@ -1068,10 +1066,6 @@ - WhiteCane - AACTablet # DeltaV dynamicRecipes: - # Begin DeltaV additions - - LauncherSyringe - - MiniSyringe - # End DeltaV additions - ChemicalPayload - CryostasisBeaker - BluespaceBeaker diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 525c3ffebd..90a7d71195 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -2160,7 +2160,7 @@ parent: VendingMachineChemicals id: VendingMachineChemicalsSyndicate name: SyndieJuice - description: Not made with freshly squeezed syndies I hope. Backwards compatible with standard ChemVend restocks. # DeltaV: Add chemvend part + description: Not made with freshly squeezed syndies I hope. components: - type: VendingMachine pack: ChemVendInventorySyndicate diff --git a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml index 19832813f0..eee0f05e36 100644 --- a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml +++ b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml @@ -50,3 +50,18 @@ # components: # - BecomePsionicCondition # - type: BecomeGolemCondition + +- type: entity + id: RaiseGlimmerObjective + parent: BaseTraitorObjective + name: Raise Glimmer. + description: Get the glimmer above the specified amount. + components: + - type: Objective + difficulty: 2.5 + #unique: false + icon: + sprite: Nyanotrasen/Icons/psi.rsi + state: psi + - type: RaiseGlimmerCondition + target: 500 diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index d870db5d36..05f563c297 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -49,6 +49,8 @@ weights: RandomTraitorAliveObjective: 1 RandomTraitorProgressObjective: 1 + RaiseGlimmerObjective: 0.5 # Nyanotrasen - Raise glimmer to a target amount, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml + #Thief groups - type: weightedRandom diff --git a/Resources/Prototypes/Research/disciplines.yml b/Resources/Prototypes/Research/disciplines.yml index b154785327..7a661da1a3 100644 --- a/Resources/Prototypes/Research/disciplines.yml +++ b/Resources/Prototypes/Research/disciplines.yml @@ -5,11 +5,10 @@ icon: sprite: Interface/Misc/research_disciplines.rsi state: industrial - lockoutTier: 4 # DeltaV: Lockout occurs at t4 tierPrerequisites: 1: 0 - 2: 1 # DeltaV: raised to 1 - 3: 1 # DeltaV: raised to 1 + 2: 0.75 + 3: 0.75 - type: techDiscipline id: Arsenal @@ -18,11 +17,10 @@ icon: sprite: Interface/Misc/research_disciplines.rsi state: arsenal - lockoutTier: 4 # DeltaV: Lockout occurs at t4 tierPrerequisites: 1: 0 - 2: 1 # DeltaV: raised to 1 - 3: 1 # DeltaV: raised to 1 + 2: 0.75 + 3: 0.75 - type: techDiscipline id: Experimental @@ -31,11 +29,10 @@ icon: sprite: Interface/Misc/research_disciplines.rsi state: experimental - lockoutTier: 4 # DeltaV: Lockout occurs at t4 tierPrerequisites: 1: 0 - 2: 1 # DeltaV: raised to 1 - 3: 1 # DeltaV: raised to 1 + 2: 0.75 + 3: 0.75 - type: techDiscipline id: CivilianServices @@ -44,8 +41,7 @@ icon: sprite: Interface/Misc/research_disciplines.rsi state: civilianservices - lockoutTier: 4 # DeltaV: Lockout occurs at t4 tierPrerequisites: 1: 0 - 2: 1 # DeltaV: raised to 1 - 3: 1 # DeltaV: raised to 1 + 2: 0.75 + 3: 0.75 diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml index 7047855e82..bc7d7d93f7 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml @@ -116,6 +116,7 @@ - Giving a character additional access or a job because you are friends with the player who is playing that character. - Trusting a character because you are friends with the player who is playing that character. - Not fighting a character because you are friends with the player who is playing that character. + - Ignoring your objective to kill a character because your character and theirs became friends in a previous round. ## Metagrudging Examples These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml index 98ad2308a0..73cad37635 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml @@ -4,7 +4,7 @@ Security, Justice, and Command roles are held to a higher standard of roleplay, - Your character must act in a manner that NanoTrasen would reasonably hire them to this position. - Your character is presumed to be sane, competent in their duties, and able to make decisions to the benefit of the station. - Giving away Traitor objective items and sensitive equipment should be avoided in these roles. Your character should value them deeply. - - Leeway is given to making deals with criminals if the deal benefits the safety or situation of the crew and station OR if the deal involves items of a primarily sentimental value (e.g. HoP's Ian scrapbook, LO's lucky dollar). + - Leeway is given to making deals with criminals if the deal benefits the safety or situation of the crew and station. - Leeway can be given in [color=#ff0000]extreme circumstances[/color] of emergency/crisis. - The three departments are required to read and follow Delta-V Space Law, Standard Operating Procedure, Alert Procedure, and Company Policy to the best of their ability. - [color=#ff0000]Circumstances and context may permit you to break these laws. However, the fact that this rule is malleable is not an excuse to ignore it entirely.[/color] diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml index cb76f7da9e..7da8c25517 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml @@ -1,12 +1,9 @@ # Rule C3: Antagonist Guidelines -[color=#ffff00]Being an antagonist does not allow you to stop playing a character. Determine how your character would react to being given these objectives, and work through it appropriately.[/color] - Through engaging in antagonistic activity, you should seek to make the round more engaging and fun as the primary driver of the narrative of a round. Succeeding as an antagonist should not be your goal, but rather telling the most interesting story for everyone involved. - [color=#ff0000]Antagonists are free to complete their objectives through committing proportional damage. Through roleplay, damage becomes more proportional.[/color] Example: Holding the singulo hostage for a theft objective is acceptable, while simply singuloosing and using that chaos is unacceptable. - Killing players unrelated to your immediate objective in a manner that results in their round removal should be avoided. Crew that do not make an attempt at self preservation, or engage in valid-hunting, are exempt from this. - If you are concerned as to whether or not what you're about to do is allowed, feel free to AHelp and ask an admin for clarification. [color=#ff0000]Lack of administrator response does not constitute approval.[/color] - - While antagonists are [color=#ffff00]not required[/color] to complete their objectives, they are still encouraged to act as an antagonist in the round while roleplaying. - Other antagonists are not necessarily your friends. Other antagonists are often free agents that you may negotiate with at your own risk. - If you are a team antagonist, you must work with your partners to complete any shared objectives. - Excessively lame tactics are strictly forbidden for all antags except for station-destroying antags, such as nuclear operatives or space dragons. Examples include: diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/equipped-INNERCLOTHING.png deleted file mode 100644 index 9ce3bbaaefeee9cb1e3f10a08a6771989f360716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 zcmV-y2b1`TP){t;Lod%XU_~z=0$OiUNvbIB?{D z-r6LDVz;51J zqkR5=1)#;Y6s6Li>ba7?u((9waD;-v5VzR2%lC{b0`OQYL5+q%wOX|&AV?mMhqpuF zDB-vWYkzN78@1n2&l}`ds}*v&+|=omdTpER@<$R1csiY-a=AZ zQi%r(A(>1@?5m0AFvyvKY=9{U+?A^g$w#Jnyxr8qt0`KJdT67&NQ22%?B6pXJ%8v0AzqJ2HhbHy4f`N`|;5s z&jl*{OASCrc+xSSMOw-g3_ILZ&+5Iw%kABDHE6vi;Xw1TU-|hC${reBZ zgc#*l(4$Ac2?JU@AC$`{N`0!BBl)-n8f1WtzF$jga%mlE)GJgx z&U3427CpF=1YDjvk=EtX=*zoVPJ7cd#3bAO;4!evSGrsG))uY9VwLW%FHkBRqCdCu z^l>gthm|V*{$iJs@t|nmD)p)26!?Wwjqa^wnZI4=8eXm%w3|P%#aGGzz~$gEXvF5h zF^hpH9G_&M|7<$OJn%8_Trx&;vmxGZhp%M7os~4z8ZEx#Z}v)JrZ=f7wvh?Ti)l*5 zy^|b2UCYi;G~{Fc{!x|rV4n&jU;^~1hLQozhAH~Dc(4E=-9vs4eR5}!x&C07+e!Y@ z5^tM@xmg}O_`3KFvUYueGD-3Kfc2@-l?*7?-@n(BiSEzcV!2M+y9K8D#2-VGjC!p> z9`Soa7n7dkSB)mU+Bu+rUnf(Tp&CjCp!3zGO_a<~l$Eu~WHL$HTbpOj8FfS1 z0D0Fdl~bw32f6h@{MV2SFp_;lIO(yK~Y=Zh)BG$|PX=K)4J+As`mTP-hFgR##v zTgn242|RxsHy{>^b1e|%I23B21uI6-io&f@L00KML?8wOMIjQ^UjXF_5tPYgY3#h{ ztK0?yEEGoN;GqSYpiMQD48Yw-pb}Fk6u2IU5*4b$sL@R;zycF&JPyzTO$e!RR4qyd zpi|V}5Lgle$B~BEhdUyx!+gSo{s99lFu{ffXhBGADrhAGFw=KI-D)t((g>s?R%J}@ z5eP98Y-m6h$PAPkacq=OG5{bflENJj6CQ)H4_lfY;vF_pbN*|MrV@UL&}i)F>1R(az3J|JbCy zfB_bmSTzO>GN26_RYJ*t)p;&{4*vePzWeGnz1YlC>*Ou{@%ZtX>`)Oh>bYQmwSHrP zB7Vl5(bLm7YIme87>g950Ut$zK6>(MpFtZp=c#a9p`V{^EB80D(t#5{`zU86XTp@7 zOVIZ}KIbE=^I|!lDBh|r(6A-=^NkhDCD!V#i-EgbA$t1!CH?gDwXMDe#-;QX8aCE% ziQfQKdj9twb;O!MI~vqxjGn~VXn-uSUI(#vuuEQ#(v#HdWxNJVuvf07XjUxE>6mJ- zKS{Tx+z{)6u`b}nKl?PF$;!T_-h%z;*&8|%OJ|_TPT0x-pIEG%TM|oFgKeK@{oCO|{#S9GG z!XV7ZFl&wkP_Qn*C&U#q8I2b8sgxgvht9aUKI$7&xM7S#?&kzL~q*W5+7tHXVSfK9z zMg*wqji-xaNX4AD7i|5R4SCoe+&JgXoMm0In^o)M|9XC>qy$SfwysqsCoS_BR<7Ey zSt6qH`SD8G=AWt`_{A6;oCQS#ln=7??BVHH5csj@&>j|#6HZ@`a;iPB+~LcS=+v0D zc}vBdW}Xc0-%fQ|LTL-c6Fv(6x|H*=S6@|p!z`m66C9G(3B7r#&M`&h%g#8(DT+mL zJD4q|J36hszI+#(^oxn}nwiSt85Zu*O!!gP_-aLi^}Ej}obmdKI;Vst06JO4T>t<8 diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/black_turtleneck.rsi/inhand-left.png deleted file mode 100644 index 8abe548a25aad1ea031ab72006071ea6210b9668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F3${@^GvDChdfr0U> zr;B4q1>@UU2fdgL1=`#TSB6DbPZV8S@hRYAO6`C34RN*=p@CgNyLUycSYti)iit|% zW@}NV`UNGEPoDYn+w^5>8wWFs0|O4UfUi--lk4A%ecMcn`*ZU?7eC$bGd%Y8nq3#S z>)YCBu{{?*r<+qQrOS4|?%d6|_xa@^^+`tmqNJ>}mo^-rCbng7|N zPxoYk%<8*&`mM_|Z+RH}o}OG-W%16c?F45CEWGzU;cbzMI1K+ zXX1ZRWvhqUeHt zTl#U6y8jDKKABv#SJvvr?WGs*GT*&(j~%Q?7O1G>dgPYO^`Ad!wUyY2ir-gYV8Vk8 zg(kdE?AT_sWcs1E#P9TboYSxqSES z{N}r}wol)*dH3b-b-FQfE)oh1Ot_HGf~#3aXR%z*Dc!riZ>M+kynDX0Z@l=RksSAp z_q_gz?RvleeL7VYF+Kaomng=9#RpHmoE5n9WQ|?<-R0M;USHyGH{HyC|Hda>x4hl*%#u;vG3AB_gbF6%DQq@-13R1A1cVrmA(ArZ}YOt z{;$55zevcReyp6oq`3OMO}Kc&s;a$iJ64*BEULVC!({Iw>2LuCMx2Oaa)WMm`O{B{ zRwq_z&EfHUG%MF}X2h*+>Q`o&%Uxe&neBh+TEwNqwjhg#+) zu{Tn!`O`oR#}!B-CftDD(lAFFDxO1a35goud%ZTxS^XJ%7-~sRL`}4r$0{j44gycn4^HB zfTMt;fTMt;fTMt;!0-xqy3p(3U{DTC{W?*Qo27`0l@cqJ)~)FYPVart!Xxu_)-pc!-K&fwOTE5yWLc+R=G2( zP7Eu8;3M+F;RqAIOrelYH#bEdi7I^0uyAo5z?!Bp=*{gn5DtggcAHI$ytvG^R`5L@ zH;+QJe!m~|oldjYN_?pZ09*_ngNE&0hq@0F9c-`nULC0YbRz0S|q&GS9gI_HtskHQ5trZg!dv9(=FMMXSqmlrUn{ z@lVbJDFKSr&f6XkMoj0Vt74T7PIG+Q&wixXY1K-NJnVhL%N9MsFV`FN`sjj!0WX9jqabRg7-PbMnswOSKdG>@4HpiX@!Z3Ioue09-cH1C6 znES_BLWIbglmJF-f-iz_qT7CY{s$H7E+q%L`?+iTzxdz%yvzN%>wf3FqkyA;qkyA; zqkyA;qkyA;qkyA;qrgZCAVrQ3GBqQ0^d4^RBuqR0sC4)Czh%k0(~CP zHhfVn&QOj33>NA)n?9Z&MADMw=Pf&vqhKQBk(EYu2t+`lMtm7KFKbE>00_bz*;qKx zDO3n4B`0MaMtZDMnNsF#_%O=UQx*V@W8Nc0NyR8=(R|JTf0I=bM7!2B8AG^;D+LjW)@9TeR)@v1( zmGP0^tI=0apAKTY*JEIS1t!?NHps``Yr6NP1i&Nb%gyE6*Wa%{TeDCjxM;XY*L6BN zI_mD*mTfS=0uyZbAVBa9KFXMs087dK>9=Rk{uPcgjtqM(7+|g4 zpQCV~A2-OyclF)h!@I6#=TM{&3Hm7<^3(Iz=ltsR2T981OZ4N*1L^+mzzsb8$p>l6 zn3|x}Y>dABew$yjl#CIQx3UEqN)CUzp0PAmtGC7mu4y{G*xscdUi_uh*T4}DaS%SN zuRUZHs%6@Kbw+JgC#d2>|Ee|wd^!>&i`DDE&Mr>L=aHI8LlEx11Wd3q_u@3oN^{z# z+MB47=XF*WjJklGKhG(dNZswNO;>=u_41G|S?LUXQZc0n@Uvp+^g^86p(qc3_dn5~ z;(+Qst+vJ4ne;rl%nDtX)Kc?G5pZ%@Bvfbxd?v*Woy;-*5E6oc33fc@rEIZG@JYp# l1W*Av_c#hT3j8k>_!}cvDzUJ|8iD`-002ovPDHLkV1jFaELs2n diff --git a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_aicore.png b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/direction_aicore.png deleted file mode 100644 index 226a799578995554cf24da3a4ebdcd5447735f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zlRRAG-VP@z`6@?Y+Qcf>@I??|EGmFGD)-PgicFvv+kqHj`4}^b+O!PhD+Z1(S zU1)yU)vv1=|JhGU*|ORAriRfCK}MkI4XnE^GS7QndoFa%y4T%R*VomjM^*g)R3>OG zyY17LUl;dk}XS z>~781eP?>V_AXlyuhQ7zF*|v6{p(v(ZheUQb*=x>s?S-EYZ&Ttmjv_rmlo8%-fi@c z)u}$WxAk9C-|nd$HT63!vaMd9nr~Wo?L^`BNfy~EU#6DNDpwM7A{e|`Zvp0v1 m|9{~N