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:
parent
e761d42543
commit
a1fde2baca
29 changed files with 459 additions and 498 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -143,24 +143,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
|
||||
|
|
@ -184,6 +166,20 @@
|
|||
- LoneOpsUplink # Sunrise-Edit
|
||||
#Sunrise-end
|
||||
|
||||
- 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
|
||||
|
|
@ -446,19 +442,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
|
||||
|
|
@ -1128,6 +1111,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
|
||||
|
|
@ -1158,10 +1159,8 @@
|
|||
description: uplink-slipocalypse-clustersoap-desc
|
||||
productEntity: SlipocalypseClusterSoap
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2
|
||||
Telecrystal: 1
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
|
|
@ -1216,34 +1215,28 @@
|
|||
cost:
|
||||
Telecrystal: 8
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition #Sunrise-start
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle #Sunrise-end
|
||||
|
||||
# Надо заменить на плату с целью помогать агентам.
|
||||
#- type: listing
|
||||
# id: UplinkAntimovCircuitBoard
|
||||
# name: uplink-antimov-law-name
|
||||
# description: uplink-antimov-law-desc
|
||||
# productEntity: AntimovCircuitBoard
|
||||
# discountCategory: usualDiscounts
|
||||
# discountDownTo:
|
||||
# Telecrystal: 10
|
||||
# cost:
|
||||
# Telecrystal: 14
|
||||
# categories:
|
||||
# - UplinkDisruption
|
||||
# conditions:
|
||||
# - !type:StoreWhitelistCondition
|
||||
# blacklist:
|
||||
# tags:
|
||||
# - NukeOpsUplink
|
||||
- UplinkExplosives
|
||||
|
||||
- type: listing
|
||||
id: UplinkNukieAntimovCircuitBoard
|
||||
id: UplinkSyndimovCircuitBoard
|
||||
name: uplink-syndimov-law-name
|
||||
description: uplink-syndimov-law-desc
|
||||
productEntity: SyndimovCircuitBoard
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 6
|
||||
cost:
|
||||
Telecrystal: 8
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkAntimovCircuitBoard
|
||||
name: uplink-antimov-law-name
|
||||
description: uplink-antimov-law-desc
|
||||
productEntity: AntimovCircuitBoard
|
||||
|
|
@ -1259,7 +1252,6 @@
|
|||
whitelist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
- LoneOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkSurplusBundle
|
||||
|
|
@ -1283,28 +1275,6 @@
|
|||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkSuperSurplusBundle
|
||||
name: uplink-super-surplus-bundle-name
|
||||
description: uplink-super-surplus-bundle-desc
|
||||
productEntity: CrateSyndicateSuperSurplusBundleAgent
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 20
|
||||
cost:
|
||||
Telecrystal: 40
|
||||
categories:
|
||||
- UplinkLootBoxes
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
whitelist:
|
||||
tags:
|
||||
- SyndieAgentUplink
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkStarterKit
|
||||
name: uplink-starter-kit-name
|
||||
|
|
@ -1342,6 +1312,7 @@
|
|||
whitelist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
|
@ -1351,8 +1322,11 @@
|
|||
name: uplink-cameraBug-name
|
||||
description: uplink-cameraBug-desc
|
||||
productEntity: CameraBug
|
||||
discountCategory: usualDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 3 # Sunrise-Edit
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkDisruption
|
||||
|
||||
|
|
@ -1368,9 +1342,14 @@
|
|||
discountDownTo:
|
||||
Telecrystal: 8
|
||||
cost:
|
||||
Telecrystal: 12 # Sunrise-Edit
|
||||
Telecrystal: 12
|
||||
categories:
|
||||
- UplinkAllies
|
||||
conditions:
|
||||
- !type:StoreWhitelistCondition
|
||||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
|
||||
- type: listing
|
||||
id: UplinkReinforcementRadioSyndicate
|
||||
|
|
@ -1382,7 +1361,7 @@
|
|||
discountDownTo:
|
||||
Telecrystal: 8
|
||||
cost:
|
||||
Telecrystal: 14
|
||||
Telecrystal: 11
|
||||
categories:
|
||||
- UplinkAllies
|
||||
conditions:
|
||||
|
|
@ -1390,7 +1369,6 @@
|
|||
blacklist:
|
||||
tags:
|
||||
- NukeOpsUplink
|
||||
- AssaultOpsUplink # Sunrise-Edit
|
||||
|
||||
- type: listing
|
||||
id: UplinkReinforcementRadioSyndicateNukeops # Version for Nukeops that spawns another nuclear operative without the uplink.
|
||||
|
|
@ -1472,11 +1450,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:
|
||||
|
|
@ -1551,9 +1526,9 @@
|
|||
productEntity: FreedomImplanter
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 1 # Sunrise-Edit
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 2 # Sunrise-Edit
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
|
|
@ -1565,9 +1540,9 @@
|
|||
productEntity: ScramImplanter
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 2
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 6 # it's a gamble that may kill you easily so 4 TC per 2 uses, second one more of a backup # Sunrise-edit
|
||||
Telecrystal: 2 # it's a gamble that may kill you easily so 1 TC per use.
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
|
|
@ -1600,9 +1575,9 @@
|
|||
productEntity: EmpImplanter
|
||||
discountCategory: veryRareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3 # Sunrise-Edit
|
||||
Telecrystal: 1
|
||||
cost:
|
||||
Telecrystal: 4 # Sunrise-Edit
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkImplants
|
||||
|
||||
|
|
@ -1677,11 +1652,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:
|
||||
|
|
@ -1936,16 +1908,6 @@
|
|||
- NukeOpsUplink
|
||||
- LoneOpsUplink # Sunrise-Edit
|
||||
|
||||
- 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
|
||||
|
|
@ -1978,16 +1940,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
|
||||
|
||||
|
|
@ -1996,13 +1965,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
|
||||
|
|
@ -2013,23 +1980,22 @@
|
|||
Telecrystal: 26
|
||||
categories:
|
||||
- UplinkPointless
|
||||
# Sunrise-start
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
# Sunrise-end
|
||||
|
||||
- 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
|
||||
|
|
@ -2047,7 +2013,7 @@
|
|||
description: uplink-costume-pyjama-desc
|
||||
productEntity: ClothingBackpackDuffelSyndicatePyjamaBundle
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
|
|
@ -2067,7 +2033,7 @@
|
|||
description: uplink-carp-suit-bundle-desc
|
||||
productEntity: ClothingBackpackDuffelSyndicateCarpSuit
|
||||
cost:
|
||||
Telecrystal: 4
|
||||
Telecrystal: 2
|
||||
categories:
|
||||
- UplinkPointless
|
||||
|
||||
|
|
@ -2076,20 +2042,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
|
||||
|
|
@ -2100,33 +2068,33 @@
|
|||
Telecrystal: 20
|
||||
categories:
|
||||
- UplinkPointless
|
||||
# Sunrise-start
|
||||
conditions:
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
# Sunrise-end
|
||||
|
||||
- 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
|
||||
|
|
@ -2169,44 +2137,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
|
||||
|
|
@ -2231,9 +2161,9 @@
|
|||
productEntity: RevolverCapGunFake
|
||||
discountCategory: rareDiscounts
|
||||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
Telecrystal: 2
|
||||
cost:
|
||||
Telecrystal: 5
|
||||
Telecrystal: 3
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
|
|
@ -2242,24 +2172,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
|
||||
|
|
@ -2269,7 +2181,7 @@
|
|||
discountDownTo:
|
||||
Telecrystal: 3
|
||||
cost:
|
||||
Telecrystal: 6
|
||||
Telecrystal: 5
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
|
|
@ -2360,10 +2272,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:
|
||||
|
|
@ -2391,10 +2303,6 @@
|
|||
- !type:BuyerJobCondition
|
||||
whitelist:
|
||||
- Librarian
|
||||
- !type:BuyerWhitelistCondition
|
||||
blacklist:
|
||||
components:
|
||||
- SurplusBundle
|
||||
|
||||
- type: listing
|
||||
id: UplinkCombatBakery
|
||||
|
|
@ -2484,7 +2392,7 @@
|
|||
discountDownTo:
|
||||
Telecrystal: 10
|
||||
cost:
|
||||
Telecrystal: 15
|
||||
Telecrystal: 14
|
||||
categories:
|
||||
- UplinkJob
|
||||
conditions:
|
||||
|
|
|
|||
|
|
@ -1,15 +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: DiseaseImmuneClothing
|
||||
prob: 0.2
|
||||
- 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
|
||||
|
|
@ -23,17 +16,32 @@
|
|||
collection: BoxingHit
|
||||
animation: WeaponArcFist
|
||||
mustBeEquippedToUse: true
|
||||
- type: Fiber
|
||||
fiberMaterial: fibers-leather
|
||||
fiberColor: fibers-red
|
||||
- type: FingerprintMask
|
||||
- type: Tag
|
||||
tags:
|
||||
- Kangaroo
|
||||
- WhitelistChameleon
|
||||
# Sunrise-Start
|
||||
- type: DiseaseImmuneClothing
|
||||
prob: 0.2
|
||||
# Sunrise-End
|
||||
|
||||
- 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.
|
||||
|
|
@ -49,7 +57,7 @@
|
|||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingRed
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingGreen
|
||||
name: green boxing gloves
|
||||
description: Green gloves for competitive boxing.
|
||||
|
|
@ -65,7 +73,7 @@
|
|||
- type: FingerprintMask
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsGlovesBoxingRed
|
||||
parent: ClothingHandsGlovesBoxingBase
|
||||
id: ClothingHandsGlovesBoxingYellow
|
||||
name: yellow boxing gloves
|
||||
description: Yellow gloves for competitive boxing.
|
||||
|
|
@ -81,19 +89,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 @@
|
|||
templateId: holoclown
|
||||
- type: Hands
|
||||
- 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
|
||||
|
|
|
|||
|
|
@ -721,13 +721,17 @@
|
|||
- type: entityTable
|
||||
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
|
||||
|
|
|
|||
|
|
@ -293,3 +293,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
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@
|
|||
|
||||
- type: entity
|
||||
id: VoiceMaskImplanter
|
||||
name: voice mask implanter
|
||||
name: identity mask implanter
|
||||
parent: BaseImplantOnlyImplanterSyndi
|
||||
components:
|
||||
- type: Implanter
|
||||
|
|
|
|||
|
|
@ -286,8 +286,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
|
||||
|
|
|
|||
|
|
@ -825,10 +825,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:
|
||||
|
|
|
|||
|
|
@ -122,11 +122,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
|
||||
|
|
@ -136,17 +136,19 @@
|
|||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
# - type: ContainerContainer
|
||||
# containers:
|
||||
# ballistic-ammo: !type:Container
|
||||
- type: BatteryAmmoProvider
|
||||
proto: BulletPistolTraceSP
|
||||
fireCost: 100
|
||||
- type: Battery
|
||||
maxCharge: 1000
|
||||
startingCharge: 1000
|
||||
- type: BatterySelfRecharger
|
||||
autoRechargeRate: 25
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: BallisticAmmoProvider
|
||||
whitelist:
|
||||
tags:
|
||||
- CartridgePistol
|
||||
capacity: 10
|
||||
proto: BulletPistolTraceSP # Sunrise-Edit
|
||||
cycleable: false # No synthesizing ammo for your syndicate masters.
|
||||
- type: BallisticAmmoSelfRefiller
|
||||
autoRefillRate: 2s
|
||||
affectedByEmp: true
|
||||
- type: AmmoCounter
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -145,6 +145,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
|
||||
|
|
@ -190,9 +208,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.
|
||||
|
|
@ -147,6 +130,7 @@
|
|||
layers:
|
||||
- state: syndie-4
|
||||
- type: ScatteringGrenade
|
||||
triggerKey: trigger
|
||||
fillPrototype: SoapletSyndie
|
||||
capacity: 30
|
||||
delayBeforeTriggerContents: 60
|
||||
|
|
@ -167,7 +151,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.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue