mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 10:21:18 +03:00
Actions icons refactor (#44681)
* basic code porting * prototypes port * rendering update * charge state * helper * fix * forgotten one
This commit is contained in:
parent
335f13c22a
commit
07919e1ae2
54 changed files with 753 additions and 464 deletions
31
Content.Client/Actions/ActionIconVisualsSystem.cs
Normal file
31
Content.Client/Actions/ActionIconVisualsSystem.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions.Components;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client.Actions;
|
||||
|
||||
public sealed partial class ActionIconVisualsSystem : VisualizerSystem<ActionComponent>
|
||||
{
|
||||
protected override void OnAppearanceChange(EntityUid uid, ActionComponent comp, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (args.Sprite == null)
|
||||
return;
|
||||
|
||||
if (AppearanceSystem.TryGetData<SpriteSpecifier>(uid, ActionState.DynamicIcon, out var icon, args.Component))
|
||||
{
|
||||
if (icon is SpriteSpecifier.EntityPrototype)
|
||||
SpriteSystem.LayerSetTexture((uid, args.Sprite), ActionVisuals.Icon, SpriteSystem.Frame0(icon));
|
||||
else
|
||||
SpriteSystem.LayerSetSprite((uid, args.Sprite), ActionVisuals.Icon, icon);
|
||||
}
|
||||
|
||||
if (AppearanceSystem.TryGetData<Color>(uid, ActionState.Color, out var color, args.Component))
|
||||
{
|
||||
SpriteSystem.LayerSetColor((uid, args.Sprite), ActionVisuals.Icon, color);
|
||||
|
||||
if (SpriteSystem.LayerExists((uid, args.Sprite), ActionVisuals.IconToggled))
|
||||
SpriteSystem.LayerSetColor((uid, args.Sprite), ActionVisuals.IconToggled, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,10 +2,10 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions.Components;
|
||||
using Content.Shared.Charges.Systems;
|
||||
using Content.Shared.Mapping;
|
||||
using Content.Shared.Maps;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.ContentPack;
|
||||
using Robust.Shared.GameStates;
|
||||
|
|
@ -27,11 +27,11 @@ namespace Content.Client.Actions
|
|||
{
|
||||
public delegate void OnActionReplaced(EntityUid actionId);
|
||||
|
||||
[Dependency] private SharedChargesSystem _sharedCharges = default!;
|
||||
[Dependency] private IPlayerManager _playerManager = default!;
|
||||
[Dependency] private IResourceManager _resources = default!;
|
||||
[Dependency] private MetaDataSystem _metaData = default!;
|
||||
[Dependency] private ISerializationManager _serialization = default!;
|
||||
[Dependency] private SpriteSystem _sprite = default!;
|
||||
|
||||
public event Action<EntityUid>? OnActionAdded;
|
||||
public event Action<EntityUid>? OnActionRemoved;
|
||||
|
|
@ -68,8 +68,6 @@ namespace Content.Client.Actions
|
|||
|
||||
public override void UpdateAction(Entity<ActionComponent> ent)
|
||||
{
|
||||
// TODO: Decouple this.
|
||||
ent.Comp.IconColor = _sharedCharges.GetCurrentCharges(ent.Owner) == 0 ? ent.Comp.DisabledIconColor : ent.Comp.OriginalIconColor;
|
||||
base.UpdateAction(ent);
|
||||
if (_playerManager.LocalEntity != ent.Comp.AttachedEntity)
|
||||
return;
|
||||
|
|
@ -153,6 +151,16 @@ namespace Content.Client.Actions
|
|||
ActionsUpdated?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True if this action has a distinct sprite layer to show while toggled,
|
||||
/// rather than just highlighting whatever slot displays it.
|
||||
/// </summary>
|
||||
public bool HasToggleIcon(EntityUid? actionId)
|
||||
{
|
||||
return TryComp<SpriteComponent>(actionId, out var sprite)
|
||||
&& _sprite.LayerExists((actionId.Value, sprite), ActionVisuals.IconToggled);
|
||||
}
|
||||
|
||||
public IEnumerable<Entity<ActionComponent>> GetClientActions()
|
||||
{
|
||||
if (_playerManager.LocalEntity is not { } user)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
using Content.Client.Actions;
|
||||
using Content.Client.Charges.UI;
|
||||
using Content.Client.Items;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Charges.Components;
|
||||
using Content.Shared.Charges.Systems;
|
||||
|
||||
|
|
@ -9,8 +7,6 @@ namespace Content.Client.Charges;
|
|||
|
||||
public sealed partial class ChargesSystem : SharedChargesSystem
|
||||
{
|
||||
[Dependency] private ActionsSystem _actions = default!;
|
||||
|
||||
private Dictionary<EntityUid, int> _lastCharges = new();
|
||||
private Dictionary<EntityUid, int> _tempLastCharges = new();
|
||||
|
||||
|
|
@ -33,14 +29,11 @@ public sealed partial class ChargesSystem : SharedChargesSystem
|
|||
|
||||
while (query.MoveNext(out var uid, out var recharge, out var charges))
|
||||
{
|
||||
if (_actions.GetAction(uid, false) is not {} action)
|
||||
continue;
|
||||
|
||||
var current = GetCurrentCharges((uid, charges, recharge));
|
||||
|
||||
if (!_lastCharges.TryGetValue(uid, out var last) || current != last)
|
||||
{
|
||||
_actions.UpdateAction(action);
|
||||
UpdateChargeVisuals((uid, charges, recharge));
|
||||
}
|
||||
|
||||
_tempLastCharges[uid] = current;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using Content.Client.Actions;
|
||||
using Content.Client.Message;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Store;
|
||||
|
|
@ -10,6 +9,7 @@ using Robust.Client.Graphics;
|
|||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Graphics.RSI;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client.Store.Ui;
|
||||
|
|
@ -141,8 +141,8 @@ public sealed partial class StoreMenu : DefaultWindow
|
|||
else if (listing.ProductAction != null)
|
||||
{
|
||||
var actionId = _entityManager.Spawn(listing.ProductAction);
|
||||
if (_entityManager.System<ActionsSystem>().GetAction(actionId)?.Comp?.Icon is {} icon)
|
||||
texture = spriteSys.Frame0(icon);
|
||||
if (_entityManager.TryGetComponent(actionId, out SpriteComponent? actionSprite))
|
||||
texture = actionSprite.Icon?.GetFrame(RsiDirection.South, 0);
|
||||
}
|
||||
|
||||
var listingInStock = GetListingPriceString(listing);
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ public sealed partial class ActionUIController : UIController, IOnStateChanged<G
|
|||
[UISystemDependency] private readonly ActionsSystem? _actionsSystem = default;
|
||||
[UISystemDependency] private readonly InteractionOutlineSystem? _interactionOutline = default;
|
||||
[UISystemDependency] private readonly TargetOutlineSystem? _targetOutline = default;
|
||||
[UISystemDependency] private readonly SpriteSystem _spriteSystem = default!;
|
||||
|
||||
private ActionButtonContainer? _container;
|
||||
private readonly List<EntityUid?> _actions = new();
|
||||
|
|
@ -363,7 +362,7 @@ public sealed partial class ActionUIController : UIController, IOnStateChanged<G
|
|||
continue;
|
||||
}
|
||||
|
||||
var button = new ActionButton(EntityManager, _spriteSystem, this) {Locked = true};
|
||||
var button = new ActionButton(EntityManager, this) {Locked = true};
|
||||
button.ActionPressed += OnWindowActionPressed;
|
||||
button.ActionUnpressed += OnWindowActionUnPressed;
|
||||
button.ActionFocusExited += OnWindowActionFocusExisted;
|
||||
|
|
@ -603,14 +602,15 @@ public sealed partial class ActionUIController : UIController, IOnStateChanged<G
|
|||
// and a small item/provider sprite, then the dragged icon should be the big texture, not the provider.
|
||||
if (_menuDragHelper.Dragged?.Action is {} action)
|
||||
{
|
||||
if (EntityManager.TryGetComponent(action.Comp.EntityIcon, out SpriteComponent? sprite)
|
||||
&& sprite.Icon?.GetFrame(RsiDirection.South, 0) is {} frame)
|
||||
if (EntityManager.TryGetComponent(action.Comp.EntityIcon, out SpriteComponent? itemSprite)
|
||||
&& itemSprite.Icon?.GetFrame(RsiDirection.South, 0) is {} itemFrame)
|
||||
{
|
||||
_dragShadow.Texture = frame;
|
||||
_dragShadow.Texture = itemFrame;
|
||||
}
|
||||
else if (action.Comp.Icon is {} icon)
|
||||
else if (EntityManager.TryGetComponent(action.Owner, out SpriteComponent? actionSprite)
|
||||
&& actionSprite.Icon?.GetFrame(RsiDirection.South, 0) is {} actionFrame)
|
||||
{
|
||||
_dragShadow.Texture = _spriteSystem.Frame0(icon);
|
||||
_dragShadow.Texture = actionFrame;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -811,10 +811,11 @@ public sealed partial class ActionUIController : UIController, IOnStateChanged<G
|
|||
{
|
||||
handOverlay.EntityOverride = provider;
|
||||
}
|
||||
else if (action.Toggled && action.IconOn != null)
|
||||
handOverlay.IconOverride = _spriteSystem.Frame0(action.IconOn);
|
||||
else if (action.Icon != null)
|
||||
handOverlay.IconOverride = _spriteSystem.Frame0(action.Icon);
|
||||
else if (EntityManager.TryGetComponent(uid, out SpriteComponent? actionSprite)
|
||||
&& actionSprite.Icon?.GetFrame(RsiDirection.South, 0) is {} frame)
|
||||
{
|
||||
handOverlay.IconOverride = frame;
|
||||
}
|
||||
}
|
||||
|
||||
if (_container != null)
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ using Content.Client.Actions;
|
|||
using Content.Client.Actions.UI;
|
||||
using Content.Client.Cooldown;
|
||||
using Content.Client.Stylesheets;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions.Components;
|
||||
using Content.Shared.Charges.Systems;
|
||||
using Content.Shared.Examine;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
|
|
@ -15,7 +15,6 @@ using Robust.Shared.Input;
|
|||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Utility;
|
||||
using static Robust.Client.UserInterface.Controls.BoxContainer;
|
||||
using static Robust.Client.UserInterface.Controls.TextureRect;
|
||||
using Direction = Robust.Shared.Maths.Direction;
|
||||
|
||||
namespace Content.Client.UserInterface.Systems.Actions.Controls;
|
||||
|
|
@ -26,7 +25,7 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
|
||||
private IEntityManager _entities;
|
||||
private IPlayerManager _player;
|
||||
private SpriteSystem? _spriteSys;
|
||||
private ActionsSystem? _actionsSys;
|
||||
private ActionUIController? _controller;
|
||||
private bool _beingHovered;
|
||||
private bool _depressed;
|
||||
|
|
@ -48,15 +47,13 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
|
||||
public readonly TextureRect Button;
|
||||
public readonly PanelContainer HighlightRect;
|
||||
private readonly TextureRect _bigActionIcon;
|
||||
private readonly TextureRect _smallActionIcon;
|
||||
private readonly SpriteView _bigActionIcon;
|
||||
private readonly SpriteView _smallActionIcon;
|
||||
public readonly Label Label;
|
||||
public readonly CooldownGraphic Cooldown;
|
||||
private readonly SpriteView _smallItemSpriteView;
|
||||
private readonly SpriteView _bigItemSpriteView;
|
||||
|
||||
private Texture? _buttonBackgroundTexture;
|
||||
|
||||
public Entity<ActionComponent>? Action { get; private set; }
|
||||
public bool Locked { get; set; }
|
||||
|
||||
|
|
@ -64,13 +61,12 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
public event Action<GUIBoundKeyEventArgs, ActionButton>? ActionUnpressed;
|
||||
public event Action<ActionButton>? ActionFocusExited;
|
||||
|
||||
public ActionButton(IEntityManager entities, SpriteSystem? spriteSys = null, ActionUIController? controller = null)
|
||||
public ActionButton(IEntityManager entities, ActionUIController? controller = null)
|
||||
{
|
||||
// TODO why is this constructor so slooooow. The rest of the code is fine
|
||||
|
||||
_entities = entities;
|
||||
_player = IoCManager.Resolve<IPlayerManager>();
|
||||
_spriteSys = spriteSys;
|
||||
_controller = controller;
|
||||
|
||||
MouseFilter = MouseFilterMode.Pass;
|
||||
|
|
@ -85,19 +81,23 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
MinSize = new Vector2(32, 32),
|
||||
Visible = false
|
||||
};
|
||||
_bigActionIcon = new TextureRect
|
||||
_bigActionIcon = new SpriteView
|
||||
{
|
||||
Name = "Big Action Icon",
|
||||
HorizontalExpand = true,
|
||||
VerticalExpand = true,
|
||||
Stretch = StretchMode.Scale,
|
||||
Visible = false
|
||||
Scale = new Vector2(2, 2),
|
||||
SetSize = new Vector2(64, 64),
|
||||
Visible = false,
|
||||
OverrideDirection = Direction.South,
|
||||
};
|
||||
_smallActionIcon = new TextureRect
|
||||
_smallActionIcon = new SpriteView
|
||||
{
|
||||
Name = "Small Action Icon",
|
||||
HorizontalAlignment = HAlignment.Right,
|
||||
VerticalAlignment = VAlignment.Bottom,
|
||||
Stretch = StretchMode.Scale,
|
||||
Visible = false
|
||||
Visible = false,
|
||||
OverrideDirection = Direction.South,
|
||||
};
|
||||
Label = new Label
|
||||
{
|
||||
|
|
@ -167,7 +167,6 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
protected override void OnThemeUpdated()
|
||||
{
|
||||
base.OnThemeUpdated();
|
||||
_buttonBackgroundTexture = Theme.ResolveTexture("SlotBackground");
|
||||
Label.FontColorOverride = Theme.ResolveColorOrSpecified("whiteText");
|
||||
}
|
||||
|
||||
|
|
@ -253,61 +252,36 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
}
|
||||
}
|
||||
|
||||
private void SetActionIcon(Texture? texture)
|
||||
private void UpdateActionIcon()
|
||||
{
|
||||
if (Action?.Comp is not {} action || texture == null)
|
||||
if (Action?.Comp is not {} action || !_entities.HasComponent<SpriteComponent>(Action.Value.Owner))
|
||||
{
|
||||
_bigActionIcon.Texture = null;
|
||||
_bigActionIcon.Visible = false;
|
||||
_smallActionIcon.Texture = null;
|
||||
_bigActionIcon.SetEntity(null);
|
||||
_smallActionIcon.Visible = false;
|
||||
_smallActionIcon.SetEntity(null);
|
||||
}
|
||||
else if (action.EntityIcon != null && action.ItemIconStyle == ItemActionIconStyle.BigItem)
|
||||
{
|
||||
_smallActionIcon.Texture = texture;
|
||||
_smallActionIcon.Modulate = action.IconColor;
|
||||
_smallActionIcon.Visible = true;
|
||||
_bigActionIcon.Texture = null;
|
||||
_smallActionIcon.SetEntity(Action.Value.Owner);
|
||||
_bigActionIcon.Visible = false;
|
||||
_bigActionIcon.SetEntity(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
_bigActionIcon.Texture = texture;
|
||||
_bigActionIcon.Modulate = action.IconColor;
|
||||
_bigActionIcon.Visible = true;
|
||||
_smallActionIcon.Texture = null;
|
||||
_bigActionIcon.SetEntity(Action.Value.Owner);
|
||||
_smallActionIcon.Visible = false;
|
||||
_smallActionIcon.SetEntity(null);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateIcons()
|
||||
{
|
||||
UpdateItemIcon();
|
||||
UpdateActionIcon();
|
||||
UpdateBackground();
|
||||
|
||||
if (Action is not {} action)
|
||||
{
|
||||
SetActionIcon(null);
|
||||
return;
|
||||
}
|
||||
|
||||
_controller ??= UserInterfaceManager.GetUIController<ActionUIController>();
|
||||
_spriteSys ??= _entities.System<SpriteSystem>();
|
||||
var icon = action.Comp.Icon;
|
||||
if (_controller.SelectingTargetFor == action || action.Comp.Toggled)
|
||||
{
|
||||
if (action.Comp.IconOn is {} iconOn)
|
||||
icon = iconOn;
|
||||
|
||||
if (action.Comp.BackgroundOn is {} background)
|
||||
_buttonBackgroundTexture = _spriteSys.Frame0(background);
|
||||
}
|
||||
else
|
||||
{
|
||||
_buttonBackgroundTexture = Theme.ResolveTexture("SlotBackground");
|
||||
}
|
||||
|
||||
SetActionIcon(icon != null ? _spriteSys.Frame0(icon) : null);
|
||||
}
|
||||
|
||||
public void UpdateBackground()
|
||||
|
|
@ -316,7 +290,7 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
if (Action != null ||
|
||||
_controller.IsDragging && GetPositionInParent() == Parent?.ChildCount - 1)
|
||||
{
|
||||
Button.Texture = _buttonBackgroundTexture;
|
||||
Button.Texture = Theme.ResolveTexture("SlotBackground");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -429,7 +403,8 @@ public sealed class ActionButton : Control, IEntityControl
|
|||
if (action.Toggled || _controller.SelectingTargetFor == Action?.Owner)
|
||||
{
|
||||
// when there's a toggle sprite, we're showing that sprite instead of highlighting this slot
|
||||
SetOnlyStylePseudoClass(action.IconOn != null
|
||||
_actionsSys ??= _entities.System<ActionsSystem>();
|
||||
SetOnlyStylePseudoClass(_actionsSys.HasToggleIcon(Action?.Owner)
|
||||
? ContainerButton.StylePseudoClassNormal
|
||||
: ContainerButton.StylePseudoClassPressed);
|
||||
return;
|
||||
|
|
|
|||
32
Content.Shared/Actions/ActionVisuals.cs
Normal file
32
Content.Shared/Actions/ActionVisuals.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Actions;
|
||||
|
||||
/// <summary>
|
||||
/// Sprite layer keys for action entities.
|
||||
/// </summary>
|
||||
[Serializable, NetSerializable]
|
||||
public enum ActionVisuals : byte
|
||||
{
|
||||
/// <summary>Layer key. The action's base icon.</summary>
|
||||
Icon,
|
||||
|
||||
/// <summary>Layer key. Optional, shown only while toggled on.</summary>
|
||||
IconToggled,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appearance data keys for action entities.
|
||||
/// </summary>
|
||||
[Serializable, NetSerializable]
|
||||
public enum ActionState : byte
|
||||
{
|
||||
/// <summary>Appearance key. Mirrors ActionComponent.Toggled.</summary>
|
||||
Toggled,
|
||||
|
||||
/// <summary>Appearance key. Runtime-assigned SpriteSpecifier, for actions with a dynamic icon.</summary>
|
||||
DynamicIcon,
|
||||
|
||||
/// <summary>Appearance key. Runtime-assigned tint override, e.g. decal-placement actions.</summary>
|
||||
Color,
|
||||
}
|
||||
|
|
@ -4,7 +4,6 @@ using Robust.Shared.GameStates;
|
|||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Actions.Components;
|
||||
|
||||
|
|
@ -16,46 +15,6 @@ namespace Content.Shared.Actions.Components;
|
|||
[EntityCategory("Actions")]
|
||||
public sealed partial class ActionComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Icon representing this action in the UI.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public SpriteSpecifier? Icon;
|
||||
|
||||
/// <summary>
|
||||
/// For toggle actions only, icon to show when toggled on. If omitted, the action will simply be highlighted
|
||||
/// when turned on.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public SpriteSpecifier? IconOn;
|
||||
|
||||
/// <summary>
|
||||
/// For toggle actions only, background to show when toggled on.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public SpriteSpecifier? BackgroundOn;
|
||||
|
||||
/// <summary>
|
||||
/// If not null, this color will modulate the action icon color.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only exists for decal-placement actions, so that the action icons correspond to the color of
|
||||
/// the decal. But this is probably useful for other actions, including maybe changing color on toggle.
|
||||
/// </remarks>
|
||||
[DataField, AutoNetworkedField]
|
||||
public Color IconColor = Color.White;
|
||||
|
||||
/// <summary>
|
||||
/// The original <see cref="IconColor"/> this action was.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public Color OriginalIconColor;
|
||||
|
||||
/// <summary>
|
||||
/// The color the action should turn to when disabled
|
||||
/// </summary>
|
||||
[DataField] public Color DisabledIconColor = Color.DimGray;
|
||||
|
||||
/// <summary>
|
||||
/// Keywords that can be used to search for this action in the action menu.
|
||||
/// </summary>
|
||||
|
|
@ -69,7 +28,7 @@ public sealed partial class ActionComponent : Component
|
|||
public bool Enabled = true;
|
||||
|
||||
/// <summary>
|
||||
/// The toggle state of this action. Toggling switches the currently displayed icon, see <see cref="Icon"/> and <see cref="IconOn"/>.
|
||||
/// The toggle state of this action. Toggling switches the currently displayed icon layer.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The toggle can set directly via <see cref="SharedActionsSystem.SetToggled"/>, but it will also be
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ public abstract partial class SharedActionsSystem : EntitySystem
|
|||
[Dependency] private ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private EntityWhitelistSystem _whitelist = default!;
|
||||
[Dependency] private RotateToFaceSystem _rotateToFace = default!;
|
||||
[Dependency] private SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private SharedAudioSystem _audio = default!;
|
||||
[Dependency] private SharedInteractionSystem _interaction = default!;
|
||||
[Dependency] private SharedTransformSystem _transform = default!;
|
||||
|
|
@ -78,9 +79,7 @@ public abstract partial class SharedActionsSystem : EntitySystem
|
|||
|
||||
private void OnActionMapInit(Entity<ActionComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
var comp = ent.Comp;
|
||||
comp.OriginalIconColor = comp.IconColor;
|
||||
DirtyField(ent, ent.Comp, nameof(ActionComponent.OriginalIconColor));
|
||||
_appearance.SetData(ent, ActionState.Toggled, ent.Comp.Toggled);
|
||||
}
|
||||
|
||||
private void OnActionShutdown(Entity<ActionComponent> ent, ref ComponentShutdown args)
|
||||
|
|
@ -236,6 +235,7 @@ public abstract partial class SharedActionsSystem : EntitySystem
|
|||
return;
|
||||
|
||||
ent.Comp.Toggled = toggled;
|
||||
_appearance.SetData(ent, ActionState.Toggled, toggled);
|
||||
UpdateAction(ent);
|
||||
DirtyField(ent, ent.Comp, nameof(ActionComponent.Toggled));
|
||||
}
|
||||
|
|
@ -974,29 +974,21 @@ public abstract partial class SharedActionsSystem : EntitySystem
|
|||
|
||||
public void SetIcon(Entity<ActionComponent?> ent, SpriteSpecifier? icon)
|
||||
{
|
||||
if (!_actionQuery.Resolve(ent, ref ent.Comp) || ent.Comp.Icon == icon)
|
||||
if (!_actionQuery.Resolve(ent, ref ent.Comp))
|
||||
return;
|
||||
|
||||
ent.Comp.Icon = icon;
|
||||
DirtyField(ent, ent.Comp, nameof(ActionComponent.Icon));
|
||||
}
|
||||
|
||||
public void SetIconOn(Entity<ActionComponent?> ent, SpriteSpecifier? iconOn)
|
||||
{
|
||||
if (!_actionQuery.Resolve(ent, ref ent.Comp) || ent.Comp.IconOn == iconOn)
|
||||
return;
|
||||
|
||||
ent.Comp.IconOn = iconOn;
|
||||
DirtyField(ent, ent.Comp, nameof(ActionComponent.IconOn));
|
||||
if (icon == null)
|
||||
_appearance.RemoveData(ent.Owner, ActionState.DynamicIcon);
|
||||
else
|
||||
_appearance.SetData(ent.Owner, ActionState.DynamicIcon, icon);
|
||||
}
|
||||
|
||||
public void SetIconColor(Entity<ActionComponent?> ent, Color color)
|
||||
{
|
||||
if (!_actionQuery.Resolve(ent, ref ent.Comp) || ent.Comp.IconColor == color)
|
||||
if (!_actionQuery.Resolve(ent, ref ent.Comp))
|
||||
return;
|
||||
|
||||
ent.Comp.IconColor = color;
|
||||
DirtyField(ent, ent.Comp, nameof(ActionComponent.IconColor));
|
||||
_appearance.SetData(ent.Owner, ActionState.Color, color);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
13
Content.Shared/Charges/LimitedChargesState.cs
Normal file
13
Content.Shared/Charges/LimitedChargesState.cs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Charges;
|
||||
|
||||
/// <summary>
|
||||
/// Appearance data keys for entities with LimitedCharges.
|
||||
/// </summary>
|
||||
[Serializable, NetSerializable]
|
||||
public enum LimitedChargesState : byte
|
||||
{
|
||||
/// <summary>True if current charges > 0.</summary>
|
||||
HasCharges,
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ namespace Content.Shared.Charges.Systems;
|
|||
public abstract partial class SharedChargesSystem : EntitySystem
|
||||
{
|
||||
[Dependency] protected IGameTiming _timing = default!;
|
||||
[Dependency] private SharedAppearanceSystem _appearance = default!;
|
||||
|
||||
/*
|
||||
* Despite what a bunch of systems do you don't need to continuously tick linear number updates and can just derive it easily.
|
||||
|
|
@ -87,6 +88,13 @@ public abstract partial class SharedChargesSystem : EntitySystem
|
|||
|
||||
ent.Comp.LastUpdate = _timing.CurTime;
|
||||
Dirty(ent);
|
||||
UpdateChargeVisuals((ent.Owner, ent.Comp, null));
|
||||
}
|
||||
|
||||
protected void UpdateChargeVisuals(Entity<LimitedChargesComponent?, AutoRechargeComponent?> entity)
|
||||
{
|
||||
var current = GetCurrentCharges(entity);
|
||||
_appearance.SetData(entity.Owner, LimitedChargesState.HasCharges, current != 0);
|
||||
}
|
||||
|
||||
[Pure]
|
||||
|
|
@ -138,6 +146,7 @@ public abstract partial class SharedChargesSystem : EntitySystem
|
|||
|
||||
action.Comp1.LastCharges = Math.Clamp(action.Comp1.LastCharges + addCharges, 0, action.Comp1.MaxCharges);
|
||||
Dirty(action.Owner, action.Comp1);
|
||||
UpdateChargeVisuals(action);
|
||||
}
|
||||
|
||||
public bool TryUseCharge(Entity<LimitedChargesComponent?> entity)
|
||||
|
|
@ -208,6 +217,7 @@ public abstract partial class SharedChargesSystem : EntitySystem
|
|||
action.Comp.LastCharges = adjusted;
|
||||
action.Comp.LastUpdate = _timing.CurTime;
|
||||
Dirty(action);
|
||||
UpdateChargeVisuals((action.Owner, action.Comp, null));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,9 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 30
|
||||
icon: { sprite: Structures/Specific/anomaly.rsi, state: anom1 }
|
||||
- type: Sprite
|
||||
sprite: Structures/Specific/anomaly.rsi
|
||||
layers:
|
||||
- state: anom1
|
||||
- type: InstantAction
|
||||
event: !type:ActionAnomalyPulseEvent
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@
|
|||
components:
|
||||
- type: Action
|
||||
itemIconStyle: NoItem
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
state: state-laws
|
||||
useDelay: 0.5
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
layers:
|
||||
- state: state-laws
|
||||
- type: InstantAction
|
||||
event: !type:ToggleLawsScreenEvent
|
||||
|
||||
|
|
@ -20,9 +21,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
itemIconStyle: NoItem
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
state: select-type
|
||||
useDelay: 0.5
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
layers:
|
||||
- state: select-type
|
||||
- type: InstantAction
|
||||
event: !type:BorgToggleSelectTypeEvent
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@
|
|||
useDelay: 2
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling.rsi
|
||||
state: armblade
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling.rsi
|
||||
layers:
|
||||
- state: armblade
|
||||
- type: InstantAction
|
||||
event: !type:OnRetractableItemActionEvent
|
||||
- type: RetractableItemAction
|
||||
|
|
@ -30,9 +31,10 @@
|
|||
useDelay: 60 # TODO: Short cooldown but chemical cost
|
||||
raiseOnAction: true
|
||||
checkCanInteract: false
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: biodegrade
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: biodegrade
|
||||
- type: InstantAction
|
||||
event: !type:ChangelingBiodegradeActionEvent
|
||||
- type: ChangelingBiodegradeAbility
|
||||
|
|
@ -43,10 +45,16 @@
|
|||
description: Consume the essence of your victims and subsume their identity and mind into your own.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite : Interface/Actions/changeling.rsi, state: "devour" }
|
||||
iconOn: { sprite : Interface/Actions/changeling.rsi, state: "devour_on" }
|
||||
itemIconStyle: BigAction
|
||||
priority: 1
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling.rsi
|
||||
layers:
|
||||
- state: "devour"
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: "devour_on"
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: ActionRequireMouthUncovered
|
||||
- type: TargetAction
|
||||
- type: EntityTargetAction
|
||||
|
|
@ -58,7 +66,10 @@
|
|||
description: Transform and assume the identities of those you have devoured.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite : Interface/Actions/changeling.rsi, state: "transform" }
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling.rsi
|
||||
layers:
|
||||
- state: "transform"
|
||||
- type: InstantAction
|
||||
event: !type:ChangelingTransformActionEvent
|
||||
|
||||
|
|
@ -69,7 +80,10 @@
|
|||
description: Opens the ability store.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite : Interface/Actions/changeling2.rsi, state: "shop" }
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: "shop"
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -79,9 +93,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: mimicry
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: mimicry
|
||||
- type: InstantAction
|
||||
event: !type:VoiceMaskSetNameEvent
|
||||
|
||||
|
|
@ -92,12 +107,18 @@
|
|||
description: Sneakily absorb the identity of unsuspecting victims. Does not grant DNA to your store or objective progress.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite : Interface/Actions/changeling2.rsi, state: "extract_dna_off" }
|
||||
iconOn: { sprite : Interface/Actions/changeling2.rsi, state: "extract_dna_on" }
|
||||
itemIconStyle: BigAction
|
||||
priority: 1
|
||||
useDelay: 90 # TODO: Chemical cost, maybe this could be a DoAfter action?
|
||||
raiseOnUser: true
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: "extract_dna_off"
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: "extract_dna_on"
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: TargetAction
|
||||
- type: EntityTargetAction
|
||||
canTargetSelf: false
|
||||
|
|
@ -135,9 +156,10 @@
|
|||
useDelay: 60 # TODO: Chemical cost
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: blind_sting
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: blind_sting
|
||||
- type: EntityEffectAction
|
||||
effects:
|
||||
- !type:AddReagentToBloodstream
|
||||
|
|
@ -154,9 +176,10 @@
|
|||
useDelay: 60 # TODO: Chemical cost
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: cryogenic_sting
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: cryogenic_sting
|
||||
- type: EntityEffectAction
|
||||
effects:
|
||||
- !type:AddReagentToBloodstream
|
||||
|
|
@ -173,9 +196,10 @@
|
|||
useDelay: 180 # TODO: Chemical cost
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: lethal_sting
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: lethal_sting
|
||||
- type: EntityEffectAction
|
||||
effects:
|
||||
- !type:AddReagentToBloodstream
|
||||
|
|
@ -192,9 +216,10 @@
|
|||
useDelay: 90 # TODO: Chemical cost
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: hallucination_sting
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: hallucination_sting
|
||||
- type: EntityEffectAction
|
||||
effects:
|
||||
- !type:AddReagentToBloodstream
|
||||
|
|
@ -217,9 +242,10 @@
|
|||
checkCanInteract: false # You can transform if you are killed
|
||||
checkConsciousness: false
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: last_resort
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: last_resort
|
||||
- type: InstantAction
|
||||
event: !type:ChangelingLastResortActionEvent
|
||||
- type: ChangelingLastResortAbility
|
||||
|
|
@ -233,9 +259,10 @@
|
|||
- type: Action
|
||||
useDelay: 10
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: take_over_corpse
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: take_over_corpse
|
||||
- type: EntityTargetAction
|
||||
event: !type:ChangelingTakeOverCorpseActionEvent
|
||||
- type: TargetAction
|
||||
|
|
@ -248,9 +275,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: nv_on
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: nv_on
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -258,12 +286,13 @@
|
|||
name: Screech
|
||||
description: We produce a deafening screech that weakens those around us.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
layers:
|
||||
- state: screech
|
||||
- type: Action
|
||||
useDelay: 60 # unbalanced :godo:
|
||||
raiseOnAction: true
|
||||
icon:
|
||||
sprite: Interface/Actions/changeling2.rsi
|
||||
state: screech
|
||||
- type: ScreechAction
|
||||
effects:
|
||||
- !type:MovementSpeedModifier
|
||||
|
|
|
|||
|
|
@ -16,9 +16,10 @@
|
|||
- type: Action
|
||||
startDelay: true
|
||||
useDelay: 10
|
||||
icon:
|
||||
sprite: Mobs/Ghosts/ghost_human.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Mobs/Ghosts/ghost_human.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:CritSuccumbEvent
|
||||
|
||||
|
|
@ -30,9 +31,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 30
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_crit.rsi
|
||||
state: fakedeath
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_crit.rsi
|
||||
layers:
|
||||
- state: fakedeath
|
||||
- type: InstantAction
|
||||
event: !type:CritFakeDeathEvent
|
||||
|
||||
|
|
@ -43,8 +45,9 @@
|
|||
description: Whisper your last words to anyone nearby, and then succumb to your fate. You only have 30 characters to work with.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_crit.rsi
|
||||
state: lastwords
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_crit.rsi
|
||||
layers:
|
||||
- state: lastwords
|
||||
- type: InstantAction
|
||||
event: !type:CritLastWordsEvent
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@
|
|||
description: Split apart into 3 nymphs.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Mobs/Species/Diona/organs.rsi
|
||||
state: brain
|
||||
- type: Sprite
|
||||
sprite: Mobs/Species/Diona/organs.rsi
|
||||
layers:
|
||||
- state: brain
|
||||
- type: InstantAction
|
||||
event: !type:GibActionEvent {}
|
||||
|
||||
|
|
@ -19,8 +20,9 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 600 # Once every 10 minutes. Keep them dead for a fair bit before reforming
|
||||
icon:
|
||||
sprite: Mobs/Species/Diona/parts.rsi
|
||||
state: full
|
||||
- type: Sprite
|
||||
sprite: Mobs/Species/Diona/parts.rsi
|
||||
layers:
|
||||
- state: full
|
||||
- type: InstantAction
|
||||
event: !type:ReformEvent {}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,13 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Alerts/internals.rsi
|
||||
state: internal2
|
||||
iconOn:
|
||||
sprite: Interface/Alerts/internals.rsi
|
||||
state: internal1
|
||||
- type: Sprite
|
||||
sprite: Interface/Alerts/internals.rsi
|
||||
layers:
|
||||
- state: internal2
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: internal1
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleActionEvent
|
||||
|
|
|
|||
|
|
@ -21,7 +21,10 @@
|
|||
id: BaseMappingSpawnAction # not abstract but the event has to be set in code
|
||||
components:
|
||||
- type: Action
|
||||
icon: Tiles/cropped_parallax.png
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Tiles/cropped_parallax.png
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- type: InstantAction
|
||||
event: null # has to be set with SetEvent in MappingSystem
|
||||
|
||||
|
|
@ -31,7 +34,9 @@
|
|||
name: Erase Entity
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/VerbIcons/delete.svg.192dpi.png
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/VerbIcons/delete.svg.192dpi.png
|
||||
- type: InstantAction
|
||||
event: !type:StartPlacementActionEvent
|
||||
eraser: true
|
||||
|
|
|
|||
|
|
@ -14,9 +14,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 0.5
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
state: mech_cycle_equip_on
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
layers:
|
||||
- state: mech_cycle_equip_on
|
||||
- type: InstantAction
|
||||
event: !type:MechToggleEquipmentEvent
|
||||
|
||||
|
|
@ -28,9 +29,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
state: mech_view_stats
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
layers:
|
||||
- state: mech_view_stats
|
||||
- type: InstantAction
|
||||
event: !type:MechOpenUiEvent
|
||||
|
||||
|
|
@ -41,8 +43,9 @@
|
|||
description: Ejects the pilot from the mech
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
state: mech_eject
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_mecha.rsi
|
||||
layers:
|
||||
- state: mech_eject
|
||||
- type: InstantAction
|
||||
event: !type:MechEjectPilotEvent
|
||||
|
|
|
|||
|
|
@ -17,11 +17,12 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 0.5
|
||||
icon:
|
||||
sprite: Objects/Weapons/Throwable/throwing_star.rsi
|
||||
state: icon
|
||||
itemIconStyle: NoItem
|
||||
priority: -10
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Throwable/throwing_star.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:CreateItemEvent {}
|
||||
|
||||
|
|
@ -33,11 +34,12 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Objects/Weapons/Melee/energykatana.rsi
|
||||
state: icon
|
||||
itemIconStyle: NoItem
|
||||
priority: -11
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Melee/energykatana.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:RecallKatanaEvent {}
|
||||
|
||||
|
|
@ -48,11 +50,12 @@
|
|||
description: Disable any nearby technology with an electro-magnetic pulse.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Weapons/Grenades/empgrenade.rsi
|
||||
state: icon
|
||||
itemIconStyle: BigAction
|
||||
priority: -13
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Grenades/empgrenade.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:NinjaEmpEvent {}
|
||||
|
||||
|
|
@ -77,15 +80,16 @@
|
|||
description: Teleport to anywhere you can see, if your Energy Katana is in your hand.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: blink
|
||||
itemIconStyle: NoItem
|
||||
sound:
|
||||
path: /Audio/Magic/blink.ogg
|
||||
params:
|
||||
volume: 5
|
||||
priority: -12
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: blink
|
||||
- type: TargetAction
|
||||
checkCanAccess: false
|
||||
range: 0
|
||||
|
|
|
|||
|
|
@ -32,9 +32,10 @@
|
|||
description: Polymorphs you into a Spider.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Mobs/Animals/spider.rsi
|
||||
state: tarantula
|
||||
- type: Sprite
|
||||
sprite: Mobs/Animals/spider.rsi
|
||||
layers:
|
||||
- state: tarantula
|
||||
- type: InstantAction
|
||||
event: !type:PolymorphActionEvent
|
||||
protoId: WizardSpider
|
||||
|
|
@ -46,9 +47,10 @@
|
|||
description: CLANG!
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Fun/immovable_rod.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/immovable_rod.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:PolymorphActionEvent
|
||||
protoId: WizardRod
|
||||
|
|
@ -62,9 +64,10 @@
|
|||
- type: Magic
|
||||
- type: Action
|
||||
useDelay: 30
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: jaunt
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: jaunt
|
||||
- type: InstantAction
|
||||
event: !type:PolymorphActionEvent
|
||||
protoId: Jaunt
|
||||
|
|
|
|||
|
|
@ -12,8 +12,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 15
|
||||
icon: Interface/Actions/defile.png
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/defile.png
|
||||
- type: InstantAction
|
||||
event: !type:RevenantDefileActionEvent
|
||||
|
||||
|
|
@ -24,9 +26,11 @@
|
|||
description: Costs 40 Essence.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/overloadlight.png
|
||||
useDelay: 20
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/overloadlight.png
|
||||
- type: InstantAction
|
||||
event: !type:RevenantOverloadLightsActionEvent
|
||||
|
||||
|
|
@ -49,8 +53,10 @@
|
|||
description: Costs 60 Essence.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/malfunction.png
|
||||
useDelay: 20
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/malfunction.png
|
||||
- type: InstantAction
|
||||
event: !type:RevenantMalfunctionActionEvent
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@
|
|||
description: Spawns a web that slows your prey down.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/web.png
|
||||
useDelay: 25
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/web.png
|
||||
- type: InstantAction
|
||||
event: !type:SpiderWebActionEvent
|
||||
|
||||
|
|
@ -17,7 +19,9 @@
|
|||
description: Weave a bit of silk for use in arts and crafts.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/web.png
|
||||
useDelay: 1
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/web.png
|
||||
- type: InstantAction
|
||||
event: !type:SericultureActionEvent
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@
|
|||
- type: Action
|
||||
priority: -9
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
state: ai_core
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: ai_core
|
||||
- type: InstantAction
|
||||
event: !type:JumpToCoreEvent
|
||||
|
||||
|
|
@ -23,9 +24,10 @@
|
|||
- type: Action
|
||||
priority: -3
|
||||
itemIconStyle: NoItem
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
state: state_laws
|
||||
useDelay: 0.5
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: state_laws
|
||||
- type: InstantAction
|
||||
event: !type:ToggleLawsScreenEvent
|
||||
|
|
|
|||
|
|
@ -6,6 +6,26 @@
|
|||
id: BaseAction
|
||||
components:
|
||||
- type: Action
|
||||
- type: Sprite
|
||||
layers:
|
||||
- map: ["enum.ActionVisuals.Icon"]
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.ActionState.Toggled:
|
||||
enum.ActionVisuals.Icon:
|
||||
True: { visible: false }
|
||||
False: { visible: true }
|
||||
enum.ActionVisuals.IconToggled:
|
||||
True: { visible: true }
|
||||
False: { visible: false }
|
||||
enum.LimitedChargesState.HasCharges:
|
||||
enum.ActionVisuals.Icon:
|
||||
True: { color: White }
|
||||
False: { color: DimGray }
|
||||
enum.ActionVisuals.IconToggled:
|
||||
True: { color: White }
|
||||
False: { color: DimGray }
|
||||
|
||||
# base proto for an action that requires a DoAfter
|
||||
- type: entity
|
||||
|
|
@ -59,8 +79,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 10
|
||||
icon: Interface/Actions/scream.png
|
||||
checkCanInteract: false
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/scream.png
|
||||
- type: InstantAction
|
||||
event: !type:EmoteActionEvent
|
||||
emote: Scream
|
||||
|
|
@ -72,7 +94,9 @@
|
|||
description: Succumb to your infection and become a zombie.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/zombie-turn.png
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/zombie-turn.png
|
||||
- type: InstantAction
|
||||
event: !type:ZombifySelfActionEvent
|
||||
|
||||
|
|
@ -84,8 +108,14 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon: { sprite: Objects/Tools/flashlight.rsi, state: flashlight }
|
||||
iconOn: { sprite: Objects/Tools/flashlight.rsi, state: flashlight-on }
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/flashlight.rsi
|
||||
layers:
|
||||
- state: flashlight
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: flashlight-on
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -96,10 +126,11 @@
|
|||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Clothing/Back/Backpacks/backpack.rsi
|
||||
state: icon
|
||||
useDelay: 1
|
||||
- type: Sprite
|
||||
sprite: Clothing/Back/Backpacks/backpack.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:OpenStorageImplantEvent
|
||||
|
||||
|
|
@ -113,9 +144,10 @@
|
|||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Actions/Implants/implants.rsi
|
||||
state: explosive
|
||||
- type: Sprite
|
||||
sprite: Actions/Implants/implants.rsi
|
||||
layers:
|
||||
- state: explosive
|
||||
|
||||
- type: entity
|
||||
parent: [BaseSuicideAction, BaseImplantAction]
|
||||
|
|
@ -126,9 +158,10 @@
|
|||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: gib
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: gib
|
||||
|
||||
- type: entity
|
||||
parent: BaseImplantAction
|
||||
|
|
@ -142,9 +175,11 @@
|
|||
checkCanInteract: false
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Actions/Implants/implants.rsi
|
||||
state: freedom
|
||||
- type: Sprite
|
||||
sprite: Actions/Implants/implants.rsi
|
||||
layers:
|
||||
- state: freedom
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -155,9 +190,10 @@
|
|||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Objects/Devices/communication.rsi
|
||||
state: old-radio
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/communication.rsi
|
||||
layers:
|
||||
- state: old-radio
|
||||
- type: InstantAction
|
||||
event: !type:OpenUplinkImplantEvent
|
||||
|
||||
|
|
@ -174,9 +210,11 @@
|
|||
useDelay: 5
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Objects/Weapons/Grenades/empgrenade.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Grenades/empgrenade.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
|
||||
- type: entity
|
||||
parent: BaseImplantAction
|
||||
|
|
@ -191,9 +229,11 @@
|
|||
useDelay: 5
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Structures/Specific/anomaly.rsi
|
||||
state: anom4
|
||||
- type: Sprite
|
||||
sprite: Structures/Specific/anomaly.rsi
|
||||
layers:
|
||||
- state: anom4
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
|
||||
- type: entity
|
||||
parent: BaseImplantAction
|
||||
|
|
@ -208,9 +248,11 @@
|
|||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
priority: -20
|
||||
icon:
|
||||
sprite: Clothing/OuterClothing/Hardsuits/lingspacesuit.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Clothing/OuterClothing/Hardsuits/lingspacesuit.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -231,9 +273,14 @@
|
|||
description: Enter combat mode
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/harmOff.png
|
||||
iconOn: Interface/Actions/harm.png
|
||||
priority: -100
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/harmOff.png
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- texture: Interface/Actions/harm.png
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleCombatActionEvent
|
||||
|
||||
|
|
@ -252,7 +299,10 @@
|
|||
description: Change the name others hear to something else.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/voice-mask.rsi, state: icon }
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/voice-mask.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:VoiceMaskSetNameEvent
|
||||
|
||||
|
|
@ -263,7 +313,10 @@
|
|||
description: Spray water towards your enemies.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Clothing/Neck/Misc/pins.rsi, state: flower }
|
||||
- type: Sprite
|
||||
sprite: Clothing/Neck/Misc/pins.rsi
|
||||
layers:
|
||||
- state: flower
|
||||
- type: InstantAction
|
||||
event: !type:SprayLiquidEvent
|
||||
|
||||
|
|
@ -285,8 +338,14 @@
|
|||
description: Raise or lower your shield.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Objects/Weapons/Melee/shields.rsi, state: teleriot-icon }
|
||||
iconOn: { sprite: Objects/Weapons/Melee/shields.rsi, state: teleriot-on }
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Melee/shields.rsi
|
||||
layers:
|
||||
- state: teleriot-icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: teleriot-on
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
|
||||
- type: entity
|
||||
parent: BaseMentalAction
|
||||
|
|
@ -297,7 +356,10 @@
|
|||
- type: Action
|
||||
clientExclusive: true
|
||||
temporary: true
|
||||
icon: { sprite: Objects/Tools/multitool.rsi, state: icon }
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/multitool.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:ClearAllOverlaysEvent
|
||||
|
||||
|
|
@ -308,8 +370,11 @@
|
|||
description: Uses hunger to lay an egg.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Objects/Consumable/Food/egg.rsi, state: icon }
|
||||
useDelay: 60
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Food/egg.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:EggLayInstantActionEvent
|
||||
|
||||
|
|
@ -320,7 +385,10 @@
|
|||
description: Go to sleep.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon }
|
||||
- type: Sprite
|
||||
sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:SleepActionEvent
|
||||
|
||||
|
|
@ -333,7 +401,10 @@
|
|||
- type: Action
|
||||
startDelay: true
|
||||
useDelay: 2
|
||||
icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon }
|
||||
- type: Sprite
|
||||
sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:WakeActionEvent
|
||||
|
||||
|
|
@ -344,8 +415,11 @@
|
|||
description: Activates your honking implant, which will produce the signature sound of the clown.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Objects/Fun/bikehorn.rsi, state: icon }
|
||||
useDelay: 1
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/bikehorn.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -356,7 +430,9 @@
|
|||
- type: Action
|
||||
priority: -1
|
||||
useDelay: 30
|
||||
icon: Interface/Actions/firestarter.png
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/firestarter.png
|
||||
- type: InstantAction
|
||||
event: !type:FireStarterActionEvent
|
||||
|
||||
|
|
@ -367,9 +443,14 @@
|
|||
description: Close your eyes to protect your peepers, or open your eyes to enjoy the pretty lights.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/eyeopen.png
|
||||
iconOn: Interface/Actions/eyeclose.png
|
||||
useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/eyeopen.png
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- texture: Interface/Actions/eyeclose.png
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleEyesActionEvent
|
||||
|
||||
|
|
@ -380,11 +461,13 @@
|
|||
description: Start or stop wagging your tail.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Mobs/Customization/reptilian_parts.rsi, state: tail_smooth_behind }
|
||||
iconOn: { sprite: Mobs/Customization/reptilian_parts.rsi, state: tail_smooth_behind }
|
||||
itemIconStyle: NoItem
|
||||
useDelay: 1 # emote spam
|
||||
checkCanInteract: false
|
||||
- type: Sprite
|
||||
sprite: Mobs/Customization/reptilian_parts.rsi
|
||||
layers:
|
||||
- state: tail_smooth_behind
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -393,11 +476,17 @@
|
|||
description: Turn the Fake Mindshield implant's transmission on/off
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_fakemindshield.rsi, state: icon }
|
||||
iconOn: { sprite: Interface/Actions/actions_fakemindshield.rsi, state: icon-on }
|
||||
itemIconStyle: NoItem
|
||||
useDelay: 1
|
||||
raiseOnUser: true
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_fakemindshield.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: icon-on
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:FakeMindShieldToggleEvent
|
||||
- type: Tag
|
||||
|
|
@ -411,11 +500,12 @@
|
|||
description: Toggles the paramedic siren on and off.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Clothing/OuterClothing/Hardsuits/paramed.rsi
|
||||
state: icon-siren
|
||||
useDelay: 1
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
sprite: Clothing/OuterClothing/Hardsuits/paramed.rsi
|
||||
layers:
|
||||
- state: icon-siren
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -425,9 +515,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 2
|
||||
icon:
|
||||
sprite: Interface/Actions/night_vision.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/night_vision.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:ToggleNightVisionEvent {}
|
||||
|
||||
|
|
@ -436,10 +527,12 @@
|
|||
id: ActionToggleWaggingVulpkanin
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Mobs/Customization/Vulpkanin/tail_markings.rsi, state: tail-wag-icon }
|
||||
iconOn: { sprite: Mobs/Customization/Vulpkanin/tail_markings.rsi, state: tail-wag-icon }
|
||||
itemIconStyle: NoItem
|
||||
useDelay: 1 # Prevents Emote Spam
|
||||
- type: Sprite
|
||||
sprite: Mobs/Customization/Vulpkanin/tail_markings.rsi
|
||||
layers:
|
||||
- state: tail-wag-icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -449,9 +542,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 8
|
||||
icon:
|
||||
sprite: Interface/Actions/jump.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/jump.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:GravityJumpEvent {}
|
||||
|
||||
|
|
@ -462,9 +556,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 16
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
state: xenoborg-jump-module
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
layers:
|
||||
- state: xenoborg-jump-module
|
||||
|
||||
- type: entity
|
||||
parent: BaseAction
|
||||
|
|
@ -474,9 +569,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 12
|
||||
icon:
|
||||
sprite: Interface/Actions/jump.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/jump.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:GravityJumpEvent {}
|
||||
|
||||
|
|
@ -487,10 +583,11 @@
|
|||
description: Begin or stop being rooted to the floor.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/rooting.png
|
||||
iconOn: Interface/Actions/rooting.png
|
||||
itemIconStyle: NoItem
|
||||
useDelay: 1
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/rooting.png
|
||||
|
||||
- type: entity
|
||||
id: ActionChameleonController
|
||||
|
|
@ -499,8 +596,11 @@
|
|||
components:
|
||||
- type: Action
|
||||
priority: -20
|
||||
icon: { sprite: Actions/Implants/implants.rsi, state: chameleon }
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
sprite: Actions/Implants/implants.rsi
|
||||
layers:
|
||||
- state: chameleon
|
||||
- type: InstantAction
|
||||
event: !type:ChameleonControllerOpenMenuEvent
|
||||
|
||||
|
|
@ -511,7 +611,9 @@
|
|||
description: Opens the store
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/shop.png
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/shop.png
|
||||
- type: InstantAction
|
||||
event: !type:IntrinsicStoreActionEvent
|
||||
|
||||
|
|
@ -520,5 +622,8 @@
|
|||
id: ActionChangeVoiceMaskImplant
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/voice-mask.rsi, state: icon }
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/voice-mask.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
|
|
|
|||
|
|
@ -26,8 +26,14 @@
|
|||
description: Handy, but prevents insertion of pie into your pie hole.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Clothing/Mask/gas.rsi, state: icon }
|
||||
iconOn: Interface/Default/blocked.png
|
||||
- type: Sprite
|
||||
sprite: Clothing/Mask/gas.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- texture: Interface/Default/blocked.png
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleMaskEvent
|
||||
|
||||
|
|
|
|||
|
|
@ -22,12 +22,13 @@
|
|||
name: Listen with stethoscope
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Clothing/Neck/Misc/stethoscope.rsi
|
||||
state: icon
|
||||
priority: -1
|
||||
itemIconStyle: BigAction
|
||||
checkCanInteract: false
|
||||
- type: Sprite
|
||||
sprite: Clothing/Neck/Misc/stethoscope.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: TargetAction
|
||||
- type: EntityTargetAction
|
||||
event: !type:StethoscopeActionEvent
|
||||
|
|
|
|||
|
|
@ -101,15 +101,17 @@
|
|||
components:
|
||||
- type: Action
|
||||
raiseOnUser: true
|
||||
icon:
|
||||
sprite: Mobs/Aliens/Asteroid/goliath.rsi
|
||||
state: goliath_tentacle_spawn
|
||||
iconOn:
|
||||
sprite: Mobs/Aliens/Asteroid/goliath.rsi
|
||||
state: goliath_tentacle_wiggle
|
||||
sound:
|
||||
path: "/Audio/Weapons/slash.ogg"
|
||||
useDelay: 8
|
||||
- type: Sprite
|
||||
sprite: Mobs/Aliens/Asteroid/goliath.rsi
|
||||
layers:
|
||||
- state: goliath_tentacle_spawn
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: goliath_tentacle_wiggle
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: TargetAction
|
||||
range: 10
|
||||
- type: WorldTargetAction
|
||||
|
|
|
|||
|
|
@ -324,9 +324,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 4
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: ratKingArmy
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: ratKingArmy
|
||||
- type: InstantAction
|
||||
event: !type:RatKingRaiseArmyActionEvent
|
||||
|
||||
|
|
@ -338,9 +339,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 6
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: ratKingDomain
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: ratKingDomain
|
||||
- type: InstantAction
|
||||
event: !type:RatKingDomainActionEvent
|
||||
|
||||
|
|
@ -352,13 +354,15 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: stayOff
|
||||
iconOn:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: stay
|
||||
priority: 5
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: stayOff
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: stay
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:RatKingOrderActionEvent
|
||||
type: Stay
|
||||
|
|
@ -371,13 +375,15 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: followOff
|
||||
iconOn:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: follow
|
||||
priority: 6
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: followOff
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: follow
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:RatKingOrderActionEvent
|
||||
type: Follow
|
||||
|
|
@ -390,13 +396,15 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: attackOff
|
||||
iconOn:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: attack
|
||||
priority: 7
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: attackOff
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: attack
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:RatKingOrderActionEvent
|
||||
type: CheeseEm
|
||||
|
|
@ -409,13 +417,15 @@
|
|||
components:
|
||||
- type: Action
|
||||
useDelay: 1
|
||||
icon:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: looseOff
|
||||
iconOn:
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
state: loose
|
||||
priority: 8
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_rat_king.rsi
|
||||
layers:
|
||||
- state: looseOff
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: loose
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event:
|
||||
!type:RatKingOrderActionEvent
|
||||
|
|
|
|||
|
|
@ -122,10 +122,16 @@
|
|||
id: BaseAGhostAction
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Structures/Machines/parts.rsi, state: box_0 }
|
||||
iconOn: { sprite: Structures/Machines/parts.rsi, state: box_2 }
|
||||
keywords: [ "AI", "console", "interface" ]
|
||||
priority: -10
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/parts.rsi
|
||||
layers:
|
||||
- state: box_0
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: box_2
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
|
||||
- type: entity
|
||||
parent: BaseAGhostAction
|
||||
|
|
@ -143,10 +149,12 @@
|
|||
description: View a Communications Interface.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
|
||||
iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
|
||||
keywords: [ "AI", "console", "interface" ]
|
||||
priority: -4
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: comms_console
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.CommunicationsConsoleUiKey.Key }
|
||||
|
||||
|
|
@ -157,10 +165,16 @@
|
|||
description: View a Mass Scanner Interface.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner }
|
||||
iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
|
||||
keywords: [ "AI", "console", "interface" ]
|
||||
priority: -6
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: mass_scanner
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: comms_console
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key }
|
||||
|
||||
|
|
@ -180,10 +194,12 @@
|
|||
description: View a Crew Monitoring Interface.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor }
|
||||
iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor }
|
||||
keywords: [ "AI", "console", "interface" ]
|
||||
priority: -8
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: crew_monitor
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key }
|
||||
|
||||
|
|
@ -194,9 +210,11 @@
|
|||
description: View a Station Records Interface.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records }
|
||||
iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: station_records }
|
||||
keywords: [ "AI", "console", "interface" ]
|
||||
priority: -7
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: station_records
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key }
|
||||
|
|
|
|||
|
|
@ -216,11 +216,12 @@
|
|||
description: Summons a carp rift that will periodically spawns carps.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Interface/Actions/carp_rift.rsi
|
||||
state: icon
|
||||
useDelay: 1
|
||||
priority: 3
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/carp_rift.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:DragonSpawnRiftActionEvent
|
||||
|
||||
|
|
@ -231,10 +232,16 @@
|
|||
description: Attempt to break a structure with your jaws or swallow a creature.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite : Interface/Actions/devour.rsi, state: icon }
|
||||
iconOn: { sprite : Interface/Actions/devour.rsi, state: icon-on }
|
||||
itemIconStyle: BigAction
|
||||
priority: 1
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/devour.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: icon-on
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: TargetAction
|
||||
- type: EntityTargetAction
|
||||
canTargetSelf: false
|
||||
|
|
@ -255,11 +262,14 @@
|
|||
- type: Action
|
||||
useDelay: 5
|
||||
# TODO: actual sprite and iconOn
|
||||
icon: { sprite : Objects/Weapons/Guns/Projectiles/magic.rsi, state: fireball }
|
||||
itemIconStyle: BigAction
|
||||
priority: 2
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Animals/space_dragon_breath.ogg
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
|
||||
layers:
|
||||
- state: fireball
|
||||
- type: TargetAction
|
||||
checkCanAccess: false
|
||||
range: 0
|
||||
|
|
|
|||
|
|
@ -262,7 +262,9 @@
|
|||
description: Either manifests the guardian or recalls it back into your body
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/manifest.png
|
||||
useDelay: 2
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/manifest.png
|
||||
- type: InstantAction
|
||||
event: !type:GuardianToggleActionEvent
|
||||
|
|
|
|||
|
|
@ -243,10 +243,12 @@
|
|||
description: View the Xenoborgs Control Console
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-control-computer }
|
||||
iconOn: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-control-computer }
|
||||
keywords: [ "Mothership Core", "console", "interface" ]
|
||||
priority: -6
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
layers:
|
||||
- state: xenoborg-control-computer
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.RoboticsConsoleUiKey.Key }
|
||||
|
||||
|
|
@ -257,9 +259,11 @@
|
|||
description: View the Xenoborgs Camera Monitor
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-camera-computer }
|
||||
iconOn: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-camera-computer }
|
||||
keywords: [ "Mothership Core", "console", "interface" ]
|
||||
priority: -6
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_borg.rsi
|
||||
layers:
|
||||
- state: xenoborg-camera-computer
|
||||
- type: InstantAction
|
||||
event: !type:ToggleIntrinsicUIEvent { key: enum.SurveillanceCameraMonitorUiKey.Key }
|
||||
|
|
|
|||
|
|
@ -127,10 +127,12 @@
|
|||
description: Scare your crew members because of boredom!
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/scream.png
|
||||
checkCanInteract: false
|
||||
startDelay: true
|
||||
useDelay: 120
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/scream.png
|
||||
- type: InstantAction
|
||||
event: !type:BooActionEvent
|
||||
|
||||
|
|
@ -141,8 +143,10 @@
|
|||
description: Toggle light rendering to better observe dark areas.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/VerbIcons/light.svg.192dpi.png
|
||||
clientExclusive: true
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/VerbIcons/light.svg.192dpi.png
|
||||
- type: InstantAction
|
||||
event: !type:ToggleLightingActionEvent
|
||||
|
||||
|
|
@ -153,8 +157,10 @@
|
|||
description: Toggles field-of-view in order to see what players see.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/VerbIcons/vv.svg.192dpi.png
|
||||
clientExclusive: true
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/VerbIcons/vv.svg.192dpi.png
|
||||
- type: InstantAction
|
||||
event: !type:ToggleFoVActionEvent
|
||||
|
||||
|
|
@ -165,8 +171,11 @@
|
|||
description: Toggle the visibility of other ghosts.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Mobs/Ghosts/ghost_human.rsi, state: icon }
|
||||
clientExclusive: true
|
||||
- type: Sprite
|
||||
sprite: Mobs/Ghosts/ghost_human.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:ToggleGhostsActionEvent
|
||||
|
||||
|
|
@ -177,9 +186,13 @@
|
|||
description: Toggle between hearing all messages and hearing only radio & nearby messages.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Clothing/Ears/Headsets/base.rsi
|
||||
state: icon
|
||||
iconOn: Interface/Actions/ghostHearingToggled.png
|
||||
- type: Sprite
|
||||
sprite: Clothing/Ears/Headsets/base.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- texture: Interface/Actions/ghostHearingToggled.png
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleGhostHearingActionEvent
|
||||
|
|
|
|||
|
|
@ -98,8 +98,10 @@
|
|||
description: Use this to prevent your disguise from rotating, making it easier to hide in some scenarios.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/VerbIcons/refresh.svg.192dpi.png
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/VerbIcons/refresh.svg.192dpi.png
|
||||
- type: InstantAction
|
||||
event: !type:DisguiseToggleNoRotEvent
|
||||
|
||||
|
|
@ -110,9 +112,10 @@
|
|||
description: For many objects you will want to be anchored to not be completely obvious.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Tools/wrench.rsi
|
||||
state: icon
|
||||
itemIconStyle: BigAction
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/wrench.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:DisguiseToggleAnchoredEvent
|
||||
|
|
|
|||
|
|
@ -201,8 +201,11 @@
|
|||
description: View a mass scanner interface.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner }
|
||||
itemIconStyle: NoItem
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/actions_ai.rsi
|
||||
layers:
|
||||
- state: mass_scanner
|
||||
- type: InstantAction
|
||||
event: !type:OpenUiActionEvent
|
||||
key: enum.RadarConsoleUiKey.Key
|
||||
|
|
@ -214,8 +217,10 @@
|
|||
description: Open your portable MIDI interface to soothe your owner.
|
||||
components:
|
||||
- type: Action
|
||||
icon: Interface/Actions/pai-midi.png
|
||||
itemIconStyle: NoItem
|
||||
- type: Sprite
|
||||
layers:
|
||||
- texture: Interface/Actions/pai-midi.png
|
||||
- type: InstantAction
|
||||
event: !type:OpenUiActionEvent
|
||||
key: enum.InstrumentUiKey.Key
|
||||
|
|
@ -227,8 +232,11 @@
|
|||
description: Open your map interface and guide your owner.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Interface/Actions/pai-map.rsi, state: icon }
|
||||
itemIconStyle: NoItem
|
||||
- type: Sprite
|
||||
sprite: Interface/Actions/pai-map.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:OpenUiActionEvent
|
||||
key: enum.StationMapUiKey.Key
|
||||
|
|
|
|||
|
|
@ -102,8 +102,11 @@
|
|||
description: Summon a familiar that will aid you and gain humanlike intelligence once inhabited by a soul.
|
||||
components:
|
||||
- type: Action
|
||||
icon: { sprite: Clothing/Head/Hats/witch.rsi, state: icon }
|
||||
useDelay: 1
|
||||
- type: Sprite
|
||||
sprite: Clothing/Head/Hats/witch.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:SummonActionEvent
|
||||
|
||||
|
|
|
|||
|
|
@ -57,9 +57,10 @@
|
|||
description: Activate yourself, causing chaos to those near you.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi
|
||||
state: ano29
|
||||
useDelay: 300
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi
|
||||
layers:
|
||||
- state: ano29
|
||||
- type: InstantAction
|
||||
event: !type:ArtifactSelfActivateEvent
|
||||
|
|
|
|||
|
|
@ -70,13 +70,15 @@
|
|||
description: Toggles the jetpack, giving you movement outside the station.
|
||||
components:
|
||||
- type: Action
|
||||
icon:
|
||||
sprite: Objects/Tanks/Jetpacks/blue.rsi
|
||||
state: icon
|
||||
iconOn:
|
||||
sprite: Objects/Tanks/Jetpacks/blue.rsi
|
||||
state: icon-on
|
||||
useDelay: 1.0
|
||||
- type: Sprite
|
||||
sprite: Objects/Tanks/Jetpacks/blue.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.ActionVisuals.Icon"]
|
||||
- state: icon-on
|
||||
map: ["enum.ActionVisuals.IconToggled"]
|
||||
visible: false
|
||||
- type: InstantAction
|
||||
event: !type:ToggleJetpackEvent
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@
|
|||
useDelay: 0
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/staff_animation.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: spell_default
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: spell_default
|
||||
- type: EntityTargetAction
|
||||
whitelist:
|
||||
components:
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
- type: Action
|
||||
useDelay: 120
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Mobs/Ghosts/ghost_human.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Mobs/Ghosts/ghost_human.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: InstantAction
|
||||
event: !type:ToggleGhostVisibilityToAllEvent
|
||||
|
||||
|
|
@ -25,9 +26,10 @@
|
|||
- type: Action
|
||||
useDelay: 300
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
state: base
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
|
||||
layers:
|
||||
- state: base
|
||||
- type: InstantAction
|
||||
event: !type:RandomGlobalSpawnSpellEvent
|
||||
makeSurvivorAntagonist: true
|
||||
|
|
@ -173,9 +175,10 @@
|
|||
- type: Action
|
||||
useDelay: 300
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: magicmissile
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: magicmissile
|
||||
- type: InstantAction
|
||||
event: !type:RandomGlobalSpawnSpellEvent
|
||||
makeSurvivorAntagonist: true
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
itemIconStyle: BigAction
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/forcewall.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: shield
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: shield
|
||||
- type: InstantAction
|
||||
event: !type:InstantSpawnSpellEvent
|
||||
prototype: WallForce
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
itemIconStyle: BigAction
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/knock.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: knock
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: knock
|
||||
- type: InstantAction
|
||||
event: !type:KnockSpellEvent
|
||||
- type: SpeakOnAction
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@
|
|||
useDelay: 180
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/staff_animation.ogg
|
||||
icon:
|
||||
sprite: Mobs/Species/Human/organs.rsi
|
||||
state: brain
|
||||
- type: Sprite
|
||||
sprite: Mobs/Species/Human/organs.rsi
|
||||
layers:
|
||||
- state: brain
|
||||
- type: EntityTargetAction
|
||||
whitelist:
|
||||
components:
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@
|
|||
raiseOnUser: true
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/fireball.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: fireball
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: fireball
|
||||
- type: TargetAction
|
||||
range: 60
|
||||
checkCanAccess: false
|
||||
|
|
|
|||
|
|
@ -15,9 +15,10 @@
|
|||
pitch: 1.2
|
||||
maxDistance: 5
|
||||
variation: 0.2
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: item_recall
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: item_recall
|
||||
- type: InstantAction
|
||||
event: !type:OnItemRecallActionEvent
|
||||
- type: ItemRecall
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@
|
|||
useDelay: 40
|
||||
raiseOnAction: true
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: repulse
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: repulse
|
||||
- type: InstantAction
|
||||
event: !type:RepulseAttractActionEvent
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
components:
|
||||
- type: Action
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: spell_default
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: spell_default
|
||||
- type: entity
|
||||
parent: BaseRuneAction
|
||||
id: ActionFlashRune
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
- type: Action
|
||||
useDelay: 10
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Actions/smokeaction.rsi
|
||||
state: smokeaction
|
||||
- type: Sprite
|
||||
sprite: Actions/smokeaction.rsi
|
||||
layers:
|
||||
- state: smokeaction
|
||||
- type: InstantAction
|
||||
event: !type:InstantSpawnSpellEvent
|
||||
prototype: WizardSmoke
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
- type: Action
|
||||
useDelay: 10
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: spell_default
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: spell_default
|
||||
- type: TargetAction
|
||||
range: 4
|
||||
- type: WorldTargetAction
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
itemIconStyle: BigAction
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/blink.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: blink
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: blink
|
||||
- type: TargetAction
|
||||
range: 16 # default examine-range.
|
||||
# ^ should probably add better validation that the clicked location is on the users screen somewhere,
|
||||
|
|
@ -31,9 +32,10 @@
|
|||
useDelay: 15
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/Eldritch/voidblink.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/Eldritch/eldritch_actions.rsi
|
||||
state: voidblink
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/Eldritch/eldritch_actions.rsi
|
||||
layers:
|
||||
- state: voidblink
|
||||
- type: TargetAction
|
||||
accessMask:
|
||||
- Opaque
|
||||
|
|
|
|||
|
|
@ -32,9 +32,10 @@
|
|||
- type: Action
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/disintegrate.ogg
|
||||
icon:
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
state: gib
|
||||
- type: Sprite
|
||||
sprite: Objects/Magic/magicactions.rsi
|
||||
layers:
|
||||
- state: gib
|
||||
- type: EntityTargetAction
|
||||
event: !type:SmiteSpellEvent
|
||||
- type: SpeakOnAction
|
||||
|
|
@ -60,9 +61,10 @@
|
|||
useDelay: 120
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Items/brokenbikehorn.ogg
|
||||
icon:
|
||||
sprite: Clothing/Mask/cluwne.rsi
|
||||
state: icon
|
||||
- type: Sprite
|
||||
sprite: Clothing/Mask/cluwne.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: EntityTargetAction
|
||||
event: !type:ChangeComponentsSpellEvent
|
||||
toAdd:
|
||||
|
|
@ -82,9 +84,10 @@
|
|||
useDelay: 60
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Effects/slip.ogg
|
||||
icon:
|
||||
sprite: Objects/Specific/Janitorial/soap.rsi
|
||||
state: omega-4
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Janitorial/soap.rsi
|
||||
layers:
|
||||
- state: omega-4
|
||||
- type: EntityTargetAction
|
||||
event: !type:ChangeComponentsSpellEvent
|
||||
toAdd:
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
- type: Action
|
||||
useDelay: 30
|
||||
itemIconStyle: BigAction
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Basic/wands.rsi
|
||||
state: nothing
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Basic/wands.rsi
|
||||
layers:
|
||||
- state: nothing
|
||||
- type: InstantAction
|
||||
event: !type:ChargeSpellEvent
|
||||
charge: 1
|
||||
|
|
|
|||
|
|
@ -40,9 +40,10 @@
|
|||
- type: Action
|
||||
priority: -1
|
||||
useDelay: 30
|
||||
icon:
|
||||
sprite: Structures/Walls/solid.rsi
|
||||
state: full
|
||||
- type: Sprite
|
||||
sprite: Structures/Walls/solid.rsi
|
||||
layers:
|
||||
- state: full
|
||||
- type: InstantAction
|
||||
event: !type:InvisibleWallActionEvent
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue