From fd6cc3e458756403b4f5960d7ea870ed2c15ee5a Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Wed, 11 Dec 2013 03:43:36 -0800 Subject: [PATCH] HA HA NEW GENE HANDLING Also fixed block injector crash. Conflicts: code/game/dna.dm code/modules/mob/living/carbon/monkey/monkey.dm html/changelog.html --- code/game/dna.dm | 1695 ----------------- code/game/dna/dna2_domutcheck.dm | 3 + code/game/dna/genes/monkey.dm | 6 +- .../objects/items/weapons/dna_injector.dm | 42 +- code/modules/mob/living/carbon/monkey/life.dm | 3 + .../mob/living/carbon/monkey/monkey.dm | 26 +- 6 files changed, 56 insertions(+), 1719 deletions(-) delete mode 100644 code/game/dna.dm diff --git a/code/game/dna.dm b/code/game/dna.dm deleted file mode 100644 index 89f76136f1d..00000000000 --- a/code/game/dna.dm +++ /dev/null @@ -1,1695 +0,0 @@ -/////////////////////////// DNA DATUM -/datum/dna - var/unique_enzymes = null - var/struc_enzymes = null - 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) - if(length(uni_identity) != 39) - //Lazy. - var/temp - - //Hair - var/hair = 0 - if(!character.h_style) - character.h_style = "Skinhead" - - var/hrange = round(4095 / hair_styles_list.len) - var/index = hair_styles_list.Find(character.h_style) - if(index) - hair = index * hrange - rand(1,hrange-1) - - //Facial Hair - var/beard = 0 - if(!character.f_style) - character.f_style = "Shaved" - - var/f_hrange = round(4095 / facial_hair_styles_list.len) - index = facial_hair_styles_list.Find(character.f_style) - if(index) - beard = index * f_hrange - rand(1,f_hrange-1) - - temp = add_zero2(num2hex((character.r_hair),1), 3) - temp += add_zero2(num2hex((character.b_hair),1), 3) - temp += add_zero2(num2hex((character.g_hair),1), 3) - temp += add_zero2(num2hex((character.r_facial),1), 3) - temp += add_zero2(num2hex((character.b_facial),1), 3) - temp += add_zero2(num2hex((character.g_facial),1), 3) - temp += add_zero2(num2hex(((character.s_tone + 220) * 16),1), 3) - temp += add_zero2(num2hex((character.r_eyes),1), 3) - temp += add_zero2(num2hex((character.g_eyes),1), 3) - temp += add_zero2(num2hex((character.b_eyes),1), 3) - - var/gender - - if (character.gender == MALE) - gender = add_zero2(num2hex((rand(1,(2050+BLOCKADD))),1), 3) - else - gender = add_zero2(num2hex((rand((2051+BLOCKADD),4094)),1), 3) - - temp += gender - temp += add_zero2(num2hex((beard),1), 3) - temp += add_zero2(num2hex((hair),1), 3) - - uni_identity = temp - if(length(struc_enzymes)!= 3*STRUCDNASIZE) - var/mutstring = "" - for(var/i = 1, i <= STRUCDNASIZE, i++) - mutstring += add_zero2(num2hex(rand(1,1024)),3) - - struc_enzymes = mutstring - if(length(unique_enzymes) != 32) - unique_enzymes = md5(character.real_name) - else - if(length(uni_identity) != 39) uni_identity = "00600200A00E0110148FC01300B0095BD7FD3F4" - if(length(struc_enzymes)!= 3*STRUCDNASIZE) struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" - -/datum/dna/proc/ready_dna(mob/living/carbon/human/character) - var/temp - - //Hair - var/hair = 0 - if(!character.h_style) - character.h_style = "Bald" - - var/hrange = round(4095 / hair_styles_list.len) - var/index = hair_styles_list.Find(character.h_style) - if(index) - hair = index * hrange - rand(1,hrange-1) - - //Facial Hair - var/beard = 0 - if(!character.f_style) - character.f_style = "Shaved" - - var/f_hrange = round(4095 / facial_hair_styles_list.len) - index = facial_hair_styles_list.Find(character.f_style) - if(index) - beard = index * f_hrange - rand(1,f_hrange-1) - - temp = add_zero2(num2hex((character.r_hair),1), 3) - temp += add_zero2(num2hex((character.b_hair),1), 3) - temp += add_zero2(num2hex((character.g_hair),1), 3) - temp += add_zero2(num2hex((character.r_facial),1), 3) - temp += add_zero2(num2hex((character.b_facial),1), 3) - temp += add_zero2(num2hex((character.g_facial),1), 3) - temp += add_zero2(num2hex(((character.s_tone + 220) * 16),1), 3) - temp += add_zero2(num2hex((character.r_eyes),1), 3) - temp += add_zero2(num2hex((character.g_eyes),1), 3) - temp += add_zero2(num2hex((character.b_eyes),1), 3) - - var/gender - - if (character.gender == MALE) - gender = add_zero2(num2hex((rand(1,(2050+BLOCKADD))),1), 3) - else - gender = add_zero2(num2hex((rand((2051+BLOCKADD),4094)),1), 3) - - temp += gender - temp += add_zero2(num2hex((beard),1), 3) - temp += add_zero2(num2hex((hair),1), 3) - - uni_identity = temp - - var/mutstring = "" - for(var/i = 1, i <= STRUCDNASIZE, i++) - mutstring += add_zero2(num2hex(rand(1,1024)),3) - - - struc_enzymes = mutstring - - unique_enzymes = md5(character.real_name) - reg_dna[unique_enzymes] = character.real_name - -/////////////////////////// DNA DATUM - -/////////////////////////// DNA HELPER-PROCS -/proc/getleftblocks(input,blocknumber,blocksize) - var/string - - if (blocknumber > 1) - string = copytext(input,1,((blocksize*blocknumber)-(blocksize-1))) - return string - else - return null - -/proc/getrightblocks(input,blocknumber,blocksize) - var/string - if (blocknumber < (length(input)/blocksize)) - string = copytext(input,blocksize*blocknumber+1,length(input)+1) - return string - else - return null - -/proc/getblockstring(input,block,subblock,blocksize,src,ui) // src is probably used here just for urls; ui is 1 when requesting for the unique identifier screen, 0 for structural enzymes screen - var/string - var/subpos = 1 // keeps track of the current sub block - var/blockpos = 1 // keeps track of the current block - - - for(var/i = 1, i <= length(input), i++) // loop through each letter - - var/pushstring - - if(subpos == subblock && blockpos == block) // if the current block/subblock is selected, mark it - pushstring = "[copytext(input, i, i+1)]" - else - if(ui) //This is for allowing block clicks to be differentiated - pushstring = "[copytext(input, i, i+1)]" - else - pushstring = "[copytext(input, i, i+1)]" - - string += pushstring // push the string to the return string - - if(subpos >= blocksize) // add a line break for every block - string += " | " - subpos = 0 - blockpos++ - - subpos++ - - return string - - -/proc/getblock(input,blocknumber,blocksize) - var/result - result = copytext(input ,(blocksize*blocknumber)-(blocksize-1),(blocksize*blocknumber)+1) - return result - -/proc/getblockbuffer(input,blocknumber,blocksize) - var/result[3] - var/block = copytext(input ,(blocksize*blocknumber)-(blocksize-1),(blocksize*blocknumber)+1) - for(var/i = 1, i <= 3, i++) - result[i] = copytext(block, i, i+1) - return result - -/proc/setblock(istring, blocknumber, replacement, blocksize) - if(!blocknumber) - return istring - if(!istring || !replacement || !blocksize) return 0 - var/result = getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize) - return result - -/proc/add_zero2(t, u) - var/temp1 - while (length(t) < u) - t = "0[t]" - temp1 = t - if (length(t) > u) - temp1 = copytext(t,2,u+1) - return temp1 - -/proc/miniscramble(input,rs,rd) - var/output - output = null - if (input == "C" || input == "D" || input == "E" || input == "F") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"6",prob((rs*10));"7",prob((rs*5)+(rd));"0",prob((rs*5)+(rd));"1",prob((rs*10)-(rd));"2",prob((rs*10)-(rd));"3") - if (input == "8" || input == "9" || input == "A" || input == "B") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"A",prob((rs*10));"B",prob((rs*5)+(rd));"C",prob((rs*5)+(rd));"D",prob((rs*5)+(rd));"2",prob((rs*5)+(rd));"3") - if (input == "4" || input == "5" || input == "6" || input == "7") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"A",prob((rs*10));"B",prob((rs*5)+(rd));"C",prob((rs*5)+(rd));"D",prob((rs*5)+(rd));"2",prob((rs*5)+(rd));"3") - if (input == "0" || input == "1" || input == "2" || input == "3") - output = pick(prob((rs*10));"8",prob((rs*10));"9",prob((rs*10));"A",prob((rs*10));"B",prob((rs*10)-(rd));"C",prob((rs*10)-(rd));"D",prob((rs*5)+(rd));"E",prob((rs*5)+(rd));"F") - if (!output) output = "5" - return output - -//Instead of picking a value far from the input, this will pick values closer to it. -//Sorry for the block of code, but it's more efficient then calling text2hex -> loop -> hex2text -/proc/miniscrambletarget(input,rs,rd) - var/output = null - switch(input) - if("0") - output = pick(prob((rs*10)+(rd));"0",prob((rs*10)+(rd));"1",prob((rs*10));"2",prob((rs*10)-(rd));"3") - if("1") - output = pick(prob((rs*10)+(rd));"0",prob((rs*10)+(rd));"1",prob((rs*10)+(rd));"2",prob((rs*10));"3",prob((rs*10)-(rd));"4") - if("2") - output = pick(prob((rs*10));"0",prob((rs*10)+(rd));"1",prob((rs*10)+(rd));"2",prob((rs*10)+(rd));"3",prob((rs*10));"4",prob((rs*10)-(rd));"5") - if("3") - output = pick(prob((rs*10)-(rd));"0",prob((rs*10));"1",prob((rs*10)+(rd));"2",prob((rs*10)+(rd));"3",prob((rs*10)+(rd));"4",prob((rs*10));"5",prob((rs*10)-(rd));"6") - if("4") - output = pick(prob((rs*10)-(rd));"1",prob((rs*10));"2",prob((rs*10)+(rd));"3",prob((rs*10)+(rd));"4",prob((rs*10)+(rd));"5",prob((rs*10));"6",prob((rs*10)-(rd));"7") - if("5") - output = pick(prob((rs*10)-(rd));"2",prob((rs*10));"3",prob((rs*10)+(rd));"4",prob((rs*10)+(rd));"5",prob((rs*10)+(rd));"6",prob((rs*10));"7",prob((rs*10)-(rd));"8") - if("6") - output = pick(prob((rs*10)-(rd));"3",prob((rs*10));"4",prob((rs*10)+(rd));"5",prob((rs*10)+(rd));"6",prob((rs*10)+(rd));"7",prob((rs*10));"8",prob((rs*10)-(rd));"9") - if("7") - output = pick(prob((rs*10)-(rd));"4",prob((rs*10));"5",prob((rs*10)+(rd));"6",prob((rs*10)+(rd));"7",prob((rs*10)+(rd));"8",prob((rs*10));"9",prob((rs*10)-(rd));"A") - if("8") - output = pick(prob((rs*10)-(rd));"5",prob((rs*10));"6",prob((rs*10)+(rd));"7",prob((rs*10)+(rd));"8",prob((rs*10)+(rd));"9",prob((rs*10));"A",prob((rs*10)-(rd));"B") - if("9") - output = pick(prob((rs*10)-(rd));"6",prob((rs*10));"7",prob((rs*10)+(rd));"8",prob((rs*10)+(rd));"9",prob((rs*10)+(rd));"A",prob((rs*10));"B",prob((rs*10)-(rd));"C") - if("10")//A - output = pick(prob((rs*10)-(rd));"7",prob((rs*10));"8",prob((rs*10)+(rd));"9",prob((rs*10)+(rd));"A",prob((rs*10)+(rd));"B",prob((rs*10));"C",prob((rs*10)-(rd));"D") - if("11")//B - output = pick(prob((rs*10)-(rd));"8",prob((rs*10));"9",prob((rs*10)+(rd));"A",prob((rs*10)+(rd));"B",prob((rs*10)+(rd));"C",prob((rs*10));"D",prob((rs*10)-(rd));"E") - if("12")//C - output = pick(prob((rs*10)-(rd));"9",prob((rs*10));"A",prob((rs*10)+(rd));"B",prob((rs*10)+(rd));"C",prob((rs*10)+(rd));"D",prob((rs*10));"E",prob((rs*10)-(rd));"F") - if("13")//D - output = pick(prob((rs*10)-(rd));"A",prob((rs*10));"B",prob((rs*10)+(rd));"C",prob((rs*10)+(rd));"D",prob((rs*10)+(rd));"E",prob((rs*10));"F") - if("14")//E - output = pick(prob((rs*10)-(rd));"B",prob((rs*10));"C",prob((rs*10)+(rd));"D",prob((rs*10)+(rd));"E",prob((rs*10)+(rd));"F") - if("15")//F - output = pick(prob((rs*10)-(rd));"C",prob((rs*10));"D",prob((rs*10)+(rd));"E",prob((rs*10)+(rd));"F") - - if(!input || !output) //How did this happen? - output = "8" - - return output - -/proc/isblockon(hnumber, bnumber , var/UI = 0) - - var/temp2 - temp2 = hex2num(hnumber) - - if(UI) - if(temp2 >= 2050) - return 1 - else - return 0 - - if (bnumber == HULKBLOCK || bnumber == TELEBLOCK || bnumber == NOBREATHBLOCK || bnumber == NOPRINTSBLOCK || bnumber == SMALLSIZEBLOCK || bnumber == SHOCKIMMUNITYBLOCK) - if (temp2 >= 3500 + BLOCKADD) - return 1 - else - return 0 - if (bnumber == XRAYBLOCK || bnumber == FIREBLOCK || bnumber == REMOTEVIEWBLOCK || bnumber == REGENERATEBLOCK || bnumber == INCREASERUNBLOCK || bnumber == REMOTETALKBLOCK || bnumber == MORPHBLOCK) - if (temp2 >= 3050 + BLOCKADD) - return 1 - else - return 0 - - - if (temp2 >= 2050 + BLOCKADD) - return 1 - else - return 0 - -/proc/ismuton(var/block,var/mob/M) - return isblockon(getblock(M.dna.struc_enzymes, block,3),block) - -/proc/randmutb(mob/M as mob) - if(!M) return - var/num - var/newdna - num = pick(GLASSESBLOCK,COUGHBLOCK,FAKEBLOCK,NERVOUSBLOCK,CLUMSYBLOCK,TWITCHBLOCK,HEADACHEBLOCK,BLINDBLOCK,DEAFBLOCK,HALLUCINATIONBLOCK) - M.dna.check_integrity() - newdna = setblock(M.dna.struc_enzymes,num,toggledblock(getblock(M.dna.struc_enzymes,num,3)),3) - M.dna.struc_enzymes = newdna - return - -/proc/randmutg(mob/M as mob) - if(!M) return - var/num - var/newdna - num = pick(HULKBLOCK,XRAYBLOCK,FIREBLOCK,TELEBLOCK,NOBREATHBLOCK,REMOTEVIEWBLOCK,REGENERATEBLOCK,INCREASERUNBLOCK,REMOTETALKBLOCK,MORPHBLOCK,BLENDBLOCK,NOPRINTSBLOCK,SHOCKIMMUNITYBLOCK,SMALLSIZEBLOCK) - M.dna.check_integrity() - newdna = setblock(M.dna.struc_enzymes,num,toggledblock(getblock(M.dna.struc_enzymes,num,3)),3) - M.dna.struc_enzymes = newdna - return - -/proc/scramble(var/type, mob/M as mob, var/p) - if(!M) return - M.dna.check_integrity() - if(type) - for(var/i = 1, i <= STRUCDNASIZE-1, i++) - if(prob(p)) - M.dna.uni_identity = setblock(M.dna.uni_identity, i, add_zero2(num2hex(rand(1,4095), 1), 3), 3) - updateappearance(M, M.dna.uni_identity) - - else - for(var/i = 1, i <= STRUCDNASIZE-1, i++) - if(prob(p)) - M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, add_zero2(num2hex(rand(1,4095), 1), 3), 3) - domutcheck(M, null) - return - -/proc/randmuti(mob/M as mob) - if(!M) return - var/num - var/newdna - num = rand(1,UNIDNASIZE) - M.dna.check_integrity() - newdna = setblock(M.dna.uni_identity,num,add_zero2(num2hex(rand(1,4095),1),3),3) - M.dna.uni_identity = newdna - return - -/proc/toggledblock(hnumber) //unused - var/temp3 - var/chtemp - temp3 = hex2num(hnumber) - if (temp3 < 2050) - chtemp = rand(2050,4095) - return add_zero2(num2hex(chtemp,1),3) - else - chtemp = rand(1,2049) - return add_zero2(num2hex(chtemp,1),3) -/////////////////////////// DNA HELPER-PROCS - -/////////////////////////// DNA MISC-PROCS -/proc/updateappearance(mob/M as mob , structure) - if(istype(M, /mob/living/carbon/human)) - M.dna.check_integrity() - var/mob/living/carbon/human/H = M - H.r_hair = hex2num(getblock(structure,1,3)) - H.b_hair = hex2num(getblock(structure,2,3)) - H.g_hair = hex2num(getblock(structure,3,3)) - H.r_facial = hex2num(getblock(structure,4,3)) - H.b_facial = hex2num(getblock(structure,5,3)) - H.g_facial = hex2num(getblock(structure,6,3)) - H.s_tone = round(((hex2num(getblock(structure,7,3)) / 16) - 220)) - H.r_eyes = hex2num(getblock(structure,8,3)) - H.g_eyes = hex2num(getblock(structure,9,3)) - H.b_eyes = hex2num(getblock(structure,10,3)) - - if (isblockon(getblock(structure, 11,3),11 , 1)) - H.gender = FEMALE - else - H.gender = MALE - - //Hair - var/hairnum = hex2num(getblock(structure,13,3)) - var/index = round(1 +(hairnum / 4096)*hair_styles_list.len) - if((0 < index) && (index <= hair_styles_list.len)) - H.h_style = hair_styles_list[index] - - //Facial Hair - var/beardnum = hex2num(getblock(structure,12,3)) - index = round(1 +(beardnum / 4096)*facial_hair_styles_list.len) - if((0 < index) && (index <= facial_hair_styles_list.len)) - H.f_style = facial_hair_styles_list[index] - - H.update_body(0) - H.update_hair() - - return 1 - else - return 0 - -/proc/probinj(var/pr, var/inj) - return prob(pr+inj*pr) - -/proc/domutcheck(mob/living/M as mob, connected, inj) - if (!M) return - - M.dna.check_integrity() - - M.disabilities = 0 - M.sdisabilities = 0 - var/old_mutations = M.mutations - M.mutations = list() - M.pass_flags = 0 -// M.see_in_dark = 2 -// M.see_invisible = 0 - - if(PLANT in old_mutations) - M.mutations.Add(PLANT) - if(SKELETON in old_mutations) - M.mutations.Add(SKELETON) - if(FAT in old_mutations) - M.mutations.Add(FAT) - if(HUSK in old_mutations) - M.mutations.Add(HUSK) - - if(ismuton(NOBREATHBLOCK,M)) - if(probinj(45,inj) || (mNobreath in old_mutations)) - M << "\blue You feel no need to breathe." - M.mutations.Add(mNobreath) - if(ismuton(REMOTEVIEWBLOCK,M)) - if(probinj(45,inj) || (mRemote in old_mutations)) - M << "\blue Your mind expands" - M.verbs += /mob/living/carbon/human/proc/remoteobserve - M.mutations.Add(mRemote) - if(ismuton(REGENERATEBLOCK,M)) - if(probinj(45,inj) || (mRegen in old_mutations)) - M << "\blue You feel strange" - M.mutations.Add(mRegen) - if(ismuton(INCREASERUNBLOCK,M)) - if(probinj(45,inj) || (mRun in old_mutations)) - M << "\blue You feel quick" - M.mutations.Add(mRun) - if(ismuton(REMOTETALKBLOCK,M)) - if(probinj(45,inj) || (mRemotetalk in old_mutations)) - M << "\blue You expand your mind outwards" - M.mutations.Add(mRemotetalk) - M.verbs += /mob/living/carbon/human/proc/remotesay - if(ismuton(MORPHBLOCK,M)) - if(probinj(45,inj) || (mMorph in old_mutations)) - M.mutations.Add(mMorph) - M << "\blue Your skin feels strange" - if(ismuton(BLENDBLOCK,M)) - if(probinj(45,inj) || (mBlend in old_mutations)) - M.mutations.Add(mBlend) - M << "\blue You feel alone" - if(ismuton(HALLUCINATIONBLOCK,M)) - if(probinj(45,inj) || (mHallucination in old_mutations)) - M.mutations.Add(mHallucination) - M << "\blue Your mind says 'Hello'" - if(ismuton(NOPRINTSBLOCK,M)) - if(probinj(45,inj) || (mFingerprints in old_mutations)) - M.mutations.Add(mFingerprints) - M << "\blue Your fingers feel numb" - if(ismuton(SHOCKIMMUNITYBLOCK,M)) - if(probinj(45,inj) || (mShock in old_mutations)) - M.mutations.Add(mShock) - M << "\blue You feel strange" - if(ismuton(SMALLSIZEBLOCK,M)) - if(probinj(45,inj) || (mSmallsize in old_mutations)) - M << "\blue Your skin feels rubbery" - M.mutations.Add(mSmallsize) - M.pass_flags |= 1 - - - - if (isblockon(getblock(M.dna.struc_enzymes, HULKBLOCK,3),HULKBLOCK)) - if(probinj(5,inj) || (HULK in old_mutations)) - M << "\blue Your muscles hurt." - M.mutations.Add(HULK) - if (isblockon(getblock(M.dna.struc_enzymes, HEADACHEBLOCK,3),HEADACHEBLOCK)) - M.disabilities |= EPILEPSY - M << "\red You get a headache." - if (isblockon(getblock(M.dna.struc_enzymes, FAKEBLOCK,3),FAKEBLOCK)) - M << "\red You feel strange." - if (prob(95)) - if(prob(50)) - randmutb(M) - else - randmuti(M) - else - randmutg(M) - if (isblockon(getblock(M.dna.struc_enzymes, COUGHBLOCK,3),COUGHBLOCK)) - M.disabilities |= COUGHING - M << "\red You start coughing." - if (isblockon(getblock(M.dna.struc_enzymes, CLUMSYBLOCK,3),CLUMSYBLOCK)) - M << "\red You feel lightheaded." - M.mutations.Add(CLUMSY) - if (isblockon(getblock(M.dna.struc_enzymes, TWITCHBLOCK,3),TWITCHBLOCK)) - M.disabilities |= TOURETTES - M << "\red You twitch." - if (isblockon(getblock(M.dna.struc_enzymes, XRAYBLOCK,3),XRAYBLOCK)) - if(probinj(30,inj) || (XRAY in old_mutations)) - M << "\blue The walls suddenly disappear." -// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) -// M.see_in_dark = 8 -// M.see_invisible = 2 - M.mutations.Add(XRAY) - if (isblockon(getblock(M.dna.struc_enzymes, NERVOUSBLOCK,3),NERVOUSBLOCK)) - M.disabilities |= NERVOUS - M << "\red You feel nervous." - if (isblockon(getblock(M.dna.struc_enzymes, FIREBLOCK,3),FIREBLOCK)) - if(probinj(30,inj) || (COLD_RESISTANCE in old_mutations)) - M << "\blue Your body feels warm." - M.mutations.Add(COLD_RESISTANCE) - if (isblockon(getblock(M.dna.struc_enzymes, BLINDBLOCK,3),BLINDBLOCK)) - M.sdisabilities |= BLIND - M << "\red You can't seem to see anything." - if (isblockon(getblock(M.dna.struc_enzymes, TELEBLOCK,3),TELEBLOCK)) - if(probinj(15,inj) || (TK in old_mutations)) - M << "\blue You feel smarter." - M.mutations.Add(TK) - if (isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),DEAFBLOCK)) - M.sdisabilities |= DEAF - M.ear_deaf = 1 - M << "\red Its kinda quiet.." - if (isblockon(getblock(M.dna.struc_enzymes, GLASSESBLOCK,3),GLASSESBLOCK)) - M.disabilities |= NEARSIGHTED - M << "Your eyes feel weird..." - - /* If you want the new mutations to work, UNCOMMENT THIS. - if(istype(M, /mob/living/carbon)) - for (var/datum/mutations/mut in global_mutations) - mut.check_mutation(M) - */ - -//////////////////////////////////////////////////////////// Monkey Block - if (isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) - // human > monkey - var/mob/living/carbon/human/H = M - H.monkeyizing = 1 - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in H) - implants += W - W.loc = null - - if(!connected) - for(var/obj/item/W in (H.contents-implants)) - if (W==H.w_uniform) // will be teared - continue - H.drop_from_inventory(W) - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("h2monkey", animation) - sleep(48) - del(animation) - - - var/mob/living/carbon/monkey/O = null - if(H.species.primitive) - O = new H.species.primitive(src) - else - H.gib() //Trying to change the species of a creature with no primitive var set is messy. - return - - if(M) - if (M.dna) - O.dna = M.dna - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - - for(var/datum/disease/D in M.viruses) - O.viruses += D - D.affected_mob = O - M.viruses -= D - - - for(var/obj/T in (M.contents-implants)) - del(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the cute little monkey - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) - O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss() + 20) - O.adjustOxyLoss(M.getOxyLoss()) - O.stat = M.stat - O.a_intent = "hurt" - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - del(M) - return - - if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) - // monkey > human, - var/mob/living/carbon/monkey/Mo = M - Mo.monkeyizing = 1 - var/list/implants = list() //Still preserving implants - for(var/obj/item/weapon/implant/W in Mo) - implants += W - W.loc = null - if(!connected) - for(var/obj/item/W in (Mo.contents-implants)) - Mo.drop_from_inventory(W) - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("monkey2h", animation) - sleep(48) - del(animation) - - var/mob/living/carbon/human/O = new( src ) - if(Mo.greaterform) - O.set_species(Mo.greaterform) - - if (isblockon(getblock(M.dna.uni_identity, 11,3),11)) - O.gender = FEMALE - else - O.gender = MALE - - if (M) - if (M.dna) - O.dna = M.dna - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - for(var/datum/disease/D in M.viruses) - O.viruses += D - D.affected_mob = O - M.viruses -= D - - //for(var/obj/T in M) - // del(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the human - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - - var/i - while (!i) - var/randomname - if (O.gender == MALE) - randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) - else - randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) - if (findname(randomname)) - continue - else - O.real_name = randomname - i++ - updateappearance(O,O.dna.uni_identity) - O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss()) - O.adjustOxyLoss(M.getOxyLoss()) - O.stat = M.stat - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - del(M) - return -//////////////////////////////////////////////////////////// Monkey Block - if(M) - M.update_icon = 1 //queue a full icon update at next life() call - return null -/////////////////////////// DNA MISC-PROCS - - -/////////////////////////// DNA MACHINES -/obj/machinery/dna_scannernew - name = "\improper DNA modifier" - desc = "It scans DNA structures." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "scanner_0" - density = 1 - var/locked = 0.0 - var/mob/occupant = null - anchored = 1.0 - use_power = 1 - idle_power_usage = 50 - active_power_usage = 300 - -/obj/machinery/dna_scannernew/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) - RefreshParts() - -/obj/machinery/dna_scannernew/allow_drop() - return 0 - -/obj/machinery/dna_scannernew/relaymove(mob/user as mob) - if (user.stat) - return - src.go_out() - return - -/obj/machinery/dna_scannernew/verb/eject() - set src in oview(1) - set category = "Object" - set name = "Eject DNA Scanner" - - if (usr.stat != 0) - return - src.go_out() - for(var/obj/O in src) - if((!istype(O,/obj/item/weapon/circuitboard/clonescanner)) && (!istype(O,/obj/item/weapon/stock_parts)) && (!istype(O,/obj/item/weapon/cable_coil))) - O.loc = get_turf(src)//Ejects items that manage to get in there (exluding the components) - if(!occupant) - for(var/mob/M in src)//Failsafe so you can get mobs out - M.loc = get_turf(src) - add_fingerprint(usr) - return - -/obj/machinery/dna_scannernew/verb/move_inside() - set src in oview(1) - set category = "Object" - set name = "Enter DNA Scanner" - - if (usr.stat != 0) - return - if (!ishuman(usr) && !ismonkey(usr)) //Make sure they're a mob that has dna - usr << "\blue Try as you might, you can not climb up into the scanner." - return - if (src.occupant) - usr << "\blue The scanner is already occupied!" - return - if (usr.abiotic()) - usr << "\blue Subject cannot have abiotic items on." - return - usr.stop_pulling() - usr.client.perspective = EYE_PERSPECTIVE - usr.client.eye = src - usr.loc = src - src.occupant = usr - src.icon_state = "scanner_1" - /* - for(var/obj/O in src) // THIS IS P. STUPID -- LOVE, DOOHL - //O = null - del(O) - //Foreach goto(124) - */ - src.add_fingerprint(usr) - return - -/obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G as obj, user as mob) - if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) - return - if (src.occupant) - user << "\blue The scanner is already occupied!" - return - if (G.affecting.abiotic()) - user << "\blue Subject cannot have abiotic items on." - return - var/mob/M = G.affecting - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.loc = src - src.occupant = M - src.icon_state = "scanner_1" - - src.add_fingerprint(user) - - // search for ghosts, if the corpse is empty and the scanner is connected to a cloner - if(locate(/obj/machinery/computer/cloning, get_step(src, NORTH)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - - if(!M.client && M.mind) - for(var/mob/dead/observer/ghost in player_list) - if(ghost.mind == M.mind) - ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)" - break - del(G) - return - -/obj/machinery/dna_scannernew/proc/go_out() - if ((!( src.occupant ) || src.locked)) - return -/* -// it's like this was -just- here to break constructed dna scanners -Pete -// if that's not the case, slap my shit and uncomment this. -// for(var/obj/O in src) -// O.loc = src.loc -*/ - //Foreach goto(30) - if (src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc - src.occupant = null - src.icon_state = "scanner_0" - return - -/obj/machinery/dna_scannernew/ex_act(severity) - switch(severity) - if(1.0) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - //Foreach goto(35) - //SN src = null - del(src) - return - if(2.0) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - //Foreach goto(108) - //SN src = null - del(src) - return - if(3.0) - if (prob(25)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - ex_act(severity) - //Foreach goto(181) - //SN src = null - del(src) - return - else - return - - -/obj/machinery/dna_scannernew/blob_act() - if(prob(75)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - del(src) - - -/obj/machinery/computer/scan_consolenew/ex_act(severity) - - switch(severity) - if(1.0) - //SN src = null - del(src) - return - if(2.0) - if (prob(50)) - //SN src = null - del(src) - return - else - return - -/obj/machinery/computer/scan_consolenew/blob_act() - - if(prob(75)) - del(src) - -/obj/machinery/computer/scan_consolenew/power_change() - if(stat & BROKEN) - icon_state = "broken" - else if(powered()) - icon_state = initial(icon_state) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - src.icon_state = "c_unpowered" - stat |= NOPOWER - -/obj/machinery/computer/scan_consolenew/New() - ..() - spawn(5) - for(dir in list(NORTH,EAST,SOUTH,WEST)) - connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) - if(!isnull(connected)) - break - spawn(250) - src.injectorready = 1 - return - return - -/obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob) - if ((istype(W, /obj/item/weapon/disk/data)) && (!src.diskette)) - user.drop_item() - W.loc = src - src.diskette = W - user << "You insert [W]." - src.updateUsrDialog() -/* -/obj/machinery/computer/scan_consolenew/process() //not really used right now - if(stat & (NOPOWER|BROKEN)) - return - if (!( src.status )) //remove this - return - return -*/ -/obj/machinery/computer/scan_consolenew/attack_paw(user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/scan_consolenew/attack_ai(user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/scan_consolenew/attack_hand(user as mob) - if(..()) - return - var/dat - if (src.delete && src.temphtml) //Window in buffer but its just simple message, so nothing - src.delete = src.delete - - else if (!src.delete && src.temphtml) //Window in buffer - its a menu, dont add clear message - dat = text("[]

Main Menu", src.temphtml, src) - else - if (src.connected) //Is something connected? - var/mob/living/occupant = src.connected.occupant - dat = "Occupant Statistics:
" //Blah obvious - if(occupant && occupant.dna) //is there REALLY someone in there? - if(NOCLONE in occupant.mutations) - dat += "The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.

" //NOPE. -Pete - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Radiation Emitter Settings

", src) - else - if (!istype(occupant,/mob/living/carbon/human)) - sleep(1) - var/t1 - switch(occupant.stat) // obvious, see what their status is - if(0) - t1 = "Conscious" - if(1) - t1 = "Unconscious" - else - t1 = "*dead*" - dat += text("[]\tHealth %: [] ([])

", (occupant.health > 50 ? "" : ""), occupant.health, t1) - dat += text("Radiation Level: []%

", occupant.radiation) - dat += text("Unique Enzymes : []
", uppertext(occupant.dna.unique_enzymes)) - dat += text("Unique Identifier: []
", occupant.dna.uni_identity) - dat += text("Structural Enzymes: []

", occupant.dna.struc_enzymes) - dat += text("Modify Unique Identifier
", src) - dat += text("Modify Structural Enzymes

", src) - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Pulse Radiation
", src) - dat += text("Radiation Emitter Settings

", src) - dat += text("Inject Rejuvenators

", src) - else - dat += "The scanner is empty.

" - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Radiation Emitter Settings

", src) - if (!( src.connected.locked )) - dat += text("Lock (Unlocked)
", src) - else - dat += text("Unlock (Locked)
", src) - //Other stuff goes here - if (!isnull(src.diskette)) - dat += text("Eject Disk
", src) - dat += text("

Close", user) - else - dat = " Error: No DNA Modifier connected. " - user << browse(dat, "window=scannernew;size=550x625") - onclose(user, "scannernew") - return - -/obj/machinery/computer/scan_consolenew/proc/all_dna_blocks(var/buffer) - var/list/arr = list() - for(var/i = 1, i <= length(buffer)/3, i++) - arr += "[i]:[copytext(buffer,i*3-2,i*3+1)]" - return arr - -/obj/machinery/computer/scan_consolenew/proc/setInjectorBlock(var/obj/item/weapon/dnainjector/I, var/blk, var/buffer) - var/pos = findtext(blk,":") - if(!pos) return 0 - var/id = text2num(copytext(blk,1,pos)) - if(!id) return 0 - I.block = id - I.dna = copytext(buffer,id*3-2,id*3+1) - return 1 - -/obj/machinery/computer/scan_consolenew/Topic(href, href_list) - if(..()) - return - if(!istype(usr.loc, /turf)) - return - if(!src || !src.connected) - return - if ((usr.contents.Find(src) || in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - if (href_list["locked"]) - if ((src.connected && src.connected.occupant)) - src.connected.locked = !( src.connected.locked ) - //////////////////////////////////////////////////////// - if (href_list["genpulse"]) - if(!src.connected.occupant || !src.connected.occupant.dna)//Makes sure someone is in there (And valid) before trying anything - src.temphtml = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - var/lock_state = src.connected.locked - src.connected.locked = 1//lock it - sleep(10*src.radduration) - if (!src.connected.occupant) - temphtml = null - delete = 0 - return null - if (prob(95)) - if(prob(75)) - randmutb(src.connected.occupant) - else - randmuti(src.connected.occupant) - else - if(prob(95)) - randmutg(src.connected.occupant) - else - randmuti(src.connected.occupant) - src.connected.occupant.radiation += ((src.radstrength*3)+src.radduration*3) - src.connected.locked = lock_state - temphtml = null - delete = 0 - if (href_list["radset"]) - src.temphtml = text("Radiation Duration: []
", src.radduration) - src.temphtml += text("Radiation Intensity: []

", src.radstrength) - src.temphtml += text("-- Duration ++
", src, src) - src.temphtml += text("-- Intesity ++
", src, src) - src.delete = 0 - if (href_list["radleplus"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - if (src.radduration < 20) - src.radduration++ - src.radduration++ - dopage(src,"radset") - if (href_list["radleminus"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - if (src.radduration > 2) - src.radduration-- - src.radduration-- - dopage(src,"radset") - if (href_list["radinplus"]) - if (src.radstrength < 10) - src.radstrength++ - dopage(src,"radset") - if (href_list["radinminus"]) - if (src.radstrength > 1) - src.radstrength-- - dopage(src,"radset") - //////////////////////////////////////////////////////// - if (href_list["unimenu"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - //src.temphtml = text("Unique Identifier: []

", src.connected.occupant.dna.uni_identity) - //src.temphtml = text("Unique Identifier: [getleftblocks(src.connected.occupant.dna.uni_identity,uniblock,3)][src.subblock == 1 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)][src.subblock == 2 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)][src.subblock == 3 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)][getrightblocks(src.connected.occupant.dna.uni_identity,uniblock,3)]

") - - // New way of displaying DNA blocks - src.temphtml = text("Unique Identifier: [getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3, src,1)]

") - - src.temphtml += text("Selected Block: []
", src.uniblock) - src.temphtml += text("<- Block ->

", src, src) - src.temphtml += text("Selected Sub-Block: []
", src.subblock) - src.temphtml += text("<- Sub-Block ->

", src, src) - src.temphtml += text("Selected Target: []
", src.unitargethex) - src.temphtml += text("<- Target ->

", src, src) - src.temphtml += "Modify Block:
" - src.temphtml += text("Irradiate
", src) - src.delete = 0 - if (href_list["unimenuplus"]) - if (src.uniblock < 13) - src.uniblock++ - else - src.uniblock = 1 - dopage(src,"unimenu") - if (href_list["unimenuminus"]) - if (src.uniblock > 1) - src.uniblock-- - else - src.uniblock = 13 - dopage(src,"unimenu") - if (href_list["unimenusubplus"]) - if (src.subblock < 3) - src.subblock++ - else - src.subblock = 1 - dopage(src,"unimenu") - if (href_list["unimenusubminus"]) - if (src.subblock > 1) - src.subblock-- - else - src.subblock = 3 - dopage(src,"unimenu") - if (href_list["unimenutargetplus"]) - if (src.unitarget < 15) - src.unitarget++ - src.unitargethex = src.unitarget - switch(unitarget) - if(10) - src.unitargethex = "A" - if(11) - src.unitargethex = "B" - if(12) - src.unitargethex = "C" - if(13) - src.unitargethex = "D" - if(14) - src.unitargethex = "E" - if(15) - src.unitargethex = "F" - else - src.unitarget = 0 - src.unitargethex = 0 - dopage(src,"unimenu") - if (href_list["unimenutargetminus"]) - if (src.unitarget > 0) - src.unitarget-- - src.unitargethex = src.unitarget - switch(unitarget) - if(10) - src.unitargethex = "A" - if(11) - src.unitargethex = "B" - if(12) - src.unitargethex = "C" - if(13) - src.unitargethex = "D" - if(14) - src.unitargethex = "E" - else - src.unitarget = 15 - src.unitargethex = "F" - dopage(src,"unimenu") - if (href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click - var/menuset = text2num(href_list["uimenuset"]) - var/menusubset = text2num(href_list["uimenusubset"]) - if ((menuset <= 13) && (menuset >= 1)) - src.uniblock = menuset - if ((menusubset <= 3) && (menusubset >= 1)) - src.subblock = menusubset - dopage(src, "unimenu") - if (href_list["unipulse"]) - if(src.connected.occupant) - var/block - var/newblock - var/tstructure2 - block = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),src.subblock,1) - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - var/lock_state = src.connected.locked - src.connected.locked = 1//lock it - sleep(10*src.radduration) - if (!src.connected.occupant) - temphtml = null - delete = 0 - return null - /// - if (prob((80 + (src.radduration / 2)))) - block = miniscrambletarget(num2text(unitarget), src.radstrength, src.radduration) - newblock = null - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.uni_identity, src.uniblock, newblock,3) - src.connected.occupant.dna.uni_identity = tstructure2 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += (src.radstrength+src.radduration) - else - if (prob(20+src.radstrength)) - randmutb(src.connected.occupant) - domutcheck(src.connected.occupant,src.connected) - else - randmuti(src.connected.occupant) - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += ((src.radstrength*2)+src.radduration) - src.connected.locked = lock_state - dopage(src,"unimenu") - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["rejuv"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - var/mob/living/carbon/human/H = src.connected.occupant - if(H) - if (H.reagents.get_reagent_amount("inaprovaline") < 60) - H.reagents.add_reagent("inaprovaline", 30) - usr << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", H.reagents.get_reagent_amount("inaprovaline")) - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["strucmenu"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - // Get this shit outta here it sucks - //src.temphtml = text("Structural Enzymes: [getleftblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)][src.subblock == 1 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)][src.subblock == 2 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)][src.subblock == 3 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)][getrightblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)]

") - //src.temphtml = text("Structural Enzymes: []

", src.connected.occupant.dna.struc_enzymes) - - // New shit, it doesn't suck (as much) - src.temphtml = text("Structural Enzymes: [getblockstring(src.connected.occupant.dna.struc_enzymes,strucblock,subblock,3,src,0)]

") - // SE of occupant, selected block, selected subblock, block size (3 subblocks) - - src.temphtml += text("Selected Block: []
", src.strucblock) - src.temphtml += text("<- Block ->

", src, src) - src.temphtml += text("Selected Sub-Block: []
", src.subblock) - src.temphtml += text("<- Sub-Block ->

", src, src) - src.temphtml += "Modify Block:
" - src.temphtml += text("Irradiate
", src) - src.delete = 0 - if (href_list["strucmenuplus"]) - if (src.strucblock < STRUCDNASIZE) - src.strucblock++ - else - src.strucblock = 1 - dopage(src,"strucmenu") - if (href_list["strucmenuminus"]) - if (src.strucblock > 1) - src.strucblock-- - else - src.strucblock = STRUCDNASIZE - dopage(src,"strucmenu") - if (href_list["strucmenusubplus"]) - if (src.subblock < 3) - src.subblock++ - else - src.subblock = 1 - dopage(src,"strucmenu") - if (href_list["strucmenusubminus"]) - if (src.subblock > 1) - src.subblock-- - else - src.subblock = 3 - dopage(src,"strucmenu") - if (href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) - var/menuset = text2num(href_list["semenuset"]) - var/menusubset = text2num(href_list["semenusubset"]) - if ((menuset <= STRUCDNASIZE) && (menuset >= 1)) - src.strucblock = menuset - if ((menusubset <= 3) && (menusubset >= 1)) - src.subblock = menusubset - dopage(src, "strucmenu") - if (href_list["strucpulse"]) - var/block - var/newblock - var/tstructure2 - var/oldblock - var/lock_state = src.connected.locked - src.connected.locked = 1//lock it - if (src.connected.occupant) - block = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),src.subblock,1) - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - sleep(10*src.radduration) - else - temphtml = null - delete = 0 - return null - /// - if(src.connected.occupant) - if (prob((80 + (src.radduration / 2)))) - if ((src.strucblock != 2 || src.strucblock != 12 || src.strucblock != 8 || src.strucblock || 10) && prob (20)) - oldblock = src.strucblock - block = miniscramble(block, src.radstrength, src.radduration) - newblock = null - if (src.strucblock > 1 && src.strucblock < STRUCDNASIZE/2) - src.strucblock++ - else if (src.strucblock > STRUCDNASIZE/2 && src.strucblock < STRUCDNASIZE) - src.strucblock-- - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.strucblock, newblock,3) - src.connected.occupant.dna.struc_enzymes = tstructure2 - domutcheck(src.connected.occupant,src.connected) - src.connected.occupant.radiation += (src.radstrength+src.radduration) - src.strucblock = oldblock - else - // - block = miniscramble(block, src.radstrength, src.radduration) - newblock = null - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.strucblock, newblock,3) - src.connected.occupant.dna.struc_enzymes = tstructure2 - domutcheck(src.connected.occupant,src.connected) - src.connected.occupant.radiation += (src.radstrength+src.radduration) - else - if (prob(80-src.radduration)) - randmutb(src.connected.occupant) - domutcheck(src.connected.occupant,src.connected) - else - randmuti(src.connected.occupant) - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += ((src.radstrength*2)+src.radduration) - src.connected.locked = lock_state - /// - dopage(src,"strucmenu") - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["buffermenu"]) - src.temphtml = "Buffer 1:
" - if (!(src.buffer1)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer1) - src.temphtml += text("By: []
", src.buffer1owner) - src.temphtml += text("Label: []
", src.buffer1label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer1) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer1) src.temphtml += text("Isolate Block
", src) - if (src.buffer1) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer1) src.temphtml += text("Edit Label
", src) - if (src.buffer1) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer1) src.temphtml += "
" - src.temphtml += "Buffer 2:
" - if (!(src.buffer2)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer2) - src.temphtml += text("By: []
", src.buffer2owner) - src.temphtml += text("Label: []
", src.buffer2label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer2) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer2) src.temphtml += text("Isolate Block
", src) - if (src.buffer2) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer2) src.temphtml += text("Edit Label
", src) - if (src.buffer2) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer2) src.temphtml += "
" - src.temphtml += "Buffer 3:
" - if (!(src.buffer3)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer3) - src.temphtml += text("By: []
", src.buffer3owner) - src.temphtml += text("Label: []
", src.buffer3label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer3) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer3) src.temphtml += text("Isolate Block
", src) - if (src.buffer3) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer3) src.temphtml += text("Edit Label
", src) - if (src.buffer3) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer3) src.temphtml += "
" - if (href_list["b1addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1iue = 0 - src.buffer1 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Unique Identifier" - src.buffer1type = "ui" - dopage(src,"buffermenu") - if (href_list["b1adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Unique Identifier & Unique Enzymes" - src.buffer1type = "ui" - src.buffer1iue = 1 - dopage(src,"buffermenu") - if (href_list["b2adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Unique Identifier & Unique Enzymes" - src.buffer2type = "ui" - src.buffer2iue = 1 - dopage(src,"buffermenu") - if (href_list["b3adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Unique Identifier & Unique Enzymes" - src.buffer3type = "ui" - src.buffer3iue = 1 - dopage(src,"buffermenu") - if (href_list["b2addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2iue = 0 - src.buffer2 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Unique Identifier" - src.buffer2type = "ui" - dopage(src,"buffermenu") - if (href_list["b3addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3iue = 0 - src.buffer3 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Unique Identifier" - src.buffer3type = "ui" - dopage(src,"buffermenu") - if (href_list["b1addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1iue = 0 - src.buffer1 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Structural Enzymes" - src.buffer1type = "se" - dopage(src,"buffermenu") - if (href_list["b2addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2iue = 0 - src.buffer2 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Structural Enzymes" - src.buffer2type = "se" - dopage(src,"buffermenu") - if (href_list["b3addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3iue = 0 - src.buffer3 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Structural Enzymes" - src.buffer3type = "se" - dopage(src,"buffermenu") - if (href_list["b1clear"]) - src.buffer1 = null - src.buffer1owner = null - src.buffer1label = null - src.buffer1iue = null - dopage(src,"buffermenu") - if (href_list["b2clear"]) - src.buffer2 = null - src.buffer2owner = null - src.buffer2label = null - src.buffer2iue = null - dopage(src,"buffermenu") - if (href_list["b3clear"]) - src.buffer3 = null - src.buffer3owner = null - src.buffer3label = null - src.buffer3iue = null - dopage(src,"buffermenu") - if (href_list["b1label"]) - src.buffer1label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b2label"]) - src.buffer2label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b3label"]) - src.buffer3label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b1transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer1type == "ui") - if (src.buffer1iue) - src.connected.occupant.real_name = src.buffer1owner - src.connected.occupant.name = src.buffer1owner - src.connected.occupant.dna.uni_identity = src.buffer1 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer1type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer1 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b2transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer2type == "ui") - if (src.buffer2iue) - src.connected.occupant.real_name = src.buffer2owner - src.connected.occupant.name = src.buffer2owner - src.connected.occupant.dna.uni_identity = src.buffer2 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer2type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer2 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b3transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer3type == "ui") - if (src.buffer3iue) - src.connected.occupant.real_name = src.buffer3owner - src.connected.occupant.name = src.buffer3owner - src.connected.occupant.dna.uni_identity = src.buffer3 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer3type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer3 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b1injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer1type - if(href_list["b1injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer1) - success = setInjectorBlock(I,blk,src.buffer1) - else - I.dna = src.buffer1 - if(success) - I.loc = src.loc - I.name += " ([src.buffer1label])" - if (src.buffer1iue) I.ue = src.buffer1owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - if (href_list["b2injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer2type - if(href_list["b2injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer2) - success = setInjectorBlock(I,blk,src.buffer2) - else - I.dna = src.buffer2 - if(success) - I.loc = src.loc - I.name += " ([src.buffer2label])" - if (src.buffer2iue) I.ue = src.buffer2owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - if (href_list["b3injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer3type - if(href_list["b3injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer3) - success = setInjectorBlock(I,blk,src.buffer3) - else - I.dna = src.buffer3 - if(success) - I.loc = src.loc - I.name += " ([src.buffer3label])" - if (src.buffer3iue) I.ue = src.buffer3owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["load_disk"]) - var/buffernum = text2num(href_list["load_disk"]) - if ((buffernum > 3) || (buffernum < 1)) - return - if ((isnull(src.diskette)) || (!src.diskette.data) || (src.diskette.data == "")) - return - switch(buffernum) - if(1) - src.buffer1 = src.diskette.data - src.buffer1type = src.diskette.data_type - src.buffer1iue = src.diskette.ue - src.buffer1owner = src.diskette.owner - if(2) - src.buffer2 = src.diskette.data - src.buffer2type = src.diskette.data_type - src.buffer2iue = src.diskette.ue - src.buffer2owner = src.diskette.owner - if(3) - src.buffer3 = src.diskette.data - src.buffer3type = src.diskette.data_type - src.buffer3iue = src.diskette.ue - src.buffer3owner = src.diskette.owner - src.temphtml = "Data loaded." - - if (href_list["save_disk"]) - var/buffernum = text2num(href_list["save_disk"]) - if ((buffernum > 3) || (buffernum < 1)) - return - if ((isnull(src.diskette)) || (src.diskette.read_only)) - return - switch(buffernum) - if(1) - src.diskette.data = buffer1 - src.diskette.data_type = src.buffer1type - src.diskette.ue = src.buffer1iue - src.diskette.owner = src.buffer1owner - src.diskette.name = "data disk - '[src.buffer1owner]'" - if(2) - src.diskette.data = buffer2 - src.diskette.data_type = src.buffer2type - src.diskette.ue = src.buffer2iue - src.diskette.owner = src.buffer2owner - src.diskette.name = "data disk - '[src.buffer2owner]'" - if(3) - src.diskette.data = buffer3 - src.diskette.data_type = src.buffer3type - src.diskette.ue = src.buffer3iue - src.diskette.owner = src.buffer3owner - src.diskette.name = "data disk - '[src.buffer3owner]'" - src.temphtml = "Data saved." - if (href_list["eject_disk"]) - if (!src.diskette) - return - src.diskette.loc = get_turf(src) - src.diskette = null - //////////////////////////////////////////////////////// - if (href_list["clear"]) - src.temphtml = null - src.delete = 0 - if (href_list["update"]) //ignore - src.temphtml = src.temphtml - src.add_fingerprint(usr) - src.updateUsrDialog() - return -/////////////////////////// DNA MACHINES diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index 983414c6aeb..ff5e8173001 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -11,6 +11,7 @@ // Sanity checks, don't skip. if(!gene.can_activate(M,flags)) + testing("[M] - Failed to activate [gene.name] (can_activate fail).") continue // Current state @@ -32,6 +33,8 @@ gene.deactivate(M) M.active_genes -= gene.type M.update_icon=1 + else + testing("[M] - Failed to activate [gene.name] - [gene_active?"+":"-"]active, [gene_prior_status?"+":"-"]prior") /* Old, inflexibile /proc/domutcheck(var/mob/living/M, var/connected, var/flags) diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 8fc36987f09..952f7df0f48 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -5,9 +5,11 @@ block=MONKEYBLOCK /datum/dna/gene/monkey/can_activate(var/mob/M,var/flags) - return istype(M, /mob/living/carbon/human) + return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey) /datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/human)) + return var/mob/living/carbon/human/H = M H.monkeyizing = 1 var/list/implants = list() //Try to preserve implants. @@ -83,6 +85,8 @@ return /datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/monkey)) + return var/mob/living/carbon/monkey/Mo = M Mo.monkeyizing = 1 var/list/implants = list() //Still preserving implants diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 6dbdd346e79..e9e89695a81 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -23,7 +23,7 @@ /obj/item/weapon/dnainjector/proc/GetState(var/selblock=0) var/real_block - if(!selblock) + if(selblock==0) real_block=block selblock=1 else @@ -33,7 +33,7 @@ /obj/item/weapon/dnainjector/proc/SetState(var/on, var/selblock=0) var/real_block - if(!selblock) + if(selblock==0) real_block=block selblock=1 else @@ -113,7 +113,16 @@ inuse = 0 M.requests += O if (dnatype == "se") - if(!block) + if(block)// Isolated injector + testing("Isolated block [block] injector with contents: [english_list(dna)]") + if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") + log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + else + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]") + else + testing("DNA injector with contents: [english_list(dna)]") if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human) ) message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") log_attack("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") @@ -121,13 +130,6 @@ else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") log_attack("[key_name(user)] injected [key_name(M)] with the [name]") - else // Isolated injector - if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) - message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") - log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") - log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") - else - log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]") else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") log_attack("[key_name(user)] injected [key_name(M)] with the [name]") @@ -145,12 +147,22 @@ user << "\red Apparently it didn't work." return if (dnatype == "se") - if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) - message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") - log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") + if(block)// Isolated injector + testing("Isolated block [block] injector with contents: [english_list(dna)]") + if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") + log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + else + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]") else -// message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") - log_game("[key_name(user)] injected [key_name(M)] with the [name]") + testing("DNA injector with contents: [english_list(dna)]") + if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") + else + // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") + log_game("[key_name(user)] injected [key_name(M)] with the [name]") else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") log_game("[key_name(user)] injected [key_name(M)] with the [name]") diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index e87d9b39fa5..f979071af2c 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -13,6 +13,9 @@ set invisibility = 0 //set background = 1 if (monkeyizing) return + if (update_muts) + update_muts=0 + domutcheck(src,null,MUTCHK_FORCED) ..() var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 99a397cd3f4..a8e987ef84e 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -10,7 +10,10 @@ var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie var/greaterform = "Human" // Used when humanizing a monkey. - var/uni_append = "12C4E2" // Small appearance modifier for different species. + var/ico = "monkey" // Used when updating icons. + //var/uni_append = "12C4E2" // Small appearance modifier for different species. + var/list/uni_append = list(0x12C,0x4E2) // Same as above for DNA2. + var/update_muts = 1 // Monkey gene must be set at start. /mob/living/carbon/monkey/tajara name = "farwa" @@ -52,13 +55,20 @@ //dna.uni_identity = "00600200A00E0110148FC01300B009" //dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" dna.unique_enzymes = md5(name) - //////////blah - var/gendervar - if (gender == MALE) - gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) - else - gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) - dna.uni_identity += "[gendervar][uni_append]" + + // We're a monkey + dna.SetSEState(MONKEYBLOCK, 1) + // Fix gender + dna.SetUIState(DNA_UI_GENDER, gender != MALE, 1) + + // Set the blocks to uni_append, if needed. + if(uni_append.len>0) + for(var/b=1;b<=uni_append.len;b++) + dna.SetUIValue(DNA_UI_LENGTH-(uni_append.len-b),uni_append[b], 1) + dna.UpdateUI() + + update_muts=1 + ..() update_icons() return