Merge branch 'master' into Putting-Belt-In-Lathes

This commit is contained in:
SumofThreeParts 2026-07-24 13:04:08 -05:00 committed by GitHub
commit f3906de715
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 963 additions and 582 deletions

View File

@ -125,12 +125,12 @@ public sealed class ProjectileSystem : SharedProjectileSystem
RaiseLocalEvent(projectile, ref pierceEv);
// If the object won't be destroyed, it "tanks" the penetration hit.
if (damage.GetTotal() < damageRequired)
if (damage.GetTotal() < damageRequired && !pierceEv.Pierced) // DeltaV - Addition of the NT-3
{
return false;
}
if (!projectile.Comp.ProjectileSpent)
if (!projectile.Comp.ProjectileSpent && !pierceEv.Pierced) // DeltaV - Addition of the NT-3
{
projectile.Comp.PenetrationAmount += damageRequired;
// The projectile has dealt enough damage to be spent.
@ -139,7 +139,7 @@ public sealed class ProjectileSystem : SharedProjectileSystem
return false;
}
if (projectile.Comp.ProjectileSpent && pierceEv.Pierced) // DeltaV - Addition of the NT-3
if (projectile.Comp.ProjectileSpent)
{
return true;
}

View File

@ -1,4 +1,5 @@
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
namespace Content.Server._DV.Projectiles.Components;
@ -21,10 +22,14 @@ public sealed partial class PiercingProjectileComponent : Component
public float PierceCounter;
/// <summary>
/// The tag that will cause the piercing bullet to increment it's <see cref="PierceCounter"/>.
/// The whitelist for checking what increments the <see cref="PierceCounter"/>.
/// </summary>
/// <example>
/// If this has the tag "Wall" in it, any entity with the tag "Wall" will increment <see cref="PierceCounter"/>
/// upon being hit.
/// </example>
[DataField]
public List<ProtoId<TagPrototype>> PierceBlockTag = ["Wall", "Window"];
public EntityWhitelist PierceCounterWhitelist;
/// <summary>
/// The number of entities it is allowed to pierce before being deleted.

View File

@ -3,7 +3,7 @@ using Content.Shared.FixedPoint;
namespace Content.Server._DV.Projectiles.Events;
/// <summary>
/// Raised when a piercing projectile hits an entity that doesn't follow upstream piercing rules.
/// Raised when a piercing projectile that doesn't follow upstream piercing rules hits an entity.
/// </summary>
[ByRefEvent]
public record struct ProjectilePierceEvent(EntityUid Target, FixedPoint2 RequiredDamage, bool Pierced = false);

View File

@ -1,29 +1,33 @@
using Content.Server._DV.Projectiles.Components;
using Content.Server._DV.Projectiles.Events;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
namespace Content.Server._DV.Projectiles.Systems;
public sealed class PiercingProjectileSystem : EntitySystem
{
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
// Mobs return a required Damage amount of Float.MaxValue. Therefore, we need to check for absurdly high values.
private readonly int _indestructibleNumber = 20000000;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PiercingProjectileComponent, ProjectilePierceEvent>(OnPierce);
}
private void OnPierce(Entity<PiercingProjectileComponent> bullet, ref ProjectilePierceEvent args)
{
// If the target doesn't have any tags to stop the bullet from piercing, it's automatically true.
if (!_tagSystem.HasAnyTag(args.Target, bullet.Comp.PierceBlockTag))
if (_whitelist.IsWhitelistFail(bullet.Comp.PierceCounterWhitelist, args.Target))
{
args.Pierced = true;
return;
}
// If it does have the tag to stop it and enough health to count as "strongly armored", it'll block the bullet.
if (bullet.Comp.HealthThreshold < args.RequiredDamage)
if (bullet.Comp.HealthThreshold < args.RequiredDamage && args.RequiredDamage < _indestructibleNumber)
return;
if (bullet.Comp.Direction == null) // Get the direction of the bullet to determine which walls count.

View File

@ -392,7 +392,6 @@ public abstract partial class SharedBuckleSystem
if (TryComp<PhysicsComponent>(buckle, out var physics))
_physics.ResetDynamics(buckle, physics);
// TOOD: DV - This fails when you try to buckle the entity you're carrying to something. Figure out why later.
DebugTools.AssertEqual(xform.ParentUid, strap.Owner);
}

View File

@ -2,8 +2,7 @@ using Content.Shared.Armor; // DeltaV - Addition of HandHeldArmor
using Content.Shared.Atmos;
using Content.Shared.Camera;
using Content.Shared.Cuffs;
using Content.Shared.Damage; // DeltaV End - Addition of HandHeldArmor
using Content.Shared.Damage.Systems; // DeltaV End - Addition of HandHeldArmor
using Content.Shared.Damage.Systems; // DeltaV - Addition of HandHeldArmor
using Content.Shared.Hands.Components;
using Content.Shared.Movement.Systems;
using Content.Shared.Projectiles;

View File

@ -1,4 +1,4 @@
using Content.Shared._DV.Overlays;
using Content.Shared._DV.Overlays; // DeltaV
using Content.Shared._DV.Psionics.Events; // DeltaV
using Content.Shared.Armor;
using Content.Shared.Atmos;
@ -85,13 +85,15 @@ public partial class InventorySystem
SubscribeLocalEvent<InventoryComponent, WieldAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, UnwieldAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, IngestionAttemptEvent>(RefRelayInventoryEvent);
// DeltaV Start - Psionic Events
// DeltaV Start
// Psionic Events
SubscribeLocalEvent<InventoryComponent, DispelledEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, PsionicPowerUseAttemptEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, TargetedByPsionicPowerEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, NoosphericFryEvent>(RefRelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, WeightlessnessChangedEvent>(RefRelayInventoryEvent); // Heavy Clothing
// DeltaV End - Psionic Events
// Heavy Clothing
SubscribeLocalEvent<InventoryComponent, WeightlessnessChangedEvent>(RefRelayInventoryEvent);
// DeltaV End
// Eye/vision events
SubscribeLocalEvent<InventoryComponent, CanSeeAttemptEvent>(RelayInventoryEvent);

View File

@ -1,4 +1,5 @@
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems; // DeltaV
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Content.Shared.Doors.Components;
@ -19,6 +20,7 @@ namespace Content.Shared.Remotes.EntitySystems;
public abstract class SharedDoorRemoteSystem : EntitySystem
{
[Dependency] private readonly SharedAirlockSystem _airlock = default!;
[Dependency] private readonly AccessReaderSystem _accessReader = default!; // DeltaV
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedDoorSystem _doorSystem = default!;
[Dependency] private readonly SharedElectrocutionSystem _electrify = default!;
@ -96,6 +98,19 @@ public abstract class SharedDoorRemoteSystem : EntitySystem
else if (entity.Comp.RequireTagWhitelist)
return;
// Begin DeltaV - Emergency access only bypasses open/close; bolting and toggling emergency access still require actual access.
if (entity.Comp.Mode != OperatingMode.OpenClose
&& accessComponent != null
&& !_accessReader.IsAllowed(accessTarget, args.Target.Value, accessComponent))
{
if (isAirlock)
_doorSystem.Deny(args.Target.Value, doorComp, user: args.User, predicted: true);
_popup.PopupClient(Loc.GetString("door-remote-denied"), args.User, args.User);
return;
}
// End DeltaV
switch (entity.Comp.Mode)
{
case OperatingMode.OpenClose:

View File

@ -1,6 +1,5 @@
using Content.Shared.Examine;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Systems;
using Content.Shared.Stealth.Components;
using Robust.Shared.GameStates;
using Robust.Shared.Timing;

View File

@ -1,5 +1,6 @@
using Content.Shared._DV.Body.Components;
using Content.Shared._DV.Body.Events;
using Content.Shared.Buckle;
using Content.Shared.DoAfter;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
@ -13,6 +14,7 @@ public sealed class CPRSystem : EntitySystem
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly SharedBuckleSystem _buckle = default!;
public override void Initialize()
{
@ -85,7 +87,7 @@ public sealed class CPRSystem : EntitySystem
{
Act = () => StartCPR(user, target, cprComp.TimeLength),
Text = Loc.GetString("cpr-verb-start"),
Priority = 2,
Priority = _buckle.IsBuckled(target) ? 3 : 1, // Higher priority if they are buckled. Otherwise, this conflicts with trying to carry.
Disabled = alreadyAffected,
Message = alreadyAffected ? Loc.GetString("cpr-verb-disabled-description") : Loc.GetString("cpr-verb-description"),
};

View File

@ -30,6 +30,7 @@ using System.Numerics;
using Content.Shared._DV.Polymorph;
using Content.Shared._Floof.OfferItem;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Buckle;
namespace Content.Shared._DV.Carrying;
@ -70,7 +71,7 @@ public sealed class CarryingSystem : EntitySystem
SubscribeLocalEvent<BeingCarriedComponent, GettingInteractedWithAttemptEvent>(OnInteractedWith);
SubscribeLocalEvent<BeingCarriedComponent, PullAttemptEvent>(OnPullAttempt);
SubscribeLocalEvent<BeingCarriedComponent, StartClimbEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, BuckledEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, BuckledEvent>(OnBuckle);
SubscribeLocalEvent<BeingCarriedComponent, UnbuckledEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, StrappedEvent>(OnDrop);
SubscribeLocalEvent<BeingCarriedComponent, UnstrappedEvent>(OnDrop);
@ -220,6 +221,13 @@ public sealed class CarryingSystem : EntitySystem
DropCarried(ent.Comp.Carrier, ent);
}
private void OnBuckle(Entity<BeingCarriedComponent> ent, ref BuckledEvent args)
{
// Buckling to a bed already handles the reparenting to the entity that the carried
// entity is buckled to, and then relays the BuckledEvent, so don't reparent to the grid.
DropCarried(ent.Comp.Carrier, ent, attachToGrid: false);
}
private void OnRemoved(Entity<BeingCarriedComponent> ent, ref ComponentRemove args)
{
/*
@ -327,9 +335,9 @@ public sealed class CarryingSystem : EntitySystem
return true;
}
public void DropCarried(EntityUid carrier, EntityUid carried)
public void DropCarried(EntityUid carrier, EntityUid carried, bool attachToGrid = true)
{
Drop(carried);
Drop(carried, attachToGrid);
CleanupCarrier(carrier, carried);
}
@ -341,12 +349,15 @@ public sealed class CarryingSystem : EntitySystem
_movementSpeed.RefreshMovementSpeedModifiers(carrier);
}
private void Drop(EntityUid carried)
private void Drop(EntityUid carried, bool attachToGrid = true)
{
RemComp<BeingCarriedComponent>(carried);
RemComp<KnockedDownComponent>(carried); // TODO SHITMED: make sure this doesnt let you make someone with no legs walk
_actionBlocker.UpdateCanMove(carried);
_transform.AttachToGridOrMap(carried);
// Some systems will handle re-parenting and then throw an event, and this changes the parent when it should not
if (attachToGrid)
_transform.AttachToGridOrMap(carried);
_standingState.Stand(carried);
}

View File

@ -348,5 +348,13 @@ Entries:
id: 38
time: '2026-07-19T16:18:47.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6317
- author: ShepardToTheStars
changes:
- message: '`entities` and a lot of other basic QUERY commare are now a DEBUG-level
commands.'
type: Tweak
id: 39
time: '2026-07-24T17:27:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6351
Name: DeltaVAdmin
Order: 5

View File

@ -1,58 +1,4 @@
Entries:
- author: snowywinters
changes:
- message: Captain's armored winter coat a alternative to the carapace
type: Add
- message: Changed the defense of captain's EVA suit and carapace
type: Tweak
id: 2092
time: '2026-01-23T19:31:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5227
- author: pootslap
changes:
- message: Listening Post Operatives only have the ability to hear binary comms
now. They can no longer talk on binary.
type: Tweak
id: 2093
time: '2026-01-23T19:35:58.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5243
- author: MilonPL
changes:
- message: The traits points bar will now show up correctly.
type: Fix
id: 2094
time: '2026-01-24T20:55:31.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5275
- author: MilonPL
changes:
- message: The uncloneable trait no longer prevents your character from getting
revived by defibrillators.
type: Fix
id: 2095
time: '2026-01-24T21:29:58.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5273
- author: Halo3moth
changes:
- message: The energy magnums "magnum" rounds no longer pierce windows
type: Fix
id: 2096
time: '2026-01-25T13:48:54.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5270
- author: Toby222
changes:
- message: Added buttons for build info and credits to the escape menu
type: Tweak
id: 2097
time: '2026-01-25T14:42:09.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5260
- author: MilonPL
changes:
- message: Added the "Marked as Protected" trait which makes you immune to becoming
a target objective.
type: Add
id: 2098
time: '2026-01-25T16:30:18.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5274
- author: AeraAuling
changes:
- message: Shadow damage no longer removes all your blood immediately
@ -4359,4 +4305,62 @@
id: 2592
time: '2026-07-21T18:44:49.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6358
- author: EmberAstra
changes:
- message: Cosmic Cult's Entropic Blades are now smaller (2x4 spaces)
type: Tweak
id: 2593
time: '2026-07-23T03:17:02.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6371
- author: turtlemutt
changes:
- message: Gave Lighthouse new doorbells and pagers. Have fun harassing departments!
type: Tweak
id: 2594
time: '2026-07-23T16:29:30.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6088
- author: ShepardToTheStars
changes:
- message: Buckling someone while they are being carried should work as intended
now.
type: Fix
- message: Picking someone up that is criticla will have priority over CPR unless
they are buckled to something.
type: Tweak
id: 2595
time: '2026-07-23T20:07:04.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6375
- author: ManuDemoen
changes:
- message: Emergency access no longer allows anyone with a remote to bolt the door
and checks if the remote has access to bolt.
type: Fix
id: 2596
time: '2026-07-24T17:28:01.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6141
- author: pootslap
changes:
- message: Monkeys now make sounds when using emotes!
type: Add
id: 2597
time: '2026-07-24T17:28:47.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5928
- author: keekee38
changes:
- message: The WT550 once again fires at 5.5 rounds a second and has 30-round magazines.
type: Tweak
id: 2598
time: '2026-07-24T17:34:48.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6364
- author: SirWarock
changes:
- message: The NT-3 cannot be parcel-wrapped anymore!
type: Tweak
- message: Adjusted the wielding sprites of the NT-3 to look less wrong.
type: Fix
- message: The NT-3 can pierce things again.
type: Fix
id: 2599
time: '2026-07-24T17:39:18.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5653
Order: 1

View File

@ -1,2 +0,0 @@
ent-MagazinePistolSubMachineGunTopMounted =
.desc = Unconventional 20-round top feeding magazine for the WT550 SMG. Intended to hold general-purpose kinetic ammunition.

File diff suppressed because it is too large Load Diff

View File

@ -1613,6 +1613,16 @@
Blunt: 1
clumsySound:
path: /Audio/Animals/monkey_scream.ogg
#Begin DeltaV additions
- type: Vocal
sounds:
Male: MonkeySounds
Female: MonkeySounds
Unsexed: MonkeySounds
wilhelmProbability: 0.01
- type: BodyEmotes
soundsId: MonkeySounds
#End DeltaV additions
- type: entity
@ -1647,6 +1657,16 @@
- type: GhostTakeoverAvailable
- type: Loadout
prototypes: [SyndicateOperativeGearMonkey]
#Begin DeltaV additions
- type: Vocal
sounds:
Male: MonkeySounds
Female: MonkeySounds
Unsexed: MonkeySounds
wilhelmProbability: 0.01
- type: BodyEmotes
soundsId: MonkeySounds
#End DeltaV additions
- type: entity
id: MobMonkeySyndicateAgent

View File

@ -115,7 +115,7 @@
whitelist:
tags:
- CartridgePistol
capacity: 20 # DeltaV
capacity: 30
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag_top_mounted.rsi
layers:

View File

@ -246,7 +246,7 @@
- type: ChamberMagazineAmmoProvider
boltClosed: null
- type: Gun
fireRate: 5 # DeltaV - Was 5.5
fireRate: 5.5
minAngle: 2 # DeltaV - Was 1
maxAngle: 16 # DeltaV - Was 6
angleIncrease: 1.5

View File

@ -65,6 +65,8 @@
- type: DisarmMalus
- type: Item
size: Huge
shape:
- 0,0,1,3
sprite: _DV/CosmicCult/Objects/cosmicsword-inhands.rsi
inhandVisuals:
left:

View File

@ -11,4 +11,8 @@
Structural: 20
penetrationThreshold: 200 # This is irrelevant - As long as it's above 0.
- type: PiercingProjectile
pierceCounterWhitelist:
tags:
- Wall
- Window
healthThreshold: 200 # Normal walls have a threshold of 200.

View File

@ -1,7 +1,7 @@
- type: entity
name: NT-3
parent: BaseItem # The base LightMachineGun had unwanted components.
id: WeaponLightMachinegGunNT3
name: NT-3
description: An ancient weapon from the old wars, refurbished and rebranded for NT's strongest stations.
components:
- type: Sprite
@ -18,7 +18,7 @@
- type: Item
size: Ginormous
shape:
- 0,0,4,3
- 0,0,6,3
- type: Clothing
sprite: _DV/Objects/Weapons/Guns/LMGs/NT-3.rsi
quickEquip: false
@ -44,6 +44,7 @@
soundEmpty:
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
- type: GunBipod
setupDelay: 2
minAngle: -12
maxAngle: -20
angleDecay: 4
@ -78,3 +79,6 @@
price: 500
- type: UseDelay
delay: 1
- type: Tag
tags:
- ParcelWrapBlacklist

View File

@ -739,6 +739,70 @@
Mew:
collection: FelinidMews
- type: emoteSounds
id: MonkeySounds
sounds:
Clap:
collection: Claps
params:
pitch: 1.3
ClapSingle:
collection: ClapSingle
Snap:
collection: Snaps
Salute:
collection: Salutes
Laugh:
path: /Audio/Animals/ferret_happy.ogg
params:
variation: 0.125
Cough:
path: /Audio/Effects/Diseases/monkey2.ogg
params:
pitch: 0.9
variation: 0.125
Whistle:
collection: Whistles
Sigh:
collection: MaleSigh
params:
variation: 0.125
Scream:
path: /Audio/Animals/monkey_scream.ogg
params:
variation: 0.125
Yawn:
path: /Audio/Animals/monkey_scream.ogg
params:
pitch: 0.6
variation: 0.125
volume: -4
Crying:
path: /Audio/Animals/ferret_happy.ogg
params:
pitch: 0.8
Snore:
collection: Snores
Weh:
collection: Weh
Hew:
collection: Hew
Honk:
collection: BikeHorn
Gasp:
collection: MaleGasp
params:
pitch: 1.3
DefaultDeathgasp:
collection: DeathGasp
Gulp:
path: /Audio/_Goobstation/Voice/Human/gulp.ogg
params:
pitch: 1.3
variation: 0.125
Blink: # Imp
collection: Blinks # Imp
- type: emoteSounds
id: SyntheticEmoteSounds
params:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1003 B

After

Width:  |  Height:  |  Size: 1001 B

View File

@ -1,23 +1,23 @@
- Flags: QUERY
Commands:
- entities
- nearby
- map
- physics
- player
- splat
- bin
- extremes
- reduce
- sortby
- sort
- sortdownby
- sortdown
- sortmapby
- sortmapdownby
- iota
- rep
- to
#- Flags: QUERY # DeltaV - moved to DEBUG
# Commands:
# - entities
# - nearby
# - map
# - physics
# - player
# - splat
# - bin
# - extremes
# - reduce
# - sortby
# - sort
# - sortdownby
# - sortdown
# - sortmapby
# - sortmapdownby
# - iota
# - rep
# - to
- Flags: DEBUG
Commands:
@ -155,7 +155,26 @@
- atanpi
- pick
- tee
# BEGIN DeltaV - PMs don't trust staff with upload so just tack it onto DEBUG i guess
- entities
- nearby
- map
- physics
- player
- splat
- bin
- extremes
- reduce
- sortby
- sort
- sortdownby
- sortdown
- sortmapby
- sortmapdownby
- iota
- rep
- to
# END DeltaV
- Flags: HOST
Commands:
- methods