From f83b5a3cac0a1ec91c098f8bc8886abd608437ec Mon Sep 17 00:00:00 2001 From: Rouden <149893554+Roudenn@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:27:54 +0300 Subject: [PATCH 1/5] [Maps] Aspid Update (#971) * [Maps] Aspid update * Update backmen_aspid.yml --- Resources/Maps/Backmen/backmen_aspid.yml | 1034 +++++++++++------ .../_Backmen/Maps/backmen_aspid.yml | 1 + 2 files changed, 711 insertions(+), 324 deletions(-) diff --git a/Resources/Maps/Backmen/backmen_aspid.yml b/Resources/Maps/Backmen/backmen_aspid.yml index 5dcb4203811..41fc533492c 100644 --- a/Resources/Maps/Backmen/backmen_aspid.yml +++ b/Resources/Maps/Backmen/backmen_aspid.yml @@ -63,7 +63,7 @@ entities: chunks: -1,-1: ind: -1,-1 - tiles: ggAAAAAAbAAAAAACbAAAAAABYQAAAAADYQAAAAADYQAAAAABYQAAAAABYQAAAAADYQAAAAABcQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAACbAAAAAAAawAAAAAAawAAAAADawAAAAADawAAAAADYQAAAAABbAAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAABawAAAAACawAAAAAAawAAAAABawAAAAADYQAAAAACYQAAAAADYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAAAYQAAAAADYQAAAAAAggAAAAAAbAAAAAADbAAAAAACawAAAAAAawAAAAABawAAAAADawAAAAABYQAAAAACYQAAAAAAYQAAAAADYQAAAAAAYQAAAAABMAAAAAAAYQAAAAADYQAAAAABMAAAAAAAggAAAAAAbAAAAAAAbAAAAAABYQAAAAABYQAAAAADYQAAAAABYQAAAAADYQAAAAADYQAAAAAAggAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAADYQAAAAACYQAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAABYQAAAAADggAAAAAAYQAAAAACYQAAAAAAYQAAAAABYQAAAAADYQAAAAABYQAAAAACYQAAAAADYQAAAAACYQAAAAABYQAAAAACYQAAAAABYQAAAAACYQAAAAACYQAAAAADYQAAAAACYQAAAAABYQAAAAABYQAAAAABYQAAAAADYQAAAAABYQAAAAAAYQAAAAACYQAAAAACYQAAAAABYQAAAAADYQAAAAADYQAAAAABYQAAAAABYQAAAAADYQAAAAACYQAAAAABYQAAAAACYQAAAAABMAAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAACYQAAAAACYQAAAAACYQAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAAAYQAAAAADYQAAAAADYQAAAAABYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAABggAAAAAAggAAAAAALAAAAAAAggAAAAAAIAAAAAADIAAAAAAAIAAAAAABIAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAADIAAAAAADIAAAAAADIAAAAAAALAAAAAAAggAAAAAAIAAAAAACMAAAAAAAIAAAAAACIAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADMAAAAAAAIAAAAAAAIAAAAAACMAAAAAAALAAAAAAALAAAAAAAIAAAAAACIAAAAAAAIAAAAAABIAAAAAACIAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAAAIAAAAAABLAAAAAAAggAAAAAAIAAAAAABMAAAAAAAIAAAAAABIAAAAAACMAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAABMAAAAAAAIAAAAAABIAAAAAADMAAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAAAIAAAAAACIAAAAAADIAAAAAAAIAAAAAADIAAAAAADIAAAAAADIAAAAAADFwAAAAAAggAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAADIAAAAAAAIAAAAAADIAAAAAAA + tiles: ggAAAAAAbAAAAAACbAAAAAABYQAAAAADYQAAAAADYQAAAAABYQAAAAABYQAAAAADYQAAAAABcQAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAggAAAAAAbAAAAAACbAAAAAAAawAAAAAAawAAAAADawAAAAADawAAAAADYQAAAAABbAAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAABawAAAAACawAAAAAAawAAAAABawAAAAADYQAAAAACYQAAAAADYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAAAYQAAAAADYQAAAAAAggAAAAAAbAAAAAADbAAAAAACawAAAAAAawAAAAABawAAAAADawAAAAABYQAAAAACYQAAAAAAYQAAAAADYQAAAAAAYQAAAAABMAAAAAAAYQAAAAADYQAAAAABMAAAAAAAggAAAAAAbAAAAAAAbAAAAAABYQAAAAABYQAAAAADYQAAAAABYQAAAAADYQAAAAADYQAAAAAAggAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAADYQAAAAACYQAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAABYQAAAAADggAAAAAAYQAAAAACYQAAAAAAYQAAAAABYQAAAAADYQAAAAABYQAAAAACYQAAAAADYQAAAAACYQAAAAABYQAAAAACYQAAAAABYQAAAAACYQAAAAACYQAAAAADYQAAAAACYQAAAAABYQAAAAABYQAAAAABYQAAAAADYQAAAAABYQAAAAAAYQAAAAACYQAAAAACYQAAAAABYQAAAAADYQAAAAADYQAAAAABYQAAAAABYQAAAAADYQAAAAACYQAAAAABYQAAAAACYQAAAAABMAAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAACYQAAAAACYQAAAAACYQAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAAAYQAAAAADYQAAAAADYQAAAAABYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAABggAAAAAAggAAAAAALAAAAAAAggAAAAAAIAAAAAADIAAAAAAAIAAAAAABIAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAADIAAAAAADIAAAAAADIAAAAAAALAAAAAAAggAAAAAAIAAAAAACMAAAAAAAIAAAAAACIAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADMAAAAAAAIAAAAAAAIAAAAAACMAAAAAAALAAAAAAALAAAAAAAIAAAAAACIAAAAAAAIAAAAAABIAAAAAACIAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAAAIAAAAAABLAAAAAAAggAAAAAAIAAAAAABMAAAAAAAIAAAAAABIAAAAAACMAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAADIAAAAAABMAAAAAAAIAAAAAABIAAAAAADMAAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAAAIAAAAAACIAAAAAADIAAAAAAAIAAAAAADIAAAAAADIAAAAAADIAAAAAADFwAAAAAAggAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAADIAAAAAAAIAAAAAADIAAAAAAA version: 6 -1,0: ind: -1,0 @@ -71,7 +71,7 @@ entities: version: 6 0,-1: ind: 0,-1 - tiles: ggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAcQAAAAAAYQAAAAADYQAAAAADYQAAAAAAYQAAAAABYQAAAAACYQAAAAACYQAAAAAAYQAAAAACggAAAAAAEgAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAACYQAAAAAAawAAAAADawAAAAACawAAAAABawAAAAABYQAAAAABYQAAAAABggAAAAAAJQAAAAACYQAAAAADYQAAAAADYQAAAAADYQAAAAADYQAAAAACYQAAAAADYQAAAAADYQAAAAABawAAAAABawAAAAACawAAAAABawAAAAADYQAAAAAAYQAAAAABggAAAAAAEgAAAAAAYQAAAAAAYQAAAAACMAAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAACawAAAAACawAAAAAAawAAAAACawAAAAAAYQAAAAADYQAAAAADggAAAAAAcAAAAAAAYQAAAAAAYQAAAAAAYQAAAAABYQAAAAACYQAAAAABggAAAAAAYQAAAAABYQAAAAABYQAAAAABYQAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAAAggAAAAAAcAAAAAAAYQAAAAABggAAAAAAYQAAAAACYQAAAAADYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAACYQAAAAABYQAAAAABYQAAAAADYQAAAAAAYQAAAAACYQAAAAADYQAAAAADYQAAAAACYQAAAAAAYQAAAAABYQAAAAACYQAAAAABYQAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAADYQAAAAADYQAAAAACYQAAAAABYQAAAAABYQAAAAACYQAAAAABYQAAAAABYQAAAAACYQAAAAAAYQAAAAADYQAAAAAAYQAAAAAAYQAAAAADYQAAAAADYQAAAAADYQAAAAADYQAAAAABYQAAAAADYQAAAAAAYQAAAAABYQAAAAADYQAAAAAAYQAAAAADYQAAAAACYQAAAAACYQAAAAACYQAAAAACYQAAAAAAYQAAAAABggAAAAAAIAAAAAACIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAAAIAAAAAACIAAAAAAAggAAAAAAJQAAAAADIAAAAAABggAAAAAAIAAAAAACIAAAAAACIAAAAAABIAAAAAAAggAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAggAAAAAAYQAAAAAAYQAAAAABYQAAAAACggAAAAAAggAAAAAAcQAAAAAAggAAAAAAIAAAAAAAIAAAAAADMAAAAAAAIAAAAAADbAAAAAABdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAAAIAAAAAACMAAAAAAAIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAACIAAAAAAAIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAABIAAAAAABIAAAAAADggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAggAAAAAAggAAAAAAcAAAAAAA + tiles: UwAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAcQAAAAAAYQAAAAADYQAAAAADYQAAAAAAYQAAAAABYQAAAAACYQAAAAACYQAAAAAAYQAAAAACggAAAAAAEgAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAACYQAAAAAAawAAAAADawAAAAACawAAAAABawAAAAABYQAAAAABYQAAAAABggAAAAAAJQAAAAACYQAAAAADYQAAAAADYQAAAAADYQAAAAADYQAAAAACYQAAAAADYQAAAAADYQAAAAABawAAAAABawAAAAACawAAAAABawAAAAADYQAAAAAAYQAAAAABggAAAAAAEgAAAAAAYQAAAAAAYQAAAAACMAAAAAAAYQAAAAABYQAAAAAAYQAAAAACYQAAAAAAYQAAAAACawAAAAACawAAAAAAawAAAAACawAAAAAAYQAAAAADYQAAAAADggAAAAAAcAAAAAAAYQAAAAAAYQAAAAAAYQAAAAABYQAAAAACYQAAAAABggAAAAAAYQAAAAABYQAAAAABYQAAAAABYQAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAAAggAAAAAAcAAAAAAAYQAAAAABggAAAAAAYQAAAAACYQAAAAADYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAACYQAAAAABYQAAAAABYQAAAAADYQAAAAAAYQAAAAACYQAAAAADYQAAAAADYQAAAAACYQAAAAAAYQAAAAABYQAAAAACYQAAAAABYQAAAAAAYQAAAAABYQAAAAABYQAAAAACYQAAAAADYQAAAAADYQAAAAACYQAAAAABYQAAAAABYQAAAAACYQAAAAABYQAAAAABYQAAAAACYQAAAAAAYQAAAAADYQAAAAAAYQAAAAAAYQAAAAADYQAAAAADYQAAAAADYQAAAAADYQAAAAABYQAAAAADYQAAAAAAYQAAAAABYQAAAAADYQAAAAAAYQAAAAADYQAAAAACYQAAAAACYQAAAAACYQAAAAACYQAAAAAAYQAAAAABggAAAAAAIAAAAAACIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAAAIAAAAAACIAAAAAAAggAAAAAAJQAAAAADIAAAAAABggAAAAAAIAAAAAACIAAAAAACIAAAAAABIAAAAAAAggAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAggAAAAAAYQAAAAAAYQAAAAABYQAAAAACggAAAAAAggAAAAAAcQAAAAAAggAAAAAAIAAAAAAAIAAAAAADMAAAAAAAIAAAAAADbAAAAAABdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAAAIAAAAAACMAAAAAAAIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAACIAAAAAAAIAAAAAAAggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAABIAAAAAABIAAAAAADggAAAAAAdAAAAAAAZAAAAAAAZAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAggAAAAAAggAAAAAAcAAAAAAA version: 6 0,0: ind: 0,0 @@ -191,11 +191,11 @@ entities: version: 6 0,-2: ind: 0,-2 - tiles: ggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAACJQAAAAACggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAAAbAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAggAAAAAAYQAAAAAAYQAAAAABYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAggAAAAAAYQAAAAACYQAAAAAAYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAggAAAAAAYQAAAAACYQAAAAAAYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAADYQAAAAADggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAABggAAAAAAYQAAAAADYQAAAAAAYQAAAAAAYQAAAAACYQAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAAAJAAAAAACJAAAAAAAIAAAAAADbAAAAAABYQAAAAACYQAAAAACYQAAAAABYQAAAAADYQAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABJAAAAAABJAAAAAAAIAAAAAAAbAAAAAABYQAAAAABYQAAAAADYQAAAAAAYQAAAAABYQAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAACggAAAAAAYQAAAAACYQAAAAACYQAAAAAAYQAAAAABYQAAAAABJQAAAAABJQAAAAABggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAACYQAAAAADYQAAAAABYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAABJQAAAAADggAAAAAAYQAAAAACYQAAAAABYQAAAAACYQAAAAABYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAAAbAAAAAAAYQAAAAABYQAAAAADYQAAAAACYQAAAAAAYQAAAAADggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAAAIAAAAAADggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAABggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAABIAAAAAABcAAAAAAAggAAAAAAcAAAAAAAIAAAAAAAIAAAAAADcAAAAAAAggAAAAAAggAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAAAIAAAAAABcAAAAAAAggAAAAAAcAAAAAAAIAAAAAACIAAAAAABcAAAAAAAggAAAAAAEgAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAACbAAAAAABggAAAAAAggAAAAAAJQAAAAAB + tiles: ggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAACJQAAAAACggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAAAbAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAggAAAAAAYQAAAAAAYQAAAAABYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAggAAAAAAYQAAAAACYQAAAAAAYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAggAAAAAAYQAAAAACYQAAAAAAYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAABYQAAAAADYQAAAAADggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAABggAAAAAAYQAAAAADYQAAAAAAYQAAAAAAYQAAAAACYQAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAAAJAAAAAACJAAAAAAAIAAAAAADbAAAAAABYQAAAAACYQAAAAACYQAAAAABYQAAAAADYQAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABJAAAAAABJAAAAAAAIAAAAAAAbAAAAAABYQAAAAABYQAAAAADYQAAAAAAYQAAAAABYQAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAACggAAAAAAYQAAAAACYQAAAAACYQAAAAAAYQAAAAABYQAAAAABJQAAAAABJQAAAAABggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAADYQAAAAACYQAAAAADYQAAAAABYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAAAIAAAAAABJQAAAAADggAAAAAAYQAAAAACYQAAAAABYQAAAAACYQAAAAABYQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAAAbAAAAAAAYQAAAAABYQAAAAADYQAAAAACYQAAAAAAYQAAAAADggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAAAIAAAAAADggAAAAAAggAAAAAAggAAAAAAbAAAAAADbAAAAAABggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAABIAAAAAABcAAAAAAAggAAAAAAcAAAAAAAIAAAAAAAIAAAAAADcAAAAAAAggAAAAAAggAAAAAAUwAAAAAAggAAAAAAgQAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAAAIAAAAAABcAAAAAAAggAAAAAAcAAAAAAAIAAAAAACIAAAAAABcAAAAAAAggAAAAAAEgAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAACbAAAAAABggAAAAAAggAAAAAAJQAAAAAB version: 6 -1,-2: ind: -1,-2 - tiles: ggAAAAAAggAAAAAAIAAAAAACIAAAAAADIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAAAJQAAAAACJQAAAAACJQAAAAACJQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAABJQAAAAACJQAAAAABJQAAAAAAJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAADJQAAAAACJQAAAAACJQAAAAADJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAAAJQAAAAACJQAAAAADJQAAAAACJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAABIAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAABIAAAAAACIAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAABIAAAAAABIAAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAACIAAAAAAAIAAAAAACIAAAAAABIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAAAIAAAAAABIAAAAAACIAAAAAADJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAAAIAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAABggAAAAAAggAAAAAAggAAAAAAJQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAA + tiles: ggAAAAAAggAAAAAAIAAAAAACIAAAAAADIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAAAJQAAAAACJQAAAAACJQAAAAACJQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAABJQAAAAACJQAAAAABJQAAAAAAJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAADJQAAAAACJQAAAAACJQAAAAADJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAAAJQAAAAACJQAAAAADJQAAAAACJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAABIAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAABIAAAAAACIAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAACIAAAAAACIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAcAAAAAAAggAAAAAAIAAAAAABIAAAAAABIAAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAACIAAAAAAAIAAAAAACIAAAAAABIAAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAADIAAAAAAAIAAAAAABIAAAAAACIAAAAAADJQAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAAAIAAAAAABggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAggAAAAAAUwAAAAAAUwAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAABggAAAAAAggAAAAAAggAAAAAAJQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAUwAAAAAAUwAAAAAA version: 6 -3,3: ind: -3,3 @@ -346,7 +346,6 @@ entities: decals: 4730: -6,-29 4731: -6,-27 - 4732: -6,-23 4733: -6,-21 4734: -6,-25 - node: @@ -7073,7 +7072,8 @@ entities: 1,5: 0: 65309 1,6: - 0: 54399 + 0: 50303 + 4: 4096 1,7: 0: 65501 1,8: @@ -7795,20 +7795,20 @@ entities: 0: 3276 2: 4369 0,-7: - 4: 1 - 5: 256 + 5: 1 + 6: 256 2: 17476 -1,-7: - 4: 12 - 5: 3072 + 5: 12 + 6: 3072 2: 4369 0,-6: - 5: 1 - 6: 256 + 6: 1 + 7: 256 2: 17476 -1,-6: - 5: 12 - 6: 3072 + 6: 12 + 7: 3072 2: 4369 0,-5: 1: 1 @@ -8564,6 +8564,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.6852 + - 81.57766 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -10201,6 +10216,11 @@ entities: - type: Transform pos: -11.5,-10.5 parent: 1 + - uid: 7714 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 1 - proto: AirlockBarGlassLocked entities: - uid: 4040 @@ -10450,7 +10470,7 @@ entities: pos: 11.5,-16.5 parent: 1 - type: Door - secondsUntilStateChange: -30752.193 + secondsUntilStateChange: -32566.799 state: Opening - type: DeviceLinkSource lastSignals: @@ -10511,6 +10531,11 @@ entities: parent: 1 - proto: AirlockEngineeringLocked entities: + - uid: 2251 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 1 - uid: 5196 components: - type: Transform @@ -10573,15 +10598,15 @@ entities: parent: 1 - proto: AirlockExternalAtmosphericsLocked entities: - - uid: 4167 + - uid: 2155 components: - type: Transform - pos: 1.5,-15.5 + pos: -6.5,-15.5 parent: 1 - - uid: 4171 + - uid: 8503 components: - type: Transform - pos: -2.5,-15.5 + pos: -3.5,-16.5 parent: 1 - proto: AirlockExternalCargoLocked entities: @@ -10597,6 +10622,18 @@ entities: rot: 3.141592653589793 rad pos: -43.5,18.5 parent: 1 +- proto: AirlockExternalEngineeringLocked + entities: + - uid: 2247 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 1 + - uid: 8814 + components: + - type: Transform + pos: 2.5,-16.5 + parent: 1 - proto: AirlockExternalGlass entities: - uid: 6222 @@ -10767,11 +10804,6 @@ entities: - DoorStatus: Close - DoorStatus: AutoClose - DoorStatus: DoorBolt - - uid: 2250 - components: - - type: Transform - pos: -0.5,-16.5 - parent: 1 - uid: 10149 components: - type: Transform @@ -11331,11 +11363,6 @@ entities: parent: 1 - proto: AirlockMaintAtmoLocked entities: - - uid: 7112 - components: - - type: Transform - pos: -6.5,-15.5 - parent: 1 - uid: 8714 components: - type: Transform @@ -11371,11 +11398,6 @@ entities: parent: 1 - proto: AirlockMaintEngiLocked entities: - - uid: 9192 - components: - - type: Transform - pos: 5.5,-15.5 - parent: 1 - uid: 18654 components: - type: Transform @@ -12418,6 +12440,11 @@ entities: parent: 1 - proto: APCBasic entities: + - uid: 3409 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 - uid: 4080 components: - type: Transform @@ -12741,6 +12768,13 @@ entities: - type: Transform pos: 47.5,-15.5 parent: 1 +- proto: ArtistCircuitBoard + entities: + - uid: 19027 + components: + - type: Transform + pos: 22.539845,-16.435417 + parent: 1 - proto: Ash entities: - uid: 6945 @@ -12748,6 +12782,13 @@ entities: - type: Transform pos: 31.405294,56.585308 parent: 1 +- proto: AsimovCircuitBoard + entities: + - uid: 19025 + components: + - type: Transform + pos: 22.508595,-14.435418 + parent: 1 - proto: ATM entities: - uid: 2105 @@ -13834,6 +13875,18 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage +- proto: Biogenerator + entities: + - uid: 19044 + components: + - type: Transform + pos: 11.5,10.5 + parent: 1 + - uid: 19045 + components: + - type: Transform + pos: -32.5,42.5 + parent: 1 - proto: BiomassReclaimer entities: - uid: 3053 @@ -14219,6 +14272,14 @@ entities: - type: Transform pos: -9.5,72.5 parent: 1 +- proto: BlockGameArcade + entities: + - uid: 7112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-0.5 + parent: 1 - proto: BodyBagFolded entities: - uid: 6946 @@ -14948,6 +15009,11 @@ entities: - type: Transform pos: 8.5,-32.5 parent: 1 + - uid: 2250 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 - uid: 2285 components: - type: Transform @@ -14968,6 +15034,11 @@ entities: - type: Transform pos: 6.5,-32.5 parent: 1 + - uid: 2549 + components: + - type: Transform + pos: -0.5,-15.5 + parent: 1 - uid: 2570 components: - type: Transform @@ -15288,6 +15359,11 @@ entities: - type: Transform pos: 26.5,-26.5 parent: 1 + - uid: 7766 + components: + - type: Transform + pos: -0.5,-16.5 + parent: 1 - uid: 7800 components: - type: Transform @@ -17823,11 +17899,6 @@ entities: - type: Transform pos: 1.5,-15.5 parent: 1 - - uid: 10630 - components: - - type: Transform - pos: 0.5,-15.5 - parent: 1 - uid: 10648 components: - type: Transform @@ -18353,11 +18424,6 @@ entities: - type: Transform pos: -2.5,-15.5 parent: 1 - - uid: 10838 - components: - - type: Transform - pos: -1.5,-15.5 - parent: 1 - uid: 10839 components: - type: Transform @@ -37028,6 +37094,11 @@ entities: - type: Transform pos: 8.5,-35.5 parent: 1 + - uid: 2249 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 - uid: 2296 components: - type: Transform @@ -42771,21 +42842,6 @@ entities: - type: Transform pos: -3.5,-15.5 parent: 1 - - uid: 4168 - components: - - type: Transform - pos: -1.5,-15.5 - parent: 1 - - uid: 4169 - components: - - type: Transform - pos: -0.5,-15.5 - parent: 1 - - uid: 4170 - components: - - type: Transform - pos: 0.5,-15.5 - parent: 1 - uid: 4172 components: - type: Transform @@ -51002,6 +51058,13 @@ entities: rot: 3.141592653589793 rad pos: -14.5,40.5 parent: 1 +- proto: CommandmentCircuitBoard + entities: + - uid: 19021 + components: + - type: Transform + pos: 15.477516,-14.500868 + parent: 1 - proto: CommsComputerCircuitboard entities: - uid: 8669 @@ -51045,17 +51108,11 @@ entities: - type: Transform pos: 4.5,82.5 parent: 1 - - uid: 4336 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,32.5 - parent: 1 - - uid: 8516 + - uid: 3407 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,27.5 + rot: -1.5707963267948966 rad + pos: 12.5,31.5 parent: 1 - proto: ComputerBroken entities: @@ -51077,6 +51134,12 @@ entities: parent: 1 - proto: ComputerCargoBounty entities: + - uid: 2616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -42.5,24.5 + parent: 1 - uid: 9679 components: - type: Transform @@ -51096,25 +51159,6 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,7.5 parent: 1 -- proto: ComputerCargoShuttle - entities: - - uid: 320 - components: - - type: Transform - pos: 0.5,83.5 - parent: 1 - - uid: 4153 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -43.5,-1.5 - parent: 1 - - uid: 4730 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -42.5,24.5 - parent: 1 - proto: ComputerCloningConsole entities: - uid: 3172 @@ -51196,22 +51240,12 @@ entities: parent: 1 - proto: ComputerFrame entities: - - uid: 6097 - components: - - type: Transform - pos: 20.5,-13.5 - parent: 1 - uid: 7442 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-21.5 parent: 1 - - uid: 8503 - components: - - type: Transform - pos: 17.5,-13.5 - parent: 1 - proto: ComputerId entities: - uid: 2900 @@ -51261,12 +51295,6 @@ entities: - type: Transform pos: 18.5,4.5 parent: 1 - - uid: 12872 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,-15.5 - parent: 1 - uid: 13180 components: - type: Transform @@ -51285,6 +51313,11 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,53.5 parent: 1 + - uid: 19038 + components: + - type: Transform + pos: 17.5,-13.5 + parent: 1 - proto: ComputerRadar entities: - uid: 4257 @@ -51338,6 +51371,19 @@ entities: rot: 1.5707963267948966 rad pos: -42.5,22.5 parent: 1 +- proto: ComputerShipyard + entities: + - uid: 320 + components: + - type: Transform + pos: 0.5,83.5 + parent: 1 + - uid: 4153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -43.5,-1.5 + parent: 1 - proto: ComputerShuttleCargo entities: - uid: 4154 @@ -51419,12 +51465,6 @@ entities: rot: 3.141592653589793 rad pos: -5.5,52.5 parent: 1 - - uid: 8814 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 22.5,-15.5 - parent: 1 - uid: 9414 components: - type: Transform @@ -51437,6 +51477,11 @@ entities: rot: 3.141592653589793 rad pos: -24.5,-13.5 parent: 1 + - uid: 19039 + components: + - type: Transform + pos: 20.5,-13.5 + parent: 1 - proto: ComputerSurveillanceWirelessCameraMonitor entities: - uid: 4260 @@ -51610,6 +51655,13 @@ entities: - type: Transform pos: -29.621134,44.53177 parent: 1 +- proto: CorporateCircuitBoard + entities: + - uid: 19024 + components: + - type: Transform + pos: 22.43047,-14.263543 + parent: 1 - proto: CowToolboxFilled entities: - uid: 13384 @@ -51982,11 +52034,6 @@ entities: - type: Transform pos: 18.5,21.5 parent: 1 - - uid: 8759 - components: - - type: Transform - pos: 12.5,31.5 - parent: 1 - uid: 8762 components: - type: Transform @@ -52059,6 +52106,11 @@ entities: ent: null - proto: CrateMedicalSurgery entities: + - uid: 7796 + components: + - type: Transform + pos: -21.5,34.5 + parent: 1 - uid: 8515 components: - type: Transform @@ -52851,12 +52903,6 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,7.5 parent: 1 - - uid: 7796 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-14.5 - parent: 1 - uid: 8856 components: - type: Transform @@ -57755,6 +57801,13 @@ entities: - type: Transform pos: 6.6584716,22.543604 parent: 1 +- proto: DungeonMasterCircuitBoard + entities: + - uid: 19023 + components: + - type: Transform + pos: 15.439793,-16.32123 + parent: 1 - proto: EmergencyLight entities: - uid: 4344 @@ -58228,6 +58281,18 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,18.5 parent: 1 + - uid: 19042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-16.5 + parent: 1 + - uid: 19043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-16.5 + parent: 1 - proto: EmergencyRollerBedSpawnFolded entities: - uid: 8558 @@ -58265,7 +58330,7 @@ entities: - uid: 10493 components: - type: Transform - pos: 6.3720436,-21.34436 + pos: 2.4802053,-45.529274 parent: 1 - proto: EncryptionKeyCargo entities: @@ -58599,6 +58664,13 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,16.5 parent: 1 +- proto: FakeSpaceCash500 + entities: + - uid: 7083 + components: + - type: Transform + pos: 6.4334226,-24.182034 + parent: 1 - proto: FaxMachineBase entities: - uid: 546 @@ -59895,6 +59967,12 @@ entities: rot: 3.141592653589793 rad pos: -19.5,46.5 parent: 1 + - uid: 1598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-15.5 + parent: 1 - uid: 2817 components: - type: Transform @@ -59973,6 +60051,12 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,-45.5 parent: 1 + - uid: 16075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-15.5 + parent: 1 - uid: 18809 components: - type: Transform @@ -60445,7 +60529,7 @@ entities: pos: 31.5,35.5 parent: 1 - type: Door - secondsUntilStateChange: -47178.473 + secondsUntilStateChange: -48993.08 state: Closing - type: Firelock emergencyCloseCooldown: 1086.7989152 @@ -62169,16 +62253,6 @@ entities: transferRate: 200 - type: AtmosPipeColor color: '#990000FF' - - uid: 4417 - components: - - type: Transform - pos: 7.5,-35.5 - parent: 1 - - type: GasFilter - filteredGas: Nitrogen - transferRate: 40 - - type: AtmosPipeColor - color: '#0055CCFF' - proto: GasFilterFlipped entities: - uid: 2956 @@ -62211,6 +62285,18 @@ entities: - type: Transform pos: -0.5,-19.5 parent: 1 +- proto: GasMixer + entities: + - uid: 16098 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-20.5 + parent: 1 + - type: GasMixer + inletTwoConcentration: 0.22000003 + inletOneConcentration: 0.78 + targetPressure: 250 - proto: GasMixerFlipped entities: - uid: 4699 @@ -62417,6 +62503,11 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-38.5 parent: 1 + - uid: 4171 + components: + - type: Transform + pos: -4.5,-22.5 + parent: 1 - uid: 4424 components: - type: Transform @@ -62439,12 +62530,6 @@ entities: - type: Transform pos: 3.5,-35.5 parent: 1 - - uid: 5811 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-35.5 - parent: 1 - uid: 6376 components: - type: Transform @@ -62457,12 +62542,6 @@ entities: rot: 3.141592653589793 rad pos: -7.5,33.5 parent: 1 - - uid: 6675 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-35.5 - parent: 1 - uid: 6678 components: - type: Transform @@ -63117,6 +63196,12 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-19.5 + parent: 1 - uid: 16148 components: - type: Transform @@ -63346,6 +63431,24 @@ entities: rot: -1.5707963267948966 rad pos: -6.5,-47.5 parent: 1 + - uid: 18999 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-35.5 + parent: 1 + - uid: 19015 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-33.5 + parent: 1 + - uid: 19016 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-33.5 + parent: 1 - proto: GasPipeFourway entities: - uid: 2648 @@ -63607,24 +63710,6 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,-22.5 parent: 1 - - uid: 2549 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-22.5 - parent: 1 - - uid: 2550 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-22.5 - parent: 1 - - uid: 2551 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-22.5 - parent: 1 - uid: 2552 components: - type: Transform @@ -64238,6 +64323,24 @@ entities: parent: 1 - type: AtmosPipeColor color: '#990000FF' + - uid: 4168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-35.5 + parent: 1 + - uid: 4169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-35.5 + parent: 1 + - uid: 4336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-36.5 + parent: 1 - uid: 4339 components: - type: Transform @@ -64259,6 +64362,12 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 4417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-33.5 + parent: 1 - uid: 4534 components: - type: Transform @@ -64273,6 +64382,17 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-29.5 parent: 1 + - uid: 4626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-35.5 + parent: 1 + - uid: 4638 + components: + - type: Transform + pos: -8.5,-45.5 + parent: 1 - uid: 4698 components: - type: Transform @@ -64285,6 +64405,11 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-31.5 parent: 1 + - uid: 4730 + components: + - type: Transform + pos: -6.5,-45.5 + parent: 1 - uid: 5348 components: - type: Transform @@ -64293,6 +64418,16 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 5811 + components: + - type: Transform + pos: -9.5,-45.5 + parent: 1 + - uid: 6097 + components: + - type: Transform + pos: -7.5,-45.5 + parent: 1 - uid: 6372 components: - type: Transform @@ -75030,6 +75165,18 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-21.5 + parent: 1 + - uid: 16088 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-19.5 + parent: 1 - uid: 16090 components: - type: Transform @@ -75052,6 +75199,18 @@ entities: parent: 1 - type: AtmosPipeColor color: '#990000FF' + - uid: 16096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-21.5 + parent: 1 + - uid: 16099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-21.5 + parent: 1 - uid: 16103 components: - type: Transform @@ -76691,6 +76850,12 @@ entities: parent: 1 - type: AtmosPipeColor color: '#990000FF' + - uid: 18081 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-35.5 + parent: 1 - uid: 18084 components: - type: Transform @@ -77159,6 +77324,95 @@ entities: rot: -1.5707963267948966 rad pos: -21.5,-12.5 parent: 1 + - uid: 18997 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-35.5 + parent: 1 + - uid: 18998 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-35.5 + parent: 1 + - uid: 19001 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-22.5 + parent: 1 + - uid: 19002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-22.5 + parent: 1 + - uid: 19004 + components: + - type: Transform + pos: -7.5,-22.5 + parent: 1 + - uid: 19005 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-23.5 + parent: 1 + - uid: 19006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-24.5 + parent: 1 + - uid: 19007 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-25.5 + parent: 1 + - uid: 19008 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-26.5 + parent: 1 + - uid: 19009 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-27.5 + parent: 1 + - uid: 19010 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-28.5 + parent: 1 + - uid: 19011 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-29.5 + parent: 1 + - uid: 19012 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-30.5 + parent: 1 + - uid: 19013 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-31.5 + parent: 1 + - uid: 19014 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-32.5 + parent: 1 - proto: GasPipeTJunction entities: - uid: 1379 @@ -77263,14 +77517,6 @@ entities: parent: 1 - type: AtmosPipeColor color: '#990000FF' - - uid: 3040 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-36.5 - parent: 1 - - type: AtmosPipeColor - color: '#990000FF' - uid: 3441 components: - type: Transform @@ -77291,19 +77537,17 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-37.5 parent: 1 - - uid: 6374 + - uid: 4167 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,32.5 + pos: 1.5,-35.5 parent: 1 - - uid: 7051 + - uid: 6374 components: - type: Transform - pos: 7.5,-33.5 + rot: -1.5707963267948966 rad + pos: 12.5,32.5 parent: 1 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 7056 components: - type: Transform @@ -79007,6 +79251,12 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-20.5 + parent: 1 - uid: 16092 components: - type: Transform @@ -79231,6 +79481,12 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 17589 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-21.5 + parent: 1 - uid: 18287 components: - type: Transform @@ -79271,6 +79527,12 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-31.5 parent: 1 + - uid: 19003 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-22.5 + parent: 1 - proto: GasPort entities: - uid: 1797 @@ -79441,7 +79703,7 @@ entities: pos: -8.5,-19.5 parent: 1 - type: GasPressurePump - targetPressure: 400 + targetPressure: 250 - type: AtmosPipeColor color: '#0055CCFF' - uid: 2761 @@ -79496,6 +79758,13 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 4335 + components: + - type: MetaData + name: насос азота суперматерии + - type: Transform + pos: -5.5,-34.5 + parent: 1 - uid: 6377 components: - type: Transform @@ -79504,14 +79773,6 @@ entities: parent: 1 - type: AtmosPipeColor color: '#990000FF' - - uid: 7055 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-35.5 - parent: 1 - - type: GasPressurePump - targetPressure: 100 - uid: 7057 components: - type: Transform @@ -79689,6 +79950,14 @@ entities: open: False - type: AtmosPipeColor color: '#990000FF' + - uid: 4170 + components: + - type: MetaData + name: клапан азота суперматерии + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-22.5 + parent: 1 - proto: GasVentPump entities: - uid: 2737 @@ -81938,28 +82207,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-36.5 parent: 1 - - uid: 7714 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,-45.5 - parent: 1 - - uid: 7766 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,-45.5 - parent: 1 - - uid: 7767 - components: - - type: Transform - pos: -9.5,-45.5 - parent: 1 - - uid: 7770 - components: - - type: Transform - pos: -7.5,-45.5 - parent: 1 - proto: GeigerCounter entities: - uid: 7118 @@ -86256,6 +86503,12 @@ entities: - type: Transform pos: -12.5,-6.5 parent: 1 + - uid: 9192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-35.5 + parent: 1 - uid: 9196 components: - type: Transform @@ -88001,13 +88254,6 @@ entities: - type: Transform pos: -7.5,-44.5 parent: 1 -- proto: Hemostat - entities: - - uid: 2616 - components: - - type: Transform - pos: -21.453913,34.60605 - parent: 1 - proto: HighSecArmoryLocked entities: - uid: 3347 @@ -88674,12 +88920,6 @@ entities: parent: 1 - proto: IntercomScience entities: - - uid: 17589 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,35.5 - parent: 1 - uid: 17591 components: - type: Transform @@ -89039,6 +89279,13 @@ entities: - type: Transform pos: -15.5,-28.5 parent: 1 +- proto: LiveLetLiveCircuitBoard + entities: + - uid: 19022 + components: + - type: Transform + pos: 15.32411,-16.430605 + parent: 1 - proto: LockerAtmosphericsFilled entities: - uid: 7094 @@ -89773,6 +90020,11 @@ entities: ent: null - proto: LockerFreezerBase entities: + - uid: 2550 + components: + - type: Transform + pos: -21.5,32.5 + parent: 1 - uid: 8860 components: - type: Transform @@ -89784,8 +90036,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 + - 1.8856695 + - 7.0937095 - 0 - 0 - 0 @@ -89802,6 +90054,7 @@ entities: showEnts: False occludes: True ents: + - 7051 - 18448 paper_label: !type:ContainerSlot showEnts: False @@ -90902,6 +91155,13 @@ entities: parent: 1 - proto: MaterialBiomass entities: + - uid: 7051 + components: + - type: Transform + parent: 8860 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 8857 components: - type: Transform @@ -90979,12 +91239,19 @@ entities: - type: Transform pos: 22.5,17.5 parent: 1 -- proto: MedicalScannerMachineCircuitboard +- proto: MedicalBiofabricator entities: - - uid: 1426 + - uid: 2551 + components: + - type: Transform + pos: 2.5,27.5 + parent: 1 +- proto: MedicalScanner + entities: + - uid: 8230 components: - type: Transform - pos: 16.51305,33.521683 + pos: 9.5,31.5 parent: 1 - proto: MedicalTechFab entities: @@ -91433,11 +91700,6 @@ entities: parent: 1 - proto: NitrousOxideCanister entities: - - uid: 3029 - components: - - type: Transform - pos: 0.5,-25.5 - parent: 1 - uid: 3043 components: - type: Transform @@ -91450,6 +91712,13 @@ entities: - type: Transform pos: 4.5,-3.5 parent: 1 +- proto: NTDefaultCircuitBoard + entities: + - uid: 19020 + components: + - type: Transform + pos: 15.35536,-14.368105 + parent: 1 - proto: NuclearBomb entities: - uid: 7250 @@ -91458,6 +91727,13 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,48.5 parent: 1 +- proto: NutimovCircuitBoard + entities: + - uid: 19026 + components: + - type: Transform + pos: 22.548656,-16.331184 + parent: 1 - proto: OperatingTable entities: - uid: 4334 @@ -91647,7 +91923,7 @@ entities: content: >+ [bold]КАК ЗАПУСТИТЬ ДВИГАТЕЛЬ СУПЕРМАТЕРИИ:[/bold] - 1. Настройте Дистро в атмосферном отсеке. + 1. Включите подачу азота в Атмосферном отсеке, от газодобытчика до насоса в почти самом низу атмоса. 2. Включите все фильтры, насосы и охладители в этой комнате. [bold]Объёмный насос включите в последнюю очередь![/bold] @@ -91657,7 +91933,7 @@ entities: 5. Включите все коллекторы радиации, заправьте пустые коллекторы. - 6. Включите эммитеры и закройте ставни. + 6. [bold]Только теперь включите эммитеры[/bold] и закройте ставни. [bold]ЧТО ДЕЛАТЬ ПРИ ПЕРЕГРУЗКЕ СУПЕРМАТЕРИИ:[/bold] @@ -92212,6 +92488,13 @@ entities: - type: Transform pos: 9.581463,59.56483 parent: 1 +- proto: PlushieIpc + entities: + - uid: 8759 + components: + - type: Transform + pos: 0.6242959,-17.480654 + parent: 1 - proto: PlushieLamp entities: - uid: 17725 @@ -95036,6 +95319,12 @@ entities: rot: 1.5707963267948966 rad pos: -10.5,-25.5 parent: 1 + - uid: 19041 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-17.5 + parent: 1 - proto: PoweredlightLED entities: - uid: 8577 @@ -96857,21 +97146,6 @@ entities: parent: 1 - proto: RandomArcade entities: - - uid: 3405 - components: - - type: Transform - pos: 24.5,-0.5 - parent: 1 - - uid: 3407 - components: - - type: Transform - pos: 24.5,-2.5 - parent: 1 - - uid: 3409 - components: - - type: Transform - pos: 24.5,-4.5 - parent: 1 - uid: 3677 components: - type: Transform @@ -97488,16 +97762,6 @@ entities: - type: Transform pos: -16.5,-27.5 parent: 1 - - uid: 18080 - components: - - type: Transform - pos: -3.5,-16.5 - parent: 1 - - uid: 18081 - components: - - type: Transform - pos: 2.5,-16.5 - parent: 1 - uid: 18085 components: - type: Transform @@ -101505,6 +101769,12 @@ entities: - type: Transform pos: -46.5,29.5 parent: 1 + - uid: 18080 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-35.5 + parent: 1 - uid: 18124 components: - type: Transform @@ -101668,20 +101938,6 @@ entities: rot: -1.5707963267948966 rad pos: -45.5,20.5 parent: 1 -- proto: Saw - entities: - - uid: 1306 - components: - - type: Transform - pos: -21.578913,34.777924 - parent: 1 -- proto: Scalpel - entities: - - uid: 2617 - components: - - type: Transform - pos: -21.516413,34.371674 - parent: 1 - proto: ScalpelShiv entities: - uid: 8264 @@ -102094,6 +102350,16 @@ entities: - type: Transform pos: -8.5,5.5 parent: 1 + - uid: 7767 + components: + - type: Transform + pos: -20.5,35.5 + parent: 1 + - uid: 7770 + components: + - type: Transform + pos: -19.5,35.5 + parent: 1 - uid: 8167 components: - type: Transform @@ -102561,6 +102827,17 @@ entities: - Pressed: Toggle 9390: - Pressed: Toggle + - uid: 7049 + components: + - type: Transform + pos: -21.5,35.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 7767: + - Pressed: Toggle + 7770: + - Pressed: Toggle - uid: 8530 components: - type: MetaData @@ -105121,13 +105398,6 @@ entities: - type: Transform pos: -29.653055,53.73977 parent: 1 -- proto: FakeSpaceCash500 - entities: - - uid: 7083 - components: - - type: Transform - pos: 6.4334226,-24.182034 - parent: 1 - proto: SpaceHeater entities: - uid: 18479 @@ -105161,6 +105431,20 @@ entities: - type: Transform pos: 17.691397,-25.238224 parent: 1 +- proto: SpaceVillainArcadeFilled + entities: + - uid: 7062 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-4.5 + parent: 1 + - uid: 7076 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-2.5 + parent: 1 - proto: SpawnMobAlexander entities: - uid: 10644 @@ -105341,6 +105625,13 @@ entities: - type: Transform pos: -7.5,11.5 parent: 1 +- proto: SpawnPointBlueShield + entities: + - uid: 19040 + components: + - type: Transform + pos: -13.5,41.5 + parent: 1 - proto: SpawnPointBorg entities: - uid: 2624 @@ -105934,6 +106225,27 @@ entities: - type: Transform pos: 18.609694,-21.224707 parent: 1 +- proto: StationAiUploadComputer + entities: + - uid: 3029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-15.5 + parent: 1 + - uid: 3040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-15.5 + parent: 1 +- proto: StationAnchor + entities: + - uid: 2253 + components: + - type: Transform + pos: -0.5,-16.5 + parent: 1 - proto: StationMap entities: - uid: 7440 @@ -106177,6 +106489,11 @@ entities: - type: Transform pos: -7.5,34.5 parent: 1 + - uid: 7055 + components: + - type: Transform + pos: 0.5,-25.5 + parent: 1 - uid: 10089 components: - type: Transform @@ -109081,6 +109398,26 @@ entities: - type: Transform pos: -14.5,41.5 parent: 1 + - uid: 19000 + components: + - type: Transform + pos: 15.5,-14.5 + parent: 1 + - uid: 19017 + components: + - type: Transform + pos: 22.5,-14.5 + parent: 1 + - uid: 19018 + components: + - type: Transform + pos: 22.5,-16.5 + parent: 1 + - uid: 19019 + components: + - type: Transform + pos: 15.5,-16.5 + parent: 1 - proto: TableReinforcedGlass entities: - uid: 3685 @@ -109108,11 +109445,6 @@ entities: - type: Transform pos: 5.5,25.5 parent: 1 - - uid: 4335 - components: - - type: Transform - pos: -21.5,34.5 - parent: 1 - uid: 4404 components: - type: Transform @@ -110285,13 +110617,6 @@ entities: - Left: Forward - Right: Reverse - Middle: Off -- proto: UnfinishedMachineFrame - entities: - - uid: 7076 - components: - - type: Transform - pos: 9.5,31.5 - parent: 1 - proto: UniformPrinter entities: - uid: 2901 @@ -112710,6 +113035,11 @@ entities: - type: Transform pos: -51.5,37.5 parent: 1 + - uid: 1306 + components: + - type: Transform + pos: -2.5,-17.5 + parent: 1 - uid: 1315 components: - type: Transform @@ -112931,6 +113261,11 @@ entities: - type: Transform pos: -12.5,57.5 parent: 1 + - uid: 1426 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 1 - uid: 1428 components: - type: Transform @@ -114212,36 +114547,16 @@ entities: - type: Transform pos: -4.5,-16.5 parent: 1 - - uid: 2247 - components: - - type: Transform - pos: -3.5,-16.5 - parent: 1 - uid: 2248 components: - type: Transform pos: -2.5,-16.5 parent: 1 - - uid: 2249 - components: - - type: Transform - pos: -1.5,-16.5 - parent: 1 - - uid: 2251 - components: - - type: Transform - pos: 0.5,-16.5 - parent: 1 - uid: 2252 components: - type: Transform pos: 1.5,-16.5 parent: 1 - - uid: 2253 - components: - - type: Transform - pos: 2.5,-16.5 - parent: 1 - uid: 2254 components: - type: Transform @@ -116666,11 +116981,6 @@ entities: - type: Transform pos: 22.5,32.5 parent: 1 - - uid: 7062 - components: - - type: Transform - pos: -4.5,-35.5 - parent: 1 - uid: 7071 components: - type: Transform @@ -122226,28 +122536,24 @@ entities: parent: 1 - proto: WeaponTurretSyndicateBroken entities: - - uid: 1598 + - uid: 10630 components: - type: Transform - rot: 3.141592653589793 rad pos: 20.5,-15.5 parent: 1 - - uid: 2155 + - uid: 10838 components: - type: Transform - rot: 3.141592653589793 rad pos: 17.5,-15.5 parent: 1 - - uid: 16064 + - uid: 12872 components: - type: Transform - rot: 3.141592653589793 rad pos: 20.5,-11.5 parent: 1 - - uid: 16075 + - uid: 16064 components: - type: Transform - rot: 3.141592653589793 rad pos: 17.5,-11.5 parent: 1 - proto: WeaponWaterBlaster @@ -122382,6 +122688,12 @@ entities: - type: Transform pos: 10.5,12.5 parent: 1 + - uid: 6675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,3.5 + parent: 1 - uid: 9011 components: - type: Transform @@ -122558,6 +122870,18 @@ entities: parent: 1 - proto: WindoorSecureCommandLocked entities: + - uid: 2617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-14.5 + parent: 1 + - uid: 3405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-16.5 + parent: 1 - uid: 3784 components: - type: Transform @@ -122576,6 +122900,18 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-23.5 parent: 1 + - uid: 19036 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-16.5 + parent: 1 + - uid: 19037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-14.5 + parent: 1 - proto: WindoorSecureEngineeringLocked entities: - uid: 8727 @@ -123460,6 +123796,50 @@ entities: rot: -1.5707963267948966 rad pos: -7.5,64.5 parent: 1 + - uid: 19028 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-14.5 + parent: 1 + - uid: 19029 + components: + - type: Transform + pos: 22.5,-16.5 + parent: 1 + - uid: 19030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-16.5 + parent: 1 + - uid: 19031 + components: + - type: Transform + pos: 22.5,-14.5 + parent: 1 + - uid: 19032 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-14.5 + parent: 1 + - uid: 19033 + components: + - type: Transform + pos: 15.5,-14.5 + parent: 1 + - uid: 19034 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-16.5 + parent: 1 + - uid: 19035 + components: + - type: Transform + pos: 15.5,-16.5 + parent: 1 - proto: Wirecutter entities: - uid: 13445 @@ -123502,6 +123882,12 @@ entities: - type: Transform pos: 9.756588,34.56956 parent: 1 + - uid: 8516 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.2649209,-17.652529 + parent: 1 - uid: 13886 components: - type: Transform diff --git a/Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml b/Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml index 196ebe610f1..2b4162359cf 100644 --- a/Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml +++ b/Resources/Prototypes/_Backmen/Maps/backmen_aspid.yml @@ -65,3 +65,4 @@ #BKBPLATech: [0, 3] # backmen-BPLA-Silicons #BKBPLAMED: [0, 3] # backmen-BPLAMED-Silicons Prisoner: [ 2, 3] + BlueShield: [1, 1] # backmen-BlueShield From 76712bfa136cf02f2aa9fa68a0363aaa27867b61 Mon Sep 17 00:00:00 2001 From: fishbait Date: Fri, 6 Dec 2024 22:04:11 +0100 Subject: [PATCH 2/5] [Fix] no more free chem change for bloba (#960) * no more free chem change for bloba ran into a bug where changing the chem type chud be done whitout paying for it. Now it checks and aborts if you dont have enuf points to do the change. * Update BlobObserverSystem.cs --------- Co-authored-by: Roudenn --- Content.Server/Backmen/Blob/BlobObserverSystem.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Server/Backmen/Blob/BlobObserverSystem.cs b/Content.Server/Backmen/Blob/BlobObserverSystem.cs index 2dc417bd821..0051bef22a2 100644 --- a/Content.Server/Backmen/Blob/BlobObserverSystem.cs +++ b/Content.Server/Backmen/Blob/BlobObserverSystem.cs @@ -206,14 +206,15 @@ private void OnChemSelected(EntityUid uid, BlobObserverComponent component, Blob { if (component.Core == null || !TryComp(component.Core.Value, out var blobCoreComponent)) return; - + if (component.SelectedChemId == args.SelectedId) return; + + if (!_blobCoreSystem.TryUseAbility(component.Core.Value, blobCoreComponent.SwapChemCost)) + return; if (!ChangeChem(uid, args.SelectedId, component)) return; - - _blobCoreSystem.TryUseAbility(component.Core.Value, blobCoreComponent.SwapChemCost); } private bool ChangeChem(EntityUid uid, BlobChemType newChem, BlobObserverComponent component) From a9b3a2f17753a0043b77e342e0015dc46407ac9b Mon Sep 17 00:00:00 2001 From: Rouden <149893554+Roudenn@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:10:44 +0300 Subject: [PATCH 3/5] [Balance] Surgery Balance Tweaks (#941) * Fix Surgery * Fix Surgery * Fix damages for other species * Healing is 10 times slower --- .../Atmos/EntitySystems/BarotraumaSystem.cs | 4 ++-- Content.Server/Medical/DefibrillatorSystem.cs | 3 ++- Content.Server/Weapons/Ranged/Systems/GunSystem.cs | 2 +- Content.Shared/Backmen/Magic/BkmMagicSystem.cs | 3 ++- .../Backmen/Standing/SharedLayingDownSystem.cs | 2 +- .../Surgery/Body/SharedBodySystem.Targeting.cs | 4 +--- .../Step/SurgeryDamageChangeEffectComponent.cs | 2 +- .../Backmen/Surgery/SharedSurgerySystem.Steps.cs | 4 ++-- Content.Shared/Backmen/Targeting/TargetBodyPart.cs | 11 +++++++++++ Content.Shared/Body/Part/BodyPartComponent.cs | 4 ++-- Content.Shared/Chat/SharedSuicideSystem.cs | 5 +++-- Content.Shared/Climbing/Systems/ClimbSystem.cs | 3 ++- Content.Shared/Clumsy/ClumsySystem.cs | 3 ++- .../Damage/Systems/DamageOnAttackedSystem.cs | 2 +- .../Damage/Systems/DamageOnInteractSystem.cs | 4 ++-- Content.Shared/Doors/Systems/SharedDoorSystem.cs | 3 ++- Resources/Prototypes/Body/Parts/base.yml | 4 ++-- Resources/Prototypes/Body/Parts/skeleton.yml | 4 ++-- Resources/Prototypes/_Backmen/Body/Parts/harpy.yml | 4 ++-- .../Prototypes/_Backmen/Body/Parts/shadowkin.yml | 4 ++-- 20 files changed, 45 insertions(+), 30 deletions(-) diff --git a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs index 6493abdcd88..2b8518f2174 100644 --- a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs @@ -238,7 +238,7 @@ public override void Update(float frameTime) if (pressure <= Atmospherics.HazardLowPressure) { // Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear. - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false); // backmen + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * Atmospherics.LowPressureDamage, true, false, canSever: false, partMultiplier: 0.5f); // backmen if (!barotrauma.TakingDamage) { barotrauma.TakingDamage = true; @@ -252,7 +252,7 @@ public override void Update(float frameTime) var damageScale = MathF.Min(((pressure / Atmospherics.HazardHighPressure) - 1) * Atmospherics.PressureDamageCoefficient, Atmospherics.MaxHighPressureDamage); // Deal damage and ignore resistances. Resistance to pressure damage should be done via pressure protection gear. - _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false); // backmen + _damageableSystem.TryChangeDamage(uid, barotrauma.Damage * damageScale, true, false, canSever: false, partMultiplier: 0.5f); // backmen RaiseLocalEvent(uid, new MoodEffectEvent("MobHighPressure")); // backmen: mood if (!barotrauma.TakingDamage) diff --git a/Content.Server/Medical/DefibrillatorSystem.cs b/Content.Server/Medical/DefibrillatorSystem.cs index fdd3f7a5119..ed0b594fd49 100644 --- a/Content.Server/Medical/DefibrillatorSystem.cs +++ b/Content.Server/Medical/DefibrillatorSystem.cs @@ -8,6 +8,7 @@ using Content.Server.PowerCell; using Content.Server.Traits.Assorted; using Content.Shared.Backmen.Chat; +using Content.Shared.Backmen.Targeting; using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.Interaction; @@ -201,7 +202,7 @@ public void Zap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorCo else { if (_mobState.IsDead(target, mob)) - _damageable.TryChangeDamage(target, component.ZapHeal, true, origin: uid); + _damageable.TryChangeDamage(target, component.ZapHeal, true, origin: uid, targetPart: TargetBodyPart.Torso); // backmen: surgery if (_mobThreshold.TryGetThresholdForState(target, MobState.Dead, out var threshold) && TryComp(target, out var damageableComponent) && diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index d22b5ec2af7..4a09c1a539a 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -212,7 +212,7 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid? var hitName = ToPrettyString(hitEntity); if (dmg != null) - dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user); + dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user, canEvade: true); // backmen: surgery // check null again, as TryChangeDamage returns modified damage values if (dmg != null) diff --git a/Content.Shared/Backmen/Magic/BkmMagicSystem.cs b/Content.Shared/Backmen/Magic/BkmMagicSystem.cs index e7096c7375c..1d3eecbeb93 100644 --- a/Content.Shared/Backmen/Magic/BkmMagicSystem.cs +++ b/Content.Shared/Backmen/Magic/BkmMagicSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Backmen.Magic.Events; +using Content.Shared.Backmen.Targeting; using Content.Shared.Body.Components; using Content.Shared.Damage; @@ -22,6 +23,6 @@ private void OnHealSpell(HealSpellEvent ev) if (!HasComp(ev.Target)) return; - DamageableSystem.TryChangeDamage(ev.Target, ev.HealAmount, true, origin: ev.Target); + DamageableSystem.TryChangeDamage(ev.Target, ev.HealAmount, true, origin: ev.Target, targetPart: TargetBodyPart.All); // backmen: surgery } } diff --git a/Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs b/Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs index 46821ed51b4..d17b13d1fba 100644 --- a/Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs +++ b/Content.Shared/Backmen/Standing/SharedLayingDownSystem.cs @@ -320,7 +320,7 @@ standingState.CurrentState is not StandingState.Lying || obj.Value, uid, PopupType.MediumCaution); - _damageable.TryChangeDamage(uid, new DamageSpecifier(){DamageDict = {{"Blunt", 5}}}, ignoreResistances: true, canEvade: true, targetPart: TargetBodyPart.Head); + _damageable.TryChangeDamage(uid, new DamageSpecifier(){DamageDict = {{"Blunt", 5}}}, ignoreResistances: true, canEvade: false, canSever: false, targetPart: TargetBodyPart.Head); _stun.TryStun(uid, TimeSpan.FromSeconds(2), true); _audioSystem.PlayPredicted(_bonkSound, uid, obj.Value); return false; diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs index c2ec23e1194..97f1d694965 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs @@ -140,7 +140,7 @@ private void OnTryChangePartDamage(Entity ent, ref TryChangePartD else if (args.Origin.HasValue && _queryTargeting.TryComp(args.Origin.Value, out var targeter)) { targetPart = targeter.Target; - // If the target is Torso then have a 33% chance to hit another part + // If the target is Torso then have a 33% chance to also hit another part if (targetPart.Value == TargetBodyPart.Torso) { var additionalPart = GetRandomPartSpread(_random, 10); @@ -259,12 +259,10 @@ private void OnDamageChanged(Entity partEnt, ref DamageChange /// /// Gets the random body part rolling a number between 1 and 9, and returns /// Torso if the result is 9 or more. The higher torsoWeight is, the higher chance to return it. - /// By default, the chance to return Torso is 50%. /// private static TargetBodyPart GetRandomPartSpread(IRobustRandom random, ushort torsoWeight = 9) { const int targetPartsAmount = 9; - // 5 = amount of target parts except Torso return random.Next(1, targetPartsAmount + torsoWeight) switch { 1 => TargetBodyPart.Head, diff --git a/Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs b/Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs index 602433f3653..d6fbe90bd0b 100644 --- a/Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs +++ b/Content.Shared/Backmen/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs @@ -10,7 +10,7 @@ public sealed partial class SurgeryDamageChangeEffectComponent : Component public DamageSpecifier Damage = default!; [DataField] - public float SleepModifier = 0.5f; + public float SleepModifier = 1.5f; [DataField] public bool IsConsumable; diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs index cd7131e36b4..594da55028a 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs @@ -273,14 +273,14 @@ private void OnTendWoundsStep(Entity ent, ref // Right now the bonus is based off the body's total damage, maybe we could make it based off each part in the future. var bonus = ent.Comp.HealMultiplier * damageable.DamagePerGroup[ent.Comp.MainGroup]; if (_mobState.IsDead(args.Body)) - bonus *= 0.2; + bonus *= 1.2; var adjustedDamage = new DamageSpecifier(ent.Comp.Damage); foreach (var type in group) adjustedDamage.DamageDict[type] -= bonus; - var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 0.5f); + var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 1.5f); RaiseLocalEvent(args.Body, ref ev); } diff --git a/Content.Shared/Backmen/Targeting/TargetBodyPart.cs b/Content.Shared/Backmen/Targeting/TargetBodyPart.cs index 68162d892c0..b00306d95a1 100644 --- a/Content.Shared/Backmen/Targeting/TargetBodyPart.cs +++ b/Content.Shared/Backmen/Targeting/TargetBodyPart.cs @@ -22,9 +22,20 @@ public enum TargetBodyPart : ushort RightLeg = 1 << 9, RightFoot = 1 << 10, + LeftFullArm = LeftArm | LeftHand, + LeftFullLeg = LeftLeg | LeftFoot, + RightFullArm = RightArm | RightHand, + RightFullLeg = RightLeg | RightFoot, + Hands = LeftHand | RightHand, Arms = LeftArm | RightArm, Legs = LeftLeg | RightLeg, Feet = LeftFoot | RightFoot, + + FullArms = Arms | Hands, + FullLegs = Feet | Legs, + + BodyMiddle = Torso | Groin | FullArms, + All = Head | Torso | Groin | LeftArm | LeftHand | RightArm | RightHand | LeftLeg | LeftFoot | RightLeg | RightFoot, } diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index 179e0e6449e..df1c790e89f 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -78,7 +78,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent /// Shitmed Change: How long it takes to run another self heal tick on the body part. /// [DataField] - public float HealingTime = 30; + public float HealingTime = 10; /// /// Shitmed Change: How long it has been since the last self heal tick on the body part. @@ -89,7 +89,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent /// Shitmed Change: How much health to heal on the body part per tick. /// [DataField] - public float SelfHealingAmount = 5; + public float SelfHealingAmount = 0.15f; /// /// Shitmed Change: The name of the container for this body part. Used in insertion surgeries. diff --git a/Content.Shared/Chat/SharedSuicideSystem.cs b/Content.Shared/Chat/SharedSuicideSystem.cs index d341ea89a8f..2906147081e 100644 --- a/Content.Shared/Chat/SharedSuicideSystem.cs +++ b/Content.Shared/Chat/SharedSuicideSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Mobs.Components; using Robust.Shared.Prototypes; using System.Linq; +using Content.Shared.Backmen.Targeting; namespace Content.Shared.Chat; @@ -38,7 +39,7 @@ public void ApplyLethalDamage(Entity target, DamageSpecifie appliedDamageSpecifier.DamageDict[key] = Math.Ceiling((double) (value * lethalAmountOfDamage / totalDamage)); } - _damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target); + _damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target, targetPart: TargetBodyPart.Head); // backmen } /// @@ -62,6 +63,6 @@ public void ApplyLethalDamage(Entity target, ProtoId(args.Climber, out var physics) && physics.Mass <= component.MassLimit) return; - _damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber); + _damageableSystem.TryChangeDamage(args.Climber, component.ClimberDamage, origin: args.Climber, targetPart: TargetBodyPart.FullLegs); // backmen: surgery _damageableSystem.TryChangeDamage(uid, component.TableDamage, origin: args.Climber); _stunSystem.TryParalyze(args.Climber, TimeSpan.FromSeconds(component.StunTime), true); diff --git a/Content.Shared/Clumsy/ClumsySystem.cs b/Content.Shared/Clumsy/ClumsySystem.cs index e034458197f..14a0f1864a8 100644 --- a/Content.Shared/Clumsy/ClumsySystem.cs +++ b/Content.Shared/Clumsy/ClumsySystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Backmen.Targeting; using Content.Shared.CCVar; using Content.Shared.Chemistry.Hypospray.Events; using Content.Shared.Climbing.Components; @@ -137,7 +138,7 @@ public void HitHeadClumsy(Entity target, EntityUid table) { stunTime = bonkComp.BonkTime; if (bonkComp.BonkDamage != null) - _damageable.TryChangeDamage(target, bonkComp.BonkDamage, true); + _damageable.TryChangeDamage(target, bonkComp.BonkDamage, true, targetPart: TargetBodyPart.Head); } _stun.TryParalyze(target, stunTime, true); diff --git a/Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs b/Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs index 29de43fba4a..c511a0cab2e 100644 --- a/Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs +++ b/Content.Shared/Damage/Systems/DamageOnAttackedSystem.cs @@ -73,7 +73,7 @@ private void OnAttacked(Entity entity, ref AttackedEv } } - totalDamage = _damageableSystem.TryChangeDamage(args.User, totalDamage, entity.Comp.IgnoreResistances, origin: entity); + totalDamage = _damageableSystem.TryChangeDamage(args.User, totalDamage, entity.Comp.IgnoreResistances, origin: entity, canEvade: true); if (totalDamage != null && totalDamage.AnyPositive()) { diff --git a/Content.Shared/Damage/Systems/DamageOnInteractSystem.cs b/Content.Shared/Damage/Systems/DamageOnInteractSystem.cs index 1bbc2d8080b..3f7245f0c35 100644 --- a/Content.Shared/Damage/Systems/DamageOnInteractSystem.cs +++ b/Content.Shared/Damage/Systems/DamageOnInteractSystem.cs @@ -68,8 +68,8 @@ private void OnHandInteract(Entity entity, ref Intera { targetPart = hands.ActiveHand.Location switch { - HandLocation.Left => TargetBodyPart.LeftArm, - HandLocation.Right => TargetBodyPart.RightArm, + HandLocation.Left => TargetBodyPart.LeftFullArm, + HandLocation.Right => TargetBodyPart.RightFullArm, _ => null }; } diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 69905d1bd6b..136f2663a3a 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.Administration.Logs; +using Content.Shared.Backmen.Targeting; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Doors.Components; @@ -542,7 +543,7 @@ public void Crush(EntityUid uid, DoorComponent? door = null, PhysicsComponent? p { door.CurrentlyCrushing.Add(entity); if (door.CrushDamage != null) - _damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid); + _damageableSystem.TryChangeDamage(entity, door.CrushDamage, origin: uid, targetPart: TargetBodyPart.BodyMiddle); // backmen: surgery _stunSystem.TryParalyze(entity, stunTime, true); } diff --git a/Resources/Prototypes/Body/Parts/base.yml b/Resources/Prototypes/Body/Parts/base.yml index 57f239b891a..7505813574e 100644 --- a/Resources/Prototypes/Body/Parts/base.yml +++ b/Resources/Prototypes/Body/Parts/base.yml @@ -30,13 +30,13 @@ - trigger: !type:DamageTypeTrigger damageType: Blunt - damage: 75 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: !type:DamageTypeTrigger damageType: Slash - damage: 100 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: diff --git a/Resources/Prototypes/Body/Parts/skeleton.yml b/Resources/Prototypes/Body/Parts/skeleton.yml index 849d84b8a18..058ee29db1d 100644 --- a/Resources/Prototypes/Body/Parts/skeleton.yml +++ b/Resources/Prototypes/Body/Parts/skeleton.yml @@ -23,13 +23,13 @@ - trigger: !type:DamageTypeTrigger damageType: Blunt - damage: 75 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: !type:DamageTypeTrigger damageType: Slash - damage: 100 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: diff --git a/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml b/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml index a7e915cb2ec..65f0bf3fedb 100644 --- a/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml +++ b/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml @@ -28,13 +28,13 @@ - trigger: !type:DamageTypeTrigger damageType: Blunt - damage: 110 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: !type:DamageTypeTrigger damageType: Slash - damage: 150 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: diff --git a/Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml b/Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml index f1792b46530..a87aca23e4f 100644 --- a/Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml +++ b/Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml @@ -29,13 +29,13 @@ - trigger: !type:DamageTypeTrigger damageType: Blunt - damage: 75 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: !type:DamageTypeTrigger damageType: Slash - damage: 100 + damage: 120 behaviors: - !type:GibPartBehavior { } - trigger: From c6951ff43b78535e02e4ed8bd403d9d464797607 Mon Sep 17 00:00:00 2001 From: bkm CL Date: Sat, 7 Dec 2024 00:20:51 +0300 Subject: [PATCH 4/5] Automatic changelog update --- Resources/Changelog/ChangelogBkm.yml | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Resources/Changelog/ChangelogBkm.yml b/Resources/Changelog/ChangelogBkm.yml index 0b04805df51..faff896dde5 100644 --- a/Resources/Changelog/ChangelogBkm.yml +++ b/Resources/Changelog/ChangelogBkm.yml @@ -771,3 +771,33 @@ id: 49 time: '2024-12-02T11:24:28.0000000+00:00' url: https://github.com/Rxup/space-station-14/pull/972 +- author: Rouden + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043E\u043F\u0435\u0440\u0430\u0446\ + \u0438\u044F \u043F\u043E \u043B\u0435\u0447\u0435\u043D\u0438\u044E \u0440\u0430\ + \u043D \u0433\u043E\u0440\u0430\u0437\u0434\u043E \u0431\u043E\u043B\u0435\u0435\ + \ \u044D\u0444\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u0430, \u0435\u0441\ + \u043B\u0438 \u0443 \u043F\u0430\u0446\u0438\u0435\u043D\u0442\u0430 \u043C\u043D\ + \u043E\u0433\u043E \u043E\u0431\u0449\u0435\u0433\u043E \u0443\u0440\u043E\u043D\ + \u0430." + type: Tweak + - message: "\u041F\u0430\u0441\u0441\u0438\u0432\u043D\u043E\u0435 \u043B\u0435\u0447\ + \u0435\u043D\u0438\u0435 \u0447\u0430\u0441\u0442\u0435\u0439 \u0442\u0435\u043B\ + \u0430 \u0441\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C \u0442\u0435\ + \u043F\u0435\u0440\u044C \u0433\u043E\u0440\u0430\u0437\u0434\u043E \u043C\u0435\ + \u043D\u044C\u0448\u0435." + type: Tweak + - message: "\u0427\u0430\u0441\u0442\u0438 \u0442\u0435\u043B \u0442\u0435\u043F\ + \u0435\u0440\u044C \u0441\u043B\u043E\u0436\u043D\u0435\u0435 \u043F\u043E\u043B\ + \u043D\u043E\u0441\u0442\u044C\u044E \u0443\u043D\u0438\u0447\u0442\u043E\u0436\ + \u0438\u0442\u044C." + type: Tweak + - message: "\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0434\u0435\u0439\ + \u0441\u0442\u0432\u0438\u044F \u0442\u0435\u043F\u0435\u0440\u044C \u043D\u0430\ + \u043D\u043E\u0441\u044F\u0442 \u0443\u0440\u043E\u043D \u043F\u043E \u043A\u043E\ + \u0440\u0440\u0435\u043A\u0442\u043D\u044B\u043C \u0447\u0430\u0441\u0442\u044F\ + \u043C \u0442\u0435\u043B\u0430." + type: Fix + id: 50 + time: '2024-12-06T21:10:44.0000000+00:00' + url: https://github.com/Rxup/space-station-14/pull/941 From 189d4a1476f1852b03d20179b6b2922fd3461f75 Mon Sep 17 00:00:00 2001 From: Rouden <149893554+Roudenn@users.noreply.github.com> Date: Sat, 7 Dec 2024 04:26:15 +0300 Subject: [PATCH 5/5] [Port] Surgery Fixes (#965) * Major Shitmed Bugfixes (#1003) * Minor Shitmed Bugfixes (#971) * full fucking send * ope forgot to remove the EE scripts * fix test * fix shitcode fail * DELTA THAT VALUE IS NULLABLE * whoopsie daysie * fixed??? * chat is this real * bugfixes * more bugfixes * goobmed * fix * delete goob things * Update throwing_stars.yml * Update SharedBodySystem.Body.cs --------- Co-authored-by: gluesniffler <159397573+gluesniffler@users.noreply.github.com> --- .../Inventory/ClientInventorySystem.cs | 10 -- .../Screens/DefaultGameScreen.xaml.cs | 8 +- .../Systems/Alerts/Widgets/AlertsUI.xaml | 2 +- .../Systems/Alerts/Widgets/AlertsUI.xaml.cs | 1 + .../Backmen/Surgery/SurgerySystem.cs | 46 ++++--- .../Body/Commands/AddHandCommand.cs | 5 +- .../Body/Commands/AttachBodyPartCommand.cs | 9 +- .../Body/BodyPartAppearanceComponent.cs | 3 - .../Body/SharedBodySystem.PartAppearance.cs | 9 +- .../Body/SharedBodySystem.Targeting.cs | 14 +-- .../Subsystems/GenerateChildPartSystem.cs | 4 +- .../Backmen/Surgery/SanitizedComponent.cs | 10 ++ .../Surgery/SharedSurgerySystem.Steps.cs | 13 +- Content.Shared/Backmen/Targeting/Events.cs | 10 -- Content.Shared/Body/Part/BodyPartComponent.cs | 10 +- .../Body/Systems/SharedBodySystem.Body.cs | 27 ++++- .../Body/Systems/SharedBodySystem.Organs.cs | 3 +- .../Body/Systems/SharedBodySystem.Parts.cs | 112 ++++++++++++------ .../Inventory/InventorySystem.Equip.cs | 1 - .../Inventory/InventorySystem.Slots.cs | 27 +++++ .../_Goobstation/research/technologies.ftl | 2 + .../en-US/_Shitmed/inventory/slot-popup.ftl | 1 + .../{ => _Shitmed}/surgery/surgery-popup.ftl | 0 .../en-US/_Shitmed/surgery/surgery-tools.ftl | 10 ++ .../{ => _Shitmed}/surgery/surgery-ui.ftl | 2 + .../_Shitmed/technologies/technologies.ftl | 3 + .../Locale/en-US/research/technologies.ftl | 5 - Resources/Prototypes/Body/Organs/arachnid.yml | 2 + Resources/Prototypes/Body/Organs/human.yml | 2 + Resources/Prototypes/Body/Parts/animal.yml | 3 + Resources/Prototypes/Body/Parts/silicon.yml | 10 ++ .../Catalog/Fills/Backpacks/duffelbag.yml | 2 +- .../Catalog/Fills/Crates/medical.yml | 2 +- .../Entities/Mobs/Cyborgs/borg_chassis.yml | 1 + .../Prototypes/Entities/Objects/Misc/pen.yml | 14 +-- .../Weapons/Throwable/throwing_stars.yml | 8 +- .../Prototypes/Recipes/Lathes/medical.yml | 52 -------- .../Prototypes/Recipes/Lathes/robotics.yml | 84 +------------ .../Prototypes/Recipes/Lathes/security.yml | 14 --- .../Prototypes/Research/civilianservices.yml | 37 ------ .../_Backmen/Body/Prototypes/cybernetic.yml | 4 +- .../_Backmen/Body/Prototypes/generic.yml | 24 ++++ .../_Backmen/Recipes/Lathes/robotics.yml | 80 +++++++++++++ .../_Backmen/Recipes/Lathes/security.yml | 12 ++ .../_Backmen/Recipes/Lathes/surgery.yml | 52 +++++++- .../_Backmen/Research/civilianservices.yml | 52 ++++++++ 46 files changed, 484 insertions(+), 318 deletions(-) create mode 100644 Content.Shared/Backmen/Surgery/SanitizedComponent.cs create mode 100644 Resources/Locale/en-US/_Goobstation/research/technologies.ftl create mode 100644 Resources/Locale/en-US/_Shitmed/inventory/slot-popup.ftl rename Resources/Locale/en-US/{ => _Shitmed}/surgery/surgery-popup.ftl (100%) create mode 100644 Resources/Locale/en-US/_Shitmed/surgery/surgery-tools.ftl rename Resources/Locale/en-US/{ => _Shitmed}/surgery/surgery-ui.ftl (87%) create mode 100644 Resources/Locale/en-US/_Shitmed/technologies/technologies.ftl diff --git a/Content.Client/Inventory/ClientInventorySystem.cs b/Content.Client/Inventory/ClientInventorySystem.cs index bfe0098b23a..6c421b1d66c 100644 --- a/Content.Client/Inventory/ClientInventorySystem.cs +++ b/Content.Client/Inventory/ClientInventorySystem.cs @@ -40,7 +40,6 @@ public override void Initialize() SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); - SubscribeLocalEvent(OnRefreshInventorySlots); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent((_, comp, args) => @@ -182,15 +181,6 @@ public void UpdateSlot(EntityUid owner, InventorySlotsComponent component, strin EntitySlotUpdate?.Invoke(newData); } - public void OnRefreshInventorySlots(EntityUid owner, InventorySlotsComponent component, RefreshInventorySlotsEvent args) - { - if (!component.SlotData.TryGetValue(args.SlotName, out var slotData) - || _playerManager.LocalEntity != owner) - return; - - OnSlotRemoved?.Invoke(slotData); - } - public bool TryAddSlotDef(EntityUid owner, InventorySlotsComponent component, SlotDefinition newSlotDef) { SlotData newSlotData = newSlotDef; //convert to slotData diff --git a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs index f960c897294..9e5b71230ad 100644 --- a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs @@ -26,8 +26,8 @@ public DefaultGameScreen() Chat.OnResized += ChatOnResized; Chat.OnChatResizeFinish += ChatOnResizeFinish; - MainViewport.OnResized += ResizeActionContainer; + MainViewport.OnResized += ResizeAlertsContainer; Inventory.OnResized += ResizeActionContainer; } @@ -37,6 +37,12 @@ private void ResizeActionContainer() Actions.ActionsContainer.MaxGridHeight = MainViewport.Size.Y - indent; } + private void ResizeAlertsContainer() + { + float indent = Chat.Size.Y + Targeting.Size.Y + 120; + Alerts.AlertContainer.MaxGridHeight = Math.Max(MainViewport.Size.Y - indent, 1); + } + private void ChatOnResizeFinish(Vector2 _) { var marginBottom = Chat.GetValue(MarginBottomProperty); diff --git a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml index 3b7e6d365ea..213614405db 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml +++ b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml @@ -4,7 +4,7 @@ MinSize="64 64"> - + diff --git a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs index d6a79a81c46..636fc8572fd 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs +++ b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs @@ -20,6 +20,7 @@ public sealed partial class AlertsUI : UIWidget public AlertsUI() { RobustXamlLoader.Load(this); + LayoutContainer.SetGrowHorizontal(this, LayoutContainer.GrowDirection.Begin); } public void SyncControls(AlertsSystem alertsSystem, diff --git a/Content.Server/Backmen/Surgery/SurgerySystem.cs b/Content.Server/Backmen/Surgery/SurgerySystem.cs index 1912591c574..96aa90f718d 100644 --- a/Content.Server/Backmen/Surgery/SurgerySystem.cs +++ b/Content.Server/Backmen/Surgery/SurgerySystem.cs @@ -21,6 +21,7 @@ using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Bed.Sleep; using Content.Shared.Medical.Surgery; +using Content.Shared.Verbs; namespace Content.Server.Backmen.Surgery; @@ -42,7 +43,7 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnToolAfterInteract); + SubscribeLocalEvent>(OnUtilityVerb); SubscribeLocalEvent(OnSurgeryStepDamage); // You might be wondering "why aren't we using StepEvent for these two?" reason being that StepEvent fires off regardless of success on the previous functions // so this would heal entities even if you had a used or incorrect organ. @@ -101,30 +102,41 @@ private void SetDamage(EntityUid body, targetPart: _body.GetTargetBodyPart(partComp)); } - private void OnToolAfterInteract(Entity ent, ref AfterInteractEvent args) + private void AttemptStartSurgery(Entity ent, EntityUid user, EntityUid target) { - var user = args.User; - if (args.Handled - || !args.CanReach - || args.Target == null - || !HasComp(args.Target) - || !TryComp(args.User, out var surgery) - || !surgery.CanOperate - || !IsLyingDown(args.Target.Value, args.User)) - { + if (!IsLyingDown(target, user)) return; - } - if (user == args.Target && !_config.GetCVar(Shared.Backmen.CCVar.CCVars.CanOperateOnSelf)) + if (user == target && !_config.GetCVar(Shared.Backmen.CCVar.CCVars.CanOperateOnSelf)) { _popup.PopupEntity(Loc.GetString("surgery-error-self-surgery"), user, user); return; } - args.Handled = true; - _ui.OpenUi(args.Target.Value, SurgeryUIKey.Key, user); - Log.Debug("UI opened"); - RefreshUI(args.Target.Value); + _ui.OpenUi(target, SurgeryUIKey.Key, user); + RefreshUI(target); + } + + private void OnUtilityVerb(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanInteract + || !args.CanAccess + || !HasComp(args.Target)) + return; + + var user = args.User; + var target = args.Target; + + var verb = new UtilityVerb() + { + Act = () => AttemptStartSurgery(ent, user, target), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Specific/Medical/Surgery/scalpel.rsi/"), "scalpel"), + Text = Loc.GetString("surgery-verb-text"), + Message = Loc.GetString("surgery-verb-message"), + DoContactInteraction = true + }; + + args.Verbs.Add(verb); } private void OnSurgeryStepDamage(Entity ent, ref SurgeryStepDamageEvent args) => diff --git a/Content.Server/Body/Commands/AddHandCommand.cs b/Content.Server/Body/Commands/AddHandCommand.cs index 3e006c539c7..eba8a7e5172 100644 --- a/Content.Server/Body/Commands/AddHandCommand.cs +++ b/Content.Server/Body/Commands/AddHandCommand.cs @@ -133,7 +133,10 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) if (attachAt == default) attachAt = bodySystem.GetBodyChildren(entity, body).First(); - var slotId = part.GetHashCode().ToString(); + // Shitmed Change Start + var slotId = $"{part.Symmetry.ToString().ToLower()} {part.GetHashCode().ToString()}"; + part.SlotId = part.GetHashCode().ToString(); + // Shitmed Change End if (!bodySystem.TryCreatePartSlotAndAttach(attachAt.Id, slotId, hand, BodyPartType.Hand, attachAt.Component, part)) { diff --git a/Content.Server/Body/Commands/AttachBodyPartCommand.cs b/Content.Server/Body/Commands/AttachBodyPartCommand.cs index 82f71619370..db8ad3c7db5 100644 --- a/Content.Server/Body/Commands/AttachBodyPartCommand.cs +++ b/Content.Server/Body/Commands/AttachBodyPartCommand.cs @@ -98,8 +98,15 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) return; } - var slotId = $"AttachBodyPartVerb-{partUid}"; + // Shitmed Change Start + var slotId = ""; + if (part.Symmetry != BodyPartSymmetry.None) + slotId = $"{part.Symmetry.ToString().ToLower()} {part.GetHashCode().ToString()}"; + else + slotId = $"{part.GetHashCode().ToString()}"; + part.SlotId = part.GetHashCode().ToString(); + // Shitmed Change End // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract if (body.RootContainer.ContainedEntity != null) { diff --git a/Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs b/Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs index 31165801f38..0b440db3a41 100644 --- a/Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs +++ b/Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs @@ -38,7 +38,4 @@ public sealed partial class BodyPartAppearanceComponent : Component /// [DataField, AutoNetworkedField] public Color? EyeColor { get; set; } - - [DataField, AutoNetworkedField] - public EntityUid? OriginalBody { get; set; } } diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs index e2fa22118a9..a917aaa8ecb 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs @@ -32,19 +32,20 @@ private void OnPartAppearanceStartup(EntityUid uid, BodyPartAppearanceComponent return; - if (part.OriginalBody == null - || TerminatingOrDeleted(part.OriginalBody.Value) - || !TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance)) + if (part.BaseLayerId != null) { component.ID = part.BaseLayerId; component.Type = relevantLayer; return; } + if (part.Body is not { Valid: true } body + || !TryComp(body, out HumanoidAppearanceComponent? bodyAppearance)) + return; + var customLayers = bodyAppearance.CustomBaseLayers; var spriteLayers = bodyAppearance.BaseLayers; component.Type = relevantLayer; - component.OriginalBody = part.OriginalBody.Value; part.Species = bodyAppearance.Species; diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs index 97f1d694965..cb53658076f 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs @@ -19,6 +19,7 @@ using Content.Shared.Backmen.Surgery.Steps.Parts; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Inventory; // ReSharper disable once CheckNamespace namespace Content.Shared.Body.Systems; @@ -181,23 +182,20 @@ private void OnBodyDamageModify(Entity bodyEnt, ref DamageModifyE if (args.TargetPart != null) { var (targetType, _) = ConvertTargetBodyPart(args.TargetPart.Value); - args.Damage = args.Damage * GetPartDamageModifier(targetType); + args.Damage *= GetPartDamageModifier(targetType); } } private void OnPartDamageModify(Entity partEnt, ref DamageModifyEvent args) { if (partEnt.Comp.Body != null - && TryComp(partEnt.Comp.Body.Value, out DamageableComponent? damageable) - && damageable.DamageModifierSetId != null - && _prototypeManager.TryIndex(damageable.DamageModifierSetId, out var modifierSet)) - // TODO: We need to add a check to see if the given armor covers this part to cancel or not. - args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modifierSet); + && TryComp(partEnt.Comp.Body.Value, out InventoryComponent? inventory)) + _inventory.RelayEvent((partEnt.Comp.Body.Value, inventory), ref args); if (_prototypeManager.TryIndex("PartDamage", out var partModifierSet)) args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, partModifierSet); - args.Damage = args.Damage * GetPartDamageModifier(partEnt.Comp.PartType); + args.Damage *= GetPartDamageModifier(partEnt.Comp.PartType); } private bool TryChangePartDamage(EntityUid entity, @@ -298,7 +296,7 @@ private static TargetBodyPart GetRandomPartSpread(IRobustRandom random, ushort t /// This should be called after body part damage was changed. /// - protected void CheckBodyPart( + public void CheckBodyPart( Entity partEnt, TargetBodyPart? targetPart, bool severed, diff --git a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs index c0ddc5692cf..d2f691e90d7 100644 --- a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs +++ b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs @@ -50,8 +50,6 @@ private void CreatePart(EntityUid uid, GenerateChildPartComponent component) component.Active = true; Dirty(childPart, childPartComp); } - - _bodySystem.ChangeSlotState((uid, partComp), false); } // Still unusued, gotta figure out what I want to do with this function outside of fuckery with mantis blades. @@ -60,7 +58,7 @@ private void DeletePart(EntityUid uid, GenerateChildPartComponent component) if (!TryComp(uid, out BodyPartComponent? partComp)) return; - _bodySystem.ChangeSlotState((uid, partComp), true); + _bodySystem.DropSlotContents((uid, partComp)); var ev = new BodyPartDroppedEvent((uid, partComp)); RaiseLocalEvent(uid, ref ev); QueueDel(uid); diff --git a/Content.Shared/Backmen/Surgery/SanitizedComponent.cs b/Content.Shared/Backmen/Surgery/SanitizedComponent.cs new file mode 100644 index 00000000000..5956313bfd6 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/SanitizedComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Backmen.Surgery; + +/// +/// Prevents the entity from causing toxin damage to entities it does surgery on. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SanitizedComponent : Component { } diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs index 594da55028a..027e71e97bd 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs @@ -15,6 +15,7 @@ using Content.Shared.Popups; using Robust.Shared.Prototypes; using System.Linq; +using Content.Shared.Backmen.Surgery; using Content.Shared.Backmen.Mood; using Content.Shared.Backmen.Surgery.Body.Events; using Content.Shared.Backmen.Surgery.Body.Organs; @@ -23,7 +24,6 @@ using Content.Shared.Backmen.Surgery.Steps.Parts; using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Containers.ItemSlots; -using Content.Shared.Medical.Surgery; using AmputateAttemptEvent = Content.Shared.Body.Events.AmputateAttemptEvent; namespace Content.Shared.Backmen.Surgery; @@ -127,11 +127,14 @@ private void OnToolStep(Entity ent, ref SurgeryStepEvent a RaiseLocalEvent(args.Body, new MoodEffectEvent("SurgeryPain")); if (!_inventory.TryGetSlotEntity(args.User, "gloves", out var _) - || !_inventory.TryGetSlotEntity(args.User, "mask", out var _)) + || !_inventory.TryGetSlotEntity(args.User, "mask", out var _)) { - var sepsis = new DamageSpecifier(_prototypes.Index("Poison"), 5); - var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, sepsis, 0.5f); - RaiseLocalEvent(args.Body, ref ev); + if (!HasComp(args.User)) + { + var sepsis = new DamageSpecifier(_prototypes.Index("Poison"), 5); + var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, sepsis, 0.5f); + RaiseLocalEvent(args.Body, ref ev); + } } } diff --git a/Content.Shared/Backmen/Targeting/Events.cs b/Content.Shared/Backmen/Targeting/Events.cs index dc4ad54619b..fd531964f2f 100644 --- a/Content.Shared/Backmen/Targeting/Events.cs +++ b/Content.Shared/Backmen/Targeting/Events.cs @@ -25,13 +25,3 @@ public TargetIntegrityChangeEvent(NetEntity uid, bool refreshUi = true) RefreshUi = refreshUi; } } - -public sealed class RefreshInventorySlotsEvent : EntityEventArgs -{ - public string SlotName { get; } - - public RefreshInventorySlotsEvent(string slotName) - { - SlotName = slotName; - } -} diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index df1c790e89f..6e2d0ee27a2 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -12,7 +12,7 @@ namespace Content.Shared.Body.Part; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedBodySystem))] +//[Access(typeof(SharedBodySystem))] public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent { // Need to set this on container changes as it may be several transform parents up the hierarchy. @@ -22,9 +22,6 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField, AutoNetworkedField] public EntityUid? Body; - [DataField, AutoNetworkedField] - public EntityUid? OriginalBody; - [DataField, AutoNetworkedField] public BodyPartSlot? ParentSlot; @@ -38,6 +35,9 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField, AlwaysPushInheritance] public string ToolName { get; set; } = "A body part"; + [DataField, AlwaysPushInheritance] + public string SlotId { get; set; } = ""; + [DataField, AutoNetworkedField] public bool? Used { get; set; } = null; @@ -153,7 +153,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent public bool IsVital; [DataField, AutoNetworkedField] - public BodyPartSymmetry Symmetry = BodyPartSymmetry.None; + public BodyPartSymmetry Symmetry { get; set; } = BodyPartSymmetry.None; /// /// When attached, the part will ensure these components on the entity, and delete them on removal. diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 7cdc088160b..88354b33463 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -15,6 +15,7 @@ using Content.Shared.Humanoid; using Content.Shared.Humanoid.Events; using Content.Shared.Inventory; +using Content.Shared.Inventory.Events; using Content.Shared.Rejuvenate; using Content.Shared.Silicons.Borgs.Components; using Content.Shared.Standing; @@ -24,6 +25,7 @@ using Robust.Shared.Map; using Robust.Shared.Utility; using Robust.Shared.Timing; + namespace Content.Shared.Body.Systems; public partial class SharedBodySystem @@ -54,6 +56,7 @@ private void InitializeBody() SubscribeLocalEvent(OnBodyCanDrag); SubscribeLocalEvent(OnStandAttempt); SubscribeLocalEvent(OnProfileLoadFinished); + SubscribeLocalEvent(OnBeingEquippedAttempt); } private void OnBodyInserted(Entity ent, ref EntInsertedIntoContainerMessage args) @@ -127,7 +130,6 @@ private void MapInitBody(EntityUid bodyEntity, BodyPrototype prototype) var rootPartUid = SpawnInContainerOrDrop(protoRoot.Part, bodyEntity, BodyRootContainerId); var rootPart = Comp(rootPartUid); rootPart.Body = bodyEntity; - rootPart.OriginalBody = bodyEntity; Dirty(rootPartUid, rootPart); // Setup the rest of the body entities. SetupOrgans((rootPartUid, rootPart), protoRoot.Organs); @@ -187,7 +189,6 @@ private void MapInitParts(EntityUid rootPartId, BodyPartComponent rootPart, Body var childPartComponent = Comp(childPart); var partSlot = CreatePartSlot(parentEntity, connection, childPartComponent.PartType, parentPartComponent); childPartComponent.ParentSlot = partSlot; - childPartComponent.OriginalBody = rootPart.Body; Dirty(childPart, childPartComponent); var cont = Containers.GetContainer(parentEntity, GetPartSlotContainerId(connection)); @@ -394,8 +395,7 @@ public virtual HashSet GibPart( if (IsPartRoot(bodyEnt, partId, part: part) || !part.CanSever) return gibs; - ChangeSlotState((partId, part), true); - + DropSlotContents((partId, part)); RemovePartChildren((partId, part), bodyEnt); foreach (var organ in GetPartOrgans(partId, part)) { @@ -433,7 +433,7 @@ public virtual bool BurnPart(EntityUid partId, if (IsPartRoot(bodyEnt, partId, part: part)) return false; - ChangeSlotState((partId, part), true); + DropSlotContents((partId, part)); RemovePartChildren((partId, part), bodyEnt); QueueDel(partId); return true; @@ -451,4 +451,21 @@ private void OnProfileLoadFinished(EntityUid uid, BodyComponent component, Profi foreach (var part in GetBodyChildren(uid, component)) EnsureComp(part.Id); } + + private void OnBeingEquippedAttempt(Entity ent, ref IsEquippingAttemptEvent args) + { + TryGetPartFromSlotContainer(args.Slot, out var bodyPart); + if (bodyPart is not null) + { + if (!GetBodyChildrenOfType(args.EquipTarget, bodyPart.Value).Any()) + { + if (_timing.IsFirstTimePredicted) + _popup.PopupEntity(Loc.GetString("equip-part-missing-error", + ("target", args.EquipTarget), ("part", bodyPart.Value.ToString())), args.Equipee, args.Equipee); + args.Cancel(); + } + } + } + + // Shitmed Change End } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index e44f5e81911..f2c4dac6779 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -72,7 +72,8 @@ private void RemoveOrgan(Entity organEnt, EntityUid parentPartUi RaiseLocalEvent(organEnt, ref removedInBodyEv); } - if (TryComp(parentPartUid, out DamageableComponent? damageable) + if (parentPartUid is { Valid: true } + && TryComp(parentPartUid, out DamageableComponent? damageable) && damageable.TotalDamage > 200) TrySetOrganUsed(organEnt, true, organEnt.Comp); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index 5bba1751bcc..0c18ba33c9b 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -30,10 +30,12 @@ private void InitializeParts() // TODO: This doesn't handle comp removal on child ents. // If you modify this also see the Body partial for root parts. - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnBodyPartRemove); SubscribeLocalEvent(OnBodyPartInserted); SubscribeLocalEvent(OnBodyPartRemoved); + + // Shitmed Change Start + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnBodyPartRemove); SubscribeLocalEvent(OnAmputateAttempt); SubscribeLocalEvent(OnPartEnableChanged); } @@ -85,11 +87,10 @@ private void OnPartEnableChanged(Entity partEnt, ref BodyPart } /// - /// This function handles disabling or enabling equipment slots when an entity is - /// missing all of a given part type, or they get one added to them. - /// It is called right before dropping a part, or right after adding one. + /// Shitmed Change: This function handles dropping the items in an entity's slots if they lose all of a given part. + /// Such as their hands, feet, head, etc. /// - public void ChangeSlotState(Entity partEnt, bool disable) + public void DropSlotContents(Entity partEnt) { if (partEnt.Comp.Body is not null && TryComp(partEnt.Comp.Body, out var inventory) // Prevent error for non-humanoids @@ -97,11 +98,7 @@ public void ChangeSlotState(Entity partEnt, bool disable) && TryGetPartSlotContainerName(partEnt.Comp.PartType, out var containerNames)) { foreach (var containerName in containerNames) - { - _inventorySystem.SetSlotStatus(partEnt.Comp.Body.Value, containerName, disable, inventory); - var ev = new RefreshInventorySlotsEvent(containerName); - RaiseLocalEvent(partEnt.Comp.Body.Value, ev); - } + _inventorySystem.DropSlotContents(partEnt.Comp.Body.Value, containerName, inventory); } } @@ -142,7 +139,7 @@ slot.ContainedEntity is { } childEntity && protected virtual void DropPart(Entity partEnt) { - ChangeSlotState(partEnt, true); + DropSlotContents(partEnt); // I don't know if this can cause issues, since any part that's being detached HAS to have a Body. // though I really just want the compiler to shut the fuck up. var body = partEnt.Comp.Body.GetValueOrDefault(); @@ -170,14 +167,17 @@ private void OnBodyPartInserted(Entity ent, ref EntInsertedIn if (ent.Comp.Body is null) return; - if (TryComp(insertedUid, out BodyPartComponent? part)) + if (TryComp(insertedUid, out BodyPartComponent? part) && slotId.Contains(PartSlotContainerIdPrefix + GetSlotFromBodyPart(part))) // Shitmed Change { AddPart(ent.Comp.Body.Value, (insertedUid, part), slotId); RecursiveBodyUpdate((insertedUid, part), ent.Comp.Body.Value); + CheckBodyPart((insertedUid, part), GetTargetBodyPart(part), false); // Shitmed Change } - if (TryComp(insertedUid, out OrganComponent? organ)) + if (TryComp(insertedUid, out OrganComponent? organ) && slotId.Contains(OrganSlotContainerIdPrefix + organ.SlotId)) // Shitmed Change + { AddOrgan((insertedUid, organ), ent.Comp.Body.Value, ent); + } } private void OnBodyPartRemoved(Entity ent, ref EntRemovedFromContainerMessage args) @@ -185,18 +185,33 @@ private void OnBodyPartRemoved(Entity ent, ref EntRemovedFrom // Body part removed from another body part. var removedUid = args.Entity; var slotId = args.Container.ID; - DebugTools.Assert(!TryComp(removedUid, out BodyPartComponent? b) || b.Body == ent.Comp.Body); - DebugTools.Assert(!TryComp(removedUid, out OrganComponent? o) || o.Body == ent.Comp.Body); - if (TryComp(removedUid, out BodyPartComponent? part) && part.Body is not null) + // Shitmed Change Start + if (TryComp(removedUid, out BodyPartComponent? part)) { - CheckBodyPart((removedUid, part), GetTargetBodyPart(part), true); - RemovePart(part.Body.Value, (removedUid, part), slotId); - RecursiveBodyUpdate((removedUid, part), null); + if (!slotId.Contains(PartSlotContainerIdPrefix + GetSlotFromBodyPart(part))) + return; + + DebugTools.Assert(part.Body == ent.Comp.Body); + + if (part.Body is not null) + { + CheckBodyPart((removedUid, part), GetTargetBodyPart(part), true); + RemovePart(part.Body.Value, (removedUid, part), slotId); + RecursiveBodyUpdate((removedUid, part), null); + } } if (TryComp(removedUid, out OrganComponent? organ)) + { + if (!slotId.Contains(OrganSlotContainerIdPrefix + organ.SlotId)) + return; + + DebugTools.Assert(organ.Body == ent.Comp.Body); + RemoveOrgan((removedUid, organ), ent); + } + // Shitmed Change End } private void RecursiveBodyUpdate(Entity ent, EntityUid? bodyUid) @@ -272,7 +287,6 @@ protected virtual void RemovePart( Dirty(partEnt, partEnt.Comp); // Shitmed Change Start - partEnt.Comp.OriginalBody = partEnt.Comp.Body; if (partEnt.Comp.Body is { Valid: true } body) RaiseLocalEvent(partEnt, new BodyPartComponentsModifyEvent(body, false)); partEnt.Comp.ParentSlot = null; @@ -1014,12 +1028,48 @@ private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet 0; } - public string GetSlotFromBodyPart(BodyPartComponent part) + private bool TryGetPartFromSlotContainer(string slot, out BodyPartType? partType) + { + partType = slot switch + { + "gloves" => BodyPartType.Hand, + "shoes" => BodyPartType.Foot, + "eyes" or "ears" or "head" or "mask" => BodyPartType.Head, + _ => null + }; + return partType is not null; + } + + public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) { + if (!Resolve(bodyId, ref body, logMissing: false)) + return 0; + + int count = 0; + foreach (var part in GetBodyChildren(bodyId, body)) + { + if (part.Component.PartType == partType) + count++; + } + return count; + } + + public string GetSlotFromBodyPart(BodyPartComponent? part) + { + var slotName = ""; + + if (part is null) + return slotName; + + if (part.SlotId != "") + slotName = part.SlotId; + else + slotName = part.PartType.ToString().ToLower(); + if (part.Symmetry != BodyPartSymmetry.None) - return $"{part.Symmetry.ToString().ToLower()} {part.PartType.ToString().ToLower()}"; + return $"{part.Symmetry.ToString().ToLower()} {slotName}"; else - return part.PartType.ToString().ToLower(); + return slotName; } // Shitmed Change End @@ -1092,19 +1142,5 @@ public bool TryGetBodyPartAdjacentPartsComponents( return false; } - public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) - { - if (!Resolve(bodyId, ref body, logMissing: false)) - return 0; - - int count = 0; - foreach (var part in GetBodyChildren(bodyId, body)) - { - if (part.Component.PartType == partType) - count++; - } - return count; - } - #endregion } diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 8158b8c2f62..e5a431a8135 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -43,7 +43,6 @@ private void InitializeEquip() //these events ensure that the client also gets its proper events raised when getting its containerstate updated SubscribeLocalEvent(OnEntInserted); SubscribeLocalEvent(OnEntRemoved); - SubscribeAllEvent(OnUseSlot); } diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index cea24755f49..21f99c4229f 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -340,4 +340,31 @@ public bool NextItem(out EntityUid item, [NotNullWhen(true)] out SlotDefinition? return false; } } + + // Shitmed Change Start + public void DropSlotContents(EntityUid uid, string slotName, InventoryComponent? inventory = null) + { + if (!Resolve(uid, ref inventory)) + return; + + foreach (var slot in inventory.Slots) + { + if (slot.Name != slotName) + continue; + + if (!TryGetSlotContainer(uid, slotName, out var container, out _, inventory)) + break; + + if (container.ContainedEntity is { } entityUid && TryComp(entityUid, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + _transform.AttachToGridOrMap(entityUid, transform); + _randomHelper.RandomOffset(entityUid, 0.5f); + } + + break; + } + + Dirty(uid, inventory); + } + // Shitmed Change End } diff --git a/Resources/Locale/en-US/_Goobstation/research/technologies.ftl b/Resources/Locale/en-US/_Goobstation/research/technologies.ftl new file mode 100644 index 00000000000..22240155729 --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/research/technologies.ftl @@ -0,0 +1,2 @@ +research-technology-weapon-plasma-rifle = Experimental plasma rifle +research-technology-medical-defense = Medical Control Gear \ No newline at end of file diff --git a/Resources/Locale/en-US/_Shitmed/inventory/slot-popup.ftl b/Resources/Locale/en-US/_Shitmed/inventory/slot-popup.ftl new file mode 100644 index 00000000000..d921423148c --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/inventory/slot-popup.ftl @@ -0,0 +1 @@ +equip-part-missing-error = {$target} is missing their {$part}! diff --git a/Resources/Locale/en-US/surgery/surgery-popup.ftl b/Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl similarity index 100% rename from Resources/Locale/en-US/surgery/surgery-popup.ftl rename to Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl diff --git a/Resources/Locale/en-US/_Shitmed/surgery/surgery-tools.ftl b/Resources/Locale/en-US/_Shitmed/surgery/surgery-tools.ftl new file mode 100644 index 00000000000..c1d1f93524a --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/surgery/surgery-tools.ftl @@ -0,0 +1,10 @@ +surgery-tool-turn-on = Turn it on first! +surgery-tool-reload = Reload it first! +surgery-tool-match-light = Light it first! +surgery-tool-match-replace = Get a new match! + +surgery-tool-examinable-verb-text = Surgery Tool +surgery-tool-examinable-verb-message = Examine the uses of this tool in surgeries. +surgery-tool-header = This can be used in surgeries as: +surgery-tool-unlimited = - {$tool} at [color={$color}]{$speed}x[/color] speed +surgery-tool-used = - {$tool} at [color={$color}]{$speed}x[/color] speed, [color=red]then gets used up[/color] diff --git a/Resources/Locale/en-US/surgery/surgery-ui.ftl b/Resources/Locale/en-US/_Shitmed/surgery/surgery-ui.ftl similarity index 87% rename from Resources/Locale/en-US/surgery/surgery-ui.ftl rename to Resources/Locale/en-US/_Shitmed/surgery/surgery-ui.ftl index f09c9dc102a..415395f7815 100644 --- a/Resources/Locale/en-US/surgery/surgery-ui.ftl +++ b/Resources/Locale/en-US/_Shitmed/surgery/surgery-ui.ftl @@ -1,3 +1,5 @@ +surgery-verb-text = Start surgery +surgery-verb-message = Begin surgery on this entity. surgery-ui-window-title = Surgery surgery-ui-window-require = Requires surgery-ui-window-parts = < Parts diff --git a/Resources/Locale/en-US/_Shitmed/technologies/technologies.ftl b/Resources/Locale/en-US/_Shitmed/technologies/technologies.ftl new file mode 100644 index 00000000000..d5db297ae29 --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/technologies/technologies.ftl @@ -0,0 +1,3 @@ +research-technology-advanced-treatment = Advanced Treatment +research-technology-high-end-surgery = High End Surgical Tools +research-technology-cybernetic-enhancements = Cybernetic Enhancements \ No newline at end of file diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 451ab0d0ff4..0b0970ec08f 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -71,8 +71,3 @@ research-technology-advanced-spray = Advanced Spray research-technology-bluespace-cargo-transport = Bluespace Cargo Transport research-technology-quantum-fiber-weaving = Quantum Fiber Weaving research-technology-bluespace-chemistry = Bluespace Chemistry - -## Shitmed Change -research-technology-advanced-treatment = Advanced Treatment -research-technology-high-end-surgery = High End Surgical Tools -research-technology-cybernetic-enhancements = Cybernetic Enhancements \ No newline at end of file diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 42be718e139..584c76821d6 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -150,6 +150,8 @@ description: "Filters toxins from the bloodstream." categories: [ HideSpawnMenu ] components: + - type: Organ # Shitmed + slotId: kidneys - type: Sprite layers: - state: kidney-l diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index 42226ebac8f..abce3f89cba 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -254,6 +254,8 @@ name: kidneys description: "Filters toxins from the bloodstream." components: + - type: Organ # Shitmed + slotId: kidneys - type: Sprite layers: - state: kidney-l diff --git a/Resources/Prototypes/Body/Parts/animal.yml b/Resources/Prototypes/Body/Parts/animal.yml index bc3d4b935ce..4c79f342bdb 100644 --- a/Resources/Prototypes/Body/Parts/animal.yml +++ b/Resources/Prototypes/Body/Parts/animal.yml @@ -45,6 +45,7 @@ - type: BodyPart partType: Hand symmetry: Left + slotId: hands # Shitmed - type: entity id: LegsAnimal @@ -58,6 +59,7 @@ - state: r_leg - type: BodyPart partType: Leg + slotId: legs # Shitmed - type: MovementBodyPart - type: entity @@ -72,6 +74,7 @@ - state: l_foot - type: BodyPart partType: Foot + slotId: feet # Shitmed - type: entity id: TorsoAnimal diff --git a/Resources/Prototypes/Body/Parts/silicon.yml b/Resources/Prototypes/Body/Parts/silicon.yml index ef0476126f0..577ec2bffce 100644 --- a/Resources/Prototypes/Body/Parts/silicon.yml +++ b/Resources/Prototypes/Body/Parts/silicon.yml @@ -76,6 +76,11 @@ - type: BodyPart partType: Leg symmetry: Left + toolName: "a left leg" # Shitmed Change + children: # Shitmed Change + left foot: + id: "left foot" + type: Foot - type: Sprite state: borg_l_leg - type: Icon @@ -94,6 +99,11 @@ - type: BodyPart partType: Leg symmetry: Right + toolName: "a right leg" # Shitmed Change + children: # Shitmed Change + right foot: + id: "right foot" + type: Foot - type: Sprite state: borg_r_leg - type: Icon diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 72034c9acc2..1fd3b51bb1f 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -7,7 +7,7 @@ - type: StorageFill contents: - id: Hemostat - - id: Saw + - id: SawElectric # Shitmed Change - id: Drill - id: Cautery - id: Retractor diff --git a/Resources/Prototypes/Catalog/Fills/Crates/medical.yml b/Resources/Prototypes/Catalog/Fills/Crates/medical.yml index 24edb83f4f1..5459930a130 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/medical.yml @@ -65,7 +65,7 @@ - id: Retractor - id: Cautery - id: Drill - - id: Saw + - id: SawElectric # Shitmed Change - id: Hemostat # start-backmen: surgery - id: BoneGel diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 8f8a116a4e3..a4d30386121 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -75,6 +75,7 @@ - type: SurgeryTarget - type: TTS # Corvax-TTS voice: TrainingRobot + - type: Sanitized - type: entity id: BorgChassisService diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index 6e02f4be241..45f90f9603b 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -42,13 +42,13 @@ damage: types: Piercing: 3 -# - type: Tending # Shitmed TODO: Uncomment this when surgeries arent tied to interaction events, but verbs. -# speed: 0.55 -# - type: SurgeryTool # Shitmed -# startSound: -# path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg -# endSound: -# path: /Audio/_Shitmed/Medical/Surgery/hemostat1.ogg + - type: Tending # Shitmed + speed: 0.55 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/hemostat1.ogg #TODO: I want the luxury pen to write a cool font like Merriweather in the future. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml index 9a41387cbea..46e76f961b0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml @@ -10,10 +10,10 @@ - state: icon map: ["base"] - type: Appearance - - type: HolidayVisuals - holidays: - festive: - - FestiveSeason +# - type: HolidayVisuals +# holidays: +# festive: +# - FestiveSeason - type: GenericVisualizer visuals: enum.HolidayVisuals.Holiday: diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index a7f444001f6..08250290ec7 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -215,55 +215,3 @@ materials: Steel: 100 Plastic: 100 - -# Shitmed Recipes - -- type: latheRecipe - id: MedicalCyberneticEyes - result: MedicalCyberneticEyes - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 - -- type: latheRecipe - id: EnergyScalpel - result: EnergyScalpel - completetime: 2 - materials: - Steel: 600 - Glass: 150 - Gold: 150 - -- type: latheRecipe - id: AdvancedRetractor - result: AdvancedRetractor - completetime: 2 - materials: - Steel: 600 - Glass: 150 - Silver: 150 - -- type: latheRecipe - id: EnergyCautery - result: EnergyCautery - completetime: 2 - materials: - Steel: 600 - Glass: 150 - Plasma: 150 - -- type: latheRecipe - id: OmnimedTool - result: OmnimedTool - completetime: 2 - materials: - Steel: 600 - Glass: 150 - Gold: 150 - Silver: 150 - Plasma: 150 diff --git a/Resources/Prototypes/Recipes/Lathes/robotics.yml b/Resources/Prototypes/Recipes/Lathes/robotics.yml index 12e6087f7d3..f6579096f6e 100644 --- a/Resources/Prototypes/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/Recipes/Lathes/robotics.yml @@ -196,85 +196,7 @@ id: BorgModuleHarvesting result: BorgModuleHarvesting -# Shitmed Recipes - -- type: latheRecipe - id: BorgModuleSurgery - result: BorgModuleSurgery - category: Robotics - completetime: 3 - materials: - Steel: 250 - Glass: 250 - Plastic: 250 - -- type: latheRecipe - id: BorgModuleAdvancedSurgery - result: BorgModuleAdvancedSurgery - category: Robotics - completetime: 3 - materials: - Steel: 500 - Glass: 500 - Plastic: 250 - Gold: 50 - -- type: latheRecipe - id: JawsOfLifeLeftArm - result: JawsOfLifeLeftArm - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 - -- type: latheRecipe - id: JawsOfLifeRightArm - result: JawsOfLifeRightArm - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 - -- type: latheRecipe - id: SpeedLeftLeg - result: SpeedLeftLeg - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 - - type: latheRecipe - id: SpeedRightLeg - result: SpeedRightLeg - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 - -- type: latheRecipe - id: BasicCyberneticEyes - result: BasicCyberneticEyes - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 + parent: BaseBorgModuleRecipe + id: BorgModuleClowning + result: BorgModuleClowning diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 43ba8f8be51..bc6f9218401 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -689,17 +689,3 @@ Plastic: 1000 Plasma: 500 Glass: 500 - -# Shitmed Recipes - -- type: latheRecipe - id: SecurityCyberneticEyes - result: SecurityCyberneticEyes - category: Robotics - completetime: 5 - materials: - Steel: 1000 - Glass: 500 - Plastic: 500 - Gold: 300 - Silver: 300 diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 4d7f6f27c10..22092db1669 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -129,43 +129,6 @@ - CryostasisBeaker - SyringeCryostasis -# Shitmed Change Start -- type: technology - id: AdvancedTreatment - name: research-technology-advanced-treatment - icon: - sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi - state: e-scalpel-on - discipline: CivilianServices - tier: 2 - cost: 5000 - recipeUnlocks: - - BorgModuleAdvancedTreatment - - BorgModuleDefibrillator - - EnergyScalpel - - EnergyCautery - - AdvancedRetractor - - BorgModuleAdvancedSurgery - -- type: technology - id: CyberneticEnhancements - name: research-technology-cybernetic-enhancements - icon: - sprite: _Shitmed/Mobs/Species/IPC/organs.rsi - state: eyes - discipline: CivilianServices - tier: 2 - cost: 15000 - recipeUnlocks: - - JawsOfLifeLeftArm - - JawsOfLifeRightArm - - SpeedLeftLeg - - SpeedRightLeg - - BasicCyberneticEyes - - SecurityCyberneticEyes - - MedicalCyberneticEyes -# Shitmed Change End - - type: technology id: AdvancedCleaning name: research-technology-advanced-cleaning diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml index 6e85a42b87c..c4298ed57c6 100644 --- a/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml @@ -154,6 +154,7 @@ - type: BodyPart onAdd: - type: NoSlip + - type: ProtectedFromStepTriggers - type: entity parent: RightLegCybernetic @@ -166,4 +167,5 @@ sprintSpeed: 5.625 - type: BodyPart onAdd: - - type: NoSlip \ No newline at end of file + - type: NoSlip + - type: ProtectedFromStepTriggers diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml index d01c105fd61..2f82d6cbd5d 100644 --- a/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml @@ -3,12 +3,24 @@ id: BioSynthLeftArm name: bio-synthetic left arm description: This left arm can be transplanted into any living organism and it will adapt to its recipient. + components: + - type: BodyPart + children: + left hand: + id: "left hand" + type: Hand - type: entity parent: RightArmHuman id: BioSynthRightArm name: bio-synthetic right arm description: This right arm can be transplanted into any living organism and it will adapt to its recipient. + components: + - type: BodyPart + children: + right hand: + id: "right hand" + type: Hand - type: entity parent: LeftHandHuman @@ -27,12 +39,24 @@ id: BioSynthLeftLeg name: bio-synthetic left leg description: This left leg can be transplanted into any living organism and it will adapt to its recipient. + components: + - type: BodyPart + children: + left foot: + id: "left foot" + type: Foot - type: entity parent: RightLegHuman id: BioSynthRightLeg name: bio-synthetic right leg description: This right leg can be transplanted into any living organism and it will adapt to its recipient. + components: + - type: BodyPart + children: + right foot: + id: "right foot" + type: Foot - type: entity parent: LeftFootHuman diff --git a/Resources/Prototypes/_Backmen/Recipes/Lathes/robotics.yml b/Resources/Prototypes/_Backmen/Recipes/Lathes/robotics.yml index c9db0667ef0..25efb88e60b 100644 --- a/Resources/Prototypes/_Backmen/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/_Backmen/Recipes/Lathes/robotics.yml @@ -6,3 +6,83 @@ Steel: 500 Plasma: 100 +- type: latheRecipe + id: BorgModuleSurgery + result: BorgModuleSurgery + category: Robotics + completetime: 3 + materials: + Steel: 250 + Glass: 250 + Plastic: 250 + +- type: latheRecipe + id: BorgModuleAdvancedSurgery + result: BorgModuleAdvancedSurgery + category: Robotics + completetime: 3 + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Gold: 50 + +- type: latheRecipe + id: JawsOfLifeLeftArm + result: JawsOfLifeLeftArm + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: JawsOfLifeRightArm + result: JawsOfLifeRightArm + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: SpeedLeftLeg + result: SpeedLeftLeg + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: SpeedRightLeg + result: SpeedRightLeg + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: BasicCyberneticEyes + result: BasicCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 diff --git a/Resources/Prototypes/_Backmen/Recipes/Lathes/security.yml b/Resources/Prototypes/_Backmen/Recipes/Lathes/security.yml index 1a5c2a5cf51..2e04b730461 100644 --- a/Resources/Prototypes/_Backmen/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/_Backmen/Recipes/Lathes/security.yml @@ -39,3 +39,15 @@ Plastic: 500 Gold: 250 Uranium: 50 + +- type: latheRecipe + id: SecurityCyberneticEyes + result: SecurityCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 diff --git a/Resources/Prototypes/_Backmen/Recipes/Lathes/surgery.yml b/Resources/Prototypes/_Backmen/Recipes/Lathes/surgery.yml index 3195e494ede..29549ed5051 100644 --- a/Resources/Prototypes/_Backmen/Recipes/Lathes/surgery.yml +++ b/Resources/Prototypes/_Backmen/Recipes/Lathes/surgery.yml @@ -1,11 +1,61 @@ - type: latheRecipe id: BoneGel result: BoneGel - completetime: 10 + completetime: 2 materials: Plastic: 200 Plasma: 200 +- type: latheRecipe + id: MedicalCyberneticEyes + result: MedicalCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: EnergyScalpel + result: EnergyScalpel + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Gold: 150 + +- type: latheRecipe + id: AdvancedRetractor + result: AdvancedRetractor + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Silver: 150 + +- type: latheRecipe + id: EnergyCautery + result: EnergyCautery + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Plasma: 150 + +- type: latheRecipe + id: OmnimedTool + result: OmnimedTool + completetime: 2 + materials: + Steel: 1200 + Glass: 300 + Gold: 300 + Silver: 300 + Plasma: 300 + - type: latheRecipe id: SynthHeart result: BioSynthHeart diff --git a/Resources/Prototypes/_Backmen/Research/civilianservices.yml b/Resources/Prototypes/_Backmen/Research/civilianservices.yml index c593a09f44b..d673a9f2d83 100644 --- a/Resources/Prototypes/_Backmen/Research/civilianservices.yml +++ b/Resources/Prototypes/_Backmen/Research/civilianservices.yml @@ -46,3 +46,55 @@ - ShadokinStandardTranslatorImplanter - ValyrianStandardTranslatorImplanter +# Tier 1 + +# Tier 2 + +- type: technology + id: AdvancedTreatment + name: research-technology-advanced-treatment + icon: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + state: e-scalpel-on + discipline: CivilianServices + tier: 2 + cost: 10000 + recipeUnlocks: + - BorgModuleAdvancedTreatment + - BorgModuleDefibrillator + - EnergyScalpel + - EnergyCautery + - AdvancedRetractor + - BorgModuleAdvancedSurgery + +- type: technology + id: CyberneticEnhancements + name: research-technology-cybernetic-enhancements + icon: + sprite: _Shitmed/Mobs/Species/IPC/organs.rsi + state: eyes + discipline: CivilianServices + tier: 2 + cost: 15000 + recipeUnlocks: + - JawsOfLifeLeftArm + - JawsOfLifeRightArm + - SpeedLeftLeg + - SpeedRightLeg + - BasicCyberneticEyes + - SecurityCyberneticEyes + - MedicalCyberneticEyes + +# Tier 3 + +- type: technology + id: HighEndSurgery + name: research-technology-high-end-surgery + icon: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi + state: omnimed + discipline: CivilianServices + tier: 3 + cost: 10000 + recipeUnlocks: + - OmnimedTool