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