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>
This commit is contained in:
Remie Richards
2020-10-28 22:51:43 +00:00
committed by GitHub
parent 6a0aa9b72f
commit cc6acae145
38 changed files with 1225 additions and 35 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -84,4 +84,4 @@
- type: Stack
max: 5
count: 5
stacktype: enum.StackType.Gauze
stacktype: enum.StackType.Gauze

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

View File

@@ -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
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 923 B