From 862acf2f06434ca6b6609da4eb4dbf4dc0a73bec Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sat, 28 Dec 2019 21:33:15 +0800 Subject: [PATCH] ports hyper's genetics --- code/__DEFINES/DNA.dm | 85 ++- code/__DEFINES/status_effects.dm | 1 + code/__DEFINES/traits.dm | 2 + code/__HELPERS/dna.dm | 12 + code/_globalvars/genetics.dm | 7 +- code/controllers/subsystem/atoms.dm | 23 +- code/datums/datacore.dm | 1 - .../diseases/advance/symptoms/genetics.dm | 6 +- code/datums/dna.dm | 296 +++++++-- code/datums/mutations.dm | 136 ++-- code/datums/mutations/actions.dm | 169 +++++ code/datums/mutations/antenna.dm | 107 +++ code/datums/mutations/body.dm | 135 +++- code/datums/mutations/chameleon.dm | 5 +- code/datums/mutations/cold_resistance.dm | 31 +- code/datums/mutations/combined.dm | 24 + code/datums/mutations/hulk.dm | 15 +- code/datums/mutations/radioactive.dm | 19 + code/datums/mutations/sight.dm | 41 +- code/datums/mutations/speech.dm | 21 +- code/datums/mutations/telekinesis.dm | 14 +- code/datums/status_effects/debuffs.dm | 23 + code/game/machinery/cloning.dm | 8 +- code/game/machinery/computer/cloning.dm | 2 +- code/game/machinery/computer/dna_console.dm | 620 ++++++++++++++---- code/game/machinery/exp_cloner.dm | 26 +- .../game/mecha/equipment/tools/other_tools.dm | 4 +- code/game/objects/items/chromosome.dm | 92 +++ .../circuitboards/machine_circuitboards.dm | 2 +- code/game/objects/items/devices/scanners.dm | 64 +- code/game/objects/items/dna_injector.dm | 244 ++++--- .../changeling/powers/chameleon_skin.dm | 11 +- .../antagonists/wishgranter/wishgranter.dm | 2 +- .../awaymissions/mission_code/wildwest.dm | 2 +- code/modules/client/asset_cache.dm | 7 + code/modules/events/disease_outbreak.dm | 2 +- code/modules/jobs/job_types/geneticist.dm | 1 + .../mining/lavaland/necropolis_chests.dm | 54 +- code/modules/mob/living/carbon/carbon.dm | 8 +- .../mob/living/carbon/human/species.dm | 11 +- .../human/species_types/lizardpeople.dm | 1 + .../carbon/human/species_types/podpeople.dm | 4 +- code/modules/mob/living/carbon/life.dm | 7 +- code/modules/mob/living/carbon/monkey/life.dm | 2 +- code/modules/mob/transform_procs.dm | 10 +- .../chemistry/reagents/medicine_reagents.dm | 2 +- .../chemistry/reagents/toxin_reagents.dm | 4 +- .../research/designs/medical_designs.dm | 10 + code/modules/research/techweb/_techweb.dm | 1 + code/modules/research/techweb/all_nodes.dm | 2 +- .../spells/spell_types/touch_attacks.dm | 6 +- .../surgery/bodyparts/dismemberment.dm | 2 +- html/browser/scannernew.css | 21 + html/dna_discovered.gif | Bin 0 -> 48972 bytes html/dna_extra.gif | Bin 0 -> 48105 bytes html/dna_undiscovered.gif | Bin 0 -> 48198 bytes icons/effects/genetics.dmi | Bin 20768 -> 22667 bytes icons/mob/actions/actions_genetic.dmi | Bin 0 -> 413 bytes icons/mob/actions/actions_spells.dmi | Bin 22665 -> 25476 bytes icons/obj/chromosomes.dmi | Bin 0 -> 1090 bytes icons/obj/device.dmi | Bin 46156 -> 48627 bytes .../code/game/machinery/wishgranter.dm | 2 +- tgstation.dme | 7 + 63 files changed, 1931 insertions(+), 483 deletions(-) create mode 100644 code/__HELPERS/dna.dm create mode 100644 code/datums/mutations/actions.dm create mode 100644 code/datums/mutations/antenna.dm create mode 100644 code/datums/mutations/combined.dm create mode 100644 code/datums/mutations/radioactive.dm create mode 100644 code/game/objects/items/chromosome.dm create mode 100644 html/dna_discovered.gif create mode 100644 html/dna_extra.gif create mode 100644 html/dna_undiscovered.gif create mode 100644 icons/mob/actions/actions_genetic.dmi create mode 100644 icons/obj/chromosomes.dmi diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 4052dce40d..e931f87b8d 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -2,32 +2,45 @@ #define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return -//Defines copying names of mutations in all cases, make sure to change this if you change mutation's name -#define HULK "Hulk" -#define XRAY "X Ray Vision" -#define COLDRES "Cold Resistance" -#define TK "Telekinesis" -#define NERVOUS "Nervousness" -#define EPILEPSY "Epilepsy" -#define MUTATE "Unstable DNA" -#define COUGH "Cough" -#define DWARFISM "Dwarfism" -#define CLOWNMUT "Clumsiness" -#define TOURETTES "Tourettes Syndrome" -#define DEAFMUT "Deafness" -#define BLINDMUT "Blindness" -#define RACEMUT "Monkified" -#define BADSIGHT "Near Sightness" -#define LASEREYES "Laser Eyes" -#define CHAMELEON "Chameleon" -#define WACKY "Wacky" -#define MUT_MUTE "Mute" -#define SMILE "Smile" -#define STONER "Stoner" -#define UNINTELLIGIBLE "Unintelligible" -#define SWEDISH "Swedish" -#define CHAV "Chav" -#define ELVIS "Elvis" +//Defines copying names of mutations in all cases, make sure to change this if you change mutation's type +#define HULK /datum/mutation/human/hulk +#define XRAY /datum/mutation/human/thermal/x_ray +#define SPACEMUT /datum/mutation/human/space_adaptation +#define TK /datum/mutation/human/telekinesis +#define NERVOUS /datum/mutation/human/nervousness +#define EPILEPSY /datum/mutation/human/epilepsy +#define MUTATE /datum/mutation/human/bad_dna +#define COUGH /datum/mutation/human/cough +#define DWARFISM /datum/mutation/human/dwarfism +#define CLOWNMUT /datum/mutation/human/clumsy +#define TOURETTES /datum/mutation/human/tourettes +#define DEAFMUT /datum/mutation/human/deaf +#define BLINDMUT /datum/mutation/human/blind +#define RACEMUT /datum/mutation/human/race +#define BADSIGHT /datum/mutation/human/nearsight +#define LASEREYES /datum/mutation/human/laser_eyes +#define CHAMELEON /datum/mutation/human/chameleon +#define WACKY /datum/mutation/human/wacky +#define MUT_MUTE /datum/mutation/human/mute +#define SMILE /datum/mutation/human/smile +#define STONER /datum/mutation/human/stoner +#define UNINTELLIGIBLE /datum/mutation/human/unintelligible +#define SWEDISH /datum/mutation/human/swedish +#define CHAV /datum/mutation/human/chav +#define ELVIS /datum/mutation/human/elvis +#define RADIOACTIVE /datum/mutation/human/radioactive +#define GLOWY /datum/mutation/human/glow +#define TELEPATHY /datum/mutation/human/telepathy +#define FIREBREATH /datum/mutation/human/firebreath +#define VOID /datum/mutation/human/void +#define STRONG /datum/mutation/human/strong +#define FIRESWEAT /datum/mutation/human/fire +#define THERMAL /datum/mutation/human/thermal +#define INSULATED /datum/mutation/human/insulated +#define SHOCKTOUCH /datum/mutation/human/shock +#define ANTENNA /datum/mutation/human/antenna +#define PARANOIA /datum/mutation/human/paranoia +#define MINDREAD /datum/mutation/human/mindreader #define UI_CHANGED "ui changed" #define UE_CHANGED "ue changed" @@ -39,10 +52,12 @@ //Types of usual mutations #define POSITIVE 1 #define NEGATIVE 2 -#define MINOR_NEGATIVE 3 +#define MINOR_NEGATIVE 4 -//Mutations that cant be taken from genetics and are not in SE -#define NON_SCANNABLE -1 +//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you dont want people to fuck with like wizard mutate +#define MUT_NORMAL 1 +#define MUT_EXTRA 2 +#define MUT_OTHER 3 //DNA - Because fuck you and your magic numbers being all over the codebase. #define DNA_BLOCK_SIZE 3 @@ -63,7 +78,8 @@ #define DNA_MUTANTMARKING_BLOCK 13 #define DNA_TAUR_BLOCK 14 -#define DNA_STRUC_ENZYMES_BLOCKS 18 +#define DNA_SEQUENCE_LENGTH 4 +#define DNA_MUTATION_BLOCKS 8 #define DNA_UNIQUE_ENZYMES_LEN 32 //Transformation proc stuff @@ -140,4 +156,11 @@ ////organ defines #define STANDARD_ORGAN_THRESHOLD 100 #define STANDARD_ORGAN_HEALING 0.001 -#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes \ No newline at end of file +#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes + + + +//used for the can_chromosome var on mutations +#define CHROMOSOME_NEVER 0 +#define CHROMOSOME_NONE 1 +#define CHROMOSOME_USED 2 \ No newline at end of file diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 6d52f4640c..c107bc32df 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -106,3 +106,4 @@ #define STATUS_EFFECT_RAINBOWPROTECTION /datum/status_effect/rainbow_protection //Invulnerable and pacifistic #define STATUS_EFFECT_SLIMESKIN /datum/status_effect/slimeskin //Increased armor +#define STATUS_EFFECT_DNA_MELT /datum/status_effect/dna_melt //usually does something horrible to you when you hit 100 genetic instability diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 439b3d1493..78cc7def60 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -172,6 +172,8 @@ #define TRAIT_ASSBLASTUSA "assblastusa" #define TRAIT_CULT_EYES "cult_eyes" #define TRAIT_FREESPRINT "free_sprinting" +#define TRAIT_XRAY_VISION "xray_vision" +#define TRAIT_THERMAL_VISION "thermal_vision" // common trait sources diff --git a/code/__HELPERS/dna.dm b/code/__HELPERS/dna.dm new file mode 100644 index 0000000000..bb0c89d1f3 --- /dev/null +++ b/code/__HELPERS/dna.dm @@ -0,0 +1,12 @@ +////////////////////////////////////////////////////////// +//A bunch of helpers to make genetics less of a headache// +////////////////////////////////////////////////////////// + +#define GET_INITIALIZED_MUTATION(A) GLOB.all_mutations[A] +#define GET_GENE_STRING(A, B) (B.mutation_index[A]) +#define GET_SEQUENCE(A) (GLOB.full_sequences[A]) + +#define GET_MUTATION_STABILIZER(A) ((A.stabilizer_coeff < 0) ? 1 : A.stabilizer_coeff) +#define GET_MUTATION_SYNCHRONIZER(A) ((A.synchronizer_coeff < 0) ? 1 : A.synchronizer_coeff) +#define GET_MUTATION_POWER(A) ((A.power_coeff < 0) ? 1 : A.power_coeff) +#define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff) \ No newline at end of file diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm index a0557e8e1b..8b567313d8 100644 --- a/code/_globalvars/genetics.dm +++ b/code/_globalvars/genetics.dm @@ -21,8 +21,11 @@ GLOBAL_LIST(op_se_blocks) GLOBAL_VAR(NULLED_SE) GLOBAL_VAR(NULLED_UI) -GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things +GLOBAL_LIST_EMPTY(all_mutations) +GLOBAL_LIST_EMPTY(full_sequences) GLOBAL_LIST_EMPTY(bad_mutations) GLOBAL_LIST_EMPTY(good_mutations) -GLOBAL_LIST_EMPTY(not_good_mutations) \ No newline at end of file +GLOBAL_LIST_EMPTY(not_good_mutations) + +GLOBAL_LIST_EMPTY(mutation_recipes) \ No newline at end of file diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index ebd8d3801f..f4fc0be458 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -16,7 +16,7 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/Initialize(timeofday) GLOB.fire_overlay.appearance_flags = RESET_COLOR - setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation. + setupGenetics() //to set the mutations' sequence. initialized = INITIALIZATION_INNEW_MAPLOAD InitializeAtoms() return ..() @@ -108,16 +108,19 @@ SUBSYSTEM_DEF(atoms) BadInitializeCalls = SSatoms.BadInitializeCalls /datum/controller/subsystem/atoms/proc/setupGenetics() - var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS) - for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) - avnums[i] = i - CHECK_TICK - - for(var/A in subtypesof(/datum/mutation/human)) - var/datum/mutation/human/B = new A() - if(B.dna_block == NON_SCANNABLE) + var/list/mutations = subtypesof(/datum/mutation/human) + shuffle_inplace(mutations) + for(var/A in subtypesof(/datum/generecipe)) + var/datum/generecipe/GR = A + GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result) + for(var/i in 1 to LAZYLEN(mutations)) + var/path = mutations[i] //byond gets pissy when we do it in one line + var/datum/mutation/human/B = new path () + B.alias = "Mutation #[i]" + GLOB.all_mutations[B.type] = B + GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks) + if(B.locked) continue - B.dna_block = pick_n_take(avnums) if(B.quality == POSITIVE) GLOB.good_mutations |= B else if(B.quality == NEGATIVE) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index cf33fa3633..d0c71701ef 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -277,7 +277,6 @@ L.fields["sex"] = H.gender L.fields["blood_type"] = H.dna.blood_type L.fields["b_dna"] = H.dna.unique_enzymes - L.fields["enzymes"] = H.dna.struc_enzymes L.fields["identity"] = H.dna.uni_identity L.fields["species"] = H.dna.species.type L.fields["features"] = H.dna.features diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm index c01fccee13..527fb522cd 100644 --- a/code/datums/diseases/advance/symptoms/genetics.dm +++ b/code/datums/diseases/advance/symptoms/genetics.dm @@ -58,12 +58,12 @@ Bonus symptom_delay_max = 60 if(A.properties["resistance"] >= 8) //mutate twice power = 2 - possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT] + possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.all_mutations[RACEMUT] var/mob/living/carbon/M = A.affected_mob if(M) if(!M.has_dna()) return - archived_dna = M.dna.struc_enzymes + archived_dna = M.dna.mutation_index // Give them back their old DNA when cured. /datum/symptom/genetic_mutation/End(datum/disease/advance/A) @@ -74,5 +74,5 @@ Bonus if(M && archived_dna) if(!M.has_dna()) return - M.dna.struc_enzymes = archived_dna + M.dna.mutation_index = archived_dna M.domutcheck() diff --git a/code/datums/dna.dm b/code/datums/dna.dm index ccc5d97cf8..b585cc0e15 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -2,7 +2,6 @@ /////////////////////////// DNA DATUM /datum/dna var/unique_enzymes - var/struc_enzymes var/uni_identity var/blood_type var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man) @@ -11,10 +10,13 @@ var/nameless = FALSE var/custom_species //siiiiigh I guess this is important var/list/mutations = list() //All mutations are from now on here - var/list/temporary_mutations = list() //Timers for temporary mutations + var/list/temporary_mutations = list() //Temporary changes to the UE var/list/previous = list() //For temporary name/ui/ue/blood_type modifications var/mob/living/holder var/delete_species = TRUE //Set to FALSE when a body is scanned by a cloner to fix #38875 + var/mutation_index[DNA_MUTATION_BLOCKS] //List of which mutations this carbon has and its assigned block + var/stability = 100 + var/scrambled = FALSE //Did we take something like mutagen? In that case we cant get our genes scanned to instantly cheese all the powers. /datum/dna/New(mob/living/new_holder) if(istype(new_holder)) @@ -42,8 +44,8 @@ destination.dna.unique_enzymes = unique_enzymes destination.dna.uni_identity = uni_identity destination.dna.blood_type = blood_type - destination.dna.features = features.Copy() destination.set_species(species.type, icon_update=0) + destination.dna.features = features.Copy() destination.dna.real_name = real_name destination.dna.nameless = nameless destination.dna.custom_species = custom_species @@ -53,11 +55,11 @@ H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA destination.flavor_text = destination.dna.features["flavor_text"] //Update the flavor_text to use new dna text if(transfer_SE) - destination.dna.struc_enzymes = struc_enzymes + destination.dna.mutation_index = mutation_index /datum/dna/proc/copy_dna(datum/dna/new_dna) new_dna.unique_enzymes = unique_enzymes - new_dna.struc_enzymes = struc_enzymes + new_dna.mutation_index = mutation_index new_dna.uni_identity = uni_identity new_dna.blood_type = blood_type new_dna.features = features.Copy() @@ -67,26 +69,32 @@ new_dna.custom_species = custom_species new_dna.mutations = mutations.Copy() -/datum/dna/proc/add_mutation(mutation_name) - var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] - HM.on_acquiring(holder) +//See mutation.dm for what 'class' does. 'time' is time till it removes itself in decimals. 0 for no timer +/datum/dna/proc/add_mutation(mutation, class = MUT_OTHER, time) + var/mutation_type = mutation + if(istype(mutation, /datum/mutation/human)) + var/datum/mutation/human/HM = mutation + mutation_type = HM.type + if(get_mutation(mutation_type)) + return + return force_give(new mutation_type (class, time, copymut = mutation)) -/datum/dna/proc/remove_mutation(mutation_name) - var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] - HM.on_losing(holder) +/datum/dna/proc/remove_mutation(mutation_type) + return force_lose(get_mutation(mutation_type)) -/datum/dna/proc/check_mutation(mutation_name) - var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] - return mutations.Find(HM) +/datum/dna/proc/check_mutation(mutation_type) + return get_mutation(mutation_type) -/datum/dna/proc/remove_all_mutations() - remove_mutation_group(mutations) +/datum/dna/proc/remove_all_mutations(list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE) + remove_mutation_group(mutations, classes, mutadone) + scrambled = FALSE -/datum/dna/proc/remove_mutation_group(list/group) +/datum/dna/proc/remove_mutation_group(list/group, list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE) if(!group) return for(var/datum/mutation/human/HM in group) - HM.force_lose(holder) + if((HM.class in classes) && !(HM.mutadone_proof && mutadone)) + force_lose(HM) /datum/dna/proc/generate_uni_identity() . = "" @@ -128,19 +136,49 @@ . += random_string(DNA_BLOCK_SIZE,GLOB.hex_characters) return . -/datum/dna/proc/generate_struc_enzymes() - var/list/sorting = new /list(DNA_STRUC_ENZYMES_BLOCKS) - var/result = "" - for(var/datum/mutation/human/A in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations) - if(A.name == RACEMUT && ismonkey(holder)) - sorting[A.dna_block] = num2hex(A.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE) - mutations |= A - else - sorting[A.dna_block] = random_string(DNA_BLOCK_SIZE, list("0","1","2","3","4","5","6")) +/datum/dna/proc/generate_dna_blocks() + var/bonus + if(species && species.inert_mutation) + bonus = GET_INITIALIZED_MUTATION(species.inert_mutation) + var/list/mutations_temp = GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations + bonus + if(!LAZYLEN(mutations_temp)) + return + mutation_index.Cut() + shuffle_inplace(mutations_temp) + if(ismonkey(holder)) + mutations |= new RACEMUT(MUT_NORMAL) + mutation_index[RACEMUT] = GET_SEQUENCE(RACEMUT) + else + mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE) + for(var/i in 2 to DNA_MUTATION_BLOCKS) + var/datum/mutation/human/M = mutations_temp[i] + mutation_index[M.type] = create_sequence(M.type, FALSE,M.difficulty) + shuffle_inplace(mutation_index) - for(var/B in sorting) - result += B - return result +//Used to generate original gene sequences for every mutation +/proc/generate_gene_sequence(length=4) + var/static/list/active_sequences = list("AT","TA","GC","CG") + var/sequence + for(var/i in 1 to length*DNA_SEQUENCE_LENGTH) + sequence += pick(active_sequences) + return sequence + +//Used to create a chipped gene sequence +/proc/create_sequence(mutation, active, difficulty) + if(!difficulty) + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(mutation) //leaves the possibility to change difficulty mid-round + if(!A) + return + difficulty = A.difficulty + difficulty += rand(-2,4) + var/sequence = GET_SEQUENCE(mutation) + if(active) + return sequence + while(difficulty) + var/randnum = rand(1, length(sequence)) + sequence = copytext(sequence, 1, randnum) + "X" + copytext(sequence, randnum+1, length(sequence)+1) + difficulty-- + return sequence /datum/dna/proc/generate_unique_enzymes() . = "" @@ -185,12 +223,57 @@ if(DNA_TAUR_BLOCK) construct_block(GLOB.taur_list.Find(features["taur"]), GLOB.taur_list.len) +//Please use add_mutation or activate_mutation instead +/datum/dna/proc/force_give(datum/mutation/human/HM) + if(holder && HM) + if(HM.class == MUT_NORMAL) + set_se(1, HM) + . = HM.on_acquiring(holder) + if(.) + qdel(HM) + update_instability() + +//Use remove_mutation instead +/datum/dna/proc/force_lose(datum/mutation/human/HM) + if(holder && (HM in mutations)) + set_se(0, HM) + . = HM.on_losing(holder) + update_instability(FALSE) + return + /datum/dna/proc/is_same_as(datum/dna/D) - if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species) + if(uni_identity == D.uni_identity && mutation_index == D.mutation_index && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species) if(species.type == D.species.type && features == D.features && blood_type == D.blood_type) return 1 return 0 +/datum/dna/proc/update_instability(alert=TRUE) + stability = 100 + for(var/datum/mutation/human/M in mutations) + if(M.class == MUT_EXTRA) + stability -= M.instability * GET_MUTATION_STABILIZER(M) + if(holder) + var/message + if(alert) + switch(stability) + if(70 to 90) + message = "You shiver." + if(60 to 69) + message = "You feel cold." + if(40 to 59) + message = "You feel sick." + if(20 to 39) + message = "It feels like your skin is moving." + if(1 to 19) + message = "You can feel your cells burning." + if(-INFINITY to 0) + message = "You can feel your DNA exploding, we need to do something fast!" + if(stability <= 0) + holder.apply_status_effect(STATUS_EFFECT_DNA_MELT) + if(message) + to_chat(holder, message) + + //used to update dna UI, UE, and dna.real_name. /datum/dna/proc/update_dna_identity() uni_identity = generate_uni_identity() @@ -201,7 +284,7 @@ blood_type = newblood_type unique_enzymes = generate_unique_enzymes() uni_identity = generate_uni_identity() - struc_enzymes = generate_struc_enzymes() + generate_dna_blocks() features = random_features() @@ -254,6 +337,7 @@ if(icon_update) update_body() update_hair() + update_body_parts() update_mutations_overlay()// no lizard with human hulk overlay please. @@ -264,7 +348,7 @@ return dna -/mob/living/carbon/human/proc/hardset_dna(ui, se, newreal_name, newblood_type, datum/species/mrace, newfeatures) +/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures) if(newfeatures) dna.features = newfeatures @@ -286,8 +370,8 @@ dna.uni_identity = ui updateappearance(icon_update=0) - if(se) - dna.struc_enzymes = se + if(LAZYLEN(mutation_index)) + dna.mutation_index = mutation_index.Copy() domutcheck() if(mrace || newfeatures || ui) @@ -330,19 +414,63 @@ /mob/proc/domutcheck() return -/mob/living/carbon/domutcheck(force_powers=0) //Set force_powers to 1 to bypass the power chance +/mob/living/carbon/domutcheck() if(!has_dna()) return - for(var/datum/mutation/human/A in GLOB.good_mutations | GLOB.bad_mutations | GLOB.not_good_mutations) - if(ismob(A.check_block(src, force_powers))) + for(var/mutation in dna.mutation_index) + if(ismob(dna.check_block(mutation))) return //we got monkeyized/humanized, this mob will be deleted, no need to continue. update_mutations_overlay() +/datum/dna/proc/check_block(mutation) + var/datum/mutation/human/HM = get_mutation(mutation) + if(check_block_string(mutation)) + if(!HM) + . = add_mutation(mutation, MUT_NORMAL) + return + return force_lose(HM) + +//Return the active mutation of a type if there is one +/datum/dna/proc/get_mutation(A) + for(var/datum/mutation/human/HM in mutations) + if(HM.type == A) + return HM + +/datum/dna/proc/check_block_string(mutation) + if((LAZYLEN(mutation_index) > DNA_MUTATION_BLOCKS) || !(mutation in mutation_index)) + return 0 + return is_gene_active(mutation) + +/datum/dna/proc/is_gene_active(mutation) + return (mutation_index[mutation] == GET_SEQUENCE(mutation)) + +/datum/dna/proc/set_se(on=TRUE, datum/mutation/human/HM) + if(!HM || !(HM.type in mutation_index) || (LAZYLEN(mutation_index) < DNA_MUTATION_BLOCKS)) + return + . = TRUE + if(on) + mutation_index[HM.type] = GET_SEQUENCE(HM.type) + else if(GET_SEQUENCE(HM.type) == mutation_index[HM.type]) + mutation_index[HM.type] = create_sequence(HM.type, FALSE, HM.difficulty) + +/datum/dna/proc/activate_mutation(mutation) //note that this returns a boolean and not a new mob + if(!mutation) + return FALSE + var/mutation_type = mutation + if(istype(mutation, /datum/mutation/human)) + var/datum/mutation/human/M = mutation + mutation_type = M.type + if(!mutation_in_sequence(mutation_type)) //cant activate what we dont have, use add_mutation + return FALSE + add_mutation(mutation, MUT_NORMAL) + return TRUE + /////////////////////////// DNA HELPER-PROCS ////////////////////////////// + /proc/getleftblocks(input,blocknumber,blocksize) if(blocknumber > 1) return copytext(input,1,((blocksize*blocknumber)-(blocksize-1))) @@ -359,29 +487,47 @@ return 0 return getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize) +/datum/dna/proc/mutation_in_sequence(mutation) + if(!mutation) + return + if(istype(mutation, /datum/mutation/human)) + var/datum/mutation/human/HM = mutation + if(HM.type in mutation_index) + return TRUE + else if(mutation in mutation_index) + return TRUE + /mob/living/carbon/proc/randmut(list/candidates, difficulty = 2) if(!has_dna()) return - var/datum/mutation/human/num = pick(candidates) - . = num.force_give(src) + var/mutation = pick(candidates) + . = dna.add_mutation(mutation) -/mob/living/carbon/proc/randmutb() +/mob/living/carbon/proc/easy_randmut(quality = POSITIVE + NEGATIVE + MINOR_NEGATIVE, scrambled = TRUE, sequence = TRUE, exclude_monkey = TRUE) if(!has_dna()) return - var/datum/mutation/human/HM = pick((GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT]) - . = HM.force_give(src) + var/list/mutations = list() + if(quality & POSITIVE) + mutations += GLOB.good_mutations + if(quality & NEGATIVE) + mutations += GLOB.bad_mutations + if(quality & MINOR_NEGATIVE) + mutations += GLOB.not_good_mutations + var/list/possible = list() + for(var/datum/mutation/human/A in mutations) + if((!sequence || dna.mutation_in_sequence(A.type)) && !dna.get_mutation(A.type)) + possible += A.type + if(exclude_monkey) + possible.Remove(RACEMUT) + if(LAZYLEN(possible)) + var/mutation = pick(possible) + . = dna.activate_mutation(mutation) + if(scrambled) + var/datum/mutation/human/HM = dna.get_mutation(mutation) + if(HM) + HM.scrambled = TRUE + return TRUE -/mob/living/carbon/proc/randmutg() - if(!has_dna()) - return - var/datum/mutation/human/HM = pick(GLOB.good_mutations) - . = HM.force_give(src) - -/mob/living/carbon/proc/randmutvg() - if(!has_dna()) - return - var/datum/mutation/human/HM = pick((GLOB.good_mutations) - GLOB.mutations_list[HULK] - GLOB.mutations_list[DWARFISM]) - . = HM.force_give(src) /mob/living/carbon/proc/randmuti() if(!has_dna()) @@ -404,9 +550,9 @@ if(!M.has_dna()) return 0 if(se) - for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) + for(var/i=1, i<=DNA_MUTATION_BLOCKS, i++) if(prob(probability)) - M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters)) + M.dna.generate_dna_blocks() M.domutcheck() if(ui) for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++) @@ -433,3 +579,41 @@ return value /////////////////////////// DNA HELPER-PROCS + +/mob/living/carbon/human/proc/something_horrible() + if(!has_dna()) //shouldn't ever happen anyway so it's just in really weird cases + return + if(dna.stability > 0) + return + var/instability = -dna.stability + dna.remove_all_mutations() + dna.stability = 100 + if(prob(max(70-instability,0))) + switch(rand(0,3)) //not complete and utter death + if(0) + monkeyize() + if(1) + gain_trauma(/datum/brain_trauma/severe/paralysis) + if(2) + corgize() + if(3) + to_chat(src, "Oh, we actually feel quite alright!") + else + switch(rand(0,3)) + if(0) + gib() + if(1) + dust() + + if(2) + death() + petrify(INFINITY) + if(3) + if(prob(90)) + var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD)) + if(BP) + BP.dismember() + else + gib() + else + set_species(/datum/species/dullahan) diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index f689ff903e..9234e124c5 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -1,58 +1,55 @@ -GLOBAL_LIST_EMPTY(mutations_list) - /datum/mutation var/name -/datum/mutation/New() - GLOB.mutations_list[name] = src - /datum/mutation/human - var/dna_block + name = "mutation" + var/desc = "A mutation." + var/locked var/quality var/get_chance = 100 var/lowest_value = 256 * 8 var/text_gain_indication = "" var/text_lose_indication = "" var/list/mutable_appearance/visual_indicators = list() + var/obj/effect/proc_holder/spell/power var/layer_used = MUTATIONS_LAYER //which mutation layer to use var/list/species_allowed = list() //to restrict mutation to only certain species var/health_req //minimum health required to acquire the mutation var/limb_req //required limbs to acquire this mutation var/time_coeff = 1 //coefficient for timed mutations + var/datum/dna/dna + var/mob/living/carbon/human/owner + var/instability = 0 //instability the holder gets when the mutation is not native + var/blocks = 4 //Amount of those big blocks with gene sequences + var/difficulty = 8 //Amount of missing sequences. Sometimes it removes an entire pair for 2 points + var/timed = FALSE //Boolean to easily check if we're going to self destruct + var/alias //'Mutation #49', decided every round to get some form of distinction between undiscovered mutations + var/scrambled = FALSE //Wheter we can read it if it's active. To avoid cheesing with mutagen + var/class //Decides player accesibility, sorta + //MUT_NORMAL - A mutation that can be activated and deactived by completing a sequence + //MUT_EXTRA - A mutation that is in the mutations tab, and can be given and taken away through though the DNA console. Has a 0 before it's name in the mutation section of the dna console + //MUT_OTHER Cannot be interacted with by players through normal means. I.E. wizards mutate -/datum/mutation/human/proc/force_give(mob/living/carbon/human/owner) - set_block(owner) - . = on_acquiring(owner) + var/can_chromosome = CHROMOSOME_NONE //can we take chromosomes? 0: CHROMOSOME_NEVER never, 1:CHROMOSOME_NONE yeah, 2: CHROMOSOME_USED no, already have one + var/chromosome_name //purely cosmetic + var/modified = FALSE //ugly but we really don't want chromosomes and on_acquiring to overlap and apply double the powers + var/mutadone_proof = FALSE -/datum/mutation/human/proc/force_lose(mob/living/carbon/human/owner) - set_block(owner, 0) - . = on_losing(owner) + //Chromosome stuff - set to -1 to prevent people from changing it. Example: It'd be a waste to decrease cooldown on mutism + var/stabilizer_coeff = 1 //genetic stability coeff + var/synchronizer_coeff = -1 //makes the mutation hurt the user less + var/power_coeff = -1 //boosts mutation strength + var/energy_coeff = -1 //lowers mutation cooldown -/datum/mutation/human/proc/set_se(se_string, on = 1) - if(!se_string || length(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) - return - var/before = copytext(se_string, 1, ((dna_block - 1) * DNA_BLOCK_SIZE) + 1) - var/injection = num2hex(on ? rand(lowest_value, (256 * 16) - 1) : rand(0, lowest_value - 1), DNA_BLOCK_SIZE) - var/after = copytext(se_string, (dna_block * DNA_BLOCK_SIZE) + 1, 0) - return before + injection + after - -/datum/mutation/human/proc/set_block(mob/living/carbon/owner, on = 1) - if(owner && owner.has_dna()) - owner.dna.struc_enzymes = set_se(owner.dna.struc_enzymes, on) - -/datum/mutation/human/proc/check_block_string(se_string) - if(!se_string || length(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) - return 0 - if(hex2num(getblock(se_string, dna_block)) >= lowest_value) - return 1 - -/datum/mutation/human/proc/check_block(mob/living/carbon/human/owner, force_powers=0) - if(check_block_string(owner.dna.struc_enzymes)) - if(prob(get_chance)||force_powers) - . = on_acquiring(owner) - else - . = on_losing(owner) +/datum/mutation/human/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + . = ..() + class = class_ + if(timer) + addtimer(CALLBACK(src, .proc/remove), timer) + timed = TRUE + if(copymut && istype(copymut, /datum/mutation/human)) + copy_mutation(copymut) /datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/owner) if(!owner || !istype(owner) || owner.stat == DEAD || (src in owner.dna.mutations)) @@ -63,7 +60,8 @@ GLOBAL_LIST_EMPTY(mutations_list) return TRUE if(limb_req && !owner.get_bodypart(limb_req)) return TRUE - owner.dna.mutations.Add(src) + dna = owner.dna + dna.mutations += src if(text_gain_indication) to_chat(owner, text_gain_indication) if(visual_indicators.len) @@ -75,6 +73,10 @@ GLOBAL_LIST_EMPTY(mutations_list) owner.overlays_standing[layer_used] = mut_overlay owner.apply_overlay(layer_used) + grant_spell(owner) + if(!modified) + addtimer(CALLBACK(src, .proc/modify, 5)) //gonna want children calling ..() to run first + /datum/mutation/human/proc/get_visual_indicator(mob/living/carbon/human/owner) return @@ -102,26 +104,80 @@ GLOBAL_LIST_EMPTY(mutations_list) mut_overlay.Remove(get_visual_indicator(owner)) owner.overlays_standing[layer_used] = mut_overlay owner.apply_overlay(layer_used) + if(power) + owner.RemoveSpell(power) + qdel(src) return 0 return 1 +/datum/mutation/human/proc/say_mod(message) + if(message) + return message + +/datum/mutation/human/proc/get_spans() + return list() + /mob/living/carbon/proc/update_mutations_overlay() return /mob/living/carbon/human/update_mutations_overlay() for(var/datum/mutation/human/CM in dna.mutations) if(CM.species_allowed.len && !CM.species_allowed.Find(dna.species.id)) - CM.force_lose(src) //shouldn't have that mutation at all + dna.force_lose(CM) //shouldn't have that mutation at all continue if(CM.visual_indicators.len) var/list/mut_overlay = list() if(overlays_standing[CM.layer_used]) mut_overlay = overlays_standing[CM.layer_used] - var/mutable_appearance/V = CM.get_visual_indicator(src) + var/mutable_appearance/V = CM.get_visual_indicator() if(!mut_overlay.Find(V)) //either we lack the visual indicator or we have the wrong one remove_overlay(CM.layer_used) - for(var/mutable_appearance/MA in CM.visual_indicators) + for(var/mutable_appearance/MA in CM.visual_indicators[CM.type]) mut_overlay.Remove(MA) mut_overlay |= V overlays_standing[CM.layer_used] = mut_overlay apply_overlay(CM.layer_used) + + +/datum/mutation/human/proc/modify() //called when a genome is applied so we can properly update some stats without having to remove and reapply the mutation from someone + if(modified || !power || !owner) + return + power.charge_max *= GET_MUTATION_ENERGY(src) + power.charge_counter *= GET_MUTATION_ENERGY(src) + modified = TRUE + +/datum/mutation/human/proc/copy_mutation(datum/mutation/human/HM) + if(!HM) + return + chromosome_name = HM.chromosome_name + stabilizer_coeff = HM.stabilizer_coeff + synchronizer_coeff = HM.synchronizer_coeff + power_coeff = HM.power_coeff + energy_coeff = HM.energy_coeff + mutadone_proof = HM.mutadone_proof + can_chromosome = HM.can_chromosome + +/datum/mutation/human/proc/remove_chromosome() + stabilizer_coeff = initial(stabilizer_coeff) + synchronizer_coeff = initial(synchronizer_coeff) + power_coeff = initial(power_coeff) + energy_coeff = initial(energy_coeff) + mutadone_proof = initial(mutadone_proof) + can_chromosome = initial(can_chromosome) + chromosome_name = null + +/datum/mutation/human/proc/remove() + if(dna) + dna.force_lose(src) + else + qdel(src) + +/datum/mutation/human/proc/grant_spell(mob/living/carbon/human/owner) + if(!ispath(power) || !owner) + return FALSE + + power = new power() + power.action_background_icon_state = "bg_tech_blue_on" + power.panel = "Genetic" + owner.AddSpell(power) + return TRUE \ No newline at end of file diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm new file mode 100644 index 0000000000..44187cc964 --- /dev/null +++ b/code/datums/mutations/actions.dm @@ -0,0 +1,169 @@ +/datum/mutation/human/telepathy + name = "Telepathy" + desc = "A rare mutation that allows the user to telepathically communicate to others." + quality = POSITIVE + text_gain_indication = "You can hear your own voice echoing in your mind!" + text_lose_indication = "You don't hear your mind echo anymore." + difficulty = 12 + power = /obj/effect/proc_holder/spell/targeted/telepathy/genetic + instability = 10 + energy_coeff = 1 + +/datum/mutation/human/telepathy/on_acquiring(mob/living/carbon/human/owner) + . = ..() + +/datum/mutation/human/telepathy/on_losing(mob/living/carbon/human/owner) + . = ..() + +/obj/effect/proc_holder/spell/targeted/telepathy/genetic + magic_check = FALSE + +/datum/mutation/human/firebreath + name = "Fire Breath" + desc = "An ancient mutation that gives lizards breath of fire." + quality = POSITIVE + difficulty = 12 + locked = TRUE + text_gain_indication = "Your throat is burning!" + text_lose_indication = "Your throat is cooling down." + power = /obj/effect/proc_holder/spell/aimed/firebreath + instability = 30 + energy_coeff = 1 + power_coeff = 1 + +/datum/mutation/human/firebreath/modify() + if(power) + var/obj/effect/proc_holder/spell/aimed/firebreath/S = power + S.strength = GET_MUTATION_POWER(src) + +/obj/effect/proc_holder/spell/aimed/firebreath + name = "Fire Breath" + desc = "You can breathe fire at a target." + school = "evocation" + charge_max = 1200 + clothes_req = FALSE + range = 20 + projectile_type = /obj/item/projectile/magic/aoe/fireball/firebreath + base_icon_state = "fireball" + action_icon_state = "fireball0" + sound = 'sound/magic/demon_dies.ogg' //horrifying lizard noises + active_msg = "You built up heat in your mouth." + deactive_msg = "You swallow the flame." + var/strength = 1 + +/obj/effect/proc_holder/spell/aimed/firebreath/before_cast(list/targets) + . = ..() + if(iscarbon(usr)) + var/mob/living/carbon/C = usr + if(C.is_mouth_covered()) + C.adjust_fire_stacks(2) + C.IgniteMob() + to_chat(C,"Something in front of your mouth caught fire!") + return FALSE + +/obj/effect/proc_holder/spell/aimed/firebreath/ready_projectile(obj/item/projectile/P, atom/target, mob/user, iteration) + if(!istype(P, /obj/item/projectile/magic/aoe/fireball)) + return + var/obj/item/projectile/magic/aoe/fireball/F = P + switch(strength) + if(1 to 3) + F.exp_light = strength-1 + if(4 to INFINITY) + F.exp_heavy = strength-3 + F.exp_fire += strength + + +/obj/item/projectile/magic/aoe/fireball/firebreath + name = "fire breath" + exp_heavy = 0 + exp_light = 0 + exp_flash = 0 + exp_fire= 4 + +/datum/mutation/human/void + name = "Void Magnet" + desc = "A rare genome that attracts odd forces not usually observed." + quality = MINOR_NEGATIVE //upsides and downsides + text_gain_indication = "You feel a heavy, dull force just beyond the walls watching you." + instability = 30 + power = /obj/effect/proc_holder/spell/self/void + energy_coeff = 1 + synchronizer_coeff = 1 + +/datum/mutation/human/void/on_life(mob/living/carbon/human/owner) + if(!isturf(owner.loc)) + return + if(prob((0.5+((100-dna.stability)/20))) * GET_MUTATION_SYNCHRONIZER(src)) //very rare, but enough to annoy you hopefully. +0.5 probability for every 10 points lost in stability + new /obj/effect/immortality_talisman/void(get_turf(owner), owner) + +/obj/effect/proc_holder/spell/self/void + name = "Convoke Void" //magic the gathering joke here + desc = "A rare genome that attracts odd forces not usually observed. May sometimes pull you in randomly." + school = "evocation" + clothes_req = FALSE + charge_max = 600 + invocation = "DOOOOOOOOOOOOOOOOOOOOM!!!" + invocation_type = "shout" + action_icon_state = "void_magnet" + var/in_use = FALSE //so it doesnt cast while you are already deep innit + +/obj/effect/proc_holder/spell/self/void/can_cast(mob/user = usr) + . = ..() + if(!isturf(user.loc)) + return FALSE + +/obj/effect/proc_holder/spell/self/void/cast(mob/user = usr) + . = ..() + new /obj/effect/immortality_talisman/void(get_turf(user), user) + +/datum/mutation/human/shock + name = "Shock Touch" + desc = "The affected can channel excess electricity through their hands without shocking themselves, allowing them to shock others." + quality = POSITIVE + locked = TRUE + difficulty = 16 + text_gain_indication = "You feel power flow through your hands." + text_lose_indication = "The energy in your hands subsides." + power = /obj/effect/proc_holder/spell/targeted/touch/shock + instability = 30 + +/obj/effect/proc_holder/spell/targeted/touch/shock + name = "Shock Touch" + desc = "Channel electricity to your hand to shock people with." + drawmessage = "You channel electricity into your hand." + dropmessage = "You let the electricity from your hand dissipate." + hand_path = /obj/item/melee/touch_attack/shock + charge_max = 400 + clothes_req = FALSE + action_icon_state = "zap" + +/obj/item/melee/touch_attack/shock + name = "\improper shock touch" + desc = "This is kind of like when you rub your feet on a shag rug so you can zap your friends, only a lot less safe." + catchphrase = null + on_use_sound = 'sound/weapons/zapbang.ogg' + icon_state = "zapper" + item_state = "zapper" + +/obj/item/melee/touch_attack/shock/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !isliving(target)) + return + if(iscarbon(target)) + var/mob/living/carbon/C = target + if(C.electrocute_act(15, user, 1, stun = 0))//doesnt stun. never let this stun + C.dropItemToGround(C.get_active_held_item()) + C.dropItemToGround(C.get_inactive_held_item()) + C.confused += 10 + C.visible_message("[user] electrocutes [target]!","[user] electrocutes you!") + return ..() + else + user.visible_message("[user] fails to electrocute [target]!") + return ..() + else if(isliving(target)) + var/mob/living/L = target + L.electrocute_act(15, user, 1, stun = 0) + L.visible_message("[user] electrocutes [target]!","[user] electrocutes you!") + return ..() + else + to_chat(user,"The electricity doesn't seem to affect [target]...") + return ..() \ No newline at end of file diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm new file mode 100644 index 0000000000..7e06a91726 --- /dev/null +++ b/code/datums/mutations/antenna.dm @@ -0,0 +1,107 @@ +/datum/mutation/human/antenna + name = "Antenna" + desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively." + quality = POSITIVE + text_gain_indication = "You feel an antenna sprout from your forehead." + text_lose_indication = "Your antenna shrinks back down." + instability = 5 + difficulty = 8 + var/obj/item/implant/radio/antenna/linked_radio + +/obj/item/implant/radio/antenna + name = "internal antenna organ" + desc = "The internal organ part of the antenna. Science has not yet given it a good name." + icon = 'icons/obj/radio.dmi'//maybe make a unique sprite later. not important + icon_state = "walkietalkie" + +/obj/item/implant/radio/antenna/Initialize(mapload) + ..() + radio.name = "internal antenna" + +/datum/mutation/human/antenna/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + linked_radio = new(owner) + linked_radio.implant(owner, null, TRUE, TRUE) + +/datum/mutation/human/antenna/on_losing(mob/living/carbon/human/owner) + if(..()) + return + if(linked_radio) + linked_radio.Destroy() + +/datum/mutation/human/antenna/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + ..() + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))//-MUTATIONS_LAYER+1 + +/datum/mutation/human/antenna/get_visual_indicator(mob/living/carbon/human/owner) + return visual_indicators[type][1] + +/datum/mutation/human/mindreader + name = "Mind Reader" + desc = "The affected person can look into the recent memories of others." + quality = POSITIVE + text_gain_indication = "You hear distant voices at the corners of your mind." + text_lose_indication = "The distant voices fade." + power = /obj/effect/proc_holder/spell/targeted/mindread + instability = 40 + difficulty = 8 + locked = TRUE + +/obj/effect/proc_holder/spell/targeted/mindread + name = "Mindread" + desc = "Read the target's mind." + charge_max = 300 + range = 7 + clothes_req = FALSE + action_icon_state = "mindread" + +/obj/effect/proc_holder/spell/targeted/mindread/cast(list/targets, mob/living/carbon/human/user = usr) + for(var/mob/living/M in targets) + if(usr.anti_magic_check(FALSE, FALSE, TRUE, 0) || M.anti_magic_check(FALSE, FALSE, TRUE, 0)) + to_chat(usr, "As you reach out with your mind, you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.") + return + if(M.stat == DEAD) + to_chat(user, "[M] is dead!") + return + if(M.mind) + to_chat(user, "You plunge into [M]'s mind...") + if(prob(20)) + to_chat(M, "You feel something foreign enter your mind.")//chance to alert the read-ee + var/list/recent_speech = list() + var/list/say_log = list() + var/log_source = M.logging + for(var/log_type in log_source)//this whole loop puts the read-ee's say logs into say_log in an easy to access way + var/nlog_type = text2num(log_type) + if(nlog_type & LOG_SAY) + var/list/reversed = log_source[log_type] + if(islist(reversed)) + say_log = reverseRange(reversed.Copy()) + break + if(LAZYLEN(say_log)) + for(var/spoken_memory in say_log) + if(recent_speech.len >= 3)//up to 3 random lines of speech, favoring more recent speech + break + if(prob(50)) + recent_speech[spoken_memory] = say_log[spoken_memory] + if(recent_speech.len) + to_chat(user, "You catch some drifting memories of their past conversations...") + for(var/spoken_memory in recent_speech) + to_chat(user, "[recent_speech[spoken_memory]]") + if(iscarbon(M)) + var/mob/living/carbon/human/H = M + to_chat(user, "You find that their intent is to [H.a_intent]...") + var/datum/dna/the_dna = H.has_dna() + if(the_dna) + to_chat(user, "You uncover that [H.p_their()] true identity is [the_dna.real_name].") + else + to_chat(user, "You can't find a mind to read inside of [M]!") + +/datum/mutation/human/mindreader/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + ..() + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1)) + +/datum/mutation/human/mindreader/get_visual_indicator(mob/living/carbon/human/owner) + return visual_indicators[type][1] \ No newline at end of file diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index a32220aa43..399b822dce 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -3,16 +3,19 @@ //Epilepsy gives a very small chance to have a seizure every life tick, knocking you unconscious. /datum/mutation/human/epilepsy name = "Epilepsy" + desc = "A genetic defect that sporadically causes seizures." quality = NEGATIVE text_gain_indication = "You get a headache." + synchronizer_coeff = 1 + power_coeff = 1 /datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner) - if(prob(1) && owner.stat == CONSCIOUS) + if(prob(1 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS) owner.visible_message("[owner] starts having a seizure!", "You have a seizure!") - owner.Unconscious(200) - owner.Jitter(1000) + owner.Unconscious(200 * GET_MUTATION_POWER(src)) + owner.Jitter(1000 * GET_MUTATION_POWER(src)) SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy) - addtimer(CALLBACK(src, .proc/jitter_less, owner), 90) + addtimer(CALLBACK(src, .proc/jitter_less), 90) /datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner) if(owner) @@ -22,19 +25,23 @@ //Unstable DNA induces random mutations! /datum/mutation/human/bad_dna name = "Unstable DNA" + desc = "Strange mutation that causes the holder to randomly mutate." quality = NEGATIVE text_gain_indication = "You feel strange." + locked = TRUE /datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return to_chat(owner, text_gain_indication) var/mob/new_mob if(prob(95)) if(prob(50)) - new_mob = owner.randmutb() + new_mob = owner.easy_randmut(NEGATIVE + MINOR_NEGATIVE) else new_mob = owner.randmuti() else - new_mob = owner.randmutg() + new_mob = owner.easy_randmut(POSITIVE) if(new_mob && ismob(new_mob)) owner = new_mob . = owner @@ -44,21 +51,31 @@ //Cough gives you a chronic cough that causes you to drop items. /datum/mutation/human/cough name = "Cough" + desc = "A chronic cough." quality = MINOR_NEGATIVE text_gain_indication = "You start coughing." + synchronizer_coeff = 1 + power_coeff = 1 /datum/mutation/human/cough/on_life(mob/living/carbon/human/owner) - if(prob(5) && owner.stat == CONSCIOUS) + if(prob(5 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS) owner.drop_all_held_items() owner.emote("cough") + if(GET_MUTATION_POWER(src) > 1) + var/cough_range = GET_MUTATION_POWER(src) * 4 + var/turf/target = get_ranged_target_turf(owner, turn(owner.dir, 180), cough_range) + owner.throw_at(target, cough_range, GET_MUTATION_POWER(src)) + //Dwarfism shrinks your body and lets you pass tables. /datum/mutation/human/dwarfism name = "Dwarfism" + desc = "A mutation believed to be the cause of dwarfism." quality = POSITIVE - get_chance = 15 - lowest_value = 256 * 12 + difficulty = 16 + instability = 5 + locked = TRUE // Default intert species for now, so locked from regular pool. /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -78,6 +95,7 @@ //Clumsiness has a very large amount of small drawbacks depending on item. /datum/mutation/human/clumsy name = "Clumsiness" + desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk" quality = MINOR_NEGATIVE text_gain_indication = "You feel lightheaded." @@ -95,11 +113,13 @@ //Tourettes causes you to randomly stand in place and shout. /datum/mutation/human/tourettes name = "Tourette's Syndrome" + desc = "A chronic twitch that forces the user to use colorful language." quality = NEGATIVE text_gain_indication = "You twitch." + synchronizer_coeff = 1 /datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner) - if(prob(10) && owner.stat == CONSCIOUS && !owner.IsStun()) + if(prob(10 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS && !owner.IsStun()) owner.Stun(200) switch(rand(1, 3)) if(1) @@ -117,6 +137,7 @@ //Deafness makes you deaf. /datum/mutation/human/deaf name = "Deafness" + desc = "The holder of this genome is completely deaf." quality = NEGATIVE text_gain_indication = "You can't seem to hear anything." @@ -134,8 +155,10 @@ //Monified turns you into a monkey. /datum/mutation/human/race name = "Monkified" + desc = "A strange genome, believing to be what differentiates monkeys from humans." quality = NEGATIVE time_coeff = 2 + locked = TRUE //Species specific, keep out of actual gene pool /datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -145,3 +168,95 @@ /datum/mutation/human/race/on_losing(mob/living/carbon/monkey/owner) if(owner && istype(owner) && owner.stat != DEAD && (owner.dna.mutations.Remove(src))) . = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) + + +/datum/mutation/human/glow + name = "Glowy" + desc = "You permanently emit a light with a random color and intensity." + quality = POSITIVE + text_gain_indication = "Your skin begins to glow softly." + instability = 5 + var/obj/effect/dummy/luminescent_glow/glowth //shamelessly copied from luminescents + var/glow = 1.5 + power_coeff = 1 + +/datum/mutation/human/glow/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + glowth = new(owner) + glowth.set_light(glow, glow, dna.features["mcolor"]) + +/datum/mutation/human/glow/modify(mob/living/carbon/human/owner) + if(glowth) + glowth.set_light(glow + GET_MUTATION_POWER(src) , glow + GET_MUTATION_POWER(src), dna.features["mcolor"]) + +/datum/mutation/human/glow/on_losing(mob/living/carbon/human/owner) + if(..()) + return + qdel(glowth) + +/datum/mutation/human/strong + name = "Strength" + desc = "The user's muscles slightly expand." + quality = POSITIVE + text_gain_indication = "You feel strong." + difficulty = 16 + +/datum/mutation/human/fire + name = "Fiery Sweat" + desc = "The user's skin will randomly combust, but is generally alot more resilient to burning." + quality = NEGATIVE + text_gain_indication = "You feel hot." + text_lose_indication = "You feel a lot cooler." + difficulty = 14 + synchronizer_coeff = 1 + power_coeff = 1 + +/datum/mutation/human/fire/on_life(mob/living/carbon/human/owner) + if(prob((1+(100-dna.stability)/10)) * GET_MUTATION_SYNCHRONIZER(src)) + owner.adjust_fire_stacks(2 * GET_MUTATION_POWER(src)) + owner.IgniteMob() + +/datum/mutation/human/fire/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + owner.physiology.burn_mod *= 0.5 + +/datum/mutation/human/fire/on_losing(mob/living/carbon/human/owner) + if(..()) + return + owner.physiology.burn_mod *= 2 + +/datum/mutation/human/insulated + name = "Insulated" + desc = "The affected person does not conduct electricity." + quality = POSITIVE + text_gain_indication = "Your fingertips go numb." + text_lose_indication = "Your fingertips regain feeling." + difficulty = 16 + instability = 25 + +/datum/mutation/human/insulated/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "genetics") + +/datum/mutation/human/insulated/on_losing(mob/living/carbon/human/owner) + if(..()) + return + REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "genetics") + +/datum/mutation/human/paranoia + name = "Paranoia" + desc = "Subject is easily terrified, and may suffer from hallucinations." + quality = NEGATIVE + text_gain_indication = "You feel screams echo through your mind..." + text_lose_indication = "The screaming in your mind fades." + +/datum/mutation/human/paranoia/on_life(mob/living/carbon/human/owner) + if(prob(5) && owner.stat == CONSCIOUS) + owner.emote("scream") + owner.jitteriness = min(max(0, owner.jitteriness + 5), 30) + if(prob(25)) + to_chat(owner,"You feel someone creeping in on you...") + owner.hallucination += 20 \ No newline at end of file diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm index da10510970..7682351ebf 100644 --- a/code/datums/mutations/chameleon.dm +++ b/code/datums/mutations/chameleon.dm @@ -1,12 +1,13 @@ //Chameleon causes the owner to slowly become transparent when not moving. /datum/mutation/human/chameleon name = "Chameleon" + desc = "A genome that causes the holder's skin to become transparent over time." quality = POSITIVE - get_chance = 20 - lowest_value = 256 * 12 + difficulty = 16 text_gain_indication = "You feel one with your surroundings." text_lose_indication = "You feel oddly exposed." time_coeff = 5 + instability = 25 /datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner) if(..()) diff --git a/code/datums/mutations/cold_resistance.dm b/code/datums/mutations/cold_resistance.dm index 3d8fbababa..4b6beb7b00 100644 --- a/code/datums/mutations/cold_resistance.dm +++ b/code/datums/mutations/cold_resistance.dm @@ -1,32 +1,29 @@ //Cold Resistance gives your entire body an orange halo, and makes you immune to the effects of vacuum and cold. -/datum/mutation/human/cold_resistance - name = "Cold Resistance" +/datum/mutation/human/space_adaptation + name = "Space Adaptation" + desc = "A strange mutation that renders the host immune to the vacuum if space. Will still need an oxygen supply." quality = POSITIVE - get_chance = 25 - lowest_value = 256 * 12 + difficulty = 16 text_gain_indication = "Your body feels warm!" time_coeff = 5 + instability = 30 -/datum/mutation/human/cold_resistance/New() +/datum/mutation/human/space_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) ..() - visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER) + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER)) -/datum/mutation/human/cold_resistance/get_visual_indicator(mob/living/carbon/human/owner) - return visual_indicators[1] +/datum/mutation/human/space_adaptation/get_visual_indicator(mob/living/carbon/human/owner) + return visual_indicators[type][1] -/datum/mutation/human/cold_resistance/on_acquiring(mob/living/carbon/human/owner) +/datum/mutation/human/space_adaptation/on_acquiring(mob/living/carbon/human/owner) if(..()) return ADD_TRAIT(owner, TRAIT_RESISTCOLD, "cold_resistance") -// ADD_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance") CITADEL CHANGE + ADD_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance") -/datum/mutation/human/cold_resistance/on_losing(mob/living/carbon/human/owner) +/datum/mutation/human/space_adaptation/on_losing(mob/living/carbon/human/owner) if(..()) return REMOVE_TRAIT(owner, TRAIT_RESISTCOLD, "cold_resistance") -// REMOVE_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance") CITADEL CHANGE - -/datum/mutation/human/cold_resistance/on_life(mob/living/carbon/human/owner) - if(owner.getFireLoss()) - if(prob(1)) - owner.heal_bodypart_damage(0,1) //Is this really needed? + REMOVE_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "cold_resistance") diff --git a/code/datums/mutations/combined.dm b/code/datums/mutations/combined.dm new file mode 100644 index 0000000000..c166b01393 --- /dev/null +++ b/code/datums/mutations/combined.dm @@ -0,0 +1,24 @@ +/datum/generecipe + var/required = "" //it hurts so bad but initial is not compatible with lists + var/result = null + +/proc/get_mixed_mutation(mutation1, mutation2) + if(!mutation1 || !mutation2) + return FALSE + if(mutation1 == mutation2) //this could otherwise be bad + return FALSE + for(var/A in GLOB.mutation_recipes) + if(findtext(A, "[mutation1]") && findtext(A, "[mutation2]")) + return GLOB.mutation_recipes[A] + +/datum/generecipe/x_ray + required = "/datum/mutation/human/thermal; /datum/mutation/human/radioactive" + result = /datum/mutation/human/thermal/x_ray + +/datum/generecipe/shock + required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive" + result = SHOCKTOUCH + +/datum/generecipe/mindread + required = "/datum/mutation/human/antenna; /datum/mutation/human/paranoia" + result = MINDREAD \ No newline at end of file diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index c536196e95..b6987959c2 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -1,28 +1,30 @@ //Hulk turns your skin green, and allows you to punch through walls. /datum/mutation/human/hulk name = "Hulk" + desc = "A poorly understood genome that causes the holder's muscles to expand, inhibit speech and gives the person a bad skin condition." quality = POSITIVE - get_chance = 15 - lowest_value = 256 * 12 + locked = TRUE + difficulty = 16 text_gain_indication = "Your muscles hurt!" - species_allowed = list("fly") //no skeleton/lizard hulk + species_allowed = list("human") //no skeleton/lizard hulk health_req = 25 + instability = 40 + locked = TRUE /datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner) if(..()) return ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) - ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech) -/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity) +/datum/mutation/human/hulk/on_attack_hand(atom/target, proximity) if(proximity) //no telekinetic hulk attack return target.attack_hulk(owner) -/datum/mutation/human/hulk/on_life(mob/living/carbon/human/owner) +/datum/mutation/human/hulk/on_life() if(owner.health < 0) on_losing(owner) to_chat(owner, "You suddenly feel very weak.") @@ -32,7 +34,6 @@ return REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) - ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") UnregisterSignal(owner, COMSIG_MOB_SAY) diff --git a/code/datums/mutations/radioactive.dm b/code/datums/mutations/radioactive.dm new file mode 100644 index 0000000000..f76e6885d0 --- /dev/null +++ b/code/datums/mutations/radioactive.dm @@ -0,0 +1,19 @@ +/datum/mutation/human/radioactive + name = "Radioactivity" + desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings." + quality = NEGATIVE + text_gain_indication = "You can feel it in your bones!" + time_coeff = 5 + instability = 5 + difficulty = 8 + +/datum/mutation/human/radioactive/on_life(mob/living/carbon/human/owner) + radiation_pulse(owner, 20) + +/datum/mutation/human/radioactive/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + ..() + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "radiation", -MUTATIONS_LAYER)) + +/datum/mutation/human/radioactive/get_visual_indicator() + return visual_indicators[type][1] \ No newline at end of file diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 1f23a92906..c8bc1a1597 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -1,6 +1,7 @@ //Nearsightedness restricts your vision by several tiles. /datum/mutation/human/nearsight name = "Near Sightness" + desc = "The holder of this mutation has poor eyesight." quality = MINOR_NEGATIVE text_gain_indication = "You can't see very well." @@ -18,6 +19,7 @@ //Blind makes you blind. Who knew? /datum/mutation/human/blind name = "Blindness" + desc = "Renders the subject completely blind." quality = NEGATIVE text_gain_indication = "You can't seem to see anything." @@ -32,43 +34,58 @@ owner.cure_blind(GENETIC_MUTATION) -//X-ray Vision lets you see through walls. -/datum/mutation/human/x_ray - name = "X Ray Vision" +///Thermal Vision lets you see mobs through walls +/datum/mutation/human/thermal + name = "Thermal Vision" + desc = "The user of this genome can visually percieve the unique human thermal signature." quality = POSITIVE - get_chance = 25 - lowest_value = 256 * 12 - text_gain_indication = "The walls suddenly disappear!" + difficulty = 18 + text_gain_indication = "You can see the heat rising off of your skin..." time_coeff = 2 + instability = 25 + var/visionflag = TRAIT_THERMAL_VISION -/datum/mutation/human/x_ray/on_acquiring(mob/living/carbon/human/owner) +/datum/mutation/human/thermal/on_acquiring(mob/living/carbon/human/owner) if(..()) return + ADD_TRAIT(owner, visionflag, GENETIC_MUTATION) owner.update_sight() -/datum/mutation/human/x_ray/on_losing(mob/living/carbon/human/owner) +/datum/mutation/human/thermal/on_losing(mob/living/carbon/human/owner) if(..()) return + REMOVE_TRAIT(owner, visionflag, GENETIC_MUTATION) owner.update_sight() +///X-ray Vision lets you see through walls. +/datum/mutation/human/thermal/x_ray + name = "X Ray Vision" + desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb + text_gain_indication = "The walls suddenly disappear!" + instability = 35 + locked = TRUE + visionflag = TRAIT_XRAY_VISION + //Laser Eyes lets you shoot lasers from your eyes! /datum/mutation/human/laser_eyes name = "Laser Eyes" + desc = "Reflects concentrated light back from the eyes." quality = POSITIVE - dna_block = NON_SCANNABLE + locked = TRUE + difficulty = 16 text_gain_indication = "You feel pressure building up behind your eyes." layer_used = FRONT_MUTATIONS_LAYER limb_req = BODY_ZONE_HEAD -/datum/mutation/human/laser_eyes/New() +/datum/mutation/human/laser_eyes/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) ..() visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "lasereyes", -FRONT_MUTATIONS_LAYER) -/datum/mutation/human/laser_eyes/get_visual_indicator(mob/living/carbon/human/owner) +/datum/mutation/human/laser_eyes/get_visual_indicator() return visual_indicators[1] -/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target, mouseparams) +/datum/mutation/human/laser_eyes/on_ranged_attack(atom/target, mouseparams) if(owner.a_intent == INTENT_HARM) owner.LaserEyes(target, mouseparams) diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index 82138e6e34..5716b2595b 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -3,6 +3,7 @@ /datum/mutation/human/nervousness name = "Nervousness" + desc = "Causes the holder to stutter." quality = MINOR_NEGATIVE text_gain_indication = "You feel nervous." @@ -13,6 +14,7 @@ /datum/mutation/human/wacky name = "Wacky" + desc = "Unknown." quality = MINOR_NEGATIVE text_gain_indication = "You feel an off sensation in your voicebox." text_lose_indication = "The off sensation passes." @@ -34,6 +36,7 @@ /datum/mutation/human/mute name = "Mute" + desc = "Completely inhibits the vocal section of the brain." quality = NEGATIVE text_gain_indication = "You feel unable to express yourself at all." text_lose_indication = "You feel able to speak freely again." @@ -53,8 +56,8 @@ /datum/mutation/human/smile name = "Smile" + desc = "Causes the user to be in constant mania." quality = MINOR_NEGATIVE - dna_block = NON_SCANNABLE text_gain_indication = "You feel so happy. Nothing can be wrong with anything. :)" text_lose_indication = "Everything is terrible again. :(" @@ -95,7 +98,6 @@ message = replacetext(message," ugly "," beautiful ") message = replacetext(message," douchbag "," nice guy ") message = replacetext(message," whore "," lady ") - message = replacetext(message," gamer "," intellectual ") message = replacetext(message," nerd "," smarty pants ") message = replacetext(message," moron "," fun person ") message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") @@ -121,8 +123,8 @@ /datum/mutation/human/unintelligible name = "Unintelligible" + desc = "Partially inhibits the vocal center of the brain, severely distorting speech." quality = NEGATIVE - dna_block = NON_SCANNABLE text_gain_indication = "You can't seem to form any coherent thoughts!" text_lose_indication = "Your mind feels more clear." @@ -141,8 +143,9 @@ /datum/mutation/human/swedish name = "Swedish" + desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037." quality = MINOR_NEGATIVE - dna_block = NON_SCANNABLE + locked = TRUE text_gain_indication = "You feel Swedish, however that works." text_lose_indication = "The feeling of Swedishness passes." @@ -173,8 +176,8 @@ /datum/mutation/human/chav name = "Chav" + desc = "Unknown" quality = MINOR_NEGATIVE - dna_block = NON_SCANNABLE text_gain_indication = "Ye feel like a reet prat like, innit?" text_lose_indication = "You no longer feel like being rude and sassy." @@ -220,12 +223,13 @@ /datum/mutation/human/elvis name = "Elvis" + desc = "A terrifying mutation named after its 'patient-zero'." quality = MINOR_NEGATIVE - dna_block = NON_SCANNABLE + locked = TRUE text_gain_indication = "You feel pretty good, honeydoll." text_lose_indication = "You feel a little less conversation would be great." -/datum/mutation/human/elvis/on_life(mob/living/carbon/human/owner) +/datum/mutation/human/elvis/on_life() switch(pick(1,2)) if(1) if(prob(15)) @@ -266,8 +270,9 @@ /datum/mutation/human/stoner name = "Stoner" + desc = "A common mutation that severely decreases intelligence." quality = NEGATIVE - dna_block = NON_SCANNABLE + locked = TRUE text_gain_indication = "You feel...totally chill, man!" text_lose_indication = "You feel like you have a better sense of time." diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm index a5b15eacb8..b03ac04027 100644 --- a/code/datums/mutations/telekinesis.dm +++ b/code/datums/mutations/telekinesis.dm @@ -1,18 +1,20 @@ //Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head. /datum/mutation/human/telekinesis name = "Telekinesis" + desc = "A strange mutation that allows the holder to interact with objects through thought." quality = POSITIVE - get_chance = 20 - lowest_value = 256 * 12 + difficulty = 18 text_gain_indication = "You feel smarter!" limb_req = BODY_ZONE_HEAD + instability = 30 -/datum/mutation/human/telekinesis/New() +/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) ..() - visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER) + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)) /datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner) - return visual_indicators[1] + return visual_indicators[type][1] /datum/mutation/human/telekinesis/on_ranged_attack(mob/living/carbon/human/owner, atom/target) - target.attack_tk(owner) + target.attack_tk(owner) \ No newline at end of file diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index f5f012e7f9..156d527763 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -737,3 +737,26 @@ datum/status_effect/pacify to_chat(owner, "Your arm spasms!") owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) owner.throw_item(pick(targets)) + +/datum/status_effect/dna_melt + id = "dna_melt" + duration = 600 + status_type = STATUS_EFFECT_REPLACE + alert_type = /obj/screen/alert/status_effect/dna_melt + var/kill_either_way = FALSE //no amount of removing mutations is gonna save you now + +/datum/status_effect/dna_melt/on_creation(mob/living/new_owner, set_duration, updating_canmove) + . = ..() + to_chat(new_owner, "My body can't handle the mutations! I need to get my mutations removed fast!") + +/datum/status_effect/dna_melt/on_remove() + if(!ishuman(owner)) + owner.gib() //fuck you in particular + return + var/mob/living/carbon/human/H = owner + H.something_horrible(kill_either_way) + +/obj/screen/alert/status_effect/dna_melt + name = "Genetic Breakdown" + desc = "I don't feel so good. Your body can't handle the mutations! You have one minute to remove your mutations, or you will be met with a horrible fate." + icon_state = "dna_melt" \ No newline at end of file diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e683d67be2..3181086caf 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -80,6 +80,8 @@ name = "cloning data disk" icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. var/list/fields = list() + var/list/mutations = list() + var/max_mutations = 6 var/read_only = 0 //Well,it's still a floppy disk //Disk stuff. @@ -127,7 +129,7 @@ return examine(user) //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions, list/quirks) +/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks) if(panel_open) return FALSE if(mess || attempting) @@ -161,10 +163,10 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.hardset_dna(ui, se, H.real_name, null, mrace, features) + H.hardset_dna(ui, mutation_index, H.real_name, null, mrace, features) if(prob(50 - efficiency*10)) //Chance to give a bad mutation. - H.randmutb() //100% bad mutation. Can be cured with mutadone. + H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) //100% bad mutation. Can be cured with mutadone. H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment. occupant = H diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 43cfbdb33b..06aff3e730 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -485,7 +485,7 @@ R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6) R.fields["UE"] = dna.unique_enzymes R.fields["UI"] = dna.uni_identity - R.fields["SE"] = dna.struc_enzymes + R.fields["SE"] = dna.mutation_index R.fields["blood_type"] = dna.blood_type R.fields["features"] = dna.features R.fields["factions"] = mob_occupant.faction diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 394cc4593d..59c962994e 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -1,14 +1,16 @@ #define INJECTOR_TIMEOUT 100 -#define REJUVENATORS_INJECT 15 -#define REJUVENATORS_MAX 90 #define NUMBER_OF_BUFFERS 3 +#define SCRAMBLE_TIMEOUT 600 +#define JOKER_TIMEOUT 12000 //20 minutes +#define JOKER_UPGRADE 1800 #define RADIATION_STRENGTH_MAX 15 -#define RADIATION_STRENGTH_MULTIPLIER 1 //larger has a more range +#define RADIATION_STRENGTH_MULTIPLIER 1 //larger has more range #define RADIATION_DURATION_MAX 30 #define RADIATION_ACCURACY_MULTIPLIER 3 //larger is less accurate + #define RADIATION_IRRADIATION_MULTIPLIER 1 //multiplier for how much radiation a test subject receives #define SCANNER_ACTION_SE 1 @@ -23,22 +25,33 @@ icon_keyboard = "med_key" density = TRUE circuit = /obj/item/circuitboard/computer/scan_consolenew - var/radduration = 2 - var/radstrength = 1 - var/list/buffer[NUMBER_OF_BUFFERS] - - var/injectorready = 0 //world timer cooldown var - var/current_screen = "mainmenu" - var/obj/machinery/dna_scannernew/connected = null - var/obj/item/disk/data/diskette = null - var/list/delayed_action = null use_power = IDLE_POWER_USE idle_power_usage = 10 active_power_usage = 400 - light_color = LIGHT_COLOR_BLUE + var/datum/techweb/stored_research + var/max_storage = 6 + var/combine + var/radduration = 2 + var/radstrength = 1 + var/max_chromosomes = 6 + + var/list/buffer[NUMBER_OF_BUFFERS] + var/list/stored_mutations = list() + var/list/stored_chromosomes = list() + + var/injectorready = 0 //world timer cooldown var + var/jokerready = 0 + var/scrambleready = 0 + var/current_screen = "mainmenu" + var/current_mutation //what block are we inspecting? only used when screen = "info" + var/current_storage //what storage block are we looking at? + var/obj/machinery/dna_scannernew/connected = null + var/obj/item/disk/data/diskette = null + var/list/delayed_action = null + /obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params) if (istype(I, /obj/item/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) @@ -48,6 +61,28 @@ to_chat(user, "You insert [I].") src.updateUsrDialog() return + if (istype(I, /obj/item/chromosome)) + if(LAZYLEN(stored_chromosomes) < max_chromosomes) + I.forceMove(src) + stored_chromosomes += I + to_chat(user, "You insert [I].") + else + to_chat(user, "You cannot store any more chromosomes!") + return + if(istype(I, /obj/item/dnainjector/activator)) + var/obj/item/dnainjector/activator/A = I + if(A.used) + to_chat(user,"Recycled [I].") + if(A.research) + var/c_typepath = generate_chromosome() + var/obj/item/chromosome/CM = new c_typepath (drop_location()) + to_chat(user,"Recycled [I].") + if((LAZYLEN(stored_chromosomes) < max_chromosomes) && prob(60)) + CM.forceMove(src) + stored_chromosomes += CM + to_chat(user,"[capitalize(CM.name)] added to storage.") + qdel(I) + return else return ..() @@ -58,12 +93,26 @@ if(!isnull(connected)) break injectorready = world.time + INJECTOR_TIMEOUT + scrambleready = world.time + SCRAMBLE_TIMEOUT + jokerready = world.time + JOKER_TIMEOUT + + stored_research = SSresearch.science_tech + +/obj/machinery/computer/scan_consolenew/examine(mob/user) + ..() + if(jokerready < world.time) + to_chat(user, "JOKER algorithm available.") + else + to_chat(user, "JOKER algorithm available in about [round(0.00166666667 * (jokerready - world.time))] minutes.") /obj/machinery/computer/scan_consolenew/ui_interact(mob/user, last_change) . = ..() if(!user) return var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window + if(user.client) + var/datum/asset/simple/assets = get_asset_datum(/datum/asset/simple/genetics) + assets.send(user.client) if(!(in_range(src, user) || issilicon(user))) popup.close() return @@ -88,8 +137,6 @@ occupant_status += "" occupant_status += "
Health:
[viable_occupant.health] %
" occupant_status += "
Radiation Level:
[viable_occupant.radiation/(RAD_MOB_SAFE/100)] %
" - var/rejuvenators = viable_occupant.reagents.get_reagent_amount("potass_iodide") - occupant_status += "
Rejuvenators:
[rejuvenators] units
" occupant_status += "
Unique Enzymes :
[viable_occupant.dna.unique_enzymes]
" occupant_status += "
Last Operation:
[last_change ? last_change : "----"]
" else @@ -147,28 +194,53 @@ buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner" else buttons += "Open Scanner Lock Scanner" - if(viable_occupant) - buttons += "Inject Rejuvenators" + if(viable_occupant && (scrambleready < world.time)) + buttons += "Scramble DNA" else - buttons += "Inject Rejuvenators" + buttons += "Scramble DNA" if(diskette) - buttons += "Eject Disk" + buttons += "Disk" else - buttons += "Eject Disk" - if(current_screen == "buffer") - buttons += "Radiation Emitter Menu" + buttons += "Disk" + if(current_screen == "mutations") + buttons += "Mutations" else - buttons += "Buffer Menu" + buttons += "Mutations" + if((current_screen == "mainmenu") || !current_screen) + buttons += "Genetic Sequencer" + else + buttons += "Genetic Sequencer" + if(current_screen == "ui") + buttons += "Unique Identifiers" + else + buttons += "Unique Identifiers" switch(current_screen) if("working") temp_html += status temp_html += "

System Busy

" temp_html += "Working ... Please wait ([DisplayTimeText(radduration*10)])" - if("buffer") + if("ui") temp_html += status temp_html += buttons - temp_html += "

Buffer Menu

" + temp_html += "

Unique Identifiers

" + temp_html += "-- Output Level ++" + temp_html += "
-- Pulse Duration ++" + temp_html += "

Irradiate Subject

" + temp_html += "
Unique Identifier:
" + var/max_line_len = 7*DNA_BLOCK_SIZE + if(viable_occupant) + temp_html += "
1
" + var/len = length(viable_occupant.dna.uni_identity) + for(var/i=1, i<=len, i++) + temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" + if ((i % max_line_len) == 0) + temp_html += "
" + if((i % DNA_BLOCK_SIZE) == 0 && i < len) + temp_html += "
[(i / DNA_BLOCK_SIZE) + 1]
" + else + temp_html += "---------" + temp_html += "

Buffer Menu

" if(istype(buffer)) for(var/i=1, i<=buffer.len, i++) @@ -188,7 +260,6 @@ temp_html += "Save to Disk" else var/ui = buffer_slot["UI"] - var/se = buffer_slot["SE"] var/ue = buffer_slot["UE"] var/name = buffer_slot["name"] var/label = buffer_slot["label"] @@ -234,19 +305,6 @@ temp_html += "UI+UE Injector" else temp_html += "UI+UE Injector" - if(se) - temp_html += "
\tSE: [se] " - if(viable_occupant) - temp_html += "Occupant" - else - temp_html += "Occupant" - temp_html += "Occupant:Delayed" - if(injectorready < world.time ) - temp_html += "Injector" - else - temp_html += "Injector" - else - temp_html += "
\tSE: No Data" if(viable_occupant) temp_html += "
Save to Buffer" else @@ -260,48 +318,197 @@ temp_html += "Save to Disk" else temp_html += "Save to Disk" + if("disk") + temp_html += status + temp_html += buttons + if(diskette) + temp_html += "

[diskette.name]


" + temp_html += "Eject Disk
" + if(LAZYLEN(diskette.mutations)) + temp_html += "" + for(var/datum/mutation/human/A in diskette.mutations) + temp_html += "" + temp_html += "" + if(LAZYLEN(stored_mutations) < max_storage) + temp_html += "" + else + temp_html += "" + temp_html += "" + temp_html += "
[A.name]DeleteImportImport
" + else + temp_html += "
Load diskette to start ----------" + if("info") + if(LAZYLEN(stored_mutations)) + if(LAZYLEN(stored_mutations) >= current_storage) + var/datum/mutation/human/HM = stored_mutations[current_storage] + if(HM) + temp_html += display_sequence(HM.type, current_storage) + else + current_screen = "mainmenu" + if("mutations") + temp_html += status + temp_html += buttons + temp_html += "

Mutation Storage:

" + temp_html += "" + for(var/datum/mutation/human/HM in stored_mutations) + var/i = stored_mutations.Find(HM) + temp_html += "" + temp_html += "" + temp_html += "" + if(combine == HM.type) + temp_html += "" + else + temp_html += "" + temp_html += "
[HM.name]ExportDeleteCombine
Combine

" + temp_html += "

Chromosome Storage:

" + temp_html += "" + for(var/i in 1 to stored_chromosomes.len) + var/obj/item/chromosome/CM = stored_chromosomes[i] + temp_html += "
" + temp_html += "
[CM.name]
" else temp_html += status temp_html += buttons - temp_html += "

Radiation Emitter Menu

" - - temp_html += "-- Output Level ++" - temp_html += "
-- Pulse Duration ++" - - temp_html += "

Irradiate Subject

" - temp_html += "
Unique Identifier:
" - - var/max_line_len = 7*DNA_BLOCK_SIZE + temp_html += "
Genetic Sequence:

" if(viable_occupant) - temp_html += "
1
" - var/len = length(viable_occupant.dna.uni_identity) - for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" - if ((i % max_line_len) == 0) - temp_html += "
" - if((i % DNA_BLOCK_SIZE) == 0 && i < len) - temp_html += "
[(i / DNA_BLOCK_SIZE) + 1]
" + if(viable_occupant) + for(var/A in get_mutation_list()) + temp_html += display_inactive_sequence(A) + temp_html += "
" + else + temp_html += "----" + if(viable_occupant && (current_mutation in get_mutation_list(viable_occupant))) + temp_html += display_sequence(current_mutation) + temp_html += "

" else - temp_html += "----" - temp_html += "

" - - temp_html += "
Structural Enzymes:
" - if(viable_occupant) - temp_html += "
1
" - var/len = length(viable_occupant.dna.struc_enzymes) - for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.struc_enzymes,i,i+1)]" - if ((i % max_line_len) == 0) - temp_html += "
" - if((i % DNA_BLOCK_SIZE) == 0 && i < len) - temp_html += "
[(i / DNA_BLOCK_SIZE) + 1]
" - else - temp_html += "----" - temp_html += "
" + temp_html += "----------" popup.set_content(temp_html.Join()) popup.open() +/obj/machinery/computer/scan_consolenew/proc/display_inactive_sequence(mutation) + var/temp_html = "" + var/class = "unselected" + var/mob/living/carbon/viable_occupant = get_viable_occupant() + if(!viable_occupant) + return + + var/location = viable_occupant.dna.mutation_index.Find(mutation) //We do this because we dont want people using sysexp or similair tools to just read the mutations. + + if(!location) //Do this only when needed, dont make a list with mutations for every iteration if you dont need to + var/list/mutations = get_mutation_list(TRUE) + if(mutation in mutations) + location = mutations.Find(mutation) + if(mutation == current_mutation) + class = "selected" + if(location > DNA_MUTATION_BLOCKS) + temp_html += "Extra Mutation" + else if(mutation in stored_research.discovered_mutations) + temp_html += "Discovered Mutation" + else + temp_html += "Undiscovered" + return temp_html + +/obj/machinery/computer/scan_consolenew/proc/display_sequence(mutation, storage_slot) //Storage slot is for when viewing from the stored mutations + var/temp_html = "" + if(!mutation) + temp_html += "ERR-" + return + var/mut_name = "Unknown gene" + var/mut_desc = "No information available." + var/alias + var/discovered = FALSE + var/active = FALSE + var/scrambled = FALSE + var/instability + var/mob/living/carbon/viable_occupant = get_viable_occupant() + var/datum/mutation/human/HM = get_valid_mutation(mutation) + + if(viable_occupant) + var/datum/mutation/human/M = viable_occupant.dna.get_mutation(mutation) + if(M) + scrambled = M.scrambled + active = TRUE + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(mutation) + alias = A.alias + if(active && !scrambled) + discover(mutation) + if(stored_research && (mutation in stored_research.discovered_mutations)) + mut_name = A.name + mut_desc = A.desc + discovered = TRUE + instability = A.instability + var/extra + if(viable_occupant && !(storage_slot || viable_occupant.dna.mutation_in_sequence(mutation))) + extra = TRUE + + if(discovered && !scrambled) + var/mutcolor + switch(A.quality) + if(POSITIVE) + mutcolor = "good" + if(MINOR_NEGATIVE) + mutcolor = "average" + if(NEGATIVE) + mutcolor = "bad" + if(HM) + instability *= GET_MUTATION_STABILIZER(HM) + temp_html += "
[mut_name] ([alias])
" + temp_html += "
Instability : [round(instability)]
" + else + temp_html += "
[alias]
" + temp_html += "
[mut_desc]
" + if(active && !storage_slot) + if(HM?.can_chromosome && (HM in viable_occupant.dna.mutations)) + var/i = viable_occupant.dna.mutations.Find(HM) + var/chromosome_name = "----" + if(HM.chromosome_name) + chromosome_name = HM.chromosome_name + temp_html += "
Chromosome status: [chromosome_name]
" + temp_html += "
Sequence:

" + if(!scrambled) + for(var/block in 1 to A.blocks) + var/whole_sequence = get_valid_gene_string(mutation) + var/sequence = copytext(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1)) + temp_html += "
" + for(var/i in 1 to DNA_SEQUENCE_LENGTH) + var/num = 1+(i-1)*2 + var/genenum = num+(DNA_SEQUENCE_LENGTH*2*(block-1)) + temp_html += "" + temp_html += "" + for(var/i in 1 to DNA_SEQUENCE_LENGTH) + temp_html += "" + temp_html += "" + for(var/i in 1 to DNA_SEQUENCE_LENGTH) + var/num = i*2 + var/genenum = num+(DNA_SEQUENCE_LENGTH*2*(block-1)) + temp_html += "" + temp_html += "
|
" + temp_html += "




" + else + temp_html = "
Sequence unreadable due to unpredictable mutation.
" + if((active || storage_slot) && (injectorready < world.time) && !scrambled) + temp_html += "Print Activator" + temp_html += "Print Mutator" + else + temp_html += "Print Activator" + temp_html += "Print Mutator" + temp_html += "
" + if(storage_slot) + temp_html += "Delete" + if((LAZYLEN(stored_mutations) < max_storage) && diskette && !diskette.read_only) + temp_html += "Export" + else + temp_html += "Export" + temp_html += "Back" + else if(active && !scrambled) + temp_html += "Store" + if(extra || scrambled) + temp_html += "Nullify" + else + temp_html += "Nullify" + temp_html += "
" + return temp_html /obj/machinery/computer/scan_consolenew/Topic(href, href_list) if(..()) @@ -340,13 +547,16 @@ radstrength = WRAP(num, 1, RADIATION_STRENGTH_MAX+1) if("screen") current_screen = href_list["text"] - if("rejuv") - if(viable_occupant && viable_occupant.reagents) - var/potassiodide_amount = viable_occupant.reagents.get_reagent_amount("potass_iodide") - var/can_add = max(min(REJUVENATORS_MAX - potassiodide_amount, REJUVENATORS_INJECT), 0) - viable_occupant.reagents.add_reagent("potass_iodide", can_add) + if("scramble") + if(viable_occupant && (scrambleready < world.time)) + viable_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA)) + viable_occupant.dna.generate_dna_blocks() + scrambleready = world.time + SCRAMBLE_TIMEOUT + to_chat(usr,"DNA scrambled.") + viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER*50/(connected.damage_coeff ** 2) + if("setbufferlabel") - var/text = sanitize(input(usr, "Input a new label:", "Input an Text", null) as text|null) + var/text = sanitize(input(usr, "Input a new label:", "Input a Text", null) as text|null) if(num && text) num = CLAMP(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] @@ -358,7 +568,6 @@ buffer[num] = list( "label"="Buffer[num]:[viable_occupant.real_name]", "UI"=viable_occupant.dna.uni_identity, - "SE"=viable_occupant.dna.struc_enzymes, "UE"=viable_occupant.dna.unique_enzymes, "name"=viable_occupant.real_name, "blood_type"=viable_occupant.dna.blood_type @@ -372,8 +581,6 @@ if("transferbuffer") if(num && viable_occupant) switch(href_list["text"]) //Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove - if("se") - apply_buffer(SCANNER_ACTION_SE,num) if("ui") apply_buffer(SCANNER_ACTION_UI,num) if("ue") @@ -387,28 +594,6 @@ if(istype(buffer_slot)) var/obj/item/dnainjector/timed/I switch(href_list["text"]) - if("se") - if(buffer_slot["SE"]) - I = new /obj/item/dnainjector/timed(loc) - var/powers = 0 - for(var/datum/mutation/human/HM in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations) - if(HM.check_block_string(buffer_slot["SE"])) - I.add_mutations.Add(HM) - if(HM in GLOB.good_mutations) - powers += 1 - if(HM in GLOB.bad_mutations + GLOB.not_good_mutations) - powers -= 1 //To prevent just unlocking everything to get all powers to a syringe for max tech - else - I.remove_mutations.Add(HM) - var/time_coeff - for(var/datum/mutation/human/HM in I.add_mutations) - if(!time_coeff) - time_coeff = HM.time_coeff - continue - time_coeff = min(time_coeff,HM.time_coeff) - if(connected) - I.duration = I.duration * time_coeff * connected.damage_coeff - I.damage_coeff = connected.damage_coeff if("ui") if(buffer_slot["UI"]) I = new /obj/item/dnainjector/timed(loc) @@ -447,7 +632,7 @@ if("setdelayed") if(num) delayed_action = list("action"=text2num(href_list["delayaction"]),"buffer"=num) - if("pulseui","pulsese") + if("pulseui") if(num && viable_occupant && connected) radduration = WRAP(radduration, 1, RADIATION_DURATION_MAX+1) radstrength = WRAP(radstrength, 1, RADIATION_STRENGTH_MAX+1) @@ -459,7 +644,7 @@ ui_interact(usr) sleep(radduration*10) - current_screen = "mainmenu" + current_screen = "ui" if(viable_occupant && connected && connected.occupant==viable_occupant) viable_occupant.radiation += (RADIATION_IRRADIATION_MULTIPLIER*radduration*radstrength)/(connected.damage_coeff ** 2) //Read comment in "transferbuffer" section above for explanation @@ -468,7 +653,7 @@ var/len = length(viable_occupant.dna.uni_identity) num = WRAP(num, 1, len+1) num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len) //Each manipulator level above 1 makes randomization as accurate as selected time + manipulator lvl^2 - //Value is this high for the same reason as with laser - not worth the hassle of upgrading if the bonus is low + //Value is this high for the same reason as with laser - not worth the hassle of upgrading if the bonus is low var/block = round((num-1)/DNA_BLOCK_SIZE)+1 var/subblock = num - block*DNA_BLOCK_SIZE last_change = "UI #[block]-[subblock]; " @@ -480,35 +665,173 @@ viable_occupant.dna.uni_identity = copytext(viable_occupant.dna.uni_identity, 1, num) + hex + copytext(viable_occupant.dna.uni_identity, num+1, 0) viable_occupant.updateappearance(mutations_overlay_update=1) - if("pulsese") - var/len = length(viable_occupant.dna.struc_enzymes) - num = WRAP(num, 1, len+1) - num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len) - - var/block = round((num-1)/DNA_BLOCK_SIZE)+1 - var/subblock = num - block*DNA_BLOCK_SIZE - last_change = "SE #[block]-[subblock]; " - - var/hex = copytext(viable_occupant.dna.struc_enzymes, num, num+1) - last_change += "[hex]" - hex = scramble(hex, radstrength, radduration) - last_change += "->[hex]" - - viable_occupant.dna.struc_enzymes = copytext(viable_occupant.dna.struc_enzymes, 1, num) + hex + copytext(viable_occupant.dna.struc_enzymes, num+1, 0) - viable_occupant.domutcheck() else current_screen = "mainmenu" if(connected) connected.locked = locked_state + if("inspect") + if(viable_occupant) + var/list/mutations = get_mutation_list(TRUE) + if(current_mutation == mutations[num]) + current_mutation = null + else + current_mutation = mutations[num] + + if("inspectstorage") + current_storage = num + current_screen = "info" + if("savemut") + if(viable_occupant) + var/succes + if(LAZYLEN(stored_mutations) < max_storage) + var/mutation = text2path(href_list["path"]) + if(ispath(mutation, /datum/mutation/human)) //sanity checks + var/datum/mutation/human/HM = viable_occupant.dna.get_mutation(mutation) + if(HM) + var/datum/mutation/human/A = new HM.type() + A.copy_mutation(HM) + succes = TRUE + stored_mutations += A + to_chat(usr,"Mutation succesfully stored.") + if(!succes) //we can exactly return here + to_chat(usr,"Mutation storage is full.") + if("deletemut") + var/datum/mutation/human/HM = stored_mutations[num] + if(HM) + stored_mutations.Remove(HM) + qdel(HM) + current_screen = "mutations" + if("activator") + if(injectorready < world.time) + var/mutation = text2path(href_list["path"]) + if(ispath(mutation, /datum/mutation/human)) + var/datum/mutation/human/HM = get_valid_mutation(mutation) + if(HM) + var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) + I.add_mutations += new HM.type (copymut = HM) + I.name = "[HM.name] activator" + I.research = TRUE + if(connected) + I.damage_coeff = connected.damage_coeff*4 + injectorready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected.precision_coeff) //precision_coeff being the matter bin rating + else + injectorready = world.time + INJECTOR_TIMEOUT + if("mutator") + if(injectorready < world.time) + var/mutation = text2path(href_list["path"]) + if(ispath(mutation, /datum/mutation/human)) + var/datum/mutation/human/HM = get_valid_mutation(mutation) + if(HM) + var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) + I.add_mutations += new HM.type (copymut = HM) + I.doitanyway = TRUE + I.name = "[HM.name] injector" + if(connected) + I.damage_coeff = connected.damage_coeff + injectorready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected.precision_coeff) + else + injectorready = world.time + INJECTOR_TIMEOUT * 5 + if("nullify") + if(viable_occupant) + var/datum/mutation/human/A = viable_occupant.dna.get_mutation(current_mutation) + if(A && (!viable_occupant.dna.mutation_in_sequence(current_mutation) || A.scrambled)) + viable_occupant.dna.remove_mutation(current_mutation) + current_screen = "mainmenu" + current_mutation = null + if("pulsegene") + if(current_screen != "info") + var/path = text2path(href_list["path"]) + if(viable_occupant && num && (path in viable_occupant.dna.mutation_index)) + var/list/genes = list("A","T","G","C","X") + if(jokerready < world.time) + genes += "JOKER" + var/sequence = GET_GENE_STRING(path, viable_occupant.dna) + var/original = sequence[num] + var/new_gene = input("From [original] to-", "New block", original) as null|anything in genes + if(!new_gene) + new_gene = original + if(viable_occupant == get_viable_occupant()) //No cheesing + if((new_gene == "JOKER") && (jokerready < world.time)) + var/true_genes = GET_SEQUENCE(current_mutation) + new_gene = true_genes[num] + jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected.precision_coeff-1)) + sequence = copytext(sequence, 1, num) + new_gene + copytext(sequence, num+1, length(sequence)+1) + viable_occupant.dna.mutation_index[path] = sequence + viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected.damage_coeff + viable_occupant.domutcheck() + if("exportdiskmut") + if(diskette && !diskette.read_only) + var/path = text2path(href_list["path"]) + if(ispath(path, /datum/mutation/human)) + var/datum/mutation/human/A = get_valid_mutation(path) + if(A && diskette && (LAZYLEN(diskette.mutations) < diskette.max_mutations)) + var/datum/mutation/human/HM = new A.type() + diskette.mutations += HM + HM.copy_mutation(A) + to_chat(usr, "Succesfully written [A.name] to [diskette.name].") + if("deletediskmut") + if(diskette && !diskette.read_only) + if(num && (LAZYLEN(diskette.mutations) >= num)) + var/datum/mutation/human/A = diskette.mutations[num] + diskette.mutations.Remove(A) + qdel(A) + if("importdiskmut") + if(diskette && (LAZYLEN(diskette.mutations) >= num)) + if(LAZYLEN(stored_mutations) < max_storage) + var/datum/mutation/human/A = diskette.mutations[num] + var/datum/mutation/human/HM = new A.type() + HM.copy_mutation(A) + stored_mutations += HM + to_chat(usr,"Succesfully written [A.name] to storage.") + if("combine") + if(num && (LAZYLEN(stored_mutations) >= num)) + if(LAZYLEN(stored_mutations) < max_storage) + var/datum/mutation/human/A = stored_mutations[num] + var/path = A.type + if(combine) + var/result_path = get_mixed_mutation(combine, path) + if(result_path) + stored_mutations += new result_path() + to_chat(usr, "Succes! New mutation has been added to storage") + discover(result_path) + combine = null + else + to_chat(usr, "Failed. No mutation could be created.") + combine = null + else + combine = path + to_chat(usr,"Selected [A.name] for combining") + else + to_chat(usr, "Not enough space to store potential mutation.") + if("ejectchromosome") + if(LAZYLEN(stored_chromosomes) <= num) + var/obj/item/chromosome/CM = stored_chromosomes[num] + CM.forceMove(drop_location()) + adjust_item_drop_location(CM) + stored_chromosomes -= CM + if("applychromosome") + if(viable_occupant && (LAZYLEN(viable_occupant.dna.mutations) <= num)) + var/datum/mutation/human/HM = viable_occupant.dna.mutations[num] + var/list/chromosomes = list() + for(var/obj/item/chromosome/CM in stored_chromosomes) + if(CM.can_apply(HM)) + chromosomes += CM + if(chromosomes.len) + var/obj/item/chromosome/CM = input("Select a chromosome to apply", "Apply Chromosome") as null|anything in sortNames(chromosomes) + if(CM) + to_chat(usr, "You apply [CM] to [HM.name].") + stored_chromosomes -= CM + CM.apply(HM) + ui_interact(usr,last_change) -/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd) +/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd) //hexadecimal genetics. dont confuse with scramble button var/length = length(input) var/ran = gaussian(0, rs*RADIATION_STRENGTH_MULTIPLIER) if(ran == 0) - ran = pick(-1,1) //hacky, statistically should almost never happen. 0-change makes people mad though + ran = pick(-1,1) //hacky, statistically should almost never happen. 0-chance makes people mad though else if(ran < 0) ran = round(ran) //negative, so floor it else @@ -537,10 +860,6 @@ //Each laser level reduces damage by lvl^2, so no effect on 1 lvl, 4 times less damage on 2 and 9 times less damage on 3 //Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove switch(action) - if(SCANNER_ACTION_SE) - if(buffer_slot["SE"]) - viable_occupant.dna.struc_enzymes = buffer_slot["SE"] - viable_occupant.domutcheck() if(SCANNER_ACTION_UI) if(buffer_slot["UI"]) viable_occupant.dna.uni_identity = buffer_slot["UI"] @@ -562,15 +881,54 @@ viable_occupant.dna.blood_type = buffer_slot["blood_type"] /obj/machinery/computer/scan_consolenew/proc/on_scanner_close() - if(delayed_action && connected) + if(delayed_action && get_viable_occupant()) to_chat(connected.occupant, "[src] activates!") apply_buffer(delayed_action["action"],delayed_action["buffer"]) delayed_action = null //or make it stick + reset button ? +/obj/machinery/computer/scan_consolenew/proc/get_valid_mutation(mutation) + var/mob/living/carbon/C = get_viable_occupant() + if(C) + var/datum/mutation/human/HM = C.dna.get_mutation(mutation) + if(HM) + return HM + for(var/datum/mutation/human/A in stored_mutations) + if(A.type == mutation) + return A + + +/obj/machinery/computer/scan_consolenew/proc/get_mutation_list(include_storage) //Returns a list of the mutation index types and any extra mutations + var/mob/living/carbon/viable_occupant = get_viable_occupant() + var/list/paths = list() + if(viable_occupant) + for(var/A in viable_occupant.dna.mutation_index) + paths += A + for(var/datum/mutation/human/A in viable_occupant.dna.mutations) + if(A.class == MUT_EXTRA) + paths += A.type + if(include_storage) + for(var/datum/mutation/human/A in stored_mutations) + paths += A.type + return paths + +/obj/machinery/computer/scan_consolenew/proc/get_valid_gene_string(mutation) + var/mob/living/carbon/C = get_viable_occupant() + if(C && (mutation in C.dna.mutation_index)) + return GET_GENE_STRING(mutation, C.dna) + else if(C && (LAZYLEN(C.dna.mutations))) + for(var/datum/mutation/human/A in C.dna.mutations) + if(A.type == mutation) + return GET_SEQUENCE(mutation) + for(var/datum/mutation/human/A in stored_mutations) + if(A.type == mutation) + return GET_SEQUENCE(mutation) + +/obj/machinery/computer/scan_consolenew/proc/discover(mutation) + if(stored_research && !(mutation in stored_research.discovered_mutations)) + stored_research.discovered_mutations += mutation + return TRUE /////////////////////////// DNA MACHINES #undef INJECTOR_TIMEOUT -#undef REJUVENATORS_INJECT -#undef REJUVENATORS_MAX #undef NUMBER_OF_BUFFERS #undef RADIATION_STRENGTH_MAX diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm index 25e5948b51..d5388035bb 100644 --- a/code/game/machinery/exp_cloner.dm +++ b/code/game/machinery/exp_cloner.dm @@ -9,7 +9,7 @@ internal_radio = FALSE //Start growing a human clone in the pod! -/obj/machinery/clonepod/experimental/growclone(ckey, clonename, ui, se, datum/species/mrace, list/features, factions) +/obj/machinery/clonepod/experimental/growclone(clonename, ui, mutation_index, mindref, last_death, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance) if(panel_open) return FALSE if(mess || attempting) @@ -20,15 +20,15 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.hardset_dna(ui, se, H.real_name, null, mrace, features) + H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features) if(efficiency > 2) var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) H.dna.remove_mutation_group(unclean_mutations) if(efficiency > 5 && prob(20)) - H.randmutvg() + H.easy_randmut(POSITIVE) if(efficiency < 3 && prob(50)) - var/mob/M = H.randmutb() + var/mob/M = H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) if(ismob(M)) H = M @@ -42,18 +42,17 @@ icon_state = "pod_1" //Get the clone body ready maim_clone(H) - ADD_TRAIT(H, TRAIT_STABLEHEART, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_STABLELIVER, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_MUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOBREATH, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) + ADD_TRAIT(H, TRAIT_STABLEHEART, "cloning") + ADD_TRAIT(H, TRAIT_EMOTEMUTE, "cloning") + ADD_TRAIT(H, TRAIT_MUTE, "cloning") + ADD_TRAIT(H, TRAIT_NOBREATH, "cloning") + ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, "cloning") H.Unconscious(80) - var/list/candidates = pollCandidatesForMob("Do you want and agree to play as a [clonename]'s defective clone, respect their character and not engage in ERP without permission from the original?", null, null, null, 100, H, POLL_IGNORE_CLONE) + var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) - C.transfer_ckey(H) + H.key = C.key if(grab_ghost_when == CLONER_FRESH_CLONE) H.grab_ghost() @@ -293,6 +292,7 @@ temp = "Cloning cycle already in progress." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) else - pod.growclone(null, mob_occupant.real_name, dna.uni_identity, dna.struc_enzymes, clone_species, dna.features, mob_occupant.faction) + pod.growclone(mob_occupant.real_name, dna.uni_identity, dna.mutation_index, null, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction) temp = "[mob_occupant.real_name] => Cloning data sent to pod." playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index a8ba9850ff..9632943c19 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -284,12 +284,12 @@ if(equip_ready) //disabled return var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) + var/pow_chan = get_MUTATION_POWER_channel(A) if(pow_chan) return 1000 //making magic -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_MUTATION_POWER_channel(var/area/A) var/pow_chan if(A) for(var/c in use_channels) diff --git a/code/game/objects/items/chromosome.dm b/code/game/objects/items/chromosome.dm new file mode 100644 index 0000000000..1340e7f35b --- /dev/null +++ b/code/game/objects/items/chromosome.dm @@ -0,0 +1,92 @@ +/obj/item/chromosome + name = "blank chromosome" + icon = 'icons/obj/chromosomes.dmi' + icon_state = "" + desc = "A tube holding chromosomic data." + force = 0 + w_class = WEIGHT_CLASS_SMALL + + var/stabilizer_coeff = 1 //lower is better, affects genetic stability + var/synchronizer_coeff = 1 //lower is better, affects chance to backfire + var/power_coeff = 1 //higher is better, affects "strength" + var/energy_coeff = 1 //lower is better. affects recharge time + + var/weight = 5 + +/obj/item/chromosome/proc/can_apply(datum/mutation/human/HM) + if(!HM || !(HM.can_chromosome == CHROMOSOME_NONE)) + return FALSE + if((stabilizer_coeff != 1) && (HM.stabilizer_coeff != -1)) //if the chromosome is 1, we dont change anything. If the mutation is -1, we cant change it. sorry + return TRUE + if((synchronizer_coeff != 1) && (HM.synchronizer_coeff != -1)) + return TRUE + if((power_coeff != 1) && (HM.power_coeff != -1)) + return TRUE + if((energy_coeff != 1) && (HM.energy_coeff != -1)) + return TRUE + +/obj/item/chromosome/proc/apply(datum/mutation/human/HM) + if(HM.stabilizer_coeff != -1) + HM.stabilizer_coeff = stabilizer_coeff + if(HM.synchronizer_coeff != -1) + HM.synchronizer_coeff = synchronizer_coeff + if(HM.power_coeff != -1) + HM.power_coeff = power_coeff + if(HM.energy_coeff != -1) + HM.energy_coeff = energy_coeff + HM.can_chromosome = 2 + HM.chromosome_name = name + HM.modify() + qdel(src) + +/proc/generate_chromosome() + var/static/list/chromosomes + if(!chromosomes) + chromosomes = list() + for(var/A in subtypesof(/obj/item/chromosome)) + var/obj/item/chromosome/CM = A + if(!initial(CM.weight)) + break + chromosomes[A] = initial(CM.weight) + return pickweight(chromosomes) + + +/obj/item/chromosome/stabilizer + name = "stabilizer chromosome" + desc = "A chromosome that adjusts to the body to reduce genetic damage by 20%." + icon_state = "stabilizer" + stabilizer_coeff = 0.8 + weight = 1 + +/obj/item/chromosome/synchronizer + name = "synchronizer chromosome" + desc = "A chromosome that gives the mind more controle over the mutation, reducing knockback and downsides by 50%." + icon_state = "synchronizer" + synchronizer_coeff = 0.5 + +/obj/item/chromosome/power + name = "power chromosome" + desc = "A power chromosome for boosting certain mutation's power by 50%." + icon_state = "power" + power_coeff = 1.5 + +/obj/item/chromosome/energy + name = "energetic chromosome" + desc = "A chromosome that reduces cooldown on action based mutations by 50%." + icon_state = "energy" + energy_coeff = 0.5 + +/obj/item/chromosome/reinforcer + name = "reinforcement chromosome" + desc = "Renders the mutation immune to mutadone." + icon_state = "reinforcer" + weight = 3 + +/obj/item/chromosome/reinforcer/can_apply(datum/mutation/human/HM) + if(!HM || !(HM.can_chromosome == CHROMOSOME_NONE)) + return FALSE + return !HM.mutadone_proof + +/obj/item/chromosome/reinforcer/apply(datum/mutation/human/HM) + HM.mutadone_proof = TRUE + ..() \ No newline at end of file diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 10a2b2c807..2b942b36ec 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -66,7 +66,7 @@ build_path = /obj/machinery/dna_scannernew req_components = list( /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 1, + /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/micro_laser = 1, /obj/item/stack/sheet/glass = 1, /obj/item/stack/cable_coil = 2) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 00381b9838..29009a88f7 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -150,7 +150,10 @@ SLIME SCANNER msg += "\n\tSubject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage." if(advanced) msg += "\n\tCellular Damage Level: [M.getCloneLoss()]." - + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(advanced && H.has_dna()) + to_chat(user, "\tGenetic Stability: [H.dna.stability]%.") to_chat(user, msg) msg = "" @@ -777,3 +780,62 @@ SLIME SCANNER var/response = SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, TRUE) if(!response) to_chat(user, "No nanites detected in the subject.") + +/obj/item/sequence_scanner + name = "genetic sequence scanner" + icon = 'icons/obj/device.dmi' + icon_state = "gene" + item_state = "healthanalyzer" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + desc = "A hand-held scanner able to swiftly scan someone for potential mutations. Hold near a DNA console to update from their database." + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON + slot_flags = ITEM_SLOT_BELT + throwforce = 3 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 7 + materials = list(MAT_METAL=200) + var/list/discovered = list() //hit a dna console to update the scanners database + +/obj/item/sequence_scanner/attack(mob/living/M, mob/living/carbon/human/user) + user.visible_message("[user] has analyzed [M]'s genetic sequence.") + + add_fingerprint(user) + + gene_scan(M, user, src) + +/obj/item/sequence_scanner/afterattack(obj/O, mob/user, proximity) + . = ..() + if(!istype(O) || !proximity) + return + + if(istype(O, /obj/machinery/computer/scan_consolenew)) + var/obj/machinery/computer/scan_consolenew/C = O + if(C.stored_research) + to_chat(user, "[name] database updated.") + discovered = C.stored_research.discovered_mutations + else + to_chat(user,"No database to update from.") + +/proc/gene_scan(mob/living/carbon/C, mob/living/user, obj/item/sequence_scanner/G) + if(!iscarbon(C) || !C.has_dna()) + return + to_chat(user, "[C.name]'s potential mutations.") + for(var/A in C.dna.mutation_index) + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(A) + var/mut_name + if(G && (A in G.discovered)) + mut_name = "[HM.name] ([HM.alias])" + else + mut_name = HM.alias + var/temp = GET_GENE_STRING(HM.type, C.dna) + var/display + for(var/i in 0 to length(temp) / DNA_MUTATION_BLOCKS-1) + if(i) + display += "-" + display += copytext(temp, 1 + i*DNA_MUTATION_BLOCKS, DNA_MUTATION_BLOCKS*(1+i) + 1) + + + to_chat(user, "- [mut_name] > [display]") \ No newline at end of file diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 10c81e9dbb..125c356a7f 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -14,33 +14,25 @@ var/list/add_mutations = list() var/list/remove_mutations = list() - var/list/add_mutations_static = list() - var/list/remove_mutations_static = list() - var/used = 0 /obj/item/dnainjector/attack_paw(mob/user) return attack_hand(user) -/obj/item/dnainjector/proc/prepare() - for(var/mut_key in add_mutations_static) - add_mutations.Add(GLOB.mutations_list[mut_key]) - for(var/mut_key in remove_mutations_static) - remove_mutations.Add(GLOB.mutations_list[mut_key]) - /obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user) - prepare() - if(M.has_dna() && !HAS_TRAIT(M, TRAIT_RADIMMUNE) && !HAS_TRAIT(M, TRAIT_NOCLONE)) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" - for(var/datum/mutation/human/HM in remove_mutations) - HM.force_lose(M) - for(var/datum/mutation/human/HM in add_mutations) - if(HM.name == RACEMUT) + for(var/HM in remove_mutations) + M.dna.remove_mutation(HM) + for(var/HM in add_mutations) + if(HM == RACEMUT) message_admins("[ADMIN_LOOKUPFLW(user)] injected [key_name_admin(M)] with the [name] (MONKEY)") log_msg += " (MONKEY)" - HM.force_give(M) + if(M.dna.mutation_in_sequence(HM)) + M.dna.activate_mutation(HM) + else + M.dna.add_mutation(HM, MUT_EXTRA) if(fields) if(fields["name"] && fields["UE"] && fields["blood_type"]) M.real_name = fields["name"] @@ -90,123 +82,123 @@ /obj/item/dnainjector/antihulk name = "\improper DNA injector (Anti-Hulk)" desc = "Cures green skin." - remove_mutations_static = list(HULK) + remove_mutations = list(HULK) /obj/item/dnainjector/hulkmut name = "\improper DNA injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." - add_mutations_static = list(HULK) + add_mutations = list(HULK) /obj/item/dnainjector/xraymut name = "\improper DNA injector (X-ray)" desc = "Finally you can see what the Captain does." - add_mutations_static = list(XRAY) + add_mutations = list(XRAY) /obj/item/dnainjector/antixray name = "\improper DNA injector (Anti-X-ray)" desc = "It will make you see harder." - remove_mutations_static = list(XRAY) + remove_mutations = list(XRAY) ///////////////////////////////////// /obj/item/dnainjector/antiglasses name = "\improper DNA injector (Anti-Glasses)" desc = "Toss away those glasses!" - remove_mutations_static = list(BADSIGHT) + remove_mutations = list(BADSIGHT) /obj/item/dnainjector/glassesmut name = "\improper DNA injector (Glasses)" desc = "Will make you need dorkish glasses." - add_mutations_static = list(BADSIGHT) + add_mutations = list(BADSIGHT) /obj/item/dnainjector/epimut name = "\improper DNA injector (Epi.)" desc = "Shake shake shake the room!" - add_mutations_static = list(EPILEPSY) + add_mutations = list(EPILEPSY) /obj/item/dnainjector/antiepi name = "\improper DNA injector (Anti-Epi.)" desc = "Will fix you up from shaking the room." - remove_mutations_static = list(EPILEPSY) + remove_mutations = list(EPILEPSY) //////////////////////////////////// /obj/item/dnainjector/anticough name = "\improper DNA injector (Anti-Cough)" desc = "Will stop that awful noise." - remove_mutations_static = list(COUGH) + remove_mutations = list(COUGH) /obj/item/dnainjector/coughmut name = "\improper DNA injector (Cough)" desc = "Will bring forth a sound of horror from your throat." - add_mutations_static = list(COUGH) + add_mutations = list(COUGH) /obj/item/dnainjector/antidwarf name = "\improper DNA injector (Anti-Dwarfism)" desc = "Helps you grow big and strong." - remove_mutations_static = list(DWARFISM) + remove_mutations = list(DWARFISM) /obj/item/dnainjector/dwarf name = "\improper DNA injector (Dwarfism)" desc = "It's a small world after all." - add_mutations_static = list(DWARFISM) + add_mutations = list(DWARFISM) /obj/item/dnainjector/clumsymut name = "\improper DNA injector (Clumsy)" desc = "Makes clown minions." - add_mutations_static = list(CLOWNMUT) + add_mutations = list(CLOWNMUT) /obj/item/dnainjector/anticlumsy name = "\improper DNA injector (Anti-Clumsy)" desc = "Apply this for Security Clown." - remove_mutations_static = list(CLOWNMUT) + remove_mutations = list(CLOWNMUT) /obj/item/dnainjector/antitour name = "\improper DNA injector (Anti-Tour.)" desc = "Will cure Tourette's." - remove_mutations_static = list(TOURETTES) + remove_mutations = list(TOURETTES) /obj/item/dnainjector/tourmut name = "\improper DNA injector (Tour.)" desc = "Gives you a nasty case of Tourette's." - add_mutations_static = list(TOURETTES) + add_mutations = list(TOURETTES) /obj/item/dnainjector/stuttmut name = "\improper DNA injector (Stutt.)" desc = "Makes you s-s-stuttterrr." - add_mutations_static = list(NERVOUS) + add_mutations = list(NERVOUS) /obj/item/dnainjector/antistutt name = "\improper DNA injector (Anti-Stutt.)" desc = "Fixes that speaking impairment." - remove_mutations_static = list(NERVOUS) + remove_mutations = list(NERVOUS) /obj/item/dnainjector/antifire name = "\improper DNA injector (Anti-Fire)" desc = "Cures fire." - remove_mutations_static = list(COLDRES) + remove_mutations = list(SPACEMUT) /obj/item/dnainjector/firemut name = "\improper DNA injector (Fire)" desc = "Gives you fire." - add_mutations_static = list(COLDRES) + add_mutations = list(SPACEMUT) /obj/item/dnainjector/blindmut name = "\improper DNA injector (Blind)" desc = "Makes you not see anything." - add_mutations_static = list(BLINDMUT) + add_mutations = list(BLINDMUT) /obj/item/dnainjector/antiblind name = "\improper DNA injector (Anti-Blind)" desc = "IT'S A MIRACLE!!!" - remove_mutations_static = list(BLINDMUT) + remove_mutations = list(BLINDMUT) /obj/item/dnainjector/antitele name = "\improper DNA injector (Anti-Tele.)" desc = "Will make you not able to control your mind." - remove_mutations_static = list(TK) + remove_mutations = list(TK) /obj/item/dnainjector/telemut name = "\improper DNA injector (Tele.)" desc = "Super brain man!" - add_mutations_static = list(TK) + add_mutations = list(TK) /obj/item/dnainjector/telemut/darkbundle name = "\improper DNA injector" @@ -215,100 +207,171 @@ /obj/item/dnainjector/deafmut name = "\improper DNA injector (Deaf)" desc = "Sorry, what did you say?" - add_mutations_static = list(DEAFMUT) + add_mutations = list(DEAFMUT) /obj/item/dnainjector/antideaf name = "\improper DNA injector (Anti-Deaf)" desc = "Will make you hear once more." - remove_mutations_static = list(DEAFMUT) + remove_mutations = list(DEAFMUT) /obj/item/dnainjector/h2m name = "\improper DNA injector (Human > Monkey)" desc = "Will make you a flea bag." - add_mutations_static = list(RACEMUT) + add_mutations = list(RACEMUT) /obj/item/dnainjector/m2h name = "\improper DNA injector (Monkey > Human)" desc = "Will make you...less hairy." - remove_mutations_static = list(RACEMUT) + remove_mutations = list(RACEMUT) /obj/item/dnainjector/antichameleon name = "\improper DNA injector (Anti-Chameleon)" - remove_mutations_static = list(CHAMELEON) + remove_mutations = list(CHAMELEON) /obj/item/dnainjector/chameleonmut name = "\improper DNA injector (Chameleon)" - add_mutations_static = list(CHAMELEON) + add_mutations = list(CHAMELEON) /obj/item/dnainjector/antiwacky name = "\improper DNA injector (Anti-Wacky)" - remove_mutations_static = list(WACKY) + remove_mutations = list(WACKY) /obj/item/dnainjector/wackymut name = "\improper DNA injector (Wacky)" - add_mutations_static = list(WACKY) + add_mutations = list(WACKY) /obj/item/dnainjector/antimute name = "\improper DNA injector (Anti-Mute)" - remove_mutations_static = list(MUT_MUTE) + remove_mutations = list(MUT_MUTE) /obj/item/dnainjector/mutemut name = "\improper DNA injector (Mute)" - add_mutations_static = list(MUT_MUTE) + add_mutations = list(MUT_MUTE) /obj/item/dnainjector/antismile name = "\improper DNA injector (Anti-Smile)" - remove_mutations_static = list(SMILE) + remove_mutations = list(SMILE) /obj/item/dnainjector/smilemut name = "\improper DNA injector (Smile)" - add_mutations_static = list(SMILE) + add_mutations = list(SMILE) /obj/item/dnainjector/unintelligiblemut name = "\improper DNA injector (Unintelligible)" - add_mutations_static = list(UNINTELLIGIBLE) + add_mutations = list(UNINTELLIGIBLE) /obj/item/dnainjector/antiunintelligible name = "\improper DNA injector (Anti-Unintelligible)" - remove_mutations_static = list(UNINTELLIGIBLE) + remove_mutations = list(UNINTELLIGIBLE) /obj/item/dnainjector/swedishmut name = "\improper DNA injector (Swedish)" - add_mutations_static = list(SWEDISH) + add_mutations = list(SWEDISH) /obj/item/dnainjector/antiswedish name = "\improper DNA injector (Anti-Swedish)" - remove_mutations_static = list(SWEDISH) + remove_mutations = list(SWEDISH) /obj/item/dnainjector/chavmut name = "\improper DNA injector (Chav)" - add_mutations_static = list(CHAV) + add_mutations = list(CHAV) /obj/item/dnainjector/antichav name = "\improper DNA injector (Anti-Chav)" - remove_mutations_static = list(CHAV) + remove_mutations = list(CHAV) /obj/item/dnainjector/elvismut name = "\improper DNA injector (Elvis)" - add_mutations_static = list(ELVIS) + add_mutations = list(ELVIS) /obj/item/dnainjector/antielvis name = "\improper DNA injector (Anti-Elvis)" - remove_mutations_static = list(ELVIS) + remove_mutations = list(ELVIS) /obj/item/dnainjector/lasereyesmut name = "\improper DNA injector (Laser Eyes)" - add_mutations_static = list(LASEREYES) + add_mutations = list(LASEREYES) /obj/item/dnainjector/antilasereyes name = "\improper DNA injector (Anti-Laser Eyes)" - remove_mutations_static = list(LASEREYES) + remove_mutations = list(LASEREYES) + +/obj/item/dnainjector/thermalmut + name = "\improper DNA injector (Thermal Vision)" + add_mutations = list(THERMAL) + +/obj/item/dnainjector/antithermal + name = "\improper DNA injector (Anti-Thermal Vision)" + remove_mutations = list(THERMAL) + +/obj/item/dnainjector/telepathymut + name = "\improper DNA injector (Telepathy)" + add_mutations = list(TELEPATHY) + +/obj/item/dnainjector/antitelepathy + name = "\improper DNA injector (Anti-Telepathy)" + remove_mutations = list(TELEPATHY) + +/obj/item/dnainjector/voidmut + name = "\improper DNA injector (Void Magnet)" + add_mutations = list(VOID) + +/obj/item/dnainjector/antivoid + name = "\improper DNA injector (Anti-Void Magnet)" + remove_mutations = list(VOID) + +/obj/item/dnainjector/firebreathmut + name = "\improper DNA injector (Firebreath)" + add_mutations = list(FIREBREATH) + +/obj/item/dnainjector/antifirebreath + name = "\improper DNA injector (Anti-Firebreath)" + remove_mutations = list(FIREBREATH) + +/obj/item/dnainjector/insulatedmut + name = "\improper DNA injector (Insulated)" + add_mutations = list(INSULATED) + +/obj/item/dnainjector/antiinsulated + name = "\improper DNA injector (Anti-Insulated)" + remove_mutations = list(INSULATED) + +/obj/item/dnainjector/shocktouchmut + name = "\improper DNA injector (Shock Touch)" + add_mutations = list(SHOCKTOUCH) + +/obj/item/dnainjector/antishocktouch + name = "\improper DNA injector (Anti-Shock Touch)" + remove_mutations = list(SHOCKTOUCH) + +/obj/item/dnainjector/antenna + name = "\improper DNA injector (Antenna)" + add_mutations = list(ANTENNA) + +/obj/item/dnainjector/antiantenna + name = "\improper DNA injector (Anti-Antenna)" + remove_mutations = list(ANTENNA) + +/obj/item/dnainjector/paranoia + name = "\improper DNA injector (Paranoia)" + add_mutations = list(PARANOIA) + +/obj/item/dnainjector/antiparanoia + name = "\improper DNA injector (Anti-Paranoia)" + remove_mutations = list(PARANOIA) + +/obj/item/dnainjector/mindread + name = "\improper DNA injector (Mindread)" + add_mutations = list(MINDREAD) + +/obj/item/dnainjector/antimindread + name = "\improper DNA injector (Anti-Mindread)" + remove_mutations = list(MINDREAD) /obj/item/dnainjector/timed var/duration = 600 /obj/item/dnainjector/timed/inject(mob/living/carbon/M, mob/user) - prepare() if(M.stat == DEAD) //prevents dead people from having their DNA changed to_chat(user, "You can't modify [M]'s DNA while [M.p_theyre()] dead.") return FALSE @@ -317,23 +380,22 @@ M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" var/endtime = world.time+duration - for(var/datum/mutation/human/HM in remove_mutations) - if(HM.name == RACEMUT) + for(var/mutation in remove_mutations) + if(mutation == RACEMUT) if(ishuman(M)) continue - M = HM.force_lose(M) + M = M.dna.remove_mutation(mutation) else - HM.force_lose(M) - for(var/datum/mutation/human/HM in add_mutations) - if((HM in M.dna.mutations) && !(M.dna.temporary_mutations[HM.name])) + M.dna.remove_mutation(mutation) + for(var/mutation in add_mutations) + if(M.dna.get_mutation(mutation)) continue //Skip permanent mutations we already have. - if(HM.name == RACEMUT && ishuman(M)) + if(mutation == RACEMUT && ishuman(M)) message_admins("[ADMIN_LOOKUPFLW(user)] injected [key_name_admin(M)] with the [name] (MONKEY)") log_msg += " (MONKEY)" - M = HM.force_give(M) + M = M.dna.add_mutation(mutation, MUT_OTHER, endtime) else - HM.force_give(M) - M.dna.temporary_mutations[HM.name] = endtime + M.dna.add_mutation(mutation, MUT_OTHER, endtime) if(fields) if(fields["name"] && fields["UE"] && fields["blood_type"]) if(!M.dna.previous["name"]) @@ -361,9 +423,41 @@ /obj/item/dnainjector/timed/hulk name = "\improper DNA injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." - add_mutations_static = list(HULK) + add_mutations = list(HULK) /obj/item/dnainjector/timed/h2m name = "\improper DNA injector (Human > Monkey)" desc = "Will make you a flea bag." - add_mutations_static = list(RACEMUT) + add_mutations = list(RACEMUT) + +/obj/item/dnainjector/activator + name = "\improper DNA activator" + desc = "Activates the current mutation on injection, if the subject has it." + var/doitanyway = FALSE + var/research = FALSE //Set to true to get expended and filled injectors for chromosomes + var/filled = FALSE + +/obj/item/dnainjector/activator/inject(mob/living/carbon/M, mob/user) + if(M.has_dna() && !HAS_TRAIT(M, TRAIT_RADIMMUNE) && !HAS_TRAIT(M,TRAIT_NOCLONE)) + M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) + var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" + for(var/mutation in add_mutations) + var/datum/mutation/human/HM = mutation + if(istype(HM, /datum/mutation/human)) + mutation = HM.type + if(!M.dna.activate_mutation(HM)) + if(!doitanyway) + log_msg += "(FAILED)" + else + M.dna.add_mutation(HM, MUT_EXTRA) + name = "expended [name]" + else if(research && M.client) + filled = TRUE + name = "filled [name]" + else + name = "expended [name]" + log_msg += "([mutation])" + log_attack("[log_msg] [loc_name(user)]") + return TRUE + return FALSE + diff --git a/code/modules/antagonists/changeling/powers/chameleon_skin.dm b/code/modules/antagonists/changeling/powers/chameleon_skin.dm index b7545353b2..03f3aab473 100644 --- a/code/modules/antagonists/changeling/powers/chameleon_skin.dm +++ b/code/modules/antagonists/changeling/powers/chameleon_skin.dm @@ -13,17 +13,14 @@ var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1 if(!istype(H)) // req_human could be done in can_sting stuff. return - var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON] - if(HM in H.dna.mutations) - HM.force_lose(H) + if(H.dna.get_mutation(CHAMELEON)) + H.dna.remove_mutation(CHAMELEON) else - HM.force_give(H) + H.dna.add_mutation(CHAMELEON) return TRUE /obj/effect/proc_holder/changeling/chameleon_skin/on_refund(mob/user) action.Remove(user) if(user.has_dna()) var/mob/living/carbon/C = user - var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON] - if(HM in C.dna.mutations) - HM.force_lose(C) \ No newline at end of file + C.dna.remove_mutation(CHAMELEON) \ No newline at end of file diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm index 21cab26d1e..67359b28d3 100644 --- a/code/modules/antagonists/wishgranter/wishgranter.dm +++ b/code/modules/antagonists/wishgranter/wishgranter.dm @@ -25,5 +25,5 @@ return H.dna.add_mutation(HULK) H.dna.add_mutation(XRAY) - H.dna.add_mutation(COLDRES) + H.dna.add_mutation(SPACEMUT) H.dna.add_mutation(TK) \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 4971d82053..af0ddd3357 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -94,7 +94,7 @@ to_chat(user, "Your wish is granted, but at a terrible cost...") to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart.") user.dna.add_mutation(LASEREYES) - user.dna.add_mutation(COLDRES) + user.dna.add_mutation(SPACEMUT) user.dna.add_mutation(XRAY) user.set_species(/datum/species/shadow) if("Wealth") diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 643d072469..88db23e05c 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -679,3 +679,10 @@ GLOBAL_LIST_EMPTY(asset_datums) Insert(initial(D.id), I) return ..() + +/datum/asset/simple/genetics + assets = list( + "dna_discovered.gif" = 'html/dna_discovered.gif', + "dna_undiscovered.gif" = 'html/dna_undiscovered.gif', + "dna_extra.gif" = 'html/dna_extra.gif' +) \ No newline at end of file diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 07a399a1b6..9573bcf519 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -57,7 +57,7 @@ var/datum/disease/dnaspread/DS = D DS.strain_data["name"] = H.real_name DS.strain_data["UI"] = H.dna.uni_identity - DS.strain_data["SE"] = H.dna.struc_enzymes + DS.strain_data["SE"] = H.dna.mutation_index else D = new virus_type() else diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index d7f59ff883..6efa95cd91 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -32,4 +32,5 @@ backpack = /obj/item/storage/backpack/genetics satchel = /obj/item/storage/backpack/satchel/gen duffelbag = /obj/item/storage/backpack/duffelbag/med + l_pocket = /obj/item/sequence_scanner diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index ab3b20ac9f..b79cbd846a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -463,30 +463,45 @@ if(cooldown < world.time) SSblackbox.record_feedback("amount", "immortality_talisman_uses", 1) cooldown = world.time + 600 - user.visible_message("[user] vanishes from reality, leaving a hole in [user.p_their()] place!") - var/obj/effect/immortality_talisman/Z = new(get_turf(src.loc)) - Z.name = "hole in reality" - Z.desc = "It's shaped an awful lot like [user.name]." - Z.setDir(user.dir) - user.forceMove(Z) - user.notransform = 1 - user.status_flags |= GODMODE - addtimer(CALLBACK(src, .proc/return_to_reality, user, Z), 100) + new /obj/effect/immortality_talisman(get_turf(user), user) else to_chat(user, "[src] is not ready yet!") -/obj/item/immortality_talisman/proc/return_to_reality(mob/user, obj/effect/immortality_talisman/Z) - user.status_flags &= ~GODMODE - user.notransform = 0 - user.forceMove(get_turf(Z)) - user.visible_message("[user] pops back into reality!") - Z.can_destroy = TRUE - qdel(Z) - /obj/effect/immortality_talisman + name = "hole in reality" + desc = "It's shaped an awful lot like a person." icon_state = "blank" icon = 'icons/effects/effects.dmi' - var/can_destroy = FALSE + var/vanish_description = "vanishes from reality" + var/can_destroy = TRUE + +/obj/effect/immortality_talisman/Initialize(mapload, mob/new_user) + . = ..() + if(new_user) + vanish(new_user) + +/obj/effect/immortality_talisman/proc/vanish(mob/user) + user.visible_message("[user] [vanish_description], leaving a hole in [user.p_their()] place!") + + desc = "It's shaped an awful lot like [user.name]." + setDir(user.dir) + + user.forceMove(src) + user.notransform = TRUE + user.status_flags |= GODMODE + + can_destroy = FALSE + + addtimer(CALLBACK(src, .proc/unvanish, user), 10 SECONDS) + +/obj/effect/immortality_talisman/proc/unvanish(mob/user) + user.status_flags &= ~GODMODE + user.notransform = FALSE + user.forceMove(get_turf(src)) + + user.visible_message("[user] pops back into reality!") + can_destroy = TRUE + qdel(src) /obj/effect/immortality_talisman/attackby() return @@ -503,6 +518,9 @@ else . = ..() +/obj/effect/immortality_talisman/void + vanish_description = "is dragged into the void" + //Shared Bag diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 52cf82a06a..0ffa299b0b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -181,7 +181,7 @@ if(HAS_TRAIT(src, TRAIT_PACIFISM)) to_chat(src, "You gently let go of [throwable_mob].") return - + adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) @@ -623,7 +623,13 @@ if(M.name == XRAY) sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_in_dark = max(see_in_dark, 8) + if(HAS_TRAIT(src, TRAIT_THERMAL_VISION)) + sight |= (SEE_MOBS) + lighting_alpha = min(lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + if(HAS_TRAIT(src, TRAIT_XRAY_VISION)) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = max(see_in_dark, 8) if(see_override) see_invisible = see_override . = ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 8bf6b4ad3a..c22144f087 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -69,6 +69,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/siemens_coeff = 1 //base electrocution coefficient var/damage_overlay_type = "human" //what kind of damage overlays (if any) appear on our species when wounded? var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"] + var/inert_mutation = DWARFISM var/list/special_step_sounds //Sounds to override barefeet walkng var/grab_sound //Special sound for grabbing @@ -361,6 +362,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else C.type_of_meat = initial(meat) + //If their inert mutation is not the same, swap it out + if((inert_mutation != new_species.inert_mutation) && LAZYLEN(C.dna.mutation_index) && (inert_mutation in C.dna.mutation_index)) + C.dna.remove_mutation(inert_mutation) + //keep it at the right spot, so we can't have people taking shortcuts + var/location = C.dna.mutation_index.Find(inert_mutation) + C.dna.mutation_index[location] = new_species.inert_mutation + C.dna.mutation_index[new_species.inert_mutation] = create_sequence(new_species.inert_mutation) + SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src) /datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour) @@ -1378,7 +1387,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(radiation > RAD_MOB_MUTATE) if(prob(1)) to_chat(H, "You mutate!") - H.randmutb() + H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) H.emote("gasp") H.domutcheck() diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 9317a51050..23fcf2648b 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -23,6 +23,7 @@ exotic_bloodtype = "L" disliked_food = GRAIN | DAIRY liked_food = GROSS | MEAT + inert_mutation = FIREBREATH /datum/species/lizard/after_equip_job(datum/job/J, mob/living/carbon/human/H) H.grant_language(/datum/language/draconic) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index f0dd48c6c1..172fa5a6c3 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -60,9 +60,9 @@ H.Knockdown(100) H.visible_message("[H] writhes in pain as [H.p_their()] vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") if(prob(80)) - H.randmutb() + H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) else - H.randmutg() + H.easy_randmut(POSITIVE) H.domutcheck() else H.adjustFireLoss(rand(5,15)) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 0061c7ed70..ec4e45a084 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -424,7 +424,6 @@ /mob/living/carbon/handle_mutations_and_radiation() if(dna && dna.temporary_mutations.len) - var/datum/mutation/human/HM for(var/mut in dna.temporary_mutations) if(dna.temporary_mutations[mut] < world.time) if(mut == UI_CHANGED) @@ -447,9 +446,9 @@ dna.previous.Remove("blood_type") dna.temporary_mutations.Remove(mut) continue - HM = GLOB.mutations_list[mut] - HM.force_lose(src) - dna.temporary_mutations.Remove(mut) + for(var/datum/mutation/human/HM in dna.mutations) + if(HM && HM.timed) + dna.remove_mutation(HM.type) radiation -= min(radiation, RAD_LOSS_PER_TICK) if(radiation > RAD_MOB_SAFE) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 906e138b0a..1c4ca28c58 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -38,7 +38,7 @@ if(radiation > RAD_MOB_MUTATE) if(prob(1)) to_chat(src, "You mutate!") - randmutb() + easy_randmut(NEGATIVE+MINOR_NEGATIVE) emote("gasp") domutcheck() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6394b45aa7..2b6d1a7427 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -50,9 +50,8 @@ O.updateappearance(icon_update=0) if(tr_flags & TR_KEEPSE) - O.dna.struc_enzymes = dna.struc_enzymes - var/datum/mutation/human/race/R = GLOB.mutations_list[RACEMUT] - O.dna.struc_enzymes = R.set_se(O.dna.struc_enzymes, on=1)//we don't want to keep the race block inactive + O.dna.mutation_index = dna.mutation_index + O.dna.set_se(1, GET_INITIALIZED_MUTATION(RACEMUT)) if(suiciding) O.suiciding = suiciding @@ -210,9 +209,8 @@ O.name = O.real_name if(tr_flags & TR_KEEPSE) - O.dna.struc_enzymes = dna.struc_enzymes - var/datum/mutation/human/race/R = GLOB.mutations_list[RACEMUT] - O.dna.struc_enzymes = R.set_se(O.dna.struc_enzymes, on=0)//we don't want to keep the race block active + O.dna.mutation_index = dna.mutation_index + O.dna.set_se(0, GET_INITIALIZED_MUTATION(RACEMUT)) O.domutcheck() if(suiciding) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index d8ff084227..6adce8f204 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -983,7 +983,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/M) M.jitteriness = 0 if(M.has_dna()) - M.dna.remove_all_mutations() + M.dna.remove_all_mutations(mutadone = TRUE) if(!QDELETED(M)) //We were a monkey, now a human ..() diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index f97204b45e..62f2da33ef 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -43,9 +43,9 @@ if((method==VAPOR && prob(min(33, reac_volume))) || method==INGEST || method==PATCH || method==INJECT) M.randmuti() if(prob(98)) - M.randmutb() + M.easy_randmut(NEGATIVE+MINOR_NEGATIVE) else - M.randmutg() + M.easy_randmut(POSITIVE) M.updateappearance() M.domutcheck() ..() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index e70362553c..75b705fc35 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -162,6 +162,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/genescanner + name = "Genetic Sequence Analyzer" + desc = "A handy hand-held analyzers for quickly determining mutations and collecting the full sequence." + id = "genescanner" + build_path = /obj/item/sequence_scanner + build_type = PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/healthanalyzer_advanced name = "Advanced Health Analyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 17294fe108..dc1add8e58 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -20,6 +20,7 @@ var/largest_bomb_value = 0 var/organization = "Third-Party" //Organization name, used for display. var/list/last_bitcoins = list() //Current per-second production, used for display only. + var/list/discovered_mutations = list() //Mutations discovered by genetics, this way they are shared and cant be destroyed by destroying a single console var/list/tiers = list() //Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on /datum/techweb/New() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 6877ba71f6..1a3601beba 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -71,7 +71,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen") + design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen","genescanner") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index 794ed797ad..b4c236d150 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -1,6 +1,8 @@ /obj/effect/proc_holder/spell/targeted/touch var/hand_path = /obj/item/melee/touch_attack var/obj/item/melee/touch_attack/attached_hand = null + var/drawmessage = "You channel the power of the spell to your hand." + var/dropmessage = "You draw the power out of your hand." invocation_type = "none" //you scream on connecting, not summoning include_user = 1 range = -1 @@ -21,7 +23,7 @@ /obj/effect/proc_holder/spell/targeted/touch/cast(list/targets,mob/user = usr) if(!QDELETED(attached_hand)) remove_hand(TRUE) - to_chat(user, "You draw the power out of your hand.") + to_chat(user, "[dropmessage]") return for(var/mob/living/carbon/C in targets) @@ -43,7 +45,7 @@ remove_hand(TRUE) to_chat(user, "Your hands are full!") return FALSE - to_chat(user, "You channel the power of the spell to your hand.") + to_chat(user, "[drawmessage]") return TRUE diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 31f08f0e87..fdc7ac9fe9 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -108,7 +108,7 @@ for(var/X in C.dna.mutations) //some mutations require having specific limbs to be kept. var/datum/mutation/human/MT = X if(MT.limb_req && MT.limb_req == body_zone) - MT.force_lose(C) + C.dna.force_lose(MT) for(var/X in C.internal_organs) //internal organs inside the dismembered limb are dropped. var/obj/item/organ/O = X diff --git a/html/browser/scannernew.css b/html/browser/scannernew.css index 0e809a6760..6746a61a0d 100644 --- a/html/browser/scannernew.css +++ b/html/browser/scannernew.css @@ -16,3 +16,24 @@ float: left; } +img.selected +{ + border: 1px solid blue; +} +img.unselected +{ + border: 2px solid black; +} +div>table { + float: left; +} +td +{ + text-align: center; +} +a.clean +{ + background: none; + border: none; + marging: none; +} \ No newline at end of file diff --git a/html/dna_discovered.gif b/html/dna_discovered.gif new file mode 100644 index 0000000000000000000000000000000000000000..bc6b75f2f984fd761f9877d80e0f46c9abd2dc27 GIT binary patch literal 48972 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 E0I&Wb&Hw-a literal 0 HcmV?d00001 diff --git a/html/dna_extra.gif b/html/dna_extra.gif new file mode 100644 index 0000000000000000000000000000000000000000..c92218a6613373a1b1f03ae379cbc0fb1f135519 GIT binary patch literal 48105 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 EFWx(-M*si- literal 20768 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 diff --git a/icons/mob/actions/actions_genetic.dmi b/icons/mob/actions/actions_genetic.dmi new file mode 100644 index 0000000000000000000000000000000000000000..72bd87f97ebb5494980bd7cd46d0337223ff2a5b GIT binary patch literal 413 zcmV;O0b>4%P)OhBM-Bu2;Ctd zd=9|k4C#|C$adh^cmO^@!qWsIq&ODfIAtmm9E0Q`3!o5;PM)8{(xbA8VorcU=F%fv zEEk*hSg-lBrYYd9YFfv*FWD~}gr<0C=bYAR*n5Rl5AmD6M~pFCg|xs800000NkvXX Hu0mjf#PYOQ literal 0 HcmV?d00001 diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi index 072bfc8fe3cbf67a54de83ce57731d6ad406ef0b..7798b85c436a41cf37e2551942e5c7381a29954f 100644 GIT binary patch literal 25476 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 LLQ?ytVi)p12%AmQ literal 22665 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 literal 0 HcmV?d00001 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index f467da6fbfa21c45d916bc13ba6a47926471dc5a..60f15b5543d2752e6fc6d31901d93ae8f81a9f48 100644 GIT binary patch literal 48627 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 literal 46156 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