38 Commits

Author SHA1 Message Date
tommy
86eeafebf6 oh my 2025-11-29 20:57:46 -05:00
tommy
33e6f83d6b remove duplicate planet prototype 2025-11-27 19:09:54 -05:00
2a085b7e64 Merge pull request 'Lavaland.' (#2) from lavaland into master
Reviewed-on: #2
2025-11-28 01:02:59 +01:00
tommy
fe19eca8ca aaaa 2025-11-27 18:53:41 -05:00
tommy
d45c22ac6b We're done here. Again. This time it's doner than done. 2025-11-27 18:44:36 -05:00
tommy
5a8b515eb5 add bluespace shelter capsules (#2566) (2) 2025-11-27 16:02:57 -05:00
deltanedas
41d0338fcc add bluespace shelter capsules (#2566)
* move mining_voucher.yml into Salvage folder

* add ShelterCapsuleComponent and system

* add shelter capsules

* add capsules to vendor and voucher

* :trollface:

* add admin logging and delete lava

* mv wire

* changes for namespace refactor

* remove dupe voucher

* add smoke when deploying

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2025-11-27 16:02:52 -05:00
tommy
653bc57aef aeiou 2025-11-27 15:17:20 -05:00
tommy
c79bd1822f ore bag 2025-11-27 15:15:00 -05:00
tommy
c2801fc5db ash storms p2 2025-11-27 15:13:55 -05:00
deltanedas
800fd928b8 ash storms just the facts 2025-11-27 15:12:43 -05:00
tommy
cef7597e8d We're done here. 2025-11-27 14:36:45 -05:00
deltanedas
f42c2ae11b salvage points shop (#2510)
* add conscription bag

* add gar mesons

* remove salvage vendor restock

* add code for shop vendors

* make salvage vendor a shop vendor

* ui fixes

* :trollface:

* update locker and vendor inventory

* add mining hardsuit for 3k

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2025-11-26 23:09:08 -05:00
deltanedas
1c2f200762 add mining points (#2419)
* add mining points

* add claim points button to oreproc

* funny

* its over

* :trollface:

* xml fail

Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com>

---------

Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: deltanedas <@deltanedas:kde.org>
2025-11-26 22:55:56 -05:00
tommy
3e33dc5936 Port DeltaV Lavaland Initial (2) 2025-11-26 22:38:52 -05:00
deltanedas
da7cf45fa6 Port DeltaV Lavaland Initial 2025-11-26 22:38:40 -05:00
tommy
8d66d0bc7c wall and windowening (paradise walls and windows) 2025-11-26 21:17:23 -05:00
hereelabs
bd8bbdcbe7 part 2 of materials fixes that stuff 2025-11-26 19:15:53 -05:00
tommy
86cf6ef2c4 part 1 of materials stacks 2025-11-26 16:51:21 -05:00
=
2eb6888fac stack sprites 2025-11-26 16:32:19 -05:00
=
cef0e84bff basic 2025-11-26 15:50:57 -05:00
=
a6f8c868fd Basic RSI fixes 2025-11-26 15:43:08 -05:00
=
9e53d064f2 yes 2025-11-26 15:35:17 -05:00
=
1a7dca3aac dirty steel floor fix 2025-11-26 15:27:56 -05:00
=
e91df813d2 parallax update 2025-11-26 15:21:59 -05:00
=
d1661c1bf7 unpiss the lights and fix apc offset 2025-11-26 15:19:12 -05:00
=
4ff374660a APC and Toolbox update 2025-11-26 15:06:42 -05:00
9d2d51cdad Merge pull request '/TG/ Sprites 1: Tiles, ID Cards, Carpets, and Closets' (#1) from tile-ening into master
Reviewed-on: #1
2025-11-26 03:49:12 +01:00
hereelabs
f08b58255b TGening for a lotta thing 2025-11-25 21:47:08 -05:00
hereelabs
56a9ba096d walls part 2 2025-11-25 18:02:30 -05:00
hereelabs
f27cba0c4f tilening part 1: regular floor tiles 2025-11-25 16:36:59 -05:00
hereelabs
5c034953ba Revert "PORT: Allows Markings to Set Custom Layers for Specific Sprites (#2516)"
This reverts commit 9f39c112ad.
2025-11-25 13:47:27 -05:00
hivehum
9f39c112ad PORT: Allows Markings to Set Custom Layers for Specific Sprites (#2516)
* multilayer markings

* vestigial reptilian tail sprites added

* i fix :)

---------

Co-authored-by: mq <113324899+mqole@users.noreply.github.com>
2025-11-25 13:39:03 -05:00
mousesweater
b2ffe70f8f Moth Shrink-wrapping No More (#3396)
* oh my god

* minor typo

* alright man what's up

* cleaning

* sweep sweep sweep

* upstream attack

* moffra fix, functional

* fuck you said the fuck you guy

* fuck you said the fuck you moth

* for till cock

* bingo!

* i can see exactly how i typo'd each of these and i can tell you

---------

Co-authored-by: mousesweater <moondogg228@gmail.com>
2025-11-25 13:15:15 -05:00
hereelabs
a1d96346e6 whoops. It all kinda sucked so i'm doing it the manual way 2025-11-25 13:14:41 -05:00
Dark
4f2f9eced9 Merge pull request #1204 from hivehum/markings
markings bugfixes
2025-11-25 12:39:54 -05:00
hereelabs
2f977a0670 misc 2025-11-25 12:25:55 -05:00
V
e0adc2fce8 Merge pull request #1181 from hivehum/markings
The Markings Update
2025-11-25 12:24:20 -05:00
2267 changed files with 83270 additions and 42920 deletions

View File

@@ -0,0 +1,5 @@
using Content.Shared.DeltaV.Shuttles.Systems;
namespace Content.Client.DeltaV.Shuttles.Systems;
public sealed class DockingConsoleSystem : SharedDockingConsoleSystem;

View File

@@ -0,0 +1,38 @@
using Content.Shared.DeltaV.Shuttles;
namespace Content.Client.DeltaV.Shuttles.UI;
public sealed class DockingConsoleBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private DockingConsoleWindow? _window;
public DockingConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
_window = new DockingConsoleWindow(Owner);
_window.OnFTL += index => SendMessage(new DockingConsoleFTLMessage(index));
_window.OnClose += Close;
_window.OpenCentered();
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);
if (state is DockingConsoleState cast)
_window?.UpdateState(cast);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
_window?.Orphan();
}
}

View File

@@ -0,0 +1,17 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="500 500">
<BoxContainer Orientation="Vertical">
<ScrollContainer SetHeight="256" HorizontalExpand="True">
<ItemList Name="Destinations"/> <!-- Populated from comp.Destinations -->
</ScrollContainer>
<controls:StripeBack MinSize="48 48">
<Label Text="{Loc 'shuttle-console-ftl-label'}" VerticalExpand="True" HorizontalAlignment="Center"/>
</controls:StripeBack>
<Label Name="MapFTLState" Text="{Loc 'shuttle-console-ftl-state-Available'}" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
<ProgressBar Name="FTLBar" HorizontalExpand="True" Margin="5" MinValue="0.0" MaxValue="1.0" Value="1.0" SetHeight="32"/>
<controls:StripeBack HorizontalExpand="True">
<Button Name="FTLButton" Text="{Loc 'docking-console-ftl'}" Disabled="True" SetSize="128 48" Margin="5"/>
</controls:StripeBack>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -0,0 +1,112 @@
using Content.Client.UserInterface.Controls;
using Content.Shared.Access.Systems;
using Content.Shared.DeltaV.Shuttles;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Timing;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
namespace Content.Client.DeltaV.Shuttles.UI;
[GenerateTypedNameReferences]
public sealed partial class DockingConsoleWindow : FancyWindow
{
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPlayerManager _player = default!;
private readonly AccessReaderSystem _access;
public event Action<int>? OnFTL;
private readonly EntityUid _owner;
private readonly StyleBoxFlat _ftlStyle;
private FTLState _state;
private int? _selected;
private StartEndTime _ftlTime;
public DockingConsoleWindow(EntityUid owner)
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_access = _entMan.System<AccessReaderSystem>();
_owner = owner;
_ftlStyle = new StyleBoxFlat(Color.LimeGreen);
FTLBar.ForegroundStyleBoxOverride = _ftlStyle;
if (!_entMan.TryGetComponent<DockingConsoleComponent>(owner, out var comp))
return;
Title = Loc.GetString(comp.WindowTitle);
if (!comp.HasShuttle)
{
MapFTLState.Text = Loc.GetString("docking-console-no-shuttle");
_ftlStyle.BackgroundColor = Color.FromHex("#B02E26");
return;
}
Destinations.OnItemSelected += args => _selected = args.ItemIndex;
Destinations.OnItemDeselected += _ => _selected = null;
FTLButton.OnPressed += _ =>
{
if (_selected is {} index)
OnFTL?.Invoke(index);
};
}
public void UpdateState(DockingConsoleState state)
{
_state = state.FTLState;
_ftlTime = state.FTLTime;
MapFTLState.Text = Loc.GetString($"shuttle-console-ftl-state-{_state.ToString()}");
_ftlStyle.BackgroundColor = Color.FromHex(_state switch
{
FTLState.Available => "#80C71F",
FTLState.Starting => "#169C9C",
FTLState.Travelling => "#8932B8",
FTLState.Arriving => "#F9801D",
_ => "#B02E26" // cooldown and fallback
});
UpdateButton();
if (Destinations.Count == state.Destinations.Count)
return;
Destinations.Clear();
foreach (var dest in state.Destinations)
{
Destinations.AddItem(dest.Name);
}
}
private void UpdateButton()
{
FTLButton.Disabled = _selected == null || _state != FTLState.Available || !HasAccess();
}
private bool HasAccess()
{
return _player.LocalSession?.AttachedEntity is {} player && _access.IsAllowed(player, _owner);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
UpdateButton();
var progress = _ftlTime.ProgressAt(_timing.CurTime);
FTLBar.Value = float.IsFinite(progress) ? progress : 1;
}
}

View File

@@ -0,0 +1,123 @@
using Content.Shared.DeltaV.VendingMachines;
using Content.Shared.VendingMachines;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
namespace Content.Client.DeltaV.VendingMachines;
public sealed class ShopVendorSystem : SharedShopVendorSystem
{
[Dependency] private readonly AnimationPlayerSystem _animationPlayer = default!;
[Dependency] private readonly AppearanceSystem _appearance = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShopVendorComponent, AppearanceChangeEvent>(OnAppearanceChange);
SubscribeLocalEvent<ShopVendorComponent, AnimationCompletedEvent>(OnAnimationCompleted);
}
// copied from vending machines because its not reusable in other systems :)
private void OnAnimationCompleted(Entity<ShopVendorComponent> ent, ref AnimationCompletedEvent args)
{
UpdateAppearance((ent, ent.Comp));
}
private void OnAppearanceChange(Entity<ShopVendorComponent> ent, ref AppearanceChangeEvent args)
{
UpdateAppearance((ent, ent.Comp, args.Sprite));
}
private void UpdateAppearance(Entity<ShopVendorComponent, SpriteComponent?> ent)
{
if (!Resolve(ent, ref ent.Comp2))
return;
if (!_appearance.TryGetData<VendingMachineVisualState>(ent, VendingMachineVisuals.VisualState, out var state))
state = VendingMachineVisualState.Normal;
var sprite = ent.Comp2;
SetLayerState(VendingMachineVisualLayers.Base, ent.Comp1.OffState, sprite);
SetLayerState(VendingMachineVisualLayers.Screen, ent.Comp1.ScreenState, sprite);
switch (state)
{
case VendingMachineVisualState.Normal:
SetLayerState(VendingMachineVisualLayers.BaseUnshaded, ent.Comp1.NormalState, sprite);
break;
case VendingMachineVisualState.Deny:
if (ent.Comp1.LoopDenyAnimation)
SetLayerState(VendingMachineVisualLayers.BaseUnshaded, ent.Comp1.DenyState, sprite);
else
PlayAnimation(ent, VendingMachineVisualLayers.BaseUnshaded, ent.Comp1.DenyState, ent.Comp1.DenyDelay, sprite);
break;
case VendingMachineVisualState.Eject:
PlayAnimation(ent, VendingMachineVisualLayers.BaseUnshaded, ent.Comp1.EjectState, ent.Comp1.EjectDelay, sprite);
break;
case VendingMachineVisualState.Broken:
HideLayers(sprite);
SetLayerState(VendingMachineVisualLayers.Base, ent.Comp1.BrokenState, sprite);
break;
case VendingMachineVisualState.Off:
HideLayers(sprite);
break;
}
}
private static void SetLayerState(VendingMachineVisualLayers layer, string? state, SpriteComponent sprite)
{
if (state == null)
return;
sprite.LayerSetVisible(layer, true);
sprite.LayerSetAutoAnimated(layer, true);
sprite.LayerSetState(layer, state);
}
private void PlayAnimation(EntityUid uid, VendingMachineVisualLayers layer, string? state, TimeSpan time, SpriteComponent sprite)
{
if (state == null || _animationPlayer.HasRunningAnimation(uid, state))
return;
var animation = GetAnimation(layer, state, time);
sprite.LayerSetVisible(layer, true);
_animationPlayer.Play(uid, animation, state);
}
private static Animation GetAnimation(VendingMachineVisualLayers layer, string state, TimeSpan time)
{
return new Animation
{
Length = time,
AnimationTracks =
{
new AnimationTrackSpriteFlick
{
LayerKey = layer,
KeyFrames =
{
new AnimationTrackSpriteFlick.KeyFrame(state, 0f)
}
}
}
};
}
private static void HideLayers(SpriteComponent sprite)
{
HideLayer(VendingMachineVisualLayers.BaseUnshaded, sprite);
HideLayer(VendingMachineVisualLayers.Screen, sprite);
}
private static void HideLayer(VendingMachineVisualLayers layer, SpriteComponent sprite)
{
if (!sprite.LayerMapTryGet(layer, out var actualLayer))
return;
sprite.LayerSetVisible(actualLayer, false);
}
}

View File

@@ -0,0 +1,25 @@
using Content.Shared.DeltaV.VendingMachines;
using Robust.Client.UserInterface;
namespace Content.Client.DeltaV.VendingMachines.UI;
public sealed class ShopVendorBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private ShopVendorWindow? _window;
public ShopVendorBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
_window = this.CreateWindow<ShopVendorWindow>();
_window.SetEntity(Owner);
_window.OpenCenteredLeft();
_window.Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName;
_window.OnItemSelected += index => SendMessage(new ShopVendorPurchaseMessage(index));
}
}

View File

@@ -0,0 +1,13 @@
<BoxContainer xmlns="https://spacestation14.io"
Orientation="Horizontal"
HorizontalExpand="True"
SeparationOverride="4">
<EntityPrototypeView
Name="ItemPrototype"
Margin="4 0 0 0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
MinSize="32 32"/>
<Label Name="NameLabel" SizeFlagsStretchRatio="3" HorizontalExpand="True" ClipText="True"/>
<Label Name="CostLabel" SizeFlagsStretchRatio="3" HorizontalAlignment="Right" Margin="8 0"/>
</BoxContainer>

View File

@@ -0,0 +1,21 @@
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client.DeltaV.VendingMachines.UI;
[GenerateTypedNameReferences]
public sealed partial class ShopVendorItem : BoxContainer
{
public ShopVendorItem(EntProtoId entProto, string text, uint cost)
{
RobustXamlLoader.Load(this);
ItemPrototype.SetPrototype(entProto);
NameLabel.Text = text;
CostLabel.Text = cost.ToString();
}
}

View File

@@ -0,0 +1,24 @@
<controls:FancyWindow
xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
MinHeight="210">
<BoxContainer Name="MainContainer" Orientation="Vertical">
<BoxContainer Orientation="Horizontal">
<LineEdit Name="SearchBar" PlaceHolder="{Loc 'vending-machine-component-search-filter'}" HorizontalExpand="True" Margin="4 4"/>
<Label Name="BalanceLabel" Margin="4 4"/>
</BoxContainer>
<controls:SearchListContainer Name="VendingContents" VerticalExpand="True" Margin="4 4"/>
<!-- Footer -->
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
<Label Text="{Loc 'shop-vendor-flavor-left'}" StyleClasses="WindowFooterText" />
<Label Text="{Loc 'shop-vendor-flavor-right'}" StyleClasses="WindowFooterText"
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
<TextureRect StyleClasses="NTLogoDark" Stretch="KeepAspectCentered"
VerticalAlignment="Center" HorizontalAlignment="Right" SetSize="19 19"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -0,0 +1,147 @@
using Content.Client.UserInterface.Controls;
using Content.Shared.DeltaV.VendingMachines;
using Content.Shared.Stacks;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using System.Numerics;
namespace Content.Client.DeltaV.VendingMachines.UI;
[GenerateTypedNameReferences]
public sealed partial class ShopVendorWindow : FancyWindow
{
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
private readonly ShopVendorSystem _vendor;
/// <summary>
/// Event fired with the listing index to purchase.
/// </summary>
public event Action<int>? OnItemSelected;
private EntityUid _owner;
private readonly StyleBoxFlat _style = new() { BackgroundColor = new Color(70, 73, 102) };
private readonly StyleBoxFlat _styleBroke = new() { BackgroundColor = Color.FromHex("#303133") };
private readonly List<ListContainerButton> _buttons = new();
private uint _balance = 1;
public ShopVendorWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_vendor = _entMan.System<ShopVendorSystem>();
VendingContents.SearchBar = SearchBar;
VendingContents.DataFilterCondition += DataFilterCondition;
VendingContents.GenerateItem += GenerateButton;
VendingContents.ItemKeyBindDown += (args, data) => OnItemSelected?.Invoke(((ShopVendorListingData) data).Index);
}
public void SetEntity(EntityUid owner)
{
_owner = owner;
if (!_entMan.TryGetComponent<ShopVendorComponent>(owner, out var comp))
return;
var pack = _proto.Index(comp.Pack);
Populate(pack.Listings);
UpdateBalance();
}
private void UpdateBalance(uint balance)
{
if (_balance == balance)
return;
_balance = balance;
BalanceLabel.Text = Loc.GetString("shop-vendor-balance", ("points", balance));
// disable items that are too expensive to buy
foreach (var button in _buttons)
{
if (button.Data is ShopVendorListingData data)
button.Disabled = data.Cost > balance;
button.StyleBoxOverride = button.Disabled ? _styleBroke : _style;
}
}
private void UpdateBalance()
{
if (_player.LocalEntity is {} user)
UpdateBalance(_vendor.GetBalance(_owner, user));
}
private bool DataFilterCondition(string filter, ListData data)
{
if (data is not ShopVendorListingData { Text: var text })
return false;
if (string.IsNullOrEmpty(filter))
return true;
return text.Contains(filter, StringComparison.CurrentCultureIgnoreCase);
}
private void GenerateButton(ListData data, ListContainerButton button)
{
if (data is not ShopVendorListingData cast)
return;
_buttons.Add(button);
button.AddChild(new ShopVendorItem(cast.ItemId, cast.Text, cast.Cost));
button.ToolTip = cast.Text;
button.Disabled = cast.Cost > _balance;
button.StyleBoxOverride = button.Disabled ? _styleBroke : _style;
}
public void Populate(List<ShopListing> listings)
{
var longestEntry = string.Empty;
var listData = new List<ShopVendorListingData>();
for (var i = 0; i < listings.Count; i++)
{
var listing = listings[i];
var proto = _proto.Index(listing.Id);
var text = proto.Name;
if (proto.TryGetComponent<StackComponent>(out var stack, _factory) && stack.Count > 1)
{
text += " ";
text += Loc.GetString("shop-vendor-stack-suffix", ("count", stack.Count));
}
listData.Add(new ShopVendorListingData(i, listing.Id, text, listing.Cost));
}
_buttons.Clear();
VendingContents.PopulateList(listData);
SetSizeAfterUpdate(longestEntry.Length, listings.Count);
}
private void SetSizeAfterUpdate(int longestEntryLength, int contentCount)
{
SetSize = new Vector2(Math.Clamp((longestEntryLength + 2) * 12, 250, 400),
Math.Clamp(contentCount * 50, 150, 350));
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
UpdateBalance();
}
}
public record ShopVendorListingData(int Index, EntProtoId ItemId, string Text, uint Cost) : ListData;

View File

@@ -1,3 +1,4 @@
using Content.Shared.DeltaV.Salvage; // DeltaV
using Content.Shared.Lathe;
using Content.Shared.Research.Components;
using JetBrains.Annotations;
@@ -34,6 +35,8 @@ namespace Content.Client.Lathe.UI
_menu.QueueMoveUpAction += index => SendMessage(new LatheMoveRequestMessage(index, -1));
_menu.QueueMoveDownAction += index => SendMessage(new LatheMoveRequestMessage(index, 1));
_menu.DeleteFabricatingAction += () => SendMessage(new LatheAbortFabricationMessage());
_menu.OnClaimMiningPoints += () => SendMessage(new LatheClaimMiningPointsMessage()); // DeltaV
}
protected override void UpdateState(BoundUserInterfaceState state)

View File

@@ -151,6 +151,12 @@
<ui:MaterialStorageControl Name="MaterialsList" SizeFlagsStretchRatio="8"/>
</BoxContainer>
</PanelContainer>
<!-- Begin DeltaV Additions: Mining points -->
<BoxContainer Orientation="Horizontal" Name="MiningPointsContainer" Visible="False">
<Label Name="MiningPointsLabel" HorizontalExpand="True"/>
<Button Name="MiningPointsClaimButton" Text="{Loc 'lathe-menu-mining-points-claim-button'}"/>
</BoxContainer>
<!-- End DeltaV Additions: Mining points -->
</BoxContainer>
</BoxContainer>

View File

@@ -1,17 +1,21 @@
using System.Linq;
using System.Text;
using Content.Client.Materials;
using Content.Shared.DeltaV.Salvage.Components; // DeltaV
using Content.Shared.DeltaV.Salvage.Systems; // DeltaV
using Content.Shared.Lathe;
using Content.Shared.Lathe.Prototypes;
using Content.Shared.Research.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Player; // DeltaV
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Robust.Shared.Timing; // DeltaV
namespace Content.Client.Lathe.UI;
@@ -19,11 +23,13 @@ namespace Content.Client.Lathe.UI;
public sealed partial class LatheMenu : DefaultWindow
{
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPlayerManager _player = default!; // DeltaV
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
private readonly SpriteSystem _spriteSystem;
private readonly LatheSystem _lathe;
private readonly MaterialStorageSystem _materialStorage;
private readonly MiningPointsSystem _miningPoints; // DeltaV
public event Action<BaseButton.ButtonEventArgs>? OnServerListButtonPressed;
public event Action<string, int>? RecipeQueueAction;
@@ -31,15 +37,16 @@ public sealed partial class LatheMenu : DefaultWindow
public event Action<int>? QueueMoveUpAction;
public event Action<int>? QueueMoveDownAction;
public event Action? DeleteFabricatingAction;
public event Action? OnClaimMiningPoints; // DeltaV
public List<ProtoId<LatheRecipePrototype>> Recipes = new();
public List<ProtoId<LatheCategoryPrototype>>? Categories;
public ProtoId<LatheCategoryPrototype>? CurrentCategory;
public EntityUid Entity;
private uint? _lastMiningPoints; // DeltaV: used to avoid Loc.GetString every frame
public LatheMenu()
{
RobustXamlLoader.Load(this);
@@ -48,6 +55,7 @@ public sealed partial class LatheMenu : DefaultWindow
_spriteSystem = _entityManager.System<SpriteSystem>();
_lathe = _entityManager.System<LatheSystem>();
_materialStorage = _entityManager.System<MaterialStorageSystem>();
_miningPoints = _entityManager.System<MiningPointsSystem>(); // DeltaV
SearchBar.OnTextChanged += _ =>
{
@@ -86,9 +94,52 @@ public sealed partial class LatheMenu : DefaultWindow
AmountLineEdit.SetText(latheComponent.DefaultProductionAmount.ToString());
}
// Begin DeltaV Additions: Mining points UI
MiningPointsContainer.Visible = _entityManager.TryGetComponent<MiningPointsComponent>(Entity, out var points);
MiningPointsClaimButton.OnPressed += _ => OnClaimMiningPoints?.Invoke();
if (points != null)
UpdateMiningPoints(points.Points);
// End DeltaV Additions
MaterialsList.SetOwner(Entity);
}
/// <summary>
/// DeltaV: Updates the UI elements for mining points.
/// </summary>
private void UpdateMiningPoints(uint points)
{
MiningPointsClaimButton.Disabled = points == 0 ||
_player.LocalSession?.AttachedEntity is not {} player ||
_miningPoints.TryFindIdCard(player) == null;
if (points == _lastMiningPoints)
return;
_lastMiningPoints = points;
MiningPointsLabel.Text = Loc.GetString("lathe-menu-mining-points", ("points", points));
}
protected override void Opened()
{
base.Opened();
if (_entityManager.TryGetComponent<LatheComponent>(Entity, out var latheComp))
{
AmountLineEdit.SetText(latheComp.DefaultProductionAmount.ToString());
}
}
/// <summary>
/// DeltaV: Update mining points UI whenever it changes.
/// </summary>
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
if (_entityManager.TryGetComponent<MiningPointsComponent>(Entity, out var points))
UpdateMiningPoints(points.Points);
}
/// <summary>
/// Populates the list of all the recipes
/// </summary>

View File

@@ -0,0 +1,5 @@
using Content.Shared._DV.Salvage.Systems;
namespace Content.Client._DV.Salvage.Systems;
public sealed class ShelterCapsuleSystem : SharedShelterCapsuleSystem;

View File

@@ -0,0 +1,74 @@
using Content.Server.Atmos.EntitySystems;
using Content.Server.Parallax;
using Content.Shared.DeltaV.Planet;
using Content.Shared.Parallax.Biomes;
using Robust.Shared.EntitySerialization.Systems;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Server.DeltaV.Planet;
public sealed class PlanetSystem : EntitySystem
{
[Dependency] private readonly AtmosphereSystem _atmos = default!;
[Dependency] private readonly BiomeSystem _biome = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
[Dependency] private readonly MetaDataSystem _meta = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
private readonly List<(Vector2i, Tile)> _setTiles = new();
/// <summary>
/// Spawn a planet map from a planet prototype.
/// </summary>
public EntityUid SpawnPlanet(ProtoId<PlanetPrototype> id, bool runMapInit = true)
{
var planet = _proto.Index(id);
var map = _map.CreateMap(out _, runMapInit: runMapInit);
_biome.EnsurePlanet(map, _proto.Index(planet.Biome), mapLight: planet.MapLight);
// add each marker layer
var biome = Comp<BiomeComponent>(map);
foreach (var layer in planet.BiomeMarkerLayers)
{
_biome.AddMarkerLayer(map, biome, layer);
}
if (planet.AddedComponents is {} added)
EntityManager.AddComponents(map, added);
_atmos.SetMapAtmosphere(map, false, planet.Atmosphere);
_meta.SetEntityName(map, Loc.GetString(planet.MapName));
return map;
}
/// <summary>
/// Spawns an initialized planet map from a planet prototype and loads a grid onto it.
/// Returns the map entity if loading succeeded.
/// </summary>
public EntityUid? LoadPlanet(ProtoId<PlanetPrototype> id, ResPath path)
{
var map = SpawnPlanet(id, runMapInit: false);
var mapId = Comp<MapComponent>(map).MapId;
if (!_mapLoader.TryLoadGrid(mapId, path, out var grid))
{
Log.Error($"Failed to load planet grid {path} for planet {id}!");
Del(map);
return null;
}
// don't want rocks spawning inside the base
_setTiles.Clear();
var aabb = Comp<MapGridComponent>(grid.Value).LocalAABB;
_biome.ReserveTiles(map, aabb.Enlarged(0.2f), _setTiles);
_map.InitializeMap(map);
return map;
}
}

View File

@@ -0,0 +1,177 @@
using Content.Server.Shuttles.Components;
using Content.Server.Shuttles.Events;
using Content.Server.Shuttles.Systems;
using Content.Server.Station.Systems;
using Content.Shared.DeltaV.Shuttles;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Station.Components;
using Content.Shared.Timing;
using Content.Shared.Whitelist;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
namespace Content.Server.DeltaV.Shuttles.Systems;
public sealed class DockingConsoleSystem : SharedDockingConsoleSystem
{
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
[Dependency] private readonly ShuttleSystem _shuttle = default!;
[Dependency] private readonly StationSystem _station = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DockEvent>(OnDock);
SubscribeLocalEvent<UndockEvent>(OnUndock);
Subs.BuiEvents<DockingConsoleComponent>(DockingConsoleUiKey.Key, subs =>
{
subs.Event<BoundUIOpenedEvent>(OnOpened);
subs.Event<DockingConsoleFTLMessage>(OnFTL);
});
}
private void OnDock(DockEvent args)
{
UpdateConsoles(args.GridAUid, args.GridBUid);
}
private void OnUndock(UndockEvent args)
{
UpdateConsoles(args.GridAUid, args.GridBUid);
}
private void OnOpened(Entity<DockingConsoleComponent> ent, ref BoundUIOpenedEvent args)
{
if (TerminatingOrDeleted(ent.Comp.Shuttle))
UpdateShuttle(ent);
UpdateUI(ent);
}
private void UpdateConsoles(EntityUid gridA, EntityUid gridB)
{
UpdateConsolesUsing(gridA);
UpdateConsolesUsing(gridB);
}
/// <summary>
/// Update the UI of every console that is using a certain shuttle.
/// </summary>
public void UpdateConsolesUsing(EntityUid shuttle)
{
if (!HasComp<DockingShuttleComponent>(shuttle))
return;
var query = EntityQueryEnumerator<DockingConsoleComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (comp.Shuttle == shuttle)
UpdateUI((uid, comp));
}
}
private void UpdateUI(Entity<DockingConsoleComponent> ent)
{
if (ent.Comp.Shuttle is not {} shuttle)
return;
var ftlState = FTLState.Available;
StartEndTime ftlTime = default;
List<DockingDestination> destinations = new();
if (TryComp<FTLComponent>(shuttle, out var ftl))
{
ftlState = ftl.State;
ftlTime = _shuttle.GetStateTime(ftl);
}
if (TryComp<DockingShuttleComponent>(shuttle, out var docking))
{
destinations = docking.Destinations;
}
var state = new DockingConsoleState(ftlState, ftlTime, destinations);
_ui.SetUiState(ent.Owner, DockingConsoleUiKey.Key, state);
}
private void OnFTL(Entity<DockingConsoleComponent> ent, ref DockingConsoleFTLMessage args)
{
if (ent.Comp.Shuttle is not {} shuttle || !TryComp<DockingShuttleComponent>(shuttle, out var docking))
return;
if (args.Index < 0 || args.Index > docking.Destinations.Count)
return;
var dest = docking.Destinations[args.Index];
var map = dest.Map;
// can't FTL if its already there or somehow failed whitelist
if (map == Transform(shuttle).MapID || !_shuttle.CanFTLTo(shuttle, map, ent))
return;
if (FindLargestGrid(map) is not {} grid)
return;
Log.Debug($"{ToPrettyString(args.Actor):user} is FTL-docking {ToPrettyString(shuttle):shuttle} to {ToPrettyString(grid):grid}");
_shuttle.FTLToDock(shuttle, Comp<ShuttleComponent>(shuttle), grid, priorityTag: ent.Comp.DockTag);
UpdateUI(ent);
}
private EntityUid? FindLargestGrid(MapId map)
{
EntityUid? largestGrid = null;
var largestSize = 0f;
if (_station.GetStationInMap(map) is {} station)
{
// prevent picking vgroid and stuff
return _station.GetLargestGrid(station); // May need to get the StationDataComponent if this doesn't work
}
var query = EntityQueryEnumerator<MapGridComponent, TransformComponent>();
while (query.MoveNext(out var gridUid, out var grid, out var xform))
{
if (xform.MapID != map)
continue;
var size = grid.LocalAABB.Size.LengthSquared();
if (size < largestSize)
continue;
largestSize = size;
largestGrid = gridUid;
}
return largestGrid;
}
private void UpdateShuttle(Entity<DockingConsoleComponent> ent)
{
var hadShuttle = ent.Comp.HasShuttle;
// no error if it cant find one since it would fail every test as shuttle.grid_fill is false in dev
ent.Comp.Shuttle = FindShuttle(ent.Comp.ShuttleWhitelist);
ent.Comp.HasShuttle = ent.Comp.Shuttle != null;
if (ent.Comp.HasShuttle != hadShuttle)
Dirty(ent);
}
private EntityUid? FindShuttle(EntityWhitelist whitelist)
{
var query = EntityQueryEnumerator<DockingShuttleComponent>();
while (query.MoveNext(out var uid, out _))
{
if (_whitelist.IsValid(whitelist, uid))
return uid;
}
return null;
}
}

View File

@@ -0,0 +1,79 @@
using Content.Server.Shuttles.Events;
using Content.Server.Station.Systems;
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Station.Components;
using Content.Shared.Whitelist;
using Robust.Shared.Map.Components;
using System.Linq;
namespace Content.Server.DeltaV.Shuttles.Systems;
public sealed class DockingShuttleSystem : SharedDockingShuttleSystem
{
[Dependency] private readonly DockingConsoleSystem _console = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
[Dependency] private readonly StationSystem _station = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DockingShuttleComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<DockingShuttleComponent, FTLStartedEvent>(OnFTLStarted);
SubscribeLocalEvent<DockingShuttleComponent, FTLCompletedEvent>(OnFTLCompleted);
SubscribeLocalEvent<StationGridAddedEvent>(OnStationGridAdded);
}
private void OnMapInit(Entity<DockingShuttleComponent> ent, ref MapInitEvent args)
{
// add any whitelisted destinations that it can FTL to
// since it needs a whitelist, this excludes the station
var query = EntityQueryEnumerator<FTLDestinationComponent, MapComponent>();
while (query.MoveNext(out var mapUid, out var dest, out var map))
{
if (!dest.Enabled || _whitelist.IsWhitelistFailOrNull(dest.Whitelist, ent))
continue;
ent.Comp.Destinations.Add(new DockingDestination()
{
Name = Name(mapUid),
Map = map.MapId
});
}
}
private void OnFTLStarted(Entity<DockingShuttleComponent> ent, ref FTLStartedEvent args)
{
_console.UpdateConsolesUsing(ent);
}
private void OnFTLCompleted(Entity<DockingShuttleComponent> ent, ref FTLCompletedEvent args)
{
_console.UpdateConsolesUsing(ent);
}
private void OnStationGridAdded(StationGridAddedEvent args)
{
var uid = args.GridId;
if (!TryComp<DockingShuttleComponent>(uid, out var comp))
return;
// only add the destination once
if (comp.Station != null)
return;
if (_station.GetOwningStation(uid) is not {} station || !TryComp<StationDataComponent>(station, out var data))
return;
// add the source station as a destination
comp.Station = station;
comp.Destinations.Add(new DockingDestination()
{
Name = Name(station),
Map = Transform(data.Grids.First()).MapID
});
}
}

View File

@@ -0,0 +1,32 @@
using Content.Server.DeltaV.Station.Systems;
using Content.Shared.DeltaV.Planet;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Server.DeltaV.Station.Components;
/// <summary>
/// Loads a planet map on mapinit and spawns a grid on it (e.g. a mining base).
/// The map can then be FTLd to by any shuttle matching its whitelist.
/// </summary>
[RegisterComponent, Access(typeof(StationPlanetSpawnerSystem))]
public sealed partial class StationPlanetSpawnerComponent : Component
{
/// <summary>
/// The planet to create.
/// </summary>
[DataField(required: true)]
public ProtoId<PlanetPrototype> Planet;
/// <summary>
/// Path to the grid to load onto the map.
/// </summary>
[DataField(required: true)]
public ResPath? GridPath;
/// <summary>
/// The map that was loaded.
/// </summary>
[DataField]
public EntityUid? Map;
}

View File

@@ -0,0 +1,30 @@
using Content.Server.DeltaV.Planet;
using Content.Server.DeltaV.Station.Components;
namespace Content.Server.DeltaV.Station.Systems;
public sealed class StationPlanetSpawnerSystem : EntitySystem
{
[Dependency] private readonly PlanetSystem _planet = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<StationPlanetSpawnerComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<StationPlanetSpawnerComponent, ComponentShutdown>(OnShutdown);
}
private void OnMapInit(Entity<StationPlanetSpawnerComponent> ent, ref MapInitEvent args)
{
if (ent.Comp.GridPath is not {} path)
return;
ent.Comp.Map = _planet.LoadPlanet(ent.Comp.Planet, path);
}
private void OnShutdown(Entity<StationPlanetSpawnerComponent> ent, ref ComponentShutdown args)
{
QueueDel(ent.Comp.Map);
}
}

View File

@@ -0,0 +1,47 @@
using Content.Server.Advertise.EntitySystems;
using Content.Shared.Advertise.Components;
using Content.Shared.DeltaV.VendingMachines;
namespace Content.Server.DeltaV.VendingMachines;
public sealed class ShopVendorSystem : SharedShopVendorSystem
{
[Dependency] private readonly SpeakOnUIClosedSystem _speakOnUIClosed = default!;
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<ShopVendorComponent, TransformComponent>();
var now = Timing.CurTime;
while (query.MoveNext(out var uid, out var comp, out var xform))
{
var ent = (uid, comp);
var dirty = false;
if (comp.Ejecting is {} ejecting && now > comp.NextEject)
{
Spawn(ejecting, xform.Coordinates);
comp.Ejecting = null;
dirty = true;
}
if (comp.Denying && now > comp.NextDeny)
{
comp.Denying = false;
dirty = true;
}
if (dirty)
{
Dirty(uid, comp);
UpdateVisuals(ent);
}
}
}
protected override void AfterPurchase(Entity<ShopVendorComponent> ent)
{
if (TryComp<SpeakOnUIClosedComponent>(ent, out var speak))
_speakOnUIClosed.TrySetFlag((ent.Owner, speak));
}
}

View File

@@ -0,0 +1,83 @@
using Content.Shared.Damage;
using Content.Shared.Damage.Systems;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Weather;
using Content.Shared.Whitelist;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
namespace Content.Shared.DeltaV.Weather;
/// <summary>
/// Handles weather damage for exposed entities.
/// </summary>
public sealed partial class WeatherEffectsSystem : EntitySystem
{
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly SharedWeatherSystem _weather = default!;
private EntityQuery<MapGridComponent> _gridQuery;
public override void Initialize()
{
base.Initialize();
_gridQuery = GetEntityQuery<MapGridComponent>();
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var now = _timing.CurTime;
var query = EntityQueryEnumerator<WeatherComponent>();
while (query.MoveNext(out var map, out var weather))
{
if (now < weather.NextUpdate)
continue;
weather.NextUpdate = now + weather.UpdateDelay;
foreach (var (id, data) in weather.Weather)
{
// start and end do no damage
if (data.State != WeatherState.Running)
continue;
UpdateDamage(map, id);
}
}
}
private void UpdateDamage(EntityUid map, ProtoId<WeatherPrototype> id)
{
var weather = _proto.Index(id);
if (weather.Damage is not {} damage)
return;
var query = EntityQueryEnumerator<MobStateComponent, TransformComponent>();
while (query.MoveNext(out var uid, out var mob, out var xform))
{
// Dead bodies aren't revivable anyways!
if (xform.MapUid != map)
continue;
// if not in space, check for being indoors
if (xform.GridUid is {} gridUid && _gridQuery.TryComp(gridUid, out var grid))
{
var tile = _map.GetTileRef((gridUid, grid), xform.Coordinates);
if (!_weather.CanWeatherAffect(gridUid, grid, tile))
continue;
}
if (_whitelist.IsBlacklistFailOrNull(weather.DamageBlacklist, uid))
_damageable.TryChangeDamage(uid, damage, interruptsDoAfters: false);
}
}
}

View File

@@ -0,0 +1,58 @@
using Content.Shared.Destructible.Thresholds;
using Content.Shared.Weather;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.DeltaV.Weather;
/// <summary>
/// Makes weather randomly happen every so often.
/// </summary>
[RegisterComponent, Access(typeof(WeatherSchedulerSystem))]
[AutoGenerateComponentPause]
public sealed partial class WeatherSchedulerComponent : Component
{
/// <summary>
/// Weather stages to schedule.
/// </summary>
[DataField(required: true)]
public List<WeatherStage> Stages = new();
/// <summary>
/// The index of <see cref="Stages"/> to use next, wraps back to the start.
/// </summary>
[DataField]
public int Stage;
/// <summary>
/// When to go to the next step of the schedule.
/// </summary>
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan NextUpdate;
}
/// <summary>
/// A stage in a weather schedule.
/// </summary>
[Serializable, DataDefinition]
public partial struct WeatherStage
{
/// <summary>
/// A range of how long the stage can last for, in seconds.
/// </summary>
[DataField(required: true)]
public MinMax Duration = new(0, 0);
/// <summary>
/// The weather prototype to add, or null for clear weather.
/// </summary>
[DataField]
public ProtoId<WeatherPrototype>? Weather;
/// <summary>
/// Alert message to send in chat for players on the map when it starts.
/// </summary>
[DataField]
public LocId? Message;
}

View File

@@ -0,0 +1,75 @@
using Content.Server.Chat.Managers;
using Content.Shared.Chat;
using Content.Shared.Weather;
using Robust.Shared.Map.Components;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server.DeltaV.Weather;
public sealed class WeatherSchedulerSystem : EntitySystem
{
[Dependency] private readonly IChatManager _chat = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedWeatherSystem _weather = default!;
public override void Update(float frameTime)
{
base.Update(frameTime);
var now = _timing.CurTime;
var query = EntityQueryEnumerator<WeatherSchedulerComponent>();
while (query.MoveNext(out var map, out var comp))
{
if (now < comp.NextUpdate)
continue;
if (comp.Stage >= comp.Stages.Count)
comp.Stage = 0;
var stage = comp.Stages[comp.Stage++];
var duration = stage.Duration.Next(_random);
comp.NextUpdate = now + TimeSpan.FromSeconds(duration);
var mapId = Comp<MapComponent>(map).MapId;
if (stage.Weather is {} weather)
{
var ending = comp.NextUpdate;
// crossfade weather so as one ends the next starts
if (HasWeather(comp, comp.Stage - 1))
ending += WeatherComponent.ShutdownTime;
if (HasWeather(comp, comp.Stage + 1))
ending += WeatherComponent.StartupTime;
_weather.SetWeather(mapId, _proto.Index(weather), ending);
}
if (stage.Message is {} message)
{
var msg = Loc.GetString(message);
_chat.ChatMessageToManyFiltered(
Filter.BroadcastMap(mapId),
ChatChannel.Radio,
msg,
msg,
map,
false,
true,
null);
}
}
}
private bool HasWeather(WeatherSchedulerComponent comp, int stage)
{
if (stage < 0)
stage = comp.Stages.Count + stage;
else if (stage >= comp.Stages.Count)
stage %= comp.Stages.Count;
return comp.Stages[stage].Weather != null;
}
}

View File

@@ -0,0 +1,109 @@
using Content.Server.Fluids.EntitySystems;
using Content.Server.Procedural;
using Content.Shared.Administration.Logs;
using Content.Shared.Chemistry.Components;
using Content.Shared.Database;
using Content.Shared._DV.Salvage.Components;
using Content.Shared._DV.Salvage.Systems;
using Content.Shared.Maps;
using Content.Shared.Physics;
using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
using Robust.Shared.Physics;
using Robust.Shared.Prototypes;
using System.Numerics;
namespace Content.Server._DV.Salvage.Systems;
public sealed class ShelterCapsuleSystem : SharedShelterCapsuleSystem
{
[Dependency] private readonly DungeonSystem _dungeon = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly SmokeSystem _smoke = default!;
public static readonly EntProtoId SmokePrototype = "Smoke";
private EntityQuery<FixturesComponent> _fixturesQuery;
private HashSet<EntityUid> _entities = new();
public override void Initialize()
{
base.Initialize();
_fixturesQuery = GetEntityQuery<FixturesComponent>();
}
protected override LocId? TrySpawnRoom(Entity<ShelterCapsuleComponent> ent)
{
var xform = Transform(ent);
if (xform.GridUid is not {} gridUid || !TryComp<MapGridComponent>(gridUid, out var grid))
return "shelter-capsule-error-space";
var center = _map.LocalToTile(gridUid, grid, xform.Coordinates);
var room = _proto.Index(ent.Comp.Room);
var origin = center - room.Size / 2;
// check that every tile it needs isn't blocked
var mask = (int) CollisionGroup.MobMask;
if (IsAreaBlocked(gridUid, center, room.Size, mask))
return "shelter-capsule-error-obstructed";
// check that it isn't on space or SpawnRoom will crash
for (int y = 0; y < room.Size.Y; y++)
{
for (int x = 0; x < room.Size.X; x++)
{
var pos = origin + new Vector2i(x, y);
var tile = _map.GetTileRef((gridUid, grid), pos);
if (tile.Tile.IsEmpty)
return "shelter-capsule-error-space";
}
}
var user = ent.Comp.User;
_adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(user):user} expanded {ToPrettyString(ent):capsule} at {center} on {ToPrettyString(gridUid):grid}");
_dungeon.SpawnRoom(gridUid,
grid,
origin,
room,
new Random(),
null,
clearExisting: true); // already checked for mobs and structures here
var smoke = Spawn(SmokePrototype, xform.Coordinates);
var spreadAmount = (int) room.Size.Length * 2;
_smoke.StartSmoke(smoke, new Solution(), 3f, spreadAmount);
QueueDel(ent);
return null;
}
private bool IsAreaBlocked(EntityUid grid, Vector2i center, Vector2i size, int mask)
{
// This is scaled to 95 % so it doesn't encompass walls on other tiles.
var aabb = Box2.CenteredAround(center, size * 0.95f);
_entities.Clear();
_lookup.GetLocalEntitiesIntersecting(grid, aabb, _entities, LookupFlags.Dynamic | LookupFlags.Static);
foreach (var uid in _entities)
{
// don't care about non-physical entities
if (!_fixturesQuery.TryComp(uid, out var fixtures))
continue;
foreach (var fixture in fixtures.Fixtures.Values)
{
if (!fixture.Hard)
continue;
if ((fixture.CollisionLayer & mask) != 0)
return true;
}
}
return false; // no entities colliding with the mask found
}
}

View File

@@ -0,0 +1,49 @@
using Content.Shared.Atmos;
using Content.Shared.Parallax.Biomes;
using Content.Shared.Parallax.Biomes.Markers;
using Robust.Shared.Prototypes;
namespace Content.Shared.DeltaV.Planet;
[Prototype]
public sealed partial class PlanetPrototype : IPrototype
{
[IdDataField]
public string ID { get; set; } = string.Empty;
/// <summary>
/// The biome to create the planet with.
/// </summary>
[DataField(required: true)]
public ProtoId<BiomeTemplatePrototype> Biome;
/// <summary>
/// Name to give to the map.
/// </summary>
[DataField(required: true)]
public LocId MapName;
/// <summary>
/// Ambient lighting for the map.
/// </summary>
[DataField]
public Color MapLight = Color.FromHex("#D8B059");
/// <summary>
/// Components to add to the map.
/// </summary>
[DataField]
public ComponentRegistry? AddedComponents;
/// <summary>
/// The gas mixture to use for the atmosphere.
/// </summary>
[DataField(required: true)]
public GasMixture Atmosphere = new();
/// <summary>
/// Biome layers to add to the map, i.e. ores.
/// </summary>
[DataField]
public List<ProtoId<BiomeMarkerLayerPrototype>> BiomeMarkerLayers = new();
}

View File

@@ -0,0 +1,26 @@
using Content.Shared.DeltaV.Salvage.Systems;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Salvage.Components;
/// <summary>
/// Stores mining points for a holder, such as an ID card or ore processor.
/// Mining points are gained by smelting ore and redeeming them to your ID card.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(MiningPointsSystem))]
[AutoGenerateComponentState]
public sealed partial class MiningPointsComponent : Component
{
/// <summary>
/// The number of points stored.
/// </summary>
[DataField, AutoNetworkedField]
public uint Points;
/// <summary>
/// Sound played when successfully transferring points to another holder.
/// </summary>
[DataField]
public SoundSpecifier? TransferSound;
}

View File

@@ -0,0 +1,9 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Salvage.Components;
/// <summary>
/// Adds points to <see cref="MiningPointsComponent"/> when making a recipe that has miningPoints set.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class MiningPointsLatheComponent : Component;

View File

@@ -0,0 +1,39 @@
using Content.Shared._DV.Salvage.Systems;
using Content.Shared.Procedural;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Shared._DV.Salvage.Components;
/// <summary>
/// Spawns a dungeon room after a delay when used and deletes itself.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedShelterCapsuleSystem))]
[AutoGenerateComponentPause]
public sealed partial class ShelterCapsuleComponent : Component
{
/// <summary>
/// The room to spawn.
/// </summary>
[DataField(required: true)]
public ProtoId<DungeonRoomPrototype> Room;
/// <summary>
/// How long to wait between using and spawning the room.
/// </summary>
[DataField]
public TimeSpan Delay = TimeSpan.FromSeconds(5);
/// <summary>
/// When to next spawn the room, also used to ignore activating multiple times.
/// </summary>
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? NextSpawn;
/// <summary>
/// The user of the capsule, used for logging.
/// </summary>
[DataField]
public EntityUid? User;
}

View File

@@ -0,0 +1,9 @@
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.Salvage;
/// <summary>
/// Message for a lathe to transfer its mining points to the user's id card.
/// </summary>
[Serializable, NetSerializable]
public sealed class LatheClaimMiningPointsMessage : BoundUserInterfaceMessage;

View File

@@ -0,0 +1,121 @@
using Content.Shared.Access.Systems;
using Content.Shared.DeltaV.Salvage.Components;
using Content.Shared.Lathe;
using Robust.Shared.Audio.Systems;
namespace Content.Shared.DeltaV.Salvage.Systems;
public sealed class MiningPointsSystem : EntitySystem
{
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedIdCardSystem _idCard = default!;
private EntityQuery<MiningPointsComponent> _query;
public override void Initialize()
{
base.Initialize();
_query = GetEntityQuery<MiningPointsComponent>();
SubscribeLocalEvent<MiningPointsLatheComponent, LatheStartPrintingEvent>(OnStartPrinting);
Subs.BuiEvents<MiningPointsLatheComponent>(LatheUiKey.Key, subs =>
{
subs.Event<LatheClaimMiningPointsMessage>(OnClaimMiningPoints);
});
}
#region Event Handlers
private void OnStartPrinting(Entity<MiningPointsLatheComponent> ent, ref LatheStartPrintingEvent args)
{
var points = args.Recipe.MiningPoints;
if (points > 0)
AddPoints(ent.Owner, points);
}
private void OnClaimMiningPoints(Entity<MiningPointsLatheComponent> ent, ref LatheClaimMiningPointsMessage args)
{
var user = args.Actor;
if (TryFindIdCard(user) is {} dest)
TransferAll(ent.Owner, dest);
}
#endregion
#region Public API
/// <summary>
/// Tries to find the user's id card and gets its <see cref="MiningPointsComponent"/>.
/// </summary>
/// <remarks>
/// Component is nullable for easy usage with the API due to Entity&lt;T&gt; not being usable for Entity&lt;T?&gt; arguments.
/// </remarks>
public Entity<MiningPointsComponent?>? TryFindIdCard(EntityUid user)
{
if (!_idCard.TryFindIdCard(user, out var idCard))
return null;
if (!_query.TryComp(idCard, out var comp))
return null;
return (idCard, comp);
}
/// <summary>
/// Removes points from a holder, returning true if it succeeded.
/// </summary>
public bool RemovePoints(Entity<MiningPointsComponent?> ent, uint amount)
{
if (!_query.Resolve(ent, ref ent.Comp) || amount > ent.Comp.Points)
return false;
ent.Comp.Points -= amount;
Dirty(ent);
return true;
}
/// <summary>
/// Add points to a holder.
/// </summary>
public bool AddPoints(Entity<MiningPointsComponent?> ent, uint amount)
{
if (!_query.Resolve(ent, ref ent.Comp))
return false;
ent.Comp.Points += amount;
Dirty(ent);
return true;
}
/// <summary>
/// Transfer a number of points from source to destination.
/// Returns true if the transfer succeeded.
/// </summary>
public bool Transfer(Entity<MiningPointsComponent?> src, Entity<MiningPointsComponent?> dest, uint amount)
{
// don't make a sound or anything
if (amount == 0)
return true;
if (!_query.Resolve(src, ref src.Comp) || !_query.Resolve(dest, ref dest.Comp))
return false;
if (!RemovePoints(src, amount))
return false;
AddPoints(dest, amount);
_audio.PlayPvs(src.Comp.TransferSound, src);
return true;
}
/// <summary>
/// Transfers all points from source to destination.
/// Returns true if the transfer succeeded.
/// </summary>
public bool TransferAll(Entity<MiningPointsComponent?> src, Entity<MiningPointsComponent?> dest)
{
return _query.Resolve(src, ref src.Comp) && Transfer(src, dest, src.Comp.Points);
}
#endregion
}

View File

@@ -0,0 +1,66 @@
using Content.Shared._DV.Salvage.Components;
using Content.Shared.Interaction.Events;
using Content.Shared.Popups;
using Robust.Shared.Timing;
namespace Content.Shared._DV.Salvage.Systems;
/// <summary>
/// Handles interaction for shelter capsules.
/// Room spawning is done serverside.
/// </summary>
public abstract class SharedShelterCapsuleSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShelterCapsuleComponent, UseInHandEvent>(OnUse);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var now = _timing.CurTime;
var query = EntityQueryEnumerator<ShelterCapsuleComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (comp.NextSpawn is not {} nextSpawn || now < nextSpawn)
continue;
comp.User = null;
comp.NextSpawn = null;
if (TrySpawnRoom((uid, comp)) is {} id)
{
var msg = Loc.GetString(id, ("capsule", uid));
_popup.PopupEntity(msg, uid, PopupType.LargeCaution);
}
}
}
/// <summary>
/// Spawn the room, returning a locale string for an error. It gets "capsule" passed.
/// </summary>
protected virtual LocId? TrySpawnRoom(Entity<ShelterCapsuleComponent> ent)
{
return null;
}
private void OnUse(Entity<ShelterCapsuleComponent> ent, ref UseInHandEvent args)
{
if (args.Handled || ent.Comp.NextSpawn != null)
return;
args.Handled = true;
var msg = Loc.GetString("shelter-capsule-warning", ("capsule", ent));
_popup.PopupPredicted(msg, ent, args.User, PopupType.LargeCaution);
ent.Comp.User = args.User;
ent.Comp.NextSpawn = _timing.CurTime + ent.Comp.Delay;
}
}

View File

@@ -0,0 +1,48 @@
using Content.Shared.DeltaV.Shuttles.Systems;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// A shuttle console that can only ftl-dock between 2 grids.
/// The shuttle used must have <see cref="DockingShuttleComponent"/>.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedDockingConsoleSystem))]
[AutoGenerateComponentState]
public sealed partial class DockingConsoleComponent : Component
{
/// <summary>
/// Title of the window to use
/// </summary>
[DataField(required: true)]
public LocId WindowTitle;
/// <summary>
/// Airlock tag that it will prioritize docking to.
/// </summary>
[DataField(required: true)]
public ProtoId<TagPrototype> DockTag;
/// <summary>
/// A whitelist the shuttle has to match to be piloted.
/// </summary>
[DataField(required: true)]
public EntityWhitelist ShuttleWhitelist = new();
/// <summary>
/// The shuttle that matches <see cref="ShuttleWhitelist"/>.
/// If this is null a shuttle was not found and this console does nothing.
/// </summary>
[DataField]
public EntityUid? Shuttle;
/// <summary>
/// Whether <see cref="Shuttle"/> is set on the server or not.
/// Client can't use Shuttle outside of PVS range so that isn't networked.
/// </summary>
[DataField, AutoNetworkedField]
public bool HasShuttle;
}

View File

@@ -0,0 +1,46 @@
using Content.Shared.DeltaV.Shuttles.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// Component that stores destinations a docking-only shuttle can use.
/// Used by <see cref="DockingConsoleComponent"/> to access destinations.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedDockingShuttleSystem))]
public sealed partial class DockingShuttleComponent : Component
{
/// <summary>
/// The station this shuttle belongs to.
/// </summary>
[DataField]
public EntityUid? Station;
/// <summary>
/// Every destination this console can FTL to.
/// </summary>
[DataField]
public List<DockingDestination> Destinations = new();
}
/// <summary>
/// A map a shuttle can FTL to.
/// Created automatically on shuttle mapinit.
/// </summary>
[DataDefinition, Serializable, NetSerializable]
public partial struct DockingDestination
{
/// <summary>
/// The name of the destination to use in UI.
/// </summary>
[DataField]
public LocId Name;
/// <summary>
/// The map ID.
/// </summary>
[DataField]
public MapId Map;
}

View File

@@ -0,0 +1,10 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Shuttles.Components;
/// <summary>
/// Marker component for the mining shuttle grid.
/// Used for lavaland's FTL whitelist.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class MiningShuttleComponent : Component;

View File

@@ -0,0 +1,30 @@
using Content.Shared.DeltaV.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.Timing;
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.Shuttles;
[Serializable, NetSerializable]
public enum DockingConsoleUiKey : byte
{
Key
}
[Serializable, NetSerializable]
public sealed class DockingConsoleState(FTLState ftlState, StartEndTime ftlTime, List<DockingDestination> destinations) : BoundUserInterfaceState
{
public FTLState FTLState = ftlState;
public StartEndTime FTLTime = ftlTime;
public List<DockingDestination> Destinations = destinations;
}
[Serializable, NetSerializable]
public sealed class DockingConsoleFTLMessage(int index) : BoundUserInterfaceMessage
{
public int Index = index;
}
[Serializable, NetSerializable]
public sealed class DockingConsoleShuttleCheckMessage : BoundUserInterfaceMessage;

View File

@@ -0,0 +1,3 @@
namespace Content.Shared.DeltaV.Shuttles.Systems;
public abstract class SharedDockingConsoleSystem : EntitySystem;

View File

@@ -0,0 +1,3 @@
namespace Content.Shared.DeltaV.Shuttles.Systems;
public abstract class SharedDockingShuttleSystem : EntitySystem;

View File

@@ -0,0 +1,9 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.VendingMachines;
/// <summary>
/// Makes a <see cref="ShopVendorComponent"/> use mining points to buy items.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class PointsVendorComponent : Component;

View File

@@ -0,0 +1,181 @@
using Content.Shared.Access.Systems;
using Content.Shared.DeltaV.Salvage.Systems;
using Content.Shared.Destructible;
using Content.Shared.Popups;
using Content.Shared.Power;
using Content.Shared.Power.EntitySystems;
using Content.Shared.UserInterface;
using Content.Shared.VendingMachines;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
namespace Content.Shared.DeltaV.VendingMachines;
public abstract class SharedShopVendorSystem : EntitySystem
{
[Dependency] private readonly AccessReaderSystem _access = default!;
[Dependency] private readonly MiningPointsSystem _points = default!;
[Dependency] protected readonly IGameTiming Timing = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPointLightSystem _light = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedPowerReceiverSystem _power = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PointsVendorComponent, ShopVendorBalanceEvent>(OnPointsBalance);
SubscribeLocalEvent<PointsVendorComponent, ShopVendorPurchaseEvent>(OnPointsPurchase);
SubscribeLocalEvent<ShopVendorComponent, PowerChangedEvent>(OnPowerChanged);
SubscribeLocalEvent<ShopVendorComponent, BreakageEventArgs>(OnBreak);
SubscribeLocalEvent<ShopVendorComponent, ActivatableUIOpenAttemptEvent>(OnOpenAttempt);
Subs.BuiEvents<ShopVendorComponent>(VendingMachineUiKey.Key, subs =>
{
subs.Event<ShopVendorPurchaseMessage>(OnPurchase);
});
}
#region Public API
public uint GetBalance(EntityUid uid, EntityUid user)
{
var ev = new ShopVendorBalanceEvent(user);
RaiseLocalEvent(uid, ref ev);
return ev.Balance;
}
#endregion
#region Balance adapters
private void OnPointsBalance(Entity<PointsVendorComponent> ent, ref ShopVendorBalanceEvent args)
{
args.Balance = _points.TryFindIdCard(args.User)?.Comp?.Points ?? 0;
}
private void OnPointsPurchase(Entity<PointsVendorComponent> ent, ref ShopVendorPurchaseEvent args)
{
if (_points.TryFindIdCard(args.User) is {} idCard && _points.RemovePoints(idCard, args.Cost))
args.Paid = true;
}
#endregion
private void OnPowerChanged(Entity<ShopVendorComponent> ent, ref PowerChangedEvent args)
{
UpdateVisuals(ent);
}
private void OnBreak(Entity<ShopVendorComponent> ent, ref BreakageEventArgs args)
{
ent.Comp.Broken = true;
UpdateVisuals(ent);
}
private void OnOpenAttempt(Entity<ShopVendorComponent> ent, ref ActivatableUIOpenAttemptEvent args)
{
if (ent.Comp.Broken)
args.Cancel();
}
private void OnPurchase(Entity<ShopVendorComponent> ent, ref ShopVendorPurchaseMessage args)
{
if (ent.Comp.Ejecting != null || ent.Comp.Broken || !_power.IsPowered(ent.Owner))
return;
var pack = _proto.Index(ent.Comp.Pack);
if (args.Index < 0 || args.Index >= pack.Listings.Count)
return;
var user = args.Actor;
if (!_access.IsAllowed(user, ent))
{
Deny(ent, user);
return;
}
var listing = pack.Listings[args.Index];
var ev = new ShopVendorPurchaseEvent(user, listing.Cost);
RaiseLocalEvent(ent, ref ev);
if (!ev.Paid)
{
Deny(ent, user);
return;
}
ent.Comp.Ejecting = listing.Id;
ent.Comp.NextEject = Timing.CurTime + ent.Comp.EjectDelay;
Dirty(ent);
_audio.PlayPvs(ent.Comp.PurchaseSound, ent);
UpdateVisuals(ent);
Log.Debug($"Player {ToPrettyString(user):user} purchased {listing.Id} from {ToPrettyString(ent):vendor}");
AfterPurchase(ent);
}
protected virtual void AfterPurchase(Entity<ShopVendorComponent> ent)
{
}
private void Deny(Entity<ShopVendorComponent> ent, EntityUid user)
{
_popup.PopupClient(Loc.GetString("vending-machine-component-try-eject-access-denied"), ent, user);
if (ent.Comp.Denying)
return;
ent.Comp.Denying = true;
ent.Comp.NextDeny = Timing.CurTime + ent.Comp.DenyDelay;
Dirty(ent);
_audio.PlayPvs(ent.Comp.DenySound, ent);
UpdateVisuals(ent);
}
protected void UpdateVisuals(Entity<ShopVendorComponent> ent)
{
var state = VendingMachineVisualState.Normal;
var lit = true;
if (ent.Comp.Broken)
{
state = VendingMachineVisualState.Broken;
lit = false;
}
else if (ent.Comp.Ejecting != null)
{
state = VendingMachineVisualState.Eject;
}
else if (ent.Comp.Denying)
{
state = VendingMachineVisualState.Deny;
}
else if (!_power.IsPowered(ent.Owner))
{
state = VendingMachineVisualState.Off;
lit = true;
}
_light.SetEnabled(ent, lit);
_appearance.SetData(ent, VendingMachineVisuals.VisualState, state);
}
}
/// <summary>
/// Raised on a shop vendor to get its current balance.
/// A currency component sets Balance to whatever it is.
/// </summary>
[ByRefEvent]
public record struct ShopVendorBalanceEvent(EntityUid User, uint Balance = 0);
/// <summary>
/// Raised on a shop vendor when trying to purchase an item.
/// A currency component sets Paid to true if the user successfully paid for it.
/// </summary>
[ByRefEvent]
public record struct ShopVendorPurchaseEvent(EntityUid User, uint Cost, bool Paid = false);

View File

@@ -0,0 +1,23 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.VendingMachines;
/// <summary>
/// Similar to <c>VendingMachineInventoryPrototype</c> but for <see cref="ShopVendorComponent"/>.
/// </summary>
[Prototype]
public sealed class ShopInventoryPrototype : IPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
/// <summary>
/// The item listings for sale.
/// </summary>
[DataField(required: true)]
public List<ShopListing> Listings = new();
}
[DataRecord, Serializable]
public record struct ShopListing(EntProtoId Id, uint Cost);

View File

@@ -0,0 +1,96 @@
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Shared.DeltaV.VendingMachines;
/// <summary>
/// A vending machine that sells items for a currency controlled by events.
/// Does not need restocking.
/// Another component must handle <see cref="ShopVendorBalanceEvent"/> and <see cref="ShopVendorPurchaseEvent"/> to work.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedShopVendorSystem))]
[AutoGenerateComponentState, AutoGenerateComponentPause]
public sealed partial class ShopVendorComponent : Component
{
/// <summary>
/// The inventory prototype to sell.
/// </summary>
[DataField(required: true)]
public ProtoId<ShopInventoryPrototype> Pack;
[DataField, AutoNetworkedField]
public bool Broken;
[DataField, AutoNetworkedField]
public bool Denying;
/// <summary>
/// Item being ejected, or null if it isn't.
/// </summary>
[DataField, AutoNetworkedField]
public EntProtoId? Ejecting;
/// <summary>
/// How long to wait before flashing denied again.
/// </summary>
[DataField]
public TimeSpan DenyDelay = TimeSpan.FromSeconds(2);
/// <summary>
/// How long to wait before another item can be bought
/// </summary>
[DataField]
public TimeSpan EjectDelay = TimeSpan.FromSeconds(1.2);
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan NextDeny;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan NextEject;
[DataField]
public SoundSpecifier PurchaseSound = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg")
{
Params = new AudioParams
{
Volume = -4f,
Variation = 0.15f
}
};
[DataField]
public SoundSpecifier DenySound = new SoundPathSpecifier("/Audio/Machines/custom_deny.ogg")
{
Params = new AudioParams
{
Volume = -2f
}
};
#region Visuals
[DataField]
public bool LoopDenyAnimation = true;
[DataField]
public string? OffState;
[DataField]
public string? ScreenState;
[DataField]
public string? NormalState;
[DataField]
public string? DenyState;
[DataField]
public string? EjectState;
[DataField]
public string? BrokenState;
#endregion
}

View File

@@ -0,0 +1,9 @@
using Robust.Shared.Serialization;
namespace Content.Shared.DeltaV.VendingMachines;
[Serializable, NetSerializable]
public sealed class ShopVendorPurchaseMessage(int index) : BoundUserInterfaceMessage
{
public readonly int Index = index;
}

View File

@@ -0,0 +1,9 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Weather.Components;
/// <summary>
/// Makes an entity not take damage from ash storms.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class AshStormImmuneComponent : Component;

View File

@@ -8,6 +8,7 @@ namespace Content.Shared.Humanoid.Markings
Special,
Hair,
FacialHair,
Eyes, // imp
Head,
HeadTop,
HeadSide,
@@ -31,6 +32,7 @@ namespace Content.Shared.Humanoid.Markings
HumanoidVisualLayers.Special => MarkingCategories.Special,
HumanoidVisualLayers.Hair => MarkingCategories.Hair,
HumanoidVisualLayers.FacialHair => MarkingCategories.FacialHair,
HumanoidVisualLayers.Eyes => MarkingCategories.Eyes,
HumanoidVisualLayers.Head => MarkingCategories.Head,
HumanoidVisualLayers.HeadTop => MarkingCategories.HeadTop,
HumanoidVisualLayers.HeadSide => MarkingCategories.HeadSide,

View File

@@ -69,5 +69,13 @@ namespace Content.Shared.Research.Prototypes
/// </summary>
[DataField]
public List<ProtoId<LatheCategoryPrototype>> Categories = new();
public ProtoId<LatheCategoryPrototype>? Category;
/// <summary>
/// DeltaV: Number of mining points this recipe adds to an oreproc when printed.
/// Scales with stack count.
/// </summary>
[DataField]
public uint MiningPoints;
}
}

View File

@@ -38,6 +38,7 @@ public abstract class SharedWeatherSystem : EntitySystem
if (weather.EndTime != null)
weather.EndTime = weather.EndTime.Value + args.PausedTime;
}
component.NextUpdate += args.PausedTime; // DeltaV
}
public bool CanWeatherAffect(EntityUid uid, MapGridComponent grid, TileRef tileRef, RoofComponent? roofComp = null)

View File

@@ -14,6 +14,18 @@ public sealed partial class WeatherComponent : Component
[DataField]
public Dictionary<ProtoId<WeatherPrototype>, WeatherData> Weather = new();
/// <summary>
/// DeltaV: How long to wait between updating weather effects.
/// </summary>
[DataField]
public TimeSpan UpdateDelay = TimeSpan.FromSeconds(1);
/// <summary>
/// DeltaV: When to next update weather effects (damage).
/// </summary>
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan NextUpdate = TimeSpan.Zero;
public static readonly TimeSpan StartupTime = TimeSpan.FromSeconds(15);
public static readonly TimeSpan ShutdownTime = TimeSpan.FromSeconds(15);
}

View File

@@ -1,3 +1,5 @@
using Content.Shared.Damage;
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@@ -20,4 +22,17 @@ public sealed partial class WeatherPrototype : IPrototype
/// </summary>
[ViewVariables(VVAccess.ReadWrite), DataField("sound")]
public SoundSpecifier? Sound;
/// <summary>
/// DeltaV: Damage you can take from being in this weather.
/// Only applies when weather has fully set in.
/// </summary>
[DataField]
public DamageSpecifier? Damage;
/// <summary>
/// DeltaV: Don't damage entities that match this blacklist.
/// </summary>
[DataField]
public EntityWhitelist? DamageBlacklist;
}

View File

@@ -0,0 +1,3 @@
shelter-capsule-warning = {THE($capsule)} begins to shake. Stand back!
shelter-capsule-error-space = {THE($capsule)} needs ground to deploy on!
shelter-capsule-error-obstructed = {THE($capsule)} is obstructed, clear the area first!

View File

@@ -0,0 +1,159 @@
# Chest
marking-ArachnidOverlayFluffy = Fluffy
marking-ArachnidOverlayFluffy-fluffy = Fluff
marking-ArachnidTorsoSegments = Segmented Chest
marking-ArachnidTorsoSegments-segments1 = Chest
marking-ArachnidTorsoSegments-segments2 = Stomach
marking-SpiderMirror = Mirror
marking-SpiderMirror-mirror = Mirror
# Head
marking-ArachnidHeadSegments = Segmented Head
marking-ArachnidHeadSegments-segments1 = Head
marking-ArachnidHeadSegments-segments2 = Stripe
# Snout
marking-WhipSpiderMouth = Chelicerae (Whip)
marking-WhipSpiderMouth-whipspidermouth = Chelicerae
# Eyes
marking-ArachnidEyesDefault = Eyes
marking-ArachnidEyesDefault-eyes = Eyes (Default)
marking-ArachnidEyesJumper = Jumper Eyes
marking-ArachnidEyesJumper-jumper1 = Outer Right
marking-ArachnidEyesJumper-jumper2 = Inner Right
marking-ArachnidEyesJumper-jumper3 = Inner Left
marking-ArachnidEyesJumper-jumper4 = Outer Left
marking-ArachnidEyesJumperGlowing = Jumper Glowing Eyes
marking-ArachnidEyesJumperGlowing-jumper1 = Outer Right
marking-ArachnidEyesJumperGlowing-jumper2 = Inner Right
marking-ArachnidEyesJumperGlowing-jumper3 = Inner Left
marking-ArachnidEyesJumperGlowing-jumper4 = Outer Left
marking-ArachnidEyesRound = Round Eyes
marking-ArachnidEyesRound-round1 = Inner
marking-ArachnidEyesRound-round2 = Upper
marking-ArachnidEyesRound-round3 = Outer
marking-ArachnidEyesRound-round4 = Sides
marking-ArachnidEyesRoundGlowing = Round Glowing Eyes
marking-ArachnidEyesRoundGlowing-round1 = Inner
marking-ArachnidEyesRoundGlowing-round2 = Upper
marking-ArachnidEyesRoundGlowing-round3 = Outer
marking-ArachnidEyesRoundGlowing-round4 = Sides
marking-SpiderEyesMulti = Multicolor Eyes
marking-SpiderEyesMulti-multi1 = Top
marking-SpiderEyesMulti-multi2 = Middle Top
marking-SpiderEyesMulti-multi3 = Middle Bottom
marking-SpiderEyesMulti-multi4 = Bottom
marking-SpiderGlowEyes = Glowing Eyes
marking-SpiderGlowEyes-glow = Glowing Eyes
# RArm
marking-ArachnidRArmSegments = Segmented Arm (Right)
marking-ArachnidRArmSegments-segments1 = Upper Arm
marking-ArachnidRArmSegments-segments2 = Forearm
# LArm
marking-ArachnidLArmSegments = Segmented Arm (Left)
marking-ArachnidLArmSegments-segments1 = Upper Arm
marking-ArachnidLArmSegments-segments2 = Forearm
# RLeg
marking-ArachnidRLegSegments = Segmented Leg (Right)
marking-ArachnidRLegSegments-segments1 = Thigh
marking-ArachnidRLegSegments-segments2 = Shin
# LLeg
marking-ArachnidLLegSegments = Segmented Leg (Left)
marking-ArachnidLLegSegments-segments1 = Thigh
marking-ArachnidLLegSegments-segments2 = Shin
# UndergarmentBottom
# UndergarmentTop
marking-UndergarmentTopBinderA = Binder
marking-UndergarmentTopBinderA-binder = Binder
marking-UndergarmentTopTanktopA = Tanktop
marking-UndergarmentTopTanktopA-tanktop = Tanktop
marking-UndershirtBraSportsA = Bra (Sports)
marking-UndershirtBraSportsA-sports = Bra
marking-UndershirtBraStraplessA = Bra (Strapless)
marking-UndershirtBraStraplessA-strapless = Bra
marking-UndershirtDefaultA = Undershirt
marking-UndershirtDefaultA-undershirt = Undershirt
marking-UndershirtGrossSleevelessA = Tanktop (Gross)
marking-UndershirtGrossSleevelessA-grosssleeveless = Tanktop
marking-UndershirtNanotrasenA = Undershirt (Nanotrasen)
marking-UndershirtNanotrasenA-nanotrasen = Undershirt
marking-UndershirtRolledA = Undershirt (Cropped)
marking-UndershirtRolledA-rolledundershirt = Undershirt
# LFoot
# RFoot
# LHand
# RHand
# FacialHair
# Hair
marking-SpiderHair1 = Fluffy
marking-SpiderHair2 = Long Horned
marking-SpiderHair3 = Wisps
# HeadSide
marking-ArachnidCheliceraeSmall = Chelicerae (Small)
marking-ArachnidCheliceraeSmall-small = Chelicerae
marking-ArachnidCheliceraeBig = Chelicerae (Big)
marking-ArachnidCheliceraeBig-big = Chelicerae
marking-ArachnidCheliceraeSolifugid = Chelicerae (Solifugid)
marking-ArachnidCheliceraeSolifugid-solifugid = Chelicerae
marking-ArachnidCheliceraeLongjaw = Chelicerae (Longjaw)
marking-ArachnidCheliceraeLongjaw-longjaw = Chelicerae
# HeadTop
# Tail
marking-AbdomenBasic = Abdomen (Basic)
marking-AbdomenBasic-abdomenbasic1 = Legs
marking-AbdomenBasic-abdomenbasic2 = Abdomen
marking-AbdomenWidow = Abdomen (Widow)
marking-AbdomenWidow-widow1 = Abdomen and Arms
marking-AbdomenWidow-widow2 = Marking
marking-CreepyArms = Creepy Arms
marking-CreepyArms-creepy = Creepy Arms
marking-AppendagesScorpion = Appendages (Scorpion)
marking-AppendagesScorpion-scorpion = Legs and Pincers
# RArmExtension

View File

@@ -0,0 +1,151 @@
# Chest
marking-DionaFirefly = Fireflies
marking-DionaFirefly-firefly = Fireflies
marking-DionaFlowersBody-flowers1 = Vine
marking-DionaFlowersBody-flowers2 = Flowers
marking-DionaLivingNymph = Living Nymphs
marking-DionaLivingNymph-livingnymph = Living Nymphs
marking-DionaMossChest = Moss Drape
marking-DionaMossChest-moss = Moss Drape
marking-MycenaChest = Diona Fungal (Mycena)
marking-MycenaChest-mycena = Mycena
marking-MycenaChestGlow = Diona Fungal (Glowing Mycena)
marking-MycenaChestGlow-mycena = Mycena
marking-ShelfChest = Diona Fungal (Shelf)
marking-ShelfChest-shelf = Shelf
# Head
marking-Amanita = Diona Fungal (Amanita)
marking-Amanita-amanita1 = Cap
marking-Amanita-amanita2 = Spots and Gills
marking-DionaBigFirefly = Big Fireflies
marking-DionaBigFirefly-bigfirefly = Big Fireflies
marking-DionaPollenDust = Pollen Cloud
marking-DionaPollenDust-pollendust = Pollen Cloud
marking-DionaSunflower = Sunflower
marking-DionaSunflower-sunflower_base = Sunflower Center
marking-DionaSunflower-sunflower_eyes = Sunflower Eyes
marking-DionaSunflower-sunflower_petals1 = Sunflower Petals 1
marking-DionaSunflower-sunflower_petals2 = Sunflower Petals 2
marking-DionaSunflowerEyesUnshaded = Sunflower Eyes (Unshaded)
marking-DionaSunflowerEyesUnshaded-sunflower_eyes = Sunflower Eyes
marking-DionaFlowersHead-flowers1 = Stems
marking-DionaFlowersHead-flowers2 = Flowers
marking-DionaBloomHead-bloom1 = Stem
marking-DionaBloomHead-bloom2 = Flower
marking-DionaCornflowerHead-cornflower1 = Leaves
marking-DionaCornflowerHead-cornflower2 = Flowers (Inner)
marking-DionaCornflowerHead-cornflower3 = Flowers
marking-DionaGarlandHead-garland1 = Leaves
marking-DionaGarlandHead-garland2 = Flowers (Inner)
marking-DionaGarlandHead-garland3 = Flowers 1
marking-DionaGarlandHead-garland4 = Flowers 2
marking-DionaGarlandHead-garland5 = Flowers 3
marking-DionaKingHead-king1 = Stem
marking-DionaKingHead-king2 = Flower
marking-DionaLotusHead-lotus1 = Stem
marking-DionaLotusHead-lotus2 = Flower
marking-DionaRoseHead-rose1 = Stem
marking-DionaRoseHead-rose2 = Flower
marking-DionaRoseyHead-rosey1 = Bush
marking-DionaRoseyHead-rosey2 = Flowers (Inner)
marking-DionaRoseyHead-rosey3= Flowers
marking-DionaSpinnerHeadSide-spinner1 = Roots
marking-DionaSpinnerHeadSide-spinner2 = Eyes
marking-DionaSproutHeadSide-sprout1= Primary
marking-DionaSproutHeadSide-sprout2 = Secondary
marking-DionaVineHeadTop-vine1 = Root
marking-DionaVineHeadTop-vine2 = Vines
marking-DionaVinelHead-vinel1 = Primary
marking-DionaVinelHead-vinel2 = Secondary
marking-DionaVinesHead-vines1 = Primary
marking-DionaVinesHead-vines2 = Secondary
marking-DionaWildflowerHead-wildflower1 = Leaves
marking-DionaWildflowerHead-wildflower2 = Flowers (Inner)
marking-DionaWildflowerHead-wildflower3= Flowers 1
marking-DionaWildflowerHead-wildflower4 = Flowers 2
marking-DionaWildflowerHead-wildflower5 = Flowers 3
marking-DionaWildflowerHead-wildflower6 = Flowers 4
marking-JackHead = Diona Fungal (Jack o' Lantern)
marking-JackHead-jack = Pumpkin
marking-MycenaHead = Diona Fungal (Mycena)
marking-MycenaHead-mycena = Mycena
marking-MycenaHeadGlow = Diona Fungal (Glowing Mycena)
marking-MycenaHeadGlow-mycena = Mycena
marking-ShelfHead = Diona Fungal (Shelf)
marking-ShelfHead-shelf = Shelf
# Snout
# Eyes
# RArm
# LArm
marking-MycenaArm = Diona Fungal (Mycena)
marking-MycenaArm-mycena = Mycena
marking-MycenaArmGlow = Diona Fungal (Glowing Mycena)
marking-MycenaArmGlow-mycena = Mycena
# RLeg
# LLeg
# UndergarmentBottom
# UndergarmentTop
# LFoot
# RFoot
# LHand
# RHand
# FacialHair
# Hair
# HeadSide
# HeadTop
marking-DionaMoonBloom = Moon Bloom
marking-DionaMoonBloom-dionamoonbloom = Moon Bloom
# Tail
# RArmExtension

View File

@@ -0,0 +1,102 @@
# Chest
marking-DwarfChestHair = Chest Hair
marking-DwarfChestHair-chesthair = Chest Hair
marking-DwarfConstellationChest = Chest Constellation
marking-DwarfConstellationChest-constellation = Chest Constellation
marking-DwarfMarkBear = Mark of the Bear
marking-DwarfMarkBear-markbear = Mark of the Bear
marking-DwarfMarkCobra = Mark of the Cobra
marking-DwarfMarkCobra-markcobra = Mark of the Cobra
marking-DwarfMarkSpider = Mark of the Spider
marking-DwarfMarkSpider-markspider = Mark of the Spider
marking-DwarfTattooShootingStar = Shooting Star Tattoo
marking-DwarfTattooShootingStar-shootingstar = Shooting Star Tattoo
# Head
marking-DwarfBearCheeks = Glowing Cheeks
marking-DwarfBearCheeks-bearcheeks = Glowing Cheeks
marking-DwarfConstellationHead = Head Constellation
marking-DwarfConstellationHead-constellation = Head Constellation
marking-DwarfHeadGlow = Glowing Star
marking-DwarfHeadGlow-glow = Glowing Star
# Snout
# Eyes
# RArm
marking-DwarfConstellationRArm = Arm Constellation (Right)
marking-DwarfConstellationRArm-constellation = Arm Constellation (Right)
# LArm
marking-DwarfArmHair = Arm Hair
marking-DwarfArmHair-hair = Arm Hair
marking-DwarfConstellationLArm = Arm Constellation (Left)
marking-DwarfConstellationLArm-constellation = Arm Constellation (Left)
# RLeg
marking-DwarfConstellationRLeg = Leg Constellation (Right)
marking-DwarfConstellationRLeg-constellation = Leg Constellation (Right)
# LLeg
marking-DwarfConstellationLLeg = Leg Constellation (Left)
marking-DwarfConstellationLLeg-constellation = Leg Constellation (Left)
marking-DwarfLegHair = Leg Hair
marking-DwarfLegHair-hair = Leg Hair
# UndergarmentBottom
# UndergarmentTop
# LFoot
marking-DwarfConstellationLFoot = Foot Constellation (Left)
marking-DwarfConstellationLFoot-constellation = Foot Constellation (Left)
# RFoot
marking-DwarfConstellationRFoot = Foot Constellation (Right)
marking-DwarfConstellationRFoot-constellation = Foot Constellation (Right)
# LHand
marking-DwarfConstellationLHand = Hand Constellation (Left)
marking-DwarfConstellationLHand-constellation = Hand Constellation (Left)
marking-DwarfMarkKangarooLHand = Mark of the Kangaroo (Left)
marking-DwarfMarkKangarooLHand-markkangaroo = Mark of the Kangaroo (Left)
# RHand
marking-DwarfConstellationRHand = Hand Constellation (Right)
marking-DwarfConstellationRHand-constellation = Hand Constellation (Right)
marking-DwarfMarkKangarooRHand = Mark of the Kangaroo (Right)
marking-DwarfMarkKangarooRHand-markkangaroo = Mark of the Kangaroo (Right)
# FacialHair
# Hair
# HeadSide
# HeadTop
# Tail
# RArmExtension

View File

@@ -0,0 +1,46 @@
# Chest
# Head
# Snout
# Eyes
marking-HumanLEyeGlow = Glowing Eye (Left)
marking-HumanLEyeGlow-tattoo_eye_l = Glowing Eye (Left)
marking-HumanREyeGlow = Glowing Eye (Right)
marking-HumanREyeGlow-tattoo_eye_r = Glowing Eye (Right)
# RArm
# LArm
# RLeg
# LLeg
# UndergarmentBottom
# UndergarmentTop
# LFoot
# RFoot
# LHand
# RHand
# FacialHair
# Hair
# HeadSide
# HeadTop
marking-PrettyFly = Stinky Agent
# Tail
# RArmExtension

View File

@@ -0,0 +1,496 @@
# Chest
marking-BodyhairHumanFemale = Body Hair
marking-BodyhairHumanFemale-bodyhairfemale = Body Hair
marking-BodyhairHumanMale = Body Hair
marking-BodyhairHumanMale-bodyhairmale = Body Hair
marking-BodyhairHumanUnsexed = Body Hair
marking-BodyhairHumanUnsexed-bodyhairmale = Body Hair
marking-ChestBackstabbed = Backstabbed
marking-ChestBackstabbed-backstabbed = Backstabbed
marking-ChestCutHere = 'Cut Here' Tattoo
marking-ChestCutHere-cuthere = 'Cut Here' Tattoo
marking-ChestHeavyTattoos = Heavy Chest Tattoos
marking-ChestHeavyTattoos-heavy1 = Heavy Chest Tattoos (Upper)
marking-ChestHeavyTattoos-heavy2 = Heavy Chest Tattoos (Middle)
marking-ChestHeavyTattoos-heavy3 = Heavy Chest Tattoos (Lower)
marking-ChestNecklace = Necklace
marking-ChestNecklace-necklace = Necklace
marking-ChestTwistingLeft = Twisted Scar (Left)
marking-ChestTwistingLeft-twistingleft = Twisted Scar (Left)
marking-ChestTwistingRight = Twisted Scar (Right)
marking-ChestTwistingRight-twistingright = Twisted Scar (Right)
marking-HumanoidAbs = Muscles
marking-HumanoidAbs-muscular = Muscles
marking-ProstheticShoulderL = Prosthetic (Left Shoulder)
marking-ProstheticShoulderL-prostheticshoulderleft = Prosthetic
marking-ProstheticShoulderR = Prosthetic (Right Shoulder)
marking-ProstheticShoulderR-prostheticshoulderright = Prosthetic (Right Shoulder)
marking-TattooAnchor = Tattoo (Anchor)
marking-TattooAnchor-anchor = Tattoo
marking-TattooCode1 = Tattoo (Code QR Back Small)
marking-TattooCode1-code1 = Tattoo
marking-TattooCode2 = Tattoo (Code Bar Back)
marking-TattooCode2-code2 = Tattoo
marking-TattooCode3 = Tattoo (Code QR Back Big)
marking-TattooCode3-code3 = Tattoo
marking-TattooDragon = Tattoo (Dragon)
marking-TattooDragon-dragontattoo1 = Body
marking-TattooDragon-dragontattoo2 = Highlights
marking-TattooNanotrasenChest-nanotrasen = Chest Tattoo (Nanotrasen)
marking-TattooNanotrasenChest = Chest Tattoo (Nanotrasen)
marking-ChestStar = Star Scar
marking-ChestStar-star = Star Scar
marking-TorsoIncision = Torso Incision
marking-TorsoIncision-torso_incision = Torso Incision
marking-TattooVinesHumanoid = Tattoo (Vines)
marking-TattooVinesHumanoid-vines = Tattoo (Vines)
marking-VitiligoChestF = Vitiligo Spread
marking-VitiligoChestSpots = Vitiligo Spots
# Head
marking-EyebrowsBig = Eyebrows (Big)
marking-EyebrowsBig-eyebrowsthick = Eyebrows (Big)
marking-EyebrowsBigger = Eyebrows (Bigger)
marking-EyebrowsBigger-eyebrowsultra = Eyebrows (Bigger)
marking-EyebrowsUnibrow = Eyebrows (Unibrow)
marking-EyebrowsUnibrow-eyebrowsunibrow = Eyebrows (Unibrow)
marking-HeadHeavyTattoos = Heavy Neck Tattoos
marking-HeadHeavyTattoos-heavy1 = Heavy Neck Tattoos (Lower)
marking-HeadHeavyTattoos-heavy2 = Heavy Neck Tattoos (Upper)
marking-HeadTwisting = Twisted Scar
marking-HeadTwisting-twisting = Twisted Scar
marking-HeadTwistingFlipped = Twisted Scar, Flipped
marking-HeadTwisting-twistingflipped = Twisted Scar, Flipped
marking-HumanoidEyebags = Eyebags
marking-HumanoidEyebags-eyebags = Eyebags
marking-SmileScars = The Jonker
marking-SmileScars-smile = The Jonker
marking-VitiligoHeadJaw = Vitiligo (Jawline)
marking-VitiligoHeadL = Vitiligo (Left Eye)
marking-VitiligoHeadR = Vitiligo (Right Eye)
marking-Shadow = Gloomy
# Snout
marking-HeadSeptum = Septum Ring
marking-HeadSeptum-septum = Septum Ring
# Eyes
# RArm
marking-ArmDollJointsTattooRight = Doll Joints Arm Tattoo (Right)
marking-ArmDollJointsTattooRight-doll = Doll Joints Arm Tattoo (Right)
marking-ArmHeavyTattoosRight = Heavy Arm Tattoos (Right)
marking-ArmHeavyTattoosRight-heavy1 = Heavy Arm Tattoos (Upper)
marking-ArmHeavyTattoosRight-heavy2 = Heavy Arm Tattoos (Lower)
marking-ArmProstheticRight = Prosthetic (Right Arm)
marking-ArmProstheticRight-prosthetic = Prosthetic (Right Arm)
marking-ArmTwistingRight = Twisted Scar (Right Arm)
marking-ArmTwistingRight-twisting = Twisted Scar (Right Arm)
marking-TattooCode4 = Tattoo (Code QR Right Arm)
marking-TattooCode4-code4 = Tattoo
marking-TattooCode5 = Tattoo (Code Bar Right Arm)
marking-TattooCode5-code5 = Tattoo
marking-TattooHeartR = Tattoo (Heart Right Arm)
marking-TattooHeartR-heart = Tattoo
marking-VitiligoArmR = Vitiligo (Right Arm)
# LArm
marking-ArmDollJointsTattooLeft = Doll Joints Arm Tattoo (Left)
marking-ArmDollJointsTattooLeft-doll = Doll Joints Arm Tattoo (Left)
marking-ArmHeavyTattoosLeft = Heavy Arm Tattoos (Left)
marking-ArmHeavyTattoosLeft-heavy1 = Heavy Arm Tattoos (Upper)
marking-ArmHeavyTattoosLeft-heavy2 = Heavy Arm Tattoos (Lower)
marking-ArmProstheticLeft = Prosthetic (Left Arm)
marking-ArmProstheticLeft-prosthetic = Prosthetic (Left Arm)
marking-ArmTwistingLeft = Twisted Scar (Left Arm)
marking-ArmTwistingLeft-twisting = Twisted Scar (Left Arm)
marking-TattooHeartL = Tattoo (Heart Left Arm)
marking-TattooHeartL-heart = Tattoo
marking-VitiligoArmL = Vitiligo (Left Arm)
# RLeg
marking-LegDollJointsTattooRight = Doll Joints Leg Tattoo (Right)
marking-LegDollJointsTattooRight-doll = Doll Joints Leg Tattoo (Right)
marking-LegHeavyTattoosRight = Heavy Leg Tattoos (Right)
marking-LegHeavyTattoosRight-heavy1 = Heavy Leg Tattoos (Upper)
marking-LegHeavyTattoosRight-heavy2 = Heavy Leg Tattoos (Lower)
marking-LegProstheticRight = Prosthetic (Right Leg)
marking-LegProstheticRight-prosthetic = Prosthetic (Right Leg)
marking-LegTwistingRight = Twisted Scar (Right Leg)
marking-LegTwistingRight-twisting = Twisted Scar (Right Leg)
marking-VitiligoLegR = Vitiligo (Right)
# LLeg
marking-LegDollJointsTattooLeft = Doll Joints Leg Tattoo (Left)
marking-LegDollJointsTattooLeft-doll = Doll Joints Leg Tattoo (Left)
marking-LegHeavyTattoosLeft = Heavy Leg Tattoos (Left)
marking-LegHeavyTattoosLeft-heavy1 = Heavy Leg Tattoos (Upper)
marking-LegHeavyTattoosLeft-heavy2 = Heavy Leg Tattoos (Lower)
marking-LegProstheticLeft = Prosthetic (Left Leg)
marking-LegProstheticLeft-prosthetic = Prosthetic (Left Leg)
marking-LegTwistingLeft = Twisted Scar (Left Leg)
marking-LegTwistingLeft-twisting = Twisted Scar (Left Leg)
marking-VitiligoLegL = Vitiligo (Left)
# UndergarmentBottom
marking-UnderwearLowriders = Lowriders
marking-UnderwearLowriders-lowriders = Underwear
marking-UnderwearTanga = Tanga
marking-UnderwearTanga-tanga = Underwear
# UndergarmentTop
marking-UndergarmentTopBinderF = Binder
marking-UndergarmentTopBinderF-binderf = Binder
marking-UndergarmentTopBinderU = Binder
marking-UndergarmentTopBinderU-binder = Binder
marking-UndergarmentTopTanktopF = Tanktop
marking-UndergarmentTopTanktopF-tanktopf = Tanktop
marking-UndergarmentTopTanktopU = Tanktop
marking-UndergarmentTopTanktopU-tanktop = Tanktop
marking-UndershirtBraClassic = Bra
marking-UndershirtBraClassic-classic = Bra
marking-UndershirtBraSports = Bra (Sports)
marking-UndershirtBraSports-sports = Bra
marking-UndershirtBraSportsF = Bra (Sports)
marking-UndershirtBraSportsF-sportsf = Bra
marking-UndershirtBraSportsU = Bra (Sports)
marking-UndershirtBraSportsU-sports = Bra
marking-UndershirtBraStrapless = Bra (Strapless)
marking-UndershirtBraStrapless-strapless = Bra
marking-UndershirtBraStraplessF = Bra (Strapless)
marking-UndershirtBraStraplessF-straplessf = Bra
marking-UndershirtBraStraplessU = Bra (Strapless)
marking-UndershirtBraStraplessU-strapless = Bra
marking-UndershirtDefault = Undershirt
marking-UndershirtDefault-undershirt = Undershirt
marking-UndershirtDefaultF = Undershirt
marking-UndershirtDefaultF-undershirtf = Undershirt
marking-UndershirtDefaultU = Undershirt
marking-UndershirtDefaultU-undershirt = Undershirt
marking-UndershirtGrossSleeveless = Tanktop (Gross)
marking-UndershirtGrossSleeveless-grosssleeveless = Tanktop
marking-UndershirtGrossSleevelessF = Tanktop (Gross)
marking-UndershirtGrossSleevelessF-grosssleevelessf = Tanktop
marking-UndershirtGrossSleevelessU = Tanktop (Gross)
marking-UndershirtGrossSleevelessU-grosssleeveless = Tanktop
marking-UndershirtNanotrasen = Undershirt (Nanotrasen)
marking-UndershirtNanotrasen-nanotrasen = Undershirt
marking-UndershirtNanotrasenF = Undershirt (Nanotrasen)
marking-UndershirtNanotrasenF-nanotrasenf = Undershirt
marking-UndershirtNanotrasenU = Undershirt (Nanotrasen)
marking-UndershirtNanotrasenU-nanotrasen = Undershirt
marking-UndershirtRolled = Undershirt (Cropped)
marking-UndershirtRolled-rolledundershirt = Undershirt
marking-UndershirtRolledF = Undershirt (Cropped)
marking-UndershirtRolledF-rolledundershirtf = Undershirt
marking-UndershirtRolledU = Undershirt (Cropped)
marking-UndershirtRolledU-rolledundershirt = Undershirt
# LFoot
marking-FootDollJointsTattooLeft = Doll Joints Foot Tattoo (Left)
marking-FootDollJointsTattooLeft-doll = Doll Joints Foot Tattoo (Left)
marking-FootHeavyTattoosLeft = Heavy Foot Tattoos (Left)
marking-FootHeavyTattoosLeft-heavy1 = Heavy Foot Tattoos (Inner)
marking-FootHeavyTattoosLeft-heavy2 = Heavy Foot Tattoos (Outer)
marking-FootProstheticLeft-prosthetic = Prosthetic (Left Foot)
marking-FootProstheticLeft = Prosthetic (Left Foot)
# RFoot
marking-FootDollJointsTattooRight = Doll Joints Foot Tattoo (Right)
marking-FootDollJointsTattooRight-doll = Doll Joints Foot Tattoo (Right)
marking-FootHeavyTattoosRight = Heavy Foot Tattoos (Right)
marking-FootHeavyTattoosRight-heavy1 = Heavy Foot Tattoos (Inner)
marking-FootHeavyTattoosRight-heavy2 = Heavy Foot Tattoos (Outer)
marking-FootProstheticRight = Prosthetic (Right Foot)
marking-FootProstheticRight-prosthetic = Prosthetic (Right Foot)
# LHand
marking-HandBraceletLeft = Bracelet (Left)
marking-HandBraceletLeft-bracelet = Bracelet (Left)
marking-HandDollJointsTattooLeft = Doll Joints Hand Tattoo (Left)
marking-HandDollJointsTattooLeft-doll = Doll Joints Hand Tattoo (Left)
marking-HandHeavyTattoosLeft = Heavy Hand Tattoos (Left)
marking-HandHeavyTattoosLeft-heavy1 = Heavy Hand Tattoos (Outer)
marking-HandHeavyTattoosLeft-heavy2 = Heavy Hand Tattoos (Inner)
marking-HandProstheticLeft = Prosthetic (Left Hand)
marking-HandProstheticLeft-prosthetic = Prosthetic (Left Hand)
marking-HandRingsLeft = Rings (Left)
marking-HandRingsLeft-rings1 = Left Index Finger
marking-HandRingsLeft-rings2 = Left Ring Finger
marking-HandTwistingLeft = Twisted Scar (Left Hand)
marking-HandTwistingLeft-twisting = Twisted Scar (Left Hand)
marking-VitiligoHandL = Vitiligo (Left Hand)
# RHand
marking-HandBraceletRight = Bracelet (Right)
marking-HandBraceletRight-bracelet = Bracelet (Right)
marking-HandDollJointsTattooRight = Doll Joints Hand Tattoo (Right)
marking-HandDollJointsTattooRight-doll = Doll Joints Hand Tattoo (Right)
marking-HandHeavyTattoosRight = Heavy Hand Tattoos (Right)
marking-HandHeavyTattoosRight-heavy1 = Heavy Hand Tattoos (Outer)
marking-HandHeavyTattoosRight-heavy2 = Heavy Hand Tattoos (Inner)
marking-HandProstheticRight = Prosthetic (Right Hand)
marking-HandProstheticRight-prosthetic = Prosthetic (Right Hand)
marking-HandRingsRight = Rings (Right)
marking-HandRingsRight-rings1 = Right Index Finger
marking-HandRingsRight-rings2 = Right Ring Finger
marking-HandTwistingRight = Twisted Scar (Right Hand)
marking-HandTwistingRight-twisting = Twisted Scar (Right Hand)
marking-VitiligoHandR = Vitiligo (Right Hand)
# FacialHair
marking-FloralBeard = Beard (Floral)
# Hair
marking-BurqaSolid = Burqa
marking-HairFloralLong = Floral hair (Long)
marking-HairFloralMid = Floral hair (Medium)
marking-HijabFashionable = Hijab (Fashionable)
marking-HijabSimple = Hijab (Simple)
marking-HumanHairFrenchBraid = French Braid
marking-HumanHairGatheredlow = Gathered Low
marking-HumanHairHalfUpShort = Half-Up (Short)
marking-HumanHairHalfUpLong = Half-Up (Long)
marking-HumanHairHalfUpUndercut = Half-Up (Undercut)
marking-HumanHairLowpigtails = Low Pigtails
marking-HumanHairMidPartLong = Middle Part (Long)
marking-HumanHairMidPartLonger = Middle Part (Longer)
marking-HumanHairMullet = Mullet
marking-HumanHairMulletSideshave = Mullet (Sideshave)
marking-HumanHairSpikyPonytailLong = Ponytail (Spiky Long)
marking-HumanHairUndercutCurly = Undercut (Curly)
marking-HumanHairSideshaveCurly = Sideshave (Curly)
marking-MessyPonytail = Messy Ponytail
marking-Niqab = Niqab
marking-TichelFashionable = Tichel (Fashionable)
marking-TichelSimple = Tichel (Simple)
marking-HumanHairShaggy = Shaggy
marking-HumanHairShaggyLonger = Shaggy (Longer)
marking-HumanHairShaggyMessy = Shaggy (Messy)
marking-HumanHairSusie = Mean Girl (Bangs)
marking-HumanHairSusieNoBangs = Mean Girl
marking-HumanHairEyeBangLong = Eye Bang (Long)
marking-HumanHairEyeBangSideTail = Eye Bang (Side Tail)
marking-HumanHairOverEyes = Over Eyes
marking-HumanHairOverEyesTail = Over Eyes (Messy Floor-length)
marking-HumanHairFringeTail = Fringe (Ponytail)
marking-HumanHairFringeRat = Fringe (Low Ponytail)
marking-HumanHairFringeBraid = Fringe (Braid)
marking-HumanHairAsymBun = Asymmetrical Bun
marking-HumanHairIntakeShort = Intake (Short)
marking-HumanHairIntakeLong = Intake (Long)
marking-HumanHairLiberatorTied = Liberator (Tied)
marking-HumanHairLiberatorShort = Liberator (Short)
marking-HumanHairLiberatorLong = Liberator (Long)
marking-HumanHairDrillTail = Drill Ponytail
marking-HumanHairBraidMed = Braided (Medium)
marking-HumanHairLocsTied = Tied Locs
marking-HumanHairCurlyPerm = Curly Perm
marking-HumanHairPosterPerson = Poster Person
marking-HumanHairSmiler = Happy Smiler
marking-HumanHairWavyLong = Wavy (Long)
marking-HumanHairMiddlePartShort = Middle part (Short)
marking-HumanHairFadeHighlight = Fade Highlights
marking-HumanHairChonmage = Chonmage
marking-HumanHairBaldingLong = Balding (Long)
marking-HumanHairBaldingCurls = Balding Curls
marking-HumanHairFriar = Friar
marking-HumanHairAdoringFan = Adoring Fan
marking-HumanHairBabyHair = Baby Hair
marking-HumanHairGuyMullet = Blue Collar
marking-HumanHairGuyTied = Blue Collar (Tied)
marking-HumanHairMidPartPonytail = Foppish
marking-HumanHairMidBangs = Shy Guy (Brave)
marking-HumanHairMidBangsCovered = Shy Guy
marking-HumanHairSideshaveBun = Topknot
marking-HumanHairJed = Pleasant
marking-HumanHairJedPonytail = Pleasant (Tied)
# HeadSide
# HeadTop
marking-HeadEarrings = Earrings (Small)
marking-HeadEarrings-earrings1 = Right Earring
marking-HeadEarrings-earrings2 = Left Earring
marking-HeadEarringsDrop = Earrings (Drop)
marking-HeadEarringsDrop-earringsdrop1 = Right Earring
marking-HeadEarringsDrop-earringsdrop2 = Left Earring
marking-HeadEarringsWeights = Earrings (Weights)
marking-HeadEarringsWeights-earringsweights1 = Right Earring
marking-HeadEarringsWeights-earringsweights2 = Left Earring
# Tail
# RArmExtension

View File

@@ -0,0 +1,348 @@
# Chest
marking-ChestChimeraFemaleMoth = Moth Chest (Chimera)
marking-ChestChimeraFemaleMoth-chimeraf = Chimera
marking-ChestChimeraMaleMoth = Moth Chest (Chimera)
marking-ChestChimeraMaleMoth-chimeram = Chimera
marking-ChestTwistingLeftFemaleMoth = Scar (Twisted Scar Left)
marking-ChestTwistingLeftFemaleMoth-twistingleftf = Twisted Scar (Left)
marking-ChestTwistingLeftMaleMoth = Scar (Twisted Scar Left)
marking-ChestTwistingLeftMaleMoth-twistingleftm = Twisted Scar (Left)
marking-ChestTwistingRightFemaleMoth = Scar (Twisted Scar Right)
marking-ChestTwistingRightFemaleMoth-twistingrightf = Twisted Scar (Right)
marking-ChestTwistingRightMaleMoth = Scar (Twisted Scar Right)
marking-ChestTwistingRightMaleMoth-twistingrightm = Twisted Scar (Right)
marking-ChestStarMoth = Scar (Star)
marking-ChestStarMoth-star = Star Scar
marking-MothBodyClaw = Scar (Claws)
marking-MothBodyClaw-claw = Claw Scars
marking-MothChestGlow = Moth Bioluminescence (Chest)
marking-MothChestGlow-glow = Glow
marking-TorsoIncisionMoth = Scar (Incision)
marking-TorsoIncisionMoth-incision = Torso Incision
# Head
marking-BadmoltMoth = Scar (Bad Molt)
marking-BadmoltMoth-badmolt = Bad Molt
marking-EyebagsMoth = Eye (Eyebags)
marking-EyebagsMoth-eyebags = Eyebags
marking-HeadChimeraMoth = Moth Head (Chimera)
marking-HeadChimeraMoth-chimera = Chimera
marking-HeadTwistingMoth = Scar (Twisted)
marking-HeadTwistingMoth-twisting = Twisted Scar
marking-MothBurnLeft = Burn Scar (Left)
marking-MothBurnLeft-burnleft = Burn Scar (Left)
marking-MothBurnRight = Burn Scar (Right)
marking-MothBurnRight-burnright = Burn Scar (Right)
marking-MothFaceClaw = Claw Scars (Face)
marking-MothFaceClaw-claw = Claw Scars (Face)
marking-MothHeadGlow = Moth Bioluminescence (Head)
marking-MothHeadGlow-glow = Glow
marking-MothSlashLeft = Scar (Claw Left)
marking-MothSlashLeft-slashleft = Claw Scars (Left)
marking-MothSlashRight = Scar (Claw Right)
marking-MothSlashRight-slashright = Claw Scars (Right)
# Snout
marking-MouthpartsFulgoridae = Mouthparts (Fulgoridae)
marking-MouthpartsFulgoridaeUpturned = Mouthparts (Fulgoridae Upturned)
marking-MouthpartsHymenoptera = Mouthparts (Hymenoptera)
marking-MouthpartsHymenopteraLarge = Mouthparts (Hymenoptera Large)
marking-MouthpartsProboscisDownturned = Mouthparts (Proboscis Downturned)
marking-MouthpartsProboscisDownturned-proboscisdownturned = Mouthparts (Proboscis Downturned)
marking-MouthpartsProboscisUpturned = Mouthparts (Proboscis Upturned)
marking-MouthpartsProboscisUpturned-proboscisupturned = Mouthparts (Proboscis Upturned)
marking-MouthpartsSchistocerca = Mouthparts (Schistocerca)
# Eyes
marking-HeterochromiaMoth = Eyes (Heterophobia)
marking-HeterochromiaMoth-heterochromia = Heterophobia
marking-MothBiggerEyes = Eyes (Large)
marking-MothBiggerEyes-bigger = Bigger Eyes
# RArm
marking-ProstheticArmRightMoth = Prosthetic (Right Arm)
marking-ProstheticArmRightMoth-prosthetic = Prosthetic (Right Arm)
marking-TwistingArmRightMoth = Scar (Twisted Right Arm)
marking-TwistingArmRightMoth-twisting = Twisted Scar (Right)
# LArm
marking-ChimeraArmLeftMoth = Moth Left Arm (Chimera)
marking-ChimeraArmLeftMoth-chimera = Chimera (Arm)
marking-ProstheticArmLeftMoth = Prosthetic (Left Arm)
marking-ProstheticArmLeftMoth-prosthetic = Prosthetic (Left Arm)
marking-TwistingArmLeftMoth = Scar (Twisted Left Arm)
marking-TwistingArmLeftMoth-twisting = Twisted Scar (Left Arm)
# RLeg
marking-LegProstheticRightMoth = Prosthetic (Right Leg)
marking-LegProstheticRightMoth-prosthetic = Prosthetic (Right Leg)
marking-LegTwistingRightMoth = Scar (Twisted Right Leg)
marking-LegTwistingRightMoth-twisting = Twisted Scar (Right)
# LLeg
marking-LegChimeraLeftMoth = Moth left Leg (Chimera)
marking-LegChimeraLeftMoth-chimera = Chimera (Leg)
marking-LegProstheticLeftMoth = Prosthetic (Left Leg)
marking-LegProstheticLeftMoth-prosthetic = Prosthetic (Left Leg)
marking-LegTwistingLeftMoth = Scar (Twisted Left Leg)
marking-LegTwistingLeftMoth-twisting = Twisted Scar (Left)
# UndergarmentBottom
# UndergarmentTop
# LFoot
marking-FootChimeraLeftMoth = Moth Left Foot (Chimera)
marking-FootChimeraLeftMoth-chimera = Chimera (Foot)
marking-FootProstheticLeftMoth = Prosthetic (Left Foot)
marking-FootProstheticLeftMoth-prosthetic = Prosthetic (Left Foot)
# RFoot
marking-FootProstheticRightMoth = Prosthetic (Right Foot)
marking-FootProstheticRightMoth-prosthetic = Prosthetic (Right Foot)
# LHand
marking-HandChimeraLeftMoth = Moth Left Hand (Chimera)
marking-HandChimeraLeftMoth-chimera = Chimera (Hand)
marking-HandProstheticLeftMoth = Prosthetic (Left Hand)
marking-HandProstheticLeftMoth-prosthetic = Prosthetic (Left Hand)
marking-HandTwistingLeftMoth = Scar (Twisted Left Hand)
marking-HandTwistingLeftMoth-twisting = Twisted Scar (Left Hand)
# RHand
marking-HandProstheticRightMoth = Prosthetic (Right Hand)
marking-HandProstheticRightMoth-prosthetic = Prosthetic Hand (Right)
marking-HandTwistingRightMoth = Scar (Twisted Right Hand)
marking-HandTwistingRightMoth-twisting = Twisted Scar (Right Hand)
# FacialHair
# Hair
# HeadSide
marking-PlateBlunt = Head (Blunt)
marking-PlateHeart = Head (Heart)
marking-PlateDaisy = Head (Daisy)
marking-PlateHorn = Head (Horned)
marking-PlateSmallSpike = Head (Spike)
# HeadTop
marking-MothBeetleHorn1 = Beetle Horn (Pronged)
marking-MothBeetleHorn1-beetlehorn1 = Beetle Horn (Pronged)
marking-MothBeetleHorn2 = Beetle Horn (Lance)
marking-MothBeetleHorn2-beetlehorn2 = Beetle Horn (Lance)
marking-MothGlowAntenna = Antennae (Firefly)
marking-MothGlowAntenna-glowantenna = Antennae
marking-AntennaCockroach = Antennae (Cockroach)
marking-AntennaCockroach-cockroach = Antennae
marking-AntennaHeart = Antennae (Heartbrush)
marking-AntennaHeart-heart1 = Antennae
marking-AntennaHeart-heart2 = Heart
marking-AntennaFly = Antennae (Fly)
marking-AntennaFly-fly = Antennae
marking-AntennaShort = Antennae (Locust)
marking-AntennaShort-nub = Antennae
# Tail
marking-LunaWings = Wings (Luna Moth)
marking-LunaWings-luna_neck = Neck
marking-LunaWings-luna_primary_front = Wings
marking-LunaWings-luna_secondary_front = Spots
marking-MothBee = Wings (Bumblebee)
marking-MothBee-bee_neck = Neck
marking-MothBee-bee_primary_front = Wings
marking-MothBee-bee_secondary_front = Outer stripes
marking-MothBee-bee_tertiary_front = Inner stripe
marking-MothBeetleTail = Wings (Junebug)
marking-MothBeetleTail-beetle_neck = Neck
marking-MothBeetleTail-beetle_primary_front = Outline
marking-MothBeetleTail-beetle_secondary_front = Wings
marking-MothBeetleTail-beetle_tertiary_behind = Inner wings
marking-MothFirefly = Wings (Firefly Underlay)
marking-MothFirefly-firefly_neck = Neck
marking-MothFirefly-firefly_primary_front = Firefly Wings
marking-MothFireflyOverlay = Firefly (Overlay)
marking-MothFireflyOverlay-firefly_secondary_front = Firefly (Overlay)
marking-MothGlasswing = Wings (Glasswing)
marking-MothGlasswing-glasswing_neck = Neck
marking-MothGlasswing-glasswing_primary_front = Inner
marking-MothGlasswing-glasswing_secondary_front = Outer
marking-MothGlasswing-glasswing_tertiary_front = Stripe
marking-MothRhinoBeetle = Whings (Rhino Beetle)
marking-MothRhinoBeetle-rhinobeetle_neck = Neck
marking-MothRhinoBeetle-rhinobeetle_primary_front = Outline
marking-MothRhinoBeetle-rhinobeetle_secondary_front = Wings
marking-MothSnoth = Wings (Snoth)
marking-MothSnoth-snoth_neck = Neck
marking-MothSnoth-snoth_primary_front = Wings
marking-MothSnoth-snoth_secondary_front = Shell
marking-MothTrueButterfly = Wings (Rainbow)
marking-MothTrueButterfly-truebutterfly_neck = Neck
marking-MothTrueButterfly-truebutterfly_primary_front = Wings
marking-MothTrueButterfly-truebutterfly_secondary_front = Stripes
marking-MothTrueButterfly-truebutterfly_tertiary_front = Dots
marking-WingsBackstabbed = Wings (Backstabbed)
marking-WingsBackstabbed-backstabbed_neck = Neck
marking-WingsBackstabbed-backstabbed_primary_front = Wings
marking-WingsFly = Wings (Fly)
marking-WingsFly-fly_neck = Neck
marking-WingsFly-fly_primary_front = Wings
marking-WingsFly-fly_secondary_front = Tail
marking-WingsDragonfly = Wings (Dragonfly)
marking-WingsDragonfly-dragonfly_neck = Neck
marking-WingsDragonfly-dragonfly_primary_front = Wings
marking-WingsDragonfly-dragonfly_secondary_front = Tail
marking-WingsLanternfly = Wings (Lanternfly)
marking-WingsLanternfly-lanternfly_neck = Neck
marking-WingsLanternfly-lanternfly_primary_front = Wings
marking-WingsPyrausta = Wings (Pyrausta)
marking-WingsPyrausta-pyr_neck = Neck
marking-WingsPyrausta-pyr_wing_front = Wings
marking-WingsPyrausta-pyr_inner_front = Inner wing
marking-WingsPyrausta-pyr_stripes_front = Stripes
# Tail, upstream variations
marking-MothWingsDefault-default_neck = Neck
marking-MothWingsDefault-default_primary_front = Wing
marking-MothWingsDefault-default_secondary_front = Spots
marking-MothWingsCharred-charred_neck = Neck
marking-MothWingsCharred-charred_primary_front = Wing
marking-MothWingsDbushy-dbushy_neck = Neck
marking-MothWingsDbushy-dbushy_primary_front = Primary
marking-MothWingsDbushy-dbushy_secondary_front = Secondary
marking-MothWingsDeathhead-deathhead_neck = Neck
marking-MothWingsDeathhead-deathhead_primary_front = Primary
marking-MothWingsDeathhead-deathhead_secondary_front = Secondary
marking-MothWingsFan-fan_neck = Neck
marking-MothWingsFan-fan_primary_front = Wing
marking-MothWingsFan-fan_secondary_front = Stripes
marking-MothWingsDfan-dfan_neck = Neck
marking-MothWingsDfan-dfan_primary_front = Wing
marking-MothWingsDfan-dfan_secondary_front = Stripes
marking-MothWingsFeathery-feathery_neck = Neck
marking-MothWingsFeathery-feathery_primary_front = Wing
marking-MothWingsFirewatch-firewatch_neck = Neck
marking-MothWingsFirewatch-firewatch_primary_front = Primary
marking-MothWingsFirewatch-firewatch_secondary_front = Secondary
marking-MothWingsGothic-gothic_neck = Neck
marking-MothWingsGothic-gothic_primary_front = Wing
marking-MothWingsGothic-gothic_secondary_front = Secondary
marking-MothWingsJungle-jungle_neck = Neck
marking-MothWingsJungle-jungle_primary_front = Wing
marking-MothWingsLadybug-ladybug_neck = Neck
marking-MothWingsLadybug-ladybug_primary_front = Wing
marking-MothWingsLadybug-ladybug_secondary_front = Spots
marking-MothWingsMaple-maple_neck = Neck
marking-MothWingsMaple-maple_primary_front = Primary
marking-MothWingsMaple-maple_secondary_front = Secondary
marking-MothWingsMoffra-moffra_neck = Neck
marking-MothWingsMoffra-moffra_primary_front = Primary
marking-MothWingsMoffra-moffra_secondary_front = Secondary
marking-MothWingsOakworm-oakworm_neck = Neck
marking-MothWingsOakworm-oakworm_primary_front = Wing
marking-MothWingsPlasmafire-plasmafire_neck = Neck
marking-MothWingsPlasmafire-plasmafire_primary_front = Primary
marking-MothWingsPlasmafire-plasmafire_secondary_front = Secondary
marking-MothWingsPointy-pointy_neck = Neck
marking-MothWingsPointy-pointy_primary_front = Wing
marking-MothWingsRoyal-royal_neck = Neck
marking-MothWingsRoyal-royal_primary_front = Primary
marking-MothWingsRoyal-royal_secondary_front = Secondary
marking-MothWingsStellar-stellar_neck = Neck
marking-MothWingsStellar-stellar_primary_front = Wing
marking-MothWingsStriped-striped_neck = Neck
marking-MothWingsStriped-striped_primary_front = Wing
marking-MothWingsSwirly-swirly_neck = Neck
marking-MothWingsSwirly-swirly_primary_front = Wing
marking-MothWingsWhitefly-whitefly_neck = Neck
marking-MothWingsWhitefly-whitefly_primary_front = Wing
marking-MothWingsWitchwing-witchwing_neck = Neck
marking-MothWingsWitchwing-witchwing_primary_front = Wing
marking-MothWingsUnderwing-underwing_neck = Neck
marking-MothWingsUnderwing-underwing_primary_front = Primary
marking-MothWingsUnderwing-underwing_secondary_front = Secondary
# RArmExtension

View File

@@ -0,0 +1,134 @@
# Chest
marking-BadMoltChest = Scar (Bad Molt)
marking-BadMoltChest-badmolt = Scar (Bad Molt)
# Head
marking-BadMoltHead = Scar (Bad Molt)
marking-BadMoltHead-badmolt = Scar (Bad Molt)
marking-ScarSlash = Scar (Slash)
marking-ScarSlash-snoutscar = Scar (Slash)
marking-ScarTalons = Scar (Talonmark)
marking-ScarTalons-talonscar = Scar (Talonmark)
# Snout
marking-Fangs = Lizard Fangs
marking-Fangs-Fangs = Fangs
marking-LizardBeard = Lizard Beard
marking-LizardBeard-beard = Beard
marking-LizardDroopySnout = Lizard Snout (Droopy)
marking-LizardDroopySnout-droopy = Snout
marking-LizardSnoutpiercings = Piercings
marking-LizardSnoutpiercings-piercings1 = Piercings
marking-LizardSnoutTall = Lizard Snout (Tall)
marking-LizardSnoutTall-tall = Snout
marking-LizardUpperSnout = Lizard Snout (High Nostrils)
marking-LizardUpperSnout-upper = Snout
# Eyes
# RArm
marking-BadMoltRArm = Scar (Bad Molt R)
marking-BadMoltRArm-badmolt = Scar (Bad Molt R)
# LArm
marking-BadMoltLArm = Scar (Bad Molt L)
marking-BadMoltLArm-badmolt = Scar (Bad Molt L)
# RLeg
# LLeg
# UndergarmentBottom
marking-UnderwearLowridersR = Lowriders
marking-UnderwearLowridersR-lowriders = Underwear
marking-UnderwearTangaR = Tanga
marking-UnderwearTangaR-tanga = Underwear
# UndergarmentTop
# LFoot
# RFoot
# LHand
# RHand
# FacialHair
# Hair
# HeadSide
marking-BurqaSolidLizard = Burqa
marking-BurqaSolidLizard-burqasolidlizard = Burqa
marking-HijabFashionableLizard = Hijab (Fashionable)
marking-HijabFashionableLizard-hijabchiclizard = Hijab (Fashionable)
marking-HijabSimpleLizard = Hijab (Simple)
marking-HijabSimpleLizard-hijabsimplelizard = Hijab (Simple)
marking-LizardKoboldEarsMid = Lizard Ears (Kobold Soft)
marking-LizardKoboldEarsMid-koboldearsmid = Ears
marking-LizardKoboldEarsTall = Lizard Ears (Kobold Stiff)
marking-LizardKoboldEarsTall-koboldearstall = Ears
marking-NiqabLizard = Niqab
marking-NiqabLizard-niqablizard = Niqab
marking-TichelSimpleLizard = Tichel (Simple)
marking-TichelSimpleLizard-tichelsimplelizard = Tichel (Simple)
marking-TichelFashionableLizard = Tichel (Fashionable)
marking-TichelFashionableLizard-tichelfashionablelizard = Tichel (Fashionable)
# HeadTop
marking-LizardHeadFlat = Flat Head
marking-LizardHeadFlat-flat = Flat Head
marking-LizardFrill = Head Frill
marking-LizardFrill-frill = Head Frill
marking-LizardHornsKoboldEarspiercings = Lizard Ears (Kobold, Pierced)
marking-LizardHornsKoboldEarspiercings-koboldears = Ears
marking-LizardHornsKoboldEarspiercings-kobold_earspiercings = Piercings
marking-LizardHornsNubby-nubby = Lizard Horns (Nubby)
marking-LizardHornsNubby = Lizard Horns (Nubby)
marking-LizardLittleHorns = Lizard Horns (Small)
marking-LizardLittleHorns-small = Horns
# Tail
marking-TailDropped = Dropped Tail
marking-TailDropped-dropped = Dropped Tail
marking-TailGecko = Gecko Tail
marking-TailGecko-gecko1 = Gecko Tail
marking-TailGecko-gecko2 = Spots
marking-TailSnailLizard = Snail Shell
marking-TailSnailLizard-snizard1 = Shell
marking-TailSnailLizard-snizard2 = Tail
marking-TailSnailLizard-snizard3 = Undertail
# RArmExtension

View File

@@ -0,0 +1,120 @@
# Chest
marking-bubble = Bubbles
marking-bubble-bubble = Bubbles
marking-fishbowl = Fishbowl
marking-fishbowl-fishbowl1 = Fish
marking-fishbowl-fishbowl2 = Fish bubbles
marking-SlimeBonechest = Floating Ribcage
marking-SlimeBonechest-bone = Floating Ribcage
marking-SlimeCore = Core
marking-SlimeCore-core = Core
marking-SlimeCoreGlowing = Core (Glowing)
marking-SlimeCoreGlowing-core = Core (Glowing)
marking-SlimeLungs = Lungs
marking-SlimeLungs-lungs = Lungs
# Head
marking-FadingStars = Fading Starlight
marking-FadingStars-fadingstars1 = Brightest
marking-FadingStars-fadingstars2 = Middling
marking-FadingStars-fadingstars3 = Darkest
marking-fizz = Fizz
marking-fizz-fizz = Fizz
marking-SlimeBonehead = Floating Skull
marking-SlimeBonehead-bone = Floating Skull
marking-SlimeNose = Nose (Profile)
marking-SlimeNose-nose = Nose (Profile)
marking-SlimeMouth = Mouth
marking-SlimeMouth-mouth = Mouth
marking-SlimeBrain = Brain
marking-SlimeBrain-brain = Brain
# Snout
# Eyes
marking-SlimeEyesDefault = Eyes
marking-SlimeEyesDefault-eyes = Eyes (Default)
marking-SlimeEyeglow = Glowing Eyes
marking-SlimeEyeglow-glow = Glowing Eyes
marking-SlimeEyesDroopy = Droopy Eyes
marking-SlimeEyesDroopy-droopy = Droopy Eyes
marking-SlimeEyesDroopyGlowing = Droopy Glowing Eyes
marking-SlimeEyesDroopyGlowing-droopyglow = Droopy Glowing Eyes
marking-SlimeEyesCyclops = Cyclops Eye
marking-SlimeEyesCyclops-cyclops = Cyclops Eye
marking-SlimeEyesCyclopsGlowing = Cyclops Glowing Eye
marking-SlimeEyesCyclopsGlowing-cyclopsglow = Cyclops Glowing Eye
# RArm
marking-SlimeBonearmright = Floating Bones (Right Arm)
marking-SlimeBonearmright-bone = Floating Bones (Right Arm)
# LArm
marking-SlimeBonearmleft = Floating Bones (Left Arm)
marking-SlimeBonearmleft-bone = Floating Bones (Left Arm)
# RLeg
marking-SlimeBonelegright = Floating Bones (Right Leg)
marking-SlimeBonelegright-bone = Floating Bones (Right Leg)
# LLeg
marking-SlimeBonelegleft = Floating Bones (Left Leg)
marking-SlimeBonelegleft-bone = Floating Bones (Left Leg)
# UndergarmentBottom
# UndergarmentTop
# LFoot
marking-SlimeBonefootleft = Floating Bones (Left Foot)
marking-SlimeBonefootleft-bone = Floating Bones (Left Foot)
# RFoot
marking-SlimeBonefootright = Floating Bones (Right Foot)
marking-SlimeBonefootright-bone = Floating Bones (Right Foot)
# LHand
marking-SlimeBonehandleft = Floating Bones (Left Hand)
marking-SlimeBonehandleft-bone = Floating Bones (Left Hand)
# RHand
marking-SlimeBonehandright = Floating Bones (Right Hand)
marking-SlimeBonehandright-bone = Floating Bones (Right Hand)
# FacialHair
# Hair
# HeadSide
# HeadTop
# Tail
# RArmExtension

View File

@@ -0,0 +1,319 @@
# Chest
marking-ScarsVoxClawTorso = Claw Scar
marking-ScarsVoxClawTorso-claw = Claw Scar
marking-SpotsChest = Spotted Chest
marking-SpotsChest-spots1 = Spots
marking-SpotsChest-spots2 = Belly
marking-VChest = Vee
marking-VChest-v1 = Top
marking-VChest-v2 = Middle
marking-VChest-v3 = Bottom
marking-VoxBelly = Belly
marking-VoxBelly-belly = Belly
marking-VoxChestPlumage = Chest Plumage
marking-VoxChestPlumage-plumage = Chest Plumage
marking-VoxScarIncision = Scar (Incision)
marking-VoxScarIncision-scarincision = Scar (Incision)
marking-VoxScarMangled = Scar (Mangled)
marking-VoxScarMangled-scarmangled = Scar (Mangled)
marking-VoxScarSpinal = Scar (Spinal)
marking-VoxScarSpinal-scarspinal = Scar (Spinal)
marking-VoxTailSingleStripe = Single Tail Stripe
marking-VoxTailSingleStripe-tailsinglestripe = Single Tail Stripe
marking-VoxTailStripes = Tail Stripes
marking-VoxTailStripes-tailstripes = Tail Stripes
# Head
marking-ScarsVoxBigslashLeftHead = Big Slash (Left)
marking-ScarsVoxBigslashLeftHead-bigslashleft = Big Slash (Left)
marking-ScarsVoxBigslashRightHead = Big Slash (Right)
marking-ScarsVoxBigslashRightHead-roadrashright = Big Slash (Right)
marking-ScarsVoxRoadrashLeftHead = Road Rash (Left)
marking-ScarsVoxRoadrashLeftHead-roadrashleft = Road Rash (Left)
marking-ScarsVoxRoadrashRightHead = Road Rash (Right)
marking-ScarsVoxRoadrashRightHead-roadrashright = Road Rash (Right)
marking-ScarsVoxSlashLeftHead = Slash (Left)
marking-ScarsVoxSlashLeftHead-slashleft = Slash (Left)
marking-ScarsVoxSlashRightHead = Slash (Right)
marking-ScarsVoxSlashRightHead-slashright = Slash (Right)
marking-VoxCheeks = Cheeks
marking-VoxCheeks-cheeks = Cheeks
marking-VoxEarhole = Tympanic Membrane
marking-VoxEarhole-earhole = Tympanic Membrane
marking-VoxHeadGradient = Gradient
marking-VoxHeadGradient-gradient1 = Front
marking-VoxHeadGradient-gradient2 = Middle
marking-VoxHeadGradient-gradient3 = Back
marking-VoxNeckband = Neckband
marking-VoxNeckband-neckband = Neckband
marking-VoxScarBlasted = Scar (Blasted)
marking-VoxScarBlasted-scarheadblasted = Scar (Blasted)
# Snout
marking-VoxBeakColor = Colorable Beak
marking-VoxBeakColor-color = Colorable Beak
marking-VoxBeakSplit = Split Color Beak
marking-VoxBeakSplit-split1 = Top
marking-VoxBeakSplit-split2 = Bottom
marking-VoxBeakTipped = Tipped Beak
marking-VoxBeakTipped-tipped = Tipped Beak
# Eyes
# RArm
marking-SpotsArmR = Spotted Arm R
marking-SpotsArmR-spots = Spotted Arm R
marking-VoxArmsStripesRHand = Stripes (Right Arm)
marking-VoxArmsStripesRHand-stripes = Stripes (Right Arm)
marking-VoxRArmScales = Arm Scales R
# LArm
marking-SpotsArmL = Spotted Arm L
marking-SpotsArmL-spots = Spotted Arm L
marking-VoxArmsStripesLHand = Stripes (Left Arm)
marking-VoxArmsStripesLHand-stripes = Stripes (Left Arm)
marking-VoxLArmScales = Arm Scales L
# RLeg
marking-FeatheredLegR = Feathered Leg R
marking-FeatheredLegR-feathered = Feathered Leg R
marking-VoxLegGradientRLeg = Solid (Right Leg)
marking-VoxLegGradientRLeg-gradient = Solid (Right Leg)
marking-VoxLegsStripesRLeg = Stripes (Right)
marking-VoxLegsStripesRLeg-stripes = Stripes (Right)
marking-VoxRLegScales = Leg Scales R
# LLeg
marking-FeatheredLegL = Feathered Leg L
marking-FeatheredLegL-feathered = Feathered Leg L
marking-VoxLegGradientLLeg = Solid (Left Leg)
marking-VoxLegGradientLLeg-gradient = Solid (Left Leg)
marking-VoxLegsStripesLLeg = Stripes (Left)
marking-VoxLegsStripesLLeg-stripes = Stripes (Left)
marking-VoxLLegScales = Leg Scales L
# UndergarmentBottom
marking-UnderwearBriefsVox = Briefs (Soft)
marking-UnderwearBriefsVox-underwearbriefs = Briefs
marking-UnderwearHighWaisted = High Waisted
marking-UnderwearHighWaisted-highwaisted = High Waisted
marking-UnderwearIxixSpecial = Modest Underwear
marking-UnderwearIxixSpecial-ixixspecial1 = Band
marking-UnderwearIxixSpecial-ixixspecial2 = Cup
marking-UnderwearLowridersV = Lowriders
marking-UnderwearLowridersV-lowriders = Underwear
marking-UnderwearStrappy = Belted
marking-UnderwearStrappy-strappy1 = Belt
marking-UnderwearStrappy-strappy2 = Belt
marking-UnderwearStrappy-strappy3 = Underwear
marking-UnderwearTangaV = Tanga
marking-UnderwearTangaV-tanga_vox = Underwear
# UndergarmentTop
# LFoot
marking-VoxFootGradientLFoot = Solid (Left Foot)
marking-VoxFootGradientLFoot-gradient = Solid (Left Foot)
marking-VoxLFootScales = Foot Scales L
# RFoot
marking-VoxFootGradientRFoot = Solid (Right Foot)
marking-VoxFootGradientRFoot-gradient = Solid (Right Foot)
marking-VoxRFootScales = Foot Scales R
# LHand
marking-VoxHandGradientLHand = Gradient (Left Hand)
marking-VoxHandGradientLHand-gradient1 = Bottom
marking-VoxHandGradientLHand-gradient2 = Middle
marking-VoxHandGradientLHand-gradient3 = Top
marking-VoxLArmProsthetic = Prosthetic (Left)
marking-VoxLArmProsthetic-prosthetic = Prosthetic (Left)
marking-VoxLHandScales = Hand Scales L
# RHand
marking-VoxHandGradientRHand = Gradient (Right Hand)
marking-VoxHandGradientRHand-gradient1 = Bottom
marking-VoxHandGradientRHand-gradient2 = Middle
marking-VoxHandGradientRHand-gradient3 = Top
marking-VoxRArmProsthetic = Prosthetic (Right)
marking-VoxRArmProsthetic-prosthetic = Prosthetic (Right)
marking-VoxRHandScales = Hand Scales R
# FacialHair
marking-BeardPadovana = Padovana
marking-BeardPadovana-padovana = Padovana
marking-LargeWattle = Wattle (Large)
marking-LargeWattle-largewattle = Wattle (Large)
marking-SmallWattle = Wattle (Small)
marking-SmallWattle-smallwattle = Wattle (Small)
# Hair
marking-HairPadovana = Padovana
marking-HairPadovana-padovana = Padovana
marking-HijabSimpleVox = Hijab (Simple)
marking-HijabSimpleVox-hijabsimple = Hijab (Simple)
marking-HijabFashionableVox = Hijab (Fashionable)
marking-HijabFashionableVox-hijabchic = Hijab (Fashionable)
marking-LargeComb = Comb (Large)
marking-LargeComb-largecomb = Comb (Large)
marking-TichelSimpleVox = Tichel (Simple)
marking-TichelSimpleVox-tichelsimple = Tichel (Simple)
marking-TichelFashionableVox = Tichel (Fashionable)
marking-TichelFashionableVox-tichelfashionable = Tichel (Fashionable)
marking-VoxBald = Balding
marking-VoxBald-balding = Balding
marking-VoxEmover = Emover
marking-VoxEmover-hairemover = Emover
marking-VoxPolish = Polish
marking-VoxPolish-hairpolish = Polish
marking-VoxWindswept = Windswept
marking-VoxWindswept-hairwindswept = Windswept
# HeadSide
marking-SideQuills = Quills
marking-SideQuills-quills1 = Top and bottom
marking-SideQuills-quills2 = Middle top
marking-SideQuills-quills3 = Middle bottom
marking-VoxStreamers = Streamers
marking-VoxStreamers-streamers1 = Quill
marking-VoxStreamers-streamers2 = Flue
marking-VoxStreamers-streamers3 = Eye
# HeadTop
# Tail
marking-FriendsOfAFeather = Feather of a Friend
marking-FriendsOfAFeather-friendsfeather1 = Feather
marking-FriendsOfAFeather-friendsfeather2 = Feather
marking-SpotsTail = Spotted Tail
marking-SpotsTail-spots= Spotted Tail
marking-TailBloom = Bloom
marking-TailBloom-bloom1 = Flower
marking-TailBloom-bloom2 = Flower
marking-TailBloom-bloom3 = Bush
marking-VoxChains = Chains
marking-VoxChains-chains = Chains
marking-VoxCocktail = Cocktail
marking-VoxCocktail-cocktail1 = Feathers
marking-VoxCocktail-cocktail2 = Feathers
marking-VoxCocktail-cocktail3 = Feathers
marking-VoxCocktail-cocktail4 = Tail
marking-VoxFootSpines = Leg Spines
marking-VoxFootSpines-footspines = Leg Spines
marking-VoxTailBack = Back Tail
marking-VoxBackTail-colorable = Back Tail
marking-VoxTailBalled = Thrasher
marking-VoxTailBalled-balled = Thrasher
marking-VoxTailBell = Bell
marking-VoxTailBell-bell1 = Bell
marking-VoxTailBell-bell2 = Back Tail
marking-VoxTailLantern = Lantern
marking-VoxTailLantern-lantern = Lantern
marking-VoxTailNub = Nub
marking-VoxTailNub-nub1 = Tail
marking-VoxTailNub-nub2 = Scar
marking-VoxTailRaptor = Raptor
marking-VoxTailRaptor-raptor = Tail
marking-VoxTailShort1 = Short Down
marking-VoxTailShort1-short1 = Tail
marking-VoxTailShort2 = Short Up
marking-VoxTailShort2-short2 = Tail
marking-VoxTailSmallPlume = Small Plume
marking-VoxTailSmallPlume-smallplume = Small Plume
marking-VoxTailSpines = Tail Spines
marking-VoxTailSpines-spines = Tail Spines
marking-VoxTailSplitImp = Twinned
marking-VoxTailSplit-split = Twinned
marking-VoxSunAndMoon = Sun and Moon
marking-VoxSunAndMoon-sunandmoon = Sun and Moon
marking-VoxTail = Default Tail [DO NOT USE]
# RArmExtension

View File

@@ -0,0 +1 @@
markings-category-Eyes = Eyes

View File

@@ -0,0 +1,2 @@
lathe-menu-mining-points = Mining Points: {$points}
lathe-menu-mining-points-claim-button = Claim Points

View File

@@ -0,0 +1,7 @@
docking-console-no-shuttle = No Shuttle Detected
docking-console-ftl = FTL
mining-console-window-title = Mining Shuttle Console
shuttle-destination-lavaland = Lavaland
shuttle-destination-glacier-surface = Glacier Surface

View File

@@ -0,0 +1,4 @@
shop-vendor-balance = Balance: {$points}
shop-vendor-stack-suffix = x{$count}
shop-vendor-flavor-left = All payments are secure
shop-vendor-flavor-right = v1.2

View File

@@ -0,0 +1,3 @@
ash-storm-telegraph = [color=red][bold]An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter.[/bold][/color]
ash-storm-alert = [color=red][bolditalic]Smoldering clouds of scorching ash billow down around you! Get inside![/bolditalic][/color]
ash-storm-clearing = [color=red]The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now.[/color]

View File

@@ -7,14 +7,14 @@ game-ticker-unknown-role = Unknown
game-ticker-delay-start = Round start has been delayed for {$seconds} seconds.
game-ticker-pause-start = Round start has been paused.
game-ticker-pause-start-resumed = Round start countdown is now resumed.
game-ticker-player-join-game-message = Welcome to Space Station 14! If this is your first time playing, be sure to read the game rules, and don't be afraid to ask for help in LOOC (local OOC) or OOC (usually available only between rounds).
game-ticker-get-info-text = Hi and welcome to [color=white]Space Station 14![/color]
game-ticker-player-join-game-message = Welcome to TBD Station 14! If this is your first time playing, be sure to read the rules, and don't be afraid to ask for help in LOOC (local OOC, only for people near you) or OOC (global, can be heard from anywhere by anyone)!
game-ticker-get-info-text = Hi and welcome to [color=white]TBD Station 14![/color]
The current round is: [color=white]#{$roundId}[/color]
The current player count is: [color=white]{$playerCount}[/color]
The current map is: [color=white]{$mapName}[/color]
The current game mode is: [color=white]{$gmTitle}[/color]
>[color=yellow]{$desc}[/color]
game-ticker-get-info-preround-text = Hi and welcome to [color=white]Space Station 14![/color]
game-ticker-get-info-preround-text = Hi and welcome to [color=white]TBD Station 14![/color]
The current round is: [color=white]#{$roundId}[/color]
The current player count is: [color=white]{$playerCount}[/color] ([color=white]{$readyCount}[/color] {$readyCount ->
[one] is

View File

@@ -1,6 +1,6 @@
### Connecting dialog when you start up the game
connecting-title = Space Station 14
connecting-title = TBD Station 14
connecting-exit = Exit
connecting-retry = Retry
connecting-reconnect = Reconnect
@@ -11,7 +11,7 @@ connecting-in-progress = Connecting to server...
connecting-disconnected = Disconnected from server:
connecting-tip = Don't die!
connecting-window-tip = Tip { $numberTip }
connecting-version = ver 0.1
connecting-version = ver 0.67
connecting-fail-reason = Failed to connect to server:
{ $reason }
connecting-state-NotConnecting = Not connecting

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,495 @@
meta:
format: 6
postmapinit: false
tilemap:
0: Space
74: FloorMono
84: FloorReinforced
89: FloorShuttleBlue
98: FloorSteel
130: Lattice
131: Plating
entities:
- proto: ""
entities:
- uid: 1
components:
- type: MetaData
name: Mining Shuttle
- type: Transform
- type: MapGrid
chunks:
0,0:
ind: 0,0
tiles: YgAAAAAAYgAAAAAASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAgwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
0,-1:
ind: 0,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAgwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAWQAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
-1,-1:
ind: -1,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAWQAAAAAA
version: 6
-1,0:
ind: -1,0
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
- type: Broadphase
- type: Physics
bodyStatus: InAir
angularDamping: 0.05
linearDamping: 0.05
fixedRotation: False
bodyType: Dynamic
- type: Fixtures
fixtures: {}
- type: OccluderTree
- type: SpreaderGrid
- type: Shuttle
- type: MiningShuttle
- type: DockingShuttle
destinations: []
- type: ProtectedGrid
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg
- type: GridPathfinding
- type: DecalGrid
chunkCollection:
version: 2
nodes: []
- type: GridAtmosphere
version: 2
data:
tiles:
0,0:
0: 823
1: 16384
0,-1:
0: 13072
1: 64
-1,0:
0: 2184
1: 16384
-1,-1:
0: 34816
1: 64
uniqueMixes:
- volume: 2500
temperature: 293.15
moles:
- 21.824879
- 82.10312
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- volume: 2500
immutable: True
moles:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- proto: AirlockShuttle
entities:
- uid: 2
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- proto: APCBasic
entities:
- uid: 3
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-1.5
parent: 1
- proto: AtmosDeviceFanDirectional
entities:
- uid: 4
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- proto: CableApcExtension
entities:
- uid: 5
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- uid: 6
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- uid: 7
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- uid: 8
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- uid: 9
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- uid: 10
components:
- type: Transform
pos: 0.5,1.5
parent: 1
- uid: 11
components:
- type: Transform
pos: 0.5,2.5
parent: 1
- proto: CableHV
entities:
- uid: 12
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- uid: 13
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- uid: 14
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- proto: CableMV
entities:
- uid: 15
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- uid: 16
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- uid: 17
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- uid: 18
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- uid: 19
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- proto: ChairPilotSeat
entities:
- uid: 20
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,1.5
parent: 1
- uid: 21
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-0.5
parent: 1
- uid: 22
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-0.5
parent: 1
- uid: 23
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-0.5
parent: 1
- proto: ComputerShuttleMining
entities:
- uid: 24
components:
- type: Transform
pos: 0.5,2.5
parent: 1
- proto: CrateGenericSteel
entities:
- uid: 25
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- proto: GasPassiveVent
entities:
- uid: 26
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-2.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GasPipeStraight
entities:
- uid: 27
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- uid: 28
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GasVentScrubber
entities:
- uid: 29
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- type: AtmosPipeColor
color: '#990000FF'
- proto: GeneratorWallmountBasic
entities:
- uid: 30
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- proto: GravityGeneratorMini
entities:
- uid: 63
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- proto: Grille
entities:
- uid: 31
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- uid: 32
components:
- type: Transform
pos: -1.5,1.5
parent: 1
- uid: 33
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- uid: 34
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- uid: 35
components:
- type: Transform
pos: 0.5,3.5
parent: 1
- proto: OreBox
entities:
- uid: 36
components:
- type: Transform
pos: 1.5,-1.5
parent: 1
- proto: Poweredlight
entities:
- uid: 37
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -0.5,0.5
parent: 1
- proto: ShuttleWindow
entities:
- uid: 38
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- uid: 39
components:
- type: Transform
pos: 0.5,3.5
parent: 1
- uid: 40
components:
- type: Transform
pos: -1.5,1.5
parent: 1
- uid: 41
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- uid: 42
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- proto: SubstationWallBasic
entities:
- uid: 43
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,-1.5
parent: 1
- proto: Table
entities:
- uid: 44
components:
- type: Transform
pos: -0.5,2.5
parent: 1
- uid: 45
components:
- type: Transform
pos: 1.5,2.5
parent: 1
- proto: Thruster
entities:
- uid: 46
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-2.5
parent: 1
- proto: WallShuttle
entities:
- uid: 47
components:
- type: Transform
pos: 2.5,2.5
parent: 1
- uid: 48
components:
- type: Transform
pos: 1.5,3.5
parent: 1
- uid: 49
components:
- type: Transform
pos: -0.5,3.5
parent: 1
- uid: 50
components:
- type: Transform
pos: -1.5,2.5
parent: 1
- uid: 51
components:
- type: Transform
pos: -1.5,0.5
parent: 1
- uid: 52
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- uid: 53
components:
- type: Transform
pos: -0.5,-2.5
parent: 1
- uid: 54
components:
- type: Transform
pos: 1.5,-2.5
parent: 1
- uid: 55
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- proto: WallShuttleDiagonal
entities:
- uid: 56
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,3.5
parent: 1
- uid: 57
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-2.5
parent: 1
- uid: 58
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,-2.5
parent: 1
- uid: 59
components:
- type: Transform
pos: -1.5,3.5
parent: 1
- proto: WindowReinforcedDirectional
entities:
- uid: 60
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 0.5,-1.5
parent: 1
- uid: 61
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-1.5
parent: 1
- uid: 62
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-1.5
parent: 1
...

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -4,8 +4,8 @@ meta:
engineVersion: 268.0.0
forkId: ""
forkVersion: ""
time: 11/24/2025 21:47:10
entityCount: 2899
time: 11/27/2025 18:20:30
entityCount: 2900
maps:
- 1
grids:
@@ -107,7 +107,7 @@ entities:
version: 7
-1,1:
ind: -1,1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAABtAAAAAAAAfgAAAAAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAABtAAAAAAAAfgAAAAAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
version: 7
-1,-2:
ind: -1,-2
@@ -1069,7 +1069,7 @@ entities:
-2,4:
0: 14
-1,4:
1: 175
1: 47
0,-5:
1: 24576
0: 3584
@@ -1582,14 +1582,8 @@ entities:
rot: 1.5707963267948966 rad
pos: 13.5,13.5
parent: 2
- proto: AirlockExternalGlassShuttleLocked
- proto: AirlockExternalGlassShuttleMining
entities:
- uid: 44
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,17.5
parent: 2
- uid: 45
components:
- type: Transform
@@ -1977,12 +1971,6 @@ entities:
rot: 3.141592653589793 rad
pos: -2.5,17.5
parent: 2
- uid: 100
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,17.5
parent: 2
- uid: 101
components:
- type: Transform
@@ -4402,6 +4390,11 @@ entities:
- type: Transform
pos: -4.5,-14.5
parent: 2
- uid: 2900
components:
- type: Transform
pos: -5.5,10.5
parent: 2
- proto: CableHV
entities:
- uid: 571
@@ -6857,11 +6850,6 @@ entities:
- type: Transform
pos: -0.5,15.5
parent: 2
- uid: 1053
components:
- type: Transform
pos: -0.5,16.5
parent: 2
- uid: 1054
components:
- type: Transform
@@ -7790,6 +7778,13 @@ entities:
- type: Transform
pos: 2.5,13.5
parent: 2
- proto: ComputerShuttleMining
entities:
- uid: 1053
components:
- type: Transform
pos: -0.5,16.5
parent: 2
- proto: ComputerSurveillanceCameraMonitor
entities:
- uid: 1200
@@ -12183,6 +12178,11 @@ entities:
radius: 175.75
- proto: Grille
entities:
- uid: 44
components:
- type: Transform
pos: -0.5,17.5
parent: 2
- uid: 1812
components:
- type: Transform
@@ -14758,6 +14758,11 @@ entities:
parent: 2
- proto: ShuttleWindow
entities:
- uid: 100
components:
- type: Transform
pos: -0.5,17.5
parent: 2
- uid: 2183
components:
- type: Transform

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,50 @@
# TODO: will need updating with shitmed
- type: body
name: ashwalker
id: AshWalker
root: torso
slots:
head:
part: HeadReptilian
connections:
- torso
organs:
brain: OrganHumanBrain
eyes: OrganHumanEyes
torso:
part: TorsoReptilian
organs:
heart: OrganAnimalHeart
lungs: OrganAshWalkerLungs
stomach: OrganReptilianStomach
liver: OrganAnimalLiver
kidneys: OrganHumanKidneys
connections:
- right arm
- left arm
- right leg
- left leg
right arm:
part: RightArmReptilian
connections:
- right hand
left arm:
part: LeftArmReptilian
connections:
- left hand
right hand:
part: RightHandReptilian
left hand:
part: LeftHandReptilian
right leg:
part: RightLegReptilian
connections:
- right foot
left leg:
part: LeftLegReptilian
connections:
- left foot
right foot:
part: RightFootReptilian
left foot:
part: LeftFootReptilian

View File

@@ -146,15 +146,15 @@
category: cargoproduct-category-name-service
group: market
- type: cargoProduct
id: CrateVendingMachineRestockSalvageEquipment
icon:
sprite: Objects/Specific/Service/vending_machine_restock.rsi
state: base
product: CrateVendingMachineRestockSalvageEquipmentFilled
cost: 1500
category: cargoproduct-category-name-engineering
group: market
#- type: cargoProduct # DeltaV: Salvage vendor doesn't have stock anymore
# id: CrateVendingMachineRestockSalvageEquipment
# icon:
# sprite: Objects/Specific/Service/vending_machine_restock.rsi
# state: base
# product: CrateVendingMachineRestockSalvageEquipmentFilled
# cost: 1000
# category: cargoproduct-category-name-engineering
# group: market
- type: cargoProduct
id: CrateVendingMachineRestockSecTech

View File

@@ -154,16 +154,15 @@
id: VendingMachineRestockRobustSoftdrinks
amount: 2
- type: entity
id: CrateVendingMachineRestockSalvageEquipmentFilled
parent: CrateGenericSteel
name: Salvage restock crate
description: Contains a restock box for the salvage vendor.
components:
- type: EntityTableContainerFill
containers:
entity_storage:
id: VendingMachineRestockSalvageEquipment
#- type: entity # DeltaV: Salvage vendor doesn't have stock anymore
# id: CrateVendingMachineRestockSalvageEquipmentFilled
# parent: CrateGenericSteel
# name: Salvage restock crate
# description: Contains a restock box for the salvage vendor.
# components:
# - type: StorageFill
# contents:
# - id: VendingMachineRestockSalvageEquipment
- type: entity
id: CrateVendingMachineRestockSecTechFilled

View File

@@ -11,6 +11,11 @@
id: LockerFillSalvageSpecialist
table: !type:AllSelector
children:
- id: OreBag
- id: Pickaxe
- id: WeaponProtoKineticAccelerator
- id: FlashlightSeclite
- id: ClothingEyesGlassesMeson
- id: ClothingBeltUtilityFilled
- id: SurvivalKnife
- id: HandheldGPSBasic

View File

@@ -6,6 +6,7 @@
- id: BoxFolderQmClipboard
- id: BoxQMCircuitboards
- id: BoxQMStamps
- id: MiningShuttleConsoleCircuitboard
- id: CigPackGreen
prob: 0.50
- id: ClothingHeadsetAltCargo

View File

@@ -3,7 +3,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: fulltile_overlay
- type: decal
@@ -11,7 +11,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_box
- type: decal
@@ -19,7 +19,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_corner_ne
- type: decal
@@ -27,7 +27,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_corner_nw
- type: decal
@@ -35,7 +35,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_corner_se
- type: decal
@@ -43,7 +43,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_corner_sw
- type: decal
@@ -51,7 +51,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_end_e
- type: decal
@@ -59,7 +59,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_end_n
- type: decal
@@ -67,7 +67,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_end_s
- type: decal
@@ -75,7 +75,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_end_w
- type: decal
@@ -83,7 +83,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_line_e
- type: decal
@@ -91,7 +91,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_line_n
- type: decal
@@ -99,7 +99,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_line_s
- type: decal
@@ -107,7 +107,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: brick_line_w
- type: decal
@@ -115,7 +115,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: halftile_overlay
- type: decal
@@ -123,7 +123,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: halftile_overlay_90
- type: decal
@@ -131,7 +131,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: halftile_overlay_180
- type: decal
@@ -139,7 +139,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: halftile_overlay_270
- type: decal
@@ -147,7 +147,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: quartertile_overlay
- type: decal
@@ -155,7 +155,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: quartertile_overlay_90
- type: decal
@@ -163,7 +163,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: quartertile_overlay_180
- type: decal
@@ -171,7 +171,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: quartertile_overlay_270
- type: decal
@@ -179,7 +179,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: threequartertile_overlay
- type: decal
@@ -187,7 +187,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: threequartertile_overlay_90
- type: decal
@@ -195,7 +195,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: threequartertile_overlay_180
- type: decal
@@ -203,7 +203,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: threequartertile_overlay_270
- type: decal
@@ -211,7 +211,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: mono
- type: decal
@@ -219,7 +219,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: checkerNESW
- type: decal
@@ -227,7 +227,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: checkerNWSE
- type: decal
@@ -235,7 +235,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: diagonal
- type: decal
@@ -243,7 +243,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: diagonal_checker_a
- type: decal
@@ -251,7 +251,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: diagonal_checker_b
- type: decal
@@ -259,7 +259,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: herringbone
- type: decal
@@ -267,7 +267,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile
- type: decal
@@ -275,7 +275,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_checker_a
- type: decal
@@ -283,7 +283,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_checker_b
- type: decal
@@ -291,7 +291,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_diagonal
- type: decal
@@ -299,7 +299,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_diagonal_a
- type: decal
@@ -307,7 +307,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_diagonal_b
- type: decal
@@ -315,7 +315,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_box
- type: decal
@@ -323,7 +323,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_corner_ne
- type: decal
@@ -331,7 +331,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_corner_nw
- type: decal
@@ -339,7 +339,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_corner_se
- type: decal
@@ -347,7 +347,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_corner_sw
- type: decal
@@ -355,7 +355,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_end_e
- type: decal
@@ -363,7 +363,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_end_n
- type: decal
@@ -371,7 +371,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_end_s
- type: decal
@@ -379,7 +379,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_end_w
- type: decal
@@ -387,7 +387,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_inner_ne
- type: decal
@@ -395,7 +395,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_inner_nw
- type: decal
@@ -403,7 +403,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_inner_se
- type: decal
@@ -411,7 +411,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_inner_sw
- type: decal
@@ -419,7 +419,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_line_e
- type: decal
@@ -427,7 +427,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_line_n
- type: decal
@@ -435,7 +435,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_line_s
- type: decal
@@ -443,7 +443,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: minitile_line_w
- type: decal
@@ -451,7 +451,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: offset
- type: decal
@@ -459,7 +459,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: offset_checker_a
- type: decal
@@ -467,7 +467,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: offset_checker_b
- type: decal
@@ -475,7 +475,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement
- type: decal
@@ -483,7 +483,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement_checker_a
- type: decal
@@ -491,7 +491,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement_checker_b
- type: decal
@@ -499,7 +499,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement_vertical
- type: decal
@@ -507,7 +507,7 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement_vertical_checker_a
- type: decal
@@ -515,5 +515,5 @@
tags: ["station", "overlay"]
defaultCustomColor: true
sprite:
sprite: Decals/Overlays/greyscale.rsi
sprite: _TBD/Decals/Overlays/greyscale.rsi
state: pavement_vertical_checker_b

View File

@@ -2,117 +2,117 @@
id: BrickTileDarkBox
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_box
- type: decal
id: BrickTileDarkCornerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_corner_ne
- type: decal
id: BrickTileDarkCornerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_corner_se
- type: decal
id: BrickTileDarkCornerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_corner_nw
- type: decal
id: BrickTileDarkCornerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_corner_sw
- type: decal
id: BrickTileDarkInnerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_inner_ne
- type: decal
id: BrickTileDarkInnerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_inner_se
- type: decal
id: BrickTileDarkInnerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_inner_nw
- type: decal
id: BrickTileDarkInnerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_inner_sw
- type: decal
id: BrickTileDarkEndN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_end_n
- type: decal
id: BrickTileDarkEndE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_end_e
- type: decal
id: BrickTileDarkEndS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_end_s
- type: decal
id: BrickTileDarkEndW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_end_w
- type: decal
id: BrickTileDarkLineN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_line_n
- type: decal
id: BrickTileDarkLineE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_line_e
- type: decal
id: BrickTileDarkLineS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_line_s
- type: decal
id: BrickTileDarkLineW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: dark_line_w

View File

@@ -2,117 +2,117 @@
id: BrickTileSteelBox
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_box
- type: decal
id: BrickTileSteelCornerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_corner_ne
- type: decal
id: BrickTileSteelCornerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_corner_se
- type: decal
id: BrickTileSteelCornerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_corner_nw
- type: decal
id: BrickTileSteelCornerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_corner_sw
- type: decal
id: BrickTileSteelInnerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_inner_ne
- type: decal
id: BrickTileSteelInnerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_inner_se
- type: decal
id: BrickTileSteelInnerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_inner_nw
- type: decal
id: BrickTileSteelInnerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_inner_sw
- type: decal
id: BrickTileSteelEndN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_end_n
- type: decal
id: BrickTileSteelEndE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_end_e
- type: decal
id: BrickTileSteelEndS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_end_s
- type: decal
id: BrickTileSteelEndW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_end_w
- type: decal
id: BrickTileSteelLineN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_line_n
- type: decal
id: BrickTileSteelLineE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_line_e
- type: decal
id: BrickTileSteelLineS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_line_s
- type: decal
id: BrickTileSteelLineW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: steel_line_w

View File

@@ -2,117 +2,117 @@
id: BrickTileWhiteBox
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_box
- type: decal
id: BrickTileWhiteCornerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_corner_ne
- type: decal
id: BrickTileWhiteCornerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_corner_se
- type: decal
id: BrickTileWhiteCornerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_corner_nw
- type: decal
id: BrickTileWhiteCornerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_corner_sw
- type: decal
id: BrickTileWhiteInnerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_inner_ne
- type: decal
id: BrickTileWhiteInnerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_inner_se
- type: decal
id: BrickTileWhiteInnerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_inner_nw
- type: decal
id: BrickTileWhiteInnerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_inner_sw
- type: decal
id: BrickTileWhiteEndN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_end_n
- type: decal
id: BrickTileWhiteEndE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_end_e
- type: decal
id: BrickTileWhiteEndS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_end_s
- type: decal
id: BrickTileWhiteEndW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_end_w
- type: decal
id: BrickTileWhiteLineN
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_line_n
- type: decal
id: BrickTileWhiteLineE
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_line_e
- type: decal
id: BrickTileWhiteLineS
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_line_s
- type: decal
id: BrickTileWhiteLineW
tags: ["station", "markings"]
sprite:
sprite: Decals/bricktile.rsi
sprite: _TBD/Decals/bricktile.rsi
state: white_line_w

View File

@@ -2,117 +2,117 @@
id: WoodTrimThinBox
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_box
- type: decal
id: WoodTrimThinCornerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_corner_ne
- type: decal
id: WoodTrimThinCornerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_corner_se
- type: decal
id: WoodTrimThinCornerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_corner_nw
- type: decal
id: WoodTrimThinCornerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_corner_sw
- type: decal
id: WoodTrimThinInnerNe
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_inner_ne
- type: decal
id: WoodTrimThinInnerSe
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_inner_se
- type: decal
id: WoodTrimThinInnerNw
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_inner_nw
- type: decal
id: WoodTrimThinInnerSw
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_inner_sw
- type: decal
id: WoodTrimThinEndN
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_end_n
- type: decal
id: WoodTrimThinEndE
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_end_e
- type: decal
id: WoodTrimThinEndS
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_end_s
- type: decal
id: WoodTrimThinEndW
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_end_w
- type: decal
id: WoodTrimThinLineN
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_line_n
- type: decal
id: WoodTrimThinLineE
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_line_e
- type: decal
id: WoodTrimThinLineS
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_line_s
- type: decal
id: WoodTrimThinLineW
tags: ["station", "markings"]
sprite:
sprite: Decals/wood_trim.rsi
sprite: _TBD/Decals/wood_trim.rsi
state: thin_line_w

View File

@@ -0,0 +1,9 @@
- type: entity
parent: OrganAnimalLungs
id: OrganAshWalkerLungs
name: ashwalker lungs
description: These lungs are adapted from isolation in lavaland, capable of withstanding the low oxygen content and ash storms.
components:
- type: Lung
saturationLoss: 0.5
# TODO SHITMED: add AshStormImmune when transplanted

View File

@@ -0,0 +1,18 @@
- type: entity
parent: ClothingBackpackDuffelSalvage
id: ClothingBackpackDuffelSalvageConscription
name: mining conscription kit
description: A duffel bag containing everything a crewmember needs to support a shaft miner in the field.
components:
- type: StorageFill
contents:
- id: ClothingEyesGlassesMeson
- id: MineralScanner
- id: OreBag
- id: ClothingUniformJumpsuitSalvageSpecialist
- id: EncryptionKeyCargo
- id: ClothingMaskGasExplorer
- id: SalvageIDCard
- id: WeaponProtoKineticAccelerator
- id: SurvivalKnife
- id: FlashlightSeclite

View File

@@ -0,0 +1,56 @@
- type: shopInventory
id: SalvageVendorInventory
listings:
# TODO: marker beacons 1/10/30 for 10 each
- id: DrinkWhiskeyBottleFull
cost: 100
- id: DrinkAbsintheBottleFull
cost: 100
- id: CigarGold
cost: 150
- id: Soap
cost: 200
- id: SeismicCharge
cost: 250
- id: WeaponGrapplingGun
cost: 300
# TODO: laser pointer 300, toy facehugger 300
# TODO: stabilizing serum for 400
- id: FultonBeacon
cost: 400
- id: ShelterCapsule
cost: 400
- id: ClothingEyesGlassesGarMeson
cost: 500
- id: ClothingBeltSalvageWebbing
cost: 500
- id: MedkitBruteFilled
cost: 600
- id: MedkitBurnFilled
cost: 600
# TODO: salvage 5g, 3 implants and a locator for 600
# TODO: wormhole jaunter for 750
- id: WeaponCrusher
cost: 750
- id: WeaponProtoKineticAccelerator
cost: 750
- id: AdvancedMineralScanner
cost: 800
# TODO: resonator for 800
- id: Fulton
cost: 1000
# TODO: lazarus injector for 1k
- id: ClothingBackpackDuffelSalvageConscription
cost: 1500
- id: SpaceCash1000
cost: 2000
# TODO: super resonator for 2500
# TODO: jump boots for 2500
- id: ClothingOuterHardsuitSalvage
cost: 3000
- id: ShelterCapsuleLuxury
cost: 3000
- id: ShelterCapsuleBar
cost: 10000
# TODO: pka mods
# TODO: mining drone stuff

View File

@@ -0,0 +1,7 @@
- type: entity
parent: ClothingEyesGlassesGar
id: ClothingEyesGlassesGarMeson
name: gar mesons
description: Do the impossible, see the invisible!
components:
- type: EyeProtection

View File

@@ -0,0 +1,11 @@
- type: entity
save: false
parent: MobReptilian
id: MobAshWalker
name: Urist McAsh
suffix: ""
components:
- type: Body
prototype: AshWalker
- type: AshStormImmune
# TODO: shitmed stuff so you can steal ashwalker lungs

View File

@@ -0,0 +1,10 @@
- type: entity
parent: BaseComputerCircuitboard
id: MiningShuttleConsoleCircuitboard
name: mining shuttle console board
description: A printed circuit board for a mining shuttle console.
components:
- type: Sprite
state: cpu_supply
- type: ComputerBoard
prototype: ComputerShuttleMining

View File

@@ -0,0 +1,7 @@
- type: entity
abstract: true
id: BaseStationLavaland
components:
- type: StationPlanetSpawner
planet: Lavaland
gridPath: /Maps/Nonstations/_TBD/lavaland_base.yml

View File

@@ -0,0 +1,24 @@
# this goes on lavaland, unlimited
- type: entity
parent: AirlockGlassShuttle
id: AirlockExternalGlassShuttleMining
suffix: External, Mining, Glass, Docking, Locked
components:
- type: PriorityDock
tag: DockMining
- type: ContainerFill
containers:
board: [ DoorElectronicsExternal ]
# 1 per map, this spawns the mining shuttle
- type: entity
parent: AirlockExternalGlassShuttleMining
id: AirlockExternalGlassShuttleMiningFilled
suffix: Mining, Filled, Locked
components:
- type: GridFill
path: /Maps/Shuttles/DeltaV/mining.yml
addComponents:
- type: IFF
flags:
- HideLabel

View File

@@ -0,0 +1,50 @@
- type: entity
abstract: true
parent: BaseComputer
id: BaseComputerDocking
components:
- type: Sprite
layers:
- map: [ "computerLayerBody" ]
state: computer
- map: [ "computerLayerKeyboard" ]
state: generic_keyboard
- map: [ "computerLayerScreen" ]
state: shuttle
- map: ["computerLayerKeys" ]
state: generic_keys
- map: [ "enum.WiresVisualLayers.MaintenancePanel" ]
state: generic_panel_open
- type: ActivatableUI
key: enum.DockingConsoleUiKey.Key
- type: UserInterface
interfaces:
enum.DockingConsoleUiKey.Key:
type: DockingConsoleBoundUserInterface
enum.WiresUiKey.Key:
type: WiresBoundUserInterface
- type: WorldLoader
radius: 256
- type: DockingConsole
- type: PointLight
radius: 1.5
energy: 1.6
color: "#43ccb5"
- type: entity
parent: BaseComputerDocking
id: ComputerShuttleMining
name: mining shuttle console
description: Used to pilot the mining shuttle to and from the mining base.
components:
- type: DockingConsole
windowTitle: mining-console-window-title
dockTag: DockMining
shuttleWhitelist:
components:
- MiningShuttle
- type: Computer
board: MiningShuttleConsoleCircuitboard
- type: AccessReader
access:
- [ Salvage ]

View File

@@ -0,0 +1,7 @@
- type: wireLayout
id: ShopVendor
wires:
- !type:AiInteractWireAction
- !type:PowerWireAction
- !type:AccessWireAction
- !type:LogWireAction

View File

@@ -0,0 +1,75 @@
- type: planet
id: Lavaland
biome: Lava
mapName: shuttle-destination-lavaland
mapLight: "#A34931"
addedComponents:
- type: FTLDestination
whitelist:
components:
- MiningShuttle
- type: WeatherScheduler # Regular ash storms
stages:
- duration: # 5-10 minutes of calm
min: 300
max: 600
- weather: AshfallLight # ash starts to fall, 30 second warning
message: ash-storm-telegraph
duration:
min: 30
max: 30
- weather: Ashfall # 1-2 minutes of damaging storm
message: ash-storm-alert
duration:
min: 60
max: 120
- weather: AshfallLight # ash clears away for 30 seconds
message: ash-storm-clearing
duration:
min: 30
max: 30
atmosphere:
volume: 2500
temperature: 353.15 # 80C
moles: # 120kPa, 14% O2 (unbreathable)
- 14.38346
- 88.35554
biomeMarkerLayers:
- OreIron
- OreQuartz
- OreCoal
- OreGold
- OreSilver
- OrePlasmaLow
- OreUranium
- OreDiamondLow
- OreArtifactFragment
- WatchersLavaland
- GoliathsLavaland
- type: planet
id: GlacierSurface
biome: Snow
mapName: shuttle-destination-glacier-surface
mapLight: "#2B3153"
addedComponents:
- type: FTLDestination
whitelist:
components:
- MiningShuttle
atmosphere:
volume: 2500
temperature: 180 # -93, extreme cold
moles: # 119kPa, 21% O2
- 42
- 158
biomeMarkerLayers:
- OreIron
- OreQuartz
- OreCoal
- OreGold
- OreSilver
- OrePlasma
- OreUraniumLow
- OreDiamond
- OreArtifactFragment

View File

@@ -0,0 +1,2 @@
- type: Tag
id: DockMining

View File

@@ -16,9 +16,9 @@
description: It's a blue jumpskirt with some gold markings denoting the rank of "Captain".
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/captain.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/captain.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/captain.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/captain.rsi
- type: entity
parent: ClothingUniformSkirtBase
@@ -27,9 +27,9 @@
description: A sturdy jumpskirt, issued to members of the Cargo department.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/cargotech.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/cargotech.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/cargotech.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/cargotech.rsi
- type: entity
parent: [ClothingUniformSkirtBase, BaseCommandContraband]
@@ -82,9 +82,9 @@
description: There's some odd stains on this jumpskirt. Hm.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/chemistry.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/chemistry.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/chemistry.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/chemistry.rsi
- type: entity
parent: ClothingUniformSkirtBase
@@ -159,9 +159,9 @@
description: If this suit was non-conductive, maybe engineers would actually do their damn job.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/engineering.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/engineering.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/engineering.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/engineering.rsi
- type: entity
parent: [ClothingUniformSkirtBase, BaseCommandContraband]
@@ -170,9 +170,9 @@
description: Rather bland and inoffensive. Perfect for vanishing off the face of the universe.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/hop.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/hop.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/hop.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/hop.rsi
- type: entity
parent: [ClothingUniformSkirtBase, BaseCommandContraband]
@@ -239,9 +239,9 @@
description: Has a strong earthy smell to it. Hopefully it's merely dirty as opposed to soiled.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/hydro.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/hydro.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/hydro.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/hydro.rsi
- type: entity
parent: ClothingUniformSkirtBase
@@ -261,9 +261,9 @@
description: It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/medical.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/medical.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/medical.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/medical.rsi
- type: entity
parent: ClothingUniformSkirtBase
@@ -345,9 +345,9 @@
description: 'What can brown do for you?'
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/qm.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/qm.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/qm.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/qm.rsi
- type: entity
parent: [ClothingUniformSkirtBase, BaseCommandContraband]
@@ -378,9 +378,9 @@
description: It's made of a special fiber that increases perceived intelligence and decreases personal ethics. It has markings that denote the wearer as a scientist.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/scientist.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/scientist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/scientist.rsi
- type: entity
parent: ClothingUniformSkirtBase
@@ -389,9 +389,9 @@
description: It's a slimming black with reinforced seams; great for industrial work.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/roboticist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/roboticist.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/roboticist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/roboticist.rsi
- type: entity
parent: [ClothingUniformSkirtBase, BaseSecurityContraband]
@@ -546,9 +546,9 @@
description: I am at work. I can't leave work. Work is breathing. I am testing air quality.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpskirt/atmosf.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/atmos.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpskirt/atmosf.rsi
sprite: _TBD/Clothing/Uniforms/Jumpskirt/atmos.rsi
- type: entity
parent: ClothingUniformSkirtBase

View File

@@ -62,9 +62,9 @@
description: It's a blue jumpsuit with some gold markings denoting the rank of "Captain".
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/captain.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/captain.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpsuit/captain.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/captain.rsi
- type: entity
parent: [ClothingUniformBase, ClothingUniformFoldableBase]
@@ -73,7 +73,7 @@
description: A sturdy jumpsuit, issued to members of the Cargo department.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/cargotech.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/cargotech.rsi
- type: entity
parent: [ClothingUniformBase, ClothingUniformFoldableBase]
@@ -166,7 +166,7 @@
description: There's some odd stains on this jumpsuit. Hm.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/chemistry.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/chemistry.rsi
- type: entity
parent: ClothingUniformBase
@@ -291,7 +291,7 @@
description: If this suit was non-conductive, maybe engineers would actually do their damn job.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/engineering.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/engineering.rsi
- type: entity
parent: [ClothingUniformBase, ClothingUniformFoldableBase]
@@ -309,7 +309,7 @@
description: Rather bland and inoffensive. Perfect for vanishing off the face of the universe.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/hop.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/hop.rsi
- type: entity
parent: [ClothingUniformBase, BaseCommandContraband]
@@ -396,7 +396,7 @@
description: Has a strong earthy smell to it. Hopefully it's merely dirty as opposed to soiled.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/hydro.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/hydro.rsi
- type: entity
parent: [ClothingUniformBase, ClothingUniformFoldableBase]
@@ -425,7 +425,7 @@
description: It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/medical.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/medical.rsi
- type: entity
parent: ClothingUniformBase
@@ -507,9 +507,9 @@
description: 'What can brown do for you?'
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/qm.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/qm.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpsuit/qm.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/qm.rsi
- type: entity
parent: [ClothingUniformBase, BaseCommandContraband]
@@ -551,7 +551,7 @@
description: It's made of a special fiber that increases perceived intelligence and decreases personal ethics. It has markings that denote the wearer as a scientist.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/scientist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/scientist.rsi
- type: entity
parent: ClothingUniformBase
@@ -571,7 +571,7 @@
description: It's a slimming black with reinforced seams; great for industrial work.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/roboticist.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/roboticist.rsi
- type: entity
parent: [ClothingUniformBase, BaseSecurityContraband, ClothingUniformFoldableBase]
@@ -872,7 +872,7 @@
description: I am at work. I can't leave work. Work is breathing. I am testing air quality.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/atmos.rsi
sprite: _TBD/Clothing/Uniforms/Jumpsuit/atmos.rsi
- type: entity
parent: [ClothingUniformBase, ClothingUniformFoldableBase]

View File

@@ -173,228 +173,534 @@
state: underwing_secondary
# Wings
- type: marking
id: MothWingsDefault
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
default_neck: TailBehindBackpack
default_primary_behind: TailBehind
default_primary_front: TailBehindBackpack
default_secondary_behind: TailBehind
default_secondary_front: TailBehindBackpack
colorLinks:
default_primary_behind: default_primary_front
default_secondary_behind: default_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: default
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: default_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: default_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: default_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: default_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: default_secondary_front # imp edit end
- type: marking
id: MothWingsCharred
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
charred_neck: TailBehindBackpack
charred_primary_behind: TailBehind
charred_primary_front: TailBehindBackpack
colorLinks:
charred_primary_behind: charred_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: charred
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: charred_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: charred_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: charred_primary_front # imp edit end
- type: marking
id: MothWingsDbushy
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
dbushy_neck: TailBehindBackpack
dbushy_primary_behind: TailBehind
dbushy_primary_front: TailBehindBackpack
dbushy_secondary_behind: TailBehind
dbushy_secondary_front: TailBehindBackpack
colorLinks:
dbushy_primary_behind: dbushy_primary_front
dbushy_secondary_behind: dbushy_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: dbushy_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: dbushy_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dbushy_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dbushy_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dbushy_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dbushy_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dbushy_secondary_front # imp edit end
- type: marking
id: MothWingsDeathhead
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
deathhead_neck: TailBehindBackpack
deathhead_primary_behind: TailBehind
deathhead_primary_front: TailBehindBackpack
deathhead_secondary_behind: TailBehind
deathhead_secondary_front: TailBehindBackpack
colorLinks:
deathhead_primary_behind: deathhead_primary_front
deathhead_secondary_behind: deathhead_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: deathhead_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: deathhead_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: deathhead_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: deathhead_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: deathhead_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: deathhead_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: deathhead_secondary_front # imp edit end
- type: marking
id: MothWingsFan
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
fan_neck: TailBehindBackpack
fan_primary_behind: TailBehind
fan_primary_front: TailBehindBackpack
fan_secondary_behind: TailBehind
fan_secondary_front: TailBehindBackpack
colorLinks:
fan_primary_behind: fan_primary_front
fan_secondary_behind: fan_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: fan
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: fan_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: fan_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: fan_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: fan_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: fan_secondary_front # imp edit end
- type: marking
id: MothWingsDfan
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
dfan_neck: TailBehindBackpack
dfan_primary_behind: TailBehind
dfan_primary_front: TailBehindBackpack
dfan_secondary_behind: TailBehind
dfan_secondary_front: TailBehindBackpack
colorLinks:
dfan_primary_behind: dfan_primary_front
dfan_secondary_behind: dfan_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: dfan
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dfan_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dfan_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dfan_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dfan_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: dfan_secondary_front # imp edit end
- type: marking
id: MothWingsFeathery
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
feathery_neck: TailBehindBackpack
feathery_primary_behind: TailBehind
feathery_primary_front: TailBehindBackpack
colorLinks:
feathery_primary_behind: feathery_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: feathery
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: feathery_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: feathery_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: feathery_primary_front # imp edit end
- type: marking
id: MothWingsFirewatch
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
firewatch_neck: TailBehindBackpack
firewatch_primary_behind: TailBehind
firewatch_primary_front: TailBehindBackpack
firewatch_secondary_behind: TailBehind
firewatch_secondary_front: TailBehindBackpack
colorLinks:
firewatch_primary_behind: firewatch_primary_front
firewatch_secondary_behind: firewatch_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: firewatch_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: firewatch_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: firewatch_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: firewatch_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: firewatch_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: firewatch_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: firewatch_secondary_front # imp edit end
- type: marking
id: MothWingsGothic
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
gothic_neck: TailBehindBackpack
gothic_primary_behind: TailBehind
gothic_primary_front: TailBehindBackpack
gothic_secondary_behind: TailBehind
gothic_secondary_front: TailBehindBackpack
colorLinks:
gothic_primary_behind: gothic_primary_front
gothic_secondary_behind: gothic_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: gothic
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: gothic_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: gothic_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: gothic_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: gothic_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: gothic_secondary_front # imp edit end
- type: marking
id: MothWingsJungle
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
jungle_neck: TailBehindBackpack
jungle_primary_behind: TailBehind
jungle_primary_front: TailBehindBackpack
colorLinks:
jungle_primary_behind: jungle_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: jungle
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: jungle_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: jungle_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: jungle_primary_front # imp edit end
- type: marking
id: MothWingsLadybug
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
ladybug_neck: TailBehindBackpack
ladybug_primary_behind: TailBehind
ladybug_primary_front: TailBehindBackpack
ladybug_secondary_front: TailBehindBackpack
colorLinks:
ladybug_primary_behind: ladybug_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: ladybug
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: ladybug_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: ladybug_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: ladybug_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: ladybug_secondary_front # imp edit end
- type: marking
id: MothWingsMaple
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
maple_neck: TailBehindBackpack
maple_primary_behind: TailBehind
maple_primary_front: TailBehindBackpack
maple_secondary_behind: TailBehind
maple_secondary_front: TailBehindBackpack
colorLinks:
maple_primary_behind: maple_primary_front
maple_secondary_behind: maple_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: maple_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: maple_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: maple_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: maple_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: maple_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: maple_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: maple_secondary_front # imp edit end
- type: marking
id: MothWingsMoffra
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
moffra_neck: TailBehindBackpack
moffra_neck_secondary: TailBehindBackpack
moffra_primary_behind: TailBehind
moffra_primary_front: TailBehindBackpack
moffra_secondary_behind: TailBehind
moffra_secondary_front: TailBehindBackpack
colorLinks:
moffra_primary_behind: moffra_primary_front
moffra_secondary_behind: moffra_secondary_front
moffra_neck_secondary: moffra_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: moffra_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: moffra_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_neck_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: moffra_secondary_front # imp edit end
- type: marking
id: MothWingsOakworm
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
oakworm_neck: TailBehindBackpack
oakworm_primary_behind: TailBehind
oakworm_primary_front: TailBehindBackpack
colorLinks:
oakworm_primary_behind: oakworm_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: oakworm
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: oakworm_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: oakworm_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: oakworm_primary_front # imp edit end
- type: marking
id: MothWingsPlasmafire
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
plasmafire_neck: TailBehindBackpack
plasmafire_primary_behind: TailBehind
plasmafire_primary_front: TailBehindBackpack
plasmafire_secondary_behind: TailBehind
plasmafire_secondary_front: TailBehindBackpack
colorLinks:
plasmafire_primary_behind: plasmafire_primary_front
plasmafire_secondary_behind: plasmafire_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: plasmafire_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: plasmafire_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: plasmafire_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: plasmafire_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: plasmafire_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: plasmafire_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: plasmafire_secondary_front # imp edit end
- type: marking
id: MothWingsPointy
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
pointy_neck: TailBehindBackpack
pointy_primary_behind: TailBehind
pointy_primary_front: TailBehindBackpack
colorLinks:
pointy_primary_behind: pointy_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: pointy
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: pointy_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: pointy_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: pointy_primary_front # imp edit end
- type: marking
id: MothWingsRoyal
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
royal_neck: TailBehindBackpack
royal_primary_behind: TailBehind
royal_primary_front: TailBehindBackpack
royal_secondary_behind: TailBehind
royal_secondary_front: TailBehindBackpack
colorLinks:
royal_primary_behind: royal_primary_front
royal_secondary_behind: royal_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: royal_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: royal_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: royal_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: royal_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: royal_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: royal_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: royal_secondary_front # imp edit end
- type: marking
id: MothWingsStellar
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
stellar_neck: TailBehindBackpack
stellar_primary_behind: TailBehind
stellar_primary_front: TailBehindBackpack
colorLinks:
stellar_primary_behind: stellar_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: stellar
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: stellar_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: stellar_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: stellar_primary_front # imp edit end
- type: marking
id: MothWingsStriped
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
striped_neck: TailBehindBackpack
striped_primary_behind: TailBehind
striped_primary_front: TailBehindBackpack
colorLinks:
striped_primary_behind: striped_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: striped
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: striped_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: striped_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: striped_primary_front # imp edit end
- type: marking
id: MothWingsSwirly
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
swirly_neck: TailBehindBackpack
swirly_primary_behind: TailBehind
swirly_primary_front: TailBehindBackpack
colorLinks:
swirly_primary_behind: swirly_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: swirly
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: swirly_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: swirly_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: swirly_primary_front # imp edit end
- type: marking
id: MothWingsWhitefly
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
whitefly_neck: TailBehindBackpack
whitefly_primary_behind: TailBehind
whitefly_primary_front: TailBehindBackpack
colorLinks:
whitefly_primary_behind: whitefly_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: whitefly
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: whitefly_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: whitefly_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: whitefly_primary_front # imp edit end
- type: marking
id: MothWingsWitchwing
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
witchwing_neck: TailBehindBackpack
witchwing_primary_behind: TailBehind
witchwing_primary_front: TailBehindBackpack
colorLinks:
witchwing_primary_behind: witchwing_primary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: witchwing
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: witchwing_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: witchwing_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: witchwing_primary_front # imp edit end
- type: marking
id: MothWingsUnderwing
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Moth]
layering: # imp edit start
underwing_neck: TailBehindBackpack
underwing_primary_behind: TailBehind
underwing_primary_front: TailBehindBackpack
underwing_secondary_behind: TailBehind
underwing_secondary_front: TailBehindBackpack
colorLinks:
underwing_primary_behind: underwing_primary_front
underwing_secondary_behind: underwing_secondary_front
sprites:
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: underwing_primary
- sprite: Mobs/Customization/Moth/moth_wings.rsi
state: underwing_secondary
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: underwing_neck
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: underwing_primary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: underwing_primary_front
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: underwing_secondary_behind
- sprite: _Impstation/Mobs/Customization/Moth/taillayers.rsi
state: underwing_secondary_front # imp edit end
# Body markings:
# Charred

View File

@@ -6,9 +6,9 @@
description: A sheet of glass, used often on the station in various applications.
components:
- type: Sprite
sprite: Objects/Materials/Sheets/glass.rsi
sprite: _TBD/Objects/stack_objects.rsi
- type: Item
sprite: Objects/Materials/Sheets/glass.rsi
sprite: _TBD/Objects/stack_objects.rsi
size: Normal
- type: StaticPrice
price: 0
@@ -62,16 +62,16 @@
stackType: Glass
baseLayer: base
layerStates:
- glass
- glass_2
- glass_3
- sheet-glass_1
- sheet-glass_2
- sheet-glass_3
- type: Sprite
state: glass_3
state: sheet-glass_3
layers:
- state: glass_3
- state: sheet-glass_3
map: ["base"]
- type: Item
heldPrefix: glass
heldPrefix: sheet-glass_1
- type: FloorTile
outputs:
- FloorGlass
@@ -93,7 +93,7 @@
suffix: 10
components:
- type: Sprite
state: glass
state: sheet-glass_1
- type: Stack
stackType: Glass
count: 10
@@ -104,7 +104,7 @@
suffix: Single
components:
- type: Sprite
state: glass
state: sheet-glass_1
- type: Stack
stackType: Glass
count: 1
@@ -123,16 +123,16 @@
stackType: ReinforcedGlass
baseLayer: base
layerStates:
- rglass
- rglass_2
- rglass_3
- sheet-rglass_1
- sheet-rglass_2
- sheet-rglass_3
- type: Sprite
state: rglass_3
state: sheet-rglass_3
layers:
- state: rglass_3
- state: sheet-rglass_3
map: ["base"]
- type: Item
heldPrefix: rglass
heldPrefix: sheet-rglass_1
- type: FloorTile
outputs:
- FloorRGlass
@@ -171,12 +171,12 @@
suffix: Single
components:
- type: Sprite
state: rglass
state: sheet-rglass_1
- type: Stack
stackType: ReinforcedGlass
count: 1
- type: Extractable
grindableSolutionName: rglass
grindableSolutionName: sheet-rglass_1
- type: SolutionContainerManager
solutions:
rglass:
@@ -203,16 +203,16 @@
stackType: PlasmaGlass
baseLayer: base
layerStates:
- pglass
- pglass_2
- pglass_3
- sheet-pglass_1
- sheet-pglass_2
- sheet-pglass_3
- type: Sprite
state: pglass_3
state: sheet-pglass_3
layers:
- state: pglass_3
- state: sheet-pglass_3
map: ["base"]
- type: Item
heldPrefix: pglass
heldPrefix: sheet-pglass_1
- type: Construction
graph: Glass
node: SheetPGlass
@@ -248,7 +248,7 @@
suffix: Single
components:
- type: Sprite
state: pglass
state: sheet-pglass_1
- type: Stack
stackType: PlasmaGlass
count: 1
@@ -278,16 +278,16 @@
stackType: ReinforcedPlasmaGlass
baseLayer: base
layerStates:
- rpglass
- rpglass_2
- rpglass_3
- sheet-prglass_1
- sheet-prglass_2
- sheet-prglass_3
- type: Sprite
state: rpglass_3
state: sheet-prglass_3
layers:
- state: rpglass_3
- state: sheet-prglass_3
map: ["base"]
- type: Item
heldPrefix: rpglass
heldPrefix: sheet-prglass_1
- type: Construction
graph: Glass
node: SheetRPGlass
@@ -314,7 +314,7 @@
suffix: Single
components:
- type: Sprite
state: rpglass
state: sheet-prglass_1
- type: Stack
stackType: ReinforcedPlasmaGlass
count: 1
@@ -333,16 +333,16 @@
stackType: UraniumGlass
baseLayer: base
layerStates:
- uglass
- uglass_2
- uglass_3
- sheet-uglass_1
- sheet-uglass_2
- sheet-uglass_3
- type: Sprite
state: uglass_3
state: sheet-uglass_3
layers:
- state: uglass_3
- state: sheet-uglass_3
map: ["base"]
- type: Item
heldPrefix: uglass
heldPrefix: sheet-uglass_1
- type: Construction
graph: Glass
node: SheetUGlass
@@ -389,7 +389,7 @@
suffix: Single
components:
- type: Sprite
state: uglass
state: sheet-uglass_1
- type: Stack
stackType: UraniumGlass
count: 1
@@ -407,16 +407,16 @@
stackType: ReinforcedUraniumGlass
baseLayer: base
layerStates:
- ruglass
- ruglass_2
- ruglass_3
- sheet-urglass_1
- sheet-urglass_2
- sheet-urglass_3
- type: Sprite
state: ruglass_3
state: sheet-urglass_3
layers:
- state: ruglass_3
- state: sheet-urglass_3
map: ["base"]
- type: Item
heldPrefix: ruglass
heldPrefix: sheet-urglass
- type: Construction
graph: Glass
node: SheetRUGlass
@@ -443,7 +443,7 @@
suffix: Single
components:
- type: Sprite
state: ruglass
state: sheet-urglass_1
- type: Stack
stackType: ReinforcedUraniumGlass
count: 1
@@ -466,6 +466,7 @@
- cglass_2
- cglass_3
- type: Sprite
sprite: Objects/Materials/Sheets/glass.rsi
state: cglass_3
layers:
- state: cglass_3
@@ -520,6 +521,7 @@
suffix: Single
components:
- type: Sprite
sprite: Objects/Materials/Sheets/glass.rsi
state: cglass
- type: Stack
stackType: ClockworkGlass

View File

@@ -5,9 +5,9 @@
description: A sheet of metal, used often on the station in various applications.
components:
- type: Sprite
sprite: Objects/Materials/Sheets/metal.rsi
sprite: _TBD/Objects/stack_objects.rsi
- type: Item
sprite: Objects/Materials/Sheets/metal.rsi
sprite: _TBD/Objects/stack_objects.rsi
size: Normal
- type: StaticPrice
price: 0
@@ -49,16 +49,16 @@
stackType: Steel
baseLayer: base
layerStates:
- steel
- steel_2
- steel_3
- sheet-metal_1
- sheet-metal_2
- sheet-metal_3
- type: Sprite
state: steel_3
state: sheet-metal_3
layers:
- state: steel_3
- state: sheet-metal_3
map: ["base"]
- type: Item
heldPrefix: steel
heldPrefix: sheet-metal_1
- type: Appearance
- type: Extractable
grindableSolutionName: steel
@@ -78,7 +78,7 @@
suffix: 10
components:
- type: Sprite
state: steel
state: sheet-metal_1
- type: Stack
stackType: Steel
count: 10
@@ -90,7 +90,7 @@
suffix: Single
components:
- type: Sprite
state: steel
state: sheet-metal_1
- type: Stack
stackType: Steel
count: 1
@@ -114,6 +114,7 @@
- brass_2
- brass_3
- type: Sprite
sprite: Objects/Materials/Sheets/metal.rsi
state: brass_3
layers:
- state: brass_3
@@ -142,6 +143,7 @@
suffix: 10
components:
- type: Sprite
sprite: Objects/Materials/Sheets/metal.rsi
state: brass
- type: Stack
stackType: Brass
@@ -154,6 +156,7 @@
suffix: Single
components:
- type: Sprite
sprite: Objects/Materials/Sheets/metal.rsi
state: brass
- type: Stack
stackType: Brass
@@ -173,13 +176,13 @@
stackType: Plasteel
baseLayer: base
layerStates:
- plasteel
- plasteel_2
- plasteel_3
- sheet-plasteel_1
- sheet-plasteel_2
- sheet-plasteel_3
- type: Sprite
state: plasteel_3
state: sheet-plasteel_3
layers:
- state: plasteel_3
- state: sheet-plasteel_3
map: ["base"]
- type: Item
heldPrefix: plasteel
@@ -205,7 +208,7 @@
suffix: 10
components:
- type: Sprite
state: plasteel
state: sheet-plasteel_1
- type: Stack
stackType: Plasteel
count: 10
@@ -217,7 +220,7 @@
suffix: Single
components:
- type: Sprite
state: plasteel
state: sheet-plasteel_1
- type: Stack
stackType: Plasteel
count: 1

View File

@@ -5,9 +5,9 @@
description: A sheet of material, used often on the station in various applications.
components:
- type: Sprite
sprite: Objects/Materials/Sheets/other.rsi
sprite: _TBD/Objects/stack_objects.rsi
- type: Item
sprite: Objects/Materials/Sheets/other.rsi
sprite: _TBD/Objects/stack_objects.rsi
size: Normal
- type: Tag
tags:
@@ -38,20 +38,20 @@
stackType: Paper
baseLayer: base
layerStates:
- paper
- paper_2
- paper_3
- sheet-paper_1
- sheet-paper_2
- sheet-paper_3
- type: Material
- type: PhysicalComposition
materialComposition:
Paper: 100
- type: Sprite
state: paper_3
state: sheet-paper_3
layers:
- state: paper_3
- state: sheet-paper_3
map: ["base"]
- type: Item
heldPrefix: paper
heldPrefix: sheet-paper_1
- type: Appearance
- type: Extractable
grindableSolutionName: paper
@@ -70,7 +70,7 @@
suffix: Single
components:
- type: Sprite
state: paper
state: sheet-paper_1
- type: Stack
count: 1
@@ -88,16 +88,16 @@
stackType: Plasma
baseLayer: base
layerStates:
- plasma
- plasma_2
- plasma_3
- sheet-plasma_1
- sheet-plasma_2
- sheet-plasma_3
- type: Sprite
state: plasma_3
state: sheet-plasma_3
layers:
- state: plasma_3
- state: sheet-plasma_3
map: ["base"]
- type: Item
heldPrefix: plasma
heldPrefix: sheet-plasma_1
- type: Appearance
- type: Extractable
grindableSolutionName: plasma
@@ -115,7 +115,7 @@
suffix: 10
components:
- type: Sprite
state: plasma
state: sheet-plasma_1
- type: Stack
count: 10
@@ -126,7 +126,7 @@
suffix: Single
components:
- type: Sprite
state: plasma
state: sheet-plasma_1
- type: Stack
count: 1
@@ -149,16 +149,16 @@
stackType: Plastic
baseLayer: base
layerStates:
- plastic
- plastic_2
- plastic_3
- sheet-plastic_1
- sheet-plastic_2
- sheet-plastic_3
- type: Sprite
state: plastic_3
state: sheet-plastic_3
layers:
- state: plastic_3
- state: sheet-plastic_3
map: ["base"]
- type: Item
heldPrefix: plastic
heldPrefix: sheet-plastic_1
- type: Appearance
- type: Extractable
grindableSolutionName: plastic
@@ -179,7 +179,7 @@
suffix: 10
components:
- type: Sprite
state: plastic
state: sheet-plastic_1
- type: Stack
count: 10
@@ -190,7 +190,7 @@
suffix: Single
components:
- type: Sprite
state: plastic
state: sheet-plastic_1
- type: Stack
count: 1
@@ -211,17 +211,17 @@
stackType: Uranium
baseLayer: base
layerStates:
- uranium
- uranium_2
- uranium_3
- sheet-uranium_1
- sheet-uranium_2
- sheet-uranium_3
- type: Sprite
state: uranium_3
state: sheet-uranium_3
layers:
- state: uranium_3
- state: sheet-uranium_3
map: ["base"]
- type: Appearance
- type: Item
heldPrefix: uranium
heldPrefix: sheet-uranium_1
- type: Extractable
grindableSolutionName: food
- type: SolutionContainerManager

Some files were not shown because too many files have changed in this diff Show More