From 38da68a741ff4a9708260411f8f43f2d97d46105 Mon Sep 17 00:00:00 2001
From: deltanedas <39013340+deltanedas@users.noreply.github.com>
Date: Sun, 17 Nov 2024 13:36:48 +0000
Subject: [PATCH] surgery update (animal and moth surgery) (#882)
* dont allow attaching invalid limbs
* add more surgeries for organs and limbs
* fix harpies being immune to surgery
* update organs and shit
* make a bunch of animals operatable
* malf ai
* fix slime
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
---
.../Body/Systems/SharedBodySystem.Parts.cs | 12 +++
.../SurgeryPartRemovedConditionComponent.cs | 8 +-
.../_Shitmed/Surgery/SharedSurgerySystem.cs | 6 ++
.../Prototypes/Body/Organs/Animal/animal.yml | 20 ++++
Resources/Prototypes/Body/Organs/arachnid.yml | 43 +++++++-
Resources/Prototypes/Body/Organs/diona.yml | 20 +++-
Resources/Prototypes/Body/Organs/moth.yml | 1 +
Resources/Prototypes/Body/Organs/slime.yml | 2 +
Resources/Prototypes/Body/Organs/vox.yml | 1 +
.../Prototypes/Body/Prototypes/arachnid.yml | 1 +
.../Prototypes/Body/Prototypes/diona.yml | 1 +
.../Prototypes/Body/Prototypes/dwarf.yml | 1 +
.../Body/Prototypes/gingerbread.yml | 1 +
.../Prototypes/Body/Prototypes/human.yml | 1 +
Resources/Prototypes/Body/Prototypes/moth.yml | 1 +
.../Prototypes/Body/Prototypes/primate.yml | 8 ++
.../Prototypes/Body/Prototypes/reptilian.yml | 1 +
.../Prototypes/Body/Prototypes/skeleton.yml | 1 +
.../Prototypes/Body/Prototypes/slime.yml | 1 +
Resources/Prototypes/Body/Prototypes/vox.yml | 1 +
.../DeltaV/Entities/Mobs/Species/harpy.yml | 2 +
.../Prototypes/Entities/Mobs/NPCs/animals.yml | 39 ++++++-
.../Prototypes/Entities/Mobs/NPCs/carp.yml | 5 +
.../Entities/Mobs/NPCs/regalrat.yml | 10 ++
.../Prototypes/Entities/Mobs/NPCs/slimes.yml | 5 +
.../_Goobstation/Body/Parts/animal.yml | 10 ++
.../_Shitmed/Entities/Surgery/surgeries.yml | 101 ++++++++++++++++++
.../Entities/Surgery/surgery_steps.yml | 7 ++
28 files changed, 300 insertions(+), 10 deletions(-)
create mode 100644 Resources/Prototypes/_Goobstation/Body/Parts/animal.yml
diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
index 0930ac41ae5..eed0c897728 100644
--- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
+++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
@@ -565,6 +565,18 @@ public bool CanAttachPart(
&& Containers.CanInsert(partId, container);
}
+ ///
+ /// GoobStation: Returns true if this parentId supports attaching a new part to the specified slot.
+ ///
+ public bool CanAttachToSlot(
+ EntityUid parentId,
+ string slotId,
+ BodyPartComponent? parentPart = null)
+ {
+ return Resolve(parentId, ref parentPart, logMissing: false)
+ && parentPart.Children.ContainsKey(slotId);
+ }
+
public bool AttachPartToRoot(
EntityUid bodyId,
EntityUid partId,
diff --git a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs
index f0dfc554e0e..0d0dbbfc39b 100644
--- a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs
+++ b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs
@@ -6,9 +6,15 @@ namespace Content.Shared._Shitmed.Medical.Surgery.Conditions;
[RegisterComponent, NetworkedComponent]
public sealed partial class SurgeryPartRemovedConditionComponent : Component
{
+ ///
+ /// GoobStation: Requires that the parent part can attach a new part to this slot.
+ ///
+ [DataField(required: true)]
+ public string Connection = string.Empty;
+
[DataField]
public BodyPartType Part;
[DataField]
public BodyPartSymmetry? Symmetry;
-}
\ No newline at end of file
+}
diff --git a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs
index c4c13fbc1cb..e07630e8d72 100644
--- a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs
+++ b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs
@@ -171,6 +171,12 @@ private void OnOrganConditionValid(Entity ent, r
private void OnPartRemovedConditionValid(Entity ent, ref SurgeryValidEvent args)
{
+ if (!_body.CanAttachToSlot(args.Part, ent.Comp.Connection))
+ {
+ args.Cancelled = true;
+ return;
+ }
+
var results = _body.GetBodyChildrenOfType(args.Body, ent.Comp.Part, symmetry: ent.Comp.Symmetry);
if (results is not { } || !results.Any())
return;
diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml
index e59aad9da3f..a5d964a5240 100644
--- a/Resources/Prototypes/Body/Organs/Animal/animal.yml
+++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml
@@ -41,6 +41,7 @@
- state: lung-l
- state: lung-r
- type: Organ
+ slotId: lungs # GoobStation
- type: Lung
- type: Metabolizer
removeEmpty: true
@@ -73,6 +74,7 @@
- type: Sprite
state: stomach
- type: Organ
+ slotId: stomach # GoobStation
- type: SolutionContainerManager
solutions:
stomach:
@@ -116,12 +118,19 @@
- type: Sprite
state: liver
- type: Organ
+ slotId: liver # GoobStation
- type: Metabolizer
maxReagents: 1
metabolizerTypes: [ Animal ]
groups:
- id: Alcohol
rateModifier: 0.1
+ - type: Liver # GoobStation
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Liver
- type: Item
size: Small
heldPrefix: liver
@@ -135,6 +144,7 @@
- type: Sprite
state: heart-on
- type: Organ
+ slotId: heart # GoobStation
- type: Metabolizer
maxReagents: 2
metabolizerTypes: [ Animal ]
@@ -142,9 +152,18 @@
- id: Medicine
- id: Poison
- id: Narcotic
+<<<<<<< HEAD
- type: Item
size: Small
heldPrefix: heart
+=======
+ - type: Heart # GoobStation
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Heart
+>>>>>>> f00571107f (surgery update (animal and moth surgery) (#882))
- type: entity
id: OrganAnimalKidneys
@@ -157,6 +176,7 @@
- state: kidney-l
- state: kidney-r
- type: Organ
+ slotId: kidneys # GoobStation
- type: Metabolizer
maxReagents: 5
metabolizerTypes: [ Animal ]
diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml
index c7542ae1118..1a610f18514 100644
--- a/Resources/Prototypes/Body/Organs/arachnid.yml
+++ b/Resources/Prototypes/Body/Organs/arachnid.yml
@@ -34,9 +34,8 @@
- type: Sprite
sprite: Mobs/Species/Arachnid/organs.rsi
state: stomach
- - type: Item
- size: Small
- heldPrefix: stomach
+ - type: Organ # GoobStation
+ slotId: stomach
- type: Stomach
updateInterval: 1.5
- type: SolutionContainerManager
@@ -50,6 +49,9 @@
Quantity: 5
- type: Metabolizer
updateInterval: 1.5
+ - type: Item
+ size: Small
+ heldPrefix: stomach
- type: entity
id: OrganArachnidLungs
@@ -61,6 +63,8 @@
layers:
- state: lung-l
- state: lung-r
+ - type: Organ # GoobStation
+ slotId: lungs
- type: Lung
- type: Metabolizer
updateInterval: 1.5
@@ -105,6 +109,17 @@
- id: Medicine
- id: Poison
- id: Narcotic
+<<<<<<< HEAD
+=======
+ - type: Organ # GoobStation
+ slotId: heart
+ - type: Heart # GoobStation: Lets you transplant spider hearts into other species
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Heart
+>>>>>>> f00571107f (surgery update (animal and moth surgery) (#882))
- type: entity
id: OrganArachnidLiver
@@ -125,6 +140,17 @@
groups:
- id: Alcohol
rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
+<<<<<<< HEAD
+=======
+ - type: Organ # GoobStation
+ slotId: liver
+ - type: Liver # GoobStation
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Liver
+>>>>>>> f00571107f (surgery update (animal and moth surgery) (#882))
- type: entity
id: OrganArachnidKidneys
@@ -157,9 +183,20 @@
layers:
- state: eyeball-l
- state: eyeball-r
+<<<<<<< HEAD
- type: Item
size: Small
heldPrefix: eyeballs
+=======
+ - type: Organ # GoobStation
+ slotId: eyes
+ - type: Eyes # GoobStation
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Eyes
+>>>>>>> f00571107f (surgery update (animal and moth surgery) (#882))
- type: entity
id: OrganArachnidTongue
diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml
index bf865a07fd9..45d8e4d533a 100644
--- a/Resources/Prototypes/Body/Organs/diona.yml
+++ b/Resources/Prototypes/Body/Organs/diona.yml
@@ -36,6 +36,9 @@
heldPrefix: brain
- type: Sprite
state: brain
+ - type: Organ # GoobStation
+ slotId: Brain
+ - type: Brain # GoobStation
- type: SolutionContainerManager
solutions:
organ:
@@ -62,6 +65,13 @@
layers:
- state: eyeball-l
- state: eyeball-r
+ - type: Organ # GoobStation
+ slotId: eyes
+ - type: Tag # goob edit
+ tags:
+ - Meat
+ - Organ
+ - Eyes
- type: entity
id: OrganDionaStomach
@@ -80,6 +90,8 @@
reagents:
- ReagentId: UncookedAnimalProteins
Quantity: 5
+ - type: Organ # GoobStation
+ slotId: stomach
- type: Stomach
- type: Metabolizer
maxReagents: 6
@@ -105,9 +117,8 @@
components:
- type: Sprite
state: lungs
- - type: Item
- size: Small
- heldPrefix: lungs
+ - type: Organ # GoobStation
+ slotId: lungs
- type: Lung
- type: Metabolizer
removeEmpty: true
@@ -127,6 +138,9 @@
Lung:
maxVol: 100
canReact: False
+ - type: Item
+ size: Small
+ heldPrefix: lungs
# Organs that turn into nymphs on removal
- type: entity
diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml
index bad1149fd42..4c9c47d13a5 100644
--- a/Resources/Prototypes/Body/Organs/moth.yml
+++ b/Resources/Prototypes/Body/Organs/moth.yml
@@ -2,6 +2,7 @@
id: OrganMothStomach
parent: [OrganAnimalStomach, OrganHumanStomach]
categories: [ HideSpawnMenu ]
+ name: moth stomach # GoobStation
components:
- type: Stomach
specialDigestible:
diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml
index ca22d25423c..daabdcc716f 100644
--- a/Resources/Prototypes/Body/Organs/slime.yml
+++ b/Resources/Prototypes/Body/Organs/slime.yml
@@ -49,6 +49,8 @@
layers:
- state: lung-l-slime
- state: lung-r-slime
+ - type: Organ # GoobStation
+ slotId: lungs
- type: Lung
alert: LowNitrogen
- type: Metabolizer
diff --git a/Resources/Prototypes/Body/Organs/vox.yml b/Resources/Prototypes/Body/Organs/vox.yml
index 70e07832712..4036ae011dc 100644
--- a/Resources/Prototypes/Body/Organs/vox.yml
+++ b/Resources/Prototypes/Body/Organs/vox.yml
@@ -3,6 +3,7 @@
parent: OrganHumanLungs
description: "The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in."
suffix: "vox"
+ name: vox lungs # GoobStation
components:
- type: Sprite
sprite: Mobs/Species/Vox/organs.rsi
diff --git a/Resources/Prototypes/Body/Prototypes/arachnid.yml b/Resources/Prototypes/Body/Prototypes/arachnid.yml
index a3caa42a6eb..7036d7babf8 100644
--- a/Resources/Prototypes/Body/Prototypes/arachnid.yml
+++ b/Resources/Prototypes/Body/Prototypes/arachnid.yml
@@ -23,6 +23,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
right arm:
part: RightArmArachnid
connections:
diff --git a/Resources/Prototypes/Body/Prototypes/diona.yml b/Resources/Prototypes/Body/Prototypes/diona.yml
index 12ca203988c..691f055ff43 100644
--- a/Resources/Prototypes/Body/Prototypes/diona.yml
+++ b/Resources/Prototypes/Body/Prototypes/diona.yml
@@ -16,6 +16,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
stomach: OrganDionaStomachNymph
lungs: OrganDionaLungsNymph
diff --git a/Resources/Prototypes/Body/Prototypes/dwarf.yml b/Resources/Prototypes/Body/Prototypes/dwarf.yml
index 592492688b7..a580a02531b 100644
--- a/Resources/Prototypes/Body/Prototypes/dwarf.yml
+++ b/Resources/Prototypes/Body/Prototypes/dwarf.yml
@@ -17,6 +17,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
heart: OrganDwarfHeart
lungs: OrganHumanLungs
diff --git a/Resources/Prototypes/Body/Prototypes/gingerbread.yml b/Resources/Prototypes/Body/Prototypes/gingerbread.yml
index d5355be6412..eaf6cf06da7 100644
--- a/Resources/Prototypes/Body/Prototypes/gingerbread.yml
+++ b/Resources/Prototypes/Body/Prototypes/gingerbread.yml
@@ -17,6 +17,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
heart: OrganHumanHeart
lungs: OrganHumanLungs
diff --git a/Resources/Prototypes/Body/Prototypes/human.yml b/Resources/Prototypes/Body/Prototypes/human.yml
index 61bd14360c5..8b601530a9d 100644
--- a/Resources/Prototypes/Body/Prototypes/human.yml
+++ b/Resources/Prototypes/Body/Prototypes/human.yml
@@ -18,6 +18,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
heart: OrganHumanHeart
lungs: OrganHumanLungs
diff --git a/Resources/Prototypes/Body/Prototypes/moth.yml b/Resources/Prototypes/Body/Prototypes/moth.yml
index b3271834417..7bd7f0774c3 100644
--- a/Resources/Prototypes/Body/Prototypes/moth.yml
+++ b/Resources/Prototypes/Body/Prototypes/moth.yml
@@ -23,6 +23,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
right arm:
part: RightArmMoth
connections:
diff --git a/Resources/Prototypes/Body/Prototypes/primate.yml b/Resources/Prototypes/Body/Prototypes/primate.yml
index 2af9273be4c..3b34fcab2ec 100644
--- a/Resources/Prototypes/Body/Prototypes/primate.yml
+++ b/Resources/Prototypes/Body/Prototypes/primate.yml
@@ -3,11 +3,19 @@
name: "primate"
root: torso
slots:
+ head: # GoobStation: put pun pun into a humans body
+ part: HeadAnimal
+ connections:
+ - torso
+ organs:
+ brain: OrganHumanBrain
+ eyes: OrganHumanEyes
torso:
part: TorsoAnimal
connections:
- hands
- legs
+ - head # GoobStation
organs:
lungs: OrganAnimalLungs
stomach: OrganAnimalStomach
diff --git a/Resources/Prototypes/Body/Prototypes/reptilian.yml b/Resources/Prototypes/Body/Prototypes/reptilian.yml
index 1e9ebd54a48..234351059c4 100644
--- a/Resources/Prototypes/Body/Prototypes/reptilian.yml
+++ b/Resources/Prototypes/Body/Prototypes/reptilian.yml
@@ -23,6 +23,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
right arm:
part: RightArmReptilian
connections:
diff --git a/Resources/Prototypes/Body/Prototypes/skeleton.yml b/Resources/Prototypes/Body/Prototypes/skeleton.yml
index 16d08365610..f622c133aaf 100644
--- a/Resources/Prototypes/Body/Prototypes/skeleton.yml
+++ b/Resources/Prototypes/Body/Prototypes/skeleton.yml
@@ -14,6 +14,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
right arm:
part: RightArmSkeleton
connections:
diff --git a/Resources/Prototypes/Body/Prototypes/slime.yml b/Resources/Prototypes/Body/Prototypes/slime.yml
index b57c5eceb44..ff7d9d62d62 100644
--- a/Resources/Prototypes/Body/Prototypes/slime.yml
+++ b/Resources/Prototypes/Body/Prototypes/slime.yml
@@ -14,6 +14,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
core: SentientSlimeCore
lungs: OrganSlimeLungs
diff --git a/Resources/Prototypes/Body/Prototypes/vox.yml b/Resources/Prototypes/Body/Prototypes/vox.yml
index 2a1f6d9dca7..54f66af81ba 100644
--- a/Resources/Prototypes/Body/Prototypes/vox.yml
+++ b/Resources/Prototypes/Body/Prototypes/vox.yml
@@ -17,6 +17,7 @@
- left arm
- right leg
- left leg
+ - head # GoobStation
organs:
heart: OrganHumanHeart
lungs: OrganVoxLungs
diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml
index 54af2dc1936..7bba170657b 100644
--- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml
+++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml
@@ -30,6 +30,8 @@
type: HumanoidMarkingModifierBoundUserInterface
enum.StrippingUiKey.Key:
type: StrippableBoundUserInterface
+ enum.SurgeryUIKey.Key: # GoobStation
+ type: SurgeryBui
- type: Sprite
scale: 0.9, 0.9
layers:
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
index 63c086effdc..ac0a4b79b48 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
@@ -560,6 +560,7 @@
- Mouse
- type: Body
prototype: Mothroach
+ - type: SurgeryTarget # GoobStation
- type: TypingIndicator
proto: moth
- type: Destructible
@@ -578,6 +579,8 @@
interfaces:
enum.StrippingUiKey.Key:
type: StrippableBoundUserInterface
+ enum.SurgeryUIKey.Key: # GoobStation
+ type: SurgeryBui
- type: InventorySlots
- type: Inventory
speciesId: hamster
@@ -866,6 +869,11 @@
- Passive
- type: Body
prototype: AnimalRuminant
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: HTN
rootTask:
task: RuminantCompound
@@ -943,6 +951,11 @@
task: RuminantCompound
- type: Body
prototype: AnimalHemocyanin
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: entity
name: goat
@@ -1031,6 +1044,11 @@
- Passive
- type: Body
prototype: AnimalRuminant
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: NPCRetaliation
attackMemoryLength: 5
- type: FactionException
@@ -1249,9 +1267,8 @@
abstract: true
components:
- type: CombatMode
- #- type: SurgeryTarget
- # canOperate: false
- #- type: Targeting
+ - type: SurgeryTarget # GoobStation
+ - type: Targeting # GoobStation
- type: Inventory
templateId: monkey
speciesId: monkey
@@ -1306,6 +1323,12 @@
- type: Body
prototype: Primate
requiredLegs: 1 # TODO: More than 1 leg
+ - type: UserInterface # GoobStation: Add SurgeryUIKey on top of stripping ui
+ interfaces:
+ enum.StrippingUiKey.Key:
+ type: StrippableBoundUserInterface
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: CreamPied
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
@@ -1620,6 +1643,11 @@
components:
- type: Body
prototype: Mouse
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: GhostRole
makeSentient: true
allowSpeech: true
@@ -2307,6 +2335,11 @@
- type: CombatMode
- type: Body
prototype: AnimalHemocyanin
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: MobThresholds
thresholds:
0: Alive
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml
index 0957ec0c964..2695d84b63c 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml
@@ -251,6 +251,11 @@
- type: Body
prototype: Bloodsucker
requiredLegs: 1
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: Butcherable
spawned:
- id: FoodMeatFish
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
index 19d6cafd7b1..931bf46a4ce 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml
@@ -60,6 +60,11 @@
- type: Body
prototype: Rat
requiredLegs: 1 # TODO: More than 1 leg
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: Hunger # probably should be prototyped
thresholds:
Overfed: 200
@@ -244,6 +249,11 @@
- type: Body
prototype: Rat
requiredLegs: 1 # TODO: More than 1 leg
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: Hunger # probably should be prototyped
thresholds:
Overfed: 200
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml
index 09a58facd76..37c1b2612fc 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml
@@ -93,6 +93,11 @@
- type: Body
prototype: Slimes
requiredLegs: 1
+ - type: SurgeryTarget # GoobStation
+ - type: UserInterface # GoobStation
+ interfaces:
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
- type: MeleeWeapon
altDisarm: false
soundHit:
diff --git a/Resources/Prototypes/_Goobstation/Body/Parts/animal.yml b/Resources/Prototypes/_Goobstation/Body/Parts/animal.yml
new file mode 100644
index 00000000000..75985dfca30
--- /dev/null
+++ b/Resources/Prototypes/_Goobstation/Body/Parts/animal.yml
@@ -0,0 +1,10 @@
+# Monkey head for borging/transplanting pun pun
+- type: entity
+ parent: [PartAnimal, BaseHead]
+ id: HeadAnimal
+ name: animal head
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Sprite
+ layers:
+ - state: head_m
diff --git a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml
index 7e52a0f2d65..7a3955e086a 100644
--- a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml
+++ b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml
@@ -76,6 +76,7 @@
- type: SurgeryPartCondition
part: Torso
- type: SurgeryPartRemovedCondition
+ connection: head
part: Head
- type: entity
@@ -92,6 +93,7 @@
- type: SurgeryPartCondition
part: Torso
- type: SurgeryPartRemovedCondition
+ connection: left arm
part: Arm
symmetry: Left
@@ -109,9 +111,28 @@
- type: SurgeryPartCondition
part: Torso
- type: SurgeryPartRemovedCondition
+ connection: right arm
part: Arm
symmetry: Right
+- type: entity
+ parent: SurgeryBase
+ id: SurgeryAttachLegs
+ name: Attach Legs
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Surgery
+ requirement: SurgeryOpenIncision
+ steps:
+ - SurgeryStepInsertFeature
+ - SurgeryStepSealWounds
+ - type: SurgeryPartCondition
+ part: Torso
+ - type: SurgeryPartRemovedCondition
+ connection: legs
+ part: Leg
+ symmetry: None
+
- type: entity
parent: SurgeryBase
id: SurgeryAttachLeftLeg
@@ -126,6 +147,7 @@
- type: SurgeryPartCondition
part: Torso
- type: SurgeryPartRemovedCondition
+ connection: left leg
part: Leg
symmetry: Left
@@ -143,9 +165,28 @@
- type: SurgeryPartCondition
part: Torso
- type: SurgeryPartRemovedCondition
+ connection: right leg
part: Leg
symmetry: Right
+- type: entity
+ parent: SurgeryBase
+ id: SurgeryAttachHands
+ name: Attach Hands
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Surgery
+ requirement: SurgeryOpenIncision
+ steps:
+ - SurgeryStepInsertFeature
+ - SurgeryStepSealWounds
+ - type: SurgeryPartCondition
+ part: Torso
+ - type: SurgeryPartRemovedCondition
+ connection: hands
+ part: Hand
+ symmetry: Left # shitcode i guess because of ui icons
+
- type: entity
parent: SurgeryBase
id: SurgeryAttachLeftHand
@@ -161,6 +202,7 @@
part: Arm
symmetry: Left
- type: SurgeryPartRemovedCondition
+ connection: left hand
part: Hand
symmetry: Left
@@ -179,9 +221,28 @@
part: Arm
symmetry: Right
- type: SurgeryPartRemovedCondition
+ connection: right hand
part: Hand
symmetry: Right
+- type: entity
+ parent: SurgeryBase
+ id: SurgeryAttachFeet
+ name: Attach Feet
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Surgery
+ requirement: SurgeryOpenIncision
+ steps:
+ - SurgeryStepInsertFeature
+ - SurgeryStepSealWounds
+ - type: SurgeryPartCondition
+ part: Torso
+ - type: SurgeryPartRemovedCondition
+ connection: feet
+ part: Foot
+ symmetry: None
+
- type: entity
parent: SurgeryBase
id: SurgeryAttachLeftFoot
@@ -197,6 +258,7 @@
part: Leg
symmetry: Left
- type: SurgeryPartRemovedCondition
+ connection: left foot
part: Foot
symmetry: Left
@@ -215,6 +277,7 @@
part: Leg
symmetry: Right
- type: SurgeryPartRemovedCondition
+ connection: right foot
part: Foot
symmetry: Right
@@ -432,6 +495,44 @@
inverse: true
reattaching: true
+- type: entity
+ parent: SurgeryBase
+ id: SurgeryRemoveStomach
+ name: Remove Stomach
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Surgery
+ requirement: SurgeryOpenRibcage
+ steps:
+ - SurgeryStepSawBones
+ - SurgeryStepClampInternalBleeders
+ - SurgeryStepRemoveOrgan
+ - type: SurgeryPartCondition
+ part: Torso
+ - type: SurgeryOrganCondition
+ organ:
+ - type: Stomach
+
+- type: entity
+ parent: SurgeryBase
+ id: SurgeryInsertStomach
+ name: Insert Stomach
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Surgery
+ requirement: SurgeryOpenRibcage
+ steps:
+ - SurgeryStepSawBones
+ - SurgeryStepInsertStomach
+ - SurgeryStepSealOrganWound
+ - type: SurgeryPartCondition
+ part: Torso
+ - type: SurgeryOrganCondition
+ organ:
+ - type: Stomach
+ inverse: true
+ reattaching: true
+
- type: entity
parent: SurgeryBase
id: SurgeryRemoveEyes
diff --git a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml
index 870d1e81ffe..b4e32315448 100644
--- a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml
+++ b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml
@@ -434,6 +434,13 @@
sleepModifier: 1
isConsumable: true
+- type: entity
+ parent: SurgeryStepInsertOrgan
+ id: SurgeryStepInsertStomach
+ name: Add stomach
+ categories: [ HideSpawnMenu ]
+ # no effect its just for minmaxing metabolism
+
- type: entity
parent: SurgeryStepInsertOrgan
id: SurgeryStepInsertLiver