Protean surgery and also spellcheck I guess (#5683)

# About The Pull Request
Restores Protean self-surgery, which was broken by the TG surgery system
rework. The rework introduced required_bodytype gating on all mechanical
surgery operations and an OPERATION_SELF_OPERABLE flag requirement for
self-targeting. Protean limbs use BODYTYPE_NANO, which was never added
to any of these checks, leaving Proteans unable to access the synth
flavored surgery operations they're intended to have and locked out of
self-surgery entirely.

The fix adds BODYTYPE_NANO to the required_bodytype of all six
preparatory mechanical operations in operation_generic_mechanic.dm
(unscrew shell, open hatch, screw shell, prepare electronics,
unwrench/wrench endoskeleton) and to the two prosthetic organ/feature
manipulation operations in operation_organ_manip.dm.

Synths were already handled by a prior Nova edit that added
BODYTYPE_SYNTHETIC; this PR extends the same treatment to Proteans and
logs it with a Bubber Edit comment.

As a drive-by shooting fix, I also changed a persistent "Orginal" [sic]
typo in BUBBER/NOVA EDIT comments across six surgery operation files.
These were copied verbatim from the original Nova edit and propagated
into every subsequent edit comment in the directory.

# Why It's Good For The Game
Proteans are a Bubberstation-original species with self-surgery as
intended functionality. The TG surgery rework silently broke this
without any corresponding fix being applied downstream. A surgeon could
still operate on a Protean using organic surgical tools but this is
sub-optimal and annoying.

# Proof Of Testing
Spawned as Protean, laid down on a table, applied surgical drapes,
worked through the full mechanical surgery chain on myself. Do you
really need a screenshot of me laying on a table?


🆑
fix: Protean self-surgery now works correctly after the TG surgery
rework broke it
fix: Surgeons can now use mechanical tools on Proteans as intended,
consistent with Synth behaviour
spellcheck: Fixed "Orginal" typo in NOVA/BUBBER EDIT comments across six
surgery operation files
/🆑
This commit is contained in:
Aeri
2026-05-26 21:08:50 -04:00
committed by GitHub
parent fa3795134d
commit 9036e5bd26
7 changed files with 22 additions and 22 deletions
@@ -5,7 +5,7 @@
implements = list(/obj/item/autopsy_scanner = 1)
time = 10 SECONDS
success_sound = 'sound/machines/printer.ogg'
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // BUBBER EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // BUBBER EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_MORBID | OPERATION_IGNORE_CLOTHES
all_surgery_states_required = SURGERY_SKIN_OPEN
@@ -4,7 +4,7 @@
IMPLEMENT_HAND = 1,
)
operation_flags = OPERATION_AFFECTS_MOOD | OPERATION_NOTABLE | OPERATION_MORBID | OPERATION_LOCKED
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
time = 12.5 SECONDS
all_surgery_states_required = SURGERY_SKIN_OPEN|SURGERY_BONE_SAWED|SURGERY_ORGANS_CUT
/// What status effect is gained when the surgery is successful?
@@ -5,7 +5,7 @@
implements = list(/obj/item/blood_filter = 1)
time = 2.5 SECONDS
operation_flags = OPERATION_LOOPING
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
success_sound = 'sound/machines/card_slide.ogg'
all_surgery_states_required = SURGERY_SKIN_OPEN
any_surgery_states_blocked = SURGERY_VESSELS_UNCLAMPED
@@ -5,7 +5,7 @@
// rnd_name = "Laparotomy / Craniotomy / Myotomy (Make Incision)" // Maybe we keep this one simple
desc = "Make an incision in the patient's skin to access internal organs. \
Causes \"cut skin\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
replaced_by = /datum/surgery_operation/limb/incise_skin/abductor
implements = list(
TOOL_SCALPEL = 1,
@@ -103,7 +103,7 @@
desc = "Retract the patient's skin to access their internal organs. \
Causes \"skin open\" surgical state."
operation_flags = OPERATION_NO_PATIENT_REQUIRED
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
replaced_by = /datum/surgery_operation/limb/retract_skin/abductor
implements = list(
TOOL_RETRACTOR = 1,
@@ -147,7 +147,7 @@
name = "mend skin incision"
desc = "Mend the incision in the patient's skin, closing it up. \
Clears most surgical states."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_PRIORITY_NEXT_STEP | OPERATION_NO_PATIENT_REQUIRED
replaced_by = /datum/surgery_operation/limb/close_skin/abductor
implements = list(
@@ -216,7 +216,7 @@
name = "clamp bleeders"
desc = "Clamp bleeding blood vessels in the patient's body to prevent blood loss. \
Causes \"vessels clamped\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_PRIORITY_NEXT_STEP | OPERATION_NO_PATIENT_REQUIRED
replaced_by = /datum/surgery_operation/limb/clamp_bleeders/abductor
implements = list(
@@ -260,7 +260,7 @@
name = "unclamp bleeders"
desc = "Unclamp blood vessels in the patient's body to allow blood flow again. \
Clears \"vessels clamped\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_NO_PATIENT_REQUIRED
replaced_by = /datum/surgery_operation/limb/unclamp_bleeders/abductor
implements = list(
@@ -307,7 +307,7 @@
name = "saw limb bone"
desc = "Saw through the patient's bones to access their internal organs. \
Causes \"bone sawed\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
implements = list(
TOOL_SAW = 1,
/obj/item/shovel/serrated = 1.33,
@@ -370,7 +370,7 @@
name = "fix limb bone"
desc = "Repair a patient's cut or broken bones. \
Clears \"bone sawed\" and \"bone drilled\" surgical states."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_NO_PATIENT_REQUIRED
implements = list(
/obj/item/stack/medical/bone_gel = 1,
@@ -425,7 +425,7 @@
name = "drill limb bone"
desc = "Drill through a patient's bones. \
Causes \"bone drilled\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_NO_PATIENT_REQUIRED
implements = list(
TOOL_DRILL = 1,
@@ -477,7 +477,7 @@
name = "incise organs"
desc = "Make an incision in the patient's internal organ tissue to allow for manipulation or repair. \
Causes \"organs cut\" surgical state."
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
operation_flags = OPERATION_NO_PATIENT_REQUIRED
replaced_by = /datum/surgery_operation/limb/incise_organs/abductor
implements = list(
@@ -11,7 +11,7 @@
/obj/item = 10, // i think this amounts to a 180% chance of failure (clamped to 99%)
)
operation_flags = OPERATION_SELF_OPERABLE | OPERATION_MECHANIC | OPERATION_NO_PATIENT_REQUIRED
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/screwdriver.ogg'
success_sound = 'sound/items/tools/screwdriver2.ogg'
@@ -47,7 +47,7 @@
name = "open hatch"
desc = "Open the hatch of a mechanical patient to access its internals. \
Causes \"skin open\" and \"vessels clamped\" surgical states."
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
implements = list(
IMPLEMENT_HAND = 1,
TOOL_CROWBAR = 1,
@@ -83,7 +83,7 @@
name = "screw shell"
desc = "Screw the shell of a mechanical patient back into place. \
Clears most surgical states."
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
implements = list(
TOOL_SCREWDRIVER = 1,
TOOL_SCALPEL = 1.33,
@@ -129,7 +129,7 @@
name = "prepare electronics"
desc = "Prepare the internal electronics of a mechanical patient for surgery. \
Causes \"organs cut\" surgical state."
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
implements = list(
TOOL_MULTITOOL = 1,
TOOL_HEMOSTAT = 1.33,
@@ -164,7 +164,7 @@
name = "unwrench endoskeleton"
desc = "Unwrench a mechanical patient's endoskeleton to access its internals. \
Clears \"bone sawed\" surgical state."
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
implements = list(
TOOL_WRENCH = 1,
TOOL_RETRACTOR = 1.33,
@@ -198,7 +198,7 @@
name = "wrench endoskeleton"
desc = "Wrench a mechanical patient's endoskeleton back into place. \
Clears \"bone sawed\" surgical state."
required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = BODYTYPE_ROBOTIC | BODYTYPE_NANO // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC
implements = list(
TOOL_WRENCH = 1,
TOOL_RETRACTOR = 1.33,
@@ -13,7 +13,7 @@
/obj/item = 5,
)
time = 6.4 SECONDS
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
preop_sound = list(
/obj/item/circular_saw = 'sound/items/handling/surgery/saw.ogg',
/obj/item = 'sound/items/handling/surgery/scalpel1.ogg',
@@ -5,7 +5,7 @@
name = "organ manipulation"
abstract_type = /datum/surgery_operation/limb/organ_manipulation
operation_flags = OPERATION_MORBID | OPERATION_NOTABLE | OPERATION_NO_PATIENT_REQUIRED
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // BUBBER EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = ~BODYTYPE_ROBOTIC
required_bodytype = (~BODYTYPE_ROBOTIC & ~BODYTYPE_SYNTHETIC) // BUBBER EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = ~BODYTYPE_ROBOTIC
/// Radial slice datums for every organ type we can manipulate
VAR_PRIVATE/list/cached_organ_manipulation_options
@@ -240,7 +240,7 @@
/datum/surgery_operation/limb/organ_manipulation/internal/mechanic
name = "prosthetic organ manipulation"
required_bodytype = (BODYTYPE_ROBOTIC| BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = (BODYTYPE_ROBOTIC | BODYTYPE_SYNTHETIC | BODYTYPE_NANO) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = (BODYTYPE_ROBOTIC | BODYTYPE_SYNTHETIC)
remove_implements = list(
TOOL_CROWBAR = 1,
TOOL_HEMOSTAT = 1,
@@ -272,7 +272,7 @@
/datum/surgery_operation/limb/organ_manipulation/external/mechanic
name = "prosthetic feature manipulation"
required_bodytype = (BODYTYPE_ROBOTIC| BODYTYPE_SYNTHETIC) // NOVA EDIT CHANGE - SYNTH FLAGS -Orginal: required_bodytype = BODYTYPE_ROBOTIC
required_bodytype = (BODYTYPE_ROBOTIC | BODYTYPE_SYNTHETIC | BODYTYPE_NANO) // NOVA EDIT CHANGE - SYNTH FLAGS -Original: required_bodytype = BODYTYPE_ROBOTIC // BUBBER EDIT CHANGE - NANO FLAGS -Original: required_bodytype = (BODYTYPE_ROBOTIC | BODYTYPE_SYNTHETIC)
remove_implements = list(
TOOL_CROWBAR = 1,
TOOL_HEMOSTAT = 1,