Merge pull request #392 from MishaUnity/Android-Assemble
Обновление рободевочек
@@ -47,5 +47,3 @@ public sealed class HumanoidMarkingModifierBoundUserInterface : BoundUserInterfa
|
||||
SendMessage(new HumanoidMarkingModifierMarkingSetMessage(_markingsModel.Markings));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
using Content.Shared._Wega.Android;
|
||||
|
||||
namespace Content.Client._Wega.Android;
|
||||
|
||||
public sealed class AndroidFrameSystem : SharedAndroidFrameSystem
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using Content.Shared._Wega.Android;
|
||||
using Content.Shared.Humanoid.Markings;
|
||||
using Content.Shared.Preferences;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client._Wega.Android.Ui;
|
||||
|
||||
[UsedImplicitly]
|
||||
public sealed class AndroidConstructBoundUserInterface : BoundUserInterface
|
||||
{
|
||||
[ViewVariables]
|
||||
private AndroidConstructMenu? _menu;
|
||||
|
||||
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
|
||||
[Dependency] private readonly MarkingManager _markingManager = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
|
||||
public HumanoidCharacterProfile Profile = new();
|
||||
|
||||
public AndroidConstructBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void Open()
|
||||
{
|
||||
base.Open();
|
||||
|
||||
_menu = this.CreateWindow<AndroidConstructMenu>();
|
||||
_menu.OpenCentered();
|
||||
|
||||
_menu.ProfileChangedAction += OnProfileChanged;
|
||||
_menu.AssembleAttemptAction += OnAssembleAttempt;
|
||||
}
|
||||
|
||||
protected override void UpdateState(BoundUserInterfaceState state)
|
||||
{
|
||||
base.UpdateState(state);
|
||||
|
||||
if (_menu == null || state is not AndroidConstructUiState cast)
|
||||
return;
|
||||
|
||||
Profile = cast.Profile;
|
||||
|
||||
_menu.LoadProfile(Profile, _cfgManager, _markingManager, _prototypeManager);
|
||||
_menu.UpdateSlotsStatus(cast.HasBattery, cast.HasBrain);
|
||||
}
|
||||
|
||||
private void OnAssembleAttempt()
|
||||
{
|
||||
SendMessage(new AndroidConstructAssembleMessage());
|
||||
}
|
||||
|
||||
private void OnProfileChanged(HumanoidCharacterProfile profile, bool needReload)
|
||||
{
|
||||
if (_menu == null)
|
||||
return;
|
||||
|
||||
Profile = profile;
|
||||
if (needReload)
|
||||
_menu.LoadProfile(Profile, _cfgManager, _markingManager, _prototypeManager);
|
||||
else
|
||||
_menu.UpdatePreview();
|
||||
|
||||
SendMessage(new AndroidConstructEditMessage(Profile));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
<ui:AndroidConstructMenu
|
||||
xmlns="https://spacestation14.io"
|
||||
xmlns:ui="clr-namespace:Content.Client._Wega.Android.Ui"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
|
||||
xmlns:humanoid="clr-namespace:Content.Client.Humanoid"
|
||||
xmlns:profile="clr-namespace:Content.Client.Lobby.UI.ProfileEditorControls"
|
||||
SetSize="740 700" MouseFilter="Stop">
|
||||
|
||||
<PanelContainer Name="Background" StyleClasses="PdaBackgroundRect" ModulateSelfOverride="#212124"/>
|
||||
<PanelContainer Name="Border" StyleClasses="PdaBorderRect" Modulate="#2d3047"/>
|
||||
|
||||
<BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
|
||||
|
||||
<!-- Header -->
|
||||
<PanelContainer SetHeight="45" Margin="1" HorizontalExpand="True">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BackgroundColor="#3b3c4f"/>
|
||||
</PanelContainer.PanelOverride>
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" VerticalExpand="True" Margin="5">
|
||||
<TextureRect TexturePath="/Textures/Interface/Nano/ntlogo.svg.png" SetSize="28 28" Margin="10 0 10 0"/>
|
||||
<Label Text="{Loc 'android-construct-ui-title'}" StyleClasses="ConsoleHeadingBig" HorizontalExpand="True" FontColorOverride="#ffffff"/>
|
||||
<TextureButton Name="CloseButton" StyleClasses="windowCloseButton" Modulate="#8d92a5" VerticalAlignment="Center"/>
|
||||
</BoxContainer>
|
||||
</PanelContainer>
|
||||
|
||||
<!-- Markings -->
|
||||
<PanelContainer Margin="10" HorizontalExpand="True" SetHeight="300">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BackgroundColor="#ffffff00" BorderColor="#767a8c" BorderThickness="3" />
|
||||
</PanelContainer.PanelOverride>
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" VerticalExpand="True" Margin="10">
|
||||
<humanoid:MarkingPicker Name="Markings" Access="Public" HorizontalExpand="True" VerticalExpand="True"/>
|
||||
</BoxContainer>
|
||||
</PanelContainer>
|
||||
|
||||
<PanelContainer Margin="10 5 10 15">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BorderColor="#767a8c" BorderThickness="1" />
|
||||
</PanelContainer.PanelOverride>
|
||||
</PanelContainer>
|
||||
|
||||
<!-- Info Block -->
|
||||
<BoxContainer HorizontalExpand="True" Orientation="Horizontal" VerticalExpand="True">
|
||||
<!-- Preview -->
|
||||
<BoxContainer Orientation="Vertical">
|
||||
<PanelContainer Margin="10 0 10 10">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BackgroundColor="#ffffff00" BorderColor="#767a8c" BorderThickness="3" />
|
||||
</PanelContainer.PanelOverride>
|
||||
<profile:ProfilePreviewSpriteView Name="SpritePreview" Access="Public" Scale="5 5" Margin="8" SizeFlagsStretchRatio="1" />
|
||||
</PanelContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
|
||||
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="5 0 10 0">
|
||||
<!-- Name -->
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
|
||||
<Label Text="{Loc 'android-construct-ui-name-label'}" />
|
||||
<LineEdit Name="NameEdit" MinSize="160 0" VerticalAlignment="Center" Margin="5 0 0 0" />
|
||||
</BoxContainer>
|
||||
|
||||
<!-- Sex -->
|
||||
<BoxContainer HorizontalAlignment="Right">
|
||||
<Label Text="{Loc 'android-construct-ui-sex-label'}" Margin="0 0 5 0"/>
|
||||
<Control HorizontalExpand="True"/>
|
||||
<OptionButton Name="SexButton" HorizontalAlignment="Right" />
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<!-- Skin -->
|
||||
<PanelContainer HorizontalExpand="True" Margin="0 10 10 10">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BackgroundColor="#2a2b2e"/>
|
||||
</PanelContainer.PanelOverride>
|
||||
<BoxContainer Margin="10" HorizontalExpand="True" Orientation="Vertical">
|
||||
<Label Text="{Loc 'android-construct-ui-skin-color-label'}" Margin="0 0 0 10"/>
|
||||
<BoxContainer Name="RgbSkinColorContainer" Orientation="Vertical" HorizontalExpand="True"></BoxContainer>
|
||||
</BoxContainer>
|
||||
</PanelContainer>
|
||||
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
|
||||
<!-- Slots Status -->
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="10">
|
||||
<!-- Battery -->
|
||||
<PanelContainer Margin="5" MinWidth="100" Name="BatteryStatusPanel">
|
||||
<Label Text="{Loc 'android-construct-ui-battery-label-false'}" Margin="5" Name="BatteryStatusText"/>
|
||||
</PanelContainer>
|
||||
|
||||
<!-- Brain -->
|
||||
<PanelContainer Margin="5" MinWidth="100" Name="BrainStatusPanel">
|
||||
<Label Text="{Loc 'android-construct-ui-brain-label-false'}" Margin="5" Name="BrainStatusText"/>
|
||||
</PanelContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<!-- Assemble -->
|
||||
<PanelContainer SetHeight="45" Margin="1" HorizontalExpand="True">
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BackgroundColor="#3b3c4f"/>
|
||||
</PanelContainer.PanelOverride>
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" VerticalExpand="True" Margin="5">
|
||||
<Button Name="AssembleButton" Text="{Loc 'android-construct-ui-assemble-label'}" MinWidth="30" StyleClasses="ButtonViolet" Margin="0 0 5 0"/>
|
||||
<Label Text="{Loc 'android-construct-ui-assemble-attention-label'}"/>
|
||||
</BoxContainer>
|
||||
</PanelContainer>
|
||||
</BoxContainer>
|
||||
|
||||
</BoxContainer>
|
||||
|
||||
</ui:AndroidConstructMenu>
|
||||
@@ -0,0 +1,163 @@
|
||||
using Content.Client.Humanoid;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Humanoid.Markings;
|
||||
using Content.Shared.Preferences;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Prototypes;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Content.Client._Wega.Android.Ui;
|
||||
|
||||
[GenerateTypedNameReferences]
|
||||
public sealed partial class AndroidConstructMenu : BaseWindow
|
||||
{
|
||||
public HumanoidCharacterProfile? Profile;
|
||||
private MarkingsViewModel _markingsModel = new();
|
||||
|
||||
public event Action<HumanoidCharacterProfile, bool>? ProfileChangedAction;
|
||||
public event Action? AssembleAttemptAction;
|
||||
|
||||
private ColorSelectorSliders _colorSelect;
|
||||
|
||||
private int _maxNameLength = 0;
|
||||
|
||||
public AndroidConstructMenu()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
|
||||
CloseButton.OnPressed += _ => Close();
|
||||
AssembleButton.OnPressed += _ => OnAssembleButtonPressed();
|
||||
|
||||
Markings.SetModel(_markingsModel);
|
||||
|
||||
NameEdit.OnTextChanged += args => OnNameChanged(args.Text);
|
||||
NameEdit.IsValid = args => args.Length <= _maxNameLength;
|
||||
|
||||
SexButton.OnItemSelected += args => OnSexChanged((Sex)(args.Id));
|
||||
|
||||
RgbSkinColorContainer.AddChild(_colorSelect = new ColorSelectorSliders());
|
||||
_colorSelect.SelectorType = ColorSelectorSliders.ColorSelectorType.Hsv;
|
||||
_colorSelect.OnColorChanged += _ => OnSkinColorChanged();
|
||||
|
||||
_markingsModel.MarkingsChanged += (_, _) => OnMarkingsChanged();
|
||||
|
||||
UpdateSlotsStatus(false, false);
|
||||
}
|
||||
|
||||
protected override DragMode GetDragModeFor(Vector2 relativeMousePos) => DragMode.Move;
|
||||
|
||||
public void LoadProfile(
|
||||
HumanoidCharacterProfile profile,
|
||||
IConfigurationManager cfgManager,
|
||||
MarkingManager markingManager,
|
||||
IPrototypeManager prototypeManager)
|
||||
{
|
||||
Profile = profile;
|
||||
|
||||
_markingsModel.OrganData = markingManager.GetMarkingData(Profile.Species);
|
||||
_markingsModel.OrganProfileData = markingManager.GetProfileData(Profile.Species, Profile.Sex, Profile.Appearance.SkinColor, Profile.Appearance.EyeColor);
|
||||
_markingsModel.Markings = Profile.Appearance.Markings;
|
||||
|
||||
_colorSelect.Color = Profile.Appearance.SkinColor;
|
||||
|
||||
_maxNameLength = cfgManager.GetCVar(CCVars.MaxNameLength);
|
||||
NameEdit.Text = Profile.Name;
|
||||
|
||||
UpdateSexControls(prototypeManager);
|
||||
UpdatePreview();
|
||||
}
|
||||
|
||||
public void UpdateSlotsStatus(bool hasBattery, bool hasBrain)
|
||||
{
|
||||
var trueColor = Color.FromHex("#8fc032");
|
||||
var falseColor = Color.FromHex("#d83a46");
|
||||
|
||||
BatteryStatusPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = hasBattery ? trueColor : falseColor };
|
||||
BatteryStatusText.Text = Loc.GetString("android-construct-ui-battery-label-" + hasBattery.ToString().ToLower());
|
||||
|
||||
BrainStatusPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = hasBrain ? trueColor : falseColor };
|
||||
BrainStatusText.Text = Loc.GetString("android-construct-ui-brain-label-" + hasBrain.ToString().ToLower());
|
||||
}
|
||||
|
||||
private void OnNameChanged(string newName)
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
Profile = Profile.WithName(newName);
|
||||
ProfileChangedAction?.Invoke(Profile, false);
|
||||
}
|
||||
|
||||
private void OnSexChanged(Sex args)
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
SexButton.SelectId((int)args);
|
||||
Profile = Profile.WithSex(args);
|
||||
ProfileChangedAction?.Invoke(Profile, true);
|
||||
}
|
||||
|
||||
private void UpdateSexControls(IPrototypeManager prototypeManager)
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
SexButton.Clear();
|
||||
|
||||
var sexes = new List<Sex>();
|
||||
|
||||
if (prototypeManager.Resolve(Profile.Species, out var speciesProto))
|
||||
{
|
||||
foreach (var sex in speciesProto.Sexes)
|
||||
sexes.Add(sex);
|
||||
}
|
||||
else
|
||||
sexes.Add(Sex.Unsexed);
|
||||
|
||||
foreach (var sex in sexes)
|
||||
SexButton.AddItem(Loc.GetString($"humanoid-profile-editor-sex-{sex.ToString().ToLower()}-text"), (int)sex);
|
||||
|
||||
if (sexes.Contains(Profile.Sex))
|
||||
SexButton.SelectId((int)Profile.Sex);
|
||||
else
|
||||
SexButton.SelectId((int)sexes[0]);
|
||||
}
|
||||
|
||||
public void UpdatePreview()
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
SpritePreview.LoadPreview(Profile, null, false);
|
||||
}
|
||||
|
||||
private void OnMarkingsChanged()
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
Profile.Appearance.Markings = _markingsModel.Markings;
|
||||
ProfileChangedAction?.Invoke(Profile, false);
|
||||
}
|
||||
|
||||
private void OnSkinColorChanged()
|
||||
{
|
||||
if (Profile == null)
|
||||
return;
|
||||
|
||||
Profile.Appearance.SkinColor = _colorSelect.Color;
|
||||
ProfileChangedAction?.Invoke(Profile, false);
|
||||
}
|
||||
|
||||
private void OnAssembleButtonPressed()
|
||||
{
|
||||
AssembleAttemptAction?.Invoke();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using Content.Server.Body;
|
||||
using Content.Shared._Wega.Android;
|
||||
using Content.Shared.Body;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.PowerCell.Components;
|
||||
using Content.Shared.Preferences;
|
||||
using Robust.Server.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Enums;
|
||||
using Content.Server.Popups;
|
||||
using Robust.Server.Audio;
|
||||
using Content.Shared.Corvax.TTS;
|
||||
|
||||
namespace Content.Server._Wega.Android;
|
||||
|
||||
public sealed partial class AndroidFrameSystem : SharedAndroidFrameSystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly ContainerSystem _container = default!;
|
||||
[Dependency] private readonly HumanoidProfileSystem _humanoid = default!;
|
||||
[Dependency] private readonly VisualBodySystem _visualBody = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||
[Dependency] private readonly NamingSystem _naming = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
[Dependency] private readonly AudioSystem _audio = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<AndroidFrameComponent, ComponentInit>(OnInit);
|
||||
Subs.BuiEvents<AndroidFrameComponent>(AndroidConstructUiKey.Key, subs =>
|
||||
{
|
||||
subs.Event<AndroidConstructEditMessage>(OnEditUiMessage);
|
||||
subs.Event<AndroidConstructAssembleMessage>(OnAssembleUiMessage);
|
||||
});
|
||||
}
|
||||
|
||||
private void OnInit(EntityUid uid, AndroidFrameComponent component, ComponentInit args)
|
||||
{
|
||||
if (!_prototypeManager.Resolve(component.Species, out var species))
|
||||
return;
|
||||
|
||||
var profile = new HumanoidCharacterProfile();
|
||||
profile.Species = component.Species;
|
||||
profile.Appearance.SkinColor = species.DefaultSkinTone;
|
||||
profile.Name = _naming.GetName(component.Species, profile.Gender);
|
||||
|
||||
component.Profile = profile;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private void OnAssembleUiMessage(EntityUid uid, AndroidFrameComponent component, AndroidConstructAssembleMessage message)
|
||||
{
|
||||
if (!TryAssemble(uid, component))
|
||||
_popup.PopupEntity(Loc.GetString("android-construct-assemble-error-popup"), uid, message.Actor);
|
||||
}
|
||||
|
||||
private void OnEditUiMessage(EntityUid uid, AndroidFrameComponent component, AndroidConstructEditMessage message)
|
||||
{
|
||||
if (message.NewProfile.Species != component.Species)
|
||||
return;
|
||||
|
||||
component.Profile = message.NewProfile;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private bool TryAssemble(EntityUid uid, AndroidFrameComponent component)
|
||||
{
|
||||
if (!_prototypeManager.Resolve(component.Species, out var species) || component.Profile == null)
|
||||
return false;
|
||||
|
||||
if (!TryGetFromSlot(uid, component.BatterySlot, out var battery) || !TryGetFromSlot(uid, component.BrainSlot, out var brain))
|
||||
return false;
|
||||
|
||||
var profile = component.Profile;
|
||||
|
||||
switch (profile.Sex)
|
||||
{
|
||||
case Sex.Male: profile = profile.WithGender(Gender.Male); break;
|
||||
case Sex.Female: profile = profile.WithGender(Gender.Female); break;
|
||||
default: profile = profile.WithGender(Gender.Neuter); break;
|
||||
}
|
||||
|
||||
var speciesEntity = Spawn(species.Prototype, Transform(uid).Coordinates);
|
||||
_humanoid.ApplyProfileTo(speciesEntity, profile);
|
||||
_visualBody.ApplyProfileTo(speciesEntity, profile);
|
||||
_metaData.SetEntityName(speciesEntity, profile.Name);
|
||||
|
||||
var tts = EnsureComp<TTSComponent>(speciesEntity);
|
||||
string voice = profile.Sex switch
|
||||
{
|
||||
Sex.Female => "Alyx_Alyx",
|
||||
_ => "Wheatley"
|
||||
};
|
||||
tts.VoicePrototypeId = voice;
|
||||
|
||||
// Replace Battery
|
||||
if (TryComp<PowerCellSlotComponent>(speciesEntity, out var cellComp) && battery.HasValue &&
|
||||
_container.TryGetContainer(speciesEntity, cellComp.CellSlotId, out var cellSlot))
|
||||
{
|
||||
foreach (var toDelete in cellSlot.ContainedEntities)
|
||||
Del(toDelete);
|
||||
_container.Insert(battery.Value, cellSlot, force: true);
|
||||
}
|
||||
|
||||
// Replace Brain
|
||||
if (TryComp<BodyComponent>(speciesEntity, out var bodyComp) && brain.HasValue && bodyComp.Organs != null)
|
||||
{
|
||||
foreach (var organ in bodyComp.Organs.ContainedEntities)
|
||||
{
|
||||
if (HasComp<BrainComponent>(organ))
|
||||
{
|
||||
Del(organ);
|
||||
_container.Insert(brain.Value, bodyComp.Organs, force: true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_audio.PlayPvs(component.AssembleSound, speciesEntity);
|
||||
Del(uid);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,28 @@
|
||||
using Content.Server.Popups;
|
||||
using Content.Server.Tools;
|
||||
using Content.Shared._Wega.Implants.Components;
|
||||
using Content.Shared.Body;
|
||||
using Robust.Shared.Containers;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Tools.Components;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Utility;
|
||||
using System.Linq;
|
||||
|
||||
namespace Content.Server.Implants
|
||||
{
|
||||
public sealed class BodyPartImplantSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
[Dependency] private readonly ToolSystem _tool = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<BodyPartImplantComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<BodyPartImplantComponent, ComponentStartup>(OnStartup);
|
||||
SubscribeLocalEvent<BodyPartImplantComponent, ExaminedEvent>(OnExamine);
|
||||
SubscribeLocalEvent<BodyPartImplantComponent, InteractUsingEvent>(OnToolUseAttempt);
|
||||
|
||||
SubscribeLocalEvent<BodyComponent, OrganInsertedIntoEvent>(OnOrganInserted);
|
||||
SubscribeLocalEvent<BodyComponent, OrganRemovedFromEvent>(OnOrganRemoved);
|
||||
@@ -21,6 +30,8 @@ namespace Content.Server.Implants
|
||||
|
||||
private void OnStartup(Entity<BodyPartImplantComponent> ent, ref ComponentStartup args)
|
||||
{
|
||||
UpdateConfig(ent.Owner, null, ent.Comp);
|
||||
|
||||
// For implants that are organs themselves
|
||||
if (TryComp<OrganComponent>(ent, out var organComp) && organComp.Body != null)
|
||||
{
|
||||
@@ -29,38 +40,39 @@ namespace Content.Server.Implants
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<BodyPartImplantComponent> ent, ref MapInitEvent args)
|
||||
private void OnExamine(EntityUid uid, BodyPartImplantComponent component, ExaminedEvent args)
|
||||
{
|
||||
if (!HasComp<OrganComponent>(ent))
|
||||
if (component.Configurations.Count == 0)
|
||||
return;
|
||||
|
||||
// This implant is an organ with slots for other organs
|
||||
foreach (var connection in ent.Comp.Connections)
|
||||
{
|
||||
// Create container for child organs
|
||||
var containerId = $"{ent.Owner}-{connection.Key}";
|
||||
if (!_container.TryGetContainer(ent, containerId, out _))
|
||||
{
|
||||
_container.EnsureContainer<Container>(ent, containerId);
|
||||
}
|
||||
}
|
||||
var config = component.Configurations.ElementAt(component.CurrentConfig);
|
||||
args.PushMarkup(Loc.GetString("body-part-implant-config-" + config.Key));
|
||||
}
|
||||
|
||||
// Spawn child organs
|
||||
foreach (var (slot, organProto) in ent.Comp.Parts)
|
||||
{
|
||||
var childOrgan = Spawn(organProto, Transform(ent).Coordinates);
|
||||
var containerId = $"{ent.Owner}-{slot}";
|
||||
private void OnToolUseAttempt(EntityUid uid, BodyPartImplantComponent component, InteractUsingEvent args)
|
||||
{
|
||||
if (component.Configurations.Count == 0 || !_tool.HasQuality(args.Used, component.ConfigurationTool))
|
||||
return;
|
||||
|
||||
if (_container.TryGetContainer(ent, containerId, out var container))
|
||||
{
|
||||
_container.Insert(childOrgan, container);
|
||||
}
|
||||
else
|
||||
{
|
||||
container = _container.EnsureContainer<Container>(ent, containerId);
|
||||
_container.Insert(childOrgan, container);
|
||||
}
|
||||
}
|
||||
component.CurrentConfig++;
|
||||
if (component.CurrentConfig >= component.Configurations.Count)
|
||||
component.CurrentConfig = 0;
|
||||
|
||||
_tool.PlayToolSound(args.Used, Comp<ToolComponent>(args.Used), null);
|
||||
UpdateConfig(uid, args.User, component);
|
||||
}
|
||||
|
||||
private void UpdateConfig(EntityUid uid, EntityUid? user, BodyPartImplantComponent component)
|
||||
{
|
||||
if (component.Configurations.Count == 0)
|
||||
return;
|
||||
|
||||
var config = component.Configurations.ElementAt(component.CurrentConfig);
|
||||
|
||||
EntityManager.AddComponents(uid, config.Value);
|
||||
|
||||
if (user != null)
|
||||
_popup.PopupEntity(Loc.GetString("body-part-implant-config-" + config.Key), uid, user.Value);
|
||||
}
|
||||
|
||||
private void OnOrganInserted(Entity<BodyComponent> body, ref OrganInsertedIntoEvent args)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Server.Actions;
|
||||
using Content.Server.Hands.Systems;
|
||||
using Content.Shared._Wega.Implants.Components;
|
||||
using Content.Shared.Body;
|
||||
using Content.Shared.Interaction.Components;
|
||||
using Content.Shared.Toggleable;
|
||||
using Robust.Server.Audio;
|
||||
@@ -132,11 +133,23 @@ public sealed class HandItemImplantSystem : EntitySystem
|
||||
if (!item.ItemEntity.HasValue || component.Container == null)
|
||||
return;
|
||||
|
||||
if (!_hands.TryGetHand(uid, item.HandId, out var _))
|
||||
if (!TryComp<OrganComponent>(item.ImplantEntity, out var organ) || organ.Category == null)
|
||||
return;
|
||||
|
||||
string handId = (string)organ.Category switch
|
||||
{
|
||||
"ArmLeft" => "left",
|
||||
"ArmRight" => "right",
|
||||
"HandLeft" => "left",
|
||||
"HandRight" => "right",
|
||||
_ => string.Empty
|
||||
};
|
||||
|
||||
if (!_hands.TryGetHand(uid, handId, out var _))
|
||||
return;
|
||||
|
||||
_container.Remove(item.ItemEntity.Value, component.Container);
|
||||
_hands.TryForcePickup(uid, item.ItemEntity.Value, item.HandId);
|
||||
_hands.TryForcePickup(uid, item.ItemEntity.Value, handId, checkActionBlocker: false);
|
||||
_audio.PlayPvs(component.ToggleSound, uid);
|
||||
|
||||
EnsureComp<UnremoveableComponent>(item.ItemEntity.Value);
|
||||
@@ -149,7 +162,6 @@ public sealed class HandItemImplantSystem : EntitySystem
|
||||
|
||||
RemComp<UnremoveableComponent>(item.ItemEntity.Value);
|
||||
|
||||
_hands.DoDrop(uid, item.HandId);
|
||||
_container.Insert(item.ItemEntity.Value, component.Container, null);
|
||||
_audio.PlayPvs(component.ToggleSound, uid);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed partial class VisualOrganComponent : Component
|
||||
/// <summary>
|
||||
/// The sprite layer on the entity that this contributes to
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
[DataField(required: true), AutoNetworkedField] // Corvax-Wega-changes
|
||||
public Enum Layer;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -18,6 +18,7 @@ using Content.Shared.Random.Helpers;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
using Content.Shared._Wega.Metabolism; //Corvax-Wega-edit
|
||||
|
||||
namespace Content.Shared.Metabolism;
|
||||
|
||||
@@ -231,6 +232,11 @@ public sealed class MetabolizerSystem : EntitySystem
|
||||
_entityEffects.ApplyEffect(solutionEntity.Value, effect, scale);
|
||||
break;
|
||||
default:
|
||||
// Corvax-Wega-Edit-start
|
||||
if (TryComp<DisableMetabolismEffectsComponent>(actualEntity, out var disable) &&
|
||||
!disable.AllowedEffects.Contains(effect.GetType()))
|
||||
break;
|
||||
// Corvax-Wega-Edit-end
|
||||
_entityEffects.ApplyEffect(actualEntity, effect, scale);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
using Content.Shared.Humanoid.Prototypes;
|
||||
using Content.Shared.Preferences;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._Wega.Android;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class AndroidFrameComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public ProtoId<SpeciesPrototype> Species = "Android";
|
||||
|
||||
[DataField]
|
||||
public string BatterySlot = "battery";
|
||||
[DataField]
|
||||
public string BrainSlot = "brain";
|
||||
|
||||
[DataField]
|
||||
public SoundSpecifier AssembleSound = new SoundPathSpecifier("/Audio/Items/rped.ogg");
|
||||
|
||||
[AutoNetworkedField]
|
||||
public HumanoidCharacterProfile? Profile;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum AndroidConstructUiKey : byte
|
||||
{
|
||||
Key
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class AndroidConstructUiState : BoundUserInterfaceState
|
||||
{
|
||||
public AndroidConstructUiState(ProtoId<SpeciesPrototype> species, HumanoidCharacterProfile profile, bool hasBattery, bool hasBrain)
|
||||
{
|
||||
Species = species;
|
||||
Profile = profile;
|
||||
|
||||
HasBattery = hasBattery;
|
||||
HasBrain = hasBrain;
|
||||
}
|
||||
|
||||
public readonly ProtoId<SpeciesPrototype> Species;
|
||||
public readonly HumanoidCharacterProfile Profile;
|
||||
|
||||
public readonly bool HasBattery, HasBrain;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class AndroidConstructEditMessage : BoundUserInterfaceMessage
|
||||
{
|
||||
public AndroidConstructEditMessage(HumanoidCharacterProfile newProfile)
|
||||
{
|
||||
NewProfile = newProfile;
|
||||
}
|
||||
|
||||
public readonly HumanoidCharacterProfile NewProfile;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class AndroidConstructAssembleMessage : BoundUserInterfaceMessage
|
||||
{
|
||||
public AndroidConstructAssembleMessage()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public enum AndroidFrameVisualLayers : byte
|
||||
{
|
||||
Frame,
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum AndroidFrameVisuals
|
||||
{
|
||||
ConstructionStage,
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using Content.Shared.Containers.ItemSlots;
|
||||
using Content.Shared.UserInterface;
|
||||
using Robust.Shared.Containers;
|
||||
|
||||
namespace Content.Shared._Wega.Android;
|
||||
|
||||
public abstract partial class SharedAndroidFrameSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
|
||||
[Dependency] private readonly ItemSlotsSystem _slots = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<AndroidFrameComponent, AfterActivatableUIOpenEvent>(OnInterfaceOpen);
|
||||
SubscribeLocalEvent<AndroidFrameComponent, EntInsertedIntoContainerMessage>(OnEntInserted);
|
||||
SubscribeLocalEvent<AndroidFrameComponent, EntRemovedFromContainerMessage>(OnEntRemoved);
|
||||
}
|
||||
|
||||
public bool TryGetFromSlot(EntityUid uid, string slotId, out EntityUid? entity)
|
||||
{
|
||||
entity = null;
|
||||
if (!HasComp<ItemSlotsComponent>(uid) || !_slots.TryGetSlot(uid, slotId, out var slot))
|
||||
return false;
|
||||
|
||||
if (slot.ContainerSlot == null || slot.ContainerSlot.ContainedEntity == null)
|
||||
return false;
|
||||
|
||||
entity = slot.ContainerSlot.ContainedEntity;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void UpdateUiState(EntityUid uid, AndroidFrameComponent component)
|
||||
{
|
||||
if (component.Profile == null)
|
||||
return;
|
||||
|
||||
var state = new AndroidConstructUiState(
|
||||
component.Species,
|
||||
component.Profile,
|
||||
TryGetFromSlot(uid, component.BatterySlot, out _),
|
||||
TryGetFromSlot(uid, component.BrainSlot, out _)
|
||||
);
|
||||
|
||||
_ui.SetUiState(uid, AndroidConstructUiKey.Key, state);
|
||||
}
|
||||
|
||||
private void OnInterfaceOpen(EntityUid uid, AndroidFrameComponent component, AfterActivatableUIOpenEvent args)
|
||||
{
|
||||
UpdateUiState(uid, component);
|
||||
}
|
||||
|
||||
private void OnEntInserted(EntityUid uid, AndroidFrameComponent component, EntInsertedIntoContainerMessage args)
|
||||
{
|
||||
UpdateUiState(uid, component);
|
||||
}
|
||||
|
||||
private void OnEntRemoved(EntityUid uid, AndroidFrameComponent component, EntRemovedFromContainerMessage args)
|
||||
{
|
||||
UpdateUiState(uid, component);
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,22 @@
|
||||
using Content.Shared._Wega.Implants.Components;
|
||||
using Content.Shared.Body;
|
||||
using Content.Shared.Tools;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Wega.Implants.Components
|
||||
namespace Content.Shared._Wega.Implants.Components;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class BodyPartImplantComponent : Component
|
||||
{
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class BodyPartImplantComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public Dictionary<ProtoId<OrganCategoryPrototype>, string> Connections = new();
|
||||
[DataField]
|
||||
public Dictionary<string, ComponentRegistry> Configurations = new();
|
||||
[DataField]
|
||||
public ProtoId<ToolQualityPrototype> ConfigurationTool = "Screwing";
|
||||
public int CurrentConfig = 0;
|
||||
|
||||
[DataField]
|
||||
public Dictionary<string, ProtoId<OrganCategoryPrototype>> Parts = new();
|
||||
|
||||
[DataField("key")]
|
||||
public string? ImplantKey;
|
||||
[DataField]
|
||||
public ComponentRegistry? ImplantComponents = default!;
|
||||
}
|
||||
[DataField("key")]
|
||||
public string? ImplantKey;
|
||||
[DataField]
|
||||
public ComponentRegistry ImplantComponents = new();
|
||||
}
|
||||
|
||||
[ByRefEvent]
|
||||
|
||||
@@ -22,9 +22,6 @@ public sealed partial class HandItemImplantComponent : Component
|
||||
[DataRecord]
|
||||
public partial struct HandItemImplantSlot
|
||||
{
|
||||
[DataField("hand")]
|
||||
public string HandId;
|
||||
|
||||
[DataField("prototype")]
|
||||
public string ItemPrototype;
|
||||
public EntityUid? ItemEntity;
|
||||
@@ -36,9 +33,8 @@ public partial struct HandItemImplantSlot
|
||||
[DataField]
|
||||
public EntityUid? ImplantEntity;
|
||||
|
||||
public HandItemImplantSlot(string handId, string itemPrototype, string toggleAction, EntityUid? implant = null)
|
||||
public HandItemImplantSlot(string itemPrototype, string toggleAction, EntityUid? implant = null)
|
||||
{
|
||||
HandId = handId;
|
||||
ItemPrototype = itemPrototype;
|
||||
ToggleActionPrototype = toggleAction;
|
||||
ImplantEntity = implant;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
using Content.Shared.EntityEffects.Effects.Body;
|
||||
|
||||
namespace Content.Shared._Wega.Metabolism;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class DisableMetabolismEffectsComponent : Component
|
||||
{
|
||||
[DataField("allowed")]
|
||||
public List<Type> AllowedEffects = new([typeof(Oxygenate)]);
|
||||
}
|
||||
@@ -14,4 +14,9 @@ android-part-assembly-rightleg = Собирается правая нога. Д
|
||||
android-part-assembly-rightfoot = Собирается правая стопа. Добавьте сталь.
|
||||
|
||||
partimplant-assembly-leftarm = Собирается левая рука.
|
||||
partimplant-assembly-rightarm = Собирается правая рука.
|
||||
partimplant-assembly-rightarm = Собирается правая рука.
|
||||
|
||||
body-part-implant-config-arm-left = Левая рука
|
||||
body-part-implant-config-arm-right = Правая рука
|
||||
body-part-implant-config-leg-left = Левая нога
|
||||
body-part-implant-config-leg-right = Правая нога
|
||||
@@ -0,0 +1,15 @@
|
||||
android-construct-ui-title = Сборка андроида
|
||||
|
||||
android-construct-ui-name-label = Наименование:
|
||||
android-construct-ui-sex-label = Тип корпуса:
|
||||
android-construct-ui-skin-color-label = Цвет покрытия
|
||||
|
||||
android-construct-ui-battery-label-false = Батарея отсутствует
|
||||
android-construct-ui-battery-label-true = Батарая установлена
|
||||
android-construct-ui-brain-label-false = Мозг отсутствует
|
||||
android-construct-ui-brain-label-true = Мозг установлен
|
||||
|
||||
android-construct-ui-assemble-label = Собрать
|
||||
android-construct-ui-assemble-attention-label = Внимание, после сборки изменить внешность невозможно
|
||||
|
||||
android-construct-assemble-error-popup = Ошибка сборки
|
||||
@@ -10,6 +10,9 @@ marking-AndroidOldHead = Андроид, голова (Страх детства
|
||||
marking-AndroidScreenHead = Андроид, голова (Экран)
|
||||
marking-AndroidAnimatronicHead = Андроид, голова (Аниматроник)
|
||||
marking-AndroidTempleLed = Андроид, светодиод (Висок)
|
||||
marking-AndroidHeadFemaleSynt = Андроид, голова (Имитация)
|
||||
marking-AndroidHeadMaleSynt = Андроид, голова (Имитация)
|
||||
|
||||
# Торс
|
||||
marking-AndroidTorsoFemaleStandart = Андроид, торс (Стандарт)
|
||||
marking-AndroidTorsoFemaleBreast = Андроид, торс (Средняя грудь)
|
||||
@@ -17,17 +20,35 @@ marking-AndroidTorsoFemaleBigBreast = Андроид, торс (Большая
|
||||
marking-AndroidTorsoFemaleNoBreast = Андроид, торс (Без груди)
|
||||
marking-AndroidTorsoMale = Андроид, торс
|
||||
marking-AndroidTorsoSpine = Андроид, торс (Усиленный позвоночник)
|
||||
marking-AndroidTorsoFemaleSynt = Андроид, торс (Имитация)
|
||||
marking-AndroidTorsoMaleSynt = Андроид, торс (Имитация)
|
||||
|
||||
# Светодиоды
|
||||
marking-AndroidLeds = Андроид, светодиоды (Стандарт)
|
||||
marking-AndroidLedsLove = Андроид, светодиоды (Акцент)
|
||||
marking-AndroidLedsStripes = Андроид, светодиоды (Полосы)
|
||||
|
||||
# Специальные
|
||||
marking-AndroidCatEars = Андроид, кошачьи ушки
|
||||
marking-AndroidCatEars-ears_cat_led = Светодиоды
|
||||
marking-AndroidCatTail = Андроид, кошачий хвост
|
||||
marking-AndroidCatEars-cat_tail_led = Светодиоды
|
||||
|
||||
# Конечности
|
||||
marking-AndroidScrapArmLeft = Андроид, левая рука (Самоделкин)
|
||||
marking-AndroidScrapArmRight = Андроид, правая рука (Самоделкин)
|
||||
marking-AndroidScrapHandLeft = Андроид, левая кисть (Самоделкин)
|
||||
marking-AndroidScrapHandRight = Андроид, правая кисть (Самоделкин)
|
||||
marking-AndroidScrapLegLeft = Андроид, левая нога (Самоделкин)
|
||||
marking-AndroidScrapLegRight = Андроид, правая нога (Самоделкин)
|
||||
marking-AndroidScrapLegRight = Андроид, правая нога (Самоделкин)
|
||||
marking-AndroidScrapFootLeft = Андроид, левая стопа (Самоделкин)
|
||||
marking-AndroidScrapFootRight = Андроид, правая стопа (Самоделкин)
|
||||
|
||||
marking-AndroidSyntArmLeft = Андроид, левая рука (Имитация)
|
||||
marking-AndroidSyntArmRight = Андроид, правая рука (Имитация)
|
||||
marking-AndroidSyntHandLeft = Андроид, левая кисть (Имитация)
|
||||
marking-AndroidSyntHandRight = Андроид, правая кисть (Имитация)
|
||||
marking-AndroidSyntLegLeft = Андроид, левая нога (Имитация)
|
||||
marking-AndroidSyntLegRight = Андроид, правая нога (Имитация)
|
||||
marking-AndroidSyntFootLeft = Андроид, левая стопа (Имитация)
|
||||
marking-AndroidSyntFootRight = Андроид, правая стопа (Имитация)
|
||||
@@ -7,3 +7,4 @@ construction-graph-tag-alienberries = инопланетные ягоды
|
||||
construction-graph-tag-soil-bag = мешок почвы
|
||||
construction-graph-tag-explorer-suit = костюм исследователя
|
||||
construction-graph-tag-goliath-cloak = плащ голиафа
|
||||
construction-graph-tag-android-part = часть андроида
|
||||
|
||||
@@ -54,3 +54,8 @@ ent-OrganAndroidTyrium = тириумовый насос
|
||||
ent-OrganAndroidEyes = камеры андроида
|
||||
.desc = Высоко-технологичные камеры с блюспейс нейросетями.
|
||||
.suffix = { ent-OrganMothInternal.suffix }
|
||||
|
||||
ent-AndroidEndoskeleton = эндоскелет андроида
|
||||
.desc = Каркас для будущего андроида. Внутри они выглядят намного страшнее чем снаружи.
|
||||
ent-AndroidFrame = каркас андроида
|
||||
.desc = Настройте внешность собираемого робота.
|
||||
|
||||
@@ -1,36 +1,24 @@
|
||||
ent-AndroidBodyPart = часть андроида
|
||||
.desc = Универсальная часть тела для ремонта. Используйте отвёртку, чтобы изменить тип.
|
||||
|
||||
ent-LeftArmSyntheticPry = гидравлическая рука
|
||||
.desc = Мощная гидравлическая рука, способная вскрывать запитанные шлюзы. Сейчас это левая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightArmSyntheticPry = гидравлическая рука
|
||||
.desc = Мощная гидравлическая рука, способная вскрывать запитанные шлюзы. Сейчас это правая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-ArmSyntheticPry = гидравлическая рука
|
||||
.desc = Мощная гидравлическая рука, способная вскрывать запитанные шлюзы. Используйте отвёртку чтобы сменить тип.
|
||||
|
||||
ent-LeftArmSyntheticDefib = рука дефибриллятор
|
||||
.desc = Рука со встроенным дефибриллятором, идеально для андроида медика. Сейчас это левая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightArmSyntheticDefib = рука дефибриллятор
|
||||
.desc = Рука со встроенным дефибриллятором, идеально для андроида медика. Сейчас это правая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-ArmSyntheticDefib = рука дефибриллятор
|
||||
.desc = Рука со встроенным дефибриллятором, идеально для андроида медика. Используйте отвёртку чтобы сменить тип.
|
||||
ent-DefibrillatorArmImplant = встроенный дефибриллятор
|
||||
.desc = ЧИСТО! РАЗРЯД!
|
||||
|
||||
ent-LeftArmSyntheticProtoKinetic = рука протокинетик
|
||||
.desc = Превратите свою руку в протокинетический ускоритель! Сейчас это левая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightArmSyntheticProtoKinetic = рука протокинетик
|
||||
.desc = Превратите свою руку в протокинетический ускоритель! Сейчас это правая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-ArmSyntheticProtoKinetic = рука протокинетик
|
||||
.desc = Превратите свою руку в протокинетический ускоритель! Используйте отвёртку чтобы сменить тип.
|
||||
ent-WeaponArmProtoKinetic = встроенный протокинетический ускоритель
|
||||
.desc = Стреляет кинетическими зарядами с низким уроном на короткое расстояние.
|
||||
|
||||
ent-LeftArmSyntheticCharger = рука зарядник
|
||||
.desc = Рука со встроенным зарядником, заряжайтесь от предметов или заряжайте их. Сейчас это левая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightArmSyntheticCharger = рука зарядник
|
||||
.desc = Рука со встроенным зарядником, заряжайтесь от предметов или заряжайте их. Сейчас это правая рука, используйте отвёртку чтобы сменить тип.
|
||||
ent-ArmSyntheticCharger = рука зарядник
|
||||
.desc = Рука со встроенным зарядником, заряжайтесь от предметов или заряжайте их. Используйте отвёртку чтобы сменить тип.
|
||||
|
||||
ent-LeftLegSyntheticMagboots = магнитная нога
|
||||
.desc = Нога со встроенными электромагнитами. Сейчас это левая нога, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightLegSyntheticMagboots = магнитная нога
|
||||
.desc = Нога со встроенными электромагнитами. Сейчас это правая нога, используйте отвёртку чтобы сменить тип.
|
||||
ent-LegSyntheticMagboots = магнитная нога
|
||||
.desc = Нога со встроенными электромагнитами. Используйте отвёртку чтобы сменить тип.
|
||||
|
||||
ent-LeftLegSyntheticJump = прыжковая нога
|
||||
.desc = Нога с установленным реактивным двигателем для коротких прыжков. Сейчас это левая нога, используйте отвёртку чтобы сменить тип.
|
||||
ent-RightLegSyntheticJump = прыжковая нога
|
||||
.desc = Нога с установленным реактивным двигателем для коротких прыжков. Сейчас это правая нога, используйте отвёртку чтобы сменить тип.
|
||||
ent-LegSyntheticJump = прыжковая нога
|
||||
.desc = Нога с установленным реактивным двигателем для коротких прыжков. Используйте отвёртку чтобы сменить тип.
|
||||
@@ -82,7 +82,7 @@
|
||||
- Brain
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
parent: [ BaseItem, OrganBaseBrain ] # Corvax-Wega-Android-Edit
|
||||
id: PositronicBrain
|
||||
name: positronic brain
|
||||
description: An artificial brain capable of spontaneous neural activity.
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
parent: None
|
||||
id: Android
|
||||
limits:
|
||||
enum.HumanoidVisualLayers.Special:
|
||||
limit: 2
|
||||
required: false
|
||||
enum.HumanoidVisualLayers.Head:
|
||||
limit: 1
|
||||
required: false
|
||||
@@ -21,7 +18,7 @@
|
||||
limit: 1
|
||||
required: false
|
||||
enum.HumanoidVisualLayers.Chest:
|
||||
limit: 2
|
||||
limit: 1
|
||||
required: false
|
||||
enum.HumanoidVisualLayers.LArm:
|
||||
limit: 1
|
||||
@@ -53,15 +50,15 @@
|
||||
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RFoot" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.Special" ]
|
||||
- map: [ "socks" ]
|
||||
- map: [ "underwearbottom" ]
|
||||
- map: [ "underweartop" ]
|
||||
- map: [ "jumpsuit" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||
- map: [ "anal" ]
|
||||
- map: [ "gloves" ]
|
||||
- map: [ "shoes" ]
|
||||
@@ -247,6 +244,7 @@
|
||||
Quantity: 300
|
||||
bleedReductionAmount: 0
|
||||
bloodRefreshAmount: 0
|
||||
- type: DisableMetabolismEffects
|
||||
- type: Android
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
@@ -296,6 +294,107 @@
|
||||
- type: PointLight
|
||||
enabled: false
|
||||
|
||||
- type: entity
|
||||
id: AndroidEndoskeleton
|
||||
name: "android endoskeleton"
|
||||
description: "A frame for a future android. Inside they are scarier than outside.."
|
||||
components:
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
fixedRotation: false
|
||||
- type: Pullable
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.25,-0.25,0.25,0.25"
|
||||
density: 100
|
||||
mask:
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
drawdepth: Mobs
|
||||
sprite: _Wega/Mobs/Species/Android/frame.rsi
|
||||
layers:
|
||||
- state: frame-0
|
||||
map: [ "enum.AndroidFrameVisualLayers.Frame" ]
|
||||
- type: Construction
|
||||
graph: AndroidEndoskeleton
|
||||
node: start
|
||||
defaultTarget: frame
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.AndroidFrameVisuals.ConstructionStage:
|
||||
enum.AndroidFrameVisualLayers.Frame:
|
||||
0: { state: frame-0, visible: true}
|
||||
1: { state: frame-1, visible: true}
|
||||
2: { state: frame-2, visible: true}
|
||||
3: { state: frame-3, visible: true}
|
||||
4: { state: frame-4, visible: true}
|
||||
5: { state: frame-5, visible: true}
|
||||
|
||||
- type: entity
|
||||
id: AndroidFrame
|
||||
name: "android frame"
|
||||
description: "Customize the appearance of the assembled android."
|
||||
components:
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
fixedRotation: false
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.25,-0.25,0.25,0.25"
|
||||
density: 100
|
||||
mask:
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
drawdepth: Mobs
|
||||
sprite: _Wega/Mobs/Species/Android/frame.rsi
|
||||
state: full
|
||||
- type: AndroidFrame
|
||||
- type: Appearance
|
||||
- type: ActivatableUI
|
||||
key: enum.AndroidConstructUiKey.Key
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
enum.AndroidConstructUiKey.Key:
|
||||
type: AndroidConstructBoundUserInterface
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
battery: !type:ContainerSlot
|
||||
brain: !type:ContainerSlot
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
battery:
|
||||
whitelist:
|
||||
tags:
|
||||
- PowerCell
|
||||
brain:
|
||||
whitelist:
|
||||
tags:
|
||||
- BrainSynthetic
|
||||
- type: Construction
|
||||
graph: AndroidEndoskeleton
|
||||
node: frame
|
||||
|
||||
- type: entity
|
||||
parent: OrganBase
|
||||
id: OrganAndroid
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#region Head Top
|
||||
|
||||
- type: marking
|
||||
id: AndroidAntennaLeft
|
||||
bodyPart: HeadTop
|
||||
@@ -50,6 +52,10 @@
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: head_bulbs
|
||||
|
||||
#endregion Head Top
|
||||
|
||||
#region Torso
|
||||
|
||||
- type: marking
|
||||
id: AndroidTorsoFemaleStandart
|
||||
bodyPart: Chest
|
||||
@@ -124,7 +130,6 @@
|
||||
id: AndroidTorsoSpine
|
||||
bodyPart: Special
|
||||
groupWhitelist: [ Android ]
|
||||
sexRestriction: [ Female ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
layers:
|
||||
@@ -142,6 +147,40 @@
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: body_spine_led
|
||||
|
||||
- type: marking
|
||||
id: AndroidTorsoFemaleSynt
|
||||
bodyPart: Chest
|
||||
groupWhitelist: [ Android ]
|
||||
sexRestriction: [ Female ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: body_f_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidTorsoMaleSynt
|
||||
bodyPart: Chest
|
||||
groupWhitelist: [ Android ]
|
||||
sexRestriction: [ Male ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: body_m_synt
|
||||
|
||||
#endregion Torso
|
||||
|
||||
#region Leds
|
||||
|
||||
- type: marking
|
||||
id: AndroidLeds
|
||||
bodyPart: Special
|
||||
@@ -198,46 +237,241 @@
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: temple_led
|
||||
|
||||
- type: marking
|
||||
id: AndroidCatEars
|
||||
bodyPart: HeadTop
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SkinColoring
|
||||
layers:
|
||||
ears_cat_led:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Special
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: ears_cat_outer
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: ears_cat_led
|
||||
#endregion Leds
|
||||
|
||||
#region Limbs
|
||||
|
||||
# Scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidCatTail
|
||||
bodyPart: Tail
|
||||
id: AndroidScrapArmLeft
|
||||
bodyPart: LArm
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Hair
|
||||
layers:
|
||||
cat_tail_led:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Special
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: cat_tail
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: cat_tail_led
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_arm_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapArmRight
|
||||
bodyPart: RArm
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_arm_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapHandLeft
|
||||
bodyPart: LHand
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_hand_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapHandRight
|
||||
bodyPart: RHand
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_hand_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapLegLeft
|
||||
bodyPart: LLeg
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_leg_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapLegRight
|
||||
bodyPart: RLeg
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_leg_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapFootLeft
|
||||
bodyPart: LFoot
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_foot_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapFootRight
|
||||
bodyPart: RFoot
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_foot_scrap
|
||||
|
||||
# Synth
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntArmLeft
|
||||
bodyPart: LArm
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_arm_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntArmRight
|
||||
bodyPart: RArm
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_arm_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntHandLeft
|
||||
bodyPart: LHand
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_hand_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntHandRight
|
||||
bodyPart: RHand
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_hand_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntLegLeft
|
||||
bodyPart: LLeg
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_leg_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntLegRight
|
||||
bodyPart: RLeg
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_leg_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntFootLeft
|
||||
bodyPart: LFoot
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_foot_synt
|
||||
|
||||
- type: marking
|
||||
id: AndroidSyntFootRight
|
||||
bodyPart: RFoot
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_foot_synt
|
||||
|
||||
#endregion Limbs
|
||||
|
||||
#region Head
|
||||
|
||||
- type: marking
|
||||
id: AndroidEyesVisor
|
||||
@@ -259,62 +493,6 @@
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: eyes_visor_led
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapArmLeft
|
||||
bodyPart: Special
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_arm_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapArmRight
|
||||
bodyPart: Special
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_arm_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapLegLeft
|
||||
bodyPart: Special
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: l_leg_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidScrapLegRight
|
||||
bodyPart: Special
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: r_leg_scrap
|
||||
|
||||
- type: marking
|
||||
id: AndroidOldHead
|
||||
bodyPart: HeadTop
|
||||
@@ -406,3 +584,79 @@
|
||||
- sprite: _Wega/Mobs/Customization/android_heads.rsi
|
||||
state: animatronic
|
||||
|
||||
- type: marking
|
||||
id: AndroidHeadFemaleSynt
|
||||
bodyPart: Head
|
||||
groupWhitelist: [ Android ]
|
||||
sexRestriction: [ Female ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android_heads.rsi
|
||||
state: synt_f
|
||||
|
||||
- type: marking
|
||||
id: AndroidHeadMaleSynt
|
||||
bodyPart: Head
|
||||
groupWhitelist: [ Android ]
|
||||
sexRestriction: [ Male ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SimpleColoring
|
||||
color: "#ffffff"
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android_heads.rsi
|
||||
state: synt_m
|
||||
|
||||
#endregion Head
|
||||
|
||||
#region Misc
|
||||
|
||||
- type: marking
|
||||
id: AndroidCatEars
|
||||
bodyPart: HeadTop
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:SkinColoring
|
||||
layers:
|
||||
ears_cat_led:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Special
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: ears_cat_outer
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: ears_cat_led
|
||||
|
||||
- type: marking
|
||||
id: AndroidCatTail
|
||||
bodyPart: Tail
|
||||
groupWhitelist: [ Android ]
|
||||
sponsorOnly: false
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Hair
|
||||
layers:
|
||||
cat_tail_led:
|
||||
type:
|
||||
!type:CategoryColoring
|
||||
category: Special
|
||||
sprites:
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: cat_tail
|
||||
- sprite: _Wega/Mobs/Customization/android.rsi
|
||||
state: cat_tail_led
|
||||
|
||||
#endregion Misc
|
||||
@@ -1,335 +1,257 @@
|
||||
# - type: entity
|
||||
# name: "android body part"
|
||||
# description: "Universal body part for android repair. Use a screwdriver to change the type."
|
||||
# parent: BaseItem
|
||||
# id: AndroidBodyPart
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: module_part
|
||||
# - type: Construction
|
||||
# graph: AndroidBodyPart
|
||||
# node: start
|
||||
- type: entity
|
||||
name: "android body part"
|
||||
description: "Universal body part for android repair. Use a screwdriver to change the type."
|
||||
parent: BaseItem
|
||||
id: AndroidBodyPart
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: module_part
|
||||
- type: Construction
|
||||
graph: AndroidBodyPart
|
||||
node: start
|
||||
- type: Tag
|
||||
tags:
|
||||
- AndroidPart
|
||||
|
||||
# - type: entity
|
||||
# id: LeftArmSyntheticImplant
|
||||
# parent: OrganAndroidArmLeft
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# parts:
|
||||
# left_hand:
|
||||
# LeftHandAndroid
|
||||
- type: entity
|
||||
id: ArmSyntheticImplant
|
||||
parent: [ OrganAndroidArmLeft ]
|
||||
abstract: true
|
||||
components:
|
||||
- type: BodyPartImplant
|
||||
configurations:
|
||||
arm-left:
|
||||
- type: Organ
|
||||
category: ArmLeft
|
||||
- type: VisualOrgan
|
||||
layer: enum.HumanoidVisualLayers.LArm
|
||||
data:
|
||||
state: l_arm
|
||||
- type: VisualOrganMarkings
|
||||
markingData:
|
||||
group: Android
|
||||
layers:
|
||||
- LArm
|
||||
- type: Tag
|
||||
tags:
|
||||
- BaseBodyPart
|
||||
- LeftArmSynthetic
|
||||
arm-right:
|
||||
- type: Organ
|
||||
category: ArmRight
|
||||
- type: VisualOrgan
|
||||
layer: enum.HumanoidVisualLayers.RArm
|
||||
data:
|
||||
state: r_arm
|
||||
- type: VisualOrganMarkings
|
||||
markingData:
|
||||
group: Android
|
||||
layers:
|
||||
- RArm
|
||||
- type: Tag
|
||||
tags:
|
||||
- BaseBodyPart
|
||||
- RightArmSynthetic
|
||||
|
||||
# - type: entity
|
||||
# id: RightArmSyntheticImplant
|
||||
# parent: OrganAndroidArmRight
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# parts:
|
||||
# right_hand:
|
||||
# RightHandAndroid
|
||||
- type: entity
|
||||
id: LegSyntheticImplant
|
||||
parent: [ OrganAndroidLegLeft ]
|
||||
abstract: true
|
||||
components:
|
||||
- type: BodyPartImplant
|
||||
configurations:
|
||||
leg-left:
|
||||
- type: Organ
|
||||
category: LegLeft
|
||||
- type: VisualOrgan
|
||||
layer: enum.HumanoidVisualLayers.LLeg
|
||||
data:
|
||||
state: l_leg
|
||||
- type: VisualOrganMarkings
|
||||
markingData:
|
||||
group: Android
|
||||
layers:
|
||||
- LLeg
|
||||
- type: Tag
|
||||
tags:
|
||||
- BaseBodyPart
|
||||
- LeftLegSynthetic
|
||||
leg-right:
|
||||
- type: Organ
|
||||
category: LegRight
|
||||
- type: VisualOrgan
|
||||
layer: enum.HumanoidVisualLayers.RLeg
|
||||
data:
|
||||
state: r_leg
|
||||
- type: VisualOrganMarkings
|
||||
markingData:
|
||||
group: Android
|
||||
layers:
|
||||
- RLeg
|
||||
- type: Tag
|
||||
tags:
|
||||
- BaseBodyPart
|
||||
- RightLegSynthetic
|
||||
|
||||
# - type: entity
|
||||
# id: LeftLegSyntheticImplant
|
||||
# parent: OrganAndroidLegLeft
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# parts:
|
||||
# left_foot:
|
||||
# LeftFootAndroid
|
||||
# Pry Arm
|
||||
|
||||
# - type: entity
|
||||
# id: RightLegSyntheticImplant
|
||||
# parent: OrganAndroidLegRight
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# parts:
|
||||
# right_foot:
|
||||
# RightFootAndroid
|
||||
- type: entity
|
||||
id: ArmSyntheticPry
|
||||
parent: [ ArmSyntheticImplant ]
|
||||
name: "hydraulic arm"
|
||||
description: "A powerful hydraulic arm for opening powered airlocks. Use a screwdriver to change it symmetry."
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: pry_arm
|
||||
- type: BodyPartImplant
|
||||
key: pry
|
||||
implantComponents:
|
||||
- type: Tool
|
||||
qualities:
|
||||
- Prying
|
||||
- type: Prying
|
||||
pryPowered: !type:Bool
|
||||
true
|
||||
force: !type:Bool
|
||||
true
|
||||
useSound:
|
||||
path: /Audio/Items/jaws_pry.ogg
|
||||
speedModifier: 1
|
||||
|
||||
# # Pry Arm
|
||||
# Defib Arm
|
||||
|
||||
# - type: entity
|
||||
# id: ArmSyntheticPry
|
||||
# name: "hydraulic arm"
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: pry_arm
|
||||
# - type: BodyPartImplant
|
||||
# key: pry
|
||||
# implantComponents:
|
||||
# - type: Tool
|
||||
# qualities:
|
||||
# - Prying
|
||||
# - type: Prying
|
||||
# pryPowered: !type:Bool
|
||||
# true
|
||||
# force: !type:Bool
|
||||
# true
|
||||
# useSound:
|
||||
# path: /Audio/Items/jaws_pry.ogg
|
||||
# speedModifier: 1
|
||||
# - type: Construction
|
||||
# graph: ArmSyntheticPry
|
||||
# node: start
|
||||
- type: entity
|
||||
id: ArmSyntheticDefib
|
||||
parent: [ ArmSyntheticImplant ]
|
||||
name: "defibrillator arm"
|
||||
description: "An arm with a built-in defibrillator! Use a screwdriver to change it symmetry."
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: defib_arm
|
||||
- type: BodyPartImplant
|
||||
key: defib
|
||||
implantComponents:
|
||||
- type: ExtendHandItemImplant
|
||||
items:
|
||||
- prototype: DefibrillatorArmImplant
|
||||
toggleAction: ActionToggleBodyPartImplantDefib
|
||||
|
||||
# - type: entity
|
||||
# id: LeftArmSyntheticPry
|
||||
# description: "A powerful hydraulic arm for opening powered airlocks. Now it is left, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticPry, LeftArmSyntheticImplant ]
|
||||
- type: entity
|
||||
id: DefibrillatorArmImplant
|
||||
name: "build-in defibrillator"
|
||||
parent: [ BaseDefibrillator ]
|
||||
categories: [ HideSpawnMenu ]
|
||||
|
||||
# - type: entity
|
||||
# id: RightArmSyntheticPry
|
||||
# description: "A powerful hydraulic arm for opening powered airlocks. Now it is right, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticPry, RightArmSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Construction
|
||||
# node: right
|
||||
# Proto-kinetic Arm
|
||||
|
||||
# # Defib Arm
|
||||
- type: entity
|
||||
id: ArmSyntheticProtoKinetic
|
||||
parent: [ ArmSyntheticImplant ]
|
||||
name: "proto-kinetic arm"
|
||||
description: "Turn your hand into Proto-kinetic accelerator. Now it is left, use a screwdriver to change it."
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: kinetic_arm
|
||||
- type: BodyPartImplant
|
||||
key: protokinetic
|
||||
implantComponents:
|
||||
- type: ExtendHandItemImplant
|
||||
items:
|
||||
- prototype: WeaponArmProtoKinetic
|
||||
toggleAction: ActionToggleBodyPartImplantKinetic
|
||||
|
||||
# - type: entity
|
||||
# id: ArmSyntheticDefib
|
||||
# name: "defibrillator arm"
|
||||
# description: "An arm with a built-in defibrillator! Now it is left, use a screwdriver to change it."
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: defib_arm
|
||||
# - type: BodyPartImplant
|
||||
# key: defib
|
||||
# - type: Construction
|
||||
# graph: ArmSyntheticDefib
|
||||
# node: start
|
||||
|
||||
# - type: entity
|
||||
# id: LeftArmSyntheticDefib
|
||||
# description: "An arm with a built-in defibrillator! Now it is left, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticDefib, LeftArmSyntheticImplant ]
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# implantComponents:
|
||||
# - type: ExtendHandItemImplant
|
||||
# items:
|
||||
# - hand: body_part_slot_left_hand
|
||||
# prototype: DefibrillatorArmImplant
|
||||
# toggleAction: ActionToggleBodyPartImplantDefib
|
||||
|
||||
# - type: entity
|
||||
# id: RightArmSyntheticDefib
|
||||
# description: "An arm with a built-in defibrillator! Now it is right, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticDefib, RightArmSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Construction
|
||||
# node: right
|
||||
# - type: BodyPartImplant
|
||||
# implantComponents:
|
||||
# - type: ExtendHandItemImplant
|
||||
# items:
|
||||
# - hand: body_part_slot_right_hand
|
||||
# prototype: DefibrillatorArmImplant
|
||||
# toggleAction: ActionToggleBodyPartImplantDefib
|
||||
|
||||
# - type: entity
|
||||
# id: DefibrillatorArmImplant
|
||||
# name: "build-in defibrillator"
|
||||
# parent: [ BaseDefibrillator ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
|
||||
# # Proto-kinetic Arm
|
||||
|
||||
# - type: entity
|
||||
# id: ArmSyntheticProtoKinetic
|
||||
# name: "proto-kinetic arm"
|
||||
# description: "Turn your hand into Proto-kinetic accelerator. Now it is left, use a screwdriver to change it."
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: kinetic_arm
|
||||
# - type: BodyPartImplant
|
||||
# key: protokinetic
|
||||
# - type: Construction
|
||||
# graph: ArmSyntheticProtoKinetic
|
||||
# node: start
|
||||
|
||||
# - type: entity
|
||||
# id: LeftArmSyntheticProtoKinetic
|
||||
# description: "Turn your hand into Proto-kinetic accelerator. Now it is left, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticProtoKinetic, LeftArmSyntheticImplant ]
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# implantComponents:
|
||||
# - type: ExtendHandItemImplant
|
||||
# items:
|
||||
# - hand: body_part_slot_left_hand
|
||||
# prototype: WeaponArmProtoKinetic
|
||||
# toggleAction: ActionToggleBodyPartImplantKinetic
|
||||
|
||||
# - type: entity
|
||||
# id: RightArmSyntheticProtoKinetic
|
||||
# description: "Turn your hand into Proto-kinetic accelerator. Now it is right, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticProtoKinetic, RightArmSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: BodyPartImplant
|
||||
# implantComponents:
|
||||
# - type: ExtendHandItemImplant
|
||||
# items:
|
||||
# - hand: body_part_slot_right_hand
|
||||
# prototype: WeaponArmProtoKinetic
|
||||
# toggleAction: ActionToggleBodyPartImplantKinetic
|
||||
# - type: Construction
|
||||
# node: right
|
||||
|
||||
# - type: entity
|
||||
# id: WeaponArmProtoKinetic
|
||||
# name: "build-in proto-kinetic accelerator"
|
||||
# description: "Fires low-damage kinetic bolts at a short range."
|
||||
# parent: BaseItem
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Unremoveable
|
||||
# - type: Sprite
|
||||
# sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
|
||||
# layers:
|
||||
# - state: icon
|
||||
# - state: animation-icon
|
||||
# visible: false
|
||||
# map: [ "empty-icon" ]
|
||||
# - type: Item
|
||||
# sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
|
||||
# - type: Gun
|
||||
# fireRate: 0.5
|
||||
# selectedMode: SemiAuto
|
||||
# angleDecay: 10
|
||||
# minAngle: -5
|
||||
# maxAngle: 5
|
||||
# availableModes:
|
||||
# - SemiAuto
|
||||
# soundGunshot:
|
||||
# path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
|
||||
# - type: AmmoCounter
|
||||
# - type: Appearance
|
||||
# - type: GenericVisualizer
|
||||
# visuals:
|
||||
# enum.AmmoVisuals.HasAmmo:
|
||||
# empty-icon:
|
||||
# True: { visible: False }
|
||||
# False: { visible: True }
|
||||
# - type: RechargeBasicEntityAmmo
|
||||
# rechargeCooldown: 1.0
|
||||
# rechargeSound:
|
||||
# path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg
|
||||
# - type: BasicEntityAmmoProvider
|
||||
# proto: BulletKinetic
|
||||
# capacity: 1
|
||||
# count: 1
|
||||
- type: entity
|
||||
id: WeaponArmProtoKinetic
|
||||
name: "build-in proto-kinetic accelerator"
|
||||
description: "Fires low-damage kinetic bolts at a short range."
|
||||
parent: BaseItem
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Unremoveable
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- state: animation-icon
|
||||
visible: false
|
||||
map: [ "empty-icon" ]
|
||||
- type: Item
|
||||
sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
|
||||
- type: Gun
|
||||
fireRate: 0.5
|
||||
selectedMode: SemiAuto
|
||||
angleDecay: 10
|
||||
minAngle: -5
|
||||
maxAngle: 5
|
||||
availableModes:
|
||||
- SemiAuto
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
|
||||
- type: AmmoCounter
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.AmmoVisuals.HasAmmo:
|
||||
empty-icon:
|
||||
True: { visible: False }
|
||||
False: { visible: True }
|
||||
- type: RechargeBasicEntityAmmo
|
||||
rechargeCooldown: 1.0
|
||||
rechargeSound:
|
||||
path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: BulletKinetic
|
||||
capacity: 1
|
||||
count: 1
|
||||
|
||||
# # Charger arm
|
||||
|
||||
# - type: entity
|
||||
# id: ArmSyntheticCharger
|
||||
# name: "charger arm"
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: charger_arm
|
||||
# - type: BodyPartImplant
|
||||
# key: charge
|
||||
# implantComponents:
|
||||
# - type: BatteryDrainerImplant
|
||||
# - type: Construction
|
||||
# graph: ArmSyntheticCharger
|
||||
# node: start
|
||||
- type: entity
|
||||
id: ArmSyntheticCharger
|
||||
parent: [ ArmSyntheticImplant ]
|
||||
name: "charger arm"
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: charger_arm
|
||||
- type: BodyPartImplant
|
||||
key: charge
|
||||
implantComponents:
|
||||
- type: BatteryDrainerImplant
|
||||
|
||||
# - type: entity
|
||||
# id: LeftArmSyntheticCharger
|
||||
# description: "An arm with built-in charger, charge yourself or charge items. Now it is left, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticCharger, LeftArmSyntheticImplant ]
|
||||
# Magnet Leg
|
||||
|
||||
# - type: entity
|
||||
# id: RightArmSyntheticCharger
|
||||
# description: "An arm with built-in charger, charge yourself or charge items. Now it is right, use a screwdriver to change it."
|
||||
# parent: [ ArmSyntheticCharger, RightArmSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Construction
|
||||
# node: right
|
||||
- type: entity
|
||||
id: LegSyntheticMagboots
|
||||
parent: [ LegSyntheticImplant ]
|
||||
name: "magnet leg"
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: magnet_leg
|
||||
- type: BodyPartImplant
|
||||
key: magnet
|
||||
implantComponents:
|
||||
- type: MagbootsImplant
|
||||
|
||||
# # Magnet Leg
|
||||
# Jump Leg
|
||||
|
||||
# - type: entity
|
||||
# id: LegSyntheticMagboots
|
||||
# name: "magnet arm"
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: magnet_leg
|
||||
# - type: BodyPartImplant
|
||||
# key: magnet
|
||||
# implantComponents:
|
||||
# - type: MagbootsImplant
|
||||
# - type: Construction
|
||||
# graph: LegSyntheticMagboots
|
||||
# node: start
|
||||
|
||||
# - type: entity
|
||||
# id: LeftLegSyntheticMagboots
|
||||
# description: "A leg with built-in magboots. Now it is left, use a screwdriver to change it."
|
||||
# parent: [ LegSyntheticMagboots, LeftLegSyntheticImplant ]
|
||||
|
||||
# - type: entity
|
||||
# id: RightLegSyntheticMagboots
|
||||
# description: "A leg with built-in magboots. Now it is right, use a screwdriver to change it."
|
||||
# parent: [ LegSyntheticMagboots, RightLegSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Construction
|
||||
# node: right
|
||||
|
||||
# # Jump Leg
|
||||
|
||||
# - type: entity
|
||||
# id: LegSyntheticJump
|
||||
# name: "jump arm"
|
||||
# abstract: true
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
# state: jump_leg
|
||||
# - type: BodyPartImplant
|
||||
# key: jump
|
||||
# implantComponents:
|
||||
# - type: JumpAbility
|
||||
# action: ActionBodyPartImplantJump
|
||||
# jumpDistance: 4
|
||||
# jumpSound: /Audio/Effects/stealthoff.ogg
|
||||
# - type: Construction
|
||||
# graph: LegSyntheticJump
|
||||
# node: start
|
||||
|
||||
# - type: entity
|
||||
# id: LeftLegSyntheticJump
|
||||
# description: "A leg with an installed rocket engine for short jumps. Now it is left, use a screwdriver to change it."
|
||||
# parent: [ LegSyntheticJump, LeftLegSyntheticImplant ]
|
||||
|
||||
# - type: entity
|
||||
# id: RightLegSyntheticJump
|
||||
# description: "A leg with an installed rocket engine for short jumps. Now it is right, use a screwdriver to change it."
|
||||
# parent: [ LegSyntheticJump, RightLegSyntheticImplant ]
|
||||
# categories: [ HideSpawnMenu ]
|
||||
# components:
|
||||
# - type: Construction
|
||||
# node: right
|
||||
- type: entity
|
||||
id: LegSyntheticJump
|
||||
parent: [ LegSyntheticImplant ]
|
||||
name: "jump leg"
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: jump_leg
|
||||
- type: BodyPartImplant
|
||||
key: jump
|
||||
implantComponents:
|
||||
- type: JumpAbility
|
||||
action: ActionBodyPartImplantJump
|
||||
jumpDistance: 4
|
||||
jumpSound: /Audio/Effects/stealthoff.ogg
|
||||
|
||||
@@ -172,158 +172,4 @@
|
||||
amount: 2
|
||||
doAfter: 2
|
||||
|
||||
- node: complete
|
||||
|
||||
# ========================
|
||||
# Импланты частей тела
|
||||
# ========================
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: ArmSyntheticPry
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftArmSyntheticPry
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightArmSyntheticPry
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: ArmSyntheticDefib
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftArmSyntheticDefib
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightArmSyntheticDefib
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: ArmSyntheticProtoKinetic
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftArmSyntheticProtoKinetic
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightArmSyntheticProtoKinetic
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: ArmSyntheticCharger
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftArmSyntheticCharger
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightArmSyntheticCharger
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: LegSyntheticMagboots
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftLegSyntheticMagboots
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightLegSyntheticMagboots
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
|
||||
# - type: constructionGraph
|
||||
# id: LegSyntheticJump
|
||||
# start: start
|
||||
# graph:
|
||||
# - node: start
|
||||
# entity: LeftLegSyntheticJump
|
||||
# edges:
|
||||
# - to: right
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-rightarm
|
||||
# - node: right
|
||||
# entity: RightLegSyntheticJump
|
||||
# edges:
|
||||
# - to: start
|
||||
# steps:
|
||||
# - tool: Screwing
|
||||
# doAfter: 1
|
||||
# completed:
|
||||
# - !type:PopupUser
|
||||
# text: partimplant-assembly-leftarm
|
||||
- node: complete
|
||||
@@ -0,0 +1,123 @@
|
||||
- type: constructionGraph
|
||||
id: AndroidEndoskeleton
|
||||
start: start
|
||||
graph:
|
||||
- node: start
|
||||
entity: AndroidEndoskeleton
|
||||
edges:
|
||||
- to: frame
|
||||
steps:
|
||||
|
||||
# Left leg
|
||||
- tag: AndroidPart
|
||||
name: construction-graph-tag-android-part
|
||||
icon:
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: module_part
|
||||
completed:
|
||||
- !type:VisualizerDataInt
|
||||
key: "enum.AndroidFrameVisuals.ConstructionStage"
|
||||
data: 1
|
||||
|
||||
- material: Steel
|
||||
amount: 5
|
||||
doAfter: 3
|
||||
|
||||
- material: Plastic
|
||||
amount: 3
|
||||
doAfter: 1
|
||||
|
||||
- tool: Anchoring
|
||||
doAfter: 3
|
||||
|
||||
# Right leg
|
||||
- tag: AndroidPart
|
||||
name: construction-graph-tag-android-part
|
||||
icon:
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: module_part
|
||||
completed:
|
||||
- !type:VisualizerDataInt
|
||||
key: "enum.AndroidFrameVisuals.ConstructionStage"
|
||||
data: 2
|
||||
|
||||
- material: Steel
|
||||
amount: 5
|
||||
doAfter: 3
|
||||
|
||||
- material: Plastic
|
||||
amount: 3
|
||||
doAfter: 1
|
||||
|
||||
- tool: Anchoring
|
||||
doAfter: 3
|
||||
|
||||
# Left arm
|
||||
- tag: AndroidPart
|
||||
name: construction-graph-tag-android-part
|
||||
icon:
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: module_part
|
||||
completed:
|
||||
- !type:VisualizerDataInt
|
||||
key: "enum.AndroidFrameVisuals.ConstructionStage"
|
||||
data: 3
|
||||
|
||||
- material: Steel
|
||||
amount: 5
|
||||
doAfter: 3
|
||||
|
||||
- material: Plastic
|
||||
amount: 3
|
||||
doAfter: 1
|
||||
|
||||
- tool: Screwing
|
||||
doAfter: 3
|
||||
|
||||
# Right arm
|
||||
- tag: AndroidPart
|
||||
name: construction-graph-tag-android-part
|
||||
icon:
|
||||
sprite: _Wega/Mobs/Species/Android/parts.rsi
|
||||
state: module_part
|
||||
completed:
|
||||
- !type:VisualizerDataInt
|
||||
key: "enum.AndroidFrameVisuals.ConstructionStage"
|
||||
data: 4
|
||||
|
||||
- material: Steel
|
||||
amount: 5
|
||||
doAfter: 3
|
||||
|
||||
- material: Plastic
|
||||
amount: 3
|
||||
doAfter: 1
|
||||
|
||||
- tool: Screwing
|
||||
doAfter: 3
|
||||
|
||||
# Head
|
||||
- material: Steel
|
||||
amount: 10
|
||||
doAfter: 3
|
||||
completed:
|
||||
- !type:VisualizerDataInt
|
||||
key: "enum.AndroidFrameVisuals.ConstructionStage"
|
||||
data: 5
|
||||
|
||||
- material: Plastic
|
||||
amount: 3
|
||||
doAfter: 1
|
||||
|
||||
- tool: Screwing
|
||||
doAfter: 3
|
||||
|
||||
- tool: Welding
|
||||
doAfter: 5
|
||||
|
||||
- material: Cable
|
||||
amount: 10
|
||||
doAfter: 3
|
||||
|
||||
- node: frame
|
||||
entity: AndroidFrame
|
||||
@@ -9,3 +9,5 @@
|
||||
id: ScienceReach
|
||||
recipes:
|
||||
- Nanopast1
|
||||
- AndroidBodyPart
|
||||
- AndroidEndoskeleton
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
- type: latheCategory
|
||||
id: Anroid
|
||||
id: Android
|
||||
name: lathe-category-android
|
||||
|
||||
- type: latheCategory
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
Plastic: 500
|
||||
Gold: 500
|
||||
Diamond: 200
|
||||
|
||||
# Android
|
||||
|
||||
- type: latheRecipe
|
||||
@@ -141,31 +142,45 @@
|
||||
id: Tyriumpack
|
||||
result: Tyriumpack1
|
||||
categories:
|
||||
- Anroid
|
||||
- Android
|
||||
completetime: 1
|
||||
materials:
|
||||
Steel: 20
|
||||
Plastic: 20
|
||||
Plasma: 15
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: AndroidBodyPart
|
||||
# result: AndroidBodyPart
|
||||
# categories:
|
||||
# - Anroid
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 300
|
||||
# Plastic: 250
|
||||
# Silver: 150
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: AndroidBodyPart
|
||||
result: AndroidBodyPart
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 250
|
||||
Plastic: 250
|
||||
Silver: 150
|
||||
|
||||
- type: latheRecipe
|
||||
parent: BaseRoboticsRecipe
|
||||
id: AndroidEndoskeleton
|
||||
result: AndroidEndoskeleton
|
||||
categories:
|
||||
- Android
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 1000
|
||||
Glass: 1500
|
||||
Plastic: 500
|
||||
Gold: 500
|
||||
Plasma: 500
|
||||
|
||||
# - type: latheRecipe
|
||||
# parent: BaseRoboticsRecipe
|
||||
# id: ArmSyntheticPry
|
||||
# result: LeftArmSyntheticPry
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
@@ -178,7 +193,7 @@
|
||||
# id: ArmSyntheticDefib
|
||||
# result: LeftArmSyntheticDefib
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
@@ -190,7 +205,7 @@
|
||||
# id: ArmSyntheticProtoKinetic
|
||||
# result: LeftArmSyntheticProtoKinetic
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
@@ -203,7 +218,7 @@
|
||||
# id: ArmSyntheticCharger
|
||||
# result: LeftArmSyntheticCharger
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
@@ -215,7 +230,7 @@
|
||||
# id: LegSyntheticMagboots
|
||||
# result: LeftLegSyntheticMagboots
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
@@ -227,7 +242,7 @@
|
||||
# id: LegSyntheticJump
|
||||
# result: LeftLegSyntheticJump
|
||||
# categories:
|
||||
# - Anroid
|
||||
# - Android
|
||||
# completetime: 5
|
||||
# materials:
|
||||
# Steel: 750
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
state: fab-idle
|
||||
discipline: Experimental
|
||||
tier: 2
|
||||
cost: 10000
|
||||
cost: 15000
|
||||
recipeUnlocks:
|
||||
- BorgChargerTurboCircuitboard
|
||||
- ExosuitFabricatorHyperConvectionMachineCircuitboard
|
||||
- Nanopast1
|
||||
- AndroidBodyPart
|
||||
- AndroidEndoskeleton
|
||||
technologyPrerequisites:
|
||||
- BasicRobotics
|
||||
|
||||
|
||||
@@ -499,18 +499,6 @@
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: RemoveOrgan
|
||||
@@ -544,10 +532,6 @@
|
||||
label: Прикрепить левую кисть
|
||||
stepGroups:
|
||||
- steps:
|
||||
- tag: [ CableCoil ]
|
||||
entityPreview: CableApcStack
|
||||
action: MendWire
|
||||
time: 2
|
||||
- tag: [ LeftHandSynthetic ]
|
||||
action: InsertOrgan
|
||||
requiredPart: HandLeft
|
||||
@@ -584,18 +568,6 @@
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: RemoveOrgan
|
||||
@@ -629,10 +601,6 @@
|
||||
label: Прикрепить правую кисть
|
||||
stepGroups:
|
||||
- steps:
|
||||
- tag: [ CableCoil ]
|
||||
entityPreview: CableApcStack
|
||||
action: MendWire
|
||||
time: 2
|
||||
- tag: [ RightHandSynthetic ]
|
||||
action: InsertOrgan
|
||||
requiredPart: HandRight
|
||||
@@ -670,18 +638,6 @@
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: Unscrew
|
||||
@@ -767,18 +723,6 @@
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: Unscrew
|
||||
@@ -861,30 +805,12 @@
|
||||
- !type:OrganPresentCondition
|
||||
organ: FootLeft
|
||||
steps:
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: CutWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: Unscrew
|
||||
sound:
|
||||
collection: Screwdriver
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: RemoveOrgan
|
||||
@@ -918,20 +844,10 @@
|
||||
label: Прикрепить левую стопу
|
||||
stepGroups:
|
||||
- steps:
|
||||
- tag: [ CableCoil ]
|
||||
entityPreview: CableApcStack
|
||||
action: MendWire
|
||||
time: 2
|
||||
- tag: [ LeftFootSynthetic ]
|
||||
action: InsertOrgan
|
||||
requiredPart: FootLeft
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Anchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
|
||||
# ПРАВАЯ СТОПА
|
||||
- type: surgeryTransition
|
||||
@@ -963,30 +879,12 @@
|
||||
- !type:OrganPresentCondition
|
||||
organ: FootRight
|
||||
steps:
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: CutWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Cutting ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: StripWire
|
||||
sound:
|
||||
path: /Audio/Items/wirecutter.ogg
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Unanchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
- tool: [ Screwing ]
|
||||
tag: [ Knife, Shiv, BasicGlassShard]
|
||||
action: Unscrew
|
||||
sound:
|
||||
collection: Screwdriver
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: RemoveOrgan
|
||||
@@ -1020,20 +918,10 @@
|
||||
label: Прикрепить правую стопу
|
||||
stepGroups:
|
||||
- steps:
|
||||
- tag: [ CableCoil ]
|
||||
entityPreview: CableApcStack
|
||||
action: MendWire
|
||||
time: 2
|
||||
- tag: [ RightFootSynthetic ]
|
||||
action: InsertOrgan
|
||||
requiredPart: FootRight
|
||||
time: 2
|
||||
- tool: [ Anchoring ]
|
||||
tag: [ Wirecutter, Pipe ]
|
||||
action: Anchor
|
||||
sound:
|
||||
path: /Audio/Items/ratchet.ogg
|
||||
time: 2
|
||||
|
||||
# Завершающий переход конечности
|
||||
- type: surgeryTransition
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
- type: Tag
|
||||
id: Android
|
||||
|
||||
- type: Tag
|
||||
id: AndroidPart
|
||||
|
||||
- type: Tag
|
||||
id: SoulStone
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 605 B After Width: | Height: | Size: 461 B |
|
After Width: | Height: | Size: 740 B |
|
After Width: | Height: | Size: 341 B |
|
After Width: | Height: | Size: 720 B |
|
After Width: | Height: | Size: 245 B |
|
After Width: | Height: | Size: 633 B |
|
Before Width: | Height: | Size: 653 B After Width: | Height: | Size: 511 B |
|
After Width: | Height: | Size: 1.0 KiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made with love by Misha_Unity and Melissandra >//<",
|
||||
"copyright": "Made with love by Misha_Unity and Melissandra >//<; Syth sprites are made by Admiral Eisenberger",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -127,6 +127,14 @@
|
||||
"name": "r_arm_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_hand_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_hand_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_leg_scrap",
|
||||
"directions": 4
|
||||
@@ -134,6 +142,54 @@
|
||||
{
|
||||
"name": "r_leg_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_foot_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_foot_scrap",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "body_f_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "body_m_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_arm_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_arm_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_hand_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_hand_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_leg_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_leg_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "l_foot_synt",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "r_foot_synt",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 689 B After Width: | Height: | Size: 494 B |
|
After Width: | Height: | Size: 760 B |
|
After Width: | Height: | Size: 360 B |
|
After Width: | Height: | Size: 713 B |
|
After Width: | Height: | Size: 272 B |
|
After Width: | Height: | Size: 624 B |
|
Before Width: | Height: | Size: 753 B After Width: | Height: | Size: 584 B |
|
After Width: | Height: | Size: 1.0 KiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made with love by Misha_Unity and Melissandra >//<",
|
||||
"copyright": "Made with love by Misha_Unity and Melissandra >//<; Syth sprites are made by Admiral Eisenberger",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -53,6 +53,14 @@
|
||||
{
|
||||
"name": "animatronic",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "synt_m",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "synt_f",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 986 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 495 B |
|
After Width: | Height: | Size: 495 B |
|
After Width: | Height: | Size: 601 B |
|
After Width: | Height: | Size: 682 B |
|
After Width: | Height: | Size: 758 B |
|
After Width: | Height: | Size: 815 B |
|
After Width: | Height: | Size: 920 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 226 B |
|
After Width: | Height: | Size: 219 B |
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made with love by Misha_Unity and Melissandra >//<",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "full"
|
||||
},
|
||||
{
|
||||
"name": "body"
|
||||
},
|
||||
{
|
||||
"name": "l_arm"
|
||||
},
|
||||
{
|
||||
"name": "l_leg"
|
||||
},
|
||||
{
|
||||
"name": "r_arm"
|
||||
},
|
||||
{
|
||||
"name": "frame-0"
|
||||
},
|
||||
{
|
||||
"name": "frame-1"
|
||||
},
|
||||
{
|
||||
"name": "frame-2"
|
||||
},
|
||||
{
|
||||
"name": "frame-3"
|
||||
},
|
||||
{
|
||||
"name": "frame-4"
|
||||
},
|
||||
{
|
||||
"name": "frame-5"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 235 B |
|
After Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 498 B After Width: | Height: | Size: 543 B |