nar'sie fake (#20299)

* import narsie sprite

* narsie_rises audio

* rename SmokeDissipateSpawnComponent to SpawnOnDespawnComponent

* add AnnounceOnSpawn system

* oop

* NAR'SIE HAS RISEN

* suffix

* base prototype, changes

* fix

* mapinit

* downscale

* new toys

* singuloose

* still not fix

* honki sprite

* add honki spawn animation

* revert spawnondespawn change

* really revert

* use LocId for announceonspawn

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
deltanedas
2023-12-07 01:24:33 +00:00
committed by GitHub
parent 0c63f2ee57
commit 88119c6469
12 changed files with 262 additions and 1 deletions

View File

@@ -0,0 +1,36 @@
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;
}

View File

@@ -0,0 +1,22 @@
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);
}
}

View File

@@ -8,6 +8,11 @@
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)"
@@ -26,4 +31,4 @@
- files: ["bluealert.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Taken from Citadel Station 13"
source: "https://github.com/Skyrat-SS13/Skyrat13/commit/2d4f2d1b489590b559e4073f41b126cef56f4c50"
source: "https://github.com/Skyrat-SS13/Skyrat13/commit/2d4f2d1b489590b559e4073f41b126cef56f4c50"

Binary file not shown.

View File

@@ -0,0 +1,2 @@
narsie-has-risen = NAR'SIE HAS RISEN
narsie-has-risen-sender = ???

View File

@@ -0,0 +1,99 @@
- 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -0,0 +1,40 @@
{
"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
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -0,0 +1,57 @@
{
"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
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB