Mortician's Menagerie (#2391)
* Body bags! * Morgue Trays and the Crematorium! Reorganised body bags to be under Morgue, not Medical * Fix. Things outside of EntityStorageComponents now use the Try*Storage() not just *Storage() methods - Allows mobs to be trapped in a morgue/crematorium whose tray can't open. * Fix tests. Modernise component dependency and nullability. * Update Content.Server/GameObjects/Components/Morgue/MorgueTrayComponent.cs Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
BIN
Resources/Audio/Machines/ding.ogg
Normal file
BIN
Resources/Audio/Misc/zip.ogg
Normal file
@@ -84,4 +84,4 @@
|
||||
- type: Stack
|
||||
max: 5
|
||||
count: 5
|
||||
stacktype: enum.StackType.Gauze
|
||||
stacktype: enum.StackType.Gauze
|
||||
202
Resources/Prototypes/Entities/Objects/Specific/morgue.yml
Normal file
@@ -0,0 +1,202 @@
|
||||
- type: entity
|
||||
id: BodyBag_Container
|
||||
name: body bag
|
||||
description: A plastic bag designed for the storage and transportation of cadavers.
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/bodybags.rsi
|
||||
layers:
|
||||
- state: bag
|
||||
- state: open_overlay
|
||||
map: ["enum.StorageVisualLayers.Door"]
|
||||
- state: label_overlay
|
||||
map: ["enum.BodyBagVisualLayers.Label"]
|
||||
- type: Icon
|
||||
sprite: Objects/Specific/Morgue/bodybags.rsi
|
||||
state: bag
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: MovedByPressure
|
||||
- type: Physics
|
||||
mass: 5
|
||||
anchored: false
|
||||
shapes:
|
||||
- !type:PhysShapeAabb
|
||||
bounds: "-0.45,-0.5,0.1,0.5"
|
||||
layer:
|
||||
- Clickable
|
||||
- type: BodyBagEntityStorage
|
||||
CanWeldShut: false
|
||||
Capacity: 1
|
||||
closeSound: /Audio/Misc/zip.ogg
|
||||
openSound: /Audio/Misc/zip.ogg
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: StorageVisualizer
|
||||
state_open: open_overlay
|
||||
state_closed: bag
|
||||
- type: BodyBagVisualizer
|
||||
- type: Pullable
|
||||
|
||||
- type: entity
|
||||
id: BodyBag_Item
|
||||
name: body bag
|
||||
description: A plastic bag designed for the storage and transportation of cadavers.
|
||||
parent: BaseItem
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/bodybags.rsi
|
||||
state: item
|
||||
# - type: BodyBagItem #TODO: we need some kind of generic placable, like thus:
|
||||
# - type: Placeable
|
||||
# prototype: someId
|
||||
# snap: Center
|
||||
|
||||
|
||||
- type: entity
|
||||
id: Morgue
|
||||
name: morgue
|
||||
description: Used to keep bodies in until someone fetches them. Includes a high-tech alert system for false-positives!
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/morgue.rsi
|
||||
layers:
|
||||
- state: morgue_closed
|
||||
map: ["enum.MorgueVisualLayers.Base"]
|
||||
- state: morgue_nomob_light
|
||||
visible: false
|
||||
map: ["enum.MorgueVisualLayers.Light"]
|
||||
shader: unshaded
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
mass: 25
|
||||
anchored: true
|
||||
shapes:
|
||||
- !type:PhysShapeAabb
|
||||
bounds: "-0.5, -0.5, 0.5, 0.5"
|
||||
mask:
|
||||
- Impassable
|
||||
- MobImpassable
|
||||
- VaultImpassable
|
||||
- SmallImpassable
|
||||
layer:
|
||||
- Opaque
|
||||
- MobImpassable
|
||||
- VaultImpassable
|
||||
- SmallImpassable
|
||||
- type: MorgueEntityStorage
|
||||
CanWeldShut: false
|
||||
IsCollidableWhenOpen: true
|
||||
Capacity: 1
|
||||
closeSound: /Audio/Items/deconstruct.ogg
|
||||
openSound: /Audio/Items/deconstruct.ogg
|
||||
trayPrototype: MorgueTray
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: MorgueVisualizer
|
||||
state_open: morgue_open
|
||||
state_closed: morgue_closed
|
||||
light_contents: morgue_nomob_light
|
||||
light_mob: morgue_nosoul_light
|
||||
light_soul: morgue_soul_light
|
||||
- type: SnapGrid
|
||||
offset: Center
|
||||
|
||||
- type: entity
|
||||
id: MorgueTray
|
||||
name: morgue tray
|
||||
description: If you lay down to have a rest on this, you'll soon have a problem.
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/morgue.rsi
|
||||
state: morgue_tray
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
mass: 15
|
||||
anchored: true
|
||||
shapes:
|
||||
- !type:PhysShapeAabb
|
||||
bounds: "-0.5, -0.5, 0.5, 0.5"
|
||||
layer:
|
||||
- Clickable
|
||||
- type: MorgueTray
|
||||
|
||||
|
||||
- type: entity
|
||||
id: Crematorium
|
||||
name: crematorium
|
||||
description: A human incinerator. Works well on barbecue nights.
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/morgue.rsi
|
||||
layers:
|
||||
- state: crema_closed
|
||||
map: ["enum.CrematoriumVisualLayers.Base"]
|
||||
- state: crema_contents_light
|
||||
visible: false
|
||||
map: ["enum.CrematoriumVisualLayers.Light"]
|
||||
shader: unshaded
|
||||
- type: Clickable
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
mass: 25
|
||||
anchored: true
|
||||
shapes:
|
||||
- !type:PhysShapeAabb
|
||||
bounds: "-0.5, -0.5, 0.5, 0.5"
|
||||
mask:
|
||||
- Impassable
|
||||
- MobImpassable
|
||||
- VaultImpassable
|
||||
- SmallImpassable
|
||||
layer:
|
||||
- Opaque
|
||||
- MobImpassable
|
||||
- VaultImpassable
|
||||
- SmallImpassable
|
||||
- type: CrematoriumEntityStorage
|
||||
CanWeldShut: false
|
||||
IsCollidableWhenOpen: true
|
||||
Capacity: 1
|
||||
closeSound: /Audio/Items/deconstruct.ogg
|
||||
openSound: /Audio/Items/deconstruct.ogg
|
||||
trayPrototype: CrematoriumTray
|
||||
doSoulBeep: false
|
||||
- type: LoopingSound
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: CrematoriumVisualizer
|
||||
state_open: crema_open
|
||||
state_closed: crema_closed
|
||||
light_contents: crema_contents_light
|
||||
light_burning: crema_active_light
|
||||
- type: SnapGrid
|
||||
offset: Center
|
||||
|
||||
- type: entity
|
||||
id: CrematoriumTray
|
||||
name: crematorium tray
|
||||
parent: MorgueTray
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Specific/Morgue/morgue.rsi
|
||||
state: crema_tray
|
||||
|
||||
- type: entity
|
||||
id: Ash
|
||||
name: ash
|
||||
description: This used to be something, but now it's not.
|
||||
parent: BaseItem
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Objects/Consumable/Trash/ash.rsi
|
||||
state: icon
|
||||
BIN
Resources/Textures/Objects/Specific/Morgue/bodybags.rsi/bag.png
Normal file
|
After Width: | Height: | Size: 317 B |
BIN
Resources/Textures/Objects/Specific/Morgue/bodybags.rsi/item.png
Normal file
|
After Width: | Height: | Size: 227 B |
|
After Width: | Height: | Size: 167 B |
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC BY-SA 3.0",
|
||||
"copyright": "Taken from https://github.com/tgstation/tgstation at commit 39659000f380583c35fb814ee2fadab24c2f8076",
|
||||
"states": [
|
||||
{
|
||||
"name": "bag",
|
||||
"directions": 1,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "item",
|
||||
"directions": 1,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "label_overlay",
|
||||
"directions": 1,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "open_overlay",
|
||||
"directions": 1,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 377 B |
|
After Width: | Height: | Size: 452 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 202 B |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
209
Resources/Textures/Objects/Specific/Morgue/morgue.rsi/meta.json
Normal file
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from https://github.com/tgstation/tgstation at commit 31d88c7454e429a64fbae4a9f7b4aecaf838e9a1",
|
||||
"states": [
|
||||
{
|
||||
"name": "crema_active_light",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crema_closed",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crema_contents_light",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crema_open",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crema_tray",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_closed",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_nomob_light",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_nosoul_light",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_open",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_soul_light",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "morgue_tray",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 302 B |
|
After Width: | Height: | Size: 393 B |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 464 B |
|
After Width: | Height: | Size: 923 B |