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
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,8 +37,10 @@ using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared._White.Cult.Runes;
|
||||
using Content.Shared._White.Cult.UI;
|
||||
using Content.Shared.Cuffs;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Mindshield.Components;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Movement.Pulling.Components;
|
||||
using Content.Shared.Movement.Pulling.Systems;
|
||||
using Content.Shared.UserInterface;
|
||||
@@ -74,6 +76,8 @@ public sealed partial class CultSystem : EntitySystem
|
||||
[Dependency] private readonly PullingSystem _pulling = default!;
|
||||
[Dependency] private readonly SharedCuffableSystem _cuffable = default!;
|
||||
[Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
[Dependency] private readonly MobThresholdSystem _thresholdSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -821,8 +825,7 @@ public sealed partial class CultSystem : EntitySystem
|
||||
var targets =
|
||||
_lookup.GetEntitiesInRange(uid, component.RangeTarget, LookupFlags.Dynamic | LookupFlags.Sundries);
|
||||
|
||||
targets.RemoveWhere(x =>
|
||||
!_entityManager.HasComponent<HumanoidAppearanceComponent>(x) || !HasComp<CultistComponent>(x));
|
||||
targets.RemoveWhere(x => !_entityManager.HasComponent<HumanoidAppearanceComponent>(x));
|
||||
|
||||
if (targets.Count == 0)
|
||||
return;
|
||||
@@ -832,12 +835,7 @@ public sealed partial class CultSystem : EntitySystem
|
||||
if (victim == null)
|
||||
return;
|
||||
|
||||
_entityManager.TryGetComponent<MobStateComponent>(victim.Value, out var state);
|
||||
|
||||
if (state == null)
|
||||
return;
|
||||
|
||||
if (state.CurrentState != MobState.Dead && state.CurrentState != MobState.Critical)
|
||||
if (_mobState.IsAlive(victim.Value))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-already-alive"), args.User, args.User);
|
||||
return;
|
||||
@@ -850,15 +848,56 @@ public sealed partial class CultSystem : EntitySystem
|
||||
|
||||
private bool Revive(EntityUid target, EntityUid user)
|
||||
{
|
||||
if (CultRuneReviveComponent.ChargesLeft == 0)
|
||||
if (HasComp<CultistComponent>(target))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-no-charges"), user, user);
|
||||
return false;
|
||||
if (CultRuneReviveComponent.ChargesLeft == 0)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("cult-revive-rune-no-charges"), user, user);
|
||||
return false;
|
||||
}
|
||||
|
||||
CultRuneReviveComponent.ChargesLeft--;
|
||||
|
||||
_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;
|
||||
|
||||
CultRuneReviveComponent.ChargesLeft--;
|
||||
if (!_mobState.IsDead(target, mobState))
|
||||
return false;
|
||||
|
||||
_entityManager.EventBus.RaiseLocalEvent(target, new RejuvenateEvent());
|
||||
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;
|
||||
|
||||
@@ -1383,4 +1422,4 @@ public sealed partial class CultSystem : EntitySystem
|
||||
/*
|
||||
* Helpers End ----
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,8 +121,12 @@ public sealed class ERTRecruitmentRule : StationEventSystem<ERTRecruitmentRuleCo
|
||||
var ev = new ERTRecruitedReasonEvent();
|
||||
RaiseLocalEvent(uid,ev);
|
||||
|
||||
_chat.DispatchServerMessage(args.PlayerSession,Loc.GetString("ert-description"));
|
||||
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-reason", ("reason", ev.Reason)));
|
||||
if (args.PlayerSession != null)
|
||||
{
|
||||
|
||||
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-description"));
|
||||
_chat.DispatchServerMessage(args.PlayerSession, Loc.GetString("ert-reason", ("reason", ev.Reason)));
|
||||
}
|
||||
}
|
||||
|
||||
private void OnStartAttempt(RoundStartAttemptEvent ev)
|
||||
@@ -186,6 +190,7 @@ public sealed class ERTRecruitmentRule : StationEventSystem<ERTRecruitmentRuleCo
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
var ertMap = EnsureComp<ERTMapComponent>(outpost);
|
||||
ertMap.MapId = mapId;
|
||||
|
||||
@@ -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.Hands.Components;
|
||||
using Content.Shared.Input;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Physics;
|
||||
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 MovementSpeedModifierSystem _movement = 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.
|
||||
private const int StandingCollisionLayer = (int)CollisionGroup.MidImpassable;
|
||||
@@ -64,6 +66,11 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_mobState.IsAlive(uid))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsDown(uid))
|
||||
{
|
||||
TryStandUp(uid);
|
||||
@@ -123,13 +130,13 @@ public abstract partial class SharedStandingStateSystem : EntitySystem
|
||||
if (standingState.CurrentState is not StandingState.Lying)
|
||||
return false;
|
||||
|
||||
standingState.CurrentState = StandingState.GettingUp;
|
||||
var doargs = new DoAfterArgs(EntityManager, uid, standingState.StandingUpTime,
|
||||
new StandingUpDoAfterEvent(), uid)
|
||||
{
|
||||
BreakOnMove = false,
|
||||
BreakOnDamage = false,
|
||||
BreakOnHandChange = false
|
||||
BreakOnHandChange = false,
|
||||
RequireCanInteract = false
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
if (!Resolve(uid, ref standingState, false))
|
||||
if (!Resolve(uid, ref standingState, false) || !standingState.CanLieDown)
|
||||
return false;
|
||||
|
||||
if (standingState.CurrentState is not StandingState.Standing)
|
||||
|
||||
@@ -11,7 +11,6 @@ namespace Content.Shared.Standing.Systems;
|
||||
public abstract partial class SharedStandingStateSystem
|
||||
{
|
||||
[Dependency] protected readonly IRobustRandom Random = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
|
||||
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
|
||||
time: '2024-05-22T23:54:27.0000000+00:00'
|
||||
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
|
||||
|
||||
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-inject-other-message = You put a patch on {$other}.
|
||||
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-cant-inject = Can't put a patch on {$target}!
|
||||
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 = Мистический светящийся осколок.
|
||||
|
||||
ent-SoulShardGhost = камень душ
|
||||
@@ -57,7 +57,7 @@ ent-SummoningRune = руна призыва
|
||||
.desc = Эта руна позволяет мгновенно призвать к руне любого несвязанного культиста. Для использования требуются 2 культиста, стоящих вокруг руны.
|
||||
|
||||
ent-ReviveRune = руна воскрешения
|
||||
.desc = Каждый раз, когда кого-то приносят в жертву на Руне Преподнесения, этой руне добавляется один глобальный заряд. Размещение трупа культиста на руне и её активация вернет его к жизни, расходуя при этом заряд.
|
||||
.desc = Каждый раз, когда кого-то приносят в жертву на Руне Преподнесения, этой руне добавляется один глобальный заряд. Размещение трупа культиста на руне и её активация вернет его к жизни, расходуя при этом заряд. Руна воскрешения может воскрешать не культистов, не тратя при этом заряды, но она способна излечить их только от удушения и кровопотери.
|
||||
|
||||
ent-BarrierRune = руна барьера
|
||||
.desc = При активации на создаёт барьер, блокирующую проход. Может быть повторно активирована, чтобы отменить заклинание.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
polymorphable-canister-change-appearance-verb = Перекрасить
|
||||
@@ -10,4 +10,4 @@ patch-cant-inject-now = Вы не можете наложить пластырь
|
||||
|
||||
## 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:
|
||||
- VimPilot
|
||||
- DoorBumpOpener
|
||||
- type: StandingState
|
||||
canLieDown: true
|
||||
|
||||
- type: entity
|
||||
name: monkey
|
||||
|
||||
@@ -34,10 +34,12 @@
|
||||
1: { state: can-o1, shader: "unshaded" }
|
||||
2: { state: can-o2, shader: "unshaded" }
|
||||
3: { state: can-o3, shader: "unshaded" }
|
||||
- type: UserInterface
|
||||
- type: UserInterface # WhiteDream - Added PolymorphableCanisterUiKey
|
||||
interfaces:
|
||||
- key: enum.GasCanisterUiKey.Key
|
||||
type: GasCanisterBoundUserInterface
|
||||
- key: enum.PolymorphableCanisterUiKey.Key
|
||||
type: PolymorphableCanisterBUI
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
@@ -104,6 +106,7 @@
|
||||
access: [["Atmospherics"], ["Engineering"], ["Research"]]
|
||||
- type: Lock
|
||||
locked: false
|
||||
- type: PolymorphableCanister # WhiteDream
|
||||
|
||||
- type: entity
|
||||
parent: GasCanister
|
||||
|
||||
@@ -782,8 +782,6 @@
|
||||
damageModifierSet: StructuralMetallic
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Reflect
|
||||
reflectProb: 1
|
||||
- type: Pullable
|
||||
- type: Airtight
|
||||
noAirWhenFullyAirBlocked: false
|
||||
@@ -858,8 +856,6 @@
|
||||
3: { state: shuttle_construct-3, visible: true}
|
||||
4: { state: shuttle_construct-4, visible: true}
|
||||
5: { state: shuttle_construct-5, visible: true}
|
||||
- type: Reflect
|
||||
reflectProb: 1
|
||||
|
||||
- type: entity
|
||||
parent: WallSolid
|
||||
@@ -877,8 +873,6 @@
|
||||
- type: IconSmooth
|
||||
key: walls
|
||||
base: state
|
||||
- type: Reflect
|
||||
reflectProb: 1
|
||||
|
||||
- type: entity
|
||||
parent: BaseWall
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: GameRule
|
||||
minPlayers: 35
|
||||
minPlayers: 20
|
||||
- type: NukeopsRule
|
||||
faction: Syndicate
|
||||
|
||||
|
||||
@@ -57,3 +57,4 @@
|
||||
SeniorPhysician: [ 1, 1 ]
|
||||
SeniorEngineer: [ 1, 1 ]
|
||||
SeniorSalvageSpecialist: [ 1, 1 ]
|
||||
Borg: [ 2, 2 ]
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
SeniorOfficer: [ 1, 1 ]
|
||||
SeniorPhysician: [ 1, 1 ]
|
||||
SeniorEngineer: [ 1, 1 ]
|
||||
Borg: [ 2, 2 ]
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
soundEmpty: null
|
||||
soundGunshot:
|
||||
path: /Audio/White/Cult/wand_teleport.ogg
|
||||
clumsyProof: true
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: BloodBolt
|
||||
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 |