diff --git a/.github/workflows/labeler-needsreview.yml b/.github/workflows/labeler-needsreview.yml
index 819b34b7bbd..4d895cad771 100644
--- a/.github/workflows/labeler-needsreview.yml
+++ b/.github/workflows/labeler-needsreview.yml
@@ -3,10 +3,17 @@
on:
pull_request_target:
types: [review_requested]
+ pull_request_review:
+ types: [submitted]
+
+permissions:
+ pull-requests: write
+ contents: write
jobs:
add_label:
runs-on: ubuntu-latest
+ if: github.event_name == 'pull_request_target'
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
@@ -14,3 +21,23 @@ jobs:
- uses: actions-ecosystem/action-remove-labels@v1
with:
labels: "S: Awaiting Changes"
+
+ handle_review:
+ runs-on: ubuntu-latest
+ if: github.event_name == 'pull_request_review'
+ steps:
+ - uses: actions-ecosystem/action-add-labels@v1
+ if: |
+ github.event.review.state == 'changes_requested' &&
+ (github.event.review.author_association == 'OWNER' ||
+ github.event.review.author_association == 'MEMBER')
+ with:
+ labels: "S: Awaiting Changes"
+
+ - uses: actions-ecosystem/action-remove-labels@v1
+ if: |
+ github.event.review.state == 'changes_requested' &&
+ (github.event.review.author_association == 'OWNER' ||
+ github.event.review.author_association == 'MEMBER')
+ with:
+ labels: "S: Needs Review"
diff --git a/.github/workflows/labeler-untriaged.yml b/.github/workflows/labeler-untriaged.yml
index ec1d194851c..22554d05650 100644
--- a/.github/workflows/labeler-untriaged.yml
+++ b/.github/workflows/labeler-untriaged.yml
@@ -3,8 +3,6 @@
on:
issues:
types: [opened]
- pull_request_target:
- types: [opened]
jobs:
add_label:
diff --git a/Content.Server/DeltaV/GameTicking/Rules/Components/DelayedRuleComponent.cs b/Content.Server/DeltaV/GameTicking/Rules/Components/DelayedRuleComponent.cs
new file mode 100644
index 00000000000..64f90f135e0
--- /dev/null
+++ b/Content.Server/DeltaV/GameTicking/Rules/Components/DelayedRuleComponent.cs
@@ -0,0 +1,46 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+namespace Content.Server.DeltaV.GameTicking.Rules.Components;
+
+///
+/// Delays adding components to the antags of a gamerule until some time has passed.
+///
+///
+/// This is used for the zombies gamemode so that new players don't hit the funny button immediately and ruin anyone else's plans.
+///
+[RegisterComponent, Access(typeof(DelayedRuleSystem))]
+[AutoGenerateComponentPause]
+public sealed partial class DelayedRuleComponent : Component
+{
+ ///
+ /// The players must wait this length of time before gets added.
+ /// If they are somehow found out and get gibbed/cremated/etc before this delay is up they will not turn.
+ ///
+ [DataField(required: true)]
+ public TimeSpan Delay;
+
+ ///
+ /// Whether to skip the delay if there is only 1 antag selected.
+ ///
+ [DataField]
+ public bool IgnoreSolo;
+
+ ///
+ /// When the will end.
+ ///
+ [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
+ public TimeSpan DelayEnds;
+
+ ///
+ /// The components to add to each player's mob once the delay ends.
+ ///
+ [DataField(required: true)]
+ public ComponentRegistry DelayedComponents = new();
+
+ ///
+ /// Popup to show when the delay ends.
+ ///
+ [DataField(required: true)]
+ public LocId EndedPopup;
+}
diff --git a/Content.Server/DeltaV/GameTicking/Rules/DelayedRuleSystem.cs b/Content.Server/DeltaV/GameTicking/Rules/DelayedRuleSystem.cs
new file mode 100644
index 00000000000..ca64ebf45e0
--- /dev/null
+++ b/Content.Server/DeltaV/GameTicking/Rules/DelayedRuleSystem.cs
@@ -0,0 +1,58 @@
+using Content.Server.Antag.Components;
+using Content.Server.GameTicking.Rules;
+using Content.Server.DeltaV.GameTicking.Rules.Components;
+using Content.Shared.GameTicking.Components;
+using Content.Shared.Mind;
+using Content.Shared.Popups;
+
+namespace Content.Server.DeltaV.GameTicking.Rules;
+
+public sealed class DelayedRuleSystem : GameRuleSystem
+{
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+
+ protected override void Started(EntityUid uid, DelayedRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
+ {
+ base.Started(uid, component, gameRule, args);
+
+ component.DelayEnds = Timing.CurTime + component.Delay;
+ }
+
+ protected override void ActiveTick(EntityUid uid, DelayedRuleComponent component, GameRuleComponent gameRule, float frameTime)
+ {
+ base.ActiveTick(uid, component, gameRule, frameTime);
+
+ CheckDelay((uid, component));
+ }
+
+ ///
+ /// Checks if the delay has ended.
+ ///
+ private void CheckDelay(Entity ent)
+ {
+ if (!TryComp(ent, out var selection))
+ return;
+
+ // skip the delay if it's just 1 player, theres no plan to ruin if you are the only one
+ var ends = ent.Comp.DelayEnds;
+ if (ent.Comp.IgnoreSolo && selection.SelectedMinds.Count < 2)
+ ends = Timing.CurTime;
+
+ if (Timing.CurTime < ends)
+ return;
+
+ var comps = ent.Comp.DelayedComponents;
+ foreach (var (mindId, _) in selection.SelectedMinds)
+ {
+ // using OriginalOwnedEntity as the player might have ghosted to try become an evil ghost antag
+ if (!TryComp(mindId, out var mind) || !TryGetEntity(mind.OriginalOwnedEntity, out var mob))
+ continue;
+
+ var uid = mob.Value;
+ _popup.PopupEntity(Loc.GetString(ent.Comp.EndedPopup), uid, uid, PopupType.LargeCaution);
+ EntityManager.AddComponents(uid, comps);
+ }
+
+ RemCompDeferred(ent);
+ }
+}
diff --git a/Content.Server/DeltaV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs b/Content.Server/DeltaV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs
new file mode 100644
index 00000000000..03b7c54ad01
--- /dev/null
+++ b/Content.Server/DeltaV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs
@@ -0,0 +1,33 @@
+using Content.Server.Silicons.Laws;
+using Content.Shared.Emag.Components;
+using Content.Shared.Emag.Systems;
+using Content.Shared.Silicons.Laws;
+using Content.Shared.Silicons.Laws.Components;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Silicons.Borgs;
+
+///
+/// Handles lawset patching when switching type.
+/// If a borg is made emagged it needs its emag laws carried over.
+///
+public sealed partial class BorgSwitchableTypeSystem
+{
+ [Dependency] private readonly SiliconLawSystem _law = default!;
+
+ private void ConfigureLawset(EntityUid uid, ProtoId id)
+ {
+ var laws = _law.GetLawset(id);
+ _law.SetLaws(laws.Laws, uid);
+
+ // re-add law 0 and final law based on new lawset
+ if (CompOrNull(uid)?.OwnerName != null)
+ {
+ // raising the event manually to bypass re-emagging checks
+ var ev = new GotEmaggedEvent(uid); // user wont be used since OwnerName isnt null, safe to pass itself
+ RaiseLocalEvent(uid, ref ev);
+ }
+
+ // ion storms don't get mirrored because thats basically impossible to track
+ }
+}
diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs
index d61310908c3..80a3b405a84 100644
--- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs
+++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs
@@ -38,14 +38,17 @@ private void OnGetProgress(EntityUid uid, KillPersonConditionComponent comp, ref
args.Progress = GetProgress(target.Value, comp.RequireDead);
}
- private void OnPersonAssigned(EntityUid uid, PickRandomPersonComponent comp, ref ObjectiveAssignedEvent args)
+ private void OnPersonAssigned(Entity ent, ref ObjectiveAssignedEvent args)
{
- AssignRandomTarget(uid, args, _ => true);
+ AssignRandomTarget(ent, args, _ => true);
}
- private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref ObjectiveAssignedEvent args)
+ private void OnHeadAssigned(Entity ent, ref ObjectiveAssignedEvent args)
{
- AssignRandomTarget(uid, args, mind => HasComp(uid));
+ AssignRandomTarget(ent, args, mindId =>
+ TryComp(mindId, out var mind) &&
+ mind.OwnedEntity is { } ownedEnt &&
+ HasComp(ownedEnt));
}
private void AssignRandomTarget(EntityUid uid, ObjectiveAssignedEvent args, Predicate filter, bool fallbackToAny = true)
diff --git a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs
index d1a32a6a5ba..518652c2297 100644
--- a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs
+++ b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs
@@ -11,7 +11,7 @@ namespace Content.Server.Silicons.Borgs;
///
/// Server-side logic for borg type switching. Handles more heavyweight and server-specific switching logic.
///
-public sealed class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeSystem
+public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeSystem // DeltaV: Made partial
{
[Dependency] private readonly BorgSystem _borgSystem = default!;
[Dependency] private readonly ServerInventorySystem _inventorySystem = default!;
@@ -59,6 +59,11 @@ protected override void SelectBorgModule(Entity ent
}
}
+ // Begin DeltaV Code: Custom lawset patching
+ if (prototype.Lawset is {} lawset)
+ ConfigureLawset(ent, lawset);
+ // End DeltaV Code
+
// Configure special components
if (Prototypes.TryIndex(ent.Comp.SelectedBorgType, out var previousPrototype))
{
diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs
index 9a361132a5c..2cce871fb24 100644
--- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs
+++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs
@@ -131,9 +131,10 @@ private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent componen
component.Lawset = GetLawset(component.Laws);
// Add the first emag law before the others
+ var name = CompOrNull(uid)?.OwnerName ?? Name(args.UserUid); // DeltaV: Reuse emagger name if possible
component.Lawset?.Laws.Insert(0, new SiliconLaw
{
- LawString = Loc.GetString("law-emag-custom", ("name", Name(args.UserUid)), ("title", Loc.GetString(component.Lawset.ObeysTo))),
+ LawString = Loc.GetString("law-emag-custom", ("name", name), ("title", Loc.GetString(component.Lawset.ObeysTo))), // DeltaV: pass name from variable
Order = 0
});
diff --git a/Content.Server/_CD/Engraving/EngraveableComponent.cs b/Content.Server/_CD/Engraving/EngraveableComponent.cs
new file mode 100644
index 00000000000..f60ee3f584f
--- /dev/null
+++ b/Content.Server/_CD/Engraving/EngraveableComponent.cs
@@ -0,0 +1,32 @@
+namespace Content.Server._CD.Engraving;
+
+///
+/// Allows an items' description to be modified with an engraving
+///
+[RegisterComponent, Access(typeof(EngraveableSystem))]
+public sealed partial class EngraveableComponent : Component
+{
+ ///
+ /// Message given to user to notify them a message was sent
+ ///
+ [DataField]
+ public string EngravedMessage = string.Empty;
+
+ ///
+ /// The inspect text to use when there is no engraving
+ ///
+ [DataField]
+ public LocId NoEngravingText = "engraving-dogtags-no-message";
+
+ ///
+ /// The message to use when successfully engraving the item
+ ///
+ [DataField]
+ public LocId EngraveSuccessMessage = "engraving-dogtags-succeed";
+
+ ///
+ /// The inspect text to use when there is an engraving. The message will be shown seperately afterwards.
+ ///
+ [DataField]
+ public LocId HasEngravingText = "engraving-dogtags-has-message";
+}
diff --git a/Content.Server/_CD/Engraving/EngraveableSystem.cs b/Content.Server/_CD/Engraving/EngraveableSystem.cs
new file mode 100644
index 00000000000..370929511a5
--- /dev/null
+++ b/Content.Server/_CD/Engraving/EngraveableSystem.cs
@@ -0,0 +1,83 @@
+using Content.Server.Administration;
+using Content.Server.Administration.Logs;
+using Content.Server.Popups;
+using Content.Shared.Database;
+using Content.Shared.Popups;
+using Content.Shared.Examine;
+using Content.Shared.Verbs;
+using Robust.Shared.Player;
+using Robust.Shared.Utility;
+
+namespace Content.Server._CD.Engraving;
+
+public sealed class EngraveableSystem : EntitySystem
+{
+ [Dependency] private readonly IAdminLogManager _adminLogger = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly QuickDialogSystem _dialog = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnExamined);
+ SubscribeLocalEvent>(AddEngraveVerb);
+ }
+
+ private void OnExamined(Entity ent, ref ExaminedEvent args)
+ {
+ var msg = new FormattedMessage();
+ msg.AddMarkupOrThrow(Loc.GetString(ent.Comp.EngravedMessage == string.Empty
+ ? ent.Comp.NoEngravingText
+ : ent.Comp.HasEngravingText));
+
+ if (ent.Comp.EngravedMessage != string.Empty)
+ msg.AddMarkupPermissive(Loc.GetString(ent.Comp.EngravedMessage));
+
+ args.PushMessage(msg, 1);
+ }
+
+ private void AddEngraveVerb(Entity ent, ref GetVerbsEvent args)
+ {
+ // First check if it's already been engraved. If it has, don't let them do it again.
+ if (ent.Comp.EngravedMessage != string.Empty)
+ return;
+
+ // We need an actor to give the verb.
+ if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor))
+ return;
+
+ // Make sure ghosts can't engrave stuff.
+ if (!args.CanInteract)
+ return;
+
+ var engraveVerb = new ActivationVerb
+ {
+ Text = Loc.GetString("engraving-verb-engrave"),
+ Act = () =>
+ {
+ _dialog.OpenDialog(actor.PlayerSession,
+ Loc.GetString("engraving-verb-engrave"),
+ Loc.GetString("engraving-popup-ui-message"),
+ (string message) =>
+ {
+ // If either the actor or comp have magically vanished
+ if (actor.PlayerSession.AttachedEntity == null || !HasComp(ent))
+ return;
+
+ ent.Comp.EngravedMessage = message;
+ _popup.PopupEntity(Loc.GetString(ent.Comp.EngraveSuccessMessage),
+ actor.PlayerSession.AttachedEntity.Value,
+ actor.PlayerSession,
+ PopupType.Medium);
+ _adminLogger.Add(LogType.Action,
+ LogImpact.Low,
+ $"{ToPrettyString(actor.PlayerSession.AttachedEntity):player} engraved an item with message: {message}");
+ });
+ },
+ Impact = LogImpact.Low,
+ };
+ engraveVerb.Impact = LogImpact.Low;
+ args.Verbs.Add(engraveVerb);
+ }
+}
diff --git a/Content.Shared/Silicons/Borgs/BorgTypePrototype.cs b/Content.Shared/Silicons/Borgs/BorgTypePrototype.cs
index 1518cfdfe50..25190e09413 100644
--- a/Content.Shared/Silicons/Borgs/BorgTypePrototype.cs
+++ b/Content.Shared/Silicons/Borgs/BorgTypePrototype.cs
@@ -2,6 +2,7 @@
using Content.Shared.Inventory;
using Content.Shared.Radio;
using Content.Shared.Silicons.Borgs.Components;
+using Content.Shared.Silicons.Laws; // DeltaV
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
@@ -12,7 +13,7 @@ namespace Content.Shared.Silicons.Borgs;
/// Information for a borg type that can be selected by .
///
///
-[Prototype]
+[Prototype(-5)] // DeltaV - force load after shaders
public sealed partial class BorgTypePrototype : IPrototype
{
[ValidatePrototypeId]
@@ -83,6 +84,13 @@ public sealed partial class BorgTypePrototype : IPrototype
[DataField]
public EntProtoId[] DefaultModules = [];
+ ///
+ /// DeltaV: Lawset to use instead of crewsimov.
+ /// If the chassis is emagged or ion stormed this is ignored.
+ ///
+ [DataField]
+ public ProtoId? Lawset;
+
///
/// Additional components to add to the borg entity when this type is selected.
///
diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml
index 3e323712e81..a9d7ef4c038 100644
--- a/Resources/Changelog/DeltaVChangelog.yml
+++ b/Resources/Changelog/DeltaVChangelog.yml
@@ -1,41 +1,4 @@
Entries:
-- author: Adrian16199
- changes:
- - message: Laika no longer takes 200 damage before dying from critical.
- type: Fix
- id: 209
- time: '2024-01-19T20:57:11.0000000+00:00'
-- author: lleftTheDragon
- changes: []
- id: 210
- time: '2024-01-19T21:06:32.0000000+00:00'
-- author: DebugOk
- changes:
- - message: Enabled gamerule voting on periapsis
- type: Tweak
- - message: Enabled map voting on periapsis
- type: Tweak
- id: 211
- time: '2024-01-19T22:33:21.0000000+00:00'
-- author: DebugOk
- changes:
- - message: Added gridinv, sorry.
- type: Add
- id: 212
- time: '2024-01-21T18:58:28.0000000+00:00'
-- author: TadJohnson00
- changes:
- - message: Pride vend has received an adjusted inventory. Make sure to check out
- the new cloaks available!
- type: Tweak
- id: 213
- time: '2024-01-30T14:22:13.0000000+00:00'
-- author: Colin-Tel
- changes:
- - message: Updated Asterisk Station.
- type: Tweak
- id: 214
- time: '2024-01-30T21:09:41.0000000+00:00'
- author: DebugOk
changes:
- message: You should be able to exit cryo even after leaving now, meaning it just
@@ -3768,3 +3731,51 @@
id: 708
time: '2024-11-25T05:30:25.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/2211
+- author: deltanedas
+ changes:
+ - message: Initial Infecteds now get radio implants to communicate thanks to the
+ Syndicate.
+ type: Tweak
+ - message: Initial Infecteds now have to wait 5 minutes before they can turn, form
+ a plan!
+ type: Tweak
+ id: 709
+ time: '2024-11-26T12:23:26.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2194
+- author: Stop-Signs
+ changes:
+ - message: Omega particles are more deadly, Mystagogues beware!
+ type: Tweak
+ id: 710
+ time: '2024-11-26T18:19:14.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2292
+- author: Stop-Signs
+ changes:
+ - message: psych chems are no longer stronger nocturine
+ type: Tweak
+ id: 711
+ time: '2024-11-27T20:22:30.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2302
+- author: deltanedas
+ changes:
+ - message: Fixed borgs with special lawsets fixing their emag laws when switched
+ to.
+ type: Fix
+ id: 712
+ time: '2024-11-28T07:22:06.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2299
+- author: Kr8art
+ changes:
+ - message: Added customizable dogtags from Cosmatic Drift to the trinket loadout!
+ type: Add
+ id: 713
+ time: '2024-11-28T12:04:17.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2301
+- author: Kr8art
+ changes:
+ - message: The nuke core container now displays an appropriate message when hasty
+ syndicate agents try to insert the nuke core while it is still closed!
+ type: Fix
+ id: 714
+ time: '2024-11-28T19:36:26.0000000+00:00'
+ url: https://github.com/DeltaV-Station/Delta-v/pull/2309
diff --git a/Resources/Locale/en-US/_CD/engraving/engraving.ftl b/Resources/Locale/en-US/_CD/engraving/engraving.ftl
new file mode 100644
index 00000000000..fc6ca919ead
--- /dev/null
+++ b/Resources/Locale/en-US/_CD/engraving/engraving.ftl
@@ -0,0 +1,6 @@
+engraving-verb-engrave = Engrave
+engraving-popup-ui-message = Description
+
+engraving-dogtags-no-message = The dogtags don't seem to have any kind of engraving.
+engraving-dogtags-has-message = The dogtags are engraved with a message that reads:{" "}
+engraving-dogtags-succeed = You successfully engrave the dogtags with your message.
diff --git a/Resources/Locale/en-US/deltav/game-ticking/game-presets/preset-zombies.ftl b/Resources/Locale/en-US/deltav/game-ticking/game-presets/preset-zombies.ftl
new file mode 100644
index 00000000000..1bc0332154b
--- /dev/null
+++ b/Resources/Locale/en-US/deltav/game-ticking/game-presets/preset-zombies.ftl
@@ -0,0 +1,2 @@
+zombie-bioterrorist-role-greeting = You are a syndicate sponsored bioterrorist sent to overtake the station by use of the Romerol virus. Coordinate with your team, get supplies and prepare for your eventual transformation. Death to nanotrasen!
+zombie-bioterrorist-romerol-active = The romerol in your blood is now active, you are ready to transform!
diff --git a/Resources/Locale/en-US/nuke/nuke-core-container.ftl b/Resources/Locale/en-US/nuke/nuke-core-container.ftl
index 47ea15a8316..bbed978bd7e 100644
--- a/Resources/Locale/en-US/nuke/nuke-core-container.ftl
+++ b/Resources/Locale/en-US/nuke/nuke-core-container.ftl
@@ -1,2 +1,3 @@
nuke-core-container-whitelist-fail-popup = That doesn't fit into the container.
nuke-core-container-sealed-popup = The {$container} is sealed shut!
+nuke-core-container-closed-fail-popup = You need to open the container first!
diff --git a/Resources/Maps/arena.yml b/Resources/Maps/arena.yml
index 49b7daf6b60..dc404102aca 100644
--- a/Resources/Maps/arena.yml
+++ b/Resources/Maps/arena.yml
@@ -9348,8 +9348,7 @@ entities:
-4,-6:
0: 63247
-5,-6:
- 0: 64271
- 2: 1024
+ 0: 65295
-3,-8:
0: 16383
-3,-7:
@@ -9369,7 +9368,7 @@ entities:
-1,-7:
0: 65535
-1,-6:
- 3: 65520
+ 2: 65520
0: 4
-1,-9:
0: 64160
@@ -9380,7 +9379,7 @@ entities:
0,-7:
0: 57305
0,-6:
- 3: 4368
+ 2: 4368
0: 52416
-8,-8:
0: 65535
@@ -9840,15 +9839,15 @@ entities:
9,9:
1: 4080
9,10:
- 4: 273
- 5: 1092
+ 3: 273
+ 4: 1092
9,11:
1: 240
10,9:
1: 4080
10,10:
- 6: 273
- 7: 1092
+ 5: 273
+ 6: 1092
10,11:
1: 752
0: 28672
@@ -9857,13 +9856,13 @@ entities:
11,9:
1: 4080
11,10:
- 7: 1365
+ 6: 1365
11,11:
1: 35056
12,9:
1: 4080
12,10:
- 7: 273
+ 6: 273
0: 34816
12,11:
1: 5936
@@ -9883,14 +9882,15 @@ entities:
-3,10:
1: 62259
-3,11:
- 0: 819
+ 0: 947
1: 29772
-2,9:
0: 15
-2,10:
1: 63616
-2,11:
- 1: 32911
+ 1: 32863
+ 0: 160
-1,12:
1: 61457
0: 4078
@@ -10719,6 +10719,9 @@ entities:
0: 65535
16,9:
1: 240
+ 0: 13056
+ 16,10:
+ 0: 13107
12,13:
1: 61713
11,13:
@@ -10994,20 +10997,24 @@ entities:
0: 30464
18,2:
0: 12407
- 1: 32768
18,3:
- 0: 13107
- 1: 34952
+ 0: 15355
18,4:
- 0: 3059
+ 0: 3067
19,0:
1: 12847
19,1:
1: 13107
19,2:
- 1: 13107
+ 1: 3891
+ 19,3:
+ 0: 1911
+ 19,4:
+ 0: 52733
20,0:
1: 15
+ 20,3:
+ 1: 4096
16,7:
0: 61166
16,8:
@@ -11025,9 +11032,6 @@ entities:
0: 819
18,6:
0: 30583
- 19,4:
- 0: 19964
- 2: 32768
20,4:
0: 4369
1: 3808
@@ -11264,21 +11268,6 @@ entities:
- 0
- 0
- 0
- - volume: 2500
- temperature: 293.14975
- moles:
- - 20.078888
- - 75.53487
- - 0
- - 0
- - 0
- - 0
- - 0
- - 0
- - 0
- - 0
- - 0
- - 0
- volume: 2500
temperature: 235
moles:
@@ -11362,6 +11351,7 @@ entities:
id: Arena
- type: GasTileOverlay
- type: SpreaderGrid
+ - type: Shuttle
- proto: AirAlarm
entities:
- uid: 304
@@ -123391,12 +123381,12 @@ entities:
- type: Transform
pos: 43.567142,-35.436256
parent: 6747
-- proto: MaterialDiamond
+- proto: MaterialDiamond1
entities:
- uid: 4036
components:
- type: Transform
- pos: -35.668434,-47.688297
+ pos: -35.674225,-47.724026
parent: 6747
- proto: MaterialDurathread
entities:
@@ -148725,7 +148715,7 @@ entities:
- type: Transform
pos: 35.444176,-18.296202
parent: 6747
-- proto: RightArmBorgMining
+- proto: RightArmBorg
entities:
- uid: 10713
components:
@@ -155624,7 +155614,7 @@ entities:
- type: Transform
pos: -35.5,0.5
parent: 6747
-- proto: SuitStorageSec
+- proto: SuitStorageSecDeltaV
entities:
- uid: 684
components:
diff --git a/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml b/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml
index 05a7582cd35..2e428c8f8d9 100644
--- a/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml
@@ -95,8 +95,9 @@
productEntity: BaseBallBatHomeRun
icon:
entity: BaseBallBatHomeRun
+ discountCategory: usualDiscounts
discountDownTo:
- Telecrystal: 10
+ Telecrystal: 6
cost:
Telecrystal: 16
categories:
diff --git a/Resources/Prototypes/DeltaV/borg_types.yml b/Resources/Prototypes/DeltaV/borg_types.yml
index fd5be28db70..0fb7ab66153 100644
--- a/Resources/Prototypes/DeltaV/borg_types.yml
+++ b/Resources/Prototypes/DeltaV/borg_types.yml
@@ -18,9 +18,9 @@
- BorgModuleSecurityPatrol
- BorgModuleSecurityBastion
+ lawset: SiliconPolice
+
addComponents:
- - type: SiliconLawProvider
- laws: SiliconPolice
- type: FlashImmunity
- type: ShowMindShieldIcons
- type: ShowCriminalRecordIcons
diff --git a/Resources/Prototypes/Entities/Objects/Misc/plutonium_core.yml b/Resources/Prototypes/Entities/Objects/Misc/plutonium_core.yml
index 67910888871..bd2a0d871a9 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/plutonium_core.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/plutonium_core.yml
@@ -47,6 +47,7 @@
whitelist:
tags:
- PlutoniumCore
+ lockedFailPopup: nuke-core-container-closed-fail-popup
whitelistFailPopup: nuke-core-container-whitelist-fail-popup
- type: GenericVisualizer
visuals:
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 167a51e402c..2ed2f924da3 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -618,7 +618,7 @@
- type: AnomalousParticle
particleType: Default
severityOverride: true
- severityPerSeverityHit: 0.1
+ severityPerSeverityHit: 0.3 # DeltaV raised to .3 from .1
stabilityPerDestabilizingHit: 0.05
healthPerWeakeningeHit: 1
stabilityPerWeakeningeHit: -0.05
@@ -626,7 +626,7 @@
impactEffect: BulletImpactEffectKinetic
damage:
types:
- Heat: 20
+ Heat: 30 # DeltaV raised to 30 from 20
- type: entity
parent: AnomalousParticleDelta
diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml
index 8359a2fbd94..50de7c4b746 100644
--- a/Resources/Prototypes/GameRules/roundstart.yml
+++ b/Resources/Prototypes/GameRules/roundstart.yml
@@ -248,6 +248,13 @@
min: 600
max: 900
- type: ZombieRule
+ - type: DelayedRule # DeltaV: Grace period of 5 minutes before you can turn, to avoid a random passenger ruining your plan
+ delay: 300
+ delayedComponents:
+ - type: PendingZombie
+ - type: ZombifyOnDeath
+ - type: IncurableZombie
+ endedPopup: zombie-bioterrorist-romerol-active
- type: AntagSelection
definitions:
- prefRoles: [ InitialInfected ]
@@ -258,14 +265,19 @@
- ZombieImmune
- AntagImmune
briefing:
- text: zombie-patientzero-role-greeting
+ text: zombie-bioterrorist-role-greeting # DeltaV: Different greeting
color: Plum
sound: "/Audio/Ambience/Antag/zombie_start.ogg"
components:
- - type: PendingZombie
- - type: ZombifyOnDeath
- - type: IncurableZombie
+ # Begin DeltaV Removals: Moved to DelayedRule above
+ #- type: PendingZombie
+ #- type: ZombifyOnDeath
+ #- type: IncurableZombie
+ # End DeltaV Removals
- type: InitialInfected
+ - type: AutoImplant # DeltaV: Let them communicate to come up with a plan of action
+ implants:
+ - SyndicateRadioImplant
mindRoles:
- MindRoleInitialInfected
diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml
index ccf1bd50d39..d81dd6c6116 100644
--- a/Resources/Prototypes/Loadouts/loadout_groups.yml
+++ b/Resources/Prototypes/Loadouts/loadout_groups.yml
@@ -50,6 +50,7 @@
- SilverRing # DeltaV
- Cane # DeltaV
- WhiteCane #DeltaV
+ - CDDogtags # _CD
- type: loadoutGroup
id: Glasses
diff --git a/Resources/Prototypes/_CD/Entities/Objects/Misc/dogtags.yml b/Resources/Prototypes/_CD/Entities/Objects/Misc/dogtags.yml
new file mode 100644
index 00000000000..22a1b22a72f
--- /dev/null
+++ b/Resources/Prototypes/_CD/Entities/Objects/Misc/dogtags.yml
@@ -0,0 +1,14 @@
+- type: entity
+ id: CDDogtags
+ parent: ClothingNeckBase
+ name: dogtags
+ description: A set of dogtags, hanging from a small piece of cord for wearing and carrying.
+ components:
+ - type: Sprite
+ sprite: _CD/Objects/Misc/dogtags.rsi
+ layers:
+ - state: dogtag
+ - type: Clothing
+ sprite: _CD/Objects/Misc/dogtags.rsi
+ - type: Appearance
+ - type: Engraveable
diff --git a/Resources/Prototypes/_CD/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/_CD/Loadouts/Miscellaneous/trinkets.yml
new file mode 100644
index 00000000000..5c04fc51dac
--- /dev/null
+++ b/Resources/Prototypes/_CD/Loadouts/Miscellaneous/trinkets.yml
@@ -0,0 +1,5 @@
+- type: loadout
+ id: CDDogtags
+ storage:
+ back:
+ - CDDogtags
diff --git a/Resources/Prototypes/_CD/Reagents/medicine.yml b/Resources/Prototypes/_CD/Reagents/medicine.yml
index a198c7d3efa..945b261b436 100644
--- a/Resources/Prototypes/_CD/Reagents/medicine.yml
+++ b/Resources/Prototypes/_CD/Reagents/medicine.yml
@@ -206,36 +206,36 @@
damage:
types:
Poison: 0.5
- - !type:GenericStatusEffect
- conditions:
- - !type:ReagentThreshold
- reagent: Tranquinase # conflicts with many other meds
- min: 2.0
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- probability: 0.4
- - !type:GenericStatusEffect
- conditions:
- - !type:ReagentThreshold
- reagent: Soretizone # conflicts with many other meds
- min: 3.0
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- probability: 0.3
- - !type:GenericStatusEffect
- conditions:
- - !type:ReagentThreshold
- reagent: Agonolexyne # conflicts with many other meds
- min: 0.25
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- probability: 0.3
+ #- !type:GenericStatusEffect
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Tranquinase # conflicts with many other meds
+ #min: 2.0
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #probability: 0.4
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Soretizone # conflicts with many other meds
+ #min: 3.0
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #probability: 0.3
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Agonolexyne # conflicts with many other meds
+ #min: 0.25
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #probability: 0.3
- !type:PopupMessage
type: Local
visualType: Medium
@@ -344,15 +344,15 @@
conditions:
- !type:ReagentThreshold
min: 16.5
- - !type:GenericStatusEffect
- conditions:
- - !type:ReagentThreshold
- min: 20.0
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- probability: 0.1
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #conditions:
+ #- !type:ReagentThreshold
+ #min: 20.0
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #probability: 0.1
- !type:HealthChange # poisons you if you take way too much
conditions:
- !type:ReagentThreshold
@@ -525,25 +525,25 @@
- "reagent-effect-painkiller-normal3"
- "reagent-effect-painkiller-normal4"
probability: 0.085
- - !type:GenericStatusEffect
- probability: 0.1
- conditions:
- - !type:ReagentThreshold
- min: 14.5 # overdose knocks you out
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- - !type:GenericStatusEffect
- probability: 0.08
- conditions:
- - !type:ReagentThreshold
- reagent: Stubantazine
- min: 5 # taking with other painkillers will knock you out
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #probability: 0.1
+ #conditions:
+ #- !type:ReagentThreshold
+ #min: 14.5 # overdose knocks you out
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #probability: 0.08
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Stubantazine
+ #min: 5 # taking with other painkillers will knock you out
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
- !type:AdjustReagent
conditions:
- !type:ReagentThreshold
@@ -592,26 +592,26 @@
- "reagent-effect-painkiller-strong5"
- "reagent-effect-painkiller-strong6"
probability: 0.1
- - !type:GenericStatusEffect
- probability: 0.1
- conditions:
- - !type:ReagentThreshold
- reagent: Stubantazine
- min: 4 # taking with other painkillers will knock you out
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
- - !type:GenericStatusEffect
- probability: 0.15
- conditions:
- - !type:ReagentThreshold
- reagent: Soretizone
- min: 2 # taking with other painkillers will knock you out
- key: ForcedSleep
- component: ForcedSleeping
- refresh: false
- type: Add
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #probability: 0.1
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Stubantazine
+ #min: 4 # taking with other painkillers will knock you out
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
+ #- !type:GenericStatusEffect # DeltaV - Removed all psych med forcesleeps
+ #probability: 0.15
+ #conditions:
+ #- !type:ReagentThreshold
+ #reagent: Soretizone
+ #min: 2 # taking with other painkillers will knock you out
+ #key: ForcedSleep
+ #component: ForcedSleeping
+ #refresh: false
+ #type: Add
- !type:AdjustReagent
conditions:
- !type:ReagentThreshold
diff --git a/Resources/Prototypes/borg_types.yml b/Resources/Prototypes/borg_types.yml
index 1ebeb9112d2..72b5c954eb8 100644
--- a/Resources/Prototypes/borg_types.yml
+++ b/Resources/Prototypes/borg_types.yml
@@ -49,9 +49,7 @@
- BorgModuleRCD
- BorgModuleCable
- addComponents: # DeltaV: Custom lawset
- - type: SiliconLawProvider
- laws: Engineer
+ lawset: Engineer # DeltaV: Custom lawset
radioChannels:
- Engineering
@@ -123,9 +121,7 @@
- BorgModuleLightReplacer
- BorgModuleCleaning
- addComponents: # DeltaV: Custom lawset
- - type: SiliconLawProvider
- laws: Janitor
+ lawset: Janitor # DeltaV: Custom lawset
radioChannels:
- Science
@@ -165,6 +161,8 @@
- Science
- Medical
+ lawset: Medical # DeltaV: Custom lawset
+
addComponents:
- type: SolutionScanner
- type: ShowHealthBars
@@ -174,8 +172,6 @@
damageContainers:
- Biological
- type: FabricateCandy # Nyanotrasen - The medical cyborg can generate candies filled with medicine.
- - type: SiliconLawProvider # DeltaV: Custom lawset
- laws: Medical
# Visual
inventoryTemplateId: borgDutch
diff --git a/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/dogtag.png b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/dogtag.png
new file mode 100644
index 00000000000..05a5b71bc5e
Binary files /dev/null and b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/dogtag.png differ
diff --git a/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/equipped-NECK.png b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/equipped-NECK.png
new file mode 100644
index 00000000000..4d837168da6
Binary files /dev/null and b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/equipped-NECK.png differ
diff --git a/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/meta.json b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/meta.json
new file mode 100644
index 00000000000..da1b490e53b
--- /dev/null
+++ b/Resources/Textures/_CD/Objects/Misc/dogtags.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/a2d5ca6e69725341f0fa261a4a3f89c737e843b3/icons/obj/items/card.dmi",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dogtag"
+ },
+ {
+ "name": "equipped-NECK",
+ "directions": 4
+ }
+ ]
+}