From 08c176ebbb7d53f13eea3ed7e0642b62b0262caa Mon Sep 17 00:00:00 2001
From: Livi <11909245+Retrograde115@users.noreply.github.com>
Date: Sun, 11 Dec 2022 12:26:28 -0800
Subject: [PATCH] Adds IPC plastic surgery (#19554)
* Adds IPC plastic surgery
* Added gender option
* Adds null checks, fixes grammar
* Improved code flow
* Added adjacency check
* Added extra genders, limited surgery to head only
* Spans, man
* Small tweaks
* Changed surgery name for grammar
---
code/modules/surgery/robotics.dm | 49 ++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 083b17f8096..49cbc7c67ec 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -666,3 +666,52 @@
user.visible_message(" [user]'s [tool.name] slips, failing to reprogram [target]'s [affected.name].",
" Your [tool.name] slips, failing to reprogram [target]'s [affected.name].")
return SURGERY_STEP_RETRY
+
+/datum/surgery/robotics/reconfigure_id
+ name = "Identity Reconfiguration"
+ steps = list(
+ /datum/surgery_step/robotics/external/unscrew_hatch,
+ /datum/surgery_step/robotics/external/open_hatch,
+ /datum/surgery_step/robotics/edit_serial,
+ /datum/surgery_step/robotics/external/close_hatch
+ )
+ possible_locs = list(BODY_ZONE_HEAD)
+
+/datum/surgery_step/robotics/edit_serial
+ name = "edit serial number"
+ allowed_tools = list(TOOL_MULTITOOL = 100)
+ time = 4.8 SECONDS
+
+/datum/surgery_step/robotics/edit_serial/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message(
+ "[user] begins to edit [target]'s identity parameters with [tool].",
+ "You begin to alter [target]'s identity parameters with [tool]."
+ )
+ return ..()
+
+/datum/surgery_step/robotics/edit_serial/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
+
+ var/new_name = copytext(reject_bad_text(input(user, "Choose a name for this machine.", "Set Name", "[target.real_name]") as null|text), 1, MAX_NAME_LEN)
+ if(!new_name)
+ to_chat(user, "Invalid name! Please try again.")
+ return SURGERY_STEP_INCOMPLETE
+ else if(!target.Adjacent(user))
+ to_chat(user, "The multitool is out of range! Please try again.")
+ return SURGERY_STEP_INCOMPLETE
+ var/static/list/gender_list = list("Male" = MALE, "Female" = FEMALE, "Genderless" = PLURAL, "Object" = NEUTER)
+ var/gender_key = input(user, "Choose a gender for this machine.", "Select Gender", target.gender) as null|anything in gender_list
+ if(!gender_key)
+ to_chat(user, "You must choose a gender! Please try again.")
+ return SURGERY_STEP_INCOMPLETE
+ else if(!target.Adjacent(user))
+ to_chat(user, "The multitool is out of range! Please try again.")
+ return SURGERY_STEP_INCOMPLETE
+ var/new_gender = gender_list[gender_key]
+ var/old_name = target.real_name
+ target.real_name = new_name
+ target.gender = new_gender
+ user.visible_message(
+ "[user] edits [old_name]'s identity parameters with [tool]; [target.p_they()] [target.p_are()] now known as [new_name].",
+ "You alter [old_name]'s identity parameters with [tool]; [target.p_they()] [target.p_are()] now known as [new_name]."
+ )
+ return SURGERY_STEP_CONTINUE