From a36982a677ef5e587ca7be39d7609a85cc6500d0 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Fri, 17 Feb 2012 19:37:48 -0700 Subject: [PATCH] DNA and chooseable disabilities! Yaaay! --- baystation12.dme | 1 + code/defines/global.dm | 17 ++ code/defines/mob/mob.dm | 1 - code/game/atom_procs.dm | 5 + code/game/dna.dm | 171 +++++++++++++----- code/game/events/Events/VirusEpidemic.dm | 2 +- .../gamemodes/changeling/changeling_powers.dm | 4 +- code/game/gamemodes/setupgame.dm | 59 +++++- code/game/jobs/job_controller.dm | 6 + code/game/magic/cultist/runes.dm | 2 +- code/game/objects/devices/flashlight.dm | 2 +- code/game/objects/items/item.dm | 2 +- code/game/objects/items/weapons/grenades.dm | 4 +- .../objects/items/weapons/surgery_tools.dm | 2 +- code/game/objects/items/weapons/tools.dm | 2 +- code/game/objects/tables_racks.dm | 9 +- code/modules/chemical/Chemistry-Reagents.dm | 3 - code/modules/clothing/glasses.dm | 1 + code/modules/clothing/glasses/glasses.dm | 1 + .../carbon/alien/humanoid/caste/hunter.dm | 4 +- .../carbon/alien/humanoid/caste/sentinel.dm | 4 +- .../mob/living/carbon/alien/humanoid/life.dm | 4 +- .../mob/living/carbon/alien/humanoid/queen.dm | 4 +- .../mob/living/carbon/alien/larva/life.dm | 4 +- code/modules/mob/living/carbon/brain/life.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 99 ++++++++++ code/modules/mob/living/carbon/human/life.dm | 57 +++++- .../mob/living/carbon/human/whisper.dm | 2 +- .../modules/mob/living/carbon/metroid/life.dm | 4 +- code/modules/mob/living/carbon/monkey/life.dm | 4 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- code/modules/mob/living/living.dm | 2 + code/modules/mob/living/say.dm | 2 +- code/modules/mob/living/silicon/robot/life.dm | 4 +- code/modules/mob/mob.dm | 6 +- code/modules/mob/new_player/new_player.dm | 1 + code/modules/mob/new_player/preferences.dm | 47 ++++- code/modules/mob/new_player/savefile.dm | 5 + code/setup.dm | 12 +- icons/obj/device.dmi | Bin 18756 -> 19170 bytes 40 files changed, 463 insertions(+), 102 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 45853abe79c..baed6e5b6da 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -637,6 +637,7 @@ #include "code\game\objects\devices\chameleonproj.dm" #include "code\game\objects\devices\flash.dm" #include "code\game\objects\devices\flashlight.dm" +#include "code\game\objects\devices\geneanalyzer.dm" #include "code\game\objects\devices\infra_sensor.dm" #include "code\game\objects\devices\multitool.dm" #include "code\game\objects\devices\paicard.dm" diff --git a/code/defines/global.dm b/code/defines/global.dm index 170b887a2be..6ab31cc2054 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -37,6 +37,23 @@ var FAKEBLOCK = 0 BLOCKADD = 0 DIFFMUT = 0 + HEADACHEBLOCK = 0 + COUGHBLOCK = 0 + TWITCHBLOCK = 0 + NERVOUSBLOCK = 0 + NOBREATHBLOCK = 0 + REMOTEVIEWBLOCK = 0 + REGENERATEBLOCK = 0 + INCREASERUNBLOCK = 0 + REMOTETALKBLOCK = 0 + MORPHBLOCK = 0 + BLENDBLOCK = 0 + HALLUCINATIONBLOCK = 0 + NOPRINTSBLOCK = 0 + SHOCKIMMUNITYBLOCK = 0 + SMALLSIZEBLOCK = 0 + GLASSESBLOCK = 0 + MONKEYBLOCK = 27 skipupdate = 0 /////////////// diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index 0b8320cc8cd..828db621342 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -66,7 +66,6 @@ var/other_mobs = null var/memory = "" var/poll_answer = 0.0 - var/sdisabilities = 0//Carbon var/disabilities = 0//Carbon var/atom/movable/pulling = null var/stat = 0.0 diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 3ae04a7cb39..411a5e19c22 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -85,6 +85,11 @@ return if (ishuman(M)) add_fibers(M) + if (M.mutations & mFingerprints) + if(src.fingerprintslast != M.key) + src.fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]" + src.fingerprintslast = M.key + return 0 var/mob/living/carbon/human/H = M if (!istype(H.dna, /datum/dna)) return 0 diff --git a/code/game/dna.dm b/code/game/dna.dm index 553c96c2236..b0d6dc91c89 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -1,4 +1,7 @@ /////////////////////////// DNA DATUM + +#define STRUCDNASIZE 27 + /datum/dna var/unique_enzymes = null var/struc_enzymes = null @@ -9,7 +12,7 @@ /datum/dna/proc/check_integrity() //Lazy. if(length(uni_identity) != 39) uni_identity = "00600200A00E0110148FC01300B0095BD7FD3F4" - if(length(struc_enzymes)!= 42) struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4000" + if(length(struc_enzymes)!= 81) struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B02D6" /datum/dna/proc/ready_dna(mob/living/carbon/human/character) @@ -63,7 +66,7 @@ uni_identity = temp - var/mutstring = "2013E85C944C19A4B00185144725785DC6406A4508" + var/mutstring = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B02D6" struc_enzymes = mutstring @@ -84,7 +87,7 @@ /proc/getrightblocks(input,blocknumber,blocksize) var/string - string = copytext(input,blocksize*blocknumber+1,length(input)+1) + string = copytext(input,blocksize*blocknumber+1) if (blocknumber < (length(input)/blocksize)) return string else @@ -152,7 +155,7 @@ if(!M) return var/num var/newdna - num = pick(1,3,FAKEBLOCK,5,CLUMSYBLOCK,7,9,BLINDBLOCK,DEAFBLOCK) + num = pick(GLASSESBLOCK,COUGHBLOCK,FAKEBLOCK,NERVOUSBLOCK,CLUMSYBLOCK,TWITCHBLOCK,HEADACHEBLOCK,BLINDBLOCK,DEAFBLOCK) 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 @@ -172,13 +175,13 @@ if(!M) return M.dna.check_integrity() if(type) - for(var/i = 1, i <= 13, i++) + for(var/i = 1, i <= 26, 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 <= 13, i++) + for(var/i = 1, i <= 26, 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) @@ -263,32 +266,108 @@ else return 0 +/proc/ismuton(var/block,var/mob/M) + return isblockon(getblock(M.dna.struc_enzymes, block,3),block) + /proc/domutcheck(mob/living/M as mob, connected, inj) - //telekinesis = 1 - //firemut = 2 - //xray = 4 - //hulk = 8 - //clumsy = 16 + if (!M) return + //mutations + /* + TK =(1<<0) + COLD_RESISTANCE =(1<<1) + XRAY =(1<<2) + HULK =(1<<3) + CLUMSY =(1<<4) + //FAT =(1<<5) + HUSK =(1<<6) + LASER =(1<<7) + HEAL =(1<<8) + mNobreath =(1<<9) + mRemote =(1<<10) + mRegen =(1<<11) + mRun =(1<<12) + mRemotetalk =(1<<13) + mMorph =(1<<14) + mBlend =(1<<15) + mHallucination =(1<<16) + mFingerprints =(1<<17) + mShock =(1<<18) + mSmallsize =(1<<19) + */ + + //disabilities + //1 = blurry eyes + //2 = headache + //4 = coughing + //8 = twitch + //16 = nervous + //32 = deaf + //64 = mute + //128 = blind + M.dna.check_integrity() M.disabilities = 0 - M.sdisabilities = 0 M.mutations = 0 M.see_in_dark = 2 M.see_invisible = 0 - if (isblockon(getblock(M.dna.struc_enzymes, 1,3),1)) - M.disabilities |= 1 - M << "\red Your eyes feel strange." - if (isblockon(getblock(M.dna.struc_enzymes, HULKBLOCK,3),2)) + if(ismuton(NOBREATHBLOCK,M)) + if(prob(50)) + M << "\blue You feel no need to breathe." + M.mutations |= mNobreath + if(ismuton(REMOTEVIEWBLOCK,M)) + if(prob(50)) + M << "\blue Your mind expands" + M.mutations |= mRemote + if(ismuton(REGENERATEBLOCK,M)) + if(prob(50)) + M << "\blue You feel strange" + M.mutations |= mRegen + if(ismuton(INCREASERUNBLOCK,M)) + if(prob(50)) + M << "\blue You feel quick" + M.mutations |= mRun + if(ismuton(REMOTETALKBLOCK,M)) + if(prob(50)) + M << "\blue You expand your mind outwards" + M.mutations |= mRemotetalk + if(ismuton(MORPHBLOCK,M)) + if(prob(50)) + M.mutations |= mMorph + M << "\blue Your skin feels strange" + if(ismuton(BLENDBLOCK,M)) + if(prob(50)) + M.mutations |= mBlend + M << "\blue You feel alone" + if(ismuton(HALLUCINATIONBLOCK,M)) + if(prob(50)) + M.mutations |= mHallucination + M << "\blue Your mind says 'Hello'" + if(ismuton(NOPRINTSBLOCK,M)) + if(prob(50)) + M.mutations |= mFingerprints + M << "\blue Your fingers feel numb" + if(ismuton(SHOCKIMMUNITYBLOCK,M)) + if(prob(50)) + M.mutations |= mShock + M << "\blue You feel strange" + if(ismuton(SMALLSIZEBLOCK,M)) + if(prob(50)) + M << "\blue Your skin feels rubbery" + M.mutations |= mSmallsize + + + + if (isblockon(getblock(M.dna.struc_enzymes, HULKBLOCK,3),HULKBLOCK)) if(inj || prob(5)) M << "\blue Your muscles hurt." M.mutations |= HULK - if (isblockon(getblock(M.dna.struc_enzymes, 3,3),3)) + if (isblockon(getblock(M.dna.struc_enzymes, HEADACHEBLOCK,3),HEADACHEBLOCK)) M.disabilities |= 2 M << "\red You get a headache." - if (isblockon(getblock(M.dna.struc_enzymes, FAKEBLOCK,3),4)) + if (isblockon(getblock(M.dna.struc_enzymes, FAKEBLOCK,3),FAKEBLOCK)) M << "\red You feel strange." if (prob(95)) if(prob(50)) @@ -297,49 +376,46 @@ randmuti(M) else randmutg(M) - if (isblockon(getblock(M.dna.struc_enzymes, 5,3),5)) + if (isblockon(getblock(M.dna.struc_enzymes, COUGHBLOCK,3),COUGHBLOCK)) M.disabilities |= 4 M << "\red You start coughing." - if (isblockon(getblock(M.dna.struc_enzymes, CLUMSYBLOCK,3),6)) + if (isblockon(getblock(M.dna.struc_enzymes, CLUMSYBLOCK,3),CLUMSYBLOCK)) M << "\red You feel lightheaded." M.mutations |= CLUMSY - if (isblockon(getblock(M.dna.struc_enzymes, 7,3),7)) + if (isblockon(getblock(M.dna.struc_enzymes, TWITCHBLOCK,3),TWITCHBLOCK)) M.disabilities |= 8 M << "\red You twitch." - if (isblockon(getblock(M.dna.struc_enzymes, XRAYBLOCK,3),8)) + if (isblockon(getblock(M.dna.struc_enzymes, XRAYBLOCK,3),XRAYBLOCK)) if(inj || prob(30)) 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 |= XRAY - if (isblockon(getblock(M.dna.struc_enzymes, 9,3),9)) + if (isblockon(getblock(M.dna.struc_enzymes, NERVOUSBLOCK,3),NERVOUSBLOCK)) M.disabilities |= 16 M << "\red You feel nervous." - if (isblockon(getblock(M.dna.struc_enzymes, FIREBLOCK,3),10)) + if (isblockon(getblock(M.dna.struc_enzymes, FIREBLOCK,3),FIREBLOCK)) if(inj || prob(30)) M << "\blue Your body feels warm." M.mutations |= COLD_RESISTANCE - if (isblockon(getblock(M.dna.struc_enzymes, BLINDBLOCK,3),11)) - M.sdisabilities |= 1 + if (isblockon(getblock(M.dna.struc_enzymes, BLINDBLOCK,3),BLINDBLOCK)) + M.disabilities |= 128 M << "\red You can't seem to see anything." - if (isblockon(getblock(M.dna.struc_enzymes, TELEBLOCK,3),12)) + if (isblockon(getblock(M.dna.struc_enzymes, TELEBLOCK,3),TELEBLOCK)) if(inj || prob(15)) M << "\blue You feel smarter." M.mutations |= TK - if (isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),13)) - M.sdisabilities |= 4 + if (isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),DEAFBLOCK)) + M.disabilities |= 32 M.ear_deaf = 1 - M << "\red You can't seem to hear anything..." - - /* 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) - */ + M << "\red Its kinda quiet.." + if (isblockon(getblock(M.dna.struc_enzymes, GLASSESBLOCK,3),GLASSESBLOCK)) + M.disabilities |= 1 + M << "Your eyes feel weird..." //////////////////////////////////////////////////////////// Monkey Block - if (isblockon(getblock(M.dna.struc_enzymes, 14,3),14) && istype(M, /mob/living/carbon/human)) + 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 @@ -409,7 +485,7 @@ del(M) return - if (!isblockon(getblock(M.dna.struc_enzymes, 14,3),14) && !istype(M, /mob/living/carbon/human)) + 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 @@ -902,20 +978,28 @@ 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) src.temphtml += text("Selected Block: []
", src.strucblock) - src.temphtml += text("<- Block ->

", src, src) + src.temphtml += text("<- Block ->

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

", src, src) src.temphtml += "Modify Block:
" src.temphtml += text("Radiation
", src) src.delete = 0 if (href_list["strucmenuplus"]) - if (src.strucblock < 14) + if (src.strucblock < 27) src.strucblock++ dopage(src,"strucmenu") if (href_list["strucmenuminus"]) if (src.strucblock > 1) src.strucblock-- dopage(src,"strucmenu") + if (href_list["strucmenuchoose"]) + var/temp = input("What block?", "Block", src.strucblock) as num + if (temp > 27) + temp = 27 + if (temp < 1) + temp = 1 + src.strucblock = temp + dopage(src,"strucmenu") if (href_list["strucmenusubplus"]) if (src.subblock < 3) src.subblock++ @@ -945,13 +1029,13 @@ /// 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)) + if (prob (20)) oldblock = src.strucblock block = miniscramble(block, src.radstrength, src.radduration) newblock = null - if (src.strucblock > 1 && src.strucblock < 5) + if (src.strucblock > 1 && src.strucblock < STRUCDNASIZE/2) src.strucblock++ - else if (src.strucblock > 5 && src.strucblock < 14) + 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) @@ -962,7 +1046,6 @@ 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) diff --git a/code/game/events/Events/VirusEpidemic.dm b/code/game/events/Events/VirusEpidemic.dm index 9825853a149..fa02c073cf8 100644 --- a/code/game/events/Events/VirusEpidemic.dm +++ b/code/game/events/Events/VirusEpidemic.dm @@ -53,7 +53,7 @@ continue if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.sdisabilities & 1)) //A blindness disease would be the worst. + if((!H.dna) || (H.disabilities & 128)) //A blindness disease would be the worst. continue var/datum/disease/dnaspread/D = new D.strain_data["name"] = H.real_name diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 8672b1f3d8f..4500d17f8f5 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -558,9 +558,9 @@ usr << "\blue We stealthily sting [T]." if(!T.changeling) - T.sdisabilities |= 4 + T.disabilities |= 32 spawn(300) - T.sdisabilities &= ~4 + T.disabilities &= ~32 usr.verbs -= /client/proc/changeling_deaf_sting diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index e1813724151..69d76a45ee7 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -5,18 +5,9 @@ if (prob(75)) DIFFMUT = rand(0,20) - var/list/avnums = new/list() + var/list/avnums = list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26) var/tempnum - avnums.Add(2) - avnums.Add(12) - avnums.Add(10) - avnums.Add(8) - avnums.Add(4) - avnums.Add(11) - avnums.Add(13) - avnums.Add(6) - tempnum = pick(avnums) avnums.Remove(tempnum) HULKBLOCK = tempnum @@ -41,6 +32,54 @@ tempnum = pick(avnums) avnums.Remove(tempnum) BLINDBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + HEADACHEBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + COUGHBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + TWITCHBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + NERVOUSBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + NOBREATHBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + REMOTEVIEWBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + REGENERATEBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + INCREASERUNBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + REMOTETALKBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + MORPHBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + BLENDBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + HALLUCINATIONBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + NOPRINTSBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + SHOCKIMMUNITYBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + SMALLSIZEBLOCK = tempnum + tempnum = pick(avnums) + avnums.Remove(tempnum) + GLASSESBLOCK = tempnum // HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index b165fe74ce5..f6e52efe7fa 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -246,6 +246,12 @@ var/global/datum/controller/occupations/job_master var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H) H.equip_if_possible(BPK, H.slot_back,1) H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack) + //Give'em glasses if they are nearsighted + if(H.disabilities & 1) + var/eqipped = H.equip_if_possible(new /obj/item/clothing/glasses/regular(H), H.slot_glasses) + if(!eqipped) + var/obj/item/clothing/glasses/G = H.slot_glasses + G.prescription = 1 H.update_clothing() return 1 diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm index 95511f603d7..43ce87f50c5 100644 --- a/code/game/magic/cultist/runes.dm +++ b/code/game/magic/cultist/runes.dm @@ -831,7 +831,7 @@ var/list/sacrificed = list() if(prob(5)) C.disabilities |= 1 if(prob(10)) - C.sdisabilities |= 1 + C.disabilities |= 128 C.show_message("\red Suddenly you see red flash that blinds you.", 3) affected++ if(affected) diff --git a/code/game/objects/devices/flashlight.dm b/code/game/objects/devices/flashlight.dm index 922d6dbe129..0ed8fc7172e 100644 --- a/code/game/objects/devices/flashlight.dm +++ b/code/game/objects/devices/flashlight.dm @@ -48,7 +48,7 @@ O.show_message("\blue [(O==user?"You direct":"[user] directs")] [src] to [(M==user? "your":"[M]")] eyes", 1) if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))//robots and aliens are unaffected - if(M.stat > 1 || M.sdisabilities & 1)//mob is dead or fully blind + if(M.stat > 1 || M.disabilities & 128)//mob is dead or fully blind if(M!=user) user.show_message(text("\red [] pupils does not react to the light!", M),1) else if(M.mutations & XRAY)//mob has X-RAY vision diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index c37a7919ca3..a68dbe441e5 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -473,7 +473,7 @@ mob/proc/flash_weak_pain() if (prob(M.eye_stat - 10 + 1)) if(M.stat != 2) M << "\red You go blind!" - M.sdisabilities |= 1 + M.disabilities |= 128 return diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm index 8edac23a62f..11da0553758 100644 --- a/code/game/objects/items/weapons/grenades.dm +++ b/code/game/objects/items/weapons/grenades.dm @@ -208,12 +208,12 @@ FLASHBANG M.disabilities |= 1 if (prob(M.eye_stat - 20 + 1)) M << "\red You can't see anything!" - M.sdisabilities |= 1 + M.disabilities |= 128 if (M.ear_damage >= 15) M << "\red Your ears start to ring badly!" if (prob(M.ear_damage - 10 + 5)) M << "\red You can't hear anything!" - M.sdisabilities |= 4 + M.disabilities |= 32 else if (M.ear_damage >= 5) M << "\red Your ears start to ring!" diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index a02524ceae0..8f918ca7f70 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -531,7 +531,7 @@ CIRCULAR SAW M.updatehealth() else M.take_organ_damage(15) - M.sdisabilities &= ~1 + M.disabilities &= ~128 M:eye_op_stage = 0.0 else diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a6f00c091a0..8bc5ce81fd4 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -248,7 +248,7 @@ WELDINGTOOOL user << "\red Your eyes are really starting to hurt. This can't be good for you!" if (prob(user.eye_stat - 25 + 1)) user << "\red You go blind!" - user.sdisabilities |= 1 + user.disabilities |= 128 else if (prob(user.eye_stat - 15 + 1)) user << "\red You go blind!" user.eye_blind = 5 diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm index 68e77257a07..945752a3c5d 100644 --- a/code/game/objects/tables_racks.dm +++ b/code/game/objects/tables_racks.dm @@ -79,7 +79,7 @@ TABLE AND RACK OBJECT INTERATIONS /obj/structure/table/attack_hand(mob/user as mob) - if ((usr.mutations & HULK)) + if (usr.mutations & HULK) usr << text("\blue You destroy the table.") for(var/mob/O in oviewers()) if ((O.client && !( O.blinded ))) @@ -92,6 +92,13 @@ TABLE AND RACK OBJECT INTERATIONS new /obj/item/weapon/table_parts( src.loc ) src.density = 0 del(src) + if (usr.mutations & mSmallsize) + step(user, get_dir(user, src)) + if (user.loc == src.loc) + user.layer = TURF_LAYER + for(var/mob/M in viewers(user, null)) + M.show_message("[user] hides under the table!", 1) + //Foreach goto(69) return diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 9ff8f835b41..df748a5ab2c 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -840,7 +840,6 @@ datum if(!M) M = holder.my_atom M.mutations = 0 M.disabilities = 0 - M.sdisabilities = 0 ..() return @@ -1302,11 +1301,9 @@ datum holder.remove_reagent("zombiepowder", 5) M.brainloss = 0 M.disabilities = 0 - M.sdisabilities = 0 M.eye_blurry = 0 M.eye_blind = 0 M.disabilities &= ~1 - M.sdisabilities &= ~1 M.SetWeakened(0) M.SetStunned(0) M.SetParalysis(0) diff --git a/code/modules/clothing/glasses.dm b/code/modules/clothing/glasses.dm index 4c1002a97b8..53f7e1eaf86 100644 --- a/code/modules/clothing/glasses.dm +++ b/code/modules/clothing/glasses.dm @@ -7,6 +7,7 @@ vision_flags = 0 darkness_view = 0//Base human is 2 invisa_view = 0 + prescription = 0 /* SEE_SELF // can see self, no matter what diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 539d9b626e6..8186eac57e1 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -41,6 +41,7 @@ desc = "Made by Nerd. Co." icon_state = "glasses" item_state = "glasses" + prescription = 1 /obj/item/clothing/glasses/gglasses name = "Green Glasses" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index d9d9e130dc3..b43dadeaf9f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -147,9 +147,9 @@ src.density = !( src.lying ) - if ((src.sdisabilities & 1)) + if ((src.disabilities & 128)) src.blinded = 1 - if ((src.sdisabilities & 4)) + if ((src.disabilities & 32)) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 6444ee1974a..18068790767 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -148,9 +148,9 @@ src.density = !( src.lying ) - if ((src.sdisabilities & 1)) + if ((src.disabilities & 128)) src.blinded = 1 - if ((src.sdisabilities & 4)) + if ((src.disabilities & 32)) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 2a6bd8680d2..6228ec167a0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -463,9 +463,9 @@ src.density = !( src.lying ) - if ((src.sdisabilities & 1)) + if ((src.disabilities & 128)) src.blinded = 1 - if ((src.sdisabilities & 4)) + if ((src.disabilities & 32)) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 8c2bff36562..ebc027a2411 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -149,9 +149,9 @@ src.density = !( src.lying ) - if ((src.sdisabilities & 1)) + if ((src.disabilities & 128)) src.blinded = 1 - if ((src.sdisabilities & 4)) + if ((src.disabilities & 32)) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 0bffacb7108..1f1e446b401 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -388,9 +388,9 @@ density = !( lying ) - if ((sdisabilities & 1)) + if ((disabilities & 128)) blinded = 1 - if ((sdisabilities & 4)) + if ((disabilities & 32)) ear_deaf = 1 if (eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index e1a26252e98..55c40cb4ce7 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -221,9 +221,9 @@ // density = !( lying ) - if (sdisabilities & 1) + if (disabilities & 128) blinded = 1 - if (sdisabilities & 4) + if (disabilities & 32) ear_deaf = 1 if (eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 67b3c3f3028..0dba3b3ea51 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -194,6 +194,12 @@ if (shock_stage >= 10) tally += 3 + if(tally < 0) + tally = 0 + + if(mutations & mRun) + tally = 0 + return tally /mob/living/carbon/human/Stat() @@ -2431,3 +2437,96 @@ It can still be worn/put on as normal. if(mutations & HULK) return ..() + +/mob/living/carbon/human/proc/morph() + set name = "Morph" + set category = "Superpower" + if(!(src.mutations & mMorph)) + src.verbs -= /mob/living/carbon/human/proc/morph + return + + var/new_facial = input("Please select facial hair color.", "Character Generation") as color + if(new_facial) + r_facial = hex2num(copytext(new_facial, 2, 4)) + g_facial = hex2num(copytext(new_facial, 4, 6)) + b_facial = hex2num(copytext(new_facial, 6, 8)) + + + + var/new_eyes = input("Please select eye color.", "Character Generation") as color + if(new_eyes) + r_eyes = hex2num(copytext(new_eyes, 2, 4)) + g_eyes = hex2num(copytext(new_eyes, 4, 6)) + b_eyes = hex2num(copytext(new_eyes, 6, 8)) + + var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text + + if (new_tone) + s_tone = max(min(round(text2num(new_tone)), 220), 1) + s_tone = -s_tone + 35 + + var/new_style = input("Please select hair style", "Character Generation") as null|anything in list( "Cut Hair", "Short Hair", "Long Hair", "Mohawk", "Balding", "Wave", "Bedhead", "Dreadlocks", "Ponytail", "Bald" ) + + if (new_style) + h_style = new_style + + new_style = input("Please select facial style", "Character Generation") as null|anything in list("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Hogan", "Shaved") + + if (new_style) + f_style = new_style + + var/new_gender = input("Please select gender") as null|anything in list("Male","Female") + if (new_gender) + if(new_gender == "Male") + gender = MALE + else + gender = FEMALE + update_body() + update_face() + update_clothing() + + for(var/mob/M in view()) + M.show_message("[src.name] just morphed!") + +/mob/living/carbon/human/proc/remotesay() + set name = "Project mind" + set category = "Superpower" + if(!(src.mutations & mRemotetalk)) + src.verbs -= /mob/living/carbon/human/proc/remotesay + return + var/list/creatures = list() + for(var/mob/living/carbon/h in world) + creatures += h + var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures + + var/say = input ("What do you wish to say") + if(target.mutations & mRemotetalk) + target.show_message("\blue You hear [src.real_name]'s voice: [say]") + else + target.show_message("\blue You hear a voice: [say]") + usr.show_message("\blue You project your mind into [target.real_name]: [say]") + for(var/mob/dead/observer/G in world) + G.show_message("Telepathic message from [src] to [target]: [say]") + +/mob/living/carbon/human/proc/remoteobserve() + set name = "Remote View" + set category = "Superpower" + + if(!(src.mutations & mRemote)) + src.verbs -= /mob/living/carbon/human/proc/remoteobserve + return + + var/list/mob/creatures = list() + + for(var/mob/living/carbon/h in world) + creatures += h + client.perspective = EYE_PERSPECTIVE + + + + var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures + + if (target) + client.eye = target + else + client.eye = client.mob diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e32ed9eab1b..f0be0d73983 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -172,6 +172,52 @@ for(var/atom/a in hallucinations) del a + + if(mutations & mSmallsize) + if(!(flags & TABLEPASS)) + flags |= TABLEPASS + else + if(flags & TABLEPASS) + flags &= ~TABLEPASS + + if (mutations & mHallucination) + hallucination = 100 + halloss = 0 + + if (mutations & mRegen) + src.bruteloss -= 2 + src.fireloss -= 2 + src.oxyloss -= 2 + src.toxloss -= 2 + + for(var/datum/organ/external/org in organs) + org.brute_dam -= 2 + org.burn_dam -= 2 + org.brute_dam = max(org.brute_dam, 0) + org.burn_dam = max(org.burn_dam, 0) + + if(!(/mob/living/carbon/human/proc/morph in src.verbs)) + if(mutations & mMorph) + src.verbs += /mob/living/carbon/human/proc/morph + else + if(!(mutations & mMorph)) + src.verbs -= /mob/living/carbon/human/proc/morph + + if(!(/mob/living/carbon/human/proc/remoteobserve in src.verbs)) + if(mutations & mRemote) + src.verbs += /mob/living/carbon/human/proc/remoteobserve + else + if(!(mutations & mRemote)) + src.verbs += /mob/living/carbon/human/proc/remoteobserve + + if(!(/mob/living/carbon/human/proc/remotesay in src.verbs)) + if(mutations & mRemotetalk) + src.verbs += /mob/living/carbon/human/proc/remotesay + else + if(!(mutations & mRemotetalk)) + src.verbs -= /mob/living/carbon/human/proc/remotesay + + if (disabilities & 2) if ((prob(1) && paralysis < 1 && r_epil < 1)) src << "\red You have a seizure!" @@ -195,7 +241,7 @@ if(1) emote("twitch") if(2 to 3) - say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") + say("[prob(50) ? ";" : ""][pick("EELS","MOTORBOATS","MERDE","ANTIDISESTABLISHMENTARIANISM","OGOPOGO","POPEMOBILE","RHOMBUS","TUMESCENCE","ZIGGURAT","DIRIGIBLES","WAFFLES","PICKLES","BIKINI","DUCK","KNICKERBOCKERS","LOQUACIOUS","MACADAMIA","MAHOGANY","KUMQUAT","PERCOLATOR","AUBERGINES","FLANGES","GOURDS","DONUTS","CALLIPYGIAN","DARJEELING","DWARFS","MAGMA","ARMOK","BERR","APPLES","SPACEMEN","NINJAS","PIRATES","BUNION")]!") var/old_x = pixel_x var/old_y = pixel_y pixel_x += rand(-2,2) @@ -207,6 +253,7 @@ if (disabilities & 16) if (prob(10)) stuttering = max(10, stuttering) + if (brainloss >= 60 && stat != 2) if (prob(7)) switch(pick(1,2,3)) @@ -374,7 +421,7 @@ else canmove = 1 handle_breath(datum/gas_mixture/breath) - if(nodamage) + if(nodamage || (mutations & mNobreath)) return if(!breath || (breath.total_moles() == 0)) @@ -857,9 +904,9 @@ density = !( lying ) - if ((sdisabilities & 1 || istype(glasses, /obj/item/clothing/glasses/blindfold))) + if ((disabilities & 128 || istype(glasses, /obj/item/clothing/glasses/blindfold))) blinded = 1 - if ((sdisabilities & 4 || istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs))) + if ((disabilities & 32 || istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs))) ear_deaf = 1 if (eye_blurry > 0) @@ -1084,7 +1131,7 @@ else blind.layer = 0 - if (disabilities & 1 && !istype(glasses, /obj/item/clothing/glasses/regular) ) + if (disabilities & 1 && ((glasses && !glasses.prescription) || !glasses)) client.screen += hud_used.vimpaired if (eye_blurry) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 4c3e6ef9a23..e85dac790ca 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -22,7 +22,7 @@ var/mob/living/carbon/human/H = src alt_name = " (as [H.get_visible_name()])" // Mute disability - if (src.sdisabilities & 2) + if (src.disabilities & 64) return if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 1f9933e8a47..85f435aa96a 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -462,9 +462,9 @@ src.density = !( src.lying ) - if (src.sdisabilities & 1) + if (src.disabilities & 128) src.blinded = 1 - if (src.sdisabilities & 4) + if (src.disabilities & 32) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 268e4b0085c..a1f797f8f6e 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -469,9 +469,9 @@ src.density = !( src.lying ) - if (src.sdisabilities & 1) + if (src.disabilities & 128) src.blinded = 1 - if (src.sdisabilities & 4) + if (src.disabilities & 32) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index cbde6f02a06..87177caa61a 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -7,7 +7,7 @@ gender = pick(MALE, FEMALE) dna = new /datum/dna( null ) dna.uni_identity = "00600200A00E0110148FC01300B009" - dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" dna.unique_enzymes = md5(name) //////////blah var/gendervar diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 991df4346b8..861541ac003 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -17,6 +17,8 @@ //sort of a legacy burn method for /electrocute, /shock, and the e_chair /mob/living/proc/burn_skin(burn_amount) if(istype(src, /mob/living/carbon/human)) + if(src.mutations & mShock) + return 0 //world << "DEBUG: burn_skin(), mutations=[mutations]" if (src.mutations & COLD_RESISTANCE) //fireproof return 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index f701ba2a0ab..bc667c7395e 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -53,7 +53,7 @@ return // Mute disability - if (sdisabilities & 2) + if (disabilities & 64) return if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 2af2ec67095..e8221c8c815 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -136,9 +136,9 @@ src.density = !( src.lying ) - if ((src.sdisabilities & 1)) + if ((src.disabilities & 128)) src.blinded = 1 - if ((src.sdisabilities & 4)) + if ((src.disabilities & 32)) src.ear_deaf = 1 if (src.eye_blurry > 0) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 83bf307127f..3c59347ea96 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -43,19 +43,19 @@ /mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) if(!client) return if (type) - if ((type & 1 && (sdisabilities & 1 || (blinded || paralysis))))//Vision related + if ((type & 1 && (disabilities & 128 || (blinded || paralysis))))//Vision related if (!( alt )) return else msg = alt type = alt_type - if ((type & 2 && (sdisabilities & 4 || ear_deaf)))//Hearing related + if ((type & 2 && (disabilities & 32 || ear_deaf)))//Hearing related if (!( alt )) return else msg = alt type = alt_type - if ((type & 1 && sdisabilities & 1)) + if ((type & 1 && disabilities & 128)) return // Added voice muffling for Issue 41. if (stat == 1 || sleeping > 0) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index d864340eff7..e0b443fdbed 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -369,6 +369,7 @@ new_character.dna.ready_dna(new_character) + preferences.copydisabilities(new_character) if(mind) mind.transfer_to(new_character) mind.original = new_character diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 0af50509919..55ccf171db4 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -108,9 +108,10 @@ datum/preferences flavor_text = "" - // slot stuff - var/slotname - var/curslot = 0 + // slot stuff (Why were they var/var? --SkyMarshal) + slotname + curslot = 0 + disabilities = 0 New() hair_style = new/datum/sprite_accessory/hair/short @@ -169,6 +170,8 @@ datum/preferences dat += "
Eyes
" dat += "Change Color
__
" + dat += "
Disabilities: [disabilities]
" + dat += "
Flavor Text
" dat += "Change
" if(lentext(flavor_text) <= 40) @@ -683,6 +686,25 @@ datum/preferences b_type = "A+" UI = UI_OLD midis = 1 + disabilities = 0 + if(link_tags["disabilities"]) + var/temp = input(usr,"Disability number","Disabilities",disabilities) as num + disabilities = min(max(temp,0),63) + usr << "You have chosen..." + if(disabilities == 0) + usr << "No disabilities" + if(disabilities & 1) + usr << "Nearsightedness" + if(disabilities & 2) + usr << "Headaches" + if(disabilities & 4) + usr << "Coughing" + if(disabilities & 8) + usr << "Twitchiness" + if(disabilities & 16) + usr << "Nervousness" + if(disabilities & 32) + usr << "Trenna's Disorder (Deafness)" ShowChoices(user) @@ -738,5 +760,24 @@ datum/preferences character.client.be_alien = be_special&BE_ALIEN character.client.be_pai = be_special&BE_PAI + proc/copydisabilities(mob/living/carbon/human/character) + if(disabilities & 1) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,GLASSESBLOCK,toggledblock(getblock(character.dna.struc_enzymes,GLASSESBLOCK,3)),3) + if(disabilities & 2) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,HEADACHEBLOCK,toggledblock(getblock(character.dna.struc_enzymes,HEADACHEBLOCK,3)),3) + if(disabilities & 4) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,COUGHBLOCK,toggledblock(getblock(character.dna.struc_enzymes,COUGHBLOCK,3)),3) + if(disabilities & 8) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,TWITCHBLOCK,toggledblock(getblock(character.dna.struc_enzymes,TWITCHBLOCK,3)),3) + if(disabilities & 16) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,NERVOUSBLOCK,toggledblock(getblock(character.dna.struc_enzymes,NERVOUSBLOCK,3)),3) + if(disabilities & 32) + character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,DEAFBLOCK,toggledblock(getblock(character.dna.struc_enzymes,DEAFBLOCK,3)),3) + //if(disabilities & 64) + //mute + //if(disabilities & 128) + //character.dna.struc_enzymes = setblock(character.dna.struc_enzymes,BLINDBLOCK,toggledblock(getblock(character.dna.struc_enzymes,BLINDBLOCK,3)),3) + character.disabilities = disabilities + #undef UI_OLD #undef UI_NEW \ No newline at end of file diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index 95ba0bdb751..b58b000ce75 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -139,6 +139,7 @@ datum/preferences/proc/savefile_save(mob/user, slot) F["pregame_music"] << src.pregame_music F["ooccolor"] << src.ooccolor F["lastchangelog"] << src.lastchangelog + F["disabilities"] << src.disabilities return 1 @@ -213,6 +214,10 @@ datum/preferences/proc/savefile_load(mob/user, slot) F["job_engsec_high"] >> src.job_engsec_high F["job_engsec_med"] >> src.job_engsec_med F["job_engsec_low"] >> src.job_engsec_low + F["disabilities"] >> src.disabilities + if(isnull(src.disabilities)) //Sanity checking + src.disabilities = 0 + F["disabilities"] << src.disabilities F["job_alt_titles"] >> job_alt_titles if(!job_alt_titles) diff --git a/code/setup.dm b/code/setup.dm index b062f20ce95..2269e987090 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -159,7 +159,17 @@ var/const HUSK =(1<<6) LASER =(1<<7) HEAL =(1<<8) - + mNobreath =(1<<9) + mRemote =(1<<10) + mRegen =(1<<11) + mRun =(1<<12) + mRemotetalk =(1<<13) + mMorph =(1<<14) + mBlend =(1<<15) + mHallucination =(1<<16) + mFingerprints =(1<<17) + mShock =(1<<18) + mSmallsize =(1<<19) //mob/var/stat things var/const diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 64d4b0adc04810b5f7ff8fa00901e8a45a701786..ac6c756c6001e4cd1a67a7264d57c571a9a8fc25 100644 GIT binary patch literal 19170 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 literal 18756 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