mirror of
https://github.com/space-wizards/space-station-14.git
synced 2026-02-14 19:29:53 +01:00
Tweak Traitor Uplink - The Rest of the Uplink (#42582)
* jaws of death * I hate YAML * open the gate * I forgot about this one * I forgor * Fix croissant * this didn't work actually rip * made lights look better and undo on the boxing gloves * small change * Update Resources/Prototypes/Entities/Clothing/Hands/gloves.yml Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> * baguette contraband, eat your evidence. * suffix --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
b4a3358b4b
commit
76801bd8b2
@@ -1,5 +1,7 @@
|
||||
using System.ComponentModel.Design;
|
||||
using System.Linq;
|
||||
using Content.Client.Light.Components;
|
||||
using Content.Shared.Trigger.Components.Effects;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Animations;
|
||||
using Robust.Shared.Random;
|
||||
@@ -36,6 +38,10 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
container.LightBehaviour.UpdatePlaybackValues(container.Animation);
|
||||
_player.Play(uid, container.Animation, container.FullKey);
|
||||
}
|
||||
else
|
||||
{
|
||||
StopLightBehaviour((uid, component), container.LightBehaviour.ID, resetToOriginalSettings: true);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnLightStartup(Entity<LightBehaviourComponent> entity, ref ComponentStartup args)
|
||||
@@ -53,7 +59,7 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
{
|
||||
if (container.LightBehaviour.Enabled)
|
||||
{
|
||||
StartLightBehaviour(entity, container.LightBehaviour.ID);
|
||||
StartLightBehaviour((entity, entity), container.LightBehaviour.ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -82,12 +88,13 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
/// If specified light behaviours are already animating, calling this does nothing.
|
||||
/// Multiple light behaviours can have the same ID.
|
||||
/// </summary>
|
||||
public void StartLightBehaviour(Entity<LightBehaviourComponent> entity, string id = "")
|
||||
public void StartLightBehaviour(Entity<LightBehaviourComponent?> entity, string id = "")
|
||||
{
|
||||
if (!TryComp(entity, out AnimationPlayerComponent? animation))
|
||||
{
|
||||
if (!Resolve(entity, ref entity.Comp))
|
||||
return;
|
||||
|
||||
if (!TryComp(entity, out AnimationPlayerComponent? animation))
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var container in entity.Comp.Animations)
|
||||
{
|
||||
@@ -95,7 +102,7 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
{
|
||||
if (!_player.HasRunningAnimation(entity, animation, LightBehaviourComponent.KeyPrefix + container.Key))
|
||||
{
|
||||
CopyLightSettings(entity, container.LightBehaviour.Property);
|
||||
CopyLightSettings((entity, entity.Comp), container.LightBehaviour.Property);
|
||||
container.LightBehaviour.UpdatePlaybackValues(container.Animation);
|
||||
_player.Play(entity, container.Animation, LightBehaviourComponent.KeyPrefix + container.Key);
|
||||
}
|
||||
@@ -118,11 +125,9 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
var comp = entity.Comp;
|
||||
|
||||
var toRemove = new List<LightBehaviourComponent.AnimationContainer>();
|
||||
|
||||
foreach (var container in comp.Animations)
|
||||
foreach (var container in entity.Comp.Animations)
|
||||
{
|
||||
if (container.LightBehaviour.ID == id || id == string.Empty)
|
||||
{
|
||||
@@ -140,18 +145,24 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
|
||||
foreach (var container in toRemove)
|
||||
{
|
||||
comp.Animations.Remove(container);
|
||||
entity.Comp.Animations.Remove(container);
|
||||
}
|
||||
|
||||
if (resetToOriginalSettings && TryComp(entity, out PointLightComponent? light))
|
||||
if (resetToOriginalSettings)
|
||||
ResetToOriginalSettings(entity);
|
||||
|
||||
entity.Comp.OriginalPropertyValues.Clear();
|
||||
}
|
||||
|
||||
private void ResetToOriginalSettings(Entity<LightBehaviourComponent, PointLightComponent?> entity)
|
||||
{
|
||||
if (!Resolve(entity, ref entity.Comp2))
|
||||
return;
|
||||
|
||||
foreach (var (property, value) in entity.Comp1.OriginalPropertyValues)
|
||||
{
|
||||
foreach (var (property, value) in comp.OriginalPropertyValues)
|
||||
{
|
||||
AnimationHelper.SetAnimatableProperty(light, property, value);
|
||||
}
|
||||
AnimationHelper.SetAnimatableProperty(entity.Comp2, property, value);
|
||||
}
|
||||
|
||||
comp.OriginalPropertyValues.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -194,7 +205,7 @@ public sealed class LightBehaviorSystem : EntitySystem
|
||||
|
||||
if (playImmediately)
|
||||
{
|
||||
StartLightBehaviour(entity, behaviour.ID);
|
||||
StartLightBehaviour((entity, entity), behaviour.ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using Content.Client.Light.EntitySystems;
|
||||
using Content.Shared.Trigger;
|
||||
using Content.Shared.Trigger.Components.Effects;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Client.Trigger.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// This handles...
|
||||
/// </summary>
|
||||
public sealed class LightBehaviorOnTriggerSystem : XOnTriggerSystem<LightBehaviorOnTriggerComponent>
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly LightBehaviorSystem _light = default!;
|
||||
|
||||
protected override void OnTrigger(Entity<LightBehaviorOnTriggerComponent> ent, EntityUid target, ref TriggerEvent args)
|
||||
{
|
||||
if (_timing.IsFirstTimePredicted)
|
||||
_light.StartLightBehaviour(target, ent.Comp.Behavior);
|
||||
}
|
||||
}
|
||||
@@ -19,100 +19,23 @@ public sealed class JammerSystem : SharedJammerSystem
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<RadioJammerComponent, ActivateInWorldEvent>(OnActivate);
|
||||
SubscribeLocalEvent<ActiveRadioJammerComponent, PowerCellChangedEvent>(OnPowerCellChanged);
|
||||
SubscribeLocalEvent<RadioSendAttemptEvent>(OnRadioSendAttempt);
|
||||
}
|
||||
|
||||
// TODO: Very important: Make this charge rate based instead of updating every single tick
|
||||
// See BatteryComponent
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
var query = EntityQueryEnumerator<ActiveRadioJammerComponent, RadioJammerComponent>();
|
||||
|
||||
while (query.MoveNext(out var uid, out var _, out var jam))
|
||||
{
|
||||
|
||||
if (_powerCell.TryGetBatteryFromSlot(uid, out var battery))
|
||||
{
|
||||
if (!_battery.TryUseCharge(battery.Value.AsNullable(), GetCurrentWattage((uid, jam)) * frameTime))
|
||||
{
|
||||
ChangeLEDState(uid, false);
|
||||
RemComp<ActiveRadioJammerComponent>(uid);
|
||||
RemComp<DeviceNetworkJammerComponent>(uid);
|
||||
}
|
||||
else
|
||||
{
|
||||
var chargeFraction = _battery.GetChargeLevel(battery.Value.AsNullable());
|
||||
var chargeLevel = chargeFraction switch
|
||||
{
|
||||
> 0.50f => RadioJammerChargeLevel.High,
|
||||
< 0.15f => RadioJammerChargeLevel.Low,
|
||||
_ => RadioJammerChargeLevel.Medium,
|
||||
};
|
||||
ChangeChargeLevel(uid, chargeLevel);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void OnActivate(Entity<RadioJammerComponent> ent, ref ActivateInWorldEvent args)
|
||||
{
|
||||
if (args.Handled || !args.Complex)
|
||||
return;
|
||||
|
||||
var activated = !HasComp<ActiveRadioJammerComponent>(ent) &&
|
||||
_powerCell.TryGetBatteryFromSlot(ent.Owner, out var battery) &&
|
||||
_battery.GetCharge(battery.Value.AsNullable()) > GetCurrentWattage(ent);
|
||||
if (activated)
|
||||
{
|
||||
ChangeLEDState(ent.Owner, true);
|
||||
EnsureComp<ActiveRadioJammerComponent>(ent);
|
||||
EnsureComp<DeviceNetworkJammerComponent>(ent, out var jammingComp);
|
||||
_jammer.SetRange((ent, jammingComp), GetCurrentRange(ent));
|
||||
_jammer.AddJammableNetwork((ent, jammingComp), DeviceNetworkComponent.DeviceNetIdDefaults.Wireless.ToString());
|
||||
|
||||
// Add excluded frequencies using the system method
|
||||
if (ent.Comp.FrequenciesExcluded != null)
|
||||
{
|
||||
foreach (var freq in ent.Comp.FrequenciesExcluded)
|
||||
{
|
||||
_jammer.AddExcludedFrequency((ent, jammingComp), (uint)freq);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeLEDState(ent.Owner, false);
|
||||
RemCompDeferred<ActiveRadioJammerComponent>(ent);
|
||||
RemCompDeferred<DeviceNetworkJammerComponent>(ent);
|
||||
}
|
||||
var state = Loc.GetString(activated ? "radio-jammer-component-on-state" : "radio-jammer-component-off-state");
|
||||
var message = Loc.GetString("radio-jammer-component-on-use", ("state", state));
|
||||
Popup.PopupEntity(message, args.User, args.User);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnPowerCellChanged(Entity<ActiveRadioJammerComponent> ent, ref PowerCellChangedEvent args)
|
||||
{
|
||||
if (args.Ejected)
|
||||
{
|
||||
ChangeLEDState(ent.Owner, false);
|
||||
RemCompDeferred<ActiveRadioJammerComponent>(ent);
|
||||
}
|
||||
SubscribeLocalEvent<RadioReceiveAttemptEvent>(OnRadioReceiveAttempt);
|
||||
}
|
||||
|
||||
private void OnRadioSendAttempt(ref RadioSendAttemptEvent args)
|
||||
{
|
||||
if (ShouldCancelSend(args.RadioSource, args.Channel.Frequency))
|
||||
{
|
||||
if (ShouldCancel(args.RadioSource, args.Channel.Frequency))
|
||||
args.Cancelled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldCancelSend(EntityUid sourceUid, int frequency)
|
||||
private void OnRadioReceiveAttempt(ref RadioReceiveAttemptEvent args)
|
||||
{
|
||||
if (ShouldCancel(args.RadioReceiver, args.Channel.Frequency))
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
private bool ShouldCancel(EntityUid sourceUid, int frequency)
|
||||
{
|
||||
var source = Transform(sourceUid).Coordinates;
|
||||
var query = EntityQueryEnumerator<ActiveRadioJammerComponent, RadioJammerComponent, TransformComponent>();
|
||||
@@ -120,7 +43,7 @@ public sealed class JammerSystem : SharedJammerSystem
|
||||
while (query.MoveNext(out var uid, out _, out var jam, out var transform))
|
||||
{
|
||||
// Check if this jammer excludes the frequency
|
||||
if (jam.FrequenciesExcluded != null && jam.FrequenciesExcluded.Contains(frequency))
|
||||
if (jam.FrequenciesExcluded.Contains(frequency))
|
||||
continue;
|
||||
|
||||
if (_transform.InRange(source, transform.Coordinates, GetCurrentRange((uid, jam))))
|
||||
|
||||
@@ -11,11 +11,11 @@ public sealed partial class PowerCellSystem
|
||||
[PublicAPI]
|
||||
public void SetDrawEnabled(Entity<PowerCellDrawComponent?> ent, bool enabled)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp, false) || ent.Comp.Enabled == enabled)
|
||||
return;
|
||||
|
||||
ent.Comp.Enabled = enabled;
|
||||
Dirty(ent, ent.Comp);
|
||||
if (Resolve(ent, ref ent.Comp, false) && ent.Comp.Enabled != enabled)
|
||||
{
|
||||
ent.Comp.Enabled = enabled;
|
||||
Dirty(ent, ent.Comp);
|
||||
}
|
||||
|
||||
if (TryGetBatteryFromSlot(ent.Owner, out var battery))
|
||||
_battery.RefreshChargeRate(battery.Value.AsNullable());
|
||||
|
||||
@@ -36,9 +36,7 @@ public sealed class ToggleCellDrawSystem : EntitySystem
|
||||
|
||||
private void OnToggled(Entity<ToggleCellDrawComponent> ent, ref ItemToggledEvent args)
|
||||
{
|
||||
var uid = ent.Owner;
|
||||
var draw = Comp<PowerCellDrawComponent>(uid);
|
||||
_cell.SetDrawEnabled((uid, draw), args.Activated);
|
||||
_cell.SetDrawEnabled(ent.Owner, args.Activated);
|
||||
}
|
||||
|
||||
private void OnEmpty(Entity<ToggleCellDrawComponent> ent, ref PowerCellSlotEmptyEvent args)
|
||||
|
||||
@@ -1,25 +1,67 @@
|
||||
using Content.Shared.DeviceNetwork.Components;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Verbs;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Radio.Components;
|
||||
using Content.Shared.DeviceNetwork.Systems;
|
||||
using Content.Shared.Item.ItemToggle;
|
||||
using Content.Shared.Item.ItemToggle.Components;
|
||||
using Content.Shared.Power;
|
||||
|
||||
namespace Content.Shared.Radio.EntitySystems;
|
||||
|
||||
public abstract class SharedJammerSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly ItemToggleSystem _itemToggle = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedDeviceNetworkJammerSystem _jammer = default!;
|
||||
[Dependency] protected readonly SharedPopupSystem Popup = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<RadioJammerComponent, ItemToggledEvent>(OnItemToggle);
|
||||
SubscribeLocalEvent<RadioJammerComponent, RefreshChargeRateEvent>(OnRefreshChargeRate);
|
||||
SubscribeLocalEvent<RadioJammerComponent, GetVerbsEvent<Verb>>(OnGetVerb);
|
||||
SubscribeLocalEvent<RadioJammerComponent, ExaminedEvent>(OnExamine);
|
||||
}
|
||||
|
||||
private void OnItemToggle(Entity<RadioJammerComponent> entity, ref ItemToggledEvent args)
|
||||
{
|
||||
if (args.Activated)
|
||||
{
|
||||
EnsureComp<ActiveRadioJammerComponent>(entity);
|
||||
EnsureComp<DeviceNetworkJammerComponent>(entity, out var jammingComp);
|
||||
_jammer.SetRange((entity, jammingComp), GetCurrentRange(entity));
|
||||
_jammer.AddJammableNetwork((entity, jammingComp), DeviceNetworkComponent.DeviceNetIdDefaults.Wireless.ToString());
|
||||
|
||||
// Add excluded frequencies using the system method
|
||||
foreach (var freq in entity.Comp.FrequenciesExcluded)
|
||||
{
|
||||
_jammer.AddExcludedFrequency((entity, jammingComp), (uint)freq);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RemCompDeferred<ActiveRadioJammerComponent>(entity);
|
||||
RemCompDeferred<DeviceNetworkJammerComponent>(entity);
|
||||
}
|
||||
|
||||
if (args.User == null)
|
||||
return;
|
||||
|
||||
var state = Loc.GetString(args.Activated ? "radio-jammer-component-on-state" : "radio-jammer-component-off-state");
|
||||
var message = Loc.GetString("radio-jammer-component-on-use", ("state", state));
|
||||
_popup.PopupPredicted(message, args.User.Value, args.User.Value);
|
||||
}
|
||||
|
||||
private void OnRefreshChargeRate(Entity<RadioJammerComponent> entity, ref RefreshChargeRateEvent args)
|
||||
{
|
||||
if (_itemToggle.IsActivated(entity.Owner))
|
||||
args.NewChargeRate -= GetCurrentWattage(entity);
|
||||
}
|
||||
|
||||
private void OnGetVerb(Entity<RadioJammerComponent> entity, ref GetVerbsEvent<Verb> args)
|
||||
{
|
||||
if (!args.CanAccess || !args.CanInteract)
|
||||
@@ -47,7 +89,7 @@ public abstract class SharedJammerSystem : EntitySystem
|
||||
// The range should be updated when it turns on again!
|
||||
_jammer.TrySetRange(entity.Owner, GetCurrentRange(entity));
|
||||
|
||||
Popup.PopupClient(Loc.GetString(setting.Message), user, user);
|
||||
_popup.PopupClient(Loc.GetString(setting.Message), user, user);
|
||||
},
|
||||
Text = Loc.GetString(setting.Name),
|
||||
};
|
||||
@@ -58,37 +100,26 @@ public abstract class SharedJammerSystem : EntitySystem
|
||||
|
||||
private void OnExamine(Entity<RadioJammerComponent> ent, ref ExaminedEvent args)
|
||||
{
|
||||
if (args.IsInDetailsRange)
|
||||
{
|
||||
var powerIndicator = HasComp<ActiveRadioJammerComponent>(ent)
|
||||
? Loc.GetString("radio-jammer-component-examine-on-state")
|
||||
: Loc.GetString("radio-jammer-component-examine-off-state");
|
||||
args.PushMarkup(powerIndicator);
|
||||
if (!args.IsInDetailsRange)
|
||||
return;
|
||||
|
||||
var powerLevel = Loc.GetString(ent.Comp.Settings[ent.Comp.SelectedPowerLevel].Name);
|
||||
var switchIndicator = Loc.GetString("radio-jammer-component-switch-setting", ("powerLevel", powerLevel));
|
||||
args.PushMarkup(switchIndicator);
|
||||
}
|
||||
var powerIndicator = _itemToggle.IsActivated(ent.Owner)
|
||||
? Loc.GetString("radio-jammer-component-examine-on-state")
|
||||
: Loc.GetString("radio-jammer-component-examine-off-state");
|
||||
args.PushMarkup(powerIndicator);
|
||||
|
||||
var powerLevel = Loc.GetString(ent.Comp.Settings[ent.Comp.SelectedPowerLevel].Name);
|
||||
var switchIndicator = Loc.GetString("radio-jammer-component-switch-setting", ("powerLevel", powerLevel));
|
||||
args.PushMarkup(switchIndicator);
|
||||
}
|
||||
|
||||
public float GetCurrentWattage(Entity<RadioJammerComponent> jammer)
|
||||
private float GetCurrentWattage(Entity<RadioJammerComponent> jammer)
|
||||
{
|
||||
return jammer.Comp.Settings[jammer.Comp.SelectedPowerLevel].Wattage;
|
||||
}
|
||||
|
||||
public float GetCurrentRange(Entity<RadioJammerComponent> jammer)
|
||||
protected float GetCurrentRange(Entity<RadioJammerComponent> jammer)
|
||||
{
|
||||
return jammer.Comp.Settings[jammer.Comp.SelectedPowerLevel].Range;
|
||||
}
|
||||
|
||||
protected void ChangeLEDState(Entity<AppearanceComponent?> ent, bool isLEDOn)
|
||||
{
|
||||
_appearance.SetData(ent, RadioJammerVisuals.LEDOn, isLEDOn, ent.Comp);
|
||||
}
|
||||
|
||||
protected void ChangeChargeLevel(Entity<AppearanceComponent?> ent, RadioJammerChargeLevel chargeLevel)
|
||||
{
|
||||
_appearance.SetData(ent, RadioJammerVisuals.ChargeLevel, chargeLevel, ent.Comp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Trigger.Components.Effects;
|
||||
|
||||
/// <summary>
|
||||
/// Plays a light behavior on the target when this trigger is activated, of note is that the entity needs a PointLightComponent
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class LightBehaviorOnTriggerComponent : BaseXOnTriggerComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// The light behavior we're triggering.
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
public string Behavior = string.Empty;
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Numerics;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
@@ -12,10 +13,10 @@ namespace Content.Shared.Trigger.Components.Effects;
|
||||
public sealed partial class ScramOnTriggerComponent : BaseXOnTriggerComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Up to how far to teleport the entity.
|
||||
/// Up to how far to teleport the entity. Represented with X as Min Radius, and Y as Max Radius
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public float TeleportRadius = 100f;
|
||||
public Vector2 TeleportRadius = new (10f, 15f);
|
||||
|
||||
/// <summary>
|
||||
/// the sound to play when teleporting.
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared.Maps;
|
||||
using Content.Shared.Movement.Pulling.Components;
|
||||
using Content.Shared.Movement.Pulling.Systems;
|
||||
@@ -50,7 +51,7 @@ public sealed class ScramOnTriggerSystem : XOnTriggerSystem<ScramOnTriggerCompon
|
||||
/// null if no tile is found within a certain number of tries.
|
||||
/// </summary>
|
||||
/// <remarks> Trends towards the outer radius. Compensates for small grids. </remarks>
|
||||
private EntityCoordinates? SelectRandomTileInRange(EntityUid uid, float radius, int tries = 40, PhysicsComponent? physicsComponent = null)
|
||||
private EntityCoordinates? SelectRandomTileInRange(EntityUid uid, Vector2 radius, int tries = 40, PhysicsComponent? physicsComponent = null)
|
||||
{
|
||||
var userCoords = Transform(uid).Coordinates;
|
||||
EntityCoordinates? targetCoords = null;
|
||||
@@ -68,7 +69,7 @@ public sealed class ScramOnTriggerSystem : XOnTriggerSystem<ScramOnTriggerCompon
|
||||
// i = A percentage based on the current try count, which results in each
|
||||
// subsequent try landing closer and closer towards the entity.
|
||||
// Beneficial for smaller maps, especially when the radius is large.
|
||||
var distance = radius * MathF.Sqrt(_random.NextFloat()) * (1 - (float)i / tries);
|
||||
var distance = (radius.Y - radius.X) * MathF.Sqrt(_random.NextFloat()) * (1 - (float)i / tries) + radius.X;
|
||||
|
||||
// We then offset the user coords from a random angle * distance
|
||||
var tempTargetCoords = userCoords.Offset(_random.NextAngle().ToVec() * distance);
|
||||
|
||||
@@ -202,6 +202,9 @@ uplink-singularity-beacon-desc = A device that attracts singularities. Has to be
|
||||
uplink-antimov-law-name = Antimov Law Circuit
|
||||
uplink-antimov-law-desc = A very dangerous Lawset to use when you want to cause the A.I. to go haywire, use with caution.
|
||||
|
||||
uplink-syndimov-law-name = Syndi Law Circuit
|
||||
uplink-syndimov-law-desc = A subversive Lawset to use when you want to turn the A.I. to your side, use as much as possible.
|
||||
|
||||
# Implants
|
||||
uplink-storage-implanter-name = Storage Implanter
|
||||
uplink-storage-implanter-desc = Hide goodies inside of yourself with new bluespace technology!
|
||||
@@ -236,8 +239,8 @@ uplink-micro-bomb-implanter-desc = Explode on death or manual activation with th
|
||||
uplink-radio-implanter-name = Radio Implanter
|
||||
uplink-radio-implanter-desc = Implants a Syndicate radio, allowing covert communication without a headset.
|
||||
|
||||
uplink-voice-mask-implanter-name = Voice Mask Implanter
|
||||
uplink-voice-mask-implanter-desc = Modifies your vocal cords to be able to sound like anyone you could imagine.
|
||||
uplink-voice-mask-implanter-name = Identity Mask Implanter
|
||||
uplink-voice-mask-implanter-desc = Modifies your vocal cords and facial structure to be able to mimic anyone you could imagine.
|
||||
|
||||
# Bundles
|
||||
uplink-observation-kit-name = Observation Kit
|
||||
@@ -295,7 +298,7 @@ uplink-starter-kit-desc = Contains 40 telecrystals of basic operative gear. For
|
||||
uplink-toolbox-name = Toolbox
|
||||
uplink-toolbox-desc = A full compliment of tools for the mechanically inclined traitor. Includes a pair of insulated combat gloves and a syndicate gas mask as well.
|
||||
|
||||
uplink-syndicate-jaws-of-life-name = Jaws Of Life
|
||||
uplink-syndicate-jaws-of-life-name = Jaws Of Death
|
||||
uplink-syndicate-jaws-of-life-desc = A combined prying and cutting tool. Useful for entering the station or its departments. Can even open bolted doors!
|
||||
|
||||
uplink-duffel-surgery-name = Surgical Duffel Bag
|
||||
@@ -333,7 +336,7 @@ uplink-chimp-upgrade-kit-name = C.H.I.M.P. Handcannon Upgrade Chip
|
||||
uplink-chimp-upgrade-kit-desc = Insert this chip into a standard C.H.I.M.P. handcannon to allow it to fire omega particles. Omega particles inflict severe burns and cause anomalies to go supercritical.
|
||||
|
||||
uplink-proximity-mine-name = Proximity Mine
|
||||
uplink-proximity-mine-desc = A mine disguised as a wet floor sign.
|
||||
uplink-proximity-mine-desc = A throwable mine disguised as a wet floor sign. Detonates on contact with almost anything, safety always off.
|
||||
|
||||
uplink-disposable-turret-name = Disposable Ballistic Turret
|
||||
uplink-disposable-turret-desc = Looks and functions like a normal electrical toolbox. Upon hitting the toolbox it will transform into a ballistic turret, theoretically shooting at anyone except members of the syndicate. Can be turned back into a toolbox using a screwdriver and repaired using a wrench.
|
||||
|
||||
@@ -95,8 +95,8 @@
|
||||
containers:
|
||||
storagebase: !type:AllSelector
|
||||
children:
|
||||
- id: SyndicateMicrowaveFlatpack
|
||||
- id: WeaponCroissant
|
||||
amount: 2
|
||||
- id: WeaponBaguette
|
||||
- id: SyndicateMicrowaveMachineCircuitboard
|
||||
- id: PaperWrittenCombatBakeryKit
|
||||
|
||||
@@ -124,24 +124,6 @@
|
||||
categories:
|
||||
- UplinkWeaponry
|
||||
|
||||
- type: listing
|
||||
id: UplinkDisposableTurret
|
||||
name: uplink-disposable-turret-name
|
||||
description: uplink-disposable-turret-desc
|
||||
productEntity: ToolboxElectricalTurretFilled
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
cost:
|
||||
Telecrystal: 6
|
||||
categories:
|
||||
- UplinkWeaponry
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkEshield
|
||||
name: uplink-eshield-name
|
||||
@@ -161,6 +143,20 @@
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: uplinkRiggedBoxingGloves
|
||||
name: uplink-rigged-boxing-gloves-name
|
||||
description: uplink-rigged-boxing-gloves-desc
|
||||
icon: { sprite: Clothing/Hands/Gloves/Boxing/boxingblue.rsi, state: icon }
|
||||
productEntity: ClothingHandsGlovesBoxingBlue # TODO Replace this with the random spawner when it's not bugged
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 8
|
||||
cost:
|
||||
Telecrystal: 10
|
||||
categories:
|
||||
- UplinkWeaponry
|
||||
|
||||
- type: listing
|
||||
id: UplinkSniperBundle
|
||||
name: uplink-sniper-bundle-name
|
||||
@@ -408,19 +404,6 @@
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
- type: listing
|
||||
id: UplinkWhiteholeGrenade
|
||||
name: uplink-whitehole-grenade-name
|
||||
description: uplink-whitehole-grenade-desc
|
||||
productEntity: WhiteholeGrenade
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
- type: listing
|
||||
id: UplinkGrenadePenguin
|
||||
name: uplink-penguin-grenade-name
|
||||
@@ -1049,6 +1032,24 @@
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
- type: listing
|
||||
id: UplinkDisposableTurret
|
||||
name: uplink-disposable-turret-name
|
||||
description: uplink-disposable-turret-desc
|
||||
productEntity: ToolboxElectricalTurretFilled
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkSyndicateMartyrModule
|
||||
name: uplink-syndicate-martyr-module-name
|
||||
@@ -1079,10 +1080,8 @@
|
||||
description: uplink-slipocalypse-clustersoap-desc
|
||||
productEntity: SlipocalypseClusterSoap
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
@@ -1137,23 +1136,18 @@
|
||||
cost:
|
||||
Telecrystal: 8
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
- UplinkExplosives
|
||||
|
||||
- type: listing
|
||||
id: UplinkAntimovCircuitBoard
|
||||
name: uplink-antimov-law-name
|
||||
description: uplink-antimov-law-desc
|
||||
productEntity: AntimovCircuitBoard
|
||||
id: UplinkSyndimovCircuitBoard
|
||||
name: uplink-syndimov-law-name
|
||||
description: uplink-syndimov-law-desc
|
||||
productEntity: SyndimovCircuitBoard
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 10
|
||||
Telecrystal: 6
|
||||
cost:
|
||||
Telecrystal: 14
|
||||
Telecrystal: 8
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
@@ -1163,7 +1157,7 @@
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkNukieAntimovCircuitBoard
|
||||
id: UplinkAntimovCircuitBoard
|
||||
name: uplink-antimov-law-name
|
||||
description: uplink-antimov-law-desc
|
||||
productEntity: AntimovCircuitBoard
|
||||
@@ -1199,25 +1193,6 @@
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkSuperSurplusBundle
|
||||
name: uplink-super-surplus-bundle-name
|
||||
description: uplink-super-surplus-bundle-desc
|
||||
productEntity: CrateSyndicateSuperSurplusBundle
|
||||
cost:
|
||||
Telecrystal: 40
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkStarterKit
|
||||
name: uplink-starter-kit-name
|
||||
@@ -1249,14 +1224,26 @@
|
||||
Telecrystal: 12
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
whitelist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkCameraBug
|
||||
name: uplink-cameraBug-name
|
||||
description: uplink-cameraBug-desc
|
||||
productEntity: CameraBug
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
@@ -1272,7 +1259,7 @@
|
||||
discountDownTo:
|
||||
Telecrystal: 8
|
||||
cost:
|
||||
Telecrystal: 14
|
||||
Telecrystal: 12
|
||||
categories:
|
||||
- UplinkAllies
|
||||
conditions:
|
||||
@@ -1291,7 +1278,7 @@
|
||||
discountDownTo:
|
||||
Telecrystal: 7
|
||||
cost:
|
||||
Telecrystal: 14
|
||||
Telecrystal: 11
|
||||
categories:
|
||||
- UplinkAllies
|
||||
conditions:
|
||||
@@ -1375,11 +1362,8 @@
|
||||
name: uplink-carp-dehydrated-name
|
||||
description: uplink-carp-dehydrated-desc
|
||||
productEntity: DehydratedSpaceCarp
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkAllies
|
||||
conditions:
|
||||
@@ -1445,9 +1429,9 @@
|
||||
productEntity: FreedomImplanter
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 5
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
@@ -1459,9 +1443,9 @@
|
||||
productEntity: ScramImplanter
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 6 # it's a gamble that may kill you easily so 6 TC per 2 uses, second one more of a backup
|
||||
Telecrystal: 2 # it's a gamble that may kill you easily so 1 TC per use.
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
@@ -1475,7 +1459,7 @@
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 5
|
||||
Telecrystal: 3
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
@@ -1569,11 +1553,8 @@
|
||||
description: uplink-uplink-implanter-desc
|
||||
icon: { sprite: /Textures/Objects/Devices/communication.rsi, state: old-radio }
|
||||
productEntity: UplinkImplanter
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkImplants
|
||||
conditions:
|
||||
@@ -1818,16 +1799,6 @@
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkClothingConductingGloves
|
||||
name: uplink-clothing-conducting-gloves-name
|
||||
description: uplink-clothing-conducting-gloves-desc
|
||||
productEntity: ClothingHandsGlovesConducting
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
- type: listing
|
||||
id: UplinkBackpackSyndicate
|
||||
name: uplink-backpack-syndicate-name
|
||||
@@ -1860,16 +1831,23 @@
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
- type: listing
|
||||
id: UplinkClothingConductingGloves
|
||||
name: uplink-clothing-conducting-gloves-name
|
||||
description: uplink-clothing-conducting-gloves-desc
|
||||
productEntity: ClothingHandsGlovesConducting
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
- type: listing
|
||||
id: UplinkRevolverCapGun
|
||||
name: uplink-revolver-cap-gun-name
|
||||
description: uplink-revolver-cap-gun-desc
|
||||
productEntity: RevolverCapGun
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
@@ -1878,13 +1856,11 @@
|
||||
name: uplink-syndicate-stamp-name
|
||||
description: uplink-syndicate-stamp-desc
|
||||
productEntity: RubberStampSyndicate
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkCatEars
|
||||
@@ -1895,16 +1871,22 @@
|
||||
Telecrystal: 26
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkOutlawHat
|
||||
name: uplink-outlaw-hat-name
|
||||
description: uplink-outlaw-hat-desc
|
||||
productEntity: ClothingHeadHatOutlawHat
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkOutlawGlasses
|
||||
@@ -1922,7 +1904,7 @@
|
||||
description: uplink-costume-pyjama-desc
|
||||
productEntity: ClothingBackpackDuffelSyndicatePyjamaBundle
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
@@ -1942,7 +1924,7 @@
|
||||
description: uplink-carp-suit-bundle-desc
|
||||
productEntity: ClothingBackpackDuffelSyndicateCarpSuit
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
@@ -1951,20 +1933,22 @@
|
||||
name: uplink-operative-suit-name
|
||||
description: uplink-operative-suit-desc
|
||||
productEntity: ClothingUniformJumpsuitOperative
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkOperativeSkirt
|
||||
name: uplink-operative-skirt-name
|
||||
description: uplink-operative-skirt-desc
|
||||
productEntity: ClothingUniformJumpskirtOperative
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkBalloon
|
||||
@@ -1975,26 +1959,33 @@
|
||||
Telecrystal: 20
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkScarfSyndieRed
|
||||
name: uplink-scarf-syndie-red-name
|
||||
description: uplink-scarf-syndie-red-desc
|
||||
productEntity: ClothingNeckScarfStripedSyndieRed
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkScarfSyndieGreen
|
||||
name: uplink-scarf-syndie-green-name
|
||||
description: uplink-scarf-syndie-green-desc
|
||||
productEntity: ClothingNeckScarfStripedSyndieGreen
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkPointless
|
||||
conditions:
|
||||
- !type:ListingLimitedStockCondition
|
||||
stock: 1
|
||||
|
||||
- type: listing
|
||||
id: UplinkSyndicateBusinessCard
|
||||
@@ -2037,44 +2028,6 @@
|
||||
whitelist:
|
||||
- Botanist
|
||||
|
||||
- type: listing
|
||||
id: uplinkRiggedBoxingGlovesPassenger
|
||||
name: uplink-rigged-boxing-gloves-name
|
||||
description: uplink-rigged-boxing-gloves-desc
|
||||
productEntity: ClothingHandsGlovesBoxingRigged
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
cost:
|
||||
Telecrystal: 6
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
- !type:BuyerJobCondition
|
||||
whitelist:
|
||||
- Passenger
|
||||
|
||||
- type: listing
|
||||
id: uplinkNecronomicon
|
||||
name: uplink-necronomicon-name
|
||||
description: uplink-necronomicon-desc
|
||||
productEntity: BibleNecronomicon
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
- !type:BuyerJobCondition
|
||||
whitelist:
|
||||
- Chaplain
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: uplinkHolyHandGrenade
|
||||
name: uplink-holy-hand-grenade-name
|
||||
@@ -2099,9 +2052,9 @@
|
||||
productEntity: RevolverCapGunFake
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 5
|
||||
Telecrystal: 3
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
@@ -2110,24 +2063,6 @@
|
||||
- Mime
|
||||
- Clown
|
||||
|
||||
- type: listing
|
||||
id: uplinkBananaPeelExplosive
|
||||
name: uplink-banana-peel-explosive-name
|
||||
description: uplink-banana-peel-explosive-desc
|
||||
icon: { sprite: Objects/Specific/Hydroponics/banana.rsi, state: peel }
|
||||
productEntity: TrashBananaPeelExplosiveUnarmed
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
- !type:BuyerJobCondition
|
||||
whitelist:
|
||||
- Clown
|
||||
|
||||
- type: listing
|
||||
id: UplinkClusterBananaPeel
|
||||
name: uplink-cluster-banana-peel-name
|
||||
@@ -2137,7 +2072,7 @@
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
cost:
|
||||
Telecrystal: 6
|
||||
Telecrystal: 5
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
@@ -2228,10 +2163,10 @@
|
||||
icon: { sprite: Objects/Misc/monkeycube.rsi, state: box}
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
productEntity: SyndicateSpongeBox
|
||||
cost:
|
||||
Telecrystal: 7
|
||||
Telecrystal: 4
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
@@ -2258,10 +2193,6 @@
|
||||
- !type:BuyerJobCondition
|
||||
whitelist:
|
||||
- Librarian
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkCombatBakery
|
||||
@@ -2348,7 +2279,7 @@
|
||||
discountDownTo:
|
||||
Telecrystal: 10
|
||||
cost:
|
||||
Telecrystal: 15
|
||||
Telecrystal: 14
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
- type: entity
|
||||
abstract: true
|
||||
parent: ClothingHandsBase
|
||||
id: ClothingHandsGlovesBoxingRed
|
||||
name: red boxing gloves
|
||||
description: Red gloves for competitive boxing.
|
||||
id: ClothingHandsGlovesBoxingBase
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Hands/Gloves/Boxing/boxingred.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Hands/Gloves/Boxing/boxingred.rsi
|
||||
- type: StaminaDamageOnHit
|
||||
damage: 8 #Stam damage values seem a bit higher than regular damage because of the decay, etc
|
||||
# This needs to be moved to boxinggloves
|
||||
@@ -21,17 +16,28 @@
|
||||
collection: BoxingHit
|
||||
animation: WeaponArcFist
|
||||
mustBeEquippedToUse: true
|
||||
- type: Fiber
|
||||
fiberMaterial: fibers-leather
|
||||
fiberColor: fibers-red
|
||||
- type: FingerprintMask
|
||||
- type: Tag
|
||||
tags:
|
||||
- Kangaroo
|
||||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingRed
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingRed
|
||||
name: red boxing gloves
|
||||
description: Red gloves for competitive boxing.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Hands/Gloves/Boxing/boxingred.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Hands/Gloves/Boxing/boxingred.rsi
|
||||
- type: Fiber
|
||||
fiberMaterial: fibers-leather
|
||||
fiberColor: fibers-red
|
||||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingBlue
|
||||
name: blue boxing gloves
|
||||
description: Blue gloves for competitive boxing.
|
||||
@@ -47,7 +53,7 @@
|
||||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingRed
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingGreen
|
||||
name: green boxing gloves
|
||||
description: Green gloves for competitive boxing.
|
||||
@@ -63,7 +69,7 @@
|
||||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingRed
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingYellow
|
||||
name: yellow boxing gloves
|
||||
description: Yellow gloves for competitive boxing.
|
||||
@@ -79,19 +85,53 @@
|
||||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingBlue
|
||||
id: ClothingHandsGlovesBoxingRigged
|
||||
abstract: true
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingRiggedBase
|
||||
suffix: Rigged
|
||||
components:
|
||||
- type: StaminaDamageOnHit
|
||||
damage: 25
|
||||
- type: MeleeWeapon
|
||||
attackRate: 1.4
|
||||
damage:
|
||||
types:
|
||||
Blunt: 8
|
||||
bluntStaminaDamageFactor: 0.0 # so blunt doesn't deal stamina damage at all
|
||||
mustBeEquippedToUse: true
|
||||
bluntStaminaDamageFactor: 2
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingHandsGlovesBoxingRiggedBase, ClothingHandsGlovesBoxingRed ]
|
||||
id: ClothingHandsGlovesBoxingRiggedRed
|
||||
name: red boxing gloves
|
||||
description: Red gloves for competitive boxing.
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingHandsGlovesBoxingRiggedBase, ClothingHandsGlovesBoxingBlue ]
|
||||
id: ClothingHandsGlovesBoxingRiggedBlue
|
||||
name: blue boxing gloves
|
||||
description: Blue gloves for competitive boxing.
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingHandsGlovesBoxingRiggedBase, ClothingHandsGlovesBoxingGreen ]
|
||||
id: ClothingHandsGlovesBoxingRiggedGreen
|
||||
name: green boxing gloves
|
||||
description: Green gloves for competitive boxing.
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingHandsGlovesBoxingRiggedBase, ClothingHandsGlovesBoxingYellow ]
|
||||
id: ClothingHandsGlovesBoxingRiggedYellow
|
||||
name: yellow boxing gloves
|
||||
description: Yellow gloves for competitive boxing.
|
||||
|
||||
- type: entity
|
||||
id: GlovesBoxingRiggedRandomSpawner
|
||||
categories: [ HideSpawnMenu ]
|
||||
name: random rigged boxing glove spawner
|
||||
components:
|
||||
- type: EntityTableSpawner
|
||||
table: !type:GroupSelector
|
||||
children:
|
||||
- id: ClothingHandsGlovesBoxingRiggedRed
|
||||
- id: ClothingHandsGlovesBoxingRiggedBlue
|
||||
- id: ClothingHandsGlovesBoxingRiggedGreen
|
||||
- id: ClothingHandsGlovesBoxingRiggedYellow
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingHandsBase, BaseCommandContraband]
|
||||
|
||||
@@ -234,15 +234,6 @@
|
||||
Hand:
|
||||
location: Left
|
||||
- type: ComplexInteraction
|
||||
- type: Clumsy
|
||||
gunShootFailDamage:
|
||||
types:
|
||||
Blunt: 5
|
||||
Piercing: 4
|
||||
Heat: 3
|
||||
catchingFailDamage:
|
||||
types:
|
||||
Blunt: 1
|
||||
- type: MeleeWeapon
|
||||
angle: 30
|
||||
animation: WeaponArcFist
|
||||
@@ -257,9 +248,6 @@
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- NamesClown
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Syndicate
|
||||
- type: HTN
|
||||
rootTask:
|
||||
task: SimpleHumanoidHostileCompound
|
||||
|
||||
@@ -811,10 +811,6 @@
|
||||
Quantity: 2
|
||||
- ReagentId: Vitamin
|
||||
Quantity: 1
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0 # so the damage stats icon doesn't immediately give away the syndie ones
|
||||
|
||||
- type: entity
|
||||
parent: FoodBakedCroissant
|
||||
|
||||
@@ -699,13 +699,17 @@
|
||||
- type: entityTable # size: 1x2
|
||||
id: HappyHonkToyUnsafeEntityTable
|
||||
table: !type:GroupSelector
|
||||
children:
|
||||
children: # Total Weight 6
|
||||
- id: ClothingHeadHatCatEars
|
||||
weight: 0.25
|
||||
- id: C4
|
||||
weight: 0.02
|
||||
weight: 0.05
|
||||
- id: ToyMarauder
|
||||
- id: ToyMauler
|
||||
- id: ToyNuke
|
||||
- id: ToySword
|
||||
- id: WeaponRevolverPythonAP
|
||||
weight: 0.4
|
||||
- id: BalloonSyn
|
||||
weight: 0.6
|
||||
weight: 0.3
|
||||
- id: PlushieNuke
|
||||
|
||||
@@ -124,6 +124,18 @@
|
||||
- type: StaticPrice
|
||||
price: 10000
|
||||
|
||||
- type: entity
|
||||
id: SyndimovCircuitBoard
|
||||
parent: [BaseSiliconLawboard, BaseSyndicateContraband]
|
||||
name: law board (Syndimov)
|
||||
description: An electronics board containing the Syndimov lawset.
|
||||
components:
|
||||
- type: SiliconLawProvider
|
||||
laws: SyndicateStatic
|
||||
lawUploadSound: /Audio/Ambience/Antag/emagged_borg.ogg # This should probably have its own sound but it's fine for now.
|
||||
- type: StaticPrice
|
||||
price: 5000
|
||||
|
||||
- type: entity
|
||||
id: NutimovCircuitBoard
|
||||
parent: BaseSiliconLawboard
|
||||
|
||||
@@ -266,3 +266,17 @@
|
||||
guides:
|
||||
- Botany
|
||||
- Chemicals
|
||||
|
||||
- type: entity
|
||||
parent: [ BaseFlatpack, BaseSyndicateContraband ]
|
||||
id: SyndicateMicrowaveFlatpack
|
||||
name: donk co. microwave flatpack
|
||||
description: A flatpack used for constructing a microwave too hot for Nanotrasen to handle.
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
- type: Flatpack
|
||||
entity: SyndicateMicrowave
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- FoodRecipes
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
|
||||
- type: entity
|
||||
id: VoiceMaskImplanter
|
||||
name: voice mask implanter
|
||||
name: identity mask implanter
|
||||
parent: BaseImplantOnlyImplanterSyndi
|
||||
components:
|
||||
- type: Implanter
|
||||
|
||||
@@ -242,8 +242,8 @@
|
||||
- type: entity
|
||||
parent: BaseSubdermalImplant
|
||||
id: VoiceMaskImplant
|
||||
name: voice mask implant
|
||||
description: This implant allows you to change your voice at will.
|
||||
name: identity mask implant
|
||||
description: This implant allows you to change your identity at will.
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: SubdermalImplant
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
- type: ExaminableBattery
|
||||
- type: PowerConsumer
|
||||
voltage: High
|
||||
drawRate: 1000000
|
||||
drawRate: 10000000
|
||||
- type: Sprite
|
||||
sprite: Objects/Power/powersink.rsi
|
||||
state: powersink
|
||||
|
||||
@@ -1,58 +1,64 @@
|
||||
- type: entity
|
||||
abstract: true
|
||||
parent: BaseItem
|
||||
id: BaseJammer
|
||||
name: radio jammer
|
||||
parent: [BaseItem, BaseSyndicateContraband]
|
||||
id: RadioJammer
|
||||
description: This device will disrupt any nearby outgoing radio communication as well as suit sensors when activated.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/jammer.rsi
|
||||
layers:
|
||||
- state: jammer
|
||||
- state: jammer_high_charge
|
||||
map: ["enum.RadioJammerLayers.LED"]
|
||||
shader: unshaded
|
||||
visible: false
|
||||
- state: jammer
|
||||
- state: jammer_high_charge
|
||||
map: ["enum.PowerDeviceVisualLayers.Powered"]
|
||||
shader: unshaded
|
||||
visible: false
|
||||
- type: RadioJammer
|
||||
settings:
|
||||
- wattage: 1
|
||||
range: 2.5
|
||||
message: radio-jammer-component-set-message-low
|
||||
name: radio-jammer-component-setting-low
|
||||
- wattage: 2
|
||||
range: 6
|
||||
message: radio-jammer-component-set-message-medium
|
||||
name: radio-jammer-component-setting-medium
|
||||
message: radio-jammer-component-set-message-low
|
||||
name: radio-jammer-component-setting-low
|
||||
- wattage: 12
|
||||
range: 12
|
||||
message: radio-jammer-component-set-message-high
|
||||
name: radio-jammer-component-setting-high
|
||||
- type: PowerCellSlot
|
||||
cellSlotId: cell_slot
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
cell_slot:
|
||||
name: power-cell-slot-component-slot-name-default
|
||||
startingItem: PowerCellMedium
|
||||
- type: Appearance
|
||||
- type: ItemToggle
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.RadioJammerVisuals.LEDOn:
|
||||
RadioJammerLayers.LED:
|
||||
True: { visible: True }
|
||||
False: { visible: False }
|
||||
enum.RadioJammerVisuals.ChargeLevel:
|
||||
RadioJammerLayers.LED:
|
||||
Low: {state: jammer_low_charge}
|
||||
Medium: {state: jammer_medium_charge}
|
||||
High: {state: jammer_high_charge}
|
||||
enum.ToggleableVisuals.Enabled:
|
||||
enum.PowerDeviceVisualLayers.Powered:
|
||||
True: { visible: true }
|
||||
False: { visible: false }
|
||||
- type: BatteryVisuals
|
||||
- type: StaticPrice
|
||||
price: 1500
|
||||
|
||||
- type: entity
|
||||
parent: [RadioJammer, BaseXenoborgContraband]
|
||||
name: radio jammer
|
||||
parent: [BaseJammer, PowerCellSlotMediumItem, BaseSyndicateContraband]
|
||||
id: RadioJammer
|
||||
description: This device will disrupt any nearby outgoing and incoming radio communication as well as suit sensors when activated.
|
||||
components:
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.BatteryVisuals.State:
|
||||
enum.PowerDeviceVisualLayers.Powered:
|
||||
Full: { state: jammer_high_charge }
|
||||
Neither: { state: jammer_medium_charge }
|
||||
Empty: { state: jammer_low_charge }
|
||||
enum.ToggleableVisuals.Enabled:
|
||||
enum.PowerDeviceVisualLayers.Powered:
|
||||
True: { visible: true }
|
||||
False: { visible: false }
|
||||
- type: ToggleCellDraw
|
||||
- type: BatteryVisuals
|
||||
- type: StaticPrice
|
||||
price: 1500
|
||||
|
||||
- type: entity
|
||||
parent: [BaseJammer, BaseXenoborgContraband]
|
||||
id: XenoborgRadioJammer
|
||||
name: xenoborg radio jammer
|
||||
components:
|
||||
@@ -62,10 +68,3 @@
|
||||
- 2003 # mothership radio
|
||||
- 2004 # xenoborg network
|
||||
- 2005 # mothership network
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
cell_slot:
|
||||
name: power-cell-slot-component-slot-name-default
|
||||
startingItem: PowerCellMicroreactor
|
||||
disableEject: true
|
||||
swap: false
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
collection: MetalThud
|
||||
|
||||
- type: entity
|
||||
name: syndicate jaws of life
|
||||
name: syndicate jaws of death
|
||||
parent: [JawsOfLife, BaseSyndicateContraband]
|
||||
id: SyndicateJawsOfLife
|
||||
description: Useful for entering the station or its departments.
|
||||
description: Useful for breaking into secure areas and other nefarious activities.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/jaws_of_life.rsi
|
||||
|
||||
@@ -794,10 +794,9 @@
|
||||
price: 100
|
||||
|
||||
- type: entity
|
||||
name: experimental C.H.I.M.P. handcannon
|
||||
parent: [WeaponPistolCHIMP, BaseSyndicateContraband]
|
||||
id: WeaponPistolCHIMPUpgraded
|
||||
description: This C.H.I.M.P. seems to have a greater punch than usual...
|
||||
suffix: Syndicate
|
||||
components:
|
||||
- type: BatteryWeaponFireModes
|
||||
fireModes:
|
||||
|
||||
@@ -110,11 +110,11 @@
|
||||
description: A cyborg-mounted weapon system based on the Viper pistol. Creates ammunition on the fly from an internal fabricator, which slowly self-charges.
|
||||
components:
|
||||
- type: Gun
|
||||
fireRate: 5
|
||||
fireRate: 6
|
||||
selectedMode: SemiAuto
|
||||
availableModes:
|
||||
- SemiAuto
|
||||
- FullAuto
|
||||
- SemiAuto
|
||||
- FullAuto
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/pistol.ogg
|
||||
- type: Sprite
|
||||
@@ -135,7 +135,7 @@
|
||||
proto: CartridgePistol
|
||||
cycleable: false # No synthesizing ammo for your syndicate masters.
|
||||
- type: BallisticAmmoSelfRefiller
|
||||
autoRefillRate: 4s
|
||||
autoRefillRate: 2s
|
||||
affectedByEmp: true
|
||||
- type: AmmoCounter
|
||||
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
- type: entity
|
||||
parent: FoodBreadBaguette
|
||||
parent: [ FoodBreadBaguette, BaseSword, BaseSyndicateContraband ]
|
||||
id: WeaponBaguette
|
||||
suffix: Weapon
|
||||
components:
|
||||
- type: MeleeWeapon
|
||||
attackRate: 1.4
|
||||
wideAnimationRotation: -120
|
||||
attackRate: 1.5
|
||||
damage:
|
||||
types:
|
||||
Slash: 16
|
||||
Slash: 17
|
||||
soundHit:
|
||||
path: /Audio/Weapons/bladeslice.ogg
|
||||
- type: Reflect
|
||||
reflectProb: 0.05
|
||||
spread: 90
|
||||
- type: DisarmMalus
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
- type: entity
|
||||
parent: FoodBakedCroissant
|
||||
parent: [ FoodBakedCroissant, ThrowingKnife ]
|
||||
id: WeaponCroissant
|
||||
suffix: Weapon
|
||||
components:
|
||||
@@ -13,14 +13,5 @@
|
||||
- ItemMask
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
- type: EmbeddableProjectile
|
||||
sound: /Audio/Weapons/star_hit.ogg
|
||||
- type: LandAtCursor
|
||||
- type: DamageOtherOnHit
|
||||
ignoreResistances: true
|
||||
damage:
|
||||
types:
|
||||
Slash: 5
|
||||
Piercing: 10
|
||||
- type: ThrowingAngle
|
||||
angularVelocity: true # spins
|
||||
|
||||
@@ -131,6 +131,24 @@
|
||||
volume: 30
|
||||
initialBeepDelay: 0
|
||||
beepInterval: 16
|
||||
- type: LightBehaviorOnTrigger
|
||||
behavior: activate
|
||||
- type: PointLight
|
||||
energy: 50
|
||||
radius: 0
|
||||
color: Red
|
||||
softness: 0
|
||||
falloff: 20
|
||||
mask: /Textures/Effects/LightMasks/double_cone.png
|
||||
- type: RotatingLight
|
||||
speed: 360
|
||||
- type: LightBehaviour
|
||||
behaviours:
|
||||
- !type:FadeBehaviour # have the radius start small and get larger as it starts to burn
|
||||
id: activate
|
||||
maxDuration: 5
|
||||
startValue: 1
|
||||
endValue: 2
|
||||
|
||||
|
||||
- type: entity
|
||||
@@ -176,9 +194,10 @@
|
||||
sound:
|
||||
path: /Audio/Effects/Grenades/Supermatter/supermatter_loop.ogg
|
||||
- type: GravityWell
|
||||
maxRange: 7
|
||||
baseRadialAcceleration: 5
|
||||
baseTangentialAcceleration: .5
|
||||
maxRange: 5
|
||||
minRange: 0.25
|
||||
baseRadialAcceleration: 25
|
||||
baseTangentialAcceleration: 5
|
||||
gravPulsePeriod: 0.03
|
||||
- type: SingularityDistortion
|
||||
intensity: 150
|
||||
|
||||
@@ -1,35 +1,16 @@
|
||||
# ScatteringGrenade is intended for grenades that spawn entities, especially those with timers
|
||||
- type: entity
|
||||
abstract: true
|
||||
parent: BaseItem
|
||||
parent: GrenadeBase
|
||||
id: ScatteringGrenadeBase
|
||||
components:
|
||||
- type: Appearance
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cluster-payload: !type:Container
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
- type: ScatteringGrenade
|
||||
- type: TriggerOnUse
|
||||
- type: TimerTrigger
|
||||
delay: 3
|
||||
- type: Tag
|
||||
tags:
|
||||
- HandGrenade
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape: !type:PhysShapeCircle
|
||||
radius: 0.2
|
||||
density: 20 # derived from base_item
|
||||
mask:
|
||||
- ItemMask
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
|
||||
- type: entity
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase, BaseSecurityContraband]
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase, TimerGrenadeBase, BaseSecurityContraband]
|
||||
id: ClusterBang
|
||||
name: clusterbang
|
||||
description: Can be used only with flashbangs. Explodes several times.
|
||||
@@ -82,7 +63,7 @@
|
||||
positional: true
|
||||
|
||||
- type: entity
|
||||
parent: [VolatileGrenadeBase, ScatteringGrenadeBase, BaseSyndicateContraband]
|
||||
parent: [VolatileGrenadeBase, ScatteringGrenadeBase, TimerGrenadeBase, BaseSyndicateContraband]
|
||||
id: ClusterGrenade
|
||||
name: clustergrenade
|
||||
description: Why use one grenade when you can use three at once!
|
||||
@@ -112,18 +93,20 @@
|
||||
price: 2500
|
||||
|
||||
- type: entity
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase, BaseSyndicateContraband]
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase, ImpactGrenadeBase, BaseSyndicateContraband]
|
||||
id: ClusterBananaPeel
|
||||
name: cluster banana peel
|
||||
description: Splits into 6 explosive banana peels after throwing, guaranteed fun!
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Hydroponics/banana.rsi
|
||||
state: produce
|
||||
layers:
|
||||
- state: produce
|
||||
- type: ScatteringGrenade
|
||||
fillPrototype: TrashBananaPeelExplosive
|
||||
capacity: 6
|
||||
delayBeforeTriggerContents: 20
|
||||
triggerKey: trigger
|
||||
- type: LandAtCursor
|
||||
- type: DamageOnLand
|
||||
damage:
|
||||
@@ -137,7 +120,7 @@
|
||||
positional: true
|
||||
|
||||
- type: entity
|
||||
parent: [SoapSyndie, ScatteringGrenadeBase, BaseSyndicateContraband]
|
||||
parent: [SoapSyndie, ScatteringGrenadeBase, ImpactGrenadeBase, BaseSyndicateContraband]
|
||||
id: SlipocalypseClusterSoap
|
||||
name: slipocalypse clustersoap
|
||||
description: Spreads small pieces of syndicate soap over an area upon landing on the floor.
|
||||
@@ -148,6 +131,7 @@
|
||||
- state: syndie-4
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: ScatteringGrenade
|
||||
triggerKey: trigger
|
||||
fillPrototype: SoapletSyndie
|
||||
capacity: 30
|
||||
delayBeforeTriggerContents: 60
|
||||
@@ -168,7 +152,7 @@
|
||||
price: 1000
|
||||
|
||||
- type: entity
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase]
|
||||
parent: [FragileGrenadeBase, ScatteringGrenadeBase, TimerGrenadeBase]
|
||||
id: GrenadeFoamDart
|
||||
name: foam dart grenade
|
||||
description: Releases a bothersome spray of foam darts that cause severe welching.
|
||||
|
||||
Reference in New Issue
Block a user