diff --git a/Content.Shared/Ghost/SpectralComponent.cs b/Content.Shared/Ghost/SpectralComponent.cs new file mode 100644 index 0000000000..3799951152 --- /dev/null +++ b/Content.Shared/Ghost/SpectralComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Ghost; + +/// +/// Marker component to identify "ghostly" entities. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpectralComponent : Component { } diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 3f735cf98b..6a22da58eb 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -289,6 +289,7 @@ - id: ResearchDisk5000 - id: PetCarrier - id: DrinkMopwataBottleRandom + - id: SpectralLocator - id: LidSalami weight: 0.05 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index cf964822f1..888011a5b5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -8,6 +8,7 @@ components: - type: Input context: "ghost" + - type: Spectral - type: MovementSpeedModifier baseWalkSpeed: 6 baseSprintSpeed: 6 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 209d4244b9..0f1c77e262 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -1,5 +1,5 @@ - type: entity - parent: [MobObserver, InventoryBase] + parent: [MobObserverBase, InventoryBase] id: AdminObserver name: admin observer categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index c02629c4d6..397061defe 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -28,11 +28,13 @@ layer: - GhostImpassable +# shared parent between aghosts, replay spectators and normal observers - type: entity parent: - Incorporeal - BaseMob - id: MobObserver + id: MobObserverBase + abstract: true name: observer description: Boo! categories: [ HideSpawnMenu ] @@ -61,6 +63,13 @@ tags: - BypassInteractionRangeChecks +# proto for player ghosts specifically +- type: entity + parent: MobObserverBase + id: MobObserver + components: + - type: Spectral + - type: entity id: ActionGhostBoo name: Boo! diff --git a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml index ffbc46e94c..8a01de4080 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml @@ -1,5 +1,5 @@ - type: entity - parent: MobObserver + parent: MobObserverBase id: ReplayObserver categories: [ HideSpawnMenu ] save: false diff --git a/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml new file mode 100644 index 0000000000..930b9c4926 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml @@ -0,0 +1,58 @@ +- type: entity + id: SpectralLocatorUnpowered + parent: BaseItem + name: spectral locator + description: Appears to be a modified anomaly locator. Seems very old. + suffix: Unpowered + components: + - type: Sprite + sprite: Objects/Fun/spectrallocator.rsi + layers: + - state: icon + - state: screen + shader: unshaded + visible: false + map: ["enum.ToggleVisuals.Layer"] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + enum.ToggleVisuals.Layer: + True: { visible: true } + False: { visible: false } + - type: ItemToggle + - type: ProximityBeeper + - type: ProximityDetector + range: 12 + criteria: + components: + - Spectral # reacts to AI eye, intentional + - type: Beeper + isMuted: true + minBeepInterval: 0.25 + maxBeepInterval: 0.5 + beepSound: + path: "/Audio/Items/locator_beep.ogg" + params: + maxDistance: 1 + volume: -8 + +- type: entity + id: SpectralLocator + parent: [ SpectralLocatorUnpowered, PowerCellSlotSmallItem ] + suffix: Powered + components: + - type: PowerCellDraw + drawRate: 1 + useRate: 0 + - type: ToggleCellDraw + +- type: entity + id: SpectralLocatorEmpty + parent: SpectralLocator + suffix: Empty + components: + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png new file mode 100644 index 0000000000..b18dfd1c29 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png new file mode 100644 index 0000000000..cb25c6e3cf Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png new file mode 100644 index 0000000000..7c34512cb6 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json b/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json new file mode 100644 index 0000000000..1556cd4eb9 --- /dev/null +++ b/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Originally created by EmoGarbage404 (github) for Space Station 14, modified by Ilya246 (github) for Space Station 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "screen", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png new file mode 100644 index 0000000000..eb4ab6bbbe Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png differ