--- /dev/null
+using Content.Server.Chat.Systems;
+using Robust.Shared.Audio;
+using Robust.Shared.Maths;
+
+namespace Content.Server.Chat;
+
+/// <summary>
+/// Dispatches an announcement to everyone when the entity is mapinit'd.
+/// </summary>
+[RegisterComponent, Access(typeof(AnnounceOnSpawnSystem))]
+public sealed partial class AnnounceOnSpawnComponent : Component
+{
+ /// <summary>
+ /// Locale id of the announcement message.
+ /// </summary>
+ [DataField(required: true)]
+ public LocId Message = string.Empty;
+
+ /// <summary>
+ /// Locale id of the announcement's sender, defaults to Central Command.
+ /// </summary>
+ [DataField]
+ public LocId? Sender;
+
+ /// <summary>
+ /// Sound override for the announcement.
+ /// </summary>
+ [DataField]
+ public SoundSpecifier? Sound;
+
+ /// <summary>
+ /// Color override for the announcement.
+ /// </summary>
+ [DataField]
+ public Color? Color;
+}
--- /dev/null
+using Content.Server.Chat;
+
+namespace Content.Server.Chat.Systems;
+
+public sealed class AnnounceOnSpawnSystem : EntitySystem
+{
+ [Dependency] private readonly ChatSystem _chat = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<AnnounceOnSpawnComponent, MapInitEvent>(OnInit);
+ }
+
+ private void OnInit(EntityUid uid, AnnounceOnSpawnComponent comp, MapInitEvent args)
+ {
+ var message = Loc.GetString(comp.Message);
+ var sender = comp.Sender != null ? Loc.GetString(comp.Sender) : "Central Command";
+ _chat.DispatchGlobalAnnouncement(message, sender, playSound: true, comp.Sound, comp.Color);
+ }
+}
copyright: "Taken from TG station."
source: "https://github.com/tgstation/tgstation/blob/b02b93ce2ab891164511a973493cdf951b4120f7/sound/effects/ninja_greeting.ogg"
+- files: ["narsie_rises.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Taken from TG station."
+ source: "https://github.com/tgstation/tgstation/blob/b44fcdedfb7c7d8425bd75b9caf71644a86375d1/sound/creatures/narsie_rises.ogg"
+
- files: ["epsilon.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Made by dj-34 (https://github.com/dj-34)"
- files: ["bluealert.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Taken from Citadel Station 13"
- source: "https://github.com/Skyrat-SS13/Skyrat13/commit/2d4f2d1b489590b559e4073f41b126cef56f4c50"
\ No newline at end of file
+ source: "https://github.com/Skyrat-SS13/Skyrat13/commit/2d4f2d1b489590b559e4073f41b126cef56f4c50"
--- /dev/null
+narsie-has-risen = NAR'SIE HAS RISEN
+narsie-has-risen-sender = ???
--- /dev/null
+- type: entity
+ abstract: true
+ id: MobNarsieBase
+ name: Nar'Sie
+ description: Your mind begins to bubble and ooze as it tries to comprehend what it sees.
+ components:
+ - type: Sprite
+ sprite: Mobs/Demons/narsie.rsi
+ drawdepth: Ghosts
+ scale: 2.0,2.0
+ layers:
+ - state: narsie
+ shader: unshaded
+
+# spawn animation, spawns actual narsie when it ends
+- type: entity
+ parent: MobNarsieBase
+ id: MobNarsieSpawn
+ suffix: Spawn
+ components:
+ - type: Sprite
+ layers:
+ - state: spawn
+ shader: unshaded
+ # spawn animation lasts 3.5 seconds
+ - type: TimedDespawn
+ lifetime: 3.5
+ - type: SpawnOnDespawn
+ prototype: MobNarsie
+
+- type: entity
+ parent: [MobNarsieBase, BaseMob]
+ id: MobNarsie
+ components:
+ - type: AnnounceOnSpawn
+ message: narsie-has-risen
+ sender: narsie-has-risen-sender
+ sound:
+ path: /Audio/Misc/narsie_rises.ogg
+ color: red
+ - type: CargoSellBlacklist
+ # big nar'sie needs to see the universe
+ - type: ContentEye
+ maxZoom: 2.0,2.0
+ - type: Fixtures
+ fixtures:
+ EventHorizonCollider:
+ shape:
+ !type:PhysShapeCircle
+ radius: 5
+ hard: false
+ restitution: 0.8
+ density: 99999
+ mask:
+ - AllMask
+ layer:
+ - AllMask
+ EventHorizonConsumer:
+ shape:
+ !type:PhysShapeCircle
+ radius: 5
+ hard: false
+ mask:
+ - AllMask
+ layer:
+ - AllMask
+ - type: Input
+ context: "ghost"
+ - type: MovementIgnoreGravity
+ # narnar hears all
+ - type: IntrinsicRadioReceiver
+ - type: ActiveRadio
+ channels:
+ - Binary
+ - Common
+ - Command
+ - CentCom
+ - Engineering
+ - Medical
+ - Science
+ - Security
+ - Service
+ - Supply
+ - Syndicate
+ globalReceive: true
+ - type: Physics
+ bodyType: Dynamic
+ bodyStatus: InAir
+ - type: CanMoveInAir
+ # singulose components
+ - type: EventHorizon
+ radius: 5
+ canBreachContainment: true
+ - type: GravityWell
+ baseRadialAcceleration: 6
+ maxRange: 8
+ - type: WarpPoint
+ follow: true
+ location: Nar'Sie
--- /dev/null
+{
+ "version": 1,
+ "size": {
+ "x": 201,
+ "y": 192
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by Alekshhh for SS14.",
+ "states": [
+ {
+ "name": "honkmother",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "spawn",
+ "delays": [
+ [
+ 0.3,
+ 1,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.3
+ ]
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "version": 1,
+ "size": {
+ "x": 252,
+ "y": 266
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/b44fcdedfb7c7d8425bd75b9caf71644a86375d1/icons/obj/antags/cult/narsie.dmi",
+ "states": [
+ {
+ "name": "narsie",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "spawn",
+ "delays": [
+ [
+ 0.3,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 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,
+ 0.1,
+ 0.2
+ ]
+ ]
+ }
+ ]
+}