Files
Bubberstation/code/modules/station_goals/vault_mutation.dm
Zephyr ecbcef778d Refactors Regenerate Organs, and a few organ helpers (#74219)
## About The Pull Request

Refactors regenerate organs to be slightly more intelligent in handling
organ changes and replacements.
Noteably:
- We don't remove organs that were modified by the owner; such as
changing out your heart for a cybernetic
- We early break out of the for loop if they aren't supposed to have an
organ there and remove it
- We check for the organ already being correct, and just healing it and
continuing if it is

Also changes the names of some of the organ helpers into snake_case
### Mapping March
Ckey to receive rewards: N/A

## Why It's Good For The Game
## Changelog

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-26 17:54:36 +01:00

148 lines
5.9 KiB
Plaintext

/datum/mutation/human/breathless
name = "Breathless"
desc = "A mutation within the skin that allows for filtering and absorption of oxygen from the skin."
text_gain_indication = span_notice("Your lungs feel great.")
text_lose_indication = span_warning("Your lungs feel normal again.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/breathless/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
ADD_TRAIT(acquirer, TRAIT_NOBREATH, GENETIC_MUTATION)
/datum/mutation/human/breathless/on_losing(mob/living/carbon/human/owner)//this shouldnt happen under normal condition but just to be sure
. = ..()
REMOVE_TRAIT(owner, TRAIT_NOBREATH, GENETIC_MUTATION)
/datum/mutation/human/quick
name = "Quick"
desc = "A mution within the leg muscles that allows it to operate at 20% more than the usual capacity."
text_gain_indication = span_notice("Your legs feel faster and stronger.")
text_lose_indication = span_warning("Your legs feel weaker and slower.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/quick/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
acquirer.add_movespeed_modifier(/datum/movespeed_modifier/dna_vault_speedup)
/datum/mutation/human/quick/on_losing(mob/living/carbon/human/owner)
. = ..()
owner.remove_movespeed_modifier(/datum/movespeed_modifier/dna_vault_speedup)
/datum/mutation/human/tough
name = "Tough"
desc = "A mutation within the epidermis that makes it more resistant to tear."
text_gain_indication = span_notice("Your skin feels tougher.")
text_lose_indication = span_warning("Your skin feels weaker.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/tough/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
acquirer.physiology.brute_mod *= 0.7
ADD_TRAIT(acquirer, TRAIT_PIERCEIMMUNE, GENETIC_MUTATION)
/datum/mutation/human/tough/on_losing(mob/living/carbon/human/owner)
. = ..()
owner.physiology.brute_mod /= 0.7
REMOVE_TRAIT(owner, TRAIT_PIERCEIMMUNE, GENETIC_MUTATION)
/datum/mutation/human/dextrous
name = "Dextrous"
desc = "A mutation within the nerve system that allows for more responsive and quicker action."
text_gain_indication = span_notice("Your limbs feel more dextrous and responsive.")
text_lose_indication = span_warning("Your limbs feel less dextrous and responsive.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/dextrous/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
acquirer.next_move_modifier *= 0.5
/datum/mutation/human/dextrous/on_losing(mob/living/carbon/human/owner)
. = ..()
owner.next_move_modifier /= 0.5
/datum/mutation/human/fire_immunity
name = "Fire Immunity"
desc = "A mutation within the body that allows it to become nonflammable and withstand higher temperature."
text_gain_indication = span_notice("Your body feels like it can withstand fire.")
text_lose_indication = span_warning("Your body feels vulnerable to fire again.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/fire_immunity/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
acquirer.physiology.burn_mod *= 0.5
acquirer.add_traits(list(TRAIT_RESISTHEAT, TRAIT_NOFIRE), GENETIC_MUTATION)
/datum/mutation/human/fire_immunity/on_losing(mob/living/carbon/human/owner)
. = ..()
owner.physiology.burn_mod /= 0.5
owner.remove_traits(list(TRAIT_RESISTHEAT, TRAIT_NOFIRE), GENETIC_MUTATION)
/datum/mutation/human/quick_recovery
name = "Quick Recovery"
desc = "A mutation within the nervouse system that allows it to recover from being knocked down."
text_gain_indication = span_notice("You feel like you can recover from a fall easier.")
text_lose_indication = span_warning("You feel like recovering from a fall is a challenge again.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/quick_recovery/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
acquirer.physiology.stun_mod *= 0.5
/datum/mutation/human/quick_recovery/on_losing(mob/living/carbon/human/owner)
. = ..()
owner.physiology.stun_mod /= 0.5
/datum/mutation/human/plasmocile
name = "Plasmocile"
desc = "A mutation in the lungs that provides it immunity to plasma's toxic nature."
text_gain_indication = span_notice("Your lungs feel resistant to airborne contaminant.")
text_lose_indication = span_warning("Your lungs feel vulnerable to airborne contaminant again.")
locked = TRUE
mutadone_proof = TRUE
/datum/mutation/human/plasmocile/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
var/obj/item/organ/internal/lungs/improved_lungs = acquirer.get_organ_slot(ORGAN_SLOT_LUNGS)
ADD_TRAIT(owner, TRAIT_VIRUSIMMUNE, GENETIC_MUTATION)
if(improved_lungs)
apply_buff(improved_lungs)
RegisterSignal(acquirer, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(remove_modification))
RegisterSignal(acquirer, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(reapply_modification))
/datum/mutation/human/plasmocile/on_losing(mob/living/carbon/human/owner)
. = ..()
var/obj/item/organ/internal/lungs/improved_lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
REMOVE_TRAIT(owner, TRAIT_VIRUSIMMUNE, GENETIC_MUTATION)
UnregisterSignal(owner, COMSIG_CARBON_LOSE_ORGAN)
UnregisterSignal(owner, COMSIG_CARBON_GAIN_ORGAN)
if(improved_lungs)
remove_buff(improved_lungs)
/datum/mutation/human/plasmocile/proc/remove_modification(mob/source, obj/item/organ/old_organ)
SIGNAL_HANDLER
if(istype(old_organ, /obj/item/organ/internal/lungs))
remove_buff(old_organ)
/datum/mutation/human/plasmocile/proc/reapply_modification(mob/source, obj/item/organ/new_organ)
SIGNAL_HANDLER
if(istype(new_organ, /obj/item/organ/internal/lungs))
apply_buff(new_organ)
/datum/mutation/human/plasmocile/proc/apply_buff(obj/item/organ/internal/lungs/our_lungs)
our_lungs.plas_breath_dam_min *= 0
our_lungs.plas_breath_dam_max *= 0
/datum/mutation/human/plasmocile/proc/remove_buff(obj/item/organ/internal/lungs/our_lungs)
our_lungs.plas_breath_dam_min = initial(our_lungs.plas_breath_dam_min)
our_lungs.plas_breath_dam_max = initial(our_lungs.plas_breath_dam_max)