Merge remote-tracking branch 'upstream/master'
@@ -0,0 +1,36 @@
|
|||||||
|
using Content.Shared._White.PolymorphableCanister;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Client._White.PolymorphableCanister;
|
||||||
|
|
||||||
|
public sealed class PolymorphableCanisterSystem : SharedPolymorphableCanisterSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<PolymorphableCanisterComponent, AfterAutoHandleStateEvent>(HandleState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleState(EntityUid uid,
|
||||||
|
PolymorphableCanisterComponent component,
|
||||||
|
ref AfterAutoHandleStateEvent args)
|
||||||
|
{
|
||||||
|
UpdateAppearance(uid, component.CurrentPrototype);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateSprite(EntityUid uid, EntityPrototype proto)
|
||||||
|
{
|
||||||
|
base.UpdateSprite(uid, proto);
|
||||||
|
|
||||||
|
if (!TryComp(uid, out SpriteComponent? sprite) ||
|
||||||
|
!proto.TryGetComponent(out SpriteComponent? otherSprite, _componentFactory))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite.CopyFrom(otherSprite);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using Content.Shared._White.PolymorphableCanister;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
|
namespace Content.Client._White.PolymorphableCanister.UI;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public sealed class PolymorphableCanisterBUI : BoundUserInterface
|
||||||
|
{
|
||||||
|
private PolymorphableCanisterMenu? _menu;
|
||||||
|
|
||||||
|
public PolymorphableCanisterBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||||
|
{
|
||||||
|
IoCManager.InjectDependencies(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Open()
|
||||||
|
{
|
||||||
|
_menu = new PolymorphableCanisterMenu(Owner, this);
|
||||||
|
_menu.OnClose += Close;
|
||||||
|
_menu.OpenCentered();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendMessage(string protoId)
|
||||||
|
{
|
||||||
|
SendMessage(new PolymorphableCanisterMessage(protoId));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
base.Dispose(disposing);
|
||||||
|
if (!disposing)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_menu?.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<ui:RadialMenu xmlns="https://spacestation14.io"
|
||||||
|
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
|
||||||
|
BackButtonStyleClass="RadialMenuBackButton"
|
||||||
|
CloseButtonStyleClass="RadialMenuCloseButton"
|
||||||
|
VerticalExpand="True"
|
||||||
|
HorizontalExpand="True"
|
||||||
|
MinSize="450 450">
|
||||||
|
|
||||||
|
<!-- Main container to hold all canister states-->
|
||||||
|
<ui:RadialContainer Name="Main" VerticalExpand="True" HorizontalExpand="True" Radius="140"
|
||||||
|
ReserveSpaceForHiddenChildren="False" />
|
||||||
|
</ui:RadialMenu>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
using System.Numerics;
|
||||||
|
using Content.Client.UserInterface.Controls;
|
||||||
|
using Content.Shared._White.PolymorphableCanister;
|
||||||
|
using Robust.Client.AutoGenerated;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Client.UserInterface.XAML;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Client._White.PolymorphableCanister.UI;
|
||||||
|
|
||||||
|
[GenerateTypedNameReferences]
|
||||||
|
public sealed partial class PolymorphableCanisterMenu : RadialMenu
|
||||||
|
{
|
||||||
|
[Dependency] private readonly EntityManager _entManager = default!;
|
||||||
|
[Dependency] private readonly IPrototypeManager _protoManager = default!;
|
||||||
|
|
||||||
|
public PolymorphableCanisterMenu(EntityUid owner, PolymorphableCanisterBUI bui)
|
||||||
|
{
|
||||||
|
IoCManager.InjectDependencies(this);
|
||||||
|
RobustXamlLoader.Load(this);
|
||||||
|
|
||||||
|
if (!_entManager.TryGetComponent<PolymorphableCanisterComponent>(owner, out var canister))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var spriteSystem = _entManager.System<SpriteSystem>();
|
||||||
|
|
||||||
|
var main = FindControl<RadialContainer>("Main");
|
||||||
|
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||||
|
if (main is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var protoId in canister.Prototypes)
|
||||||
|
{
|
||||||
|
if (canister.CurrentPrototype == protoId)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!_protoManager.TryIndex(protoId, out var proto))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var button = new RadialMenuTextureButton
|
||||||
|
{
|
||||||
|
ToolTip = Loc.GetString(proto.Name),
|
||||||
|
TextureNormal = spriteSystem.GetPrototypeIcon(protoId).Default,
|
||||||
|
StyleClasses = { "RadialMenuButton" },
|
||||||
|
SetSize = new Vector2(64f, 64f)
|
||||||
|
};
|
||||||
|
|
||||||
|
button.OnButtonUp += _ =>
|
||||||
|
{
|
||||||
|
bui.SendMessage(protoId);
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
|
||||||
|
main.AddChild(button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -60,7 +60,7 @@ namespace Content.Server.Chemistry.EntitySystems
|
|||||||
{
|
{
|
||||||
// Create a pop-up for the target
|
// Create a pop-up for the target
|
||||||
var userName = Identity.Entity(user, EntityManager);
|
var userName = Identity.Entity(user, EntityManager);
|
||||||
_popup.PopupEntity(Loc.GetString("injector-component-injecting-target",
|
_popup.PopupEntity(Loc.GetString("patch-component-injecting-target",
|
||||||
("user", userName)), user, target);
|
("user", userName)), user, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ using Content.Shared._White.Cult.Components;
|
|||||||
using Content.Shared._White.Cult.Runes;
|
using Content.Shared._White.Cult.Runes;
|
||||||
using Content.Shared._White.Cult.UI;
|
using Content.Shared._White.Cult.UI;
|
||||||
using Content.Shared.Cuffs;
|
using Content.Shared.Cuffs;
|
||||||
|
using Content.Shared.FixedPoint;
|
||||||
using Content.Shared.GameTicking;
|
using Content.Shared.GameTicking;
|
||||||
using Content.Shared.Mindshield.Components;
|
using Content.Shared.Mindshield.Components;
|
||||||
|
using Content.Shared.Mobs.Systems;
|
||||||
using Content.Shared.Movement.Pulling.Components;
|
using Content.Shared.Movement.Pulling.Components;
|
||||||
using Content.Shared.Movement.Pulling.Systems;
|
using Content.Shared.Movement.Pulling.Systems;
|
||||||
using Content.Shared.UserInterface;
|
using Content.Shared.UserInterface;
|
||||||
@@ -74,6 +76,8 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
[Dependency] private readonly PullingSystem _pulling = default!;
|
[Dependency] private readonly PullingSystem _pulling = default!;
|
||||||
[Dependency] private readonly SharedCuffableSystem _cuffable = default!;
|
[Dependency] private readonly SharedCuffableSystem _cuffable = default!;
|
||||||
[Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!;
|
[Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!;
|
||||||
|
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||||
|
[Dependency] private readonly MobThresholdSystem _thresholdSystem = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -821,8 +825,7 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
var targets =
|
var targets =
|
||||||
_lookup.GetEntitiesInRange(uid, component.RangeTarget, LookupFlags.Dynamic | LookupFlags.Sundries);
|
_lookup.GetEntitiesInRange(uid, component.RangeTarget, LookupFlags.Dynamic | LookupFlags.Sundries);
|
||||||
|
|
||||||
targets.RemoveWhere(x =>
|
targets.RemoveWhere(x => !_entityManager.HasComponent<HumanoidAppearanceComponent>(x));
|
||||||
!_entityManager.HasComponent<HumanoidAppearanceComponent>(x) || !HasComp<CultistComponent>(x));
|
|
||||||
|
|
||||||
if (targets.Count == 0)
|
if (targets.Count == 0)
|
||||||
return;
|
return;
|
||||||
@@ -832,12 +835,7 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
if (victim == null)
|
if (victim == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_entityManager.TryGetComponent<MobStateComponent>(victim.Value, out var state);
|
if (_mobState.IsAlive(victim.Value))
|
||||||
|
|
||||||
if (state == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (state.CurrentState != MobState.Dead && state.CurrentState != MobState.Critical)
|
|
||||||
{
|
{
|
||||||
_popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-already-alive"), args.User, args.User);
|
_popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-already-alive"), args.User, args.User);
|
||||||
return;
|
return;
|
||||||
@@ -849,6 +847,8 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
private bool Revive(EntityUid target, EntityUid user)
|
private bool Revive(EntityUid target, EntityUid user)
|
||||||
|
{
|
||||||
|
if (HasComp<CultistComponent>(target))
|
||||||
{
|
{
|
||||||
if (CultRuneReviveComponent.ChargesLeft == 0)
|
if (CultRuneReviveComponent.ChargesLeft == 0)
|
||||||
{
|
{
|
||||||
@@ -859,6 +859,45 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
CultRuneReviveComponent.ChargesLeft--;
|
CultRuneReviveComponent.ChargesLeft--;
|
||||||
|
|
||||||
_entityManager.EventBus.RaiseLocalEvent(target, new RejuvenateEvent());
|
_entityManager.EventBus.RaiseLocalEvent(target, new RejuvenateEvent());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!TryComp(target, out DamageableComponent? damageable) ||
|
||||||
|
!TryComp(target, out MobThresholdsComponent? threshold) ||
|
||||||
|
!TryComp(target, out MobStateComponent? mobState))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!_mobState.IsDead(target, mobState))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var airlossGroup = _prototypeManager.Index<DamageGroupPrototype>("Airloss");
|
||||||
|
|
||||||
|
var deadThreshold = _thresholdSystem.GetThresholdForState(target, MobState.Dead, threshold);
|
||||||
|
|
||||||
|
if (damageable.Damage.TryGetDamageInGroup(airlossGroup, out var toHeal))
|
||||||
|
{
|
||||||
|
var afterHeal = damageable.TotalDamage - toHeal;
|
||||||
|
if (deadThreshold <= afterHeal)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var asphyxType = _prototypeManager.Index<DamageTypePrototype>("Asphyxiation");
|
||||||
|
var bloodlossType = _prototypeManager.Index<DamageTypePrototype>("Bloodloss");
|
||||||
|
|
||||||
|
var heal = new Action<DamageTypePrototype>(type =>
|
||||||
|
{
|
||||||
|
if (!damageable.Damage.DamageDict.TryGetValue(type.ID, out var damage))
|
||||||
|
return;
|
||||||
|
|
||||||
|
_damageableSystem.TryChangeDamage(target, new DamageSpecifier(type, -damage));
|
||||||
|
});
|
||||||
|
|
||||||
|
heal(asphyxType);
|
||||||
|
heal(bloodlossType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (damageable.TotalDamage < deadThreshold)
|
||||||
|
_mobState.ChangeMobState(target, MobState.Critical, mobState, user);
|
||||||
|
}
|
||||||
|
|
||||||
EntityUid? transferTo = null;
|
EntityUid? transferTo = null;
|
||||||
|
|
||||||
|
|||||||
@@ -121,9 +121,13 @@ public sealed class ERTRecruitmentRule : StationEventSystem<ERTRecruitmentRuleCo
|
|||||||
var ev = new ERTRecruitedReasonEvent();
|
var ev = new ERTRecruitedReasonEvent();
|
||||||
RaiseLocalEvent(uid,ev);
|
RaiseLocalEvent(uid,ev);
|
||||||
|
|
||||||
|
if (args.PlayerSession != null)
|
||||||
|
{
|
||||||
|
|
||||||
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-description"));
|
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-description"));
|
||||||
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-reason", ("reason", ev.Reason)));
|
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-reason", ("reason", ev.Reason)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnStartAttempt(RoundStartAttemptEvent ev)
|
private void OnStartAttempt(RoundStartAttemptEvent ev)
|
||||||
{
|
{
|
||||||
@@ -187,6 +191,7 @@ public sealed class ERTRecruitmentRule : StationEventSystem<ERTRecruitmentRuleCo
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
var ertMap = EnsureComp<ERTMapComponent>(outpost);
|
var ertMap = EnsureComp<ERTMapComponent>(outpost);
|
||||||
ertMap.MapId = mapId;
|
ertMap.MapId = mapId;
|
||||||
//ERTMap.Shuttle = shuttleId;
|
//ERTMap.Shuttle = shuttleId;
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
using Content.Server.Atmos.Piping.Unary.Components;
|
||||||
|
using Content.Shared._White.PolymorphableCanister;
|
||||||
|
using Content.Shared.Lock;
|
||||||
|
using Content.Shared.Verbs;
|
||||||
|
using Robust.Server.GameObjects;
|
||||||
|
using Robust.Shared.Player;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
|
namespace Content.Server._White.PolymorphableCanister;
|
||||||
|
|
||||||
|
public sealed class PolymorphableCanisterSystem : SharedPolymorphableCanisterSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly UserInterfaceSystem _ui = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<PolymorphableCanisterComponent, GetVerbsEvent<Verb>>(GetVerb);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetVerb(EntityUid uid, PolymorphableCanisterComponent component, GetVerbsEvent<Verb> args)
|
||||||
|
{
|
||||||
|
if (TryComp(uid, out LockComponent? lockComponent) && lockComponent.Locked)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TryComp(uid, out GasCanisterComponent? gasCanister) && gasCanister.Air.Pressure > 100)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var changeAppearanceVerb = new Verb
|
||||||
|
{
|
||||||
|
Text = Loc.GetString("polymorphable-canister-change-appearance-verb"),
|
||||||
|
Icon = new SpriteSpecifier.Rsi(new ResPath("Structures/Storage/canister.rsi"), "yellow"),
|
||||||
|
Act = () => TryOpenUi(uid, args.User, component)
|
||||||
|
};
|
||||||
|
|
||||||
|
args.Verbs.Add(changeAppearanceVerb);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TryOpenUi(EntityUid uid, EntityUid user, PolymorphableCanisterComponent? component = null)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref component))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!TryComp(user, out ActorComponent? actor))
|
||||||
|
return;
|
||||||
|
|
||||||
|
_ui.TryToggleUi(uid, PolymorphableCanisterUiKey.Key, actor.PlayerSession);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ using Content.Shared.DoAfter;
|
|||||||
using Content.Shared.Gravity;
|
using Content.Shared.Gravity;
|
||||||
using Content.Shared.Hands.Components;
|
using Content.Shared.Hands.Components;
|
||||||
using Content.Shared.Input;
|
using Content.Shared.Input;
|
||||||
|
using Content.Shared.Mobs.Systems;
|
||||||
using Content.Shared.Movement.Systems;
|
using Content.Shared.Movement.Systems;
|
||||||
using Content.Shared.Physics;
|
using Content.Shared.Physics;
|
||||||
using Content.Shared.Rotation;
|
using Content.Shared.Rotation;
|
||||||
@@ -24,6 +25,7 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!; // WD EDIT
|
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!; // WD EDIT
|
||||||
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!; // WD EDIT
|
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!; // WD EDIT
|
||||||
[Dependency] private readonly SharedStunSystem _stun = default!; // WD EDIT
|
[Dependency] private readonly SharedStunSystem _stun = default!; // WD EDIT
|
||||||
|
[Dependency] private readonly MobStateSystem _mobState = default!; // WD EDIT
|
||||||
|
|
||||||
// If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited.
|
// If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited.
|
||||||
private const int StandingCollisionLayer = (int)CollisionGroup.MidImpassable;
|
private const int StandingCollisionLayer = (int)CollisionGroup.MidImpassable;
|
||||||
@@ -64,6 +66,11 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_mobState.IsAlive(uid))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsDown(uid))
|
if (IsDown(uid))
|
||||||
{
|
{
|
||||||
TryStandUp(uid);
|
TryStandUp(uid);
|
||||||
@@ -123,13 +130,13 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
|||||||
if (standingState.CurrentState is not StandingState.Lying)
|
if (standingState.CurrentState is not StandingState.Lying)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
standingState.CurrentState = StandingState.GettingUp;
|
|
||||||
var doargs = new DoAfterArgs(EntityManager, uid, standingState.StandingUpTime,
|
var doargs = new DoAfterArgs(EntityManager, uid, standingState.StandingUpTime,
|
||||||
new StandingUpDoAfterEvent(), uid)
|
new StandingUpDoAfterEvent(), uid)
|
||||||
{
|
{
|
||||||
BreakOnMove = false,
|
BreakOnMove = false,
|
||||||
BreakOnDamage = false,
|
BreakOnDamage = false,
|
||||||
BreakOnHandChange = false
|
BreakOnHandChange = false,
|
||||||
|
RequireCanInteract = false
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!_doAfter.TryStartDoAfter(doargs))
|
if (!_doAfter.TryStartDoAfter(doargs))
|
||||||
@@ -141,7 +148,7 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
|||||||
|
|
||||||
public bool TryLieDown(EntityUid uid, StandingStateComponent? standingState = null, bool dropHeldItems = false)
|
public bool TryLieDown(EntityUid uid, StandingStateComponent? standingState = null, bool dropHeldItems = false)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref standingState, false))
|
if (!Resolve(uid, ref standingState, false) || !standingState.CanLieDown)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (standingState.CurrentState is not StandingState.Standing)
|
if (standingState.CurrentState is not StandingState.Standing)
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ namespace Content.Shared.Standing.Systems;
|
|||||||
public abstract partial class SharedStandingStateSystem
|
public abstract partial class SharedStandingStateSystem
|
||||||
{
|
{
|
||||||
[Dependency] protected readonly IRobustRandom Random = default!;
|
[Dependency] protected readonly IRobustRandom Random = default!;
|
||||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
|
||||||
|
|
||||||
private void InitializeColliding()
|
private void InitializeColliding()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
using Robust.Shared.GameStates;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.PolymorphableCanister;
|
||||||
|
|
||||||
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
|
||||||
|
public sealed partial class PolymorphableCanisterComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public ResPath ResPath = new("Structures/Storage/canister.rsi");
|
||||||
|
|
||||||
|
[DataField, AutoNetworkedField]
|
||||||
|
public ProtoId<EntityPrototype>? CurrentPrototype;
|
||||||
|
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public int DoAfterTime = 3;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public List<ProtoId<EntityPrototype>> Prototypes = new()
|
||||||
|
{
|
||||||
|
"GasCanister",
|
||||||
|
"StorageCanister",
|
||||||
|
"AirCanister",
|
||||||
|
"OxygenCanister",
|
||||||
|
"NitrogenCanister",
|
||||||
|
"CarbonDioxideCanister",
|
||||||
|
"PlasmaCanister",
|
||||||
|
"TritiumCanister",
|
||||||
|
"WaterVaporCanister",
|
||||||
|
"AmmoniaCanister",
|
||||||
|
"NitrousOxideCanister",
|
||||||
|
"FrezonCanister",
|
||||||
|
"BZCanister",
|
||||||
|
"PluoxiumCanister",
|
||||||
|
"HydrogenCanister",
|
||||||
|
"NitriumCanister",
|
||||||
|
"HealiumCanister",
|
||||||
|
"HyperNobliumCanister",
|
||||||
|
"ProtoNitrateCanister",
|
||||||
|
"ZaukerCanister",
|
||||||
|
"HalonCanister",
|
||||||
|
"HeliumCanister",
|
||||||
|
"AntiNobliumCanister",
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
using Content.Shared.DoAfter;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.PolymorphableCanister;
|
||||||
|
|
||||||
|
public abstract class SharedPolymorphableCanisterSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||||
|
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||||
|
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<PolymorphableCanisterComponent, ComponentInit>(OnInit);
|
||||||
|
SubscribeLocalEvent<PolymorphableCanisterComponent, PolymorphableCanisterMessage>(OnMessage);
|
||||||
|
SubscribeLocalEvent<PolymorphableCanisterComponent, PolymorphableCanisterDoAfterEvent>(OnDoAfter);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnInit(Entity<PolymorphableCanisterComponent> ent, ref ComponentInit args)
|
||||||
|
{
|
||||||
|
var proto = MetaData(ent.Owner).EntityPrototype;
|
||||||
|
if (proto is null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ent.Comp.CurrentPrototype = proto.ID;
|
||||||
|
Dirty(ent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMessage(Entity<PolymorphableCanisterComponent> ent, ref PolymorphableCanisterMessage args)
|
||||||
|
{
|
||||||
|
if (!args.Session.AttachedEntity.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var doAfterArgs = new DoAfterArgs(EntityManager,
|
||||||
|
args.Session.AttachedEntity.Value,
|
||||||
|
ent.Comp.DoAfterTime,
|
||||||
|
new PolymorphableCanisterDoAfterEvent(args.ProtoId),
|
||||||
|
ent.Owner
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BreakOnMove = true,
|
||||||
|
NeedHand = true
|
||||||
|
};
|
||||||
|
|
||||||
|
_doAfter.TryStartDoAfter(doAfterArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDoAfter(Entity<PolymorphableCanisterComponent> ent, ref PolymorphableCanisterDoAfterEvent args)
|
||||||
|
{
|
||||||
|
if (args.Cancelled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ent.Comp.CurrentPrototype = args.ProtoId;
|
||||||
|
UpdateAppearance(ent, args.ProtoId);
|
||||||
|
Dirty(ent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateAppearance(EntityUid uid, ProtoId<EntityPrototype>? protoId)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(protoId) || !_proto.TryIndex(protoId, out var proto))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var metadata = MetaData(uid);
|
||||||
|
_metaData.SetEntityName(uid, proto.Name, metadata);
|
||||||
|
_metaData.SetEntityDescription(uid, proto.Description, metadata);
|
||||||
|
|
||||||
|
UpdateSprite(uid, proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void UpdateSprite(EntityUid uid, EntityPrototype proto)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[NetSerializable, Serializable]
|
||||||
|
public enum PolymorphableCanisterUiKey : byte
|
||||||
|
{
|
||||||
|
Key
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public sealed class PolymorphableCanisterMessage(string protoId) : BoundUserInterfaceMessage
|
||||||
|
{
|
||||||
|
public readonly ProtoId<EntityPrototype> ProtoId = protoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public sealed partial class PolymorphableCanisterDoAfterEvent : SimpleDoAfterEvent
|
||||||
|
{
|
||||||
|
public readonly ProtoId<EntityPrototype> ProtoId;
|
||||||
|
|
||||||
|
public PolymorphableCanisterDoAfterEvent(string protoId)
|
||||||
|
{
|
||||||
|
ProtoId = protoId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3804,3 +3804,93 @@
|
|||||||
id: 267
|
id: 267
|
||||||
time: '2024-05-22T23:54:27.0000000+00:00'
|
time: '2024-05-22T23:54:27.0000000+00:00'
|
||||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/312
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/312
|
||||||
|
- author: Aviu
|
||||||
|
changes:
|
||||||
|
- message: "\u0414\u043B\u044F \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u0440\
|
||||||
|
\u0435\u0436\u0438\u043C\u0430 \u044F\u0434\u0435\u0440\u043D\u044B\u0445 \u043E\
|
||||||
|
\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u0438\u043A\u043E\u0432 \u0432\
|
||||||
|
\u043D\u043E\u0432\u044C \u043D\u0443\u0436\u043D\u043E 20 \u0433\u043E\u0442\
|
||||||
|
\u043E\u0432\u044B\u0445."
|
||||||
|
type: Tweak
|
||||||
|
id: 268
|
||||||
|
time: '2024-05-28T14:13:17.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/313
|
||||||
|
- author: ThereDrD
|
||||||
|
changes:
|
||||||
|
- message: "\u041D\u0430 \u0412\u0430\u043D\u0434\u0435\u0440\u0431\u043E\u043A\u0441\
|
||||||
|
\ \u0438 \u0412\u0430\u0439\u0442\u0431\u043E\u043A\u0441 \u0434\u043E\u0431\
|
||||||
|
\u0430\u0432\u043B\u0435\u043D\u044B \u0431\u043E\u0440\u0433\u0438"
|
||||||
|
type: Add
|
||||||
|
id: 269
|
||||||
|
time: '2024-05-29T20:40:05.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/315
|
||||||
|
- author: Aviu
|
||||||
|
changes:
|
||||||
|
- message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0436\u043D\u043E\
|
||||||
|
\ \u0432\u0441\u0442\u0430\u0442\u044C \u0431\u0443\u0434\u0443\u0447\u0438\
|
||||||
|
\ \u0432 \u043D\u0430\u0440\u0443\u0447\u043D\u0438\u043A\u0430\u0445."
|
||||||
|
type: Fix
|
||||||
|
- message: "\u041A\u043B\u043E\u0443\u043D\u044B \u043C\u043E\u0433\u0443\u0442\
|
||||||
|
\ \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0437\
|
||||||
|
\u0430\u043B\u043F\u043E\u043C \u043A\u0440\u043E\u0432\u0430\u0432\u044B\u0445\
|
||||||
|
\ \u0441\u043D\u0430\u0440\u044F\u0434\u043E\u0432."
|
||||||
|
type: Fix
|
||||||
|
- message: "\u041E\u0431\u0435\u0437\u044C\u044F\u043D\u044B \u043C\u043E\u0433\u0443\
|
||||||
|
\u0442 \u0442\u0435\u043F\u0435\u0440\u044C \u043B\u043E\u0436\u0438\u0442\u044C\
|
||||||
|
\u0441\u044F."
|
||||||
|
type: Add
|
||||||
|
- message: "\u0423\u0431\u0440\u0430\u043D \u0440\u0435\u0444\u043B\u0435\u043A\u0442\
|
||||||
|
\ \u0443 \u0441\u0442\u0435\u043D \u0448\u0430\u0442\u0442\u043B\u0430."
|
||||||
|
type: Remove
|
||||||
|
id: 270
|
||||||
|
time: '2024-05-30T12:12:24.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/314
|
||||||
|
- author: Aviu
|
||||||
|
changes:
|
||||||
|
- message: "\u0420\u0443\u043D\u0430 \u0432\u043E\u0441\u043A\u0440\u0435\u0448\u0435\
|
||||||
|
\u043D\u0438\u044F \u043C\u043E\u0436\u0435\u0442 \u0432\u043E\u0441\u043A\u0440\
|
||||||
|
\u0435\u0448\u0430\u0442\u044C \u043D\u0435 \u043A\u0443\u043B\u044C\u0442\u0438\
|
||||||
|
\u0441\u0442\u043E\u0432, \u043D\u0435 \u0442\u0440\u0430\u0442\u044F \u043F\
|
||||||
|
\u0440\u0438 \u044D\u0442\u043E\u043C \u0437\u0430\u0440\u044F\u0434\u044B,\
|
||||||
|
\ \u043D\u043E \u043E\u043D\u0430 \u0441\u043F\u043E\u0441\u043E\u0431\u043D\
|
||||||
|
\u0430 \u0438\u0437\u043B\u0435\u0447\u0438\u0442\u044C \u0438\u0445 \u0442\u043E\
|
||||||
|
\u043B\u044C\u043A\u043E \u043E\u0442 \u0443\u0434\u0443\u0448\u0435\u043D\u0438\
|
||||||
|
\u044F \u0438 \u043A\u0440\u043E\u0432\u043E\u043F\u043E\u0442\u0435\u0440\u0438\
|
||||||
|
."
|
||||||
|
type: Add
|
||||||
|
id: 271
|
||||||
|
time: '2024-05-30T12:27:13.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/318
|
||||||
|
- author: Remuchi
|
||||||
|
changes:
|
||||||
|
- message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0432\u043D\u0435\u0448\u043D\u0438\
|
||||||
|
\u0439 \u0432\u0438\u0434 \u0433\u0430\u0437\u043E\u0432\u044B\u0445 \u043A\u0430\
|
||||||
|
\u043D\u0438\u0441\u0442\u0440 \u043C\u043E\u0436\u043D\u043E \u043C\u0435\u043D\
|
||||||
|
\u044F\u0442\u044C."
|
||||||
|
type: Add
|
||||||
|
id: 272
|
||||||
|
time: '2024-05-30T14:28:53.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/317
|
||||||
|
- author: RinKeeper
|
||||||
|
changes:
|
||||||
|
- message: "\u041E\u0411\u0420 \u0442\u0435\u043F\u0435\u0440\u044C \u0434\u043E\
|
||||||
|
\u043B\u0436\u043D\u043E \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u043A\
|
||||||
|
\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E(\u0432\u043E\u0437\u043C\u043E\
|
||||||
|
\u0436\u043D\u043E)"
|
||||||
|
type: Fix
|
||||||
|
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D popup \u043F\u043B\
|
||||||
|
\u0430\u0441\u0442\u044B\u0440\u044F"
|
||||||
|
type: Fix
|
||||||
|
id: 273
|
||||||
|
time: '2024-05-30T14:48:15.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/282
|
||||||
|
- author: S_k_R_i_M_e_X
|
||||||
|
changes:
|
||||||
|
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u043E\u0432\
|
||||||
|
\u044B\u0435 \u0441\u043F\u0430\u0432\u043D\u0435\u0440\u044B \u0441\u0442\u0440\
|
||||||
|
\u0443\u043A\u0442\u0443\u0440, \u043F\u0440\u0435\u0434\u043C\u0435\u0442\u043E\
|
||||||
|
\u0432."
|
||||||
|
type: Add
|
||||||
|
id: 274
|
||||||
|
time: '2024-05-30T18:56:18.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/319
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
polymorphable-canister-change-appearance-verb = Change appearance
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
## Entity
|
## Entity
|
||||||
|
|
||||||
patch-component-target-getting-injected = Someone trying to put a patch on you
|
|
||||||
patch-component-injecting-user = You are trying to put a patch on {$target}.
|
patch-component-injecting-user = You are trying to put a patch on {$target}.
|
||||||
patch-component-inject-other-message = You put a patch on {$other}.
|
patch-component-inject-other-message = You put a patch on {$other}.
|
||||||
patch-component-inject-self-message = You put a patch on yourself.
|
patch-component-inject-self-message = You put a patch on yourself.
|
||||||
@@ -8,3 +7,6 @@ patch-component-empty-message = It's empty!
|
|||||||
patch-component-feel-prick-message = You feel a little sting
|
patch-component-feel-prick-message = You feel a little sting
|
||||||
patch-cant-inject = Can't put a patch on {$target}!
|
patch-cant-inject = Can't put a patch on {$target}!
|
||||||
patch-cant-inject-now = Can't put a patch now
|
patch-cant-inject-now = Can't put a patch now
|
||||||
|
## mob-inject doafter messages
|
||||||
|
|
||||||
|
patch-component-injecting-target = {CAPITALIZE($user)} is trying to put a patch on you!
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
ent-SoulShard = камень душ
|
ent-SoulShard = камень душ
|
||||||
.desc = Мистический светящийся осколок.
|
.desc = Мистический светящийся осколок.
|
||||||
|
|
||||||
ent-SoulShardGhost = камень душ
|
ent-SoulShardGhost = камень душ
|
||||||
@@ -57,7 +57,7 @@ ent-SummoningRune = руна призыва
|
|||||||
.desc = Эта руна позволяет мгновенно призвать к руне любого несвязанного культиста. Для использования требуются 2 культиста, стоящих вокруг руны.
|
.desc = Эта руна позволяет мгновенно призвать к руне любого несвязанного культиста. Для использования требуются 2 культиста, стоящих вокруг руны.
|
||||||
|
|
||||||
ent-ReviveRune = руна воскрешения
|
ent-ReviveRune = руна воскрешения
|
||||||
.desc = Каждый раз, когда кого-то приносят в жертву на Руне Преподнесения, этой руне добавляется один глобальный заряд. Размещение трупа культиста на руне и её активация вернет его к жизни, расходуя при этом заряд.
|
.desc = Каждый раз, когда кого-то приносят в жертву на Руне Преподнесения, этой руне добавляется один глобальный заряд. Размещение трупа культиста на руне и её активация вернет его к жизни, расходуя при этом заряд. Руна воскрешения может воскрешать не культистов, не тратя при этом заряды, но она способна излечить их только от удушения и кровопотери.
|
||||||
|
|
||||||
ent-BarrierRune = руна барьера
|
ent-BarrierRune = руна барьера
|
||||||
.desc = При активации на создаёт барьер, блокирующую проход. Может быть повторно активирована, чтобы отменить заклинание.
|
.desc = При активации на создаёт барьер, блокирующую проход. Может быть повторно активирована, чтобы отменить заклинание.
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
polymorphable-canister-change-appearance-verb = Перекрасить
|
||||||
@@ -10,4 +10,4 @@ patch-cant-inject-now = Вы не можете наложить пластырь
|
|||||||
|
|
||||||
## mob-inject doafter messages
|
## mob-inject doafter messages
|
||||||
|
|
||||||
injector-component-injecting-target = {CAPITALIZE(THE($user))} пытается приклеить пластырь на вас!
|
patch-component-injecting-target = {CAPITALIZE($user)} пытается приклеить пластырь на вас!
|
||||||
|
|||||||
620
Resources/Prototypes/Entities/Markers/Spawners/techspawner.yml
Normal file
@@ -0,0 +1,620 @@
|
|||||||
|
# random book spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomBook
|
||||||
|
name: random book spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 85%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: book
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- BookBase
|
||||||
|
- BookSpaceEncyclopedia
|
||||||
|
- BookTheBookOfControl
|
||||||
|
- BookBartendersManual
|
||||||
|
- BookChefGaming
|
||||||
|
- BookLeafLoversSecret
|
||||||
|
- BookEngineersHandbook
|
||||||
|
- BookScientistsGuidebook
|
||||||
|
- BookSecurity
|
||||||
|
- BookHowToKeepStationClean
|
||||||
|
- BookHowToRockAndStone
|
||||||
|
- BookMedicalReferenceBook
|
||||||
|
- BookHowToSurvive
|
||||||
|
- BookChemicalCompendium
|
||||||
|
- BookEscalation
|
||||||
|
- BookEscalationSecurity
|
||||||
|
- BookAtmosDistro
|
||||||
|
- BookAtmosWaste
|
||||||
|
- BookAtmosAirAlarms
|
||||||
|
- BookAtmosVentsMore
|
||||||
|
chance: 0.85
|
||||||
|
|
||||||
|
# random barricade spawner
|
||||||
|
- type: entity
|
||||||
|
id: Random...
|
||||||
|
name: random barricade spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 55%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: barricade
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- Barricade
|
||||||
|
chance: 0.55
|
||||||
|
|
||||||
|
# random box spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomBox
|
||||||
|
name: random box spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 65%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: box
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- BigBox
|
||||||
|
chance: 0.65
|
||||||
|
|
||||||
|
# random cash spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomCash
|
||||||
|
name: random cash spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 95%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: cash
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- SpaceCash10
|
||||||
|
- SpaceCash100
|
||||||
|
- SpaceCash500
|
||||||
|
chance: 0.95
|
||||||
|
rarePrototypes:
|
||||||
|
- SpaceCash1000
|
||||||
|
rareChance: 0.05
|
||||||
|
|
||||||
|
# random circuit spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomCircuit
|
||||||
|
name: random circuit spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 85%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: circuit
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- StationMapCircuitboard
|
||||||
|
- AlertsComputerCircuitboard
|
||||||
|
- PowerComputerCircuitboard
|
||||||
|
- MedicalRecordsComputerCircuitboard
|
||||||
|
- StationRecordsComputerCircuitboard
|
||||||
|
- SurveillanceCameraMonitorCircuitboard
|
||||||
|
- SurveillanceWirelessCameraMonitorCircuitboard
|
||||||
|
- ComputerTelevisionCircuitboard
|
||||||
|
- ResearchComputerCircuitboard
|
||||||
|
- CrewMonitoringComputerCircuitboard
|
||||||
|
- AnalysisComputerCircuitboard
|
||||||
|
- BodyScannerComputerCircuitboard
|
||||||
|
- RadarConsoleCircuitboard
|
||||||
|
- SolarControlComputerCircuitboard
|
||||||
|
- SpaceVillainArcadeComputerCircuitboard
|
||||||
|
- BlockGameArcadeComputerCircuitboard
|
||||||
|
- ComputerMassMediaCircuitboard
|
||||||
|
- SensorConsoleCircuitboard
|
||||||
|
- AutolatheMachineCircuitboard
|
||||||
|
- VaccinatorMachineCircuitboard
|
||||||
|
- DiagnoserMachineCircuitboard
|
||||||
|
- ArtifactAnalyzerMachineCircuitboard
|
||||||
|
- ThermomachineFreezerMachineCircuitBoard
|
||||||
|
- ThermomachineHeaterMachineCircuitBoard
|
||||||
|
- PortableScrubberMachineCircuitBoard
|
||||||
|
- HydroponicsTrayMachineCircuitboard
|
||||||
|
- SMESMachineCircuitboard
|
||||||
|
- SubstationMachineCircuitboard
|
||||||
|
- StasisBedMachineCircuitboard
|
||||||
|
chance: 0.85
|
||||||
|
rarePrototypes:
|
||||||
|
- ShuttleConsoleCircuitboard
|
||||||
|
- ProtolatheMachineCircuitboard
|
||||||
|
- CloningPodMachineCircuitboard
|
||||||
|
- MedicalScannerMachineCircuitboard
|
||||||
|
- CrewMonitoringServerMachineCircuitboard
|
||||||
|
- BiomassReclaimerMachineCircuitboard
|
||||||
|
- GyroscopeMachineCircuitboard
|
||||||
|
- MicrowaveMachineCircuitboard
|
||||||
|
rareChance: 0.15
|
||||||
|
|
||||||
|
# random disabler spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomDisabler
|
||||||
|
name: random disabler spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 40%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: disabler
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- WeaponDisablerPractice
|
||||||
|
chance: 0.40
|
||||||
|
rarePrototypes:
|
||||||
|
- WeaponDisabler
|
||||||
|
rareChance: 0.20
|
||||||
|
|
||||||
|
# random egun spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomEGun
|
||||||
|
name: random egun spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 10%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: e_gun
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- WeaponEgun
|
||||||
|
chance: 0.10
|
||||||
|
|
||||||
|
# random flashlight spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomFlashlight
|
||||||
|
name: random flashlight spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 90%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: flashlight
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- FlashlightLantern
|
||||||
|
- EmptyFlashlightLantern
|
||||||
|
- FlashlightSeclite
|
||||||
|
- Lamp
|
||||||
|
- LampGold
|
||||||
|
- Lantern
|
||||||
|
chance: 0.90
|
||||||
|
rarePrototypes:
|
||||||
|
- LanternFlash
|
||||||
|
rareChance: 0.01
|
||||||
|
|
||||||
|
# random girder spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomGirder
|
||||||
|
name: random girder spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 70%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: girder
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- Girder
|
||||||
|
- ReinforcedGirder
|
||||||
|
chance: 0.70
|
||||||
|
|
||||||
|
# random handcuffs spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomHandcuffs
|
||||||
|
name: random handcuffs spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 50%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: handcuffs
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- Handcuffs
|
||||||
|
- Zipties
|
||||||
|
chance: 0.50
|
||||||
|
|
||||||
|
# random closed spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomCloset
|
||||||
|
name: random closet spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: locker
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- ClosetEmergencyFilledRandom
|
||||||
|
- ClosetFireFilled
|
||||||
|
- ClosetMaintenanceFilledRandom
|
||||||
|
- ClosetToolFilled
|
||||||
|
- LockerWeldingSuppliesFilled
|
||||||
|
- LockerElectricalSuppliesFilled
|
||||||
|
chance: 0.80
|
||||||
|
rarePrototypes:
|
||||||
|
- ClosetEmergency
|
||||||
|
- ClosetFire
|
||||||
|
- ClosetMaintenance
|
||||||
|
- ClosetTool
|
||||||
|
- LockerWeldingSupplies
|
||||||
|
- LockerElectricalSupplies
|
||||||
|
rareChance: 0.20
|
||||||
|
|
||||||
|
# random medkit spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomMedkit
|
||||||
|
name: random medkit spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 70%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: medkit
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- MedkitFilled
|
||||||
|
- MedkitCombat
|
||||||
|
- MedkitRadiationFilled
|
||||||
|
- MedkilOxygenFilled
|
||||||
|
- MedkitBruteFilled
|
||||||
|
- MedkitToxinFilled
|
||||||
|
- MedkitBurnFilled
|
||||||
|
- MedkitAdvanced
|
||||||
|
chance: 0.70
|
||||||
|
rarePrototypes:
|
||||||
|
- Medkit
|
||||||
|
- MedkitCombatFilled
|
||||||
|
- MedkitRadiation
|
||||||
|
- MedkilOxygen
|
||||||
|
- MedkitBrute
|
||||||
|
- MedkitToxin
|
||||||
|
- MedkitBurn
|
||||||
|
- MedkitAdvancedFilled
|
||||||
|
rareChance: 0.20
|
||||||
|
|
||||||
|
# random material spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomMaterial
|
||||||
|
name: random material spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 70%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: metal
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- SheetPlastic
|
||||||
|
- SheetGlass
|
||||||
|
- SheetRGlass
|
||||||
|
- SheetSteel
|
||||||
|
- SheetPaper
|
||||||
|
- SheetPlasteel
|
||||||
|
chance: 0.70
|
||||||
|
rarePrototypes:
|
||||||
|
- SheetPlasma
|
||||||
|
- SheetUranium
|
||||||
|
- SheetPGlass
|
||||||
|
- SheetUGlass
|
||||||
|
- SheetRPGlass
|
||||||
|
- SheetRUGlass
|
||||||
|
rareChance: 0.15
|
||||||
|
|
||||||
|
# random peel spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomPeel
|
||||||
|
name: random peel spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: peel
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- TrashBananaPeel
|
||||||
|
- TrashBananiumPeel
|
||||||
|
- TrashMimanaPeel
|
||||||
|
- TrashBakedBananaPeel
|
||||||
|
chance: 0.80
|
||||||
|
rarePrototypes:
|
||||||
|
- TrashBananaPeelExplosive
|
||||||
|
rareChance: 0.01
|
||||||
|
|
||||||
|
# random P.A.C.M.A.N spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomPower
|
||||||
|
name: random P.A.C.M.A.N spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: power
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- PortableGeneratorJrPacman
|
||||||
|
- PortableGeneratorPacman
|
||||||
|
- PortableGeneratorSuperPacman
|
||||||
|
chance: 0.80
|
||||||
|
|
||||||
|
# random rod spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomRods
|
||||||
|
name: random rod spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 90%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: rods
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- PartRodMetal1
|
||||||
|
- PartRodMetal10
|
||||||
|
- PartRodMetal
|
||||||
|
chance: 0.90
|
||||||
|
|
||||||
|
# random rollerbed spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomRollerBed
|
||||||
|
name: random rollerbed spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 60%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: rollerbed
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- RollerBed
|
||||||
|
- EmergencyRollerBed
|
||||||
|
- CheapRollerBed
|
||||||
|
chance: 0.60
|
||||||
|
rarePrototypes:
|
||||||
|
- RollerBedSpawnFolded
|
||||||
|
- EmergencyRollerBedSpawnFolded
|
||||||
|
- CheapRollerBedSpawnFolded
|
||||||
|
rareChance: 0.20
|
||||||
|
|
||||||
|
# random shard spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomShard
|
||||||
|
name: random shard spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: shard
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- ShardGlass
|
||||||
|
- ShardGlassReinforced
|
||||||
|
chance: 0.80
|
||||||
|
rarePrototypes:
|
||||||
|
- ShardGlassPlasma
|
||||||
|
- ShardGlassUranium
|
||||||
|
rareChance: 0.5
|
||||||
|
|
||||||
|
# random shiv spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomShiv
|
||||||
|
name: random shiv spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 50%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: shiv
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- Shiv
|
||||||
|
- ScalpelShiv
|
||||||
|
- ReinforcedShiv
|
||||||
|
chance: 0.50
|
||||||
|
rarePrototypes:
|
||||||
|
- PlasmaShiv
|
||||||
|
- UraniumShiv
|
||||||
|
rareChance: 0.10
|
||||||
|
|
||||||
|
# random tank spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomTank
|
||||||
|
name: random tank spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: tank
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- WaterTank
|
||||||
|
- WaterTankFull
|
||||||
|
- WeldingFuelTank
|
||||||
|
- WeldingFuelTankFull
|
||||||
|
chance: 0.80
|
||||||
|
rarePrototypes:
|
||||||
|
- WaterTankHighCapacity
|
||||||
|
- WeldingFuelTankHighCapacity
|
||||||
|
rareChance: 0.10
|
||||||
|
|
||||||
|
# random toolbox spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomToolbox
|
||||||
|
name: random toolbox spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 70%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: toolbox
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- ToolboxArtisticFilled
|
||||||
|
- ToolboxArtistic
|
||||||
|
- ToolboxEmergencyFilled
|
||||||
|
- ToolboxEmergency
|
||||||
|
- ToolboxMechanicalFilled
|
||||||
|
- ToolboxMechanical
|
||||||
|
- ToolboxElectricalFilled
|
||||||
|
- ToolboxElectrical
|
||||||
|
chance: 0.70
|
||||||
|
rarePrototypes:
|
||||||
|
- CowToolboxFilled
|
||||||
|
- CowToolbox
|
||||||
|
- ToolboxGoldFilled
|
||||||
|
- ToolboxGold
|
||||||
|
rareChance: 0.5
|
||||||
|
|
||||||
|
# random vomit spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomVomit
|
||||||
|
name: random vomit spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 60%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: vomit
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- PuddleVomit
|
||||||
|
chance: 0.60
|
||||||
|
|
||||||
|
# random wood spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomWood
|
||||||
|
name: random wood spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: wood
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- MaterialWoodPlank
|
||||||
|
- MaterialWoodPlank1
|
||||||
|
- MaterialWoodPlank10
|
||||||
|
chance: 0.80
|
||||||
|
|
||||||
|
# random utility spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomUtility
|
||||||
|
name: random utility spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 80%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: wrench
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- Crowbar
|
||||||
|
- Wrench
|
||||||
|
- Wirecutter
|
||||||
|
- Screwdriver
|
||||||
|
- Welder
|
||||||
|
- NetworkConfigurator
|
||||||
|
chance: 0.80
|
||||||
|
rarePrototypes:
|
||||||
|
- Multitool
|
||||||
|
rareChance: 0.10
|
||||||
|
|
||||||
|
# random syndie loot spawner
|
||||||
|
- type: entity
|
||||||
|
id: RandomSyndie
|
||||||
|
name: random syndie spawner
|
||||||
|
parent: MarkerBase
|
||||||
|
suffix: 1%
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: red
|
||||||
|
- sprite: /Textures/White/Specific/spawner.rsi
|
||||||
|
state: pistol
|
||||||
|
- type: RandomSpawner
|
||||||
|
prototypes:
|
||||||
|
- WeaponSniperMosin
|
||||||
|
- WeaponPistolViper
|
||||||
|
- WeaponPistolCobra
|
||||||
|
- C4
|
||||||
|
- ExGrenade
|
||||||
|
- SyndieMiniBomb
|
||||||
|
- ClothingEyesNightVisionGogglesSyndie
|
||||||
|
- ClothingOuterVestWeb
|
||||||
|
- ClothingBackpackChameleonFill
|
||||||
|
- CigPackSyndicate
|
||||||
|
- ToolboxSyndicateFilled
|
||||||
|
chance: 0.01
|
||||||
|
rarePrototypes:
|
||||||
|
- WeaponRevolverPythonAP
|
||||||
|
- EnergyCrossbowMini
|
||||||
|
- BetrayalKnife
|
||||||
|
- HypopenBox
|
||||||
|
- AgentIDCard
|
||||||
|
- Emag
|
||||||
|
- ExperimentalSyndicateTeleporter
|
||||||
|
- ClothingHandsGlovesNorthStar
|
||||||
|
rareChance: 0.001
|
||||||
@@ -1253,6 +1253,8 @@
|
|||||||
tags:
|
tags:
|
||||||
- VimPilot
|
- VimPilot
|
||||||
- DoorBumpOpener
|
- DoorBumpOpener
|
||||||
|
- type: StandingState
|
||||||
|
canLieDown: true
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: monkey
|
name: monkey
|
||||||
|
|||||||
@@ -34,10 +34,12 @@
|
|||||||
1: { state: can-o1, shader: "unshaded" }
|
1: { state: can-o1, shader: "unshaded" }
|
||||||
2: { state: can-o2, shader: "unshaded" }
|
2: { state: can-o2, shader: "unshaded" }
|
||||||
3: { state: can-o3, shader: "unshaded" }
|
3: { state: can-o3, shader: "unshaded" }
|
||||||
- type: UserInterface
|
- type: UserInterface # WhiteDream - Added PolymorphableCanisterUiKey
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.GasCanisterUiKey.Key
|
- key: enum.GasCanisterUiKey.Key
|
||||||
type: GasCanisterBoundUserInterface
|
type: GasCanisterBoundUserInterface
|
||||||
|
- key: enum.PolymorphableCanisterUiKey.Key
|
||||||
|
type: PolymorphableCanisterBUI
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholds:
|
thresholds:
|
||||||
- trigger:
|
- trigger:
|
||||||
@@ -104,6 +106,7 @@
|
|||||||
access: [["Atmospherics"], ["Engineering"], ["Research"]]
|
access: [["Atmospherics"], ["Engineering"], ["Research"]]
|
||||||
- type: Lock
|
- type: Lock
|
||||||
locked: false
|
locked: false
|
||||||
|
- type: PolymorphableCanister # WhiteDream
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: GasCanister
|
parent: GasCanister
|
||||||
|
|||||||
@@ -782,8 +782,6 @@
|
|||||||
damageModifierSet: StructuralMetallic
|
damageModifierSet: StructuralMetallic
|
||||||
- type: Physics
|
- type: Physics
|
||||||
bodyType: Static
|
bodyType: Static
|
||||||
- type: Reflect
|
|
||||||
reflectProb: 1
|
|
||||||
- type: Pullable
|
- type: Pullable
|
||||||
- type: Airtight
|
- type: Airtight
|
||||||
noAirWhenFullyAirBlocked: false
|
noAirWhenFullyAirBlocked: false
|
||||||
@@ -858,8 +856,6 @@
|
|||||||
3: { state: shuttle_construct-3, visible: true}
|
3: { state: shuttle_construct-3, visible: true}
|
||||||
4: { state: shuttle_construct-4, visible: true}
|
4: { state: shuttle_construct-4, visible: true}
|
||||||
5: { state: shuttle_construct-5, visible: true}
|
5: { state: shuttle_construct-5, visible: true}
|
||||||
- type: Reflect
|
|
||||||
reflectProb: 1
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: WallSolid
|
parent: WallSolid
|
||||||
@@ -877,8 +873,6 @@
|
|||||||
- type: IconSmooth
|
- type: IconSmooth
|
||||||
key: walls
|
key: walls
|
||||||
base: state
|
base: state
|
||||||
- type: Reflect
|
|
||||||
reflectProb: 1
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseWall
|
parent: BaseWall
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
noSpawn: true
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: GameRule
|
- type: GameRule
|
||||||
minPlayers: 35
|
minPlayers: 20
|
||||||
- type: NukeopsRule
|
- type: NukeopsRule
|
||||||
faction: Syndicate
|
faction: Syndicate
|
||||||
|
|
||||||
|
|||||||
@@ -57,3 +57,4 @@
|
|||||||
SeniorPhysician: [ 1, 1 ]
|
SeniorPhysician: [ 1, 1 ]
|
||||||
SeniorEngineer: [ 1, 1 ]
|
SeniorEngineer: [ 1, 1 ]
|
||||||
SeniorSalvageSpecialist: [ 1, 1 ]
|
SeniorSalvageSpecialist: [ 1, 1 ]
|
||||||
|
Borg: [ 2, 2 ]
|
||||||
|
|||||||
@@ -59,4 +59,5 @@
|
|||||||
SeniorOfficer: [ 1, 1 ]
|
SeniorOfficer: [ 1, 1 ]
|
||||||
SeniorPhysician: [ 1, 1 ]
|
SeniorPhysician: [ 1, 1 ]
|
||||||
SeniorEngineer: [ 1, 1 ]
|
SeniorEngineer: [ 1, 1 ]
|
||||||
|
Borg: [ 2, 2 ]
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
soundEmpty: null
|
soundEmpty: null
|
||||||
soundGunshot:
|
soundGunshot:
|
||||||
path: /Audio/White/Cult/wand_teleport.ogg
|
path: /Audio/White/Cult/wand_teleport.ogg
|
||||||
|
clumsyProof: true
|
||||||
- type: BasicEntityAmmoProvider
|
- type: BasicEntityAmmoProvider
|
||||||
proto: BloodBolt
|
proto: BloodBolt
|
||||||
capacity: 25
|
capacity: 25
|
||||||
|
|||||||
BIN
Resources/Textures/White/Specific/spawner.rsi/barricade.png
Normal file
|
After Width: | Height: | Size: 588 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/book.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/box.png
Normal file
|
After Width: | Height: | Size: 862 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/briefcase.png
Normal file
|
After Width: | Height: | Size: 390 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/cash.png
Normal file
|
After Width: | Height: | Size: 222 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/caution.png
Normal file
|
After Width: | Height: | Size: 268 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/circuit.png
Normal file
|
After Width: | Height: | Size: 238 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/disabler.png
Normal file
|
After Width: | Height: | Size: 268 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/e_gun.png
Normal file
|
After Width: | Height: | Size: 260 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/flashlight.png
Normal file
|
After Width: | Height: | Size: 366 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/girder.png
Normal file
|
After Width: | Height: | Size: 736 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/grille.png
Normal file
|
After Width: | Height: | Size: 454 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/handcuffs.png
Normal file
|
After Width: | Height: | Size: 318 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/locker.png
Normal file
|
After Width: | Height: | Size: 440 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/medkit.png
Normal file
|
After Width: | Height: | Size: 426 B |
95
Resources/Textures/White/Specific/spawner.rsi/meta.json
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/tgstation/tgstation/blob/master/icons/effects/random_spawners.dmi",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "barricade"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "book"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "power"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "box"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "briefcase"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cash"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "caution"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "circuit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "disabler"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "e_gun"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "flashlight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "girder"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "grille"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "handcuffs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "locker"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "medkit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "metal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "peel"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pistol"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rods"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rollerbed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shiv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tank"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "toolbox"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vomit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wrench"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/White/Specific/spawner.rsi/metal.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Resources/Textures/White/Specific/spawner.rsi/peel.png
Normal file
|
After Width: | Height: | Size: 284 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/pistol.png
Normal file
|
After Width: | Height: | Size: 234 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/power.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Resources/Textures/White/Specific/spawner.rsi/rods.png
Normal file
|
After Width: | Height: | Size: 356 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/rollerbed.png
Normal file
|
After Width: | Height: | Size: 474 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/shard.png
Normal file
|
After Width: | Height: | Size: 290 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/shiv.png
Normal file
|
After Width: | Height: | Size: 436 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/tank.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/toolbox.png
Normal file
|
After Width: | Height: | Size: 302 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/vomit.png
Normal file
|
After Width: | Height: | Size: 420 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/wood.png
Normal file
|
After Width: | Height: | Size: 486 B |
BIN
Resources/Textures/White/Specific/spawner.rsi/wrench.png
Normal file
|
After Width: | Height: | Size: 376 B |