mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 11:36:24 +01:00
Bargain bin organ quirks: Prosthetic organ and Tin Man (#76498)
## About The Pull Request Basically, the organ equivalents of prosthetic limb and quadruple amputee. These replace your organs with absolutely terrible cybernetic counterparts which also have absolutely no resistance against EMPs.  ### ADDITIONAL FUN Surplus organs are so awful that if surgically removed while not EMPed nor failing, they *explode*! ## Why It's Good For The Game More character customization, and more suffering for hardcore random players. ## Changelog 🆑 add: Added two new quirks, prosthetic organ and tin man. Essentially, they replace organs with bad bad not good cybernetic counterparts. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* ## DANGEROUS SURGICAL REMOVAL ELEMENT
|
||||
*
|
||||
* Makes the organ explode when removed surgically.
|
||||
* That's about it.
|
||||
*/
|
||||
/datum/element/dangerous_surgical_removal
|
||||
|
||||
/datum/element/dangerous_surgical_removal/Attach(datum/target)
|
||||
. = ..()
|
||||
if(!isorgan(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_surgical_removal))
|
||||
|
||||
/datum/element/dangerous_surgical_removal/Detach(datum/source)
|
||||
. = ..()
|
||||
UnregisterSignal(source, COMSIG_ORGAN_SURGICALLY_REMOVED)
|
||||
|
||||
/datum/element/dangerous_surgical_removal/proc/on_surgical_removal(obj/item/organ/source, mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
|
||||
SIGNAL_HANDLER
|
||||
if(source.organ_flags & (ORGAN_FAILING|ORGAN_EMP))
|
||||
return
|
||||
if(user?.Adjacent(source))
|
||||
source.audible_message("[source] explodes on [user]'s face!")
|
||||
user.take_bodypart_damage(15)
|
||||
else
|
||||
source.audible_message("[source] explodes into tiny pieces!")
|
||||
explosion(source, light_impact_range = 1, explosion_cause = source)
|
||||
qdel(source)
|
||||
@@ -61,7 +61,6 @@
|
||||
lose_text = span_notice("You feel vigorous again.")
|
||||
medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood."
|
||||
hardcore_value = 8
|
||||
quirk_flags = QUIRK_HUMAN_ONLY
|
||||
mail_goodies = list(/obj/item/reagent_containers/blood/o_minus) // universal blood type that is safe for all
|
||||
var/min_blood = BLOOD_VOLUME_SAFE - 25 // just barely survivable without treatment
|
||||
|
||||
@@ -586,10 +585,10 @@
|
||||
|
||||
/datum/quirk/prosthetic_limb
|
||||
name = "Prosthetic Limb"
|
||||
desc = "An accident caused you to lose one of your limbs. Because of this, you now have a random prosthetic!"
|
||||
desc = "An accident caused you to lose one of your limbs. Because of this, you now have a surplus prosthetic!"
|
||||
icon = "tg-prosthetic-leg"
|
||||
value = -3
|
||||
medical_record_text = "During physical examination, patient was found to have a prosthetic limb."
|
||||
medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic limb."
|
||||
hardcore_value = 3
|
||||
quirk_flags = QUIRK_HUMAN_ONLY // while this technically changes appearance, we don't want it to be shown on the dummy because it's randomized at roundstart
|
||||
mail_goodies = list(/obj/item/weldingtool/mini, /obj/item/stack/cable_coil/five)
|
||||
@@ -615,6 +614,7 @@
|
||||
if(BODY_ZONE_R_LEG)
|
||||
prosthetic = new /obj/item/bodypart/leg/right/robot/surplus
|
||||
slot_string = "right leg"
|
||||
medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]."
|
||||
old_limb = human_holder.return_and_replace_bodypart(prosthetic, special = TRUE)
|
||||
|
||||
/datum/quirk/prosthetic_limb/post_add()
|
||||
@@ -628,12 +628,13 @@
|
||||
|
||||
/datum/quirk/quadruple_amputee
|
||||
name = "Quadruple Amputee"
|
||||
desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, all your limbs have been taken from you."
|
||||
desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, all your limbs have been replaced with surplus prosthetics."
|
||||
icon = "tg-prosthetic-full"
|
||||
value = -6
|
||||
medical_record_text = "During physical examination, patient was found to have all prosthetic limbs."
|
||||
medical_record_text = "During physical examination, patient was found to have all low-budget prosthetic limbs."
|
||||
hardcore_value = 6
|
||||
quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE
|
||||
mail_goodies = list(/obj/item/weldingtool/mini, /obj/item/stack/cable_coil/five)
|
||||
|
||||
/datum/quirk/quadruple_amputee/add_unique(client/client_source)
|
||||
var/mob/living/carbon/human/human_holder = quirk_holder
|
||||
@@ -643,8 +644,110 @@
|
||||
human_holder.del_and_replace_bodypart(new /obj/item/bodypart/leg/right/robot/surplus, special = TRUE)
|
||||
|
||||
/datum/quirk/quadruple_amputee/post_add()
|
||||
to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. Additionally, \
|
||||
you need to use a welding tool and cables to repair them, instead of bruise packs and ointment."))
|
||||
to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \
|
||||
Additionally, you need to use a welding tool and cables to repair them, instead of bruise packs and ointment."))
|
||||
|
||||
/datum/quirk/prosthetic_organ
|
||||
name = "Prosthetic Organ"
|
||||
desc = "An accident caused you to lose one of your organs. Because of this, you now have a surplus prosthetic!"
|
||||
icon = FA_ICON_LUNGS
|
||||
value = -3
|
||||
medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic organ. \
|
||||
<b>Removal of these organs is known to be dangerous to the patient as well as the practitioner.</b>"
|
||||
hardcore_value = 3
|
||||
mail_goodies = list(/obj/item/storage/organbox)
|
||||
/// The slot to replace, in string form
|
||||
var/slot_string = "organ"
|
||||
/// The original organ from before the prosthetic was applied
|
||||
var/obj/item/organ/old_organ
|
||||
|
||||
/datum/quirk/prosthetic_organ/add_unique(client/client_source)
|
||||
var/mob/living/carbon/human/human_holder = quirk_holder
|
||||
var/static/list/organ_slots = list(
|
||||
ORGAN_SLOT_HEART,
|
||||
ORGAN_SLOT_LUNGS,
|
||||
ORGAN_SLOT_LIVER,
|
||||
ORGAN_SLOT_STOMACH,
|
||||
)
|
||||
var/list/possible_organ_slots = organ_slots.Copy()
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOBLOOD))
|
||||
possible_organ_slots -= ORGAN_SLOT_HEART
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOBREATH))
|
||||
possible_organ_slots -= ORGAN_SLOT_LUNGS
|
||||
if(HAS_TRAIT(human_holder, TRAIT_LIVERLESS_METABOLISM))
|
||||
possible_organ_slots -= ORGAN_SLOT_LIVER
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOHUNGER))
|
||||
possible_organ_slots -= ORGAN_SLOT_STOMACH
|
||||
if(!length(organ_slots)) //what the hell
|
||||
return
|
||||
var/organ_slot = pick(possible_organ_slots)
|
||||
var/obj/item/organ/prosthetic
|
||||
switch(organ_slot)
|
||||
if(ORGAN_SLOT_HEART)
|
||||
prosthetic = new /obj/item/organ/internal/heart/cybernetic/surplus
|
||||
slot_string = "heart"
|
||||
if(ORGAN_SLOT_LUNGS)
|
||||
prosthetic = new /obj/item/organ/internal/lungs/cybernetic/surplus
|
||||
slot_string = "lungs"
|
||||
if(ORGAN_SLOT_LIVER)
|
||||
prosthetic = new /obj/item/organ/internal/liver/cybernetic/surplus
|
||||
slot_string = "liver"
|
||||
if(ORGAN_SLOT_STOMACH)
|
||||
prosthetic = new /obj/item/organ/internal/stomach/cybernetic/surplus
|
||||
slot_string = "stomach"
|
||||
medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]. \
|
||||
<b>Removal of these organs is known to be dangerous to the patient as well as the practitioner.</b>"
|
||||
old_organ = human_holder.get_organ_slot(organ_slot)
|
||||
if(prosthetic.Insert(human_holder, special = TRUE, drop_if_replaced = TRUE))
|
||||
old_organ.moveToNullspace()
|
||||
STOP_PROCESSING(SSobj, old_organ)
|
||||
|
||||
/datum/quirk/prosthetic_organ/post_add()
|
||||
to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus organ. It is fragile and will easily come apart under duress. \
|
||||
Additionally, any EMP will make it stop working entirely."))
|
||||
|
||||
/datum/quirk/prosthetic_organ/remove()
|
||||
if(old_organ)
|
||||
old_organ.Insert(quirk_holder, special = TRUE)
|
||||
old_organ = null
|
||||
|
||||
/datum/quirk/tin_man
|
||||
name = "Tin Man"
|
||||
desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, most of your internal organs have been replaced with surplus prosthetics."
|
||||
icon = FA_ICON_ROBOT
|
||||
value = -6
|
||||
medical_record_text = "During physical examination, patient was found to have numerous low-budget prosthetic internal organs. \
|
||||
<b>Removal of these organs is known to be dangerous to the patient as well as the practitioner.</b>"
|
||||
hardcore_value = 6
|
||||
mail_goodies = list(/obj/item/storage/organbox)
|
||||
|
||||
/datum/quirk/tin_man/add_unique(client/client_source)
|
||||
var/mob/living/carbon/human/human_holder = quirk_holder
|
||||
var/static/list/organ_slots = list(
|
||||
ORGAN_SLOT_HEART = /obj/item/organ/internal/heart/cybernetic/surplus,
|
||||
ORGAN_SLOT_LUNGS = /obj/item/organ/internal/lungs/cybernetic/surplus,
|
||||
ORGAN_SLOT_LIVER = /obj/item/organ/internal/liver/cybernetic/surplus,
|
||||
ORGAN_SLOT_STOMACH = /obj/item/organ/internal/stomach/cybernetic/surplus,
|
||||
)
|
||||
var/list/possible_organ_slots = organ_slots.Copy()
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOBLOOD))
|
||||
possible_organ_slots -= ORGAN_SLOT_HEART
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOBREATH))
|
||||
possible_organ_slots -= ORGAN_SLOT_LUNGS
|
||||
if(HAS_TRAIT(human_holder, TRAIT_LIVERLESS_METABOLISM))
|
||||
possible_organ_slots -= ORGAN_SLOT_LIVER
|
||||
if(HAS_TRAIT(human_holder, TRAIT_NOHUNGER))
|
||||
possible_organ_slots -= ORGAN_SLOT_STOMACH
|
||||
if(!length(organ_slots)) //what the hell
|
||||
return
|
||||
for(var/organ_slot in possible_organ_slots)
|
||||
var/organ_path = possible_organ_slots[organ_slot]
|
||||
var/obj/item/organ/new_organ = new organ_path()
|
||||
new_organ.Insert(human_holder, special = TRUE)
|
||||
|
||||
/datum/quirk/tin_man/post_add()
|
||||
to_chat(quirk_holder, span_boldannounce("Most of your internal organs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \
|
||||
Additionally, any EMP will make them stop working entirely."))
|
||||
|
||||
/datum/quirk/pushover
|
||||
name = "Pushover"
|
||||
|
||||
Reference in New Issue
Block a user