diff --git a/Content.Client/VendingMachines/UI/VendingMachineItem.xaml b/Content.Client/VendingMachines/UI/VendingMachineItem.xaml index a665b72c73b..a61edfb79b9 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineItem.xaml +++ b/Content.Client/VendingMachines/UI/VendingMachineItem.xaml @@ -4,7 +4,7 @@ SeparationOverride="4"> - + diff --git a/Content.Client/Verbs/VerbSystem.cs b/Content.Client/Verbs/VerbSystem.cs index 6d8b3a2243b..f990c83d7c2 100644 --- a/Content.Client/Verbs/VerbSystem.cs +++ b/Content.Client/Verbs/VerbSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Numerics; using Content.Client.Examine; using Content.Client.Gameplay; using Content.Client.Popups; @@ -7,6 +8,7 @@ using Content.Shared.Tag; using Content.Shared.Verbs; using JetBrains.Annotations; +using Robust.Client.ComponentTrees; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Player; @@ -21,9 +23,10 @@ public sealed class VerbSystem : SharedVerbSystem { [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly ExamineSystem _examine = default!; + [Dependency] private readonly SpriteTreeSystem _tree = default!; [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly IStateManager _stateManager = default!; - [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; /// @@ -31,8 +34,6 @@ public sealed class VerbSystem : SharedVerbSystem /// public const float EntityMenuLookupSize = 0.25f; - [Dependency] private readonly IEyeManager _eyeManager = default!; - /// /// These flags determine what entities the user can see on the context menu. /// @@ -40,6 +41,8 @@ public sealed class VerbSystem : SharedVerbSystem public Action? OnVerbsResponse; + private List _entities = new(); + public override void Initialize() { base.Initialize(); @@ -76,49 +79,50 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true visibility = ev.Visibility; // Get entities - List entities; - var examineFlags = LookupFlags.All & ~LookupFlags.Sensors; + _entities.Clear(); + var entitiesUnderMouse = _tree.QueryAabb(targetPos.MapId, Box2.CenteredAround(targetPos.Position, new Vector2(EntityMenuLookupSize, EntityMenuLookupSize))); // Do we have to do FoV checks? if ((visibility & MenuVisibility.NoFov) == 0) { - var entitiesUnderMouse = gameScreenBase.GetClickableEntities(targetPos).ToHashSet(); - bool Predicate(EntityUid e) => e == player || entitiesUnderMouse.Contains(e); + bool Predicate(EntityUid e) => e == player; TryComp(player.Value, out ExaminerComponent? examiner); - entities = new(); - foreach (var ent in _entityLookup.GetEntitiesInRange(targetPos, EntityMenuLookupSize, flags: examineFlags)) + foreach (var ent in entitiesUnderMouse) { - if (_examine.CanExamine(player.Value, targetPos, Predicate, ent, examiner)) - entities.Add(ent); + if (_examine.CanExamine(player.Value, targetPos, Predicate, ent.Uid, examiner)) + _entities.Add(ent.Uid); } } else { - entities = _entityLookup.GetEntitiesInRange(targetPos, EntityMenuLookupSize, flags: examineFlags).ToList(); + foreach (var ent in entitiesUnderMouse) + { + _entities.Add(ent.Uid); + } } - if (entities.Count == 0) + if (_entities.Count == 0) return false; if (visibility == MenuVisibility.All) { - result = entities; + result = new (_entities); return true; } // remove any entities in containers if ((visibility & MenuVisibility.InContainer) == 0) { - for (var i = entities.Count - 1; i >= 0; i--) + for (var i = _entities.Count - 1; i >= 0; i--) { - var entity = entities[i]; + var entity = _entities[i]; if (ContainerSystem.IsInSameOrTransparentContainer(player.Value, entity)) continue; - entities.RemoveSwap(i); + _entities.RemoveSwap(i); } } @@ -127,23 +131,23 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true { var spriteQuery = GetEntityQuery(); - for (var i = entities.Count - 1; i >= 0; i--) + for (var i = _entities.Count - 1; i >= 0; i--) { - var entity = entities[i]; + var entity = _entities[i]; if (!spriteQuery.TryGetComponent(entity, out var spriteComponent) || !spriteComponent.Visible || _tagSystem.HasTag(entity, "HideContextMenu")) { - entities.RemoveSwap(i); + _entities.RemoveSwap(i); } } } - if (entities.Count == 0) + if (_entities.Count == 0) return false; - result = entities; + result = new(_entities); return true; } diff --git a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs index 63174930df2..1b2849f1d77 100644 --- a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs @@ -35,9 +35,9 @@ public override void Update(float frameTime) while (query.MoveNext(out var uid, out var tech, out var anom)) { if (_timing.CurTime < tech.NextTimer) - return; + continue; - tech.NextTimer = _timing.CurTime + TimeSpan.FromSeconds(tech.TimerFrequency * anom.Stability); + tech.NextTimer += TimeSpan.FromSeconds(tech.TimerFrequency * anom.Stability); _signal.InvokePort(uid, tech.TimerPort); } @@ -61,7 +61,7 @@ private void CreateNewRandomLink(Entity tech, int count) var devices = _lookup.GetEntitiesInRange(Transform(tech).Coordinates, range); if (devices.Count < 1) return; - + for (var i = 0; i < count; i++) { var device = _random.Pick(devices); diff --git a/Content.Server/Body/Components/BloodstreamComponent.cs b/Content.Server/Body/Components/BloodstreamComponent.cs index a6d2afab219..a6c8ad90df9 100644 --- a/Content.Server/Body/Components/BloodstreamComponent.cs +++ b/Content.Server/Body/Components/BloodstreamComponent.cs @@ -111,6 +111,13 @@ public sealed partial class BloodstreamComponent : Component [DataField] public SoundSpecifier BloodHealedSound = new SoundPathSpecifier("/Audio/Effects/lightburn.ogg"); + /// + /// The minimum amount damage reduction needed to play the healing sound/popup. + /// This prevents tiny amounts of heat damage from spamming the sound, e.g. spacing. + /// + [DataField] + public float BloodHealedSoundThreshold = -0.1f; + // TODO probably damage bleed thresholds. /// diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 3da343aaa8b..18790e7326b 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -241,7 +241,7 @@ private void OnDamageChanged(Entity ent, ref DamageChanged } // Heat damage will cauterize, causing the bleed rate to be reduced. - else if (totalFloat < 0 && oldBleedAmount > 0) + else if (totalFloat <= ent.Comp.BloodHealedSoundThreshold && oldBleedAmount > 0) { // Magically, this damage has healed some bleeding, likely // because it's burn damage that cauterized their wounds. diff --git a/Content.Server/EntityEffects/Effects/ActivateArtifact.cs b/Content.Server/EntityEffects/Effects/ActivateArtifact.cs index 3e973884995..8540478362f 100644 --- a/Content.Server/EntityEffects/Effects/ActivateArtifact.cs +++ b/Content.Server/EntityEffects/Effects/ActivateArtifact.cs @@ -10,7 +10,7 @@ public sealed partial class ActivateArtifact : EntityEffect public override void Effect(EntityEffectBaseArgs args) { var artifact = args.EntityManager.EntitySysManager.GetEntitySystem(); - artifact.TryActivateArtifact(args.TargetEntity); + artifact.TryActivateArtifact(args.TargetEntity, logMissing: false); } protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => diff --git a/Content.Server/Forensics/Systems/ForensicPadSystem.cs b/Content.Server/Forensics/Systems/ForensicPadSystem.cs index 42512cb1fdc..a3f5627cdba 100644 --- a/Content.Server/Forensics/Systems/ForensicPadSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicPadSystem.cs @@ -1,10 +1,11 @@ -using Content.Shared.Examine; -using Content.Shared.Interaction; -using Content.Shared.Inventory; +using Content.Server.Labels; using Content.Server.Popups; using Content.Shared.DoAfter; +using Content.Shared.Examine; using Content.Shared.Forensics; using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Inventory; namespace Content.Server.Forensics { @@ -17,6 +18,7 @@ public sealed class ForensicPadSystem : EntitySystem [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly LabelSystem _label = default!; public override void Initialize() { @@ -99,10 +101,8 @@ private void OnDoAfter(EntityUid uid, ForensicPadComponent padComponent, Forensi if (args.Args.Target != null) { - var name = HasComp(args.Args.Target) - ? "forensic-pad-fingerprint-name" - : "forensic-pad-gloves-name"; - _metaData.SetEntityName(uid, Loc.GetString(name, ("entity", args.Args.Target))); + string label = Identity.Name(args.Args.Target.Value, EntityManager); + _label.Label(uid, label); } padComponent.Sample = args.Sample; diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 82a38f5f00f..46d2cd69b91 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -92,7 +92,7 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(ContainerSpawnPointSystem), typeof(SpawnPointSystem)}); + SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(SpawnPointSystem)}, after: new [] { typeof(ContainerSpawnPointSystem)}); SubscribeLocalEvent(OnStationPostInit); @@ -335,8 +335,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent ev) if (ev.SpawnResult != null) return; - if (ev.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Arrivals) - return; + // We use arrivals as the default spawn so don't check for job prio. // Only works on latejoin even if enabled. if (!Enabled || _ticker.RunLevel != GameRunLevel.InRound) diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index f30cab253a0..e544c1538d1 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -70,11 +70,11 @@ public sealed partial class ShuttleSystem private readonly HashSet _lookupEnts = new(); private readonly HashSet _immuneEnts = new(); + private readonly HashSet> _noFtls = new(); private EntityQuery _bodyQuery; private EntityQuery _buckleQuery; - private EntityQuery _beaconQuery; - private EntityQuery _ghostQuery; + private EntityQuery _immuneQuery; private EntityQuery _physicsQuery; private EntityQuery _statusQuery; private EntityQuery _xformQuery; @@ -86,8 +86,7 @@ private void InitializeFTL() _bodyQuery = GetEntityQuery(); _buckleQuery = GetEntityQuery(); - _beaconQuery = GetEntityQuery(); - _ghostQuery = GetEntityQuery(); + _immuneQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); _statusQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); @@ -102,7 +101,7 @@ private void InitializeFTL() private void OnFtlShutdown(Entity ent, ref ComponentShutdown args) { - Del(ent.Comp.VisualizerEntity); + QueueDel(ent.Comp.VisualizerEntity); ent.Comp.VisualizerEntity = null; } @@ -404,7 +403,12 @@ private void UpdateFTLStarting(Entity entity) // Offset the start by buffer range just to avoid overlap. var ftlStart = new EntityCoordinates(ftlMap, new Vector2(_index + width / 2f, 0f) - shuttleCenter); + // Store the matrix for the grid prior to movement. This means any entities we need to leave behind we can make sure their positions are updated. + // Setting the entity to map directly may run grid traversal (at least at time of writing this). + var oldMapUid = xform.MapUid; + var oldGridMatrix = _transform.GetWorldMatrix(xform); _transform.SetCoordinates(entity.Owner, ftlStart); + LeaveNoFTLBehind((entity.Owner, xform), oldGridMatrix, oldMapUid); // Reset rotation so they always face the same direction. xform.LocalRotation = Angle.Zero; @@ -476,6 +480,9 @@ private void UpdateFTLArriving(Entity entity) MapId mapId; + QueueDel(entity.Comp1.VisualizerEntity); + entity.Comp1.VisualizerEntity = null; + if (!Exists(entity.Comp1.TargetCoordinates.EntityId)) { // Uhh good luck @@ -628,6 +635,31 @@ private void DoTheDinosaur(TransformComponent xform) } } + private void LeaveNoFTLBehind(Entity grid, Matrix3x2 oldGridMatrix, EntityUid? oldMapUid) + { + if (oldMapUid == null) + return; + + _noFtls.Clear(); + var oldGridRotation = oldGridMatrix.Rotation(); + _lookup.GetGridEntities(grid.Owner, _noFtls); + + foreach (var childUid in _noFtls) + { + if (!_xformQuery.TryComp(childUid, out var childXform)) + continue; + + // If we're not parented directly to the grid the matrix may be wrong. + var relative = _physics.GetRelativePhysicsTransform(childUid.Owner, (grid.Owner, grid.Comp)); + + _transform.SetCoordinates( + childUid, + childXform, + new EntityCoordinates(oldMapUid.Value, + Vector2.Transform(relative.Position, oldGridMatrix)), rotation: relative.Quaternion2D.Angle + oldGridRotation); + } + } + private void KnockOverKids(TransformComponent xform, ref ValueList toKnock) { // Not recursive because probably not necessary? If we need it to be that's why this method is separate. @@ -924,8 +956,11 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom if (!Resolve(uid, ref manager, ref grid, ref xform) || xform.MapUid == null) return; + if (!TryComp(xform.MapUid, out BroadphaseComponent? lookup)) + return; + // Flatten anything not parented to a grid. - var transform = _physics.GetPhysicsTransform(uid, xform); + var transform = _physics.GetRelativePhysicsTransform((uid, xform), xform.MapUid.Value); var aabbs = new List(manager.Fixtures.Count); var tileSet = new List<(Vector2i, Tile)>(); @@ -946,7 +981,8 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom _biomes.ReserveTiles(xform.MapUid.Value, aabb, tileSet); _lookupEnts.Clear(); _immuneEnts.Clear(); - _lookup.GetEntitiesIntersecting(xform.MapUid.Value, aabb, _lookupEnts, LookupFlags.Uncontained); + // TODO: Ideally we'd query first BEFORE moving grid but needs adjustments above. + _lookup.GetLocalEntitiesIntersecting(xform.MapUid.Value, fixture.Shape, transform, _lookupEnts, flags: LookupFlags.Uncontained, lookup: lookup); foreach (var ent in _lookupEnts) { @@ -955,7 +991,13 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (_ghostQuery.HasComponent(ent) || _beaconQuery.HasComponent(ent)) + // If it's on our grid ignore it. + if (!_xformQuery.TryComp(ent, out var childXform) || childXform.GridUid == uid) + { + continue; + } + + if (_immuneQuery.HasComponent(ent)) { continue; } @@ -969,9 +1011,6 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (HasComp(ent)) - continue; - QueueDel(ent); } } diff --git a/Content.Server/StationEvents/Components/BureaucraticErrorRuleComponent.cs b/Content.Server/StationEvents/Components/BureaucraticErrorRuleComponent.cs index 6dfbd9083e8..346e75e2eeb 100644 --- a/Content.Server/StationEvents/Components/BureaucraticErrorRuleComponent.cs +++ b/Content.Server/StationEvents/Components/BureaucraticErrorRuleComponent.cs @@ -1,9 +1,15 @@ -using Content.Server.StationEvents.Events; +using Content.Server.StationEvents.Events; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; namespace Content.Server.StationEvents.Components; [RegisterComponent, Access(typeof(BureaucraticErrorRule))] public sealed partial class BureaucraticErrorRuleComponent : Component { - + /// + /// The jobs that are ignored by this rule and won't have their slots changed. + /// + [DataField] + public List> IgnoredJobs = new(); } diff --git a/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs b/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs index b49049a10d4..2ddc7245cf5 100644 --- a/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs +++ b/Content.Server/StationEvents/Events/BureaucraticErrorRule.cs @@ -1,9 +1,9 @@ using System.Linq; -using Content.Server.GameTicking.Rules.Components; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Server.StationEvents.Components; using Content.Shared.GameTicking.Components; +using Content.Shared.Roles; using JetBrains.Annotations; using Robust.Shared.Random; @@ -23,6 +23,9 @@ protected override void Started(EntityUid uid, BureaucraticErrorRuleComponent co var jobList = _stationJobs.GetJobs(chosenStation.Value).Keys.ToList(); + foreach(var job in component.IgnoredJobs) + jobList.Remove(job); + if (jobList.Count == 0) return; diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs index a5469e93dc0..6ddcd56abd8 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs @@ -140,10 +140,11 @@ public void RandomizeArtifact(EntityUid uid, ArtifactComponent component) /// /// /// + /// Set this to false if you don't know if the entity is an artifact. /// - public bool TryActivateArtifact(EntityUid uid, EntityUid? user = null, ArtifactComponent? component = null) + public bool TryActivateArtifact(EntityUid uid, EntityUid? user = null, ArtifactComponent? component = null, bool logMissing = true) { - if (!Resolve(uid, ref component)) + if (!Resolve(uid, ref component, logMissing)) return false; // check if artifact is under suppression field diff --git a/Content.Shared/Atmos/Rotting/PerishableComponent.cs b/Content.Shared/Atmos/Rotting/PerishableComponent.cs index 6983b872b89..99b30fc9069 100644 --- a/Content.Shared/Atmos/Rotting/PerishableComponent.cs +++ b/Content.Shared/Atmos/Rotting/PerishableComponent.cs @@ -45,6 +45,12 @@ public sealed partial class PerishableComponent : Component [DataField, AutoNetworkedField] public int Stage; + + /// + /// If true, rot will always progress. + /// + [DataField, AutoNetworkedField] + public bool ForceRotProgression; } diff --git a/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs b/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs index 840818dee59..60c89c012a0 100644 --- a/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs +++ b/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs @@ -115,6 +115,10 @@ public bool IsRotProgressing(EntityUid uid, PerishableComponent? perishable) if (!Resolve(uid, ref perishable, false)) return false; + // Overrides all the other checks. + if (perishable.ForceRotProgression) + return true; + // only dead things or inanimate objects can rot if (TryComp(uid, out var mobState) && !_mobState.IsDead(uid, mobState)) return false; diff --git a/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs b/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs new file mode 100644 index 00000000000..e933eb1a790 --- /dev/null +++ b/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Damage.Components; + +/// +/// This is used for an effect that nullifies and adds an alert. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SlowOnDamageSystem))] +public sealed partial class IgnoreSlowOnDamageComponent : Component; diff --git a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs index 3e50ee35572..6b5f57c595e 100644 --- a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs +++ b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs @@ -22,6 +22,10 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnGotEquipped); SubscribeLocalEvent(OnGotUnequipped); + + SubscribeLocalEvent(OnIgnoreStartup); + SubscribeLocalEvent(OnIgnoreShutdown); + SubscribeLocalEvent(OnIgnoreModifySpeed); } private void OnRefreshMovespeed(EntityUid uid, SlowOnDamageComponent component, RefreshMovementSpeedModifiersEvent args) @@ -84,6 +88,21 @@ private void OnGotUnequipped(Entity ent, { _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(args.Wearer); } + + private void OnIgnoreStartup(Entity ent, ref ComponentStartup args) + { + _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(ent); + } + + private void OnIgnoreShutdown(Entity ent, ref ComponentShutdown args) + { + _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(ent); + } + + private void OnIgnoreModifySpeed(Entity ent, ref ModifySlowOnDamageSpeedEvent args) + { + args.Speed = 1f; + } } [ByRefEvent] diff --git a/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs new file mode 100644 index 00000000000..9ed7ee05a51 --- /dev/null +++ b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Makes the entity immune to FTL arrival landing AKA smimsh. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class FTLSmashImmuneComponent : Component; diff --git a/Content.Shared/Shuttles/Components/NoFTLComponent.cs b/Content.Shared/Shuttles/Components/NoFTLComponent.cs new file mode 100644 index 00000000000..d48ba33bbac --- /dev/null +++ b/Content.Shared/Shuttles/Components/NoFTLComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Prevents the attached entity from taking FTL. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NoFTLComponent : Component +{ + +} diff --git a/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs b/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs index f478405bec5..25d0453b592 100644 --- a/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs @@ -17,7 +17,7 @@ public sealed partial class RechargeBasicEntityAmmoComponent : Component [DataField("rechargeSound")] [AutoNetworkedField] - public SoundSpecifier RechargeSound = new SoundPathSpecifier("/Audio/Magic/forcewall.ogg") + public SoundSpecifier? RechargeSound = new SoundPathSpecifier("/Audio/Magic/forcewall.ogg") { Params = AudioParams.Default.WithVolume(-5f) }; @@ -27,4 +27,7 @@ public sealed partial class RechargeBasicEntityAmmoComponent : Component AutoNetworkedField] [AutoPausedField] public TimeSpan? NextCharge; + + [DataField, AutoNetworkedField] + public bool ShowExamineText = true; } diff --git a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs index 9d6d5524001..3316df0b965 100644 --- a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs @@ -66,6 +66,9 @@ private void OnInit(EntityUid uid, RechargeBasicEntityAmmoComponent component, M private void OnExamined(EntityUid uid, RechargeBasicEntityAmmoComponent component, ExaminedEvent args) { + if (!component.ShowExamineText) + return; + if (!TryComp(uid, out var ammo) || ammo.Count == ammo.Capacity || component.NextCharge == null) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e57ae7bf352..925a7da9599 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,71 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Blurry vision no longer causes names to momentarily appear as "???" when - examining. - type: Remove - id: 6850 - time: '2024-07-01T03:06:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29633 -- author: Cojoke-dot - changes: - - message: Items that slow down a person when held now slow down when dragged too. - type: Tweak - id: 6851 - time: '2024-07-01T05:33:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29364 -- author: metalgearsloth - changes: - - message: Add effects for when shuttles are arriving. - type: Add - id: 6852 - time: '2024-07-01T06:11:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29402 -- author: Plykiya - changes: - - message: Gravity wells, like the supermatter grenade, now function properly again. - type: Fix - id: 6853 - time: '2024-07-01T15:39:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29617 -- author: joelsgp - changes: - - message: Fixed login tips - type: Fix - id: 6854 - time: '2024-07-01T16:27:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29640 -- author: Cojoke-dot - changes: - - message: Flares can now light Cigarettes and other similar things - type: Tweak - - message: Flares now are no longer hot after burning out - type: Tweak - id: 6855 - time: '2024-07-01T21:14:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29476 -- author: Tayrtahn - changes: - - message: Fixed NukeOps ending prematurely in some situations where operatives - were still alive. - type: Fix - id: 6856 - time: '2024-07-01T22:23:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29642 -- author: Tayrtahn - changes: - - message: Fixed characters thrashing when speaking in beds. - type: Fix - id: 6857 - time: '2024-07-02T03:30:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29653 -- author: slarticodefast - changes: - - message: Fixed sprite rotation in harm mode on rotated grids. - type: Fix - id: 6858 - time: '2024-07-02T13:04:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29663 - author: lzk228 changes: - message: Space Law book added to the game. @@ -3912,3 +3845,71 @@ id: 7349 time: '2024-09-11T03:33:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31638 +- author: SlamBamActionman + changes: + - message: The Station AI job is no longer affected by the Bureaucratic Event event. + type: Fix + id: 7350 + time: '2024-09-11T11:24:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32021 +- author: K-Dynamic + changes: + - message: Reduced canister prices from 1000 to 200 spesos + type: Tweak + id: 7351 + time: '2024-09-11T12:53:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31965 +- author: EmoGarbage404 + changes: + - message: Added the hivelord! This self-replicating alien is found on the mining + asteroid. It's core is known to have powerful healing properties. + type: Add + id: 7352 + time: '2024-09-11T13:52:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31322 +- author: PeccNeck + changes: + - message: Fixed a bug where ore processors could not produce reinforced glass + type: Fix + id: 7353 + time: '2024-09-11T14:06:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32069 +- author: Plykiya + changes: + - message: You can now use swords to make baseball bats. + type: Fix + id: 7354 + time: '2024-09-11T14:45:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32075 +- author: Plykiya + changes: + - message: Banners are no longer invincible. + type: Fix + id: 7355 + time: '2024-09-11T15:29:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32077 +- author: themias + changes: + - message: Very small amounts of heat damage no longer play the cauterization sound + (e.g. spacing) + type: Fix + id: 7356 + time: '2024-09-11T16:05:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32080 +- author: deltanedas + changes: + - message: Coins and Supercharged CPUs can now be recycled for rarer materials. + type: Tweak + id: 7357 + time: '2024-09-11T16:24:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31970 +- author: lzk228 + changes: + - message: Fixed forensic pad didn't care about target identity. + type: Fix + - message: Instead of name changing, forensic pad now will have a label with target's + name. + type: Tweak + id: 7358 + time: '2024-09-12T00:52:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31842 diff --git a/Resources/Locale/en-US/alerts/alerts.ftl b/Resources/Locale/en-US/alerts/alerts.ftl index 319809da40a..37af416c3a1 100644 --- a/Resources/Locale/en-US/alerts/alerts.ftl +++ b/Resources/Locale/en-US/alerts/alerts.ftl @@ -96,6 +96,9 @@ alerts-bleed-desc = You're [color=red]bleeding[/color]. alerts-pacified-name = [color=green]Pacified[/color] alerts-pacified-desc = You're pacified; you won't be able to harm living creatures. +alerts-adrenaline-name = [color=red]Adrenaline[/color] +alerts-adrenaline-desc = You're full of adrenaline: pain won't slow you down. + alerts-suit-power-name = Suit Power alerts-suit-power-desc = How much power your space ninja suit has. diff --git a/Resources/Locale/en-US/forensics/forensics.ftl b/Resources/Locale/en-US/forensics/forensics.ftl index 712e8511bb0..80eea069fa9 100644 --- a/Resources/Locale/en-US/forensics/forensics.ftl +++ b/Resources/Locale/en-US/forensics/forensics.ftl @@ -20,9 +20,6 @@ forensic-scanner-printer-not-ready = Printer is not ready yet. forensic-scanner-verb-text = Scan forensic-scanner-verb-message = Perform a forensic scan -forensic-pad-fingerprint-name = {$entity}'s fingerprints -forensic-pad-gloves-name = fibers from {$entity} - forensics-dna-unknown = unknown DNA forensics-verb-text = Remove evidence diff --git a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl index 9a8f2f6c8a3..13d9ed5d6bf 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl @@ -13,3 +13,4 @@ reagent-effect-status-effect-RatvarianLanguage = ratvarian language patterns reagent-effect-status-effect-StaminaModifier = modified stamina reagent-effect-status-effect-RadiationProtection = radiation protection reagent-effect-status-effect-Drowsiness = drowsiness +reagent-effect-status-effect-Adrenaline = adrenaline diff --git a/Resources/Locale/en-US/reagents/meta/chemicals.ftl b/Resources/Locale/en-US/reagents/meta/chemicals.ftl index 1d70ff65ff1..ad9d12e26f8 100644 --- a/Resources/Locale/en-US/reagents/meta/chemicals.ftl +++ b/Resources/Locale/en-US/reagents/meta/chemicals.ftl @@ -28,3 +28,5 @@ reagent-desc-sodium-polyacrylate = A super-absorbent polymer with assorted indus reagent-name-cellulose = cellulose fibers reagent-desc-cellulose = A crystaline polydextrose polymer, plants swear by this stuff. +reagent-name-rororium = rororium +reagent-desc-rororium = A strange substance which fills the cores of the hivelords that roam the mining asteroid. Thought to be the source of their regenerative powers. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl index 3ea1d758c20..120a80829d1 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/ears/headsets_alt.ftl @@ -4,9 +4,6 @@ ent-ClothingHeadsetAltCargo = quartermaster's over-ear headset .desc = { ent-ClothingHeadsetAlt.desc } ent-ClothingHeadsetAltCentCom = CentComm over-ear headset .desc = { ent-ClothingHeadsetAlt.desc } -ent-ClothingHeadsetAltCentComFake = { ent-ClothingHeadsetAltCentCom } - .suffix = Fake - .desc = { ent-ClothingHeadsetAltCentCom.desc } ent-ClothingHeadsetAltCommand = command over-ear headset .desc = { ent-ClothingHeadsetAlt.desc } ent-ClothingHeadsetAltEngineering = chief engineer's over-ear headset diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl index db75c69d82a..8d951c6acf0 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl @@ -35,3 +35,5 @@ ent-SalvageSpawnerMobMagnet100 = { ent-SalvageSpawnerMobMagnet } .desc = { ent-SalvageSpawnerMobMagnet.desc } ent-SalvageSpawnerMobShark = Salvage Sharkminnow Spawner .desc = { ent-MarkerBase.desc } +ent-SalvageSpawnerMobMiningAsteroid = Mining Asteroid Mob Spawner + .desc = { ent-MarkerBase.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl index 082cda3e50b..92cbcf536e4 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl @@ -12,3 +12,11 @@ ent-EffectGoliathTentacleSpawn = tentacle .desc = { ent-BaseEffectGoliathTentacleSpawn.desc } ent-EffectGoliathTentacleRetract = { ent-BaseEffectGoliathTentacleSpawn } .desc = { ent-BaseEffectGoliathTentacleSpawn.desc } +ent-MobHivelord = hivelord + .desc = A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original. +ent-MobHivelordBrood = hivelord brood + .desc = A fragment of the original hivelord, rallying behind its original. One isn't much of a threat, but... +ent-FoodHivelordRemains = hivelord remains + .desc = All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating. +ent-FoodHivelordRemainsInert = inert hivelord remains + .desc = All that remains of a hivelord... Now all is truly lost. diff --git a/Resources/Locale/ru-RU/alerts/alerts.ftl b/Resources/Locale/ru-RU/alerts/alerts.ftl index 3138d915f02..2bb43aeb813 100644 --- a/Resources/Locale/ru-RU/alerts/alerts.ftl +++ b/Resources/Locale/ru-RU/alerts/alerts.ftl @@ -64,6 +64,8 @@ alerts-bleed-name = [color=red]Кровотечение[/color] alerts-bleed-desc = У вас [color=red]кровотечение[/color]. alerts-pacified-name = [color=green]Пацифизм[/color] alerts-pacified-desc = Вы чувствуете себя умиротворённо и не можете вредить живым существам. +alerts-adrenaline-name = [color=red]Adrenaline[/color] +alerts-adrenaline-desc = You're full of adrenaline: pain won't slow you down. alerts-suit-power-name = Заряд костюма alerts-suit-power-desc = Запас энергии вашего костюма космического ниндзя. alerts-magboots-name = Магнитные ботинки diff --git a/Resources/Locale/ru-RU/forensics/forensics.ftl b/Resources/Locale/ru-RU/forensics/forensics.ftl index 04dca175e2d..3066d3729d7 100644 --- a/Resources/Locale/ru-RU/forensics/forensics.ftl +++ b/Resources/Locale/ru-RU/forensics/forensics.ftl @@ -19,8 +19,6 @@ forensic-scanner-match-none = Совпадений не найдено! forensic-scanner-printer-not-ready = Принтер не готов. forensic-scanner-verb-text = Сканировать forensic-scanner-verb-message = Выполняется криминалистическое сканирование -forensic-pad-fingerprint-name = владелец отпечатков: { $entity } -forensic-pad-gloves-name = источник волокон: { $entity } forensics-dna-unknown = неизвестная ДНК forensics-verb-text = Счистить улики forensics-verb-message = Счистить отпечатки пальцев и остатки ДНК с объекта! diff --git a/Resources/Locale/ru-RU/guidebook/chemistry/statuseffects.ftl b/Resources/Locale/ru-RU/guidebook/chemistry/statuseffects.ftl index 3b52efd2691..d4d102718bd 100644 --- a/Resources/Locale/ru-RU/guidebook/chemistry/statuseffects.ftl +++ b/Resources/Locale/ru-RU/guidebook/chemistry/statuseffects.ftl @@ -13,3 +13,4 @@ reagent-effect-status-effect-RatvarianLanguage = паттерны ратварс reagent-effect-status-effect-StaminaModifier = модифицированная выносливость reagent-effect-status-effect-RadiationProtection = защита от радиации reagent-effect-status-effect-Drowsiness = сонливость +reagent-effect-status-effect-Adrenaline = adrenaline diff --git a/Resources/Locale/ru-RU/reagents/meta/chemicals.ftl b/Resources/Locale/ru-RU/reagents/meta/chemicals.ftl index 0b06be98b2f..9f7300a1be1 100644 --- a/Resources/Locale/ru-RU/reagents/meta/chemicals.ftl +++ b/Resources/Locale/ru-RU/reagents/meta/chemicals.ftl @@ -18,3 +18,5 @@ reagent-name-sodium-polyacrylate = полиакрилат натрия reagent-desc-sodium-polyacrylate = Суперпоглощающий полимер с широким спектром применения в промышленности. reagent-name-cellulose = целлюлозные волокна reagent-desc-cellulose = Кристаллический полимер полидекстрозы, растения дорожат этим веществом. +reagent-name-rororium = rororium +reagent-desc-rororium = A strange substance which fills the cores of the hivelords that roam the mining asteroid. Thought to be the source of their regenerative powers. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl index df96d2f008e..81f8a37f41e 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage/spawners.ftl @@ -35,3 +35,5 @@ ent-SalvageSpawnerMobMagnet100 = { ent-SalvageSpawnerMobMagnet } .desc = { ent-SalvageSpawnerMobMagnet.desc } ent-SalvageSpawnerMobShark = спавнер обломок Карпоакула .desc = { ent-MarkerBase.desc } +ent-SalvageSpawnerMobMiningAsteroid = Mining Asteroid Mob Spawner + .desc = { ent-MarkerBase.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl index 03f5bcc1c06..d763ea5a065 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/asteroid.ftl @@ -12,3 +12,11 @@ ent-EffectGoliathTentacleSpawn = щупальце .desc = { ent-BaseEffectGoliathTentacleSpawn.desc } ent-EffectGoliathTentacleRetract = { ent-BaseEffectGoliathTentacleSpawn } .desc = { ent-BaseEffectGoliathTentacleSpawn.desc } +ent-MobHivelord = hivelord + .desc = A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original. +ent-MobHivelordBrood = hivelord brood + .desc = A fragment of the original hivelord, rallying behind its original. One isn't much of a threat, but... +ent-FoodHivelordRemains = hivelord remains + .desc = All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating. +ent-FoodHivelordRemainsInert = inert hivelord remains + .desc = All that remains of a hivelord... Now all is truly lost. diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index 4ee4fdce0cb..80fcc44a559 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -427,6 +427,14 @@ name: alerts-pacified-name description: alerts-pacified-desc +- type: alert + id: Adrenaline + icons: + - sprite: Mobs/Species/Human/organs.rsi + state: heart-on + name: alerts-adrenaline-name + description: alerts-adrenaline-desc + - type: alert id: Debug1 icons: diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index 97912a3f6d2..31ec83cbd7d 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -263,7 +263,7 @@ # Corvax-HiddenDesc-End - type: entity - parent: [ClothingHandsGlovesColorBlack, BaseSecurityCargoContraband] + parent: [ ClothingHandsGlovesColorBlack, BaseSecurityEngineeringContraband ] id: ClothingHandsGlovesCombat name: combat gloves description: These tactical gloves are fireproof and shock resistant. diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index ea6a4ea41cc..fafa66c8141 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -2,7 +2,7 @@ #When it DOES exist, the values here should be totally reworked - probably just port them from SS13. - type: entity - parent: [ClothingHeadBase, BaseRestrictedContraband] + parent: ClothingHeadBase id: ClothingHeadHelmetBase abstract: true components: @@ -146,7 +146,7 @@ #Cult Helmet - type: entity - parent: ClothingHeadBase + parent: [ClothingHeadBase, BaseMajorContraband] id: ClothingHeadHelmetCult name: cult helmet description: A robust, evil-looking cult helmet. @@ -166,7 +166,7 @@ #Space Ninja Helmet - type: entity - parent: ClothingHeadEVAHelmetBase + parent: [ClothingHeadEVAHelmetBase, BaseMajorContraband] id: ClothingHeadHelmetSpaceNinja name: space ninja helmet description: What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear. @@ -258,7 +258,7 @@ #Atmos Fire Helmet - type: entity - parent: ClothingHeadLightBase + parent: [ClothingHeadLightBase, BaseEngineeringContraband] id: ClothingHeadHelmetAtmosFire name: atmos fire helmet description: An atmos fire helmet, able to keep the user cool in any situation. @@ -291,7 +291,7 @@ #Chitinous Helmet - type: entity - parent: ClothingHeadBase + parent: [ ClothingHeadBase, BaseMajorContraband] id: ClothingHeadHelmetLing name: chitinous helmet description: An all-consuming chitinous mass of armor. @@ -389,7 +389,7 @@ #Bone Helmet - type: entity - parent: ClothingHeadHelmetBase + parent: [ ClothingHeadHelmetBase, BaseMinorContraband ] id: ClothingHeadHelmetBone name: bone helmet description: Cool-looking helmet made of skull of your enemies. @@ -403,7 +403,7 @@ node: helmet - type: entity - parent: ClothingHeadHelmetBase + parent: [ ClothingHeadHelmetBase, BaseMinorContraband ] id: ClothingHeadHelmetPodWars name: ironclad II helmet description: An ironclad II helmet, a relic of the pod wars. @@ -415,7 +415,7 @@ #Justice Helmet - type: entity - parent: ClothingHeadHelmetBase + parent: [ ClothingHeadHelmetBase, BaseRestrictedContraband ] id: ClothingHeadHelmetJustice name: justice helm description: Advanced security gear. Protects the station from ne'er-do-wells. @@ -500,4 +500,4 @@ - type: InstantAction useDelay: 1 itemIconStyle: BigItem - event: !type:ToggleActionEvent \ No newline at end of file + event: !type:ToggleActionEvent diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index a8dcbf99cab..90af169572a 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -359,7 +359,7 @@ accent: StutteringAccent - type: entity - parent: ClothingMaskGasExplorer + parent: [ ClothingMaskGas, BaseRestrictedContraband ] id: ClothingMaskGasSwat name: swat gas mask description: A elite issue Security gas mask. @@ -376,9 +376,16 @@ - Hair - Snout hideOnToggle: true + - type: Armor + modifiers: + coefficients: + Blunt: 0.90 + Slash: 0.90 + Piercing: 0.95 + Heat: 0.95 - type: entity - parent: ClothingMaskGasExplorer + parent: [ ClothingMaskGas, BaseRestrictedContraband ] id: ClothingMaskGasMerc name: mercenary gas mask description: Slightly outdated, but reliable military-style gas mask. @@ -387,9 +394,16 @@ sprite: Clothing/Mask/merc.rsi - type: Clothing sprite: Clothing/Mask/merc.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.90 + Slash: 0.90 + Piercing: 0.95 + Heat: 0.95 - type: entity - parent: [ BaseCentcommContraband, ClothingMaskGasSyndicate ] + parent: [ ClothingMaskGas, BaseCentcommContraband ] id: ClothingMaskGasERT name: ert gas mask description: The gas mask of the elite squad of the ERT. @@ -406,6 +420,15 @@ - Hair - Snout hideOnToggle: true + - type: FlashImmunity + - type: EyeProtection + - type: Armor + modifiers: + coefficients: + Blunt: 0.95 + Slash: 0.95 + Piercing: 0.95 + Heat: 0.95 - type: entity parent: ClothingMaskGasERT diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 56da0c3718e..2412dd9d5c3 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -172,7 +172,7 @@ autoRechargeRate: 2 - type: entity - parent: [ ClothingOuterBaseLarge, BaseMinorContraband ] + parent: [ ClothingOuterBaseLarge, BaseMajorContraband, AllowSuitStorageClothing ] id: ClothingOuterArmorCult name: acolyte armor description: An evil-looking piece of cult armor, made of bones. @@ -284,7 +284,7 @@ - type: GroupExamine - type: entity - parent: ClothingOuterBaseLarge + parent: [ ClothingOuterBaseLarge, BaseMajorContraband, AllowSuitStorageClothing ] id: ClothingOuterArmorChangeling name: chitinous armor description: Inflates the changeling's body into an all-consuming chitinous mass of armor. @@ -312,7 +312,7 @@ slots: WITHOUT_POCKET - type: entity - parent: ClothingOuterBaseLarge + parent: [ ClothingOuterBaseLarge, BaseMajorContraband, AllowSuitStorageClothing ] id: ClothingOuterArmorBone name: bone armor description: Sits on you like a second skin. @@ -340,7 +340,7 @@ slots: WITHOUT_POCKET - type: entity - parent: ClothingOuterBaseLarge + parent: [ ClothingOuterBaseLarge, BaseMajorContraband, AllowSuitStorageClothing ] id: ClothingOuterArmorPodWars name: ironclad II armor description: A repurposed suit of ironclad II armor, a relic of the pod wars. diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index e1dd567893d..36f0faa1df1 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -126,11 +126,6 @@ bodyType: Static - type: Fixtures fixtures: - # Context / examine fixture - fix1: - shape: - !type:PhysShapeCircle - radius: 0.25 slipFixture: shape: !type:PhysShapeAabb diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml index d16499aa767..7e147ba7110 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml @@ -476,3 +476,21 @@ amount: !type:ConstantNumberSelector value: 3 +- type: entity + parent: MarkerBase + id: SalvageSpawnerMobMiningAsteroid + name: Mining Asteroid Mob Spawner + components: + - type: Sprite + layers: + - state: green + - sprite: Mobs/Aliens/Asteroid/goliath.rsi + state: goliath + - type: EntityTableSpawner + table: !type:GroupSelector + children: + - id: MobGoliath + weight: 65 + - id: MobHivelord + weight: 35 + diff --git a/Resources/Prototypes/Entities/Markers/shuttle.yml b/Resources/Prototypes/Entities/Markers/shuttle.yml index 0e9117951ce..66e2bc39b7f 100644 --- a/Resources/Prototypes/Entities/Markers/shuttle.yml +++ b/Resources/Prototypes/Entities/Markers/shuttle.yml @@ -3,6 +3,7 @@ parent: MarkerBase name: FTL point components: + - type: FTLSmashImmune - type: FTLBeacon - type: Sprite state: pink diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml index 8cbd40b5cc7..877dd40cc38 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml @@ -26,6 +26,7 @@ - TemporaryBlindness - RadiationProtection - Drowsiness + - Adrenaline - type: StandingState - type: Tag tags: @@ -180,3 +181,156 @@ state: goliath_tentacle_retract - type: EffectVisuals - type: AnimationPlayer + +- type: entity + id: MobHivelord + parent: [ BaseMobAsteroid, FlyingMobBase ] + name: hivelord + description: A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original. + components: + - type: Sprite + sprite: Mobs/Aliens/Asteroid/hivelord.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: hivelord + - type: DamageStateVisuals + states: + Alive: + Base: hivelord + Dead: + Base: hivelord_dead + - type: MovementSpeedModifier + baseWalkSpeed : 3.5 + baseSprintSpeed : 4.0 + - type: MobThresholds + thresholds: + 0: Alive + 75: Dead + - type: MeleeWeapon + damage: + types: + Blunt: 0 + - type: Gun + fireRate: 0.66 + selectedMode: SemiAuto + showExamineText: false + availableModes: + - SemiAuto + soundGunshot: null + - type: RechargeBasicEntityAmmo + showExamineText: false + rechargeCooldown: 0 + rechargeSound: null + - type: BasicEntityAmmoProvider + proto: MobHivelordBrood + capacity: 1 + count: 1 + - type: NpcFactionMember + factions: + - SimpleHostile + - type: HTN + rootTask: + task: SimpleRangedHostileCompound + blackboard: + VisionRadius: !type:Single + 4 + AggroVisionRadius: !type:Single + 9 + - type: Butcherable + spawned: + - id: FoodHivelordRemains + +- type: entity + id: MobHivelordBrood + parent: [ BaseMobAsteroid, FlyingMobBase ] + name: hivelord brood + description: A fragment of the original hivelord, rallying behind its original. One isn't much of a threat, but... + components: + - type: Sprite + sprite: Mobs/Aliens/Asteroid/hivelord.rsi + layers: + - state: hivelordbrood + - type: MovementSpeedModifier + baseWalkSpeed : 3.5 + baseSprintSpeed : 4.0 + - type: MobThresholds + thresholds: + 0: Alive + 5: Dead + - type: MeleeWeapon + soundHit: + path: /Audio/Weapons/bladeslice.ogg + angle: 0 + attackRate: 1.0 + range: 0.75 + animation: WeaponArcPunch + damage: + types: + Slash: 7 + - type: Ammo + muzzleFlash: null + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 5 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: NpcFactionMember + factions: + - SimpleHostile + - type: HTN + rootTask: + task: SimpleHostileCompound + blackboard: # highly aggressive + VisionRadius: !type:Single + 15 + AggroVisionRadius: !type:Single + 15 + - type: TimedDespawn + lifetime: 100 + +- type: entity + id: FoodHivelordRemains + parent: FoodBase + name: hivelord remains + description: All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating. + components: + - type: SolutionContainerManager + solutions: + food: + maxVol: 5 + reagents: + - ReagentId: Rororium + Quantity: 5 + - type: Sprite + sprite: Objects/Consumable/Food/rorocore.rsi + state: boiled + - type: Item + size: Normal + - type: Perishable + rotAfter: 120 # rot after 2 minutes + molsPerSecondPerUnitMass: 0 + forceRotProgression: true + - type: RotInto + entity: FoodHivelordRemainsInert + stage: 1 + - type: StaticPrice + price: 5000 + +- type: entity + id: FoodHivelordRemainsInert + parent: BaseItem + name: inert hivelord remains + description: All that remains of a hivelord... Now all is truly lost. + components: + - type: Sprite + sprite: Objects/Consumable/Food/rorocore.rsi + state: boiled + color: "#664444" + - type: SpaceGarbage + - type: Item + size: Normal + - type: StaticPrice + price: 500 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml index 8deefe9b8ec..f400680eb01 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml @@ -29,6 +29,7 @@ - Flashed - RadiationProtection - Drowsiness + - Adrenaline - type: Buckle - type: StandingState - type: Tag @@ -106,6 +107,7 @@ - Flashed - RadiationProtection - Drowsiness + - Adrenaline - type: Bloodstream bloodMaxVolume: 150 - type: MobPrice diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index fe2416510e8..16e3038fcd2 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -106,6 +106,7 @@ - Pacified - RadiationProtection - Drowsiness + - Adrenaline - type: Temperature heatDamageThreshold: 800 - type: Metabolizer diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 5ceac9e773e..c02629c4d6f 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -8,6 +8,7 @@ noRot: true overrideContainerOcclusion: true # Always show up regardless of where they're contained. drawdepth: Ghosts + - type: FTLSmashImmune - type: CargoSellBlacklist - type: MovementSpeedModifier baseSprintSpeed: 12 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index d7d0cd0e659..601fa1f5c1b 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -146,7 +146,7 @@ state: std_mod - type: SiliconLawProvider laws: PaladinLawset - + - type: entity id: LiveLetLiveCircuitBoard parent: BaseElectronics @@ -158,7 +158,7 @@ state: std_mod - type: SiliconLawProvider laws: LiveLetLiveLaws - + - type: entity id: StationEfficiencyCircuitBoard parent: BaseElectronics @@ -182,7 +182,7 @@ state: std_mod - type: SiliconLawProvider laws: RobocopLawset - + - type: entity id: OverlordCircuitBoard parent: BaseElectronics @@ -194,7 +194,7 @@ state: std_mod - type: SiliconLawProvider laws: OverlordLawset - + - type: entity id: DungeonMasterCircuitBoard parent: BaseElectronics @@ -230,7 +230,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset - + - type: entity id: NutimovCircuitBoard parent: BaseElectronics @@ -376,6 +376,7 @@ noSpawn: true suffix: DO NOT MAP components: + - type: NoFTL - type: WarpPoint follow: true - type: Eye diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index cbe09c29ad9..2349eddd3a4 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -135,6 +135,7 @@ - Flashed - RadiationProtection - Drowsiness + - Adrenaline - type: Body prototype: Human requiredLegs: 2 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index b7fbe365890..54616724fbe 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -245,7 +245,7 @@ prototype: computerBodyScanner - type: entity - parent: BaseComputerCircuitboard + parent: [ BaseComputerCircuitboard, BaseGrandTheftContraband ] id: CommsComputerCircuitboard name: communications computer board description: A computer printed circuit board for a communications console. @@ -256,7 +256,7 @@ prototype: ComputerComms - type: entity - parent: BaseComputerCircuitboard + parent: [ BaseComputerCircuitboard, BaseSyndicateContraband ] id: SyndicateCommsComputerCircuitboard name: syndicate communications computer board description: A computer printed circuit board for a syndicate communications console. diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index e5a96f26e3f..b0a466f8913 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -92,7 +92,7 @@ - type: entity name: CentComm pen - parent: [BaseAdvancedPen, BaseCommandContraband] + parent: [BaseAdvancedPen, BaseCentcommContraband] id: PenCentcom description: In an attempt to keep up with the "power" of the cybersun bureaucracy, NT made a replica of cyber pen, in their corporate style. components: diff --git a/Resources/Prototypes/Entities/Objects/Misc/treasure.yml b/Resources/Prototypes/Entities/Objects/Misc/treasure.yml index 20e72f8a115..dfe33ab1112 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/treasure.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/treasure.yml @@ -83,6 +83,11 @@ - state: cpu_super - type: Item size: Tiny + - type: PhysicalComposition + materialComposition: # big mats if you don't sell it + Steel: 500 + Glass: 1000 + Silver: 300 - type: StaticPrice price: 750 @@ -150,6 +155,9 @@ state: coin_iron - type: Item size: Tiny + - type: PhysicalComposition + materialComposition: + Steel: 300 - type: StaticPrice price: 75 @@ -159,8 +167,12 @@ components: - type: Sprite state: coin_silver + - type: PhysicalComposition + materialComposition: + Steel: 100 # coins are fake on the inside + Silver: 200 - type: StaticPrice - price: 125 + price: 135 - type: entity parent: TreasureCoinIron @@ -168,6 +180,10 @@ components: - type: Sprite state: coin_gold + - type: PhysicalComposition + materialComposition: + Steel: 100 + Gold: 200 - type: StaticPrice price: 175 @@ -177,6 +193,10 @@ components: - type: Sprite state: coin_adamantine + - type: PhysicalComposition + materialComposition: + Steel: 400 + Diamond: 5 - type: StaticPrice price: 250 @@ -186,6 +206,10 @@ components: - type: Sprite state: coin_diamond + - type: PhysicalComposition + materialComposition: + Steel: 300 + Diamond: 15 - type: StaticPrice price: 500 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 4528a4eb699..7db085eb0a3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -267,7 +267,7 @@ - type: entity name: pulse carbine - parent: [BaseWeaponBattery, BaseGunWieldable] + parent: [BaseWeaponBattery, BaseGunWieldable, BaseCentcommContraband] id: WeaponPulseCarbine description: A high tech energy carbine favoured by the NT-ERT operatives. components: @@ -763,4 +763,4 @@ - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Battery maxCharge: 800 - startingCharge: 800 \ No newline at end of file + startingCharge: 800 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 436530460e4..44e98538adc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -15,6 +15,9 @@ - type: Utensil types: - Knife + - type: Tool + qualities: + - Slicing - type: entity name: captain's sabre diff --git a/Resources/Prototypes/Entities/Structures/Decoration/banners.yml b/Resources/Prototypes/Entities/Structures/Decoration/banners.yml index c2567814ac1..12f112dfc56 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/banners.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/banners.yml @@ -26,6 +26,16 @@ - HighImpassable - BulletImpassable - type: InteractionOutline + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] - type: entity id: BannerNanotrasen diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index 5726b208741..f51f455e2f2 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -99,7 +99,7 @@ components: - GasTank - type: StaticPrice - price: 1000 + price: 200 - type: AccessReader access: [["Atmospherics"], ["Engineering"], ["Research"]] - type: Lock diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml index db269426236..895b710a068 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml @@ -8,11 +8,6 @@ bodyType: Static - type: Fixtures fixtures: - # This exists for examine. - fix1: - shape: - !type:PhysShapeCircle - radius: 0.25 light: shape: !type:PhysShapeCircle diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 390d907466d..55e0cfe97a8 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -129,6 +129,8 @@ weight: 3 duration: 1 - type: BureaucraticErrorRule + ignoredJobs: + - StationAi - type: entity id: ClericalError diff --git a/Resources/Prototypes/Procedural/vgroid.yml b/Resources/Prototypes/Procedural/vgroid.yml index 05ab652ece9..0747a58b30d 100644 --- a/Resources/Prototypes/Procedural/vgroid.yml +++ b/Resources/Prototypes/Procedural/vgroid.yml @@ -180,7 +180,7 @@ minCount: 8 maxCount: 15 groups: - - id: MobGoliath + - id: SalvageSpawnerMobMiningAsteroid amount: 1 #- type: dungeonConfig @@ -207,10 +207,10 @@ # Mobs # If you want exterior dungeon mobs add them under the prototype. - !type:MobsDunGen - minCount: 20 - maxCount: 30 + minCount: 25 + maxCount: 35 groups: - - id: MobGoliath + - id: SalvageSpawnerMobMiningAsteroid amount: 1 #- type: dungeonConfig diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml index b2b4850c8f6..769b7748f30 100644 --- a/Resources/Prototypes/Reagents/chemicals.yml +++ b/Resources/Prototypes/Reagents/chemicals.yml @@ -166,3 +166,23 @@ color: "#E6E6DA" physicalDesc: reagent-physical-desc-crystalline slippery: false + +- type: reagent + id: Rororium + name: reagent-name-rororium + desc: reagent-desc-rororium + group: Biological + flavor: tingly + physicalDesc: reagent-physical-desc-refreshing + color: "#bf1365" + metabolisms: + Medicine: + effects: + - !type:HealthChange + damage: + groups: + Brute: -4 + - !type:GenericStatusEffect + key: Adrenaline + component: IgnoreSlowOnDamage + time: 120 diff --git a/Resources/Prototypes/Recipes/Lathes/robotics.yml b/Resources/Prototypes/Recipes/Lathes/robotics.yml index 44a9e2f0f24..bf8deba9840 100644 --- a/Resources/Prototypes/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/Recipes/Lathes/robotics.yml @@ -1,340 +1,260 @@ +# Base prototypes + - type: latheRecipe - id: ProximitySensor - result: ProximitySensor + abstract: true + id: BaseRoboticsRecipe category: Robotics completetime: 2 + +- type: latheRecipe + abstract: true + parent: BaseRoboticsRecipe + id: BaseBorgLimbRecipe + materials: + Steel: 250 + Glass: 100 + +- type: latheRecipe + abstract: true + parent: BaseRoboticsRecipe + id: BaseBorgModuleRecipe + completetime: 3 + materials: + Steel: 250 + Glass: 250 + Plastic: 250 + +- type: latheRecipe + abstract: true + parent: BaseBorgModuleRecipe + id: BaseGoldBorgModuleRecipe + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Gold: 50 + +# Recipes + +- type: latheRecipe + parent: BaseRoboticsRecipe + id: ProximitySensor + result: ProximitySensor materials: Steel: 200 Glass: 300 - type: latheRecipe + parent: BaseRoboticsRecipe id: SciFlash result: SciFlash - category: Robotics - completetime: 2 materials: Glass: 100 Plastic: 200 Steel: 100 - type: latheRecipe + parent: BaseRoboticsRecipe id: CyborgEndoskeleton result: CyborgEndoskeleton - category: Robotics completetime: 3 materials: Steel: 1500 +# Generic + - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftArmBorg result: LeftArmBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightArmBorg result: RightArmBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorg result: LeftLegBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorg result: RightLegBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LightHeadBorg result: LightHeadBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorg result: TorsoBorg - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 + +# Engineer - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftArmBorgEngineer result: LeftArmBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightArmBorgEngineer result: RightArmBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorgEngineer result: LeftLegBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorgEngineer result: RightLegBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: HeadBorgEngineer result: HeadBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorgEngineer result: TorsoBorgEngineer - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 + +# Medical - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftArmBorgMedical result: LeftArmBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightArmBorgMedical result: RightArmBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorgMedical result: LeftLegBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorgMedical result: RightLegBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: HeadBorgMedical result: HeadBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorgMedical result: TorsoBorgMedical - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 + +# Mining - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftArmBorgMining result: LeftArmBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightArmBorgMining result: RightArmBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorgMining result: LeftLegBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorgMining result: RightLegBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: HeadBorgMining result: HeadBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorgMining result: TorsoBorgMining - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 + +# Service - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftArmBorgService result: LeftArmBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightArmBorgService result: RightArmBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorgService result: LeftLegBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorgService result: RightLegBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: HeadBorgService result: HeadBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorgService result: TorsoBorgService - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 + +# Janitor - type: latheRecipe + parent: BaseBorgLimbRecipe id: LeftLegBorgJanitor result: LeftLegBorgJanitor - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: RightLegBorgJanitor result: RightLegBorgJanitor - category: Robotics - completetime: 2 - materials: - Steel: 250 - Glass: 100 - type: latheRecipe + parent: BaseBorgLimbRecipe id: HeadBorgJanitor result: HeadBorgJanitor - category: Robotics - completetime: 4 materials: Steel: 500 Glass: 200 - type: latheRecipe + parent: BaseBorgLimbRecipe id: TorsoBorgJanitor result: TorsoBorgJanitor - category: Robotics - completetime: 4 materials: Steel: 500 Glass: 200 +# Parts + - type: latheRecipe + parent: BaseRoboticsRecipe id: MMI result: MMI - category: Robotics completetime: 3 icon: sprite: Objects/Specific/Robotics/mmi.rsi @@ -346,9 +266,9 @@ Gold: 200 - type: latheRecipe + parent: BaseRoboticsRecipe id: PositronicBrain result: PositronicBrain - category: Robotics completetime: 3 materials: Steel: 500 @@ -357,258 +277,141 @@ Silver: 100 Plasma: 1000 +# Modules + - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleCable result: BorgModuleCable - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleFireExtinguisher result: BorgModuleFireExtinguisher - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleGPS result: BorgModuleGPS - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleRadiationDetection result: BorgModuleRadiationDetection - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleTool result: BorgModuleTool - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 + +# Mining Modules - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleAppraisal result: BorgModuleAppraisal - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleMining result: BorgModuleMining - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleGrapplingGun result: BorgModuleGrapplingGun - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 + +# Engineering Modules - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleAdvancedTool result: BorgModuleAdvancedTool - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleConstruction result: BorgModuleConstruction - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleRCD result: BorgModuleRCD - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 + +# Janitor Modules - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleLightReplacer result: BorgModuleLightReplacer - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleCleaning result: BorgModuleCleaning - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleAdvancedCleaning result: BorgModuleAdvancedCleaning - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - Gold: 50 + +# Medical Modules - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleDiagnosis result: BorgModuleDiagnosis - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleTreatment result: BorgModuleTreatment - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleAdvancedTreatment result: BorgModuleAdvancedTreatment - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 - type: latheRecipe + parent: BaseGoldBorgModuleRecipe id: BorgModuleDefibrillator result: BorgModuleDefibrillator - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 + +# Science Modules - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleArtifact result: BorgModuleArtifact - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleAnomaly result: BorgModuleAnomaly - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 + +# Service Modules - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleService result: BorgModuleService - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleMusique result: BorgModuleMusique - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleGardening result: BorgModuleGardening - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleHarvesting result: BorgModuleHarvesting - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - type: latheRecipe + parent: BaseBorgModuleRecipe id: BorgModuleClowning result: BorgModuleClowning - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index a54d5b62356..29227fb9db9 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -1,3 +1,34 @@ +# Base prototypes + +- type: latheRecipe + abstract: true + id: BaseWeaponRecipe + category: Weapons + completetime: 2 + materials: + Steel: 300 + Plastic: 300 + +- type: latheRecipe + abstract: true + parent: BaseWeaponRecipe + id: BaseWeaponRecipeLong + completetime: 5 + +- type: latheRecipe + abstract: true + id: BaseAmmoRecipe + category: Ammo + completetime: 5 + +- type: latheRecipe + abstract: true + parent: BaseAmmoRecipe + id: BaseEmptyAmmoRecipe + completetime: 1 + +# Recipes + - type: latheRecipe id: Handcuffs result: Handcuffs @@ -13,76 +44,62 @@ Plastic: 200 - type: latheRecipe + parent: BaseWeaponRecipe id: Stunbaton result: Stunbaton - category: Weapons - completetime: 2 - materials: - Steel: 300 - Plastic: 300 - type: latheRecipe + parent: BaseWeaponRecipe id: Truncheon result: Truncheon - category: Weapons - completetime: 2 - materials: - Steel: 300 - Plastic: 300 - type: latheRecipe + parent: BaseWeaponRecipe id: CombatKnife result: CombatKnife - category: Weapons - completetime: 2 materials: Steel: 250 Plastic: 100 - type: latheRecipe + parent: BaseWeaponRecipeLong id: WeaponLaserCarbine result: WeaponLaserCarbine - category: Weapons - completetime: 8 materials: Steel: 2000 Glass: 800 Plastic: 500 - type: latheRecipe + parent: BaseWeaponRecipeLong id: WeaponAdvancedLaser result: WeaponAdvancedLaser - category: Weapons - completetime: 5 materials: Steel: 1500 Glass: 1000 Gold: 850 - type: latheRecipe + parent: BaseWeaponRecipeLong id: WeaponLaserCannon result: WeaponLaserCannon - category: Weapons - completetime: 5 materials: Steel: 1250 Plastic: 750 Gold: 500 - type: latheRecipe + parent: BaseWeaponRecipeLong id: WeaponLaserSvalinn result: WeaponLaserSvalinn - category: Weapons - completetime: 5 materials: Steel: 2000 Gold: 500 - type: latheRecipe + parent: BaseWeaponRecipeLong id: WeaponXrayCannon result: WeaponXrayCannon - category: Weapons - completetime: 5 materials: Steel: 1500 Glass: 500 @@ -148,10 +165,9 @@ Steel: 100 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShellTranquilizer result: BoxShellTranquilizer - category: Ammo - completetime: 5 materials: Plastic: 240 Steel: 160 @@ -168,414 +184,362 @@ Steel: 500 - type: latheRecipe + parent: TargetHuman id: TargetClown result: TargetClown - completetime: 5 - applyMaterialDiscount: false # ingredients dropped when destroyed - materials: - Steel: 500 - type: latheRecipe + parent: TargetHuman id: TargetSyndicate result: TargetSyndicate - completetime: 5 - applyMaterialDiscount: false # ingredients dropped when destroyed - materials: - Steel: 500 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazinePistolEmpty result: MagazinePistolEmpty - category: Ammo - completetime: 5 materials: Steel: 25 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistol result: MagazinePistol - category: Ammo - completetime: 5 materials: Steel: 145 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistolPractice result: MagazinePistolPractice - category: Ammo - completetime: 5 materials: Steel: 85 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistolUranium result: MagazinePistolUranium - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 65 Uranium: 120 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistolIncendiary result: MagazinePistolIncendiary - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 120 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazinePistolSubMachineGunEmpty result: MagazinePistolSubMachineGunEmpty - category: Ammo - completetime: 5 materials: Steel: 30 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistolSubMachineGun result: MagazinePistolSubMachineGun - category: Ammo - completetime: 5 materials: Steel: 300 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazinePistolSubMachineGunTopMountedEmpty result: MagazinePistolSubMachineGunTopMountedEmpty - category: Ammo - completetime: 5 materials: Steel: 30 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazinePistolSubMachineGunTopMounted result: MagazinePistolSubMachineGunTopMounted - category: Ammo - completetime: 5 materials: Steel: 300 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxPistol result: MagazineBoxPistol - category: Ammo - completetime: 5 materials: Steel: 600 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxMagnum result: MagazineBoxMagnum - category: Ammo - completetime: 5 materials: Steel: 240 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazineRifleEmpty result: MagazineRifleEmpty - category: Ammo - completetime: 5 materials: Steel: 25 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineRifle result: MagazineRifle - category: Ammo - completetime: 5 materials: Steel: 475 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineRiflePractice result: MagazineRiflePractice - category: Ammo - completetime: 5 materials: Steel: 175 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineRifleUranium result: MagazineRifleUranium - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 300 Uranium: 300 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineRifleIncendiary result: MagazineRifleIncendiary - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 450 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazineLightRifleEmpty result: MagazineLightRifleEmpty - category: Ammo - completetime: 5 materials: Steel: 25 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineLightRifle result: MagazineLightRifle - category: Ammo - completetime: 5 materials: Steel: 565 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineLightRiflePractice result: MagazineLightRiflePractice - category: Ammo - completetime: 5 materials: Steel: 205 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineLightRifleUranium result: MagazineLightRifleUranium - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 360 Uranium: 360 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineLightRifleIncendiary result: MagazineLightRifleIncendiary - category: Ammo - completetime: 5 materials: Steel: 25 Plastic: 540 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxRifle result: MagazineBoxRifle - category: Ammo - completetime: 5 materials: Steel: 750 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxLightRifle result: MagazineBoxLightRifle - category: Ammo - completetime: 5 materials: Steel: 900 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxLethalshot result: BoxLethalshot - category: Ammo - completetime: 5 materials: Steel: 320 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxBeanbag result: BoxBeanbag - category: Ammo - completetime: 5 materials: Steel: 160 Plastic: 240 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShotgunSlug result: BoxShotgunSlug - category: Ammo - completetime: 5 materials: Steel: 240 Plastic: 160 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: SpeedLoaderMagnumEmpty result: SpeedLoaderMagnumEmpty - category: Ammo - completetime: 5 materials: Steel: 50 - type: latheRecipe + parent: BaseAmmoRecipe id: SpeedLoaderMagnum result: SpeedLoaderMagnum - category: Ammo - completetime: 5 materials: Steel: 190 - type: latheRecipe + parent: BaseAmmoRecipe id: SpeedLoaderMagnumPractice result: SpeedLoaderMagnumPractice - category: Ammo - completetime: 5 materials: Steel: 90 - type: latheRecipe + parent: BaseAmmoRecipe id: SpeedLoaderMagnumUranium result: SpeedLoaderMagnumUranium - category: Ammo - completetime: 5 materials: Steel: 50 Plastic: 150 Uranium: 110 - type: latheRecipe + parent: BaseAmmoRecipe id: SpeedLoaderMagnumIncendiary result: SpeedLoaderMagnumIncendiary - category: Ammo - completetime: 5 materials: Steel: 50 Plastic: 150 - type: latheRecipe + parent: BaseEmptyAmmoRecipe id: MagazineShotgunEmpty result: MagazineShotgunEmpty - category: Ammo - completetime: 5 materials: Steel: 50 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineShotgun result: MagazineShotgun - category: Ammo - completetime: 5 materials: Steel: 240 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineShotgunBeanbag result: MagazineShotgunBeanbag - category: Ammo - completetime: 5 materials: Steel: 150 Plastic: 140 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineShotgunSlug result: MagazineShotgunSlug - category: Ammo - completetime: 5 materials: Steel: 190 Plastic: 100 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineShotgunIncendiary result: MagazineShotgunIncendiary - category: Ammo - completetime: 5 materials: Steel: 100 Plastic: 190 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxPistolIncendiary result: MagazineBoxPistolIncendiary - category: Ammo - completetime: 5 materials: Plastic: 600 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxMagnumIncendiary result: MagazineBoxMagnumIncendiary - category: Ammo - completetime: 5 materials: Plastic: 240 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxLightRifleIncendiary result: MagazineBoxLightRifleIncendiary - category: Ammo - completetime: 5 materials: Plastic: 900 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxRifleIncendiary result: MagazineBoxRifleIncendiary - category: Ammo - completetime: 5 materials: Plastic: 750 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShotgunFlare result: BoxShotgunFlare - category: Ammo - completetime: 5 materials: Steel: 80 Plastic: 80 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShotgunIncendiary result: BoxShotgunIncendiary - category: Ammo - completetime: 5 materials: Steel: 80 Plastic: 320 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxPistolPractice result: MagazineBoxPistolPractice - category: Ammo - completetime: 5 materials: Steel: 300 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxMagnumPractice result: MagazineBoxMagnumPractice - category: Ammo - completetime: 5 materials: Steel: 60 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxLightRiflePractice result: MagazineBoxLightRiflePractice - category: Ammo - completetime: 5 materials: Steel: 300 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxRiflePractice result: MagazineBoxRiflePractice - category: Ammo - completetime: 5 materials: Steel: 250 - type: latheRecipe + parent: BaseWeaponRecipe id: WeaponLaserCarbinePractice result: WeaponLaserCarbinePractice - category: Weapons completetime: 6 materials: Steel: 1800 @@ -583,9 +547,9 @@ Plastic: 250 - type: latheRecipe + parent: BaseWeaponRecipe id: WeaponDisablerPractice result: WeaponDisablerPractice - category: Weapons completetime: 4 materials: Steel: 500 @@ -593,62 +557,56 @@ Plastic: 200 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShotgunPractice result: BoxShotgunPractice - category: Ammo - completetime: 5 materials: Steel: 80 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxPistolUranium result: MagazineBoxPistolUranium - category: Ammo - completetime: 5 materials: Plastic: 300 Uranium: 600 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxMagnumUranium result: MagazineBoxMagnumUranium - category: Ammo - completetime: 5 materials: Plastic: 240 Uranium: 180 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxLightRifleUranium result: MagazineBoxLightRifleUranium - category: Ammo - completetime: 5 materials: Plastic: 600 Uranium: 600 - type: latheRecipe + parent: BaseAmmoRecipe id: MagazineBoxRifleUranium result: MagazineBoxRifleUranium - category: Ammo - completetime: 5 materials: Plastic: 500 Uranium: 500 - type: latheRecipe + parent: BaseAmmoRecipe id: BoxShotgunUranium result: BoxShotgunUranium - category: Ammo - completetime: 5 materials: Plastic: 320 Uranium: 240 - type: latheRecipe + parent: BaseWeaponRecipe id: WeaponDisabler result: WeaponDisabler - category: Weapons completetime: 6 materials: Steel: 300 @@ -656,10 +614,9 @@ Plastic: 200 - type: latheRecipe + parent: WeaponDisabler id: WeaponDisablerSMG result: WeaponDisablerSMG - category: Weapons - completetime: 6 materials: Steel: 1000 Glass: 500 @@ -670,43 +627,43 @@ result: MagazineGrenadeEmpty completetime: 3 materials: - Steel: 150 - Plastic: 50 + Steel: 150 + Plastic: 50 - type: latheRecipe id: GrenadeEMP result: GrenadeEMP completetime: 3 materials: - Steel: 150 - Plastic: 100 - Glass: 20 + Steel: 150 + Plastic: 100 + Glass: 20 - type: latheRecipe id: GrenadeBlast result: GrenadeBlast completetime: 3 materials: - Steel: 450 - Plastic: 300 - Gold: 150 + Steel: 450 + Plastic: 300 + Gold: 150 - type: latheRecipe id: GrenadeFlash result: GrenadeFlash completetime: 3 materials: - Steel: 150 - Plastic: 100 - Glass: 20 + Steel: 150 + Plastic: 100 + Glass: 20 - type: latheRecipe id: PortableRecharger result: PortableRecharger completetime: 15 materials: - Steel: 2000 - Uranium: 2000 - Plastic: 1000 - Plasma: 500 - Glass: 500 + Steel: 2000 + Uranium: 2000 + Plastic: 1000 + Plasma: 500 + Glass: 500 diff --git a/Resources/Prototypes/Recipes/Lathes/sheet.yml b/Resources/Prototypes/Recipes/Lathes/sheet.yml index 52ea14ece5f..5772aa032fb 100644 --- a/Resources/Prototypes/Recipes/Lathes/sheet.yml +++ b/Resources/Prototypes/Recipes/Lathes/sheet.yml @@ -33,8 +33,8 @@ result: SheetRGlass1 completetime: 0 materials: - Glass: 100 - Steel: 50 + RawQuartz: 100 + RawIron: 50 Coal: 15 - type: latheRecipe diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index 96379323fd1..49e5ccc5794 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -68,3 +68,7 @@ - type: statusEffect id: Drowsiness #blurs your vision and makes you randomly fall asleep + +- type: statusEffect + id: Adrenaline + alert: Adrenaline diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png new file mode 100644 index 00000000000..09d70265e64 Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png new file mode 100644 index 00000000000..e9ecab5eb7b Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png new file mode 100644 index 00000000000..dc61d81d2be Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png new file mode 100644 index 00000000000..4e09b49b40a Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png new file mode 100644 index 00000000000..5f2a0041907 Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png new file mode 100644 index 00000000000..7d38dbfe899 Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png new file mode 100644 index 00000000000..ddce7a9b19a Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png differ diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json new file mode 100644 index 00000000000..b11726cf73b --- /dev/null +++ b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json @@ -0,0 +1,74 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/9bd459b27c73575fd5e3bf2efea13b816d0ac7c8/icons/mob/animal.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "hivelord", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "hivelord_nocore", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "hivelord_alert", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "hivelord_alert_nocore", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "hivelord_dead" + }, + { + "name": "hivelord_dead_nocore" + }, + { + "name": "hivelordbrood", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png new file mode 100644 index 00000000000..1a1d0c92dc1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png new file mode 100644 index 00000000000..de235cca3c4 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json new file mode 100644 index 00000000000..84b5983a1ca --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "boiled" + } + ] +} diff --git a/RobustToolbox b/RobustToolbox index dbc4e80e618..0f60ad9018f 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit dbc4e80e6186dd71f7b3f0cbde72606c2e986a75 +Subproject commit 0f60ad9018f54f9b49da1810bbffa01e2c5975f7 diff --git a/Tools/actions_changelogs_since_last_run.py b/Tools/actions_changelogs_since_last_run.py index f4ceafc81c7..030ee5b9e8e 100755 --- a/Tools/actions_changelogs_since_last_run.py +++ b/Tools/actions_changelogs_since_last_run.py @@ -160,7 +160,7 @@ def send_to_discord(entries: Iterable[ChangelogEntry]) -> None: message = resp.json()['data'] # Corvax-Localization-End if url and url.strip(): - group_content.write(f"{emoji} [-]({url}) {message}\n") + group_content.write(f"{emoji} - {message} [PR]({url}) \n") else: group_content.write(f"{emoji} - {message}\n") group_content.write(f"\n") # Corvax: Better formatting