Advanced Plastic Surgery 2.0, It's rare now. (#78504)

## About The Pull Request
A revival of #76508 which got closed due to it eating up genetics niche.
This PR fixess that issue by seperating the surgery into two. the normal
roundstart plastic surgery and advanced plastic surgery. both works
identically with the one exception being that the advanced one allows
the feature that the last PR tried to add. which is to allow surgery to
mimic people in photographs.
the regular one remains as-is.

The disk containing the surgery can be found in a lot of places, a
role-restricted item to doctors and roboticists for 1TC, as a rare maint
loot and BEPIS technode reward
## Why It's Good For The Game
Opportunity for more fun gimmicks, ammo for BB's and paranoia, staple of
SS13 gameplay.
This also retroactively buffs forensic scanners and records since it
really only changes your name and voice. You can change your hair all
you want but anything more than that is a trip to genetics. overall
allows for more engaging gameplay while not detracting from genetics
niche with how niche and rare it would appear in rounds.
## Changelog
🆑
add: Adds an advanced plastic surgery procedure, allowing you to imitate
people in pictures. Simply hold a picture in your offhand of the person
you wish to imitate as while conducting the surgery! Remember, it's not
foolproof, it only changes your name and voice!
adds: You can obtain the disk containing the afromentioned surgery. as a
role-restricted item to doctors and roboticists for 1TC, as a rare maint
loot and BEPIS technode reward
/🆑

---------

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
This commit is contained in:
Singul0
2023-09-25 17:49:30 +02:00
committed by GitHub
co-authored by ATH1909 MrMelbert
parent cf5360acd8
commit 65b3788bcb
7 changed files with 92 additions and 4 deletions
@@ -347,6 +347,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
/obj/item/book/granter/crafting_recipe/dusting/laser_musket_prime = 1,
/obj/item/book/granter/sign_language = 1,
/obj/item/disk/nuclear/fake = 1,
/obj/item/disk/surgery/advanced_plastic_surgery = 1,
/obj/item/skillchip/brainwashing = 1,
/obj/item/tattoo_kit = 1,
/obj/item/folder/ancient_paperwork = 1,
+6 -1
View File
@@ -5,6 +5,8 @@
var/list/mobs_seen = list()
/// List of weakrefs pointing at dead mobs that appear in this photo
var/list/dead_seen = list()
/// List of strings of face-visible humans in this photo
var/list/names_seen = list()
var/caption
var/icon/picture_image
var/icon/picture_icon
@@ -16,7 +18,7 @@
///Was this image capable of seeing ghosts?
var/see_ghosts = CAMERA_NO_GHOSTS
/datum/picture/New(name, desc, mobs_spotted, dead_spotted, image, icon, size_x, size_y, bp, caption_, autogenerate_icon, can_see_ghosts)
/datum/picture/New(name, desc, mobs_spotted, dead_spotted, names, image, icon, size_x, size_y, bp, caption_, autogenerate_icon, can_see_ghosts)
if(!isnull(name))
picture_name = name
if(!isnull(desc))
@@ -27,6 +29,9 @@
if(!isnull(dead_spotted))
for(var/mob/seen as anything in dead_spotted)
dead_seen += WEAKREF(seen)
if(!isnull(names))
for(var/seen in names)
names_seen += seen
if(!isnull(image))
picture_image = image
if(!isnull(icon))
+6 -1
View File
@@ -188,6 +188,8 @@
var/list/mobs = list()
var/blueprints = FALSE
var/clone_area = SSmapping.request_turf_block_reservation(size_x * 2 + 1, size_y * 2 + 1, 1)
///list of human names taken on picture
var/list/names = list()
var/width = size_x * 2 + 1
var/height = size_y * 2 + 1
@@ -218,8 +220,11 @@
var/icon/get_icon = camera_get_icon(turfs, target_turf, psize_x, psize_y, clone_area, size_x, size_y, (size_x * 2 + 1), (size_y * 2 + 1))
qdel(clone_area)
get_icon.Blend("#000", ICON_UNDERLAY)
for(var/mob/living/carbon/human/person in mobs)
if(person.is_face_visible())
names += "[person.name]"
var/datum/picture/picture = new("picture", desc.Join(" "), mobs_spotted, dead_spotted, get_icon, null, psize_x, psize_y, blueprints, can_see_ghosts = see_ghosts)
var/datum/picture/picture = new("picture", desc.Join(" "), mobs_spotted, dead_spotted, names, get_icon, null, psize_x, psize_y, blueprints, can_see_ghosts = see_ghosts)
after_picture(user, picture)
SEND_SIGNAL(src, COMSIG_CAMERA_IMAGE_CAPTURED, target, user)
blending = FALSE
@@ -1114,6 +1114,13 @@
surgery = /datum/surgery/advanced/wing_reconstruction
research_icon_state = "surgery_chest"
/datum/design/surgery/advanced_plastic_surgery
name = "Advanced Plastic Surgery"
desc = "An advanced form of the plastic surgery, allowing oneself to remodel someone's face and voice based off a picture of someones face"
surgery = /datum/surgery/plastic_surgery/advanced
id = "surgery_advanced_plastic_surgery"
research_icon_state = "surgery_head"
/datum/design/surgery/experimental_dissection
name = "Experimental Dissection"
desc = "An experimental surgical procedure that dissects bodies in exchange for research points at ancient R&D consoles."
@@ -2367,3 +2367,15 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/advanced_plastic_surgery
id = "plastic_surgery"
display_name = "Advanced Plastic Surgery"
description = "A Procedure long lost due to licensing problems now once again available."
prereq_ids = list("base")
design_ids = list(
"surgery_advanced_plastic_surgery"
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
+50 -2
View File
@@ -1,3 +1,9 @@
/// Disk containing info for doing advanced plastic surgery. Spawns in maint and available as a role-restricted item in traitor uplinks.
/obj/item/disk/surgery/advanced_plastic_surgery
name = "Advanced Plastic Surgery Disk"
desc = "The disk provides instructions on how to do an Advanced Plastic Surgery, this surgery allows one-self to completely remake someone's face with that of another. Provided they have a picture of them in their offhand when reshaping the face. With the surgery long becoming obsolete with the rise of genetics technology. This item became an antique to many collectors, With only the cheaper and easier basic form of plastic surgery remaining in use in most places."
surgeries = list(/datum/surgery/plastic_surgery/advanced)
/datum/surgery/plastic_surgery
name = "Plastic surgery"
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_MORBID_CURIOSITY
@@ -9,6 +15,41 @@
/datum/surgery_step/close,
)
/datum/surgery/plastic_surgery/advanced
name = "advanced plastic surgery"
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/insert_plastic,
/datum/surgery_step/reshape_face,
/datum/surgery_step/close,
)
//Insert plastic step, It ain't called plastic surgery for nothing! :)
/datum/surgery_step/insert_plastic
name = "insert plastic (plastic)"
implements = list(
/obj/item/stack/sheet/plastic = 100,
/obj/item/stack/sheet/meat = 100)
time = 3.2 SECONDS
preop_sound = 'sound/effects/blobattack.ogg'
success_sound = 'sound/effects/attackblob.ogg'
failure_sound = 'sound/effects/blobattack.ogg'
/datum/surgery_step/insert_plastic/preop(mob/user, mob/living/target, target_zone, obj/item/stack/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]..."),
span_notice("[user] begins to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]."),
span_notice("[user] begins to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]."),
)
display_pain(target, "You feel something inserting just below the skin in your [parse_zone(target_zone)].")
/datum/surgery_step/insert_plastic/success(mob/user, mob/living/target, target_zone, obj/item/stack/tool, datum/surgery/surgery, default_display_results)
. = ..()
tool.use(1)
//reshape_face
/datum/surgery_step/reshape_face
name = "reshape face (scalpel)"
@@ -43,8 +84,15 @@
else
var/list/names = list()
if(!isabductor(user))
for(var/i in 1 to 10)
names += target.dna.species.random_name(target.gender, TRUE)
var/obj/item/offhand = user.get_inactive_held_item()
if(istype(offhand, /obj/item/photo) && istype(surgery, /datum/surgery/plastic_surgery/advanced))
var/obj/item/photo/disguises = offhand
for(var/namelist as anything in disguises.picture?.names_seen)
names += namelist
else
user.visible_message(span_warning("You have no picture to base the appearance on, reverting to random appearances."))
for(var/i in 1 to 10)
names += target.dna.species.random_name(target.gender, TRUE)
else
for(var/_i in 1 to 9)
names += "Subject [target.gender == MALE ? "i" : "o"]-[pick("a", "b", "c", "d", "e")]-[rand(10000, 99999)]"
+10
View File
@@ -173,6 +173,16 @@
cost = 5
surplus = 50
/datum/uplink_item/role_restricted/advanced_plastic_surgery
name = "Advanced Plastic Surgery Program"
desc = "A bootleg copy of an collector item, this disk contains the procedure to perform advanced plastic surgery, allowing you to model someone's face and voice based on a picture taken by a camera on your offhand. \
All changes are superficial and does not change ones genetic makeup. \
Insert into an Operating Console to enable the procedure."
item = /obj/item/disk/surgery/brainwashing
restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_ROBOTICIST)
cost = 1
surplus = 50
/datum/uplink_item/role_restricted/springlock_module
name = "Heavily Modified Springlock MODsuit Module"
desc = "A module that spans the entire size of the MOD unit, sitting under the outer shell. \