From 386e27012205d8bacd8b18e462ee7cf34df7629b Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 8 Oct 2019 21:33:43 -0400 Subject: [PATCH] DNA Vault Rework (#12455) --- code/__DEFINES/genetics.dm | 48 +++++------ code/__DEFINES/station_goals.dm | 8 +- code/game/dna/genes/powers.dm | 2 +- .../awaymissions/mission_code/academy.dm | 2 +- .../living/carbon/human/species/_species.dm | 7 +- .../mob/living/carbon/human/species/golem.dm | 8 +- .../mob/living/carbon/human/species/unathi.dm | 2 +- .../mob/living/carbon/human/species/wryn.dm | 2 +- .../living/carbon/human/species/zombies.dm | 2 +- code/modules/station_goals/dna_vault.dm | 79 ++++++++++++------- 10 files changed, 88 insertions(+), 72 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index c8916e31f40..c8f98c1fbeb 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -143,27 +143,27 @@ //Species traits. -#define IS_WHITELISTED 1 -#define LIPS 2 -#define NO_BLOOD 3 -#define NO_BREATHE 4 -#define NO_DNA 5 -#define NO_SCAN 6 -#define NO_PAIN 7 -#define IS_PLANT 8 -#define CAN_BE_FAT 9 -#define NO_INTORGANS 10 -#define RADIMMUNE 11 -#define NOGUNS 12 -#define NOTRANSSTING 13 -#define VIRUSIMMUNE 14 -#define NOCRITDAMAGE 15 -#define RESISTHOT 16 -#define RESISTCOLD 17 -#define NO_EXAMINE 18 -#define CAN_WINGDINGS 19 -#define NOZOMBIE 20 -#define NO_GERMS 21 -#define NO_DECAY 22 -#define PIERCEIMMUNE 23 -#define NO_HUNGER 24 \ No newline at end of file +#define IS_WHITELISTED "whitelisted" +#define LIPS "lips" +#define NO_BLOOD "no_blood" +#define NO_BREATHE "no_breathe" +#define NO_DNA "no_dna" +#define NO_SCAN "no_scan" +#define NO_PAIN "no_pain" +#define IS_PLANT "is_plant" +#define CAN_BE_FAT "can_be_fat" +#define NO_INTORGANS "no_internal_organs" +#define RADIMMUNE "rad_immunity" +#define NOGUNS "no_guns" +#define NOTRANSSTING "no_trans_sting" +#define VIRUSIMMUNE "virus_immunity" +#define NOCRITDAMAGE "no_crit" +#define RESISTHOT "resist_heat" +#define RESISTCOLD "resist_cold" +#define NO_EXAMINE "no_examine" +#define CAN_WINGDINGS "can_wingdings" +#define NOZOMBIE "no_zombie" +#define NO_GERMS "no_germs" +#define NO_DECAY "no_decay" +#define PIERCEIMMUNE "pierce_immunity" +#define NO_HUNGER "no_hunger" \ No newline at end of file diff --git a/code/__DEFINES/station_goals.dm b/code/__DEFINES/station_goals.dm index ce1723e6521..7c13f4f9e67 100644 --- a/code/__DEFINES/station_goals.dm +++ b/code/__DEFINES/station_goals.dm @@ -1,8 +1,2 @@ #define BSA_SIZE_FRONT 4 -#define BSA_SIZE_BACK 6 - -#define VAULT_SPACEIMMUNE "Space Immunity" -#define VAULT_XRAY "X-Ray Vision" -#define VAULT_TELEKINESIS "Telekinesis" -#define VAULT_PSYCHIC "Psychic Powers" -#define VAULT_SPEED "Speediness" \ No newline at end of file +#define BSA_SIZE_BACK 6 \ No newline at end of file diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index f526659d664..f8b231372dc 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -39,7 +39,7 @@ return 0 if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.dna.species && H.dna.species.slowdown && !(flags & MUTCHK_FORCED)) + if(H.dna.species && H.dna.species.speed_mod && !(flags & MUTCHK_FORCED)) return 0 return 1 diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm index e41e29a747f..f8d66058199 100644 --- a/code/modules/awaymissions/mission_code/academy.dm +++ b/code/modules/awaymissions/mission_code/academy.dm @@ -125,7 +125,7 @@ //Cut speed T.visible_message("[user] starts moving slower!") var/datum/species/S = user.dna.species - S.slowdown += 1 + S.speed_mod += 1 if(7) //Throw T.visible_message("Unseen forces throw [user]!") diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 19861534af9..84c65f7d356 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -18,7 +18,6 @@ var/tail // Name of tail image in species effects icon file. var/datum/unarmed_attack/unarmed //For empty hand harm-intent attack var/unarmed_type = /datum/unarmed_attack - var/slowdown = 0 // Passive movement speed malus (or boost, if negative) var/silent_steps = 0 // Stops step noises var/cold_level_1 = 260 // Cold damage level 1 below this point. @@ -52,7 +51,7 @@ var/brain_mod = 1 // Brain damage damage reduction/amplification var/stamina_mod = 1 var/stun_mod = 1 // If a species is more/less impacated by stuns/weakens/paralysis - var/speedmod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster + var/speed_mod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster var/blood_damage_type = OXY //What type of damage does this species take if it's low on blood? var/obj/item/mutanthands var/total_health = 100 @@ -232,8 +231,8 @@ gravity = 1 if(!ignoreslow && gravity) - if(slowdown) - . = slowdown + if(speed_mod) + . = speed_mod if(H.wear_suit) . += H.wear_suit.slowdown diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 0328e99a6a0..7c92d8748bd 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -7,7 +7,7 @@ species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, NOGUNS, PIERCEIMMUNE) dies_at_threshold = TRUE - slowdown = 2 + speed_mod = 2 brute_mod = 0.45 //55% damage reduction burn_mod = 0.45 tox_mod = 0.45 @@ -214,7 +214,7 @@ /datum/species/golem/gold name = "Gold Golem" golem_colour = rgb(204, 204, 0) - slowdown = 1 + speed_mod = 1 brute_mod = 0.75 //25% damage reduction down from 55% burn_mod = 0.75 tox_mod = 0.75 @@ -244,7 +244,7 @@ punchdamagelow = 12 punchdamagehigh = 21 punchstunthreshold = 18 //still 40% stun chance - slowdown = 4 //pretty fucking slow + speed_mod = 4 //pretty fucking slow skinned_type = /obj/item/stack/ore/iron info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." prefix = "Plasteel" @@ -300,7 +300,7 @@ skinned_type = /obj/item/stack/sheet/mineral/abductor language = "Golem Mindlink" default_language = "Golem Mindlink" - slowdown = 1 //faster + speed_mod = 1 //faster info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to speak telepathically to other alloy golems." prefix = "Alien" special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 6240e2673bd..61c34ab41d9 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -116,5 +116,5 @@ language = "Sinta'unathi" default_language = "Sinta'unathi" - slowdown = -0.80 + speed_mod = -0.80 species_traits = list(NO_BREATHE, NOGUNS) diff --git a/code/modules/mob/living/carbon/human/species/wryn.dm b/code/modules/mob/living/carbon/human/species/wryn.dm index 450da31b591..3fec4822919 100644 --- a/code/modules/mob/living/carbon/human/species/wryn.dm +++ b/code/modules/mob/living/carbon/human/species/wryn.dm @@ -8,7 +8,7 @@ tail = "wryntail" punchdamagelow = 0 punchdamagehigh = 1 - slowdown = 1 + speed_mod = 1 warning_low_pressure = -300 hazard_low_pressure = 1 blurb = "The wryn (r-in, singular r-in) are a humanoid race that possess many bee-like features. Originating from Alveare they \ diff --git a/code/modules/mob/living/carbon/human/species/zombies.dm b/code/modules/mob/living/carbon/human/species/zombies.dm index fcc8d2feeb8..1f1c4d979b7 100644 --- a/code/modules/mob/living/carbon/human/species/zombies.dm +++ b/code/modules/mob/living/carbon/human/species/zombies.dm @@ -42,7 +42,7 @@ clone_mod = 0.8 brain_mod = 0.8 stamina_mod = 0.8 - speedmod = 1.6 + speed_mod = 1.6 default_language = "Zombie" var/heal_rate = 1 var/regen_cooldown = 0 diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 95b155df4cc..5cc26bcca14 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -3,6 +3,13 @@ // DNA vault requires x animals ,y plants, z human dna // DNA vaults require high tier stock parts and cold // After completion each crewmember can receive single upgrade chosen out of 2 for the mob. +#define VAULT_TOXIN "Toxin Adaptation" +#define VAULT_NOBREATH "Lung Enhancement" +#define VAULT_FIREPROOF "Thermal Regulation" +#define VAULT_STUNTIME "Neural Repathing" +#define VAULT_ARMOUR "Bone Reinforcement" +#define VAULT_SPEED "Leg Muscle Stimulus" +#define VAULT_QUICK "Arm Muscle Stimulus" /datum/station_goal/dna_vault name = "DNA Vault" @@ -115,7 +122,8 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/ build_path = /obj/machinery/dna_vault origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! req_components = list( - /obj/item/stock_parts/capacitor/quadratic = 5, + /obj/item/stock_parts/capacitor/super = 5, + /obj/item/stock_parts/manipulator/pico = 5, /obj/item/stack/cable_coil = 2) /obj/structure/filler @@ -204,7 +212,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/ if(user in power_lottery) return var/list/L = list() - var/list/possible_powers = list(VAULT_SPACEIMMUNE,VAULT_XRAY,VAULT_TELEKINESIS,VAULT_PSYCHIC,VAULT_SPEED) + var/list/possible_powers = list(VAULT_TOXIN, VAULT_NOBREATH, VAULT_FIREPROOF, VAULT_STUNTIME, VAULT_ARMOUR, VAULT_SPEED, VAULT_QUICK) L += pick_n_take(possible_powers) L += pick_n_take(possible_powers) power_lottery[user] = L @@ -267,34 +275,49 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/ return if(!completed) return - if(!H.ignore_gene_stability) - to_chat(H, "[src] stabilizes your genes, granting you the ability to have multiple powers.") - H.ignore_gene_stability = 1 + var/datum/species/S = H.dna.species + if(NO_DNA in S.species_traits) + to_chat(H, "Error, no DNA detected.") + return switch(upgrade_type) - if(VAULT_SPACEIMMUNE) - to_chat(H, "You suddenly don't feel the need to breathe anymore. You also don't feel any cold anymore.") - grant_power(H, BREATHLESSBLOCK, BREATHLESS) - grant_power(H, FIREBLOCK, COLDRES) - if(VAULT_XRAY) - to_chat(H, "You can suddenly see through walls.") - grant_power(H, XRAYBLOCK, XRAY) - if(VAULT_TELEKINESIS) - to_chat(H, "You gain the ability to control objects from a distance.") - grant_power(H, TELEBLOCK, TK) - if(VAULT_PSYCHIC) - to_chat(H, "Your mind expands, giving you psychic powers.") - grant_power(H, REMOTETALKBLOCK, REMOTE_TALK) - grant_power(H, REMOTEVIEWBLOCK, REMOTE_VIEW) - grant_power(H, EMPATHBLOCK, EMPATH) - grant_power(H, PSYRESISTBLOCK, PSY_RESIST) + if(VAULT_TOXIN) + to_chat(H, "You feel resistant to airborne toxins.") + var/obj/item/organ/internal/lungs/L = H.get_int_organ(/obj/item/organ/internal/lungs) + if(L) + L.tox_breath_dam_multiplier = 0 + S.species_traits |= VIRUSIMMUNE + if(VAULT_NOBREATH) + to_chat(H, "Your lungs feel great.") + S.species_traits |= NO_BREATHE + if(VAULT_FIREPROOF) + to_chat(H, "You feel fireproof.") + S.burn_mod *= 0.5 + S.species_traits |= RESISTHOT + if(VAULT_STUNTIME) + to_chat(H, "Nothing can keep you down for long.") + S.stun_mod *= 0.5 + if(VAULT_ARMOUR) + to_chat(H, "You feel tough.") + S.brute_mod *= 0.7 + S.burn_mod *= 0.7 + S.tox_mod *= 0.7 + S.oxy_mod *= 0.7 + S.clone_mod *= 0.7 + S.brain_mod *= 0.7 + S.stamina_mod *= 0.7 + S.species_traits |= PIERCEIMMUNE if(VAULT_SPEED) to_chat(H, "You feel very fast and agile.") - grant_power(H, JUMPBLOCK, JUMPY) - grant_power(H, INCREASERUNBLOCK, RUN) + S.speed_mod = -1 + if(VAULT_QUICK) + to_chat(H, "Your arms move as fast as lightning.") + H.next_move_modifier = 0.5 power_lottery[H] = list() -/obj/machinery/dna_vault/proc/grant_power(mob/living/carbon/human/H, block, power) - H.dna.SetSEState(block, 1, 1) - H.mutations |= power - genemutcheck(H, block, null, MUTCHK_FORCED) - H.dna.default_blocks.Add(block) //prevent removal by mutadone +#undef VAULT_TOXIN +#undef VAULT_NOBREATH +#undef VAULT_FIREPROOF +#undef VAULT_STUNTIME +#undef VAULT_ARMOUR +#undef VAULT_SPEED +#undef VAULT_QUICK \ No newline at end of file