Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -93,11 +93,14 @@ namespace Content.Client.Popups
|
||||
|
||||
_aliveWorldLabels.Add(label);
|
||||
|
||||
// START WhiteDream
|
||||
// START WhiteDream
|
||||
if (!_isLogging)
|
||||
return;
|
||||
|
||||
if (!_examine.InRangeUnOccluded(_playerManager.LocalEntity!.Value, coordinates, 10))
|
||||
if (_playerManager.LocalEntity == null)
|
||||
return;
|
||||
|
||||
if (!_examine.InRangeUnOccluded(_playerManager.LocalEntity.Value, coordinates, 10))
|
||||
return;
|
||||
|
||||
var fontSizeDict = new Dictionary<PopupType, string>
|
||||
@@ -117,7 +120,7 @@ namespace Content.Client.Popups
|
||||
var chatMsg = new ChatMessage(ChatChannel.Emotes, message, wrappedMEssage,
|
||||
GetNetEntity(EntityUid.Invalid), null);
|
||||
_uiManager.GetUIController<ChatUIController>().ProcessChatMessage(chatMsg);
|
||||
|
||||
|
||||
// END WhiteDream
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,9 @@ public sealed class FlipOnHitSystem : SharedFlipOnHitSystem
|
||||
if (!_timing.IsFirstTimePredicted)
|
||||
return;
|
||||
|
||||
if (TerminatingOrDeleted(user))
|
||||
return;
|
||||
|
||||
if (_animationSystem.HasRunningAnimation(user, EmoteAnimationSystem.AnimationKey))
|
||||
{
|
||||
EnsureComp<FlippingComponent>(user);
|
||||
|
||||
@@ -9,6 +9,7 @@ using Content.Shared.Verbs;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Utility;
|
||||
using Content.Server._White.Cult.GameRule;
|
||||
using Content.Server._White.Wizard;
|
||||
|
||||
namespace Content.Server.Administration.Systems;
|
||||
|
||||
@@ -22,6 +23,7 @@ public sealed partial class AdminVerbSystem
|
||||
[Dependency] private readonly PiratesRuleSystem _piratesRule = default!;
|
||||
[Dependency] private readonly RevolutionaryRuleSystem _revolutionaryRule = default!;
|
||||
[Dependency] private readonly CultRuleSystem _cultRule = default!;
|
||||
[Dependency] private readonly WizardRuleSystem _wizardRule = default!;
|
||||
|
||||
// All antag verbs have names so invokeverb works.
|
||||
private void AddAntagVerbs(GetVerbsEvent<Verb> args)
|
||||
@@ -150,8 +152,21 @@ public sealed partial class AdminVerbSystem
|
||||
Impact = LogImpact.High,
|
||||
Message = Loc.GetString("admin-verb-make-changeling"),
|
||||
};
|
||||
|
||||
args.Verbs.Add(changeling);
|
||||
//WD edit end
|
||||
|
||||
Verb wizard = new()
|
||||
{
|
||||
Text = Loc.GetString("admin-verb-text-make-wizard"),
|
||||
Category = VerbCategory.Antag,
|
||||
Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Clothing/Head/Hats/wizardhat.rsi/icon.png")),
|
||||
Act = () =>
|
||||
{
|
||||
_wizardRule.AdminMakeWizard(args.Target);
|
||||
},
|
||||
Impact = LogImpact.High,
|
||||
Message = Loc.GetString("admin-verb-make-wizard"),
|
||||
};
|
||||
args.Verbs.Add(wizard);
|
||||
}
|
||||
//WD edit end
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Server.Administration;
|
||||
using Content.Server.Atmos.Components;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Components;
|
||||
using Robust.Shared.Console;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
@@ -84,44 +85,72 @@ public sealed partial class AtmosphereSystem
|
||||
continue;
|
||||
}
|
||||
|
||||
var transform = Transform(euid.Value);
|
||||
// Force Invalidate & update air on all tiles
|
||||
Entity<GridAtmosphereComponent, GasTileOverlayComponent, MapGridComponent, TransformComponent> grid =
|
||||
new(euid.Value, gridAtmosphere, Comp<GasTileOverlayComponent>(euid.Value), gridComp, Transform(euid.Value));
|
||||
|
||||
foreach (var (indices, tileMain) in gridAtmosphere.Tiles)
|
||||
RebuildGridTiles(grid);
|
||||
|
||||
var query = GetEntityQuery<AtmosFixMarkerComponent>();
|
||||
foreach (var (indices, tile) in gridAtmosphere.Tiles.ToArray())
|
||||
{
|
||||
var tile = tileMain.Air;
|
||||
if (tile == null)
|
||||
if (tile.Air is not {Immutable: false} air)
|
||||
continue;
|
||||
|
||||
if (!_mapSystem.TryGetTile(gridComp, indices, out var gTile) || gTile.IsEmpty)
|
||||
{
|
||||
gridAtmosphere.Tiles.Remove(indices);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tile.Immutable && !IsTileSpace(euid, transform.MapUid, indices))
|
||||
{
|
||||
tile = new GasMixture(tile.Volume) { Temperature = tile.Temperature };
|
||||
tileMain.Air = tile;
|
||||
}
|
||||
|
||||
tile.Clear();
|
||||
air.Clear();
|
||||
var mixtureId = 0;
|
||||
foreach (var entUid in gridComp.GetAnchoredEntities(indices))
|
||||
var enumerator = _mapSystem.GetAnchoredEntitiesEnumerator(grid, grid, indices);
|
||||
while (enumerator.MoveNext(out var entUid))
|
||||
{
|
||||
if (!TryComp(entUid, out AtmosFixMarkerComponent? afm))
|
||||
continue;
|
||||
mixtureId = afm.Mode;
|
||||
break;
|
||||
if (query.TryComp(entUid, out var marker))
|
||||
mixtureId = marker.Mode;
|
||||
}
|
||||
var mixture = mixtures[mixtureId];
|
||||
Merge(tile, mixture);
|
||||
tile.Temperature = mixture.Temperature;
|
||||
|
||||
gridAtmosphere.InvalidatedCoords.Add(indices);
|
||||
var mixture = mixtures[mixtureId];
|
||||
Merge(air, mixture);
|
||||
air.Temperature = mixture.Temperature;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears & re-creates all references to <see cref="TileAtmosphere"/>s stored on a grid.
|
||||
/// </summary>
|
||||
private void RebuildGridTiles(
|
||||
Entity<GridAtmosphereComponent, GasTileOverlayComponent, MapGridComponent, TransformComponent> ent)
|
||||
{
|
||||
foreach (var indices in ent.Comp1.Tiles.Keys)
|
||||
{
|
||||
InvalidateVisuals((ent, ent), indices);
|
||||
}
|
||||
|
||||
var atmos = ent.Comp1;
|
||||
atmos.MapTiles.Clear();
|
||||
atmos.ActiveTiles.Clear();
|
||||
atmos.ExcitedGroups.Clear();
|
||||
atmos.HotspotTiles.Clear();
|
||||
atmos.SuperconductivityTiles.Clear();
|
||||
atmos.HighPressureDelta.Clear();
|
||||
atmos.CurrentRunTiles.Clear();
|
||||
atmos.CurrentRunExcitedGroups.Clear();
|
||||
atmos.InvalidatedCoords.Clear();
|
||||
atmos.CurrentRunInvalidatedTiles.Clear();
|
||||
atmos.PossiblyDisconnectedTiles.Clear();
|
||||
atmos.Tiles.Clear();
|
||||
|
||||
var volume = GetVolumeForTiles(ent);
|
||||
TryComp(ent.Comp4.MapUid, out MapAtmosphereComponent? mapAtmos);
|
||||
|
||||
var enumerator = _map.GetAllTilesEnumerator(ent, ent);
|
||||
while (enumerator.MoveNext(out var tileRef))
|
||||
{
|
||||
var tile = GetOrNewTile(ent, ent, tileRef.Value.GridIndices);
|
||||
UpdateTileData(ent, mapAtmos, tile);
|
||||
UpdateAdjacentTiles(ent, tile, activate: true);
|
||||
UpdateTileAir(ent, tile, volume);
|
||||
}
|
||||
}
|
||||
|
||||
private CompletionResult FixGridAtmosCommandCompletions(IConsoleShell shell, string[] args)
|
||||
{
|
||||
MapId? playerMap = null;
|
||||
|
||||
@@ -30,13 +30,15 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
private int _currentRunAtmosphereIndex;
|
||||
private bool _simulationPaused;
|
||||
|
||||
private TileAtmosphere GetOrNewTile(EntityUid owner, GridAtmosphereComponent atmosphere, Vector2i index)
|
||||
private TileAtmosphere GetOrNewTile(EntityUid owner, GridAtmosphereComponent atmosphere, Vector2i index, bool invalidateNew = true)
|
||||
{
|
||||
var tile = atmosphere.Tiles.GetOrNew(index, out var existing);
|
||||
if (existing)
|
||||
return tile;
|
||||
|
||||
atmosphere.InvalidatedCoords.Add(index);
|
||||
if (invalidateNew)
|
||||
atmosphere.InvalidatedCoords.Add(index);
|
||||
|
||||
tile.GridIndex = owner;
|
||||
tile.GridIndices = index;
|
||||
return tile;
|
||||
@@ -68,7 +70,7 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
atmosphere.CurrentRunInvalidatedTiles.EnsureCapacity(atmosphere.InvalidatedCoords.Count);
|
||||
foreach (var indices in atmosphere.InvalidatedCoords)
|
||||
{
|
||||
var tile = GetOrNewTile(uid, atmosphere, indices);
|
||||
var tile = GetOrNewTile(uid, atmosphere, indices, invalidateNew: false);
|
||||
atmosphere.CurrentRunInvalidatedTiles.Enqueue(tile);
|
||||
|
||||
// Update tile.IsSpace and tile.MapAtmosphere, and tile.AirtightData.
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Content.Server.Audio;
|
||||
public sealed class ContentAudioSystem : SharedContentAudioSystem
|
||||
{
|
||||
[ValidatePrototypeId<SoundCollectionPrototype>]
|
||||
private const string LobbyMusicCollection = "LobbyMusic";
|
||||
private const string LobbyMusicCollection = "LobbyMusicWhite";
|
||||
|
||||
[Dependency] private readonly AudioSystem _serverAudio = default!;
|
||||
[Dependency] private readonly IRobustRandom _robustRandom = default!;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Content.Server._White.Accent.Bloodloss;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Chemistry.Containers.EntitySystems;
|
||||
using Content.Server.Chemistry.ReactionEffects;
|
||||
@@ -43,6 +44,7 @@ public sealed class BloodstreamSystem : EntitySystem
|
||||
[Dependency] private readonly AlertsSystem _alertsSystem = default!;
|
||||
[Dependency] private readonly ForensicsSystem _forensicsSystem = default!;
|
||||
[Dependency] private readonly MovementSpeedModifierSystem _speed = default!; // WD
|
||||
[Dependency] private readonly BloodLossAccent _bloodLossAccent = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -158,7 +160,7 @@ public sealed class BloodstreamSystem : EntitySystem
|
||||
uid,
|
||||
(float) bloodstream.UpdateInterval.TotalSeconds * 2,
|
||||
applySlur: false);
|
||||
_stutteringSystem.DoStutter(uid, bloodstream.UpdateInterval * 2, refresh: false);
|
||||
_bloodLossAccent.StartBloodLossAccent(uid, bloodstream.UpdateInterval * 2, refresh: false);
|
||||
|
||||
// storing the drunk and stutter time so we can remove it independently from other effects additions
|
||||
bloodstream.StatusTime += bloodstream.UpdateInterval * 2;
|
||||
@@ -173,7 +175,7 @@ public sealed class BloodstreamSystem : EntitySystem
|
||||
|
||||
// Remove the drunk effect when healthy. Should only remove the amount of drunk and stutter added by low blood level
|
||||
_drunkSystem.TryRemoveDrunkenessTime(uid, bloodstream.StatusTime.TotalSeconds);
|
||||
_stutteringSystem.DoRemoveStutterTime(uid, bloodstream.StatusTime.TotalSeconds);
|
||||
_bloodLossAccent.StopBloodLossAccent(uid, bloodstream.StatusTime.TotalSeconds);
|
||||
// Reset the drunk and stutter time to zero
|
||||
bloodstream.StatusTime = TimeSpan.Zero;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using System.Linq;
|
||||
using Content.Server.Administration;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.GameTicking.Presets;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Database;
|
||||
using Robust.Shared.Console;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
@@ -10,6 +13,9 @@ namespace Content.Server.GameTicking.Commands
|
||||
[AdminCommand(AdminFlags.Round)]
|
||||
sealed class ForcePresetCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
||||
|
||||
public string Command => "forcepreset";
|
||||
public string Description => "Forces a specific game preset to start for the current lobby.";
|
||||
public string Help => $"Usage: {Command} <preset>";
|
||||
@@ -36,8 +42,19 @@ namespace Content.Server.GameTicking.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
ticker.SetGamePreset(type, true);
|
||||
shell.WriteLine($"Forced the game to start with preset {name}.");
|
||||
ticker.SetGamePreset(type);
|
||||
|
||||
_adminLogger.Add(LogType.EventStarted, $"Forced {type.ID} for secret.");
|
||||
|
||||
|
||||
var player = "Someone";
|
||||
|
||||
if (shell.Player != null)
|
||||
player = shell.Player.Name;
|
||||
|
||||
_chatManager.SendAdminAnnouncement($"{player} forced {type.ID} for secret.");
|
||||
shell.WriteLine($"forced the game to start with preset {name}.");
|
||||
|
||||
ticker.UpdateInfoText();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ using Robust.Shared.Physics.Components;
|
||||
using Robust.Shared.Physics.Systems;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.Manager.Exceptions;
|
||||
using Robust.Shared.Timing;
|
||||
using InvisibilityComponent = Content.Shared._White.Administration.InvisibilityComponent;
|
||||
|
||||
@@ -455,8 +456,10 @@ namespace Content.Server.Ghost
|
||||
{
|
||||
var entity = mindContainer.Owner;
|
||||
|
||||
if (!(HasComp<HumanoidAppearanceComponent>(entity) || HasComp<GhostComponent>(entity)) ||
|
||||
HasComp<GlobalAntagonistComponent>(entity))
|
||||
if (!(HasComp<HumanoidAppearanceComponent>(entity) || HasComp<GhostComponent>(entity)))
|
||||
continue;
|
||||
|
||||
if (HasComp<GlobalAntagonistComponent>(entity))
|
||||
continue;
|
||||
|
||||
var playerDepartmentId = _prototypeManager.Index<DepartmentPrototype>("Specific").ID;
|
||||
@@ -503,9 +506,12 @@ namespace Content.Server.Ghost
|
||||
foreach (var antagonist in EntityQuery<GlobalAntagonistComponent>())
|
||||
{
|
||||
var entity = antagonist.Owner;
|
||||
|
||||
if (!_mobState.IsAlive(entity))
|
||||
continue;
|
||||
|
||||
var prototype =
|
||||
_prototypeManager.Index<AntagonistPrototype>(antagonist.AntagonistPrototype ??
|
||||
"globalAntagonistUnknown");
|
||||
_prototypeManager.Index<AntagonistPrototype>(antagonist.AntagonistPrototype ?? "globalAntagonistUnknown");
|
||||
|
||||
var warp = new GhostWarpGlobalAntagonist(
|
||||
GetNetEntity(entity),
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
using System.Linq;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.Kitchen.Components;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.DragDrop;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
@@ -50,9 +53,21 @@ namespace Content.Server.Kitchen.EntitySystems
|
||||
|
||||
SubscribeLocalEvent<KitchenSpikeComponent, SuicideEvent>(OnSuicide);
|
||||
|
||||
SubscribeLocalEvent<KitchenSpikeComponent, ExaminedEvent>(OnExamine);
|
||||
|
||||
SubscribeLocalEvent<ButcherableComponent, CanDropDraggedEvent>(OnButcherableCanDrop);
|
||||
}
|
||||
|
||||
private void OnExamine(Entity<KitchenSpikeComponent> ent, ref ExaminedEvent args)
|
||||
{
|
||||
var (uid, comp) = ent;
|
||||
|
||||
if (comp.Victim is not "?" or "")
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("comp-kitchen-spike-examine", ("this", uid), ("victim", comp.Victim)));
|
||||
}
|
||||
}
|
||||
|
||||
private void OnButcherableCanDrop(EntityUid uid, ButcherableComponent component, ref CanDropDraggedEvent args)
|
||||
{
|
||||
args.Handled = true;
|
||||
@@ -152,7 +167,8 @@ namespace Content.Server.Kitchen.EntitySystems
|
||||
// THE WHAT?
|
||||
// TODO: Need to be able to leave them on the spike to do DoT, see ss13.
|
||||
var gibs = _bodySystem.GibBody(victimUid);
|
||||
foreach (var gib in gibs) {
|
||||
foreach (var gib in gibs.Where(HasComp<BodyComponent>)) // WD EDIT
|
||||
{
|
||||
QueueDel(gib);
|
||||
}
|
||||
|
||||
@@ -236,21 +252,23 @@ namespace Content.Server.Kitchen.EntitySystems
|
||||
|
||||
// THE WHAT? (again)
|
||||
// Prevent dead from being spiked TODO: Maybe remove when rounds can be played and DOT is implemented
|
||||
if (Resolve(victimUid, ref mobState, false) &&
|
||||
/*if (Resolve(victimUid, ref mobState, false) &&
|
||||
_mobStateSystem.IsAlive(victimUid, mobState))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-deny-not-dead", ("victim", Identity.Entity(victimUid, EntityManager))),
|
||||
victimUid, userUid);
|
||||
return true;
|
||||
}
|
||||
}*/
|
||||
// WD EDIT
|
||||
|
||||
if (userUid != victimUid)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-victim", ("user", Identity.Entity(userUid, EntityManager)), ("this", uid)), victimUid, victimUid, PopupType.LargeCaution);
|
||||
}
|
||||
// TODO: make it work when SuicideEvent is implemented
|
||||
// else
|
||||
// _popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-self", ("this", uid)), victimUid, Filter.Pvs(uid)); // This is actually unreachable and should be in SuicideEvent
|
||||
else
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-self", ("this", uid)), victimUid,
|
||||
victimUid); // This is actually unreachable and should be in SuicideEvent
|
||||
}
|
||||
|
||||
butcherable.BeingButchered = true;
|
||||
component.InUse = true;
|
||||
|
||||
@@ -63,9 +63,6 @@ namespace Content.Server.Light.Components
|
||||
[DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer<SinkPortPrototype>))]
|
||||
public string TogglePort = "Toggle";
|
||||
|
||||
[DataField("statusPort", customTypeSerializer: typeof(PrototypeIdSerializer<SourcePortPrototype>))]
|
||||
public string StatusPort = "LightStatus";
|
||||
|
||||
/// <summary>
|
||||
/// How long it takes to eject a bulb from this
|
||||
/// </summary>
|
||||
|
||||
@@ -76,7 +76,6 @@ namespace Content.Server.Light.EntitySystems
|
||||
{
|
||||
light.LightBulbContainer = _containerSystem.EnsureContainer<ContainerSlot>(uid, LightBulbContainer);
|
||||
_signalSystem.EnsureSinkPorts(uid, light.OnPort, light.OffPort, light.TogglePort);
|
||||
_signalSystem.EnsureSourcePorts(uid, light.StatusPort); // WD
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, PoweredLightComponent light, MapInitEvent args)
|
||||
@@ -447,14 +446,6 @@ namespace Content.Server.Light.EntitySystems
|
||||
|
||||
light.On = !light.On;
|
||||
|
||||
// WD START
|
||||
var data = new NetworkPayload
|
||||
{
|
||||
{DeviceNetworkConstants.LogicState, light.On ? SignalState.High : SignalState.Low}
|
||||
};
|
||||
_signalSystem.InvokePort(uid, light.StatusPort, data);
|
||||
// WD END
|
||||
|
||||
UpdateLight(uid, light);
|
||||
}
|
||||
|
||||
|
||||
66
Content.Server/_White/Accent/Bloodloss/BloodLossAccent.cs
Normal file
66
Content.Server/_White/Accent/Bloodloss/BloodLossAccent.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using System.Text;
|
||||
using Content.Server.Speech;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._White.Accent.Bloodloss;
|
||||
|
||||
public sealed class BloodLossAccent : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<BloodLossAccentComponent, AccentGetEvent>(OnAccent);
|
||||
}
|
||||
|
||||
public void StartBloodLossAccent(EntityUid uid, TimeSpan time, bool refresh, StatusEffectsComponent? status = null)
|
||||
{
|
||||
if (!Resolve(uid, ref status, false))
|
||||
return;
|
||||
|
||||
_statusEffectsSystem.TryAddStatusEffect<BloodLossAccentComponent>(uid, "BloodLoss", time, refresh, status);
|
||||
}
|
||||
|
||||
public void StopBloodLossAccent(EntityUid uid, double timeRemoved)
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveTime(uid, "BloodLoss", TimeSpan.FromSeconds(timeRemoved));
|
||||
}
|
||||
|
||||
private void OnAccent(EntityUid uid, BloodLossAccentComponent component, AccentGetEvent args)
|
||||
{
|
||||
args.Message = Accentuate(args.Message, component);
|
||||
}
|
||||
|
||||
public string Accentuate(string message, BloodLossAccentComponent component)
|
||||
{
|
||||
if (string.IsNullOrEmpty(message))
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
var result = new StringBuilder();
|
||||
string[] words = message.Split(' ');
|
||||
|
||||
foreach (var word in words)
|
||||
{
|
||||
if (word.Length >= 3 && _random.NextDouble() < component.ReplaceProb)
|
||||
{
|
||||
int start = Random.Shared.Next(1, word.Length - 1);
|
||||
int end = start + Random.Shared.Next(1, word.Length - start);
|
||||
|
||||
result.Append(word.Substring(0, start) + component.ToReplace + word.Substring(end));
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Append(word);
|
||||
}
|
||||
|
||||
result.Append(' ');
|
||||
}
|
||||
|
||||
return result.ToString().TrimEnd();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Content.Server._White.Accent.Bloodloss;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class BloodLossAccentComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float ReplaceProb = 0.6f;
|
||||
|
||||
[DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public string ToReplace = "...";
|
||||
}
|
||||
@@ -12,6 +12,7 @@ using Content.Shared.Physics;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared._White.Cult;
|
||||
using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared.Throwing;
|
||||
|
||||
namespace Content.Server._White.Cult.Runes.Systems;
|
||||
|
||||
@@ -34,6 +35,7 @@ public partial class CultSystem
|
||||
|
||||
SubscribeLocalEvent<WraithPhaseActionEvent>(OnWraithPhase);
|
||||
SubscribeLocalEvent<IncorporealComponent, AttackAttemptEvent>(OnAttackAttempt);
|
||||
SubscribeLocalEvent<IncorporealComponent, ThrowAttemptEvent>(OnThrowAttempt);
|
||||
|
||||
SubscribeLocalEvent<JuggernautCreateWallActionEvent>(OnJuggernautCreateWall);
|
||||
|
||||
@@ -163,6 +165,14 @@ public partial class CultSystem
|
||||
}
|
||||
}
|
||||
|
||||
private void OnThrowAttempt(Entity<IncorporealComponent> ent, ref ThrowAttemptEvent args)
|
||||
{
|
||||
if (_statusEffectsSystem.HasStatusEffect(args.Uid, "Incorporeal"))
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveStatusEffect(args.Uid, "Incorporeal");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnJuggernautCreateWall(JuggernautCreateWallActionEvent ev)
|
||||
{
|
||||
if (!TrySpawnWall(ev.Performer, ev.WallPrototypeId))
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
using System.Linq;
|
||||
using Content.Server.Actions;
|
||||
using Content.Shared._White.Wizard.Magic;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Eye;
|
||||
using Content.Shared.Movement.Pulling.Components;
|
||||
using Content.Shared.Movement.Pulling.Systems;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Physics;
|
||||
using Content.Shared.Stealth;
|
||||
using Content.Shared.Stealth.Components;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Physics;
|
||||
using Robust.Shared.Physics.Systems;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server._White.IncorporealSystem;
|
||||
|
||||
public sealed class IncorporealSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!;
|
||||
[Dependency] private readonly ActionsSystem _actions = default!;
|
||||
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
||||
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
|
||||
[Dependency] private readonly SharedStealthSystem _stealth = default!;
|
||||
@@ -78,6 +83,21 @@ public sealed class IncorporealSystem : EntitySystem
|
||||
_stealth.SetVisibility(uid, 1);
|
||||
RemComp<StealthComponent>(uid);
|
||||
_movement.RefreshMovementSpeedModifiers(uid);
|
||||
if (!TryComp(uid, out ActionsContainerComponent? container))
|
||||
return;
|
||||
|
||||
var cooldown = TimeSpan.FromSeconds(3);
|
||||
|
||||
foreach (var action in container.Container.ContainedEntities.Where(HasComp<MagicComponent>))
|
||||
{
|
||||
if (!_actions.TryGetActionData(action, out var comp, false))
|
||||
continue;
|
||||
|
||||
if (comp.Cooldown.HasValue && comp.Cooldown.Value.End >= _timing.CurTime + cooldown)
|
||||
continue;
|
||||
|
||||
_actions.SetCooldown(action, cooldown);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnRefresh(EntityUid uid, IncorporealComponent component, RefreshMovementSpeedModifiersEvent args)
|
||||
|
||||
@@ -24,7 +24,7 @@ public sealed class AmaterasuSystem : EntitySystem
|
||||
|
||||
if (flammable.OnFire)
|
||||
{
|
||||
_bodySystem.GibBody(uid);
|
||||
_bodySystem.GibBody(uid, true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -300,10 +300,10 @@ public sealed class WizardRuleSystem : GameRuleSystem<WizardRuleComponent>
|
||||
_npcFaction.AddFaction(mob, "Wizard");
|
||||
}
|
||||
|
||||
private void SpawnWizard(ICommonSession? session, WizardRuleComponent component, bool spawnGhostRoles = true)
|
||||
private EntityCoordinates WizardSpawnPoint(WizardRuleComponent component)
|
||||
{
|
||||
if (component.ShuttleMap is not {Valid: true} mapUid)
|
||||
return;
|
||||
return EntityCoordinates.Invalid;
|
||||
|
||||
var spawn = new EntityCoordinates();
|
||||
foreach (var (_, meta, xform) in EntityQuery<SpawnPointComponent, MetaDataComponent, TransformComponent>(true))
|
||||
@@ -318,13 +318,25 @@ public sealed class WizardRuleSystem : GameRuleSystem<WizardRuleComponent>
|
||||
break;
|
||||
}
|
||||
|
||||
//Fallback, spawn at the centre of the map
|
||||
// Fallback, spawn at the centre of the map
|
||||
if (spawn == new EntityCoordinates())
|
||||
{
|
||||
spawn = Transform(mapUid).Coordinates;
|
||||
_sawmill.Warning("Fell back to default spawn for wizard!");
|
||||
}
|
||||
|
||||
return spawn;
|
||||
}
|
||||
|
||||
private void SpawnWizard(ICommonSession? session, WizardRuleComponent component, bool spawnGhostRoles = true)
|
||||
{
|
||||
var spawn = WizardSpawnPoint(component);
|
||||
if (spawn == EntityCoordinates.Invalid)
|
||||
{
|
||||
_sawmill.Error("Failed to calculate wizard spawn point");
|
||||
return;
|
||||
}
|
||||
|
||||
var wizardAntag = _prototypeManager.Index(component.WizardRoleProto);
|
||||
|
||||
//If a session is available, spawn mob and transfer mind into it
|
||||
@@ -395,4 +407,62 @@ public sealed class WizardRuleSystem : GameRuleSystem<WizardRuleComponent>
|
||||
ICommonSession? session = null;
|
||||
SpawnWizard(session, component, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes mob a wizard through admin verb button
|
||||
/// </summary>
|
||||
public void AdminMakeWizard(EntityUid uid)
|
||||
{
|
||||
var rule = EntityQuery<WizardRuleComponent>().FirstOrDefault();
|
||||
|
||||
if (rule == null)
|
||||
{
|
||||
GameTicker.StartGameRule("Wizard", out var ruleEntity);
|
||||
rule = Comp<WizardRuleComponent>(ruleEntity);
|
||||
}
|
||||
|
||||
if (HasComp<WizardComponent>(uid))
|
||||
return;
|
||||
|
||||
MakeWizard(uid, rule, true);
|
||||
}
|
||||
|
||||
private bool MakeWizard(EntityUid wizard, WizardRuleComponent rule,
|
||||
bool giveObjectives = true)
|
||||
{
|
||||
if (!_mind.TryGetMind(wizard, out var mindId, out var mind))
|
||||
{
|
||||
Log.Info("Failed getting mind for picked wizard.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (HasComp<WizardRoleComponent>(mindId))
|
||||
{
|
||||
Log.Error($"Player {mind.CharacterName} is already a wizard.");
|
||||
return false;
|
||||
}
|
||||
|
||||
HumanoidCharacterProfile? profile = null;
|
||||
if (TryComp(wizard, out ActorComponent? actor))
|
||||
profile = _prefs.GetPreferences(actor.PlayerSession.UserId).SelectedCharacter as HumanoidCharacterProfile;
|
||||
|
||||
if (giveObjectives)
|
||||
{
|
||||
AddRole(mindId, mind, rule);
|
||||
}
|
||||
|
||||
if (!_prototypeManager.TryIndex(rule.StartingGear, out var gear))
|
||||
{
|
||||
_sawmill.Error("Failed to load wizard gear prototype");
|
||||
return false;
|
||||
}
|
||||
|
||||
SetupWizardEntity(wizard, gear, profile, false);
|
||||
|
||||
var spawnpoint = WizardSpawnPoint(rule);
|
||||
var transform = EnsureComp<TransformComponent>(wizard);
|
||||
transform.Coordinates = spawnpoint;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Content.Shared.Kitchen.Components;
|
||||
public sealed partial class KitchenSpikeComponent : Component
|
||||
{
|
||||
[DataField("delay")]
|
||||
public float SpikeDelay = 7.0f;
|
||||
public float SpikeDelay = 2.0f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("sound")]
|
||||
|
||||
@@ -285,6 +285,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
|
||||
new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid)
|
||||
{
|
||||
DistanceThreshold = SharedInteractionSystem.InteractionRange,
|
||||
CancelDuplicate = false
|
||||
}, doAfter);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -4,13 +4,13 @@ namespace Content.Shared._White.Cult.Components;
|
||||
public sealed partial class CultBuffComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public TimeSpan BuffTime = TimeSpan.FromSeconds(60);
|
||||
public TimeSpan BuffTime = TimeSpan.FromSeconds(20);
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public TimeSpan StartingBuffTime = TimeSpan.FromSeconds(60);
|
||||
public TimeSpan StartingBuffTime = TimeSpan.FromSeconds(20);
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public TimeSpan BuffLimit = TimeSpan.FromSeconds(55);
|
||||
public TimeSpan BuffLimit = TimeSpan.FromSeconds(10);
|
||||
|
||||
public static float NearbyTilesBuffRadius = 1f;
|
||||
|
||||
|
||||
@@ -4933,3 +4933,98 @@
|
||||
id: 326
|
||||
time: '2024-06-26T02:13:42.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/378
|
||||
- author: Aviu
|
||||
changes:
|
||||
- message: "\u041D\u0430 \u043C\u044F\u0441\u043D\u043E\u0439 \u043A\u0440\u044E\
|
||||
\u043A \u043C\u043E\u0436\u043D\u043E \u043F\u043E\u0432\u0435\u0441\u0438\u0442\
|
||||
\u044C \u0436\u0438\u0432\u044B\u0445 \u0446\u0435\u043B\u0435\u0439, \u0432\
|
||||
\ \u0442\u043E\u043C \u0447\u0438\u0441\u043B\u0435 \u0438 \u0441\u0435\u0431\
|
||||
\u044F, \u0434\u0443\u0430\u0444\u0442\u0435\u0440 \u0443\u043C\u0435\u043D\u044C\
|
||||
\u0448\u0435\u043D."
|
||||
type: Add
|
||||
- message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0436\u043D\u043E\
|
||||
\ \u0443\u0437\u043D\u0430\u0442\u044C, \u0447\u044C\u044F \u0442\u0443\u0448\
|
||||
\u0430 \u0432\u0438\u0441\u0438\u0442 \u043D\u0430 \u043C\u044F\u0441\u043D\u043E\
|
||||
\u043C \u043A\u0440\u044E\u043A\u0435, \u0435\u0441\u043B\u0438 \u043E\u0441\
|
||||
\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0435\u0433\u043E."
|
||||
type: Add
|
||||
- message: "\u041F\u0440\u0438 \u0432\u044B\u0445\u043E\u0434\u0435 \u0438\u0437\
|
||||
\ \u043F\u043E\u0442\u0443\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0433\
|
||||
\u043E \u043F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044F \u0432\
|
||||
\u0441\u044F \u043C\u0430\u0433\u0438\u044F \u0443\u0445\u043E\u0434\u0438\u0442\
|
||||
\ \u0432 \u043A\u0434 \u043D\u0430 3 \u0441\u0435\u043A\u0443\u043D\u0434\u044B\
|
||||
."
|
||||
type: Add
|
||||
- message: "\u0423 \u0430\u0440\u0430\u0445\u043D\u0438\u0434\u043E\u0432 \u0442\
|
||||
\u0435\u043F\u0435\u0440\u044C \u0435\u0441\u0442\u044C \u043F\u043E\u043B."
|
||||
type: Add
|
||||
- message: "\u0423\u0431\u0440\u0430\u043D\u0430 \u0432\u043E\u0437\u043C\u043E\u0436\
|
||||
\u043D\u043E\u0441\u0442\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\
|
||||
\u0442\u044C \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0432\u0435\u0442\u0430\
|
||||
."
|
||||
type: Remove
|
||||
- message: "\u041F\u0440\u0438 \u043F\u043E\u043F\u044B\u0442\u043A\u0435 \u0431\
|
||||
\u0440\u043E\u0441\u0438\u0442\u044C \u0447\u0442\u043E-\u043B\u0438\u0431\u043E\
|
||||
\ \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u0436 \u0432\u044B\u0445\u043E\u0434\
|
||||
\u0438\u0442 \u0438\u0437 \u043F\u043E\u0442\u0443\u0441\u0442\u043E\u0440\u043E\
|
||||
\u043D\u043D\u0435\u0433\u043E \u043F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\
|
||||
\u0432\u0438\u044F."
|
||||
type: Tweak
|
||||
- message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u0432\u0440\u0435\
|
||||
\u043C\u044F \u0431\u0430\u0444\u0444\u0430 \u0441 \u0440\u0443\u043D\u044B\
|
||||
\ \u0434\u043E 20 \u0441\u0435\u043A\u043D\u0443\u0434."
|
||||
type: Tweak
|
||||
- message: "\u0424\u0438\u043A\u0441 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\
|
||||
\u043D\u0438\u044F \u043D\u043E\u0441\u043A\u043E\u0432."
|
||||
type: Fix
|
||||
id: 327
|
||||
time: '2024-06-26T11:56:29.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/385
|
||||
- author: RinKeeper
|
||||
changes:
|
||||
- message: "\u041A\u043D\u043E\u043F\u043A\u0430 \u0441\u0434\u0435\u043B\u0430\u0442\
|
||||
\u044C \u043C\u0430\u0433\u043E\u043C \u0434\u043B\u044F \u043F\u0435\u0434\u0430\
|
||||
\u043B\u0435\u0439"
|
||||
type: Add
|
||||
id: 328
|
||||
time: '2024-06-27T05:59:13.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/374
|
||||
- author: ThereDrD
|
||||
changes:
|
||||
- message: "\u0412 \u043F\u0430\u043D\u0435\u043B\u0438 \u0433\u043E\u0441\u0442\
|
||||
\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043E\u0442\u043E\
|
||||
\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043C\u0435\u0440\u0442\
|
||||
\u0432\u044B\u0435 \u0430\u043D\u0442\u0430\u0433\u043E\u043D\u0438\u0441\u0442\
|
||||
\u044B"
|
||||
type: Fix
|
||||
- message: "\u0424\u0438\u043A\u0441 \u0440\u0430\u0437\u043C\u0435\u0440\u0430\
|
||||
\ \u0444\u043B\u0435\u0435\u0440\u0433\u0430\u043D\u0430"
|
||||
type: Fix
|
||||
- message: "\u0421\u043A\u0430\u0444\u0430\u043D\u0434\u0440 \u0420\u0414 \u0431\
|
||||
\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u043E\u043C\u0435\u0449\u0430\
|
||||
\u0435\u0442\u0441\u044F \u0432 \u043F\u043E\u044F\u0441"
|
||||
type: Fix
|
||||
- message: "\u0413\u043E\u0432\u043D\u043E\u0432\u043E\u0437 \u043F\u0440\u043E\u043F\
|
||||
\u0430\u043B \u0438\u0437 \u043B\u043E\u0431\u0431\u0438, \u0432\u0440\u0435\
|
||||
\u043C\u0435\u043D\u043D\u043E."
|
||||
type: Remove
|
||||
id: 329
|
||||
time: '2024-06-27T18:29:16.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/388
|
||||
- author: ThereDrD
|
||||
changes:
|
||||
- message: "\u0411\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E \u0441\
|
||||
\u043F\u0440\u0430\u0439\u0442\u043E\u0432 \u043E\u0440\u0443\u0436\u0438\u044F\
|
||||
\ \u0431\u044B\u043B\u043E \u043F\u0435\u0440\u0435\u0440\u0438\u0441\u043E\u0432\
|
||||
\u0430\u043D\u043E"
|
||||
type: Add
|
||||
- message: "\u041E\u0440\u0443\u0436\u0438\u0435, \u043D\u0435 \u0438\u043C\u0435\
|
||||
\u0432\u0448\u0435\u0435 \u0440\u0430\u043D\u044C\u0448\u0435 \u0441\u0432\u043E\
|
||||
\u0438\u0445 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445\
|
||||
\ \u0441\u043F\u0440\u0430\u0439\u0442\u043E\u0432 \u0432 \u0440\u0443\u043A\
|
||||
\u0430\u0445 \u0438 \u043D\u0430 \u0442\u0435\u043B\u0435 \u043F\u043E\u043B\
|
||||
\u0443\u0447\u0438\u043B\u043E \u0438\u0445"
|
||||
type: Add
|
||||
id: 330
|
||||
time: '2024-06-27T20:54:09.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/387
|
||||
|
||||
@@ -6,6 +6,7 @@ admin-verb-make-nuclear-operative = Make target into a lone Nuclear Operative.
|
||||
admin-verb-make-pirate = Make the target into a pirate. Note this doesn't configure the game rule.
|
||||
admin-verb-make-head-rev = Make the target into a Head Revolutionary.
|
||||
admin-verb-make-thief = Make the target into a thief.
|
||||
admin-verb-make-wizard = Make the target into a wizard.
|
||||
|
||||
admin-verb-text-make-traitor = Make Traitor
|
||||
admin-verb-text-make-changeling = Make Changeling
|
||||
@@ -14,3 +15,4 @@ admin-verb-text-make-nuclear-operative = Make Nuclear Operative
|
||||
admin-verb-text-make-pirate = Make Pirate
|
||||
admin-verb-text-make-head-rev = Make Head Rev
|
||||
admin-verb-text-make-thief = Make Thief
|
||||
admin-verb-text-make-wizard = Make wizard
|
||||
|
||||
@@ -6,6 +6,7 @@ admin-verb-make-nuclear-operative = Сделать цель одиноким Я
|
||||
admin-verb-make-pirate = Сделать цель пиратом\капером. Учтите, что это не меняет игровой режим.
|
||||
admin-verb-make-head-rev = Сделать цель главой революции.
|
||||
admin-verb-make-thief = Сделать цель вором.
|
||||
admin-verb-make-wizard = Сделать цель магом.
|
||||
|
||||
admin-verb-text-make-traitor = Сделать предателем
|
||||
admin-verb-text-make-changeling = Сделать генокрадом
|
||||
@@ -14,3 +15,4 @@ admin-verb-text-make-nuclear-operative = Сделать одиноким яде
|
||||
admin-verb-text-make-pirate = Сделать пиратом
|
||||
admin-verb-text-make-head-rev = Сделать главой революции
|
||||
admin-verb-text-make-thief = Сделать вором
|
||||
admin-verb-text-make-wizard = Сделать магом
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
hands-system-missing-equipment-slot = У вас нет { $slotName }, из которого можно что-то взять!
|
||||
hands-system-empty-equipment-slot = В вашем { $slotName } нет ничего, что можно было бы вынуть!
|
||||
# Examine text after when they're holding something (in-hand)
|
||||
comp-hands-examine-empty = { CAPITALIZE(SUBJECT($user)) } ничего не удерживает.
|
||||
comp-hands-examine-empty = { CAPITALIZE(SUBJECT($user)) } ничего не держит.
|
||||
comp-hands-examine-wrapper = [color=paleturquoise]{$item}[/color]
|
||||
comp-hands-examine = { CAPITALIZE(SUBJECT($user)) } удерживает { $items }.
|
||||
comp-hands-examine = { CAPITALIZE(SUBJECT($user)) } держит { $items }.
|
||||
hands-system-blocked-by = Руки заблокированы этим:
|
||||
|
||||
|
||||
@@ -11,3 +11,4 @@ comp-kitchen-spike-knife-needed = Вам нужен нож для этого.
|
||||
comp-kitchen-spike-remove-meat = Вы срезаете немного мяса с { $victim }.
|
||||
comp-kitchen-spike-remove-meat-last = Вы срезаете последний кусок мяса с { $victim }!
|
||||
comp-kitchen-spike-meat-name = мясо { $victim }
|
||||
comp-kitchen-spike-examine = На { CAPITALIZE($this) } висит туша { CAPITALIZE($victim) }.
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
description: A cardboard box for storing things.
|
||||
components:
|
||||
- type: Item
|
||||
size: Large
|
||||
shape:
|
||||
- 0,0,2,2
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,1,1
|
||||
- type: Storage
|
||||
maxItemSize: Small
|
||||
grid:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: Syringe
|
||||
amount: 6
|
||||
amount: 4
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
id: UplinkRifleMosin
|
||||
name: uplink-rifle-mosin-name
|
||||
description: uplink-rifle-mosin-desc
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/Snipers/bolt_gun_wood-icons.rsi, state: icon }
|
||||
productEntity: WeaponSniperMosin
|
||||
cost:
|
||||
Telecrystal: 1
|
||||
@@ -135,7 +136,7 @@
|
||||
id: UplinkSniperBundle
|
||||
name: uplink-sniper-bundle-name
|
||||
description: uplink-sniper-bundle-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/Snipers/heavy_sniper.rsi, state: base }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/Snipers/hristov-icons.rsi, state: icon }
|
||||
productEntity: BriefcaseSyndieSniperBundleFilled
|
||||
cost:
|
||||
Telecrystal: 20 # WD EDIT
|
||||
@@ -147,7 +148,7 @@
|
||||
id: UplinkC20RBundle
|
||||
name: uplink-c20r-bundle-name
|
||||
description: uplink-c20r-bundle-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/SMGs/c20r.rsi, state: icon }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/SMG/c20r-icons.rsi, state: icon }
|
||||
productEntity: ClothingBackpackDuffelSyndicateFilledSMG
|
||||
cost:
|
||||
Telecrystal: 15 # WD EDIT
|
||||
@@ -159,7 +160,7 @@
|
||||
id: UplinkBulldogBundle
|
||||
name: uplink-buldog-bundle-name
|
||||
description: uplink-buldog-bundle-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/Shotguns/bulldog.rsi, state: icon }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/Shotguns/bulldog-icons.rsi, state: icon }
|
||||
productEntity: ClothingBackpackDuffelSyndicateFilledShotgun
|
||||
cost:
|
||||
Telecrystal: 17
|
||||
@@ -171,7 +172,7 @@
|
||||
id: UplinkGrenadeLauncherBundle
|
||||
name: uplink-grenade-launcher-bundle-name
|
||||
description: uplink-grenade-launcher-bundle-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/Launchers/china_lake.rsi, state: icon }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/Launchers/china_lake-icons.rsi, state: icon }
|
||||
productEntity: ClothingBackpackDuffelSyndicateFilledGrenadeLauncher
|
||||
cost:
|
||||
Telecrystal: 25
|
||||
@@ -183,7 +184,7 @@
|
||||
id: UplinkL6SawBundle
|
||||
name: uplink-l6-saw-bundle-name
|
||||
description: uplink-l6-saw-bundle-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/LMGs/l6.rsi, state: icon }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/LMGs/l6-icons.rsi, state: icon }
|
||||
productEntity: ClothingBackpackDuffelSyndicateFilledLMG
|
||||
cost:
|
||||
Telecrystal: 25
|
||||
|
||||
@@ -156,12 +156,6 @@
|
||||
description: Передатчик сигнала ХимМастера
|
||||
|
||||
# WD
|
||||
- type: sourcePort
|
||||
id: LightStatus
|
||||
name: Статус светильника
|
||||
description: Этот порт вызывается всякий раз, когда меняется статус светильника
|
||||
defaultLinks: [ Toggle ]
|
||||
|
||||
- type: sourcePort
|
||||
id: BodyScannerSender
|
||||
name: Сканер тела
|
||||
|
||||
@@ -27,7 +27,9 @@
|
||||
grid:
|
||||
- 0,0,7,1
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
size: Large
|
||||
shape:
|
||||
- 0, 0, 4, 1
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
storagebase: !type:Container
|
||||
|
||||
@@ -548,7 +548,9 @@
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/sheath.rsi
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
size: Huge
|
||||
shape:
|
||||
- 0, 0, 4, 0
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
item:
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
id: ClothingNeckMantleBase
|
||||
abstract: true
|
||||
name: base mantle
|
||||
description: based
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleCap
|
||||
name: captain's mantle
|
||||
description: A comfortable and chique mantle befitting of only the most experienced captain.
|
||||
@@ -10,7 +20,7 @@
|
||||
sprite: Clothing/Neck/mantles/capmantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleCE
|
||||
name: chief engineer's mantle
|
||||
description: High visibility, check. RIG system, check. High capacity cell, check. Everything a chief engineer could need in a stylish mantle.
|
||||
@@ -21,7 +31,7 @@
|
||||
sprite: Clothing/Neck/mantles/cemantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleCMO
|
||||
name: chief medical officer's mantle
|
||||
description: For a CMO that has been in enough medbays to know that more PPE means less central command dry cleaning visits when the shift is over.
|
||||
@@ -32,7 +42,7 @@
|
||||
sprite: Clothing/Neck/mantles/cmomantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleHOP
|
||||
name: head of personnel's mantle
|
||||
description: A good HOP knows that paper pushing is only half the job... petting your dog and looking fashionable is the other half.
|
||||
@@ -43,7 +53,7 @@
|
||||
sprite: Clothing/Neck/mantles/hopmantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleHOS
|
||||
name: head of security's mantle
|
||||
description: Shootouts with nukies are just another Tuesday for this HoS. This mantle is a symbol of commitment to the station.
|
||||
@@ -54,7 +64,7 @@
|
||||
sprite: Clothing/Neck/mantles/hosmantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleRD
|
||||
name: research director's mantle
|
||||
description: For when long days in the office consist of explosives, poisonous gas, murder robots, and a fresh pizza from cargo; this mantle will keep you comfy.
|
||||
@@ -65,7 +75,7 @@
|
||||
sprite: Clothing/Neck/mantles/rdmantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleQM
|
||||
name: quartermaster's mantle
|
||||
description: For the master of goods and materials to rule over the department, a befitting mantle to show off superiority!
|
||||
@@ -76,7 +86,7 @@
|
||||
sprite: Clothing/Neck/mantles/qmmantle.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckMantleBase
|
||||
id: ClothingNeckMantleInspector
|
||||
name: inspector's mantle
|
||||
description: Dark mantle that highlights your intimidating figure. These are the shoulders!
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
id: ClothingNeckTieBase
|
||||
abstract: true
|
||||
name: red-tie
|
||||
description: A neosilk clip-on red tie.
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: 135
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckTieBase
|
||||
id: ClothingNeckTieRed
|
||||
name: red-tie
|
||||
description: A neosilk clip-on red tie.
|
||||
@@ -15,7 +25,7 @@
|
||||
- ClothMade
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckTieBase
|
||||
id: ClothingNeckTieDet
|
||||
name: detective's tie
|
||||
description: A loosely tied necktie, a perfect accessory for the over-worked detective.
|
||||
@@ -24,9 +34,9 @@
|
||||
sprite: Clothing/Neck/Ties/dettie.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Neck/Ties/dettie.rsi
|
||||
|
||||
|
||||
- type: entity
|
||||
parent: ClothingNeckBase
|
||||
parent: ClothingNeckTieBase
|
||||
id: ClothingNeckTieSci
|
||||
name: scientist's tie
|
||||
description: Why do we all have to wear these ridiculous ties?
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#Basic armor vest
|
||||
- type: entity
|
||||
parent: ClothingOuterBaseMedium
|
||||
parent: ClothingOuterBase
|
||||
id: ClothingOuterArmorBasic
|
||||
name: armor vest
|
||||
description: A standard Type I armored vest that provides decent protection against most types of damage.
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: Normal
|
||||
size: Huge
|
||||
- type: Tag
|
||||
tags:
|
||||
- WhitelistChameleon
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
- type: PressureProtection
|
||||
highPressureMultiplier: 0.02
|
||||
lowPressureMultiplier: 1000
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
state: icon
|
||||
- type: Item
|
||||
size: Small
|
||||
storedRotation: 90
|
||||
- type: Food
|
||||
requiresSpecialDigestion: true
|
||||
- type: SolutionContainerManager
|
||||
|
||||
@@ -40,3 +40,5 @@
|
||||
- behavior: Anchoring
|
||||
useSound: /Audio/Items/drill_use.ogg
|
||||
changeSound: /Audio/Items/change_drill.ogg
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- Electrocution
|
||||
- type: Pullable
|
||||
- type: Tag
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
- type: entity
|
||||
name: laser raptor
|
||||
id: MobLaserRaptor
|
||||
parent: SimpleMobBase
|
||||
parent: SimpleSpaceMobBase
|
||||
description: From the Viking age.
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
@@ -36,7 +36,7 @@
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
100: Dead
|
||||
50: Dead
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed: 2
|
||||
baseSprintSpeed: 5
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- Electrocution
|
||||
- type: NameIdentifier
|
||||
group: GenericNumber
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
allowed:
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- Electrocution
|
||||
- ForcedSleep
|
||||
- TemporaryBlindness
|
||||
@@ -97,6 +98,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- Electrocution
|
||||
- ForcedSleep
|
||||
- TemporaryBlindness
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- Electrocution
|
||||
- Drunk
|
||||
- SlurredSpeech
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
visible: false
|
||||
- map: [ "underwearb" ] #White
|
||||
- map: [ "underweart" ] #White
|
||||
- map: ["jumpsuit"]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RFoot" ]
|
||||
- map: [ "socks" ] #White
|
||||
- map: ["jumpsuit"]
|
||||
- map: ["enum.HumanoidVisualLayers.LHand"]
|
||||
- map: ["enum.HumanoidVisualLayers.RHand"]
|
||||
- map: [ "gloves" ]
|
||||
@@ -146,6 +146,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- SeeingRainbows
|
||||
- Electrocution
|
||||
- Drunk
|
||||
@@ -309,6 +310,7 @@
|
||||
- KnockedDown
|
||||
- SlowedDown
|
||||
- Stutter
|
||||
- BloodLoss
|
||||
- SeeingRainbows
|
||||
- Electrocution
|
||||
- ForcedSleep
|
||||
|
||||
@@ -100,17 +100,14 @@
|
||||
sprite: Mobs/Customization/masking_helpers.rsi
|
||||
state: unisex_full
|
||||
visible: false
|
||||
- map: [ "jumpsuit" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "underwearb" ] #White
|
||||
- map: [ "underweart" ] #White
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RFoot" ]
|
||||
- map: [ "socks" ] #White
|
||||
- map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
|
||||
color: "#ffffff"
|
||||
sprite: Objects/Misc/handcuffs.rsi
|
||||
state: body-overlay-2
|
||||
visible: false
|
||||
- map: [ "jumpsuit" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
- map: [ "ears" ]
|
||||
@@ -129,6 +126,11 @@
|
||||
- map: [ "head" ]
|
||||
- map: [ "pocket1" ]
|
||||
- map: [ "pocket2" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
|
||||
color: "#ffffff"
|
||||
sprite: Objects/Misc/handcuffs.rsi
|
||||
state: body-overlay-2
|
||||
visible: false
|
||||
- map: [ "clownedon" ] # Dynamically generated
|
||||
sprite: "Effects/creampie.rsi"
|
||||
state: "creampie_moth"
|
||||
|
||||
@@ -440,6 +440,8 @@
|
||||
Quantity: 10
|
||||
- ReagentId: Oculine
|
||||
Quantity: 2
|
||||
- type: Item
|
||||
storedRotation: -45
|
||||
|
||||
- type: entity
|
||||
name: cabbage
|
||||
@@ -872,6 +874,8 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Fruit
|
||||
- type: Item
|
||||
size: Tiny
|
||||
|
||||
- type: entity
|
||||
name: cocoa pod
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
sprite: Objects/Devices/timer.rsi
|
||||
state: timer
|
||||
- type: Item
|
||||
size: Small
|
||||
size: Tiny
|
||||
- type: PayloadTrigger
|
||||
components:
|
||||
- type: OnUseTimerTrigger
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
state: forensicnew
|
||||
- type: Item
|
||||
size: Small
|
||||
storedRotation: 90
|
||||
- type: Clothing
|
||||
sprite: Objects/Devices/forensic_scanner.rsi
|
||||
quickEquip: false
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: Item
|
||||
size: Tiny
|
||||
|
||||
- type: entity
|
||||
name: explosive payload
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
state: pinpointer
|
||||
- type: Item
|
||||
sprite: Objects/Devices/pinpointer.rsi
|
||||
size: Tiny
|
||||
- type: Pinpointer
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
sprite: Objects/Materials/Sheets/glass.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Materials/Sheets/glass.rsi
|
||||
size: Small
|
||||
size: Normal
|
||||
- type: StaticPrice
|
||||
price: 0
|
||||
- type: Tag
|
||||
@@ -197,7 +197,7 @@
|
||||
- ReagentId: Carbon
|
||||
Quantity: 0.5
|
||||
canReact: false
|
||||
|
||||
|
||||
- type: entity
|
||||
parent: SheetGlassBase
|
||||
id: SheetPGlass
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
sprite: Objects/Materials/Sheets/metal.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Materials/Sheets/metal.rsi
|
||||
size: Small
|
||||
size: Normal
|
||||
- type: StaticPrice
|
||||
price: 0
|
||||
- type: Tag
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
sprite: Objects/Materials/Sheets/other.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Materials/Sheets/other.rsi
|
||||
size: Small
|
||||
size: Normal
|
||||
- type: Tag
|
||||
tags:
|
||||
- Sheet
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/nukedisk.rsi
|
||||
state: icon
|
||||
- type: Item
|
||||
size: Tiny
|
||||
- type: StaticPrice
|
||||
price: 2000
|
||||
- type: CargoSellBlacklist
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
parent: BaseItem
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
size: Tiny
|
||||
- type: Battery
|
||||
pricePerJoule: 0.15
|
||||
- type: PowerCell
|
||||
@@ -291,7 +291,7 @@
|
||||
parent: BasePowerCell
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
size: Huge
|
||||
- type: MultiHandedItem
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
slots:
|
||||
- belt
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
size: Large
|
||||
shape:
|
||||
- 0, 0, 2, 1
|
||||
- type: Storage
|
||||
maxItemSize: Normal # allow up to 5 large beakers / 10 beakers / 10 pill canisters
|
||||
grid:
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
Slash: 10
|
||||
- type: Item
|
||||
sprite: Objects/Tools/Hydroponics/hoe.rsi
|
||||
storedRotation: 45
|
||||
|
||||
- type: entity
|
||||
name: plant clippers
|
||||
@@ -108,6 +109,7 @@
|
||||
Piercing: 5 # I guess you can stab it into them?
|
||||
- type: Item
|
||||
sprite: Objects/Tools/Hydroponics/spade.rsi
|
||||
storedRotation: 135
|
||||
- type: Shovel
|
||||
speedModifier: 0.75 # slower at digging than a full-sized shovel
|
||||
|
||||
@@ -121,7 +123,7 @@
|
||||
sprite: Objects/Specific/Hydroponics/Equipment/plant_bag.rsi
|
||||
state: icon
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
size: Normal
|
||||
- type: Clothing
|
||||
quickEquip: false
|
||||
slots:
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
- type: Item
|
||||
size: Large
|
||||
sprite: Objects/Specific/Janitorial/mop.rsi
|
||||
storedRotation: -135
|
||||
shape:
|
||||
- 0, 0, 3, 0
|
||||
- type: Absorbent
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
state: ointment
|
||||
- type: Item
|
||||
heldPrefix: ointment
|
||||
storedRotation: 45
|
||||
- type: Healing
|
||||
damageContainers:
|
||||
- Biological
|
||||
@@ -229,7 +230,7 @@
|
||||
components:
|
||||
- type: Stack
|
||||
lingering: true
|
||||
|
||||
|
||||
- type: entity
|
||||
parent: BaseHealingItem
|
||||
id: Tourniquet
|
||||
@@ -268,6 +269,8 @@
|
||||
- Gauze
|
||||
- type: Sprite
|
||||
state: gauze
|
||||
- type: Item
|
||||
storedRotation: 90
|
||||
- type: Construction
|
||||
graph: Gauze
|
||||
node: gauze
|
||||
|
||||
@@ -328,6 +328,9 @@
|
||||
layers:
|
||||
- state: stimpen
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: Item
|
||||
size: Small
|
||||
storedRotation: 90
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
pen:
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
- type: Storage
|
||||
maxItemSize: Small
|
||||
grid:
|
||||
- 0,0,3,1
|
||||
- 0,0,4,1
|
||||
- type: Item
|
||||
size: Large
|
||||
size: Normal
|
||||
sprite: Objects/Specific/Medical/firstaidkits.rsi
|
||||
heldPrefix: firstaid
|
||||
- type: Tag
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
name: research point disk (1000)
|
||||
description: A disk for the R&D server containing 1000 points.
|
||||
components:
|
||||
- type: Item
|
||||
size: Small
|
||||
shape:
|
||||
- 0, 0, 1, 1
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Research/researchdisk.rsi
|
||||
state: icon
|
||||
|
||||
@@ -154,6 +154,8 @@
|
||||
description: Used to contain a moderate amount of chemicals and solutions.
|
||||
id: Beaker
|
||||
components:
|
||||
- type: Item
|
||||
size: Tiny
|
||||
- type: Spillable
|
||||
solution: beaker
|
||||
- type: StaticPrice
|
||||
@@ -281,6 +283,7 @@
|
||||
- type: Item
|
||||
size: Tiny
|
||||
sprite: Objects/Specific/Chemistry/dropper.rsi
|
||||
storedRotation: -45
|
||||
- type: Appearance
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 1
|
||||
@@ -329,8 +332,9 @@
|
||||
sprite: Objects/Specific/Chemistry/syringe.rsi
|
||||
state: "syringe_base0"
|
||||
- type: Item
|
||||
size: Tiny
|
||||
size: Small
|
||||
sprite: Objects/Specific/Chemistry/syringe.rsi
|
||||
storedRotation: -45
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
injector:
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
- type: Item
|
||||
sprite: Objects/Devices/communication.rsi
|
||||
heldPrefix: old-radio
|
||||
storedRotation: 90
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
- key: enum.StoreUiKey.Key
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: Item
|
||||
size: Normal
|
||||
sprite: Objects/Tanks/generic.rsi
|
||||
storedRotation: 45
|
||||
- type: Clothing
|
||||
quickEquip: false
|
||||
sprite: Objects/Tanks/generic.rsi
|
||||
@@ -57,6 +58,8 @@
|
||||
sprite: Objects/Tanks/oxygen.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Tanks/oxygen.rsi
|
||||
shape:
|
||||
- 0, 0, 3, 0
|
||||
- type: GasTank
|
||||
outputPressure: 21.3
|
||||
air:
|
||||
@@ -87,6 +90,8 @@
|
||||
sprite: Objects/Tanks/emergency.rsi
|
||||
- type: Item
|
||||
size: Small
|
||||
shape:
|
||||
- 0, 0, 1, 0
|
||||
sprite: Objects/Tanks/emergency.rsi
|
||||
- type: GasTank
|
||||
air:
|
||||
@@ -208,6 +213,9 @@
|
||||
air:
|
||||
volume: 15
|
||||
temperature: 293.15
|
||||
- type: Item
|
||||
shape:
|
||||
- 0, 0, 3, 0
|
||||
|
||||
- type: entity
|
||||
parent: GasTankRoundBase
|
||||
@@ -219,6 +227,8 @@
|
||||
sprite: Objects/Tanks/anesthetic.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Tanks/anesthetic.rsi
|
||||
shape:
|
||||
- 0, 0, 3, 0
|
||||
- type: GasTank
|
||||
outputPressure: 30.4
|
||||
air:
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
- type: Item
|
||||
sprite: Objects/Tanks/Jetpacks/blue.rsi
|
||||
size: Huge
|
||||
shape:
|
||||
- 0, 0, 2, 3
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
- key: enum.SharedGasTankUiKey.Key
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
state: spray_painter
|
||||
- type: Item
|
||||
sprite: Objects/Tools/spray_painter.rsi
|
||||
storedRotation: -90
|
||||
- type: ActivatableUI
|
||||
key: enum.SprayPainterUiKey.Key
|
||||
- type: UserInterface
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
grid:
|
||||
- 0,0,6,3
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
size: Large
|
||||
shape:
|
||||
- 0,0,6,2
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
|
||||
@@ -502,6 +502,7 @@
|
||||
sprite: Objects/Tools/rcd.rsi
|
||||
state: ammo
|
||||
- type: Item
|
||||
size: Tiny
|
||||
sprite: Objects/Tools/rcd.rsi
|
||||
heldPrefix: ammo
|
||||
- type: PhysicalComposition
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -47,10 +47,10 @@
|
||||
capacity: 100
|
||||
- type: Item
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_box.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/LightRifle/light_rifle_box.rsi
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 8
|
||||
steps: 6
|
||||
zeroVisible: false
|
||||
- type: Appearance
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Pistol/smg_mag.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -112,7 +112,7 @@
|
||||
tags:
|
||||
- CartridgePistol
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag_top_mounted.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Pistol/smg_mag_top_mounted.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -121,7 +121,7 @@
|
||||
shader: unshaded
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 6
|
||||
steps: 5
|
||||
zeroVisible: false
|
||||
- type: Appearance
|
||||
- type: ContainerContainer
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
- type: Sprite
|
||||
- type: Item
|
||||
size: Huge
|
||||
shape:
|
||||
- 0,0,4,1
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Battery/laser_retro.rsi
|
||||
quickEquip: false
|
||||
@@ -838,3 +840,5 @@
|
||||
price: 800
|
||||
- type: Item
|
||||
size: Large
|
||||
shape:
|
||||
- 0, 0, 3, 1
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
- type: Item
|
||||
size: Huge
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6.rsi
|
||||
quickEquip: false
|
||||
slots:
|
||||
- Back
|
||||
@@ -77,15 +77,20 @@
|
||||
description: A rather traditionally made LMG with a pleasantly lacquered wooden pistol grip. Uses .30 rifle ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-3
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
- state: mag-4
|
||||
map: [ "enum.GunVisualLayers.Mag" ]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-inhands.rsi
|
||||
size: Huge
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-inhands.rsi
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 4
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
|
||||
@@ -109,14 +114,19 @@
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
- state: mag-3
|
||||
- state: mag-4
|
||||
map: [ "enum.GunVisualLayers.Mag" ]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-inhands.rsi
|
||||
size: Huge
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/LMGs/l6-inhands.rsi
|
||||
slots:
|
||||
- Back
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
@@ -130,3 +140,8 @@
|
||||
autoRecharge: true
|
||||
autoRechargeRate: 25
|
||||
- type: AmmoCounter
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
- Back
|
||||
- type: Item
|
||||
size: Huge
|
||||
shape:
|
||||
- 0,0,5,1
|
||||
- type: StaticPrice
|
||||
price: 500
|
||||
- type: ContainerContainer
|
||||
@@ -36,12 +38,14 @@
|
||||
description: PLOOP
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-icons.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/china_lake-inhands.rsi
|
||||
slots:
|
||||
- Back
|
||||
- suitStorage
|
||||
@@ -70,14 +74,16 @@
|
||||
description: A modified ancient rocket-propelled grenade launcher.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-inhands.rsi
|
||||
- type: Gun
|
||||
fireRate: 0.5
|
||||
soundGunshot:
|
||||
@@ -103,14 +109,16 @@
|
||||
description: A modified ancient rocket-propelled grenade launcher.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Launchers/rocket-inhands.rsi
|
||||
- type: Gun
|
||||
fireRate: 6
|
||||
selectedMode: FullAuto
|
||||
@@ -127,7 +135,7 @@
|
||||
path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 1
|
||||
steps: 2
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
- type: Sprite
|
||||
- type: Item
|
||||
size: Huge
|
||||
shape:
|
||||
- 0,0,4,1
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
quickEquip: false
|
||||
@@ -66,7 +68,7 @@
|
||||
description: An iconic weapon of war. Uses .30 rifle ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/ak-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
@@ -84,6 +86,10 @@
|
||||
visible: false
|
||||
sprite: White/Objects/Weapons/modulesOnWeapon.rsi
|
||||
map: [ "enum.ModuleVisualState.AimModule" ]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/ak-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/ak-inhands.rsi
|
||||
- type: Gun
|
||||
fireRate: 5
|
||||
soundGunshot:
|
||||
@@ -200,7 +206,7 @@
|
||||
description: A high end military grade assault rifle. Uses .20 rifle ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Rifles/lecter.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/lecter-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
@@ -218,8 +224,10 @@
|
||||
visible: false
|
||||
sprite: White/Objects/Weapons/modulesOnWeapon.rsi
|
||||
map: [ "enum.ModuleVisualState.AimModule" ]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/lecter-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Rifles/lecter.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/lecter-inhands.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/ltrifle.ogg
|
||||
|
||||
@@ -71,12 +71,16 @@
|
||||
description: Pla-ket-ket-ket-ket! Uses .35 auto ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/SMGs/atreides.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/atreides-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/SMG/atreides-inhands.rsi
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/SMG/atreides-inhands.rsi
|
||||
- type: Gun
|
||||
fireRate: 10
|
||||
soundGunshot:
|
||||
@@ -94,7 +98,7 @@
|
||||
description: A firearm that is often used by the infamous nuclear operatives. Uses .35 auto ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/SMGs/c20r.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/c20r-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -113,7 +117,9 @@
|
||||
sprite: White/Objects/Weapons/modulesOnSMGs.rsi
|
||||
map: [ "enum.ModuleVisualState.AimModule" ]
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/SMGs/c20r.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/c20r-inhands.rsi
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/SMG/c20r-inhands.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/c-20r.ogg
|
||||
@@ -171,7 +177,7 @@
|
||||
aim_module: !type:ContainerSlot
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 6
|
||||
steps: 4
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: PointLight
|
||||
@@ -185,7 +191,7 @@
|
||||
description: An excellent fully automatic Heavy SMG.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/SMGs/drozd.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/drozd-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -204,7 +210,9 @@
|
||||
sprite: White/Objects/Weapons/modulesOnWeapon.rsi
|
||||
map: [ "enum.ModuleVisualState.AimModule" ]
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/SMGs/drozd.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/drozd-inhands.rsi
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/SMG/drozd-inhands.rsi
|
||||
- type: Gun
|
||||
fireRate: 6
|
||||
selectedMode: FullAuto
|
||||
@@ -325,7 +333,7 @@
|
||||
description: An excellent SMG, produced by NanoTrasen's Small Arms Division. Uses .35 auto ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/SMGs/wt550.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/wt550-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
@@ -350,7 +358,9 @@
|
||||
sprite: White/Objects/Weapons/modulesOnWeapon.rsi
|
||||
map: [ "enum.ModuleVisualState.AimModule" ]
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/SMGs/wt550.rsi
|
||||
sprite: White/Objects/Weapons/Guns/SMG/wt550-inhands.rsi
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/SMG/wt550-inhands.rsi
|
||||
- type: ChamberMagazineAmmoProvider
|
||||
boltClosed: null
|
||||
- type: Gun
|
||||
@@ -410,7 +420,7 @@
|
||||
aim_module: !type:ContainerSlot
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 6
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: PointLight
|
||||
enabled: false
|
||||
|
||||
@@ -62,16 +62,17 @@
|
||||
description: It's a magazine-fed shotgun designed for close quarters combat. Uses .50 shotgun shells.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Shotguns/bulldog.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/bulldog-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-0
|
||||
map: ["enum.GunVisualLayers.Mag"]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/bulldog-inhands.rsi
|
||||
size: Large
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Shotguns/bulldog.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/bulldog-inhands.rsi
|
||||
quickEquip: false
|
||||
slots:
|
||||
- Back
|
||||
@@ -104,7 +105,7 @@
|
||||
- type: MagazineAmmoProvider
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 1
|
||||
steps: 4
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: StaticPrice
|
||||
@@ -117,12 +118,14 @@
|
||||
description: An immortal classic. Uses .50 shotgun shells.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Shotguns/db_shotgun.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/db_shotgun-icons.rsi
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/db_shotgun-inhands.rsi
|
||||
- type: Item
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,4,0
|
||||
sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/db_shotgun-inhands.rsi
|
||||
heldPrefix: db
|
||||
- type: Gun
|
||||
fireRate: 2
|
||||
@@ -151,11 +154,11 @@
|
||||
description: A premium combat shotgun based on the Kammerer design, featuring an upgraded clip capacity. .50 shotgun shells.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Shotguns/enforcer.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-icons.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Shotguns/enforcer.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
||||
heldPrefix: enforcer
|
||||
- type: BallisticAmmoProvider
|
||||
|
||||
@@ -177,12 +180,12 @@
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,4,0
|
||||
sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/pump-inhands.rsi
|
||||
heldPrefix: pump
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Shotguns/pump.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/pump-icons.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Shotguns/pump.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/pump-inhands.rsi
|
||||
- type: BallisticAmmoProvider
|
||||
capacity: 4
|
||||
- type: Tag
|
||||
@@ -278,14 +281,14 @@
|
||||
description: A shitty, hand-made shotgun that uses .50 shotgun shells. It can only hold one round in the chamber.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Shotguns/improvised_shotgun.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/improvised_shotgun-icons.rsi
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Shotguns/improvised_shotgun.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/improvised_shotgun-icons.rsi
|
||||
- type: Item
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,4,0
|
||||
sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Shotguns/improvised_shotgun-inhands.rsi
|
||||
heldPrefix: improvised
|
||||
- type: Gun
|
||||
fireRate: 4 #No reason to stifle the firerate since you have to manually reload every time anyways.
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- type: Item
|
||||
size: Huge
|
||||
shape:
|
||||
- 0,0,4,0
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi
|
||||
quickEquip: false
|
||||
@@ -55,7 +57,14 @@
|
||||
description: A weapon for hunting, or endless trench warfare. Uses .30 rifle ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/bolt_gun_wood-icons.rsi
|
||||
- type: Clothing
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/bolt_gun_wood-inhands.rsi
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/bolt_gun_wood-inhands.rsi
|
||||
|
||||
- type: entity
|
||||
name: Hristov
|
||||
@@ -64,9 +73,16 @@
|
||||
description: A portable anti-materiel rifle. Fires armor piercing 14.5mm shells. Uses .60 anti-materiel ammo.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Snipers/hristov.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/hristov-icons.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: [ "enum.GunVisualLayers.Base" ]
|
||||
- state: mag-0
|
||||
map: [ "enum.GunVisualLayers.Mag" ]
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Snipers/hristov.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/hristov-inhands.rsi
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/Guns/Snipers/hristov-inhands.rsi
|
||||
- type: BallisticAmmoProvider
|
||||
soundInsert: /Audio/White/Gun/insert.ogg
|
||||
whitelist:
|
||||
@@ -79,6 +95,11 @@
|
||||
- type: Wieldable
|
||||
forceTwoHanded: True
|
||||
- type: Telescope
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 1
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
name: musket
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
- type: Item
|
||||
size: Small
|
||||
sprite: Objects/Weapons/Guns/Shotguns/flaregun.rsi
|
||||
shape:
|
||||
- 0,0,1,0
|
||||
- 0,1,0,1
|
||||
- type: Gun
|
||||
fireRate: 8
|
||||
selectedMode: SemiAuto
|
||||
@@ -37,3 +40,12 @@
|
||||
slots:
|
||||
- Belt
|
||||
- suitStorage
|
||||
- type: EmitSoundOnPickup
|
||||
sound:
|
||||
collection: PistolsPickUp
|
||||
- type: EmitSoundOnDrop
|
||||
sound:
|
||||
collection: PistolsDrop
|
||||
- type: EmitSoundOnLand
|
||||
sound:
|
||||
collection: PistolsDrop
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
state: icon
|
||||
- type: Item
|
||||
sprite: Objects/Weapons/Melee/kitchen_knife.rsi
|
||||
storedRotation: -45
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- Chef
|
||||
@@ -102,6 +103,7 @@
|
||||
Slash: 10
|
||||
- type: Item
|
||||
sprite: Objects/Weapons/Melee/combat_knife.rsi
|
||||
storedRotation: -45
|
||||
- type: DisarmMalus
|
||||
malus: 0.225
|
||||
- type: Construction
|
||||
@@ -291,3 +293,4 @@
|
||||
Piercing: 15
|
||||
- type: Item
|
||||
sprite: Objects/Weapons/Melee/throwing_knife.rsi
|
||||
storedRotation: -45
|
||||
|
||||
@@ -48,7 +48,10 @@
|
||||
types:
|
||||
Piercing: 15
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
storedRotation: 44 # It just works
|
||||
size: Huge
|
||||
shape:
|
||||
- 0,0,5,0
|
||||
- type: Clothing
|
||||
quickEquip: false
|
||||
slots:
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
- type: Item
|
||||
size: Large
|
||||
sprite: Objects/Weapons/Melee/captain_sabre.rsi
|
||||
storedRotation: 44 # It just works
|
||||
shape:
|
||||
- 0, 0, 4, 0
|
||||
- type: Tag
|
||||
tags:
|
||||
- CaptainSabre
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
- type: Item
|
||||
heldPrefix: off
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,2,0
|
||||
storedRotation: 44
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Melee/stunbaton.rsi
|
||||
quickEquip: false
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
- type: RCDDeconstructable
|
||||
cost: 4
|
||||
delay: 2
|
||||
fx: EffectRCDDeconstruct2
|
||||
fx: EffectRCDDeconstruct2
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
@@ -72,7 +72,7 @@
|
||||
mode: SnapgridCenter
|
||||
snap:
|
||||
- Wallmount
|
||||
|
||||
|
||||
- type: entity
|
||||
name: light
|
||||
description: "A light fixture. Draws power and produces light when equipped with a light tube."
|
||||
@@ -100,9 +100,6 @@
|
||||
receiveFrequencyId: SmartLight
|
||||
- type: WirelessNetworkConnection
|
||||
range: 200
|
||||
- type: DeviceLinkSource
|
||||
ports:
|
||||
- LightStatus
|
||||
- type: DeviceLinkSink
|
||||
ports:
|
||||
- On
|
||||
@@ -294,9 +291,6 @@
|
||||
receiveFrequencyId: SmartLight
|
||||
- type: WirelessNetworkConnection
|
||||
range: 200
|
||||
- type: DeviceLinkSource
|
||||
ports:
|
||||
- LightStatus
|
||||
- type: Appearance
|
||||
- type: PoweredLightVisuals
|
||||
- type: DeviceLinkSink
|
||||
|
||||
@@ -87,9 +87,6 @@
|
||||
receiveFrequencyId: SmartLight
|
||||
- type: WirelessNetworkConnection
|
||||
range: 200
|
||||
- type: DeviceLinkSource
|
||||
ports:
|
||||
- LightStatus
|
||||
- type: DeviceLinkSink
|
||||
ports:
|
||||
- On
|
||||
|
||||
@@ -5,4 +5,5 @@
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: VirtualItem
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
- type: Item
|
||||
heldPrefix: off
|
||||
sprite: White/VoiceRecorder/voicerecorder.rsi
|
||||
storedRotation: 90
|
||||
- type: Appearance
|
||||
- type: VoiceRecorder
|
||||
blacklist:
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
southRotation: true
|
||||
steps:
|
||||
- material: Steel
|
||||
amount: 15
|
||||
doAfter: 2
|
||||
amount: 5
|
||||
doAfter: 5
|
||||
- node: MeatSpike
|
||||
entity: KitchenSpike
|
||||
edges:
|
||||
@@ -21,7 +21,7 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: SheetSteel1
|
||||
amount: 15
|
||||
amount: 5
|
||||
steps:
|
||||
- tool: Screwing
|
||||
doAfter: 1
|
||||
doAfter: 5
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
# Хз куда это
|
||||
#- /Audio/Lobby/itachi.ogg
|
||||
#- /Audio/Lobby/bobby.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: LobbyMusic
|
||||
id: LobbyMusicMeme
|
||||
files:
|
||||
- /Audio/Lobby/govnovoz.ogg
|
||||
- /Audio/Lobby/govnovoz2.ogg
|
||||
- /Audio/Lobby/govnovoz3.ogg
|
||||
- /Audio/Lobby/govnovoz4.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: LobbyMusicSongs
|
||||
files:
|
||||
- /Audio/Lobby/spaceoddity.ogg
|
||||
- /Audio/Lobby/space_asshole.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: LobbyMusicWhite
|
||||
files:
|
||||
- /Audio/Lobby/thunderdome.ogg
|
||||
- /Audio/Lobby/singuloose.ogg
|
||||
- /Audio/Lobby/title2.ogg
|
||||
- /Audio/Lobby/title3.ogg
|
||||
- /Audio/Lobby/lasers_rip_apart_the_bulkhead.ogg
|
||||
- /Audio/Lobby/every_light_is_blinking_at_once.ogg
|
||||
- /Audio/Lobby/atomicamnesiammx.ogg
|
||||
@@ -21,8 +37,15 @@
|
||||
# - /Audio/Lobby/mod.flip-flap.ogg
|
||||
# - /Audio/Lobby/Spac_Stac.ogg
|
||||
# - /Audio/Lobby/pwmur.ogg
|
||||
- /Audio/Lobby/Spac_Stac.ogg
|
||||
- /Audio/Lobby/comet_haley.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: LobbyMusicOld
|
||||
id: LobbyMusicSS13
|
||||
files:
|
||||
- /Audio/Lobby/bobby.ogg
|
||||
- /Audio/Lobby/title2.ogg
|
||||
- /Audio/Lobby/title3.ogg
|
||||
- /Audio/Lobby/absconditus.ogg
|
||||
- /Audio/Lobby/endless_space.ogg
|
||||
- /Audio/Lobby/mod.flip-flap.ogg
|
||||
- /Audio/Lobby/pwmur.ogg
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
femaleFirstNames: names_arachnid_first
|
||||
maleLastNames: names_arachnid_last
|
||||
femaleLastNames: names_arachnid_last
|
||||
sexes:
|
||||
- Unsexed
|
||||
|
||||
- type: markingPoints
|
||||
id: MobArachnidMarkingLimits
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
description: ящик с магазинами для Лектора, заполненными патронами.
|
||||
id: cargoLecterMagazines
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
state: base
|
||||
product: CrateLecterMagazines
|
||||
cost: 2500
|
||||
@@ -61,7 +61,7 @@
|
||||
description: ящик с магазинами для CV-47, заполненными патронами.
|
||||
id: cargoAKmagazines
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi
|
||||
state: base
|
||||
product: CrateAKmagazines
|
||||
cost: 2500
|
||||
@@ -184,7 +184,7 @@
|
||||
description: проверенная временем автоматическая винтовка.
|
||||
id: cargoCV47
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
sprite: White/Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
state: icon
|
||||
product: CrateCV47
|
||||
cost: 10000
|
||||
@@ -234,7 +234,7 @@
|
||||
description: Ящик с тремя обоймами нелетальных магазинов для лектора.
|
||||
id: CargoLecterRubberMagazines
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
state: rubber
|
||||
product: CrateLecterRubberMagazines
|
||||
cost: 500
|
||||
@@ -258,7 +258,7 @@
|
||||
description: Ящик с с тремя нелетальными магазинами для CV-47.
|
||||
id: cargoRifleRubberMagazines
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
sprite: White/Objects/Weapons/Ammunition/Magazine/Rifle/rifle_mag.rsi
|
||||
state: rubber
|
||||
product: CrateRifleRubberMagazines
|
||||
cost: 600
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
id: UplinkRifleAk
|
||||
name: uplink-rifle-ak-name
|
||||
description: uplink-rifle-ak-description
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Guns/Rifles/ak-icons.rsi, state: icon }
|
||||
productEntity: WeaponRifleAk
|
||||
cost:
|
||||
Telecrystal: 16
|
||||
@@ -189,7 +190,7 @@
|
||||
id: UplinkMagazineLightRifleBox
|
||||
name: uplink-magazine-l6-name
|
||||
description: uplink-magazine-l6-desc
|
||||
icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_box.rsi, state: base }
|
||||
icon: { sprite: /Textures/White/Objects/Weapons/Ammunition/Magazine/LightRifle/light_rifle_box.rsi, state: base }
|
||||
productEntity: MagazineLightRifleBox
|
||||
cost:
|
||||
Telecrystal: 3
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
sprite: White/Misc/cards.rsi
|
||||
scale: 0.8, 0.8
|
||||
state: budgetcard
|
||||
- type: Item
|
||||
storedRotation: 90
|
||||
|
||||
- type: entity
|
||||
parent: BaseDepartmentBudgetCard
|
||||
|
||||
@@ -45,3 +45,5 @@
|
||||
name: item-component-size-Ginormous
|
||||
defaultShape:
|
||||
- 0,0,5,5
|
||||
|
||||
|
||||
|
||||
@@ -68,9 +68,9 @@
|
||||
id: NarcoticEffect
|
||||
alwaysAllowed: true
|
||||
|
||||
#WD EDIT
|
||||
# WD EDIT
|
||||
- type: statusEffect
|
||||
id: Incorporeal
|
||||
|
||||
- type: statusEffect
|
||||
id: Hallucinations
|
||||
id: BloodLoss
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 761 B After Width: | Height: | Size: 512 B |
Binary file not shown.
|
After Width: | Height: | Size: 284 B |
Binary file not shown.
|
After Width: | Height: | Size: 320 B |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user