From 9062d7fb23d6df6bc463ca7c32a101d86ad3905d Mon Sep 17 00:00:00 2001 From: "baloh.matevz" Date: Fri, 17 Aug 2012 03:55:09 +0000 Subject: [PATCH] - Added a real_name variable to DNA, which gets assigned when mobs are created and when preferences are copied as well as when changelings absorb mobs. This is so I could drop the dictionary-style list from changelings, which went list(real_name = \ref[dna]). What this meant was that if you absorbed multiple people whose real_name was "Unknown", you'd only have one dna to show for it. Now all of them will show and will be available to transform into. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4457 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/atom_procs.dm | 2 + code/game/dna.dm | 1 + .../gamemodes/changeling/changeling_powers.dm | 67 +++++++++++++++---- code/game/machinery/cloning.dm | 1 + code/game/machinery/hydroponics.dm | 1 + code/modules/mob/living/carbon/human/human.dm | 3 + .../mob/living/carbon/monkey/monkey.dm | 9 +-- code/modules/mob/login.dm | 5 +- code/modules/mob/new_player/preferences.dm | 3 + 9 files changed, 75 insertions(+), 17 deletions(-) diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index eccdadc7f30..64f7548f8a2 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -110,6 +110,7 @@ if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32)) if(!istype(H.dna, /datum/dna)) H.dna = new /datum/dna(null) + H.dna.real_name = H.real_name H.check_dna() //Now, deal with gloves. if (H.gloves && H.gloves != src) @@ -171,6 +172,7 @@ return 0 if (!istype(M.dna, /datum/dna)) M.dna = new /datum/dna(null) + M.dna.real_name = M.real_name M.check_dna() if (!( src.flags ) & FPRINT) return 0 diff --git a/code/game/dna.dm b/code/game/dna.dm index 7b179393bfc..0ea61c118e2 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -5,6 +5,7 @@ var/uni_identity = null var/b_type = "A+" var/mutantrace = null //The type of mutant race the player is if applicable (i.e. potato-man) + var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings, /datum/dna/proc/check_integrity(var/mob/living/carbon/human/character) if(character) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index d42e0e2fd18..89f9435483d 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -13,7 +13,7 @@ src.verbs += P.verbpath if(!mind.changeling.absorbed_dna.len) - mind.changeling.absorbed_dna[real_name] = dna + mind.changeling.absorbed_dna += dna return 1 //removes our changeling verbs @@ -109,7 +109,8 @@ usr.visible_message("[usr] sucks the fluids from [T]!") T << "You have been absorbed by the changeling!" - changeling.absorbed_dna[T.real_name] = T.dna + T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. + changeling.absorbed_dna += T.dna if(usr.nutrition < 400) usr.nutrition = min((usr.nutrition + T.nutrition), 400) changeling.chem_charges += 10 changeling.geneticpoints += 2 @@ -119,7 +120,7 @@ changeling.absorbed_dna |= T.mind.changeling.absorbed_dna //steal all their loot changeling.absorbedcount += T.mind.changeling.absorbedcount - T.mind.changeling.absorbed_dna = list("T.real_name"=T.dna) + T.mind.changeling.absorbed_dna = list(T.dna) if(T.mind.changeling.purchasedpowers) for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers) @@ -153,14 +154,27 @@ var/datum/changeling/changeling = changeling_power(5,1,0) if(!changeling) return - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in changeling.absorbed_dna + var/list/names = list() + for(var/datum/dna/DNA in changeling.absorbed_dna) + names += "[DNA.real_name]" + + var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names if(!S) return + var/datum/dna/chosen_dna + for(var/datum/dna/DNA in changeling.absorbed_dna) + if(S == "[DNA.real_name]") + chosen_dna = DNA + break + + if(!chosen_dna) + return + changeling.chem_charges -= 5 usr.visible_message("[usr] transforms!") changeling.geneticdamage = 30 - usr.dna = changeling.absorbed_dna[S] - usr.real_name = S + usr.dna = chosen_dna + usr.real_name = chosen_dna.real_name updateappearance(usr, usr.dna.uni_identity) domutcheck(usr, null) @@ -243,15 +257,28 @@ var/datum/changeling/changeling = changeling_power(1,1,0) if(!changeling) return - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in changeling.absorbed_dna + var/list/names = list() + for(var/datum/dna/DNA in changeling.absorbed_dna) + names += "[DNA.real_name]" + + var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names if(!S) return + var/datum/dna/chosen_dna + for(var/datum/dna/DNA in changeling.absorbed_dna) + if(S == "[DNA.real_name]") + chosen_dna = DNA + break + + if(!chosen_dna) + return + var/mob/living/carbon/C = usr changeling.chem_charges-- C.remove_changeling_powers() C.visible_message("[C] transforms!") - C.dna = changeling.absorbed_dna[S] + C.dna = chosen_dna var/list/implants = list() for (var/obj/item/weapon/implant/I in C) //Still preserving implants @@ -286,7 +313,7 @@ O.gender = MALE O.dna = C.dna C.dna = null - O.real_name = S + O.real_name = chosen_dna.real_name for(var/obj/T in C) del(T) @@ -566,17 +593,33 @@ var/datum/changeling/changeling = changeling_power(40) if(!changeling) return 0 - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in changeling.absorbed_dna + + + + var/list/names = list() + for(var/datum/dna/DNA in changeling.absorbed_dna) + names += "[DNA.real_name]" + + var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names if(!S) return + var/datum/dna/chosen_dna + for(var/datum/dna/DNA in changeling.absorbed_dna) + if(S == "[DNA.real_name]") + chosen_dna = DNA + break + + if(!chosen_dna) + return + var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting) if(!T) return 0 if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T))) usr << "Our sting appears ineffective against its DNA." return 0 T.visible_message("[T] transforms!") - T.dna = changeling.absorbed_dna[S] - T.real_name = S + T.dna = chosen_dna + T.real_name = chosen_dna.real_name updateappearance(T, T.dna.uni_identity) domutcheck(T, null) feedback_add_details("changeling_powers","TS") diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a4888e66224..678783887d7 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -181,6 +181,7 @@ if(!H.dna) H.dna = new /datum/dna() + H.dna.real_name = H.real_name if(ui) H.dna.uni_identity = ui updateappearance(H, ui) diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 716f33c0298..8c96cfbcdd2 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -910,6 +910,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) if(!podman.dna) podman.dna = new /datum/dna() + podman.dna.real_name = podman.real_name if(ui) podman.dna.uni_identity = ui updateappearance(podman, ui) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index aa8c05a990a..51a8749293c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -28,6 +28,9 @@ ..() + if(dna) + dna.real_name = real_name + /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) if ((!( yes ) || now_pushing)) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 81e7a030835..50de0446040 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -2,10 +2,15 @@ var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src + + if(name == "monkey") + name = text("monkey ([rand(1, 1000)])") + real_name = name if (!(dna)) if(gender == NEUTER) gender = pick(MALE, FEMALE) dna = new /datum/dna( null ) + dna.real_name = real_name dna.uni_identity = "00600200A00E0110148FC01300B009" dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" dna.unique_enzymes = md5(name) @@ -18,10 +23,6 @@ dna.uni_identity += gendervar dna.uni_identity += "12C" dna.uni_identity += "4E2" - - if(name == "monkey") - name = text("monkey ([rand(1, 1000)])") - real_name = name ..() return diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index d2451c67709..7d6c29dc14d 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -32,7 +32,10 @@ if(hud_used) del(hud_used) //remove the hud objects hud_used = new/obj/hud( src ) - if(!dna) dna = new /datum/dna(null) + if(!dna) + dna = new /datum/dna(null) + if(dna) + dna.real_name = real_name next_move = 1 sight |= SEE_SELF diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 7641dc9ebed..64a140c86d6 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -671,6 +671,9 @@ datum/preferences character.real_name = real_name + if(character.dna) + character.dna.real_name = character.real_name + character.gender = gender character.age = age