Merge remote-tracking branch 'refs/remotes/upstream/master' into 2024/05/02-Merge-master

# Conflicts:
#	Content.Server/Nyanotrasen/Carrying/CarryingSystem.cs
#	Content.Server/Pinpointer/NavMapSystem.cs
#	Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs
#	Content.Shared/Tag/TagSystem.cs
#	Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml
This commit is contained in:
null
2024-05-07 04:53:36 +02:00
54 changed files with 538 additions and 80 deletions
@@ -1,3 +1,4 @@
using System.Numerics;
using System.Threading;
using Content.Server.DoAfter;
using Content.Server.Body.Systems;
@@ -5,6 +6,7 @@ using Content.Server.Hands.Systems;
using Content.Server.Resist;
using Content.Server.Popups;
using Content.Server.Inventory;
using Content.Server.Nyanotrasen.Item.PseudoItem;
using Content.Shared.Climbing; // Shared instead of Server
using Content.Shared.Mobs;
using Content.Shared.DoAfter;
@@ -22,11 +24,14 @@ using Content.Shared.Pulling;
using Content.Shared.Standing;
using Content.Shared.ActionBlocker;
using Content.Shared.Inventory.VirtualItem;
using Content.Shared.Item;
using Content.Shared.Throwing;
using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Events;
using Content.Shared.Movement.Pulling.Systems;
using Content.Shared.Nyanotrasen.Item.PseudoItem;
using Content.Shared.Storage;
using Robust.Shared.Map.Components;
using Robust.Shared.Physics.Components;
@@ -45,11 +50,13 @@ namespace Content.Server.Carrying
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
[Dependency] private readonly RespiratorSystem _respirator = default!;
[Dependency] private readonly PseudoItemSystem _pseudoItem = default!; // Needed for fitting check
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CarriableComponent, GetVerbsEvent<AlternativeVerb>>(AddCarryVerb);
SubscribeLocalEvent<CarryingComponent, GetVerbsEvent<InnateVerb>>(AddInsertCarriedVerb);
SubscribeLocalEvent<CarryingComponent, VirtualItemDeletedEvent>(OnVirtualItemDeleted);
SubscribeLocalEvent<CarryingComponent, BeforeThrowEvent>(OnThrow);
SubscribeLocalEvent<CarryingComponent, EntParentChangedMessage>(OnParentChanged);
@@ -65,7 +72,6 @@ namespace Content.Server.Carrying
SubscribeLocalEvent<CarriableComponent, CarryDoAfterEvent>(OnDoAfter);
}
private void AddCarryVerb(EntityUid uid, CarriableComponent component, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanInteract || !args.CanAccess)
@@ -98,6 +104,33 @@ namespace Content.Server.Carrying
args.Verbs.Add(verb);
}
private void AddInsertCarriedVerb(EntityUid uid, CarryingComponent component, GetVerbsEvent<InnateVerb> args)
{
// If the person is carrying someone, and the carried person is a pseudo-item, and the target entity is a storage,
// then add an action to insert the carried entity into the target
var toInsert = args.Using;
if (toInsert is not { Valid: true } || !args.CanAccess || !TryComp<PseudoItemComponent>(toInsert, out var pseudoItem))
return;
if (!TryComp<StorageComponent>(args.Target, out var storageComp))
return;
if (!_pseudoItem.CheckItemFits((toInsert.Value, pseudoItem), (args.Target, storageComp)))
return;
InnateVerb verb = new()
{
Act = () =>
{
DropCarried(uid, toInsert.Value);
_pseudoItem.TryInsert(args.Target, toInsert.Value, pseudoItem, storageComp);
},
Text = Loc.GetString("action-name-insert-other", ("target", toInsert)),
Priority = 2
};
args.Verbs.Add(verb);
}
/// <summary>
/// Since the carried entity is stored as 2 virtual items, when deleted we want to drop them.
/// </summary>
@@ -126,7 +159,12 @@ namespace Content.Server.Carrying
private void OnParentChanged(EntityUid uid, CarryingComponent component, ref EntParentChangedMessage args)
{
if (Transform(uid).MapUid != args.OldMapId)
var xform = Transform(uid);
if (xform.MapUid != args.OldMapId)
return;
// Do not drop the carried entity if the new parent is a grid
if (xform.ParentUid == xform.GridUid)
return;
DropCarried(uid, component.Carried);
@@ -159,9 +197,13 @@ namespace Content.Server.Carrying
if (!TryComp<CanEscapeInventoryComponent>(uid, out var escape))
return;
if (!args.HasDirectionalMovement)
return;
if (_actionBlockerSystem.CanInteract(uid, component.Carrier))
{
_escapeInventorySystem.AttemptEscape(uid, component.Carrier, escape, MassContest(uid, component.Carrier));
// Note: the mass contest is inverted because weaker entities are supposed to take longer to escape
_escapeInventorySystem.AttemptEscape(uid, component.Carrier, escape, MassContest(component.Carrier, uid));
}
}
@@ -210,12 +252,7 @@ namespace Content.Server.Carrying
}
private void StartCarryDoAfter(EntityUid carrier, EntityUid carried, CarriableComponent component)
{
TimeSpan length = TimeSpan.FromSeconds(3);
var mod = MassContest(carrier, carried);
if (mod != 0)
length /= mod;
TimeSpan length = GetPickupDuration(carrier, carried);
if (length >= TimeSpan.FromSeconds(9))
{
@@ -236,6 +273,9 @@ namespace Content.Server.Carrying
};
_doAfterSystem.TryStartDoAfter(args);
// Show a popup to the person getting picked up
_popupSystem.PopupEntity(Loc.GetString("carry-started", ("carrier", carrier)), carried, carried);
}
private void Carry(EntityUid carrier, EntityUid carried)
@@ -260,6 +300,26 @@ namespace Content.Server.Carrying
_actionBlockerSystem.UpdateCanMove(carried);
}
public bool TryCarry(EntityUid carrier, EntityUid toCarry, CarriableComponent? carriedComp = null)
{
if (!Resolve(toCarry, ref carriedComp, false))
return false;
if (!CanCarry(carrier, toCarry, carriedComp))
return false;
// The second one means that carrier is a pseudo-item and is inside a bag.
if (HasComp<BeingCarriedComponent>(carrier) || HasComp<ItemComponent>(carrier))
return false;
if (GetPickupDuration(carrier, toCarry) > TimeSpan.FromSeconds(9))
return false;
Carry(carrier, toCarry);
return true;
}
public void DropCarried(EntityUid carrier, EntityUid carried)
{
RemComp<CarryingComponent>(carrier); // get rid of this first so we don't recusrively fire that event
@@ -323,5 +383,43 @@ namespace Content.Server.Carrying
return rollerPhysics.FixturesMass / targetPhysics.FixturesMass;
}
private TimeSpan GetPickupDuration(EntityUid carrier, EntityUid carried)
{
var length = TimeSpan.FromSeconds(3);
var mod = MassContest(carrier, carried);
if (mod != 0)
length /= mod;
return length;
}
public override void Update(float frameTime)
{
var query = EntityQueryEnumerator<BeingCarriedComponent>();
while (query.MoveNext(out var carried, out var comp))
{
var carrier = comp.Carrier;
if (carrier is not { Valid: true } || carried is not { Valid: true })
continue;
// SOMETIMES - when an entity is inserted into disposals, or a cryosleep chamber - it can get re-parented without a proper reparent event
// when this happens, it needs to be dropped because it leads to weird behavior
if (Transform(carried).ParentUid != carrier)
{
DropCarried(carrier, carried);
continue;
}
// Make sure the carried entity is always centered relative to the carrier, as gravity pulls can offset it otherwise
var xform = Transform(carried);
if (!xform.LocalPosition.Equals(Vector2.Zero))
{
xform.LocalPosition = Vector2.Zero;
}
}
query.Dispose();
}
}
}
@@ -1,6 +1,9 @@
using Content.Server.DoAfter;
using Content.Server.Carrying;
using Content.Server.DoAfter;
using Content.Server.Item;
using Content.Server.Popups;
using Content.Server.Storage.EntitySystems;
using Content.Shared.Bed.Sleep;
using Content.Shared.DoAfter;
using Content.Shared.IdentityManagement;
using Content.Shared.Item;
@@ -17,12 +20,14 @@ public sealed class PseudoItemSystem : SharedPseudoItemSystem
[Dependency] private readonly StorageSystem _storage = default!;
[Dependency] private readonly ItemSystem _item = default!;
[Dependency] private readonly DoAfterSystem _doAfter = default!;
[Dependency] private readonly CarryingSystem _carrying = default!;
[Dependency] private readonly PopupSystem _popup = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PseudoItemComponent, GetVerbsEvent<AlternativeVerb>>(AddInsertAltVerb);
SubscribeLocalEvent<PseudoItemComponent, TryingToSleepEvent>(OnTrySleeping);
}
private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent<AlternativeVerb> args)
@@ -53,4 +58,25 @@ public sealed class PseudoItemSystem : SharedPseudoItemSystem
};
args.Verbs.Add(verb);
}
protected override void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, GettingPickedUpAttemptEvent args)
{
// Try to pick the entity up instead first
if (args.User != args.Item && _carrying.TryCarry(args.User, uid))
{
args.Cancel();
return;
}
// If could not pick up, just take it out onto the ground as per default
base.OnGettingPickedUpAttempt(uid, component, args);
}
// Show a popup when a pseudo-item falls asleep inside a bag.
private void OnTrySleeping(EntityUid uid, PseudoItemComponent component, TryingToSleepEvent args)
{
var parent = Transform(uid).ParentUid;
if (!HasComp<SleepingComponent>(uid) && parent is { Valid: true } && HasComp<AllowsSleepInsideComponent>(parent))
_popup.PopupEntity(Loc.GetString("popup-sleep-in-bag", ("entity", uid)), uid);
}
}
@@ -15,4 +15,10 @@ public sealed partial class CanEscapeInventoryComponent : Component
[DataField("doAfter")]
public DoAfterId? DoAfter;
/// <summary>
/// DeltaV - action to cancel inventory escape. Added dynamically.
/// </summary>
[DataField]
public EntityUid? EscapeCancelAction;
}
@@ -5,6 +5,7 @@ using Content.Shared.Inventory;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Storage.Components;
using Content.Shared.ActionBlocker;
using Content.Shared.Actions;
using Content.Shared.DoAfter;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction.Events;
@@ -13,6 +14,7 @@ using Content.Shared.Movement.Events;
using Content.Shared.Resist;
using Content.Shared.Storage;
using Robust.Shared.Containers;
using Robust.Shared.Prototypes;
namespace Content.Server.Resist;
@@ -24,11 +26,17 @@ public sealed class EscapeInventorySystem : EntitySystem
[Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly CarryingSystem _carryingSystem = default!; // Carrying system from Nyanotrasen.
[Dependency] private readonly SharedActionsSystem _actions = default!; // DeltaV
/// <summary>
/// You can't escape the hands of an entity this many times more massive than you.
/// </summary>
public const float MaximumMassDisadvantage = 6f;
/// <summary>
/// DeltaV - action to cancel inventory escape
/// </summary>
[ValidatePrototypeId<EntityPrototype>]
private readonly string _escapeCancelAction = "ActionCancelEscape";
public override void Initialize()
{
@@ -37,6 +45,7 @@ public sealed class EscapeInventorySystem : EntitySystem
SubscribeLocalEvent<CanEscapeInventoryComponent, MoveInputEvent>(OnRelayMovement);
SubscribeLocalEvent<CanEscapeInventoryComponent, EscapeInventoryEvent>(OnEscape);
SubscribeLocalEvent<CanEscapeInventoryComponent, DroppedEvent>(OnDropped);
SubscribeLocalEvent<CanEscapeInventoryComponent, EscapeInventoryCancelActionEvent>(OnCancelEscape); // DeltaV
}
private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent component, ref MoveInputEvent args)
@@ -83,12 +92,20 @@ public sealed class EscapeInventorySystem : EntitySystem
_popupSystem.PopupEntity(Loc.GetString("escape-inventory-component-start-resisting"), user, user);
_popupSystem.PopupEntity(Loc.GetString("escape-inventory-component-start-resisting-target"), container, container);
// DeltaV - escape cancel action
if (component.EscapeCancelAction is not { Valid: true })
_actions.AddAction(user, ref component.EscapeCancelAction, _escapeCancelAction);
}
private void OnEscape(EntityUid uid, CanEscapeInventoryComponent component, EscapeInventoryEvent args)
{
component.DoAfter = null;
// DeltaV - remove cancel action regardless of do-after result
_actions.RemoveAction(uid, component.EscapeCancelAction);
component.EscapeCancelAction = null;
if (args.Handled || args.Cancelled)
return;
@@ -108,4 +125,14 @@ public sealed class EscapeInventorySystem : EntitySystem
if (component.DoAfter != null)
_doAfterSystem.Cancel(component.DoAfter);
}
// DeltaV
private void OnCancelEscape(EntityUid uid, CanEscapeInventoryComponent component, EscapeInventoryCancelActionEvent args)
{
if (component.DoAfter != null)
_doAfterSystem.Cancel(component.DoAfter);
_actions.RemoveAction(uid, component.EscapeCancelAction);
component.EscapeCancelAction = null;
}
}
+2 -7
View File
@@ -146,16 +146,11 @@ public static class SkinColor
/// <param name="skinColor">The skin color to blend with</param>
/// <param name="blendFactor">Blending factor (0.0 to 1.0)</param>
/// <returns>Tinted hue color</returns>
public static Color TintedHuesSkin(Color color, Color skinColor, float blendFactor = 0.5f)
public static Color TintedHuesSkin(Color color, Color skinColor, float blendFactor = 0.75f)
{
blendFactor = MathHelper.Clamp(blendFactor, 0.0f, 1.0f);
var r = MathHelper.Lerp(skinColor.R, color.R, blendFactor);
var g = MathHelper.Lerp(skinColor.G, color.G, blendFactor);
var b = MathHelper.Lerp(skinColor.B, color.B, blendFactor);
var a = color.A;
return new Color(r, g, b, a);
return Color.InterpolateBetween(skinColor, color, blendFactor);
}
/// <summary>
@@ -0,0 +1,9 @@
namespace Content.Shared.Nyanotrasen.Item.PseudoItem;
/// <summary>
/// Signifies that pseudo-item creatures can sleep inside the container to which this component is applied.
/// </summary>
[RegisterComponent]
public sealed partial class AllowsSleepInsideComponent : Component
{
}
@@ -3,10 +3,10 @@ using Robust.Shared.Prototypes;
namespace Content.Shared.Nyanotrasen.Item.PseudoItem;
/// <summary>
/// For entities that behave like an item under certain conditions,
/// but not under most conditions.
/// </summary>
/// <summary>
/// For entities that behave like an item under certain conditions,
/// but not under most conditions.
/// </summary>
[RegisterComponent, AutoGenerateComponentState]
public sealed partial class PseudoItemComponent : Component
{
@@ -24,4 +24,10 @@ public sealed partial class PseudoItemComponent : Component
public Vector2i StoredOffset;
public bool Active = false;
/// <summary>
/// Action for sleeping while inside a container with <see cref="AllowsSleepInsideComponent"/>.
/// </summary>
[DataField]
public EntityUid? SleepAction;
}
@@ -11,7 +11,7 @@ namespace Content.Shared.Nyanotrasen.Item.PseudoItem;
/// </summary>
public partial class SharedPseudoItemSystem
{
protected bool CheckItemFits(Entity<PseudoItemComponent?> itemEnt, Entity<StorageComponent?> storageEnt)
public bool CheckItemFits(Entity<PseudoItemComponent?> itemEnt, Entity<StorageComponent?> storageEnt)
{
if (!Resolve(itemEnt, ref itemEnt.Comp) || !Resolve(storageEnt, ref storageEnt.Comp))
return false;
@@ -1,14 +1,18 @@
using Content.Shared.Actions;
using Content.Shared.Bed.Sleep;
using Content.Shared.DoAfter;
using Content.Shared.Hands;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction.Events;
using Content.Shared.Item;
using Content.Shared.Item.PseudoItem;
using Content.Shared.Popups;
using Content.Shared.Storage;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Tag;
using Content.Shared.Verbs;
using Robust.Shared.Containers;
using Robust.Shared.Prototypes;
namespace Content.Shared.Nyanotrasen.Item.PseudoItem;
@@ -18,9 +22,13 @@ public abstract partial class SharedPseudoItemSystem : EntitySystem
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
[ValidatePrototypeId<TagPrototype>]
private const string PreventTag = "PreventLabel";
[ValidatePrototypeId<EntityPrototype>]
private const string SleepActionId = "ActionSleep"; // The action used for sleeping inside bags. Currently uses the default sleep action (same as beds)
public override void Initialize()
{
@@ -64,7 +72,7 @@ public abstract partial class SharedPseudoItemSystem : EntitySystem
args.Verbs.Add(verb);
}
private bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component,
public bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component,
StorageComponent? storage = null)
{
if (!Resolve(storageUid, ref storage))
@@ -87,6 +95,10 @@ public abstract partial class SharedPseudoItemSystem : EntitySystem
return false;
}
// If the storage allows sleeping inside, add the respective action
if (HasComp<AllowsSleepInsideComponent>(storageUid))
_actions.AddAction(toInsert, ref component.SleepAction, SleepActionId, toInsert);
component.Active = true;
return true;
}
@@ -98,9 +110,11 @@ public abstract partial class SharedPseudoItemSystem : EntitySystem
RemComp<ItemComponent>(uid);
component.Active = false;
_actions.RemoveAction(uid, component.SleepAction); // Remove sleep action if it was added
}
private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component,
protected virtual void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component,
GettingPickedUpAttemptEvent args)
{
if (args.User == args.Item)
@@ -153,7 +167,11 @@ public abstract partial class SharedPseudoItemSystem : EntitySystem
NeedHand = true
};
_doAfter.TryStartDoAfter(args);
if (_doAfter.TryStartDoAfter(args))
{
// Show a popup to the person getting picked up
_popupSystem.PopupEntity(Loc.GetString("carry-started", ("carrier", inserter)), toInsert, toInsert);
}
}
private void OnAttackAttempt(EntityUid uid, PseudoItemComponent component, AttackAttemptEvent args)
@@ -0,0 +1,6 @@
using Content.Shared.Actions;
namespace Content.Shared.Resist;
// DeltaV
public sealed partial class EscapeInventoryCancelActionEvent : InstantActionEvent;
-15
View File
@@ -290,21 +290,6 @@ public sealed class TagSystem : EntitySystem
HasAnyTag(component, ids);
}
/// <summary>
/// Checks if any of the given tags have been added to an entity.
/// </summary>
/// <param name="entity">The entity to check.</param>
/// <param name="ids">The tags to check for.</param>
/// <returns>true if any of them exist, false otherwise.</returns>
/// <exception cref="UnknownPrototypeException">
/// Thrown if one of the ids represents an unregistered <see cref="TagPrototype"/>.
/// </exception>
public bool HasAnyTag(EntityUid entity, List<ProtoId<TagPrototype>> ids)
{
return TryComp<TagComponent>(entity, out var component) &&
HasAnyTag(component, ids);
}
/// <summary>
/// Checks if any of the given tags have been added to an entity.
/// </summary>
Binary file not shown.
@@ -0,0 +1,78 @@
# sorted alphabetically based on filenames in the folder Resources/Audio/DeltaV/Jukebox
# keep it ordered or I'll stab you
- files: ["a_different_reality_lagoona_remix.xm-MONO.ogg"]
license: "CC-BY-4.0"
copyright: "A.D.R (Lagoona rmx) by Andreas Viklund, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=134786"
- files: ["aggravated.it-MONO.ogg"]
license: "CC-BY-NC-SA-4.0"
copyright: "MEL -Aggravated Assault by melcom, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=176234"
- files: ["autumnal_equinox.xm-MONO.ogg"]
license: "CC-BY-NC-4.0"
copyright: "Autumnal Equinox by lemonade, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=143993"
- files: ["DOS=HIGH,_UMB.ogg"]
license: "Custom"
copyright: "DOS=HIGH, UMB by MASTER BOOT RECORD may be used non-commercially in the Delta-V fork of SS14. Converted from FLAC to OGG, then converted to mono."
source: "https://masterbootrecord.bandcamp.com/album/c-edit-config-sys"
- files: ["drozerix_-_alone.xm-MONO.ogg"]
license: "Custom"
copyright: "Alone by Drozerix, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=199968"
- files: ["drozerix_-_leisurely_voice.xm-MONO.ogg"]
license: "Custom"
copyright: "Leisurely Voice by Drozerix, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=183837"
- files: ["femtanyl_-_MURDER_EVERY_1_U_KNOW_feat._takihasdied_MONO.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "MURDER EVERY 1 U KNOW by Femtanyl featuring takihasdied, used with the understanding that this is a noncommercial project with credit given to the author, also converted to mono."
source: "https://femtanyl.bandcamp.com/track/murder-every-1-u-know-feat-takihasdied"
- files: ["hackers-MONO.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Hackers by Karl Casey @ White Bat Audio, converted to mono"
source: "https://www.youtube.com/watch?v=k8nHWwO1U2Q"
- files: ["marhaba-MONO.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Marhaba by Ian Alex Mac. Converted from MP3 to OGG, then converted to mono"
source: "https://freemusicarchive.org/music/Ian_Alex_Mac/Cues/Marhaba"
- files: ["Patricia_Taxxon_-_Minute_-_MONO.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Minute by Patricia Taxxon off the album 'Aeroplane,' converted to mono"
source: "https://patriciataxxon.bandcamp.com/track/minute"
- files: ["psirius_-_nymphs_of_the_forest.mptm-MONO.ogg"]
license: "CC-BY-NC-SA-4.0"
copyright: "Nymphs of the forest by Psirius, converted to mono"
source: "https://modarchive.org/index.php?request=view_by_moduleid&query=185545"
- files: ["Scratch_Post_-_OST_MONO.ogg"]
license: "CC-BY-SA-4.0"
copyright: "Scratch Post by Ghirardelli7 on SoundCloud, used with the understanding that credit is given to the artist."
source: "https://soundcloud.com/ghirardelli7/scratch-post-ost"
- files: ["shibamata-MONO.ogg"]
license: "Custom"
copyright: "Shibamata by .2gou / Dot Nigou. This track is not released under any formal licensure, and exists in the public domain in multiple forms, including remixes and mashups. Converted to mono."
source: "https://www.youtube.com/watch?v=FIw-HUP7XK0"
- files: ["space_asshole.ogg"]
license: "Custom"
copyright: "Space Asshole by Chris Remo is used with special permission from the author, under the condition that the project remains non-commercial and open source. The author also requested that a link to his bandcamp be included: https://chrisremo.bandcamp.com/ Converted from stereo to mono."
source: "https://idlethumbs.bandcamp.com/track/space-asshole"
- files: ["superposition-MONO.ogg"]
license: "CC-BY-NC-3.0"
copyright: "Superposition by Amie Waters, converted to mono"
source: "https://amiewaters.bandcamp.com/track/superposition-2"
Binary file not shown.
Binary file not shown.
Binary file not shown.
+72
View File
@@ -2182,3 +2182,75 @@
id: 328
time: '2024-04-29T10:16:53.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/718
- author: pissdemon
changes:
- message: Voice changer mask now lists vulpkanin, felinid and harpy accents correctly.
type: Fix
id: 329
time: '2024-05-03T21:49:12.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1162
- author: DangerRevolution
changes:
- message: Chameleon clothing can now be set to skirts again
type: Fix
- message: Harpies can now wear chameleon clothing
type: Fix
id: 330
time: '2024-05-03T23:49:06.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1110
- author: NullWanderer
changes:
- message: Fixed server performance issues
type: Fix
id: 331
time: '2024-05-04T16:26:37.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1163
- author: Colin-Tel
changes:
- message: Added a number of new tracks to the Jukebox.
type: Add
id: 332
time: '2024-05-04T16:59:28.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1130
- author: NullWanderer
changes:
- message: The color mixing applied to moths has been increased in strength by 25%.
type: Tweak
id: 333
time: '2024-05-06T15:27:27.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1015
- author: Mnemotechnician
changes:
- message: Carrying is less likely to behave erratically or suddenly interrupt now.
type: Fix
- message: You can now see when someone is trying to pick you up, and also you can
interrupt your attempt at escaping from their hands or inventory.
type: Add
- message: You can now properly take Felinids out of bags and place them inside.
type: Add
- message: Scientists have discovered that Felinids can sleep in bags.
type: Add
id: 334
time: '2024-05-06T18:21:07.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1118
- author: Lyndomen
changes:
- message: Syndicate Agents will no longer receive the "Become Psionic" objective.
type: Tweak
id: 335
time: '2024-05-06T22:02:34.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1166
- author: Lyndomen
changes:
- message: Psionic Mute now has a higher Glimmer threshold for when it may occur.
type: Tweak
id: 336
time: '2024-05-06T22:02:42.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1168
- author: Lyndomen
changes:
- message: Changed TC penalties for several roles! Atmosians rejoice.
type: Tweak
id: 337
time: '2024-05-06T22:04:00.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/1165
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
popup-sleep-in-bag = {THE($entity)} curls up and falls asleep.
@@ -1,3 +1,4 @@
carry-verb = Carry
carry-too-heavy = You're not strong enough.
carry-started = {THE($carrier)} is trying to pick you up!
@@ -0,0 +1,92 @@
# sorted alphabetically based on filenames in the folder Resources/Audio/DeltaV/Jukebox
# keep it ordered or I'll stab you
- type: jukebox
id: ADiffReal
name: Andreas Viklund - A.D.R (Lagoona rmx)
path:
path: /Audio/DeltaV/Jukebox/a_different_reality_lagoona_remix.xm-MONO.ogg
- type: jukebox
id: AggAss
name: melcom - Aggravated Assault
path:
path: /Audio/DeltaV/Jukebox/aggravated.it-MONO.ogg
- type: jukebox
id: AutEqu
name: lemonade - Autumnal Equinox
path:
path: /Audio/DeltaV/Jukebox/autumnal_equinox.xm-MONO.ogg
- type: jukebox
id: DosHighUmb
name: MASTER BOOT RECORD - DOS=HIGH, UMB
path:
path: /Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg
- type: jukebox
id: DrozAlone
name: Drozerix - Alone
path:
path: /Audio/DeltaV/Jukebox/drozerix_-_alone.xm-MONO.ogg
- type: jukebox
id: DrozLeisure
name: Drozerix - Leisurely Voice
path:
path: /Audio/DeltaV/Jukebox/drozerix_-_leisurely_voice.xm-MONO.ogg
- type: jukebox
id: FemtMurder
name: Femtanyl feat. takihasdied - MURDER EVERY 1 U KNOW
path:
path: /Audio/DeltaV/Jukebox/femtanyl_-_MURDER_EVERY_1_U_KNOW_feat._takihasdied_MONO.ogg
- type: jukebox
id: KCHaxors
name: Karl Casey @ White Bat Audio - Hackers
path:
path: /Audio/DeltaV/Jukebox/hackers-MONO.ogg
- type: jukebox
id: IanMarhaba
name: Ian Alex Mac. - Marhaba
path:
path: /Audio/DeltaV/Jukebox/marhaba-MONO.ogg
- type: jukebox
id: PTMinute
name: Patricia Taxxon - Minute
path:
path: /Audio/DeltaV/Jukebox/Patricia_Taxxon_-_Minute_-_MONO.ogg
- type: jukebox
id: NymphsForest
name: Psirius - Nymphs of the Forest
path:
path: /Audio/DeltaV/Jukebox/psirius_-_nymphs_of_the_forest.mptm-MONO.ogg
- type: jukebox
id: GhirScratch
name: ghirardelli7 - Scratch Post
path:
path: /Audio/DeltaV/Jukebox/Scratch_Post_-_OST_MONO.ogg
- type: jukebox
id: JukeShiba
name: Dot Nigou - Shibamata
path:
path: /Audio/DeltaV/Jukebox/shibamata-MONO.ogg
- type: jukebox
id: SpaceAsshowl
name: Chris Remo - Space Asshole
path:
path: /Audio/DeltaV/Jukebox/space_asshole-MONO.ogg
- type: jukebox
id: AmieSuperpos
name: Amie Waters - Superposition
path:
path: /Audio/DeltaV/Jukebox/superposition-MONO.ogg
@@ -0,0 +1,10 @@
- type: entity
id: ActionCancelEscape
name: Stop escaping
description: Calm down and sit peacefuly in your carrier's inventory
noSpawn: true
components:
- type: InstantAction
icon: DeltaV/Actions/escapeinventory.rsi/cancel-escape.png
event: !type:EscapeInventoryCancelActionEvent
useDelay: 2
@@ -1,6 +1,6 @@
- type: speechVerb
id: Vulpkanin
name: chat-speech-verb-name-vox
name: chat-speech-verb-name-vulpkanin
speechVerbStrings:
- chat-speech-verb-vulpkanin-1
- chat-speech-verb-vulpkanin-2
@@ -9,7 +9,7 @@
- type: speechVerb
id: Felinid
name: chat-speech-verb-name-vox
name: chat-speech-verb-name-felinid
speechVerbStrings:
- chat-speech-verb-felinid-1
- chat-speech-verb-felinid-2
@@ -18,7 +18,7 @@
- type: speechVerb
id: Harpy
name: chat-speech-verb-name-vox
name: chat-speech-verb-name-harpy
speechVerbStrings:
- chat-speech-verb-harpy-1
- chat-speech-verb-harpy-2
@@ -30,6 +30,7 @@
delay: 0.5
- type: ExplosionResistance
damageCoefficient: 0.9
- type: AllowsSleepInside # DeltaV - enable sleeping inside bags
- type: entity
parent: ClothingBackpack
@@ -36,6 +36,11 @@
- type: Clothing
slots: [innerclothing]
femaleMask: UniformTop
- type: Tag #Delta-V : Adds tags to fix the Syndicate Jumpskirt, which is parented to this? this needs to be updated with *every* new tag given to UnsensoredClothingUniformBase, as tags aren't inherited
tags:
- Skirt # Delta-V : Harpies can wear this
- ClothMade # Delta-V : Moths can eat this
- WhitelistChameleon # Delta-V : You can set Chameleon clothes to this.
- type: entity
@@ -59,7 +64,8 @@
- type: Clothing
slots: [innerclothing]
femaleMask: UniformTop
- type: Tag #DeltaV, needed for species with nonhuman legs/can only wear skirts
- type: Tag #Delta-V : Adds the Skirt tag so Harpies can wear this, this needs to be updated with *every* new tag given to UnsensoredClothingUniformBase, as tags aren't inherited
tags:
- Skirt
- ClothMade # Delta-V - allows moths to eat this
- Skirt # Delta-V : Harpies can wear this
- ClothMade # Delta-V : Moths can eat this
- WhitelistChameleon # Delta-V : You can set Chameleon clothes to this.
@@ -301,6 +301,7 @@
- PrisonUniform
- WhitelistChameleon
- Skirt # Delta-V - Skirt Tag so Harpies can wear it.
# Delta-V : This needs to be updated with every new tag given to ClothingUniformSkirtBase as tags aren't inherited.
- type: entity
parent: ClothingUniformSkirtBase
@@ -6,7 +6,8 @@
suffix: Chameleon
components:
- type: Tag
tags: [] # ignore "WhitelistChameleon" tag
tags:
- Skirt # Delta-V : Overwrites null tag so Harpies can wear chameleon suit #[] # ignore "WhitelistChameleon" tag
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/color.rsi
layers:
@@ -82,14 +82,15 @@
maximumGlimmer: 900
- type: NoosphericFryRule
#Deltav- was 200/500, now 500/900
- type: entity
id: PsionicCatGotYourTongue
parent: BaseGlimmerEvent
noSpawn: true
components:
- type: GlimmerEvent
minimumGlimmer: 200
maximumGlimmer: 500
minimumGlimmer: 500
maximumGlimmer: 900
glimmerBurnLower: 18
glimmerBurnUpper: 40
- type: PsionicCatGotYourTongueRule
@@ -9,28 +9,29 @@
stealGroup: AntiPsychicKnife
owner: job-name-mantis
- type: entity
id: BecomePsionicObjective
parent: BaseTraitorObjective
name: Become psionic
description: We need you to acquire psionics and keep them until your mission is complete.
noSpawn: true
components:
- type: NotJobsRequirement
jobs:
- Mime
- ForensicMantis
- type: Objective
difficulty: 2.5
#unique: false
icon:
sprite: Nyanotrasen/Icons/psi.rsi
state: psi
- type: ObjectiveBlacklistRequirement
blacklist:
components:
- BecomeGolemCondition
- type: BecomePsionicCondition
# /-- This objective does not encourage antagonism, thus 1984
#- type: entity
# id: BecomePsionicObjective
# parent: BaseTraitorObjective
# name: Become psionic
# description: We need you to acquire psionics and keep them until your mission is complete.
# noSpawn: true
# components:
# - type: NotJobsRequirement
# jobs:
# - Mime
# - ForensicMantis
# - type: Objective
# difficulty: 2.5
# #unique: false
# icon:
# sprite: Nyanotrasen/Icons/psi.rsi
# state: psi
# - type: ObjectiveBlacklistRequirement
# blacklist:
# components:
# - BecomeGolemCondition
# - type: BecomePsionicCondition
#- type: entity
# id: BecomeGolemObjective
@@ -12,7 +12,7 @@
startingGear: ForensicMantisGear
icon: "JobIconForensicMantis"
supervisors: job-supervisors-rd
antagAdvantage: 5 # DeltaV - From 4 to 5
antagAdvantage: 4 # DeltaV - Protolathe, Psionics, Has an objective item, anomaly stuff, glimmer factor
canBeAntag: true # DeltaV - Mantis is no longer a Detective
# whitelistRequired: true
access:
@@ -39,7 +39,7 @@
EscapeShuttleObjective: 1
# DieObjective: 0.05 # DeltaV - Disable the lrp objective aka murderbone justification
#HijackShuttleObjective: 0.02
BecomePsionicObjective: 1 # Nyanotrasen - Become Psionic objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml
#BecomePsionicObjective: 1 # Nyanotrasen - Become Psionic objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml
#BecomeGolemObjective: 0.5 # Nyanotrasen - Become a golem objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml
- type: weightedRandom
@@ -3,7 +3,6 @@
name: job-name-cargotech
description: job-description-cargotech
playTimeTracker: JobCargoTechnician
antagAdvantage: 2 # DeltaV - Reduced TC: External Access
startingGear: CargoTechGear
icon: "JobIconCargoTechnician"
supervisors: job-supervisors-qm
@@ -3,7 +3,7 @@
name: job-name-salvagespec
description: job-description-salvagespec
playTimeTracker: JobSalvageSpecialist
antagAdvantage: 3 # DeltaV - Reduced TC: External Access + Free hardsuit and weapons
antagAdvantage: 8 # DeltaV - Reduced TC: External Access + Free hardsuit and weapons
requirements:
- !type:DepartmentTimeRequirement
department: Logistics # DeltaV - Logistics Department replacing Cargo
@@ -3,6 +3,7 @@
name: job-name-bartender
description: job-description-bartender
playTimeTracker: JobBartender
antagAdvantage: 1 # DeltaV - Shotgun, and free room
requirements:
- !type:DepartmentTimeRequirement
department: Civilian
@@ -3,6 +3,7 @@
name: job-name-chaplain
description: job-description-chaplain
playTimeTracker: JobChaplain
antagAdvantage: 4 # DeltaV - Protolathe, Increased Psionics, Gib machine, anomaly access, glimmer factor
requirements:
- !type:DepartmentTimeRequirement
department: Epistemics # DeltaV - Epistemics Department replacing Science
@@ -3,7 +3,7 @@
name: job-name-lawyer
description: job-description-lawyer
playTimeTracker: JobLawyer
antagAdvantage: 2 # DeltaV - Reduced TC: Security Radio and Access
antagAdvantage: 4 # DeltaV - Reduced TC: Security Radio and Access
requirements:
- !type:OverallPlaytimeRequirement
time: 36000 # 10 hrs
@@ -10,7 +10,6 @@
icon: "JobIconServiceWorker"
supervisors: job-supervisors-service
canBeAntag: true # DeltaV - Can be antagonist
antagAdvantage: 1 # DeltaV - Reduced TC: Accesses
access:
- Service
- Maintenance
@@ -3,7 +3,7 @@
name: job-name-atmostech
description: job-description-atmostech
playTimeTracker: JobAtmosphericTechnician
antagAdvantage: 10 # DeltaV - Reduced TC: External Access + Fireaxe + Free Hardsuit
antagAdvantage: 4 # DeltaV - Reduced TC: External Access + Fireaxe + Free Hardsuit
requirements:
- !type:DepartmentTimeRequirement
department: Engineering
@@ -3,6 +3,7 @@
name: job-name-chemist
description: job-description-chemist
playTimeTracker: JobChemist
antagAdvantage: 4 # DeltaV - Synthesize any chem you want with little oversight.
requirements:
- !type:DepartmentTimeRequirement
department: Medical
@@ -3,6 +3,7 @@
name: job-name-research-assistant
description: job-description-research-assistant
playTimeTracker: JobResearchAssistant
antagAdvantage: 2 # DeltaV - Protolathe, anomaly stuff, glimmer factor
requirements:
# - !type:DepartmentTimeRequirement # DeltaV - Removes time limit
# department: Science
@@ -3,6 +3,7 @@
name: job-name-scientist
description: job-description-scientist
playTimeTracker: JobScientist
antagAdvantage: 2 # DeltaV - Protolathe, anomaly stuff, glimmer factor.
requirements:
- !type:DepartmentTimeRequirement
department: Epistemics # DeltaV - Epistemics Department replacing Science
Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

@@ -0,0 +1,14 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Duffelbag icon taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1 | Modified into cancel-escape.png by Mnemotechnician (github)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "cancel-escape"
}
]
}