From 72a7fb396c0b5b3e3fae67230fe11c15d0de7812 Mon Sep 17 00:00:00 2001
From: nlaky <299499053+nlaky@users.noreply.github.com>
Date: Mon, 3 Aug 2026 12:25:33 -0600
Subject: [PATCH 1/3] Add OOC shuttle call vote
---
Content.Server/RoundEnd/RoundEndSystem.cs | 3 +-
.../_DVA/RoundEnd/RoundEndSystem.cs | 31 +++++++++++++++++++
Content.Shared/_DVA/CCVars/DCCVars.cs | 8 +++++
.../en-US/_DVA/roundend/round-end-system.ftl | 4 +++
4 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
create mode 100644 Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl
diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs
index b5c364a847b..833c2c365f7 100644
--- a/Content.Server/RoundEnd/RoundEndSystem.cs
+++ b/Content.Server/RoundEnd/RoundEndSystem.cs
@@ -381,7 +381,8 @@ public override void Update(float frameTime)
{
if (!_shuttle.EmergencyShuttleArrived && ExpectedCountdownEnd is null)
{
- RequestRoundEnd(checkCooldown: false, text: "round-end-system-shuttle-auto-called-announcement");
+ CallEvacuationVote(); // DeltaV - call OOC vote for ending round
+ // RequestRoundEnd(checkCooldown: false, text: "round-end-system-shuttle-auto-called-announcement");
_autoCalledBefore = true;
}
diff --git a/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs b/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
new file mode 100644
index 00000000000..38723e7d9d8
--- /dev/null
+++ b/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
@@ -0,0 +1,31 @@
+using Content.Server.Voting.Managers;
+using Content.Server.Voting;
+using Content.Shared._DVA.CCVars;
+
+namespace Content.Server.RoundEnd;
+
+public sealed partial class RoundEndSystem : EntitySystem
+{
+ [Dependency] IVoteManager _vote = default!;
+
+ public void CallEvacuationVote()
+ {
+ var options = new VoteOptions
+ {
+ Title = Loc.GetString("round-end-system-vote-title"),
+ Duration = _cfg.GetCVar(DCCVars.EmergencyShuttleVoteTime),
+ InitiatorText = Loc.GetString("vote-options-server-initiator-text")
+ };
+
+ options.Options.Add((Loc.GetString("round-end-system-vote-end"), true));
+ options.Options.Add((Loc.GetString("round-end-system-vote-continue"), false));
+
+ var vote = _vote.CreateVote(options);
+
+ vote.OnFinished += (_, args) =>
+ {
+ if (args.Winner == null || (bool)args.Winner)
+ RequestRoundEnd(null, null, false, "round-end-system-vote-shuttle-called-announcement");
+ };
+ }
+}
diff --git a/Content.Shared/_DVA/CCVars/DCCVars.cs b/Content.Shared/_DVA/CCVars/DCCVars.cs
index d5d0774e7a3..ec3685cc9ea 100644
--- a/Content.Shared/_DVA/CCVars/DCCVars.cs
+++ b/Content.Shared/_DVA/CCVars/DCCVars.cs
@@ -35,6 +35,14 @@ public sealed partial class DCCVars
* Misc.
*/
+ /* OOC shuttle vote */
+
+ ///
+ /// How long players should have to vote on the round end shuttle being sent
+ ///
+ public static readonly CVarDef EmergencyShuttleVoteTime =
+ CVarDef.Create("shuttle.vote_time", TimeSpan.FromMinutes(1), CVar.SERVER);
+
///
/// The total time a player has to be SSD to be considered cryoable (stage 3).
/// Default is 20 minutes. Value should be bigger than .
diff --git a/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl b/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl
new file mode 100644
index 00000000000..c1b9c18149e
--- /dev/null
+++ b/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl
@@ -0,0 +1,4 @@
+round-end-system-vote-title = Should the shift end?
+round-end-system-vote-end = Initiate Crew Transfer
+round-end-system-vote-continue = Continue Round
+round-end-system-vote-shuttle-called-announcement = An automatic crew shift change shuttle has been sent. ETA: {$time} {$units}.
From 9a26a0d1b10ee20f614910445055a01de5d7666f Mon Sep 17 00:00:00 2001
From: nlaky <299499053+nlaky@users.noreply.github.com>
Date: Mon, 10 Aug 2026 11:11:04 -0600
Subject: [PATCH 2/3] Change call to RequestRoundEnd
Co-authored-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
---
Content.Server/_DVA/RoundEnd/RoundEndSystem.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs b/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
index 38723e7d9d8..96cac5d4a59 100644
--- a/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
+++ b/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
@@ -25,7 +25,7 @@ public void CallEvacuationVote()
vote.OnFinished += (_, args) =>
{
if (args.Winner == null || (bool)args.Winner)
- RequestRoundEnd(null, null, false, "round-end-system-vote-shuttle-called-announcement");
+ RequestRoundEnd(checkCooldown: false, text: "round-end-system-vote-shuttle-called-announcement");
};
}
}
From 681fe1cf204acf76f7ba93c83e9547ce7e02cca0 Mon Sep 17 00:00:00 2001
From: nlaky <299499053+nlaky@users.noreply.github.com>
Date: Tue, 11 Aug 2026 10:52:12 -0600
Subject: [PATCH 3/3] Move RoundEndSystem.cs -> RoundEndSystem.EvacVote.cs
---
.../RoundEnd/{RoundEndSystem.cs => RoundEndSystem.EvacVote.cs} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename Content.Server/_DVA/RoundEnd/{RoundEndSystem.cs => RoundEndSystem.EvacVote.cs} (100%)
diff --git a/Content.Server/_DVA/RoundEnd/RoundEndSystem.cs b/Content.Server/_DVA/RoundEnd/RoundEndSystem.EvacVote.cs
similarity index 100%
rename from Content.Server/_DVA/RoundEnd/RoundEndSystem.cs
rename to Content.Server/_DVA/RoundEnd/RoundEndSystem.EvacVote.cs