From 7343ec128a25dbc3f0863d71905ef9b6126dee5d Mon Sep 17 00:00:00 2001 From: mirrorcult Date: Fri, 19 Jun 2026 21:24:31 -0700 Subject: [PATCH] Stagehand float animation --- .../Systems/ClientSpriteMovementSystem.cs | 53 ++++---- .../Movement/Systems/SpriteMovementSystem.cs | 7 -- .../NPC/Systems/NPCSteeringSystem.cs | 9 +- .../Gravity/FloatingVisualsComponent.cs | 6 + .../Gravity/SharedFloatingVisualizerSystem.cs | 5 +- .../Components/InputMoverComponent.cs | 6 + .../Components/SpriteMovementComponent.cs | 5 +- .../Movement/Events/SpriteMoveEvent.cs | 15 --- .../Movement/Events/SpriteMovementVisuals.cs | 9 ++ .../Systems/SharedMoverController.Input.cs | 8 +- .../Movement/Systems/SharedMoverController.cs | 1 + .../Systems/SharedSpriteMovementSystem.cs | 23 ---- .../_ES/Entities/Markers/Spawners/jobs.yml | 2 +- .../Prototypes/_ES/Entities/Markers/lobby.yml | 4 +- .../_ES/Entities/Mobs/Player/stagehand.yml | 27 +++- .../_ES/Entities/Mobs/Player/theatergoer.yml | 9 +- .../_ES/Mobs/Ghosts/theatergoer.rsi/meta.json | 117 ------------------ .../Mobs/Ghosts/theatergoer.rsi/stagehand.png | Bin 1364 -> 0 bytes .../body-floating-reversed.png | Bin 0 -> 3823 bytes .../theatergoer_body.rsi/body-floating.png | Bin 0 -> 3800 bytes .../body.png | Bin .../Ghosts/theatergoer_body.rsi/meta.json | 77 ++++++++++++ .../body-floating-reversed.png | Bin 0 -> 4319 bytes .../body-floating.png | Bin 0 -> 4286 bytes .../body.png} | Bin .../theatergoer_body_admin.rsi/meta.json | 77 ++++++++++++ .../head-1.png | Bin .../head-10.png | Bin .../head-11.png | Bin .../head-12.png | Bin .../head-13.png | Bin .../head-14.png | Bin .../head-15.png | Bin .../head-16.png | Bin .../head-17.png | Bin .../head-18.png | Bin .../head-19.png | Bin .../head-2.png | Bin .../head-20.png | Bin .../head-21.png | Bin .../head-22.png | Bin .../head-23.png | Bin .../head-3.png | Bin .../head-4.png | Bin .../head-5.png | Bin .../head-6.png | Bin .../head-7.png | Bin .../head-8.png | Bin .../head-9.png | Bin .../Ghosts/theatergoer_head.rsi/meta.json | 105 ++++++++++++++++ 50 files changed, 354 insertions(+), 211 deletions(-) delete mode 100644 Content.Server/Movement/Systems/SpriteMovementSystem.cs delete mode 100644 Content.Shared/Movement/Events/SpriteMoveEvent.cs create mode 100644 Content.Shared/Movement/Events/SpriteMovementVisuals.cs delete mode 100644 Content.Shared/Movement/Systems/SharedSpriteMovementSystem.cs delete mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/meta.json delete mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/stagehand.png create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/body-floating-reversed.png create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/body-floating.png rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_body.rsi}/body.png (100%) create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/meta.json create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body-floating-reversed.png create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body-floating.png rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi/admin.png => theatergoer_body_admin.rsi/body.png} (100%) create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/meta.json rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-1.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-10.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-11.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-12.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-13.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-14.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-15.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-16.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-17.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-18.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-19.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-2.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-20.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-21.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-22.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-23.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-3.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-4.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-5.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-6.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-7.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-8.png (100%) rename Resources/Textures/_ES/Mobs/Ghosts/{theatergoer.rsi => theatergoer_head.rsi}/head-9.png (100%) create mode 100644 Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/meta.json diff --git a/Content.Client/Movement/Systems/ClientSpriteMovementSystem.cs b/Content.Client/Movement/Systems/ClientSpriteMovementSystem.cs index 8c3222484e4..2d6db364ff6 100644 --- a/Content.Client/Movement/Systems/ClientSpriteMovementSystem.cs +++ b/Content.Client/Movement/Systems/ClientSpriteMovementSystem.cs @@ -1,5 +1,5 @@ using Content.Shared.Movement.Components; -using Content.Shared.Movement.Systems; +using Content.Shared.Movement.Events; using Robust.Client.GameObjects; namespace Content.Client.Movement.Systems; @@ -7,39 +7,40 @@ namespace Content.Client.Movement.Systems; /// /// Controls the switching of motion and standing still animation /// -public sealed partial class ClientSpriteMovementSystem : SharedSpriteMovementSystem +public sealed class ClientSpriteMovementSystem : VisualizerSystem { - [Dependency] private SpriteSystem _sprite = default!; - - private EntityQuery _spriteQuery; - - public override void Initialize() + protected override void OnAppearanceChange(EntityUid uid, SpriteMovementComponent comp, ref AppearanceChangeEvent args) { - base.Initialize(); - - _spriteQuery = GetEntityQuery(); - - SubscribeLocalEvent(OnAfterAutoHandleState); - } + var sprite = args.Sprite; + if (!args.AppearanceData.TryGetValue(SpriteMovementVisuals.Moving, out var obj) || obj is not bool isMoving) + return; - private void OnAfterAutoHandleState(Entity ent, ref AfterAutoHandleStateEvent args) - { - if (!_spriteQuery.TryGetComponent(ent, out var sprite)) + comp.WasMoving ??= !isMoving; + if (isMoving == comp.WasMoving) return; - if (ent.Comp.IsMoving) - { - foreach (var (layer, state) in ent.Comp.MovementLayers) - { - _sprite.LayerSetData((ent.Owner, sprite), layer, state); - } - } - else + void SetLayers(Dictionary layers) { - foreach (var (layer, state) in ent.Comp.NoMovementLayers) + foreach (var (layer, state) in layers) { - _sprite.LayerSetData((ent.Owner, sprite), layer, state); + if (!SpriteSystem.TryGetLayer((uid, sprite), layer, out var layerData, true)) + continue; + + var oldTime = layerData.AnimationTime; + var oldStateWasAnim = layerData.AnimationTimeLeft > 0; + SpriteSystem.LayerSetAutoAnimated(layerData, true); + SpriteSystem.LayerSetData(layerData, state); + // if there was old anim time left from a previously playing anim, take that into account here + if (oldStateWasAnim) + { + var setAnimTime = layerData.AnimationTimeLeft - oldTime; + SpriteSystem.LayerSetAnimationTime(layerData, setAnimTime); + } } } + + Log.Info($"setting layers {isMoving}"); + SetLayers(isMoving ? comp.MovementLayers : comp.NoMovementLayers); + comp.WasMoving = isMoving; } } diff --git a/Content.Server/Movement/Systems/SpriteMovementSystem.cs b/Content.Server/Movement/Systems/SpriteMovementSystem.cs deleted file mode 100644 index 9fc4d828598..00000000000 --- a/Content.Server/Movement/Systems/SpriteMovementSystem.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Content.Shared.Movement.Systems; - -namespace Content.Server.Movement.Systems; - -public sealed class SpriteMovementSystem : SharedSpriteMovementSystem -{ -} diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.cs index 597de187f81..aee9d72ca57 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.cs @@ -60,6 +60,7 @@ public sealed partial class NPCSteeringSystem : SharedNPCSteeringSystem [Dependency] private NpcFactionSystem _npcFaction = default!; [Dependency] private PathfindingSystem _pathfindingSystem = default!; [Dependency] private PryingSystem _pryingSystem = default!; + [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedMapSystem _mapSystem = default!; [Dependency] private SharedInteractionSystem _interaction = default!; [Dependency] private SharedMeleeWeaponSystem _melee = default!; @@ -216,8 +217,8 @@ public void Unregister(EntityUid uid, NPCSteeringComponent? component = null) { controller.CurTickSprintMovement = Vector2.Zero; - var ev = new SpriteMoveEvent(false); - RaiseLocalEvent(uid, ref ev); + if (controller.UsesSpriteMovement) + _appearance.SetData(uid, SpriteMovementVisuals.Moving, controller.HasDirectionalMovement); } component.PathfindToken?.Cancel(); @@ -297,8 +298,8 @@ private void SetDirection(EntityUid uid, InputMoverComponent component, NPCSteer component.LastInputTick = _timing.CurTick; component.LastInputSubTick = ushort.MaxValue; - var ev = new SpriteMoveEvent(true); - RaiseLocalEvent(uid, ref ev); + if (component.UsesSpriteMovement) + _appearance.SetData(uid, SpriteMovementVisuals.Moving, component.HasDirectionalMovement); } /// diff --git a/Content.Shared/Gravity/FloatingVisualsComponent.cs b/Content.Shared/Gravity/FloatingVisualsComponent.cs index c0064ebf782..e293ae367d2 100644 --- a/Content.Shared/Gravity/FloatingVisualsComponent.cs +++ b/Content.Shared/Gravity/FloatingVisualsComponent.cs @@ -22,5 +22,11 @@ public sealed partial class FloatingVisualsComponent : Component [DataField, AutoNetworkedField] public bool CanFloat; + /// + /// If true, this sprite will always be floating irrespective of gravity status. + /// + [DataField, AutoNetworkedField] + public bool AlwaysFloat; + public readonly string AnimationKey = "gravity"; } diff --git a/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs b/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs index 5ad34e8b464..4afc08a7c8e 100644 --- a/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs +++ b/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs @@ -25,7 +25,7 @@ public virtual void FloatAnimation(EntityUid uid, Vector2 offset, string animati protected bool CanFloat(Entity entity) { - entity.Comp.CanFloat = _gravity.IsWeightless(entity.Owner); + entity.Comp.CanFloat = _gravity.IsWeightless(entity.Owner) || entity.Comp.AlwaysFloat; Dirty(entity); return entity.Comp.CanFloat; } @@ -38,6 +38,9 @@ private void OnComponentStartup(Entity entity, ref Com private void OnWeightlessnessChanged(Entity entity, ref WeightlessnessChangedEvent args) { + if (entity.Comp.AlwaysFloat) + return; + if (entity.Comp.CanFloat == args.Weightless) return; diff --git a/Content.Shared/Movement/Components/InputMoverComponent.cs b/Content.Shared/Movement/Components/InputMoverComponent.cs index a1ed2b37e58..8d6fa0f8f90 100644 --- a/Content.Shared/Movement/Components/InputMoverComponent.cs +++ b/Content.Shared/Movement/Components/InputMoverComponent.cs @@ -83,6 +83,12 @@ public sealed partial class InputMoverComponent : Component [ViewVariables(VVAccess.ReadWrite)] public bool CanMove = true; + + /// + /// Used to optimize not changing movement appearance data if it isnt necessary. + /// + [DataField] + public bool UsesSpriteMovement = false; } [Serializable, NetSerializable] diff --git a/Content.Shared/Movement/Components/SpriteMovementComponent.cs b/Content.Shared/Movement/Components/SpriteMovementComponent.cs index b5a9e373521..0af1c74735d 100644 --- a/Content.Shared/Movement/Components/SpriteMovementComponent.cs +++ b/Content.Shared/Movement/Components/SpriteMovementComponent.cs @@ -5,7 +5,7 @@ namespace Content.Shared.Movement.Components; /// /// Updates a sprite layer based on whether an entity is moving via input or not. /// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +[RegisterComponent, NetworkedComponent] public sealed partial class SpriteMovementComponent : Component { /// @@ -20,6 +20,5 @@ public sealed partial class SpriteMovementComponent : Component [DataField] public Dictionary NoMovementLayers = new(); - [DataField, AutoNetworkedField] - public bool IsMoving; + public bool? WasMoving = null; } diff --git a/Content.Shared/Movement/Events/SpriteMoveEvent.cs b/Content.Shared/Movement/Events/SpriteMoveEvent.cs deleted file mode 100644 index 25ebffe2df7..00000000000 --- a/Content.Shared/Movement/Events/SpriteMoveEvent.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Content.Shared.Movement.Events; - -/// -/// Raised on an entity whenever it should change movement sprite -/// -[ByRefEvent] -public readonly struct SpriteMoveEvent -{ - public readonly bool IsMoving = false; - - public SpriteMoveEvent(bool isMoving) - { - IsMoving = isMoving; - } -} diff --git a/Content.Shared/Movement/Events/SpriteMovementVisuals.cs b/Content.Shared/Movement/Events/SpriteMovementVisuals.cs new file mode 100644 index 00000000000..fd3ea5f669f --- /dev/null +++ b/Content.Shared/Movement/Events/SpriteMovementVisuals.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Movement.Events; + +[Serializable, NetSerializable] +public enum SpriteMovementVisuals : byte +{ + Moving, +} diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index d15d6a39f27..e81b3765e77 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -100,8 +100,8 @@ protected void SetMoveInput(Entity entity, MoveButtons butt RaiseLocalEvent(entity, ref moveEvent); Dirty(entity, entity.Comp); - var ev = new SpriteMoveEvent(entity.Comp.HasDirectionalMovement); - RaiseLocalEvent(entity, ref ev); + if (entity.Comp.UsesSpriteMovement) + _appearance.SetData(entity, SpriteMovementVisuals.Moving, entity.Comp.HasDirectionalMovement); } private void OnMoverHandleState(Entity entity, ref ComponentHandleState args) @@ -126,8 +126,8 @@ private void OnMoverHandleState(Entity entity, ref Componen entity.Comp.HeldMoveButtons = state.HeldMoveButtons; RaiseLocalEvent(entity.Owner, ref moveEvent); - var ev = new SpriteMoveEvent(entity.Comp.HasDirectionalMovement); - RaiseLocalEvent(entity, ref ev); + if (entity.Comp.UsesSpriteMovement) + _appearance.SetData(entity, SpriteMovementVisuals.Moving, entity.Comp.HasDirectionalMovement); } } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index ac64e3ff8b2..e3036562432 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -51,6 +51,7 @@ public abstract partial class SharedMoverController : VirtualController [Dependency] private SharedGravitySystem _gravity = default!; [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private TagSystem _tags = default!; + [Dependency] private SharedAppearanceSystem _appearance = default!; protected EntityQuery CanMoveInAirQuery; protected EntityQuery FootstepModifierQuery; diff --git a/Content.Shared/Movement/Systems/SharedSpriteMovementSystem.cs b/Content.Shared/Movement/Systems/SharedSpriteMovementSystem.cs deleted file mode 100644 index eb4bbc1be63..00000000000 --- a/Content.Shared/Movement/Systems/SharedSpriteMovementSystem.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Content.Shared.Movement.Components; -using Content.Shared.Movement.Events; - -namespace Content.Shared.Movement.Systems; - -public abstract class SharedSpriteMovementSystem : EntitySystem -{ - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnSpriteMoveInput); - } - - private void OnSpriteMoveInput(Entity ent, ref SpriteMoveEvent args) - { - if (ent.Comp.IsMoving == args.IsMoving) - return; - - ent.Comp.IsMoving = args.IsMoving; - Dirty(ent); - } -} diff --git a/Resources/Prototypes/_ES/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/_ES/Entities/Markers/Spawners/jobs.yml index c97f0184734..4f337166947 100644 --- a/Resources/Prototypes/_ES/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/_ES/Entities/Markers/Spawners/jobs.yml @@ -7,7 +7,7 @@ sprite: Markers/jobs.rsi layers: - state: green - - sprite: _ES/Mobs/Ghosts/theatergoer.rsi + - sprite: _ES/Mobs/Ghosts/theatergoer_body.rsi state: body - type: SpawnPoint spawn_type: Theatergoer diff --git a/Resources/Prototypes/_ES/Entities/Markers/lobby.yml b/Resources/Prototypes/_ES/Entities/Markers/lobby.yml index 38e06afe262..ed67dc239a1 100644 --- a/Resources/Prototypes/_ES/Entities/Markers/lobby.yml +++ b/Resources/Prototypes/_ES/Entities/Markers/lobby.yml @@ -9,7 +9,7 @@ sprite: Markers/cross.rsi layers: - state: green - - sprite: _ES/Mobs/Ghosts/theatergoer.rsi + - sprite: _ES/Mobs/Ghosts/theatergoer_head.rsi state: head-1 - type: Physics bodyType: Static @@ -36,7 +36,7 @@ sprite: Markers/cross.rsi layers: - state: red - - sprite: _ES/Mobs/Ghosts/theatergoer.rsi + - sprite: _ES/Mobs/Ghosts/theatergoer_head.rsi state: head-3 - type: Physics bodyType: Static diff --git a/Resources/Prototypes/_ES/Entities/Mobs/Player/stagehand.yml b/Resources/Prototypes/_ES/Entities/Mobs/Player/stagehand.yml index f5e3cccc7bb..f1fa713fc48 100644 --- a/Resources/Prototypes/_ES/Entities/Mobs/Player/stagehand.yml +++ b/Resources/Prototypes/_ES/Entities/Mobs/Player/stagehand.yml @@ -7,12 +7,13 @@ description: Every show needs a loyal crew in the back making it tick. Today, that person is you. components: - type: Sprite - sprite: _ES/Mobs/Ghosts/theatergoer.rsi + sprite: _ES/Mobs/Ghosts/theatergoer_body.rsi layers: - state: body map: [ "body" ] shader: unshaded - state: head-1 + sprite: _ES/Mobs/Ghosts/theatergoer_head.rsi map: [ "face" ] shader: unshaded - type: RandomSprite @@ -69,9 +70,27 @@ - type: GenericVisualizer visuals: enum.ESUsernameEntityVisuals.Admin: - base: - True: { state: admin, shader: unshaded } - False: { state: body, shader: unshaded } + body: + True: + sprite: _ES/Mobs/Ghosts/theatergoer_body_admin.rsi + loop: false + False: + sprite: _ES/Mobs/Ghosts/theatergoer_body.rsi + loop: false + - type: FloatingVisuals + offset: 0,0.1 + alwaysFloat: true + - type: InputMover + usesSpriteMovement: true + - type: SpriteMovement + movementLayers: + body: + state: body-floating + loop: false + noMovementLayers: + body: + state: body-floating-reversed + loop: false - type: ESMindVisuals - type: ESBlockInteraction - type: ShowElectrocutionHUD diff --git a/Resources/Prototypes/_ES/Entities/Mobs/Player/theatergoer.yml b/Resources/Prototypes/_ES/Entities/Mobs/Player/theatergoer.yml index 921a013885c..49e0cd585e4 100644 --- a/Resources/Prototypes/_ES/Entities/Mobs/Player/theatergoer.yml +++ b/Resources/Prototypes/_ES/Entities/Mobs/Player/theatergoer.yml @@ -5,11 +5,12 @@ description: A member of your troupe. components: - type: Sprite - sprite: _ES/Mobs/Ghosts/theatergoer.rsi + sprite: _ES/Mobs/Ghosts/theatergoer_body.rsi layers: - state: body map: [ "body" ] - state: head-1 + sprite: _ES/Mobs/Ghosts/theatergoer_head.rsi map: [ "face" ] - type: RandomSprite available: @@ -46,9 +47,9 @@ - type: GenericVisualizer visuals: enum.ESUsernameEntityVisuals.Admin: - base: - True: { state: admin } - False: { state: body } + body: + True: { sprite: _ES/Mobs/Ghosts/theatergoer_body_admin.rsi } + False: { sprite: _ES/Mobs/Ghosts/theatergoer_body.rsi } - type: ESMindVisuals - type: Buckle - type: Hands diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/meta.json b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/meta.json deleted file mode 100644 index 4064413c74d..00000000000 --- a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/meta.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "version": 1, - "size": - { - "x": 32, - "y": 32 - }, - "copyright": "Created by EmoGarbage404, adapted from sprites taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730", - "license": "CC-BY-SA-3.0", - "states": - [ - { - "name": "body", - "directions": 4 - }, - { - "name": "admin", - "directions": 4 - }, - { - "name": "stagehand", - "directions": 4 - }, - { - "name": "head-1", - "directions": 4 - }, - { - "name": "head-2", - "directions": 4 - }, - { - "name": "head-3", - "directions": 4 - }, - { - "name": "head-4", - "directions": 4 - }, - { - "name": "head-5", - "directions": 4 - }, - { - "name": "head-6", - "directions": 4 - }, - { - "name": "head-7", - "directions": 4 - }, - { - "name": "head-8", - "directions": 4 - }, - { - "name": "head-9", - "directions": 4 - }, - { - "name": "head-10", - "directions": 4 - }, - { - "name": "head-11", - "directions": 4 - }, - { - "name": "head-12", - "directions": 4 - }, - { - "name": "head-13", - "directions": 4 - }, - { - "name": "head-14", - "directions": 4 - }, - { - "name": "head-15", - "directions": 4 - }, - { - "name": "head-16", - "directions": 4 - }, - { - "name": "head-17", - "directions": 4 - }, - { - "name": "head-18", - "directions": 4 - }, - { - "name": "head-19", - "directions": 4 - }, - { - "name": "head-20", - "directions": 4 - }, - { - "name": "head-21", - "directions": 4 - }, - { - "name": "head-22", - "directions": 4 - }, - { - "name": "head-23", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/stagehand.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/stagehand.png deleted file mode 100644 index a4b36fcabc590582fe57dc3cd625cc0bc54abc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 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 mB4$#AKZ` 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 RB5+g%Zd@}ne5dd7_x?I literal 0 HcmV?d00001 diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/body.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/body.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/body.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/body.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/meta.json b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/meta.json new file mode 100644 index 00000000000..74707da4f81 --- /dev/null +++ b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body.rsi/meta.json @@ -0,0 +1,77 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "copyright": "Created by EmoGarbage404, animations by Flareguy, adapted from sprites taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730", + "license": "CC-BY-SA-3.0", + "states": + [ + { + "name": "body", + "directions": 4 + }, + { + "name": "body-floating", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "body-floating-reversed", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body-floating-reversed.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body-floating-reversed.png new file mode 100644 index 0000000000000000000000000000000000000000..51fbf0a709347741a915f258aa660223a1204362 GIT binary patch literal 4319 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 T+I#{0ApxNDjrFQ@oumH)uQO|Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/admin.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/admin.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/body.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/meta.json b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/meta.json new file mode 100644 index 00000000000..04ed2e65a1b --- /dev/null +++ b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_body_admin.rsi/meta.json @@ -0,0 +1,77 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "copyright": "Created by EmoGarbage404, animations by Flareguy, adapted from sprites taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730", + "license": "CC-BY-SA-3.0", + "states": + [ + { + "name": "body", + "directions": 4 + }, + { + "name": "body-floating", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "body-floating-reversed", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-1.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-1.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-1.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-1.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-10.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-10.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-10.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-10.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-11.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-11.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-11.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-11.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-12.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-12.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-12.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-12.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-13.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-13.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-13.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-13.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-14.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-14.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-14.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-14.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-15.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-15.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-15.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-15.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-16.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-16.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-16.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-16.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-17.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-17.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-17.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-17.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-18.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-18.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-18.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-18.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-19.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-19.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-19.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-19.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-2.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-2.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-2.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-2.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-20.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-20.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-20.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-20.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-21.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-21.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-21.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-21.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-22.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-22.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-22.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-22.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-23.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-23.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-23.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-23.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-3.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-3.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-3.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-3.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-4.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-4.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-4.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-4.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-5.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-5.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-5.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-5.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-6.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-6.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-6.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-6.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-7.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-7.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-7.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-7.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-8.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-8.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-8.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-8.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-9.png b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-9.png similarity index 100% rename from Resources/Textures/_ES/Mobs/Ghosts/theatergoer.rsi/head-9.png rename to Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/head-9.png diff --git a/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/meta.json b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/meta.json new file mode 100644 index 00000000000..b96b1d23557 --- /dev/null +++ b/Resources/Textures/_ES/Mobs/Ghosts/theatergoer_head.rsi/meta.json @@ -0,0 +1,105 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "copyright": "Created by EmoGarbage404 and Flareguy", + "license": "CC-BY-SA-3.0", + "states": + [ + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + }, + { + "name": "head-3", + "directions": 4 + }, + { + "name": "head-4", + "directions": 4 + }, + { + "name": "head-5", + "directions": 4 + }, + { + "name": "head-6", + "directions": 4 + }, + { + "name": "head-7", + "directions": 4 + }, + { + "name": "head-8", + "directions": 4 + }, + { + "name": "head-9", + "directions": 4 + }, + { + "name": "head-10", + "directions": 4 + }, + { + "name": "head-11", + "directions": 4 + }, + { + "name": "head-12", + "directions": 4 + }, + { + "name": "head-13", + "directions": 4 + }, + { + "name": "head-14", + "directions": 4 + }, + { + "name": "head-15", + "directions": 4 + }, + { + "name": "head-16", + "directions": 4 + }, + { + "name": "head-17", + "directions": 4 + }, + { + "name": "head-18", + "directions": 4 + }, + { + "name": "head-19", + "directions": 4 + }, + { + "name": "head-20", + "directions": 4 + }, + { + "name": "head-21", + "directions": 4 + }, + { + "name": "head-22", + "directions": 4 + }, + { + "name": "head-23", + "directions": 4 + } + ] +}