diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 3315f9e948b..a499a487292 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -74,6 +74,23 @@ var/global/list/datum/dna/gene/dna_genes[0] // New stuff var/species = "Human" + +// Make a copy of this strand. +// USE THIS WHEN COPYING STUFF OR YOU'LL GET CORRUPTION! +/datum/dna/proc/Clone() + var/datum/dna/new_dna = new() + new_dna.unique_enzymes=unique_enzymes + new_dna.b_type=b_type + new_dna.mutantrace=mutantrace + new_dna.real_name=real_name + new_dna.species=species + for(var/b=1;b<=STRUCDNASIZE;b++) + new_dna.SE[b]=SE[b] + if(b<=DNA_UI_LENGTH) + new_dna.UI[b]=UI[b] + new_dna.UpdateUI() + new_dna.UpdateSE() + /////////////////////////////////////// // UNIQUE IDENTITY /////////////////////////////////////// diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index ad790d496bb..df5fba64aa7 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -224,7 +224,7 @@ if(M) if (M.dna) - O.dna = M.dna + O.dna = M.dna.Clone() M.dna = null if (M.suiciding) @@ -298,7 +298,7 @@ if (M) if (M.dna) - O.dna = M.dna + O.dna = M.dna.Clone() M.dna = null if (M.suiciding) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index e2b8670886b..fe687c3dc2d 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -737,7 +737,7 @@ if(src.connected.occupant && src.connected.occupant.dna) var/datum/dna2/record/databuf=new databuf.types = DNA2_BUF_UE - databuf.dna = src.connected.occupant.dna + databuf.dna = src.connected.occupant.dna.Clone() databuf.name = "Unique Identifier" src.buffers[bufferId] = databuf return 1 @@ -746,7 +746,7 @@ if(src.connected.occupant && src.connected.occupant.dna) var/datum/dna2/record/databuf=new databuf.types = DNA2_BUF_UI|DNA2_BUF_UE - databuf.dna = src.connected.occupant.dna + databuf.dna = src.connected.occupant.dna.Clone() databuf.name = "Unique Identifier + Unique Enzymes" src.buffers[bufferId] = databuf return 1 @@ -755,7 +755,7 @@ if(src.connected.occupant && src.connected.occupant.dna) var/datum/dna2/record/databuf=new databuf.types = DNA2_BUF_SE - databuf.dna = src.connected.occupant.dna + databuf.dna = src.connected.occupant.dna.Clone() databuf.name = "Structural Enzymes" src.buffers[bufferId] = databuf return 1 diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 952f7df0f48..1ceea87b43c 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -44,7 +44,7 @@ if(M) if (M.dna) - O.dna = M.dna + O.dna = M.dna.Clone() M.dna = null if (M.suiciding) @@ -119,7 +119,7 @@ if (M) if (M.dna) - O.dna = M.dna + O.dna = M.dna.Clone() M.dna = null if (M.suiciding) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 6a45fbc0119..715a75cdbbc 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -188,7 +188,7 @@ changeling.chem_charges -= 5 src.visible_message("[src] transforms!") changeling.geneticdamage = 30 - src.dna = chosen_dna + src.dna = chosen_dna.Clone() src.real_name = chosen_dna.real_name src.flavor_text = "" src.UpdateAppearance() @@ -240,7 +240,7 @@ del(animation) var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src) - O.dna = C.dna + O.dna = C.dna.Clone() C.dna = null for(var/obj/item/W in C) @@ -293,7 +293,7 @@ changeling.chem_charges-- C.remove_changeling_powers() C.visible_message("[C] transforms!") - C.dna = chosen_dna + C.dna = chosen_dna.Clone() var/list/implants = list() for (var/obj/item/weapon/implant/I in C) //Still preserving implants @@ -326,7 +326,7 @@ O.gender = FEMALE else O.gender = MALE - O.dna = C.dna + O.dna = C.dna.Clone() C.dna = null O.real_name = chosen_dna.real_name @@ -731,7 +731,7 @@ var/list/datum/dna/hivemind_bank = list() src << "Our sting appears ineffective against its DNA." return 0 T.visible_message("[T] transforms!") - T.dna = chosen_dna + T.dna = chosen_dna.Clone() T.real_name = chosen_dna.real_name T.UpdateAppearance() domutcheck(T, null) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b5e8462a93d..c66d1ba8045 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -446,9 +446,13 @@ Traitors and the like can also be revived with the previous role mostly intact. if(record_found)//Pull up their name from database records if they did have a mind. new_character.dna = new()//Let's first give them a new DNA. new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. - new_character.dna.SE = record_found.fields["enzymes"]//This is the default of enzymes so I think it's safe to go with. + + // I HATE BYOND. HATE. HATE. - N3X + var/list/newSE= record_found.fields["enzymes"] + var/list/newUI = record_found.fields["identity"] + new_character.dna.SE = newSE.Copy() //This is the default of enzymes so I think it's safe to go with. new_character.dna.UpdateSE() - new_character.UpdateAppearance(record_found.fields["identity"])//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. + new_character.UpdateAppearance(newUI.Copy())//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. new_character.dna.ready_dna(new_character) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 3ce15937ee3..abc980023f0 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -92,7 +92,7 @@ brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name - brainmob.dna = H.dna + brainmob.dna = H.dna.Clone() brainmob.container = src name = "Man-Machine Interface: [brainmob.real_name]" @@ -161,4 +161,4 @@ brainmob.emp_damage += rand(10,20) if(3) brainmob.emp_damage += rand(0,10) - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 6d3aa5f9acf..ac6d3061b10 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -28,7 +28,7 @@ brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name - brainmob.dna = H.dna + brainmob.dna = H.dna.Clone() brainmob.timeofhostdeath = H.timeofdeath if(H.mind) H.mind.transfer_to(brainmob) @@ -104,4 +104,4 @@ desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?" icon = 'icons/mob/alien.dmi' icon_state = "AlienBrain" - origin_tech = "biotech=7" \ No newline at end of file + origin_tech = "biotech=7" diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index d4c91e4cfcd..bea08693fbc 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -41,7 +41,7 @@ M.real_name = src.real_name if(src.dna) - M.dna = src.dna + M.dna = src.dna.Clone() if(mind) mind.transfer_to(M) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index d2a1b269bf8..b59459fbb60 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -29,10 +29,7 @@ O = new species.primitive(loc) - O.dna = dna - dna = null - //O.dna.uni_identity = "00600200A00E0110148FC01300B009" - //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna = dna.Clone() O.dna.SetSEState(MONKEYBLOCK,1) O.loc = loc O.viruses = viruses diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d5a265f417f..d7164378843 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -917,7 +917,7 @@ obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H) brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name - brainmob.dna = H.dna + brainmob.dna = H.dna.Clone() if(H.mind) H.mind.transfer_to(brainmob) respawnable_list += brainmob