mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 23:57:29 +00:00
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user